radv: Always expose non-visible local memory type on dedicated GPUs
authorClément Guérin <libcg@protonmail.com>
Wed, 3 Jun 2020 05:14:44 +0000 (22:14 -0700)
committerMarge Bot <eric+marge@anholt.net>
Thu, 4 Jun 2020 15:16:30 +0000 (15:16 +0000)
DOOM Eternal expects this type, but RADV doesn't expose it when the VRAM
is entirely host-visible, in my case on Fiji. Matches AMDVLK behavior.

Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/3054
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5308>

src/amd/vulkan/radv_device.c

index c6845c5c494701f03bf3c14863cc476a0a82cea4..4d3d0dea3e4435ebe84e18770d097760566f6643 100644 (file)
@@ -162,24 +162,13 @@ radv_physical_device_init_mem_types(struct radv_physical_device *device)
 
        unsigned type_count = 0;
 
-       if (device->rad_info.has_dedicated_vram) {
-               if (vram_index >= 0) {
-                       device->memory_domains[type_count] = RADEON_DOMAIN_VRAM;
-                       device->memory_flags[type_count] = RADEON_FLAG_NO_CPU_ACCESS;
-                       device->memory_properties.memoryTypes[type_count++] = (VkMemoryType) {
-                               .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
-                               .heapIndex = vram_index,
-                       };
-               }
-       } else {
-               if (visible_vram_index >= 0) {
-                       device->memory_domains[type_count] = RADEON_DOMAIN_VRAM;
-                       device->memory_flags[type_count] = RADEON_FLAG_NO_CPU_ACCESS;
-                       device->memory_properties.memoryTypes[type_count++] = (VkMemoryType) {
-                               .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
-                               .heapIndex = visible_vram_index,
-                       };
-               }
+       if (vram_index >= 0 || visible_vram_index >= 0) {
+               device->memory_domains[type_count] = RADEON_DOMAIN_VRAM;
+               device->memory_flags[type_count] = RADEON_FLAG_NO_CPU_ACCESS;
+               device->memory_properties.memoryTypes[type_count++] = (VkMemoryType) {
+                       .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
+                       .heapIndex = vram_index >= 0 ? vram_index : visible_vram_index,
+               };
        }
 
        if (gart_index >= 0) {