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;
}
|