File: intel_common.c

package info (click to toggle)
intel-gpu-tools 2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 62,024 kB
  • sloc: xml: 769,439; ansic: 348,692; python: 8,307; yacc: 2,781; perl: 1,196; sh: 1,178; lex: 487; asm: 227; makefile: 27; lisp: 11
file content (102 lines) | stat: -rw-r--r-- 2,361 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// SPDX-License-Identifier: MIT
/*
 * Copyright © 2024 Intel Corporation
 */

#include "drmtest.h"
#include "intel_chipset.h"
#include "intel_common.h"
#include "i915/intel_memory_region.h"
#include "xe/xe_query.h"

/**
 * is_intel_dgfx:
 * @fd: drm fd
 *
 * Check if Intel device opened at @fd is discrete regardless driver (i915/xe).
 *
 * Returns: True if device is Intel discrete, false otherwise
 */
bool is_intel_dgfx(int fd)
{
	return get_intel_driver(fd) == INTEL_DRIVER_XE ? xe_has_vram(fd) :
							 gem_has_lmem(fd);
}

/**
 * is_intel_system_region:
 * @fd: drm fd
 * @region: region id
 *
 * Check if @region is system region on @fd opened Intel device.
 *
 * Returns: True if @region is system memory, false otherwise
 */
bool is_intel_system_region(int fd, uint64_t region)
{
	enum intel_driver driver = get_intel_driver(fd);
	bool is_system;

	if (driver == INTEL_DRIVER_I915) {
		is_system = IS_SYSTEM_MEMORY_REGION(region);
	} else {
		igt_assert_neq(region, 0);
		is_system = (region == system_memory(fd));
	}

	return is_system;
}

/**
 * is_intel_vram_region:
 * @fd: drm fd
 * @region: region id
 *
 * Check if @region is vram (device memory) region on @fd opened Intel device.
 *
 * Returns: True if @region is vram, false otherwise
 */
bool is_intel_vram_region(int fd, uint64_t region)
{
	enum intel_driver driver = get_intel_driver(fd);
	bool is_vram;

	if (driver == INTEL_DRIVER_I915) {
		is_vram = IS_DEVICE_MEMORY_REGION(region);
	} else {
		igt_assert_neq(region, 0);
		is_vram = (region & (all_memory_regions(fd) & (~system_memory(fd))));
	}

	return is_vram;
}

/**
 * is_intel_region_compressible:
 * @fd: drm fd
 * @region: region id
 *
 * Check if @region is compressible on @fd opened Intel device.
 *
 * Returns: True if @region is compressible, false otherwise
 */
bool is_intel_region_compressible(int fd, uint64_t region)
{
	uint32_t devid = intel_get_drm_devid(fd);
	bool is_dgfx = is_intel_dgfx(fd);
	bool has_flatccs = HAS_FLATCCS(devid);

	/* Integrated or DG1 with aux-ccs */
	if (IS_GEN12(devid) && !has_flatccs)
		return true;

	/* Integrated Xe2+ supports compression on system memory */
	if (intel_gen(devid) >= 20 && !is_dgfx && is_intel_system_region(fd, region))
		return true;

	/* Discrete supports compression on vram */
	if (is_dgfx && is_intel_vram_region(fd, region))
		return true;

	return false;
}