diff options
Diffstat (limited to 'src/amd/vulkan/radv_device.c')
-rw-r--r-- | src/amd/vulkan/radv_device.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 39d87b5b575..34e65f11e0a 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -173,12 +173,11 @@ radv_physical_device_init_mem_types(struct radv_physical_device *device) .heapIndex = vram_index, }; } - if (gart_index >= 0) { + if (gart_index >= 0 && device->rad_info.has_dedicated_vram) { device->mem_type_indices[type_count] = RADV_MEM_TYPE_GTT_WRITE_COMBINE; device->memory_properties.memoryTypes[type_count++] = (VkMemoryType) { .propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | - VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | - (device->rad_info.has_dedicated_vram ? 0 : VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT), + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, .heapIndex = gart_index, }; } @@ -191,6 +190,19 @@ radv_physical_device_init_mem_types(struct radv_physical_device *device) .heapIndex = visible_vram_index, }; } + if (gart_index >= 0 && !device->rad_info.has_dedicated_vram) { + /* Put GTT after visible VRAM for GPUs without dedicated VRAM + * as they have identical property flags, and according to the + * spec, for types with identical flags, the one with greater + * performance must be given a lower index. */ + device->mem_type_indices[type_count] = RADV_MEM_TYPE_GTT_WRITE_COMBINE; + device->memory_properties.memoryTypes[type_count++] = (VkMemoryType) { + .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, + .heapIndex = gart_index, + }; + } if (gart_index >= 0) { device->mem_type_indices[type_count] = RADV_MEM_TYPE_GTT_CACHED; device->memory_properties.memoryTypes[type_count++] = (VkMemoryType) { |