diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c index fd33eaf88a7..503e9d94e64 100644 --- a/src/intel/vulkan/anv_allocator.c +++ b/src/intel/vulkan/anv_allocator.c @@ -1696,16 +1696,18 @@ anv_device_alloc_bo(struct anv_device *device, * MTL(Xe KMD only)/LNL platforms, which incur largest perf penalty from * page misses. */ - if (align64(size, 2 * 1024 * 1024) <= (size * 4 / 3) && - anv_device_has_perf_improvement_with_2mb_pages_oversubscription(device)) - size = align64(size, 2 * 1024 * 1024); - /* bos larger than 1MB can't be allocated with slab but to reduce pages we - * could align size to 64k pages to gain performance with minimum memory - * waste. - */ - else if ((size > (1 * 1024 * 1024)) && - anv_device_has_perf_improvement_with_64k_pages(device)) - size = align64(size, 64 * 1024); + if (!ANV_DEBUG(NO_ALLOC_OVER_SUBSCRIPTION)) { + if (align64(size, 2 * 1024 * 1024) <= (size * 4 / 3) && + anv_device_has_perf_improvement_with_2mb_pages_oversubscription(device)) + size = align64(size, 2 * 1024 * 1024); + /* bos larger than 1MB can't be allocated with slab but to reduce pages we + * could align size to 64k pages to gain performance with minimum memory + * waste. + */ + else if ((size > (1 * 1024 * 1024)) && + anv_device_has_perf_improvement_with_64k_pages(device)) + size = align64(size, 64 * 1024); + } const struct intel_memory_class_instance *regions[2]; uint32_t nregions = 0; diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 32ef3883dbf..8a2afefc040 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -1574,6 +1574,11 @@ anv_vma_alloc(struct anv_device *device, done: pthread_mutex_unlock(&device->vma_mutex); + if (addr == 0 && client_address) { + mesa_logi("Virtual address allocation failed, " + "consider running with ANV_DEBUG=no-alloc-oversubscription"); + } + assert(addr == intel_48b_address(addr)); return intel_canonical_address(addr); } diff --git a/src/intel/vulkan/anv_instance.c b/src/intel/vulkan/anv_instance.c index 8e59eb379aa..b161b76b475 100644 --- a/src/intel/vulkan/anv_instance.c +++ b/src/intel/vulkan/anv_instance.c @@ -119,19 +119,20 @@ static const driOptionDescription anv_dri_options[] = { }; static const struct debug_control debug_control[] = { - { "bindless", ANV_DEBUG_BINDLESS}, - { "desc-dirty", ANV_DEBUG_DESCRIPTOR_DIRTY}, - { "dgc-dump", ANV_DEBUG_DGC_DUMP}, - { "experimental", ANV_DEBUG_EXPERIMENTAL}, - { "no-gpl", ANV_DEBUG_NO_GPL}, - { "no-slab", ANV_DEBUG_NO_SLAB}, - { "no-sparse", ANV_DEBUG_NO_SPARSE}, - { "sparse-trtt", ANV_DEBUG_SPARSE_TRTT}, - { "video-decode", ANV_DEBUG_VIDEO_DECODE}, - { "video-encode", ANV_DEBUG_VIDEO_ENCODE}, - { "shader-dump", ANV_DEBUG_SHADER_DUMP}, - { "shader-hash", ANV_DEBUG_SHADER_HASH}, - { "shader-print", ANV_DEBUG_SHADER_PRINT}, + { "bindless", ANV_DEBUG_BINDLESS}, + { "desc-dirty", ANV_DEBUG_DESCRIPTOR_DIRTY}, + { "dgc-dump", ANV_DEBUG_DGC_DUMP}, + { "experimental", ANV_DEBUG_EXPERIMENTAL}, + { "no-gpl", ANV_DEBUG_NO_GPL}, + { "no-alloc-oversubscription", ANV_DEBUG_NO_ALLOC_OVER_SUBSCRIPTION}, + { "no-slab", ANV_DEBUG_NO_SLAB}, + { "no-sparse", ANV_DEBUG_NO_SPARSE}, + { "sparse-trtt", ANV_DEBUG_SPARSE_TRTT}, + { "video-decode", ANV_DEBUG_VIDEO_DECODE}, + { "video-encode", ANV_DEBUG_VIDEO_ENCODE}, + { "shader-dump", ANV_DEBUG_SHADER_DUMP}, + { "shader-hash", ANV_DEBUG_SHADER_HASH}, + { "shader-print", ANV_DEBUG_SHADER_PRINT}, { NULL, 0 } }; diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 32d04236d73..4d22d9efb16 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1735,20 +1735,21 @@ anv_physical_device_has_vram(const struct anv_physical_device *device) } enum anv_debug { - ANV_DEBUG_BINDLESS = BITFIELD_BIT(0), - ANV_DEBUG_NO_GPL = BITFIELD_BIT(1), - ANV_DEBUG_NO_SECONDARY_CALL = BITFIELD_BIT(2), - ANV_DEBUG_NO_SPARSE = BITFIELD_BIT(3), - ANV_DEBUG_SPARSE_TRTT = BITFIELD_BIT(4), - ANV_DEBUG_VIDEO_DECODE = BITFIELD_BIT(5), - ANV_DEBUG_VIDEO_ENCODE = BITFIELD_BIT(6), - ANV_DEBUG_SHADER_HASH = BITFIELD_BIT(7), - ANV_DEBUG_NO_SLAB = BITFIELD_BIT(8), - ANV_DEBUG_DESCRIPTOR_DIRTY = BITFIELD_BIT(9), - ANV_DEBUG_SHADER_PRINT = BITFIELD_BIT(10), - ANV_DEBUG_SHADER_DUMP = BITFIELD_BIT(11), - ANV_DEBUG_EXPERIMENTAL = BITFIELD_BIT(12), - ANV_DEBUG_DGC_DUMP = BITFIELD_BIT(13), + ANV_DEBUG_BINDLESS = BITFIELD_BIT(0), + ANV_DEBUG_NO_GPL = BITFIELD_BIT(1), + ANV_DEBUG_NO_SECONDARY_CALL = BITFIELD_BIT(2), + ANV_DEBUG_NO_SPARSE = BITFIELD_BIT(3), + ANV_DEBUG_SPARSE_TRTT = BITFIELD_BIT(4), + ANV_DEBUG_VIDEO_DECODE = BITFIELD_BIT(5), + ANV_DEBUG_VIDEO_ENCODE = BITFIELD_BIT(6), + ANV_DEBUG_SHADER_HASH = BITFIELD_BIT(7), + ANV_DEBUG_NO_SLAB = BITFIELD_BIT(8), + ANV_DEBUG_DESCRIPTOR_DIRTY = BITFIELD_BIT(9), + ANV_DEBUG_SHADER_PRINT = BITFIELD_BIT(10), + ANV_DEBUG_SHADER_DUMP = BITFIELD_BIT(11), + ANV_DEBUG_EXPERIMENTAL = BITFIELD_BIT(12), + ANV_DEBUG_DGC_DUMP = BITFIELD_BIT(13), + ANV_DEBUG_NO_ALLOC_OVER_SUBSCRIPTION = BITFIELD_BIT(14), }; extern enum anv_debug anv_debug;