anv: Make supports_48bit_addresses a heap property
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 17 May 2017 18:38:16 +0000 (11:38 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 23 May 2017 23:46:40 +0000 (16:46 -0700)
Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
Cc: "17.1" <mesa-stable@lists.freedesktop.org>
src/intel/vulkan/anv_device.c
src/intel/vulkan/anv_private.h

index 9444ff8b6d2e4a60f76d805d893671155b5a81c7..bb02378ab5fbffd9610f219e4ce235c68a8e08f2 100644 (file)
@@ -149,9 +149,10 @@ anv_physical_device_init_heaps(struct anv_physical_device *device, int fd)
    }
 
    device->memory.heap_count = 1;
-   device->memory.heaps[0] = (VkMemoryHeap) {
+   device->memory.heaps[0] = (struct anv_memory_heap) {
       .size = heap_size,
       .flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT,
+      .supports_48bit_addresses = device->supports_48bit_addresses,
    };
 
    return VK_SUCCESS;
@@ -1530,7 +1531,8 @@ VkResult anv_AllocateMemory(
          goto fail;
    }
 
-   if (pdevice->supports_48bit_addresses)
+   assert(mem->type->heapIndex < pdevice->memory.heap_count);
+   if (pdevice->memory.heaps[mem->type->heapIndex].supports_48bit_addresses)
       mem->bo->flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
 
    if (pdevice->has_exec_async)
index 7efcda3bc6cf2d39f3233ccffba5f280746df7ac..c261faa78b828082fb92922908cfcb9820006dad 100644 (file)
@@ -649,6 +649,15 @@ struct anv_memory_type {
    VkBufferUsageFlags      valid_buffer_usage;
 };
 
+struct anv_memory_heap {
+   /* Standard bits passed on to the client */
+   VkDeviceSize      size;
+   VkMemoryHeapFlags flags;
+
+   /* Driver-internal book-keeping */
+   bool              supports_48bit_addresses;
+};
+
 struct anv_physical_device {
     VK_LOADER_DATA                              _loader_data;
 
@@ -678,7 +687,7 @@ struct anv_physical_device {
       uint32_t                                  type_count;
       struct anv_memory_type                    types[VK_MAX_MEMORY_TYPES];
       uint32_t                                  heap_count;
-      VkMemoryHeap                              heaps[VK_MAX_MEMORY_HEAPS];
+      struct anv_memory_heap                    heaps[VK_MAX_MEMORY_HEAPS];
     } memory;
 
     uint8_t                                     pipeline_cache_uuid[VK_UUID_SIZE];