radv: Add support for VK_KHR_dedicated_allocation.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sat, 15 Jul 2017 00:08:00 +0000 (02:08 +0200)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 15 Jul 2017 15:59:38 +0000 (08:59 -0700)
Signed-off-by: Bas Nieuwenhuizen <basni@google.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Acked-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_device.c
src/amd/vulkan/radv_entrypoints_gen.py

index c5d66b8bc6d54bc5162a676049d6fdf786433508..59c4ea8448ee6c3662a1c9ddcb386323d3c3bb69 100644 (file)
@@ -141,6 +141,10 @@ static const VkExtensionProperties common_device_extensions[] = {
                .extensionName = VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME,
                .specVersion = 1,
        },
+       {
+               .extensionName = VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME,
+               .specVersion = 1,
+       },
 };
 
 static VkResult
@@ -2072,8 +2076,8 @@ VkResult radv_AllocateMemory(
                *pMem = VK_NULL_HANDLE;
                return VK_SUCCESS;
        }
-       const VkDedicatedAllocationMemoryAllocateInfoNV *dedicate_info =
-               vk_find_struct_const(pAllocateInfo->pNext, DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV);
+       const VkMemoryDedicatedAllocateInfoKHR *dedicate_info =
+               vk_find_struct_const(pAllocateInfo->pNext, MEMORY_DEDICATED_ALLOCATE_INFO_KHR);
 
        mem = vk_alloc2(&device->alloc, pAllocator, sizeof(*mem), 8,
                          VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
@@ -2217,6 +2221,20 @@ void radv_GetBufferMemoryRequirements2KHR(
 {
        radv_GetBufferMemoryRequirements(device, pInfo->buffer,
                                         &pMemoryRequirements->memoryRequirements);
+
+       vk_foreach_struct(ext, pMemoryRequirements->pNext) {
+               switch (ext->sType) {
+               case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR: {
+                       VkMemoryDedicatedRequirementsKHR *req =
+                                      (VkMemoryDedicatedRequirementsKHR *) ext;
+                       req->requiresDedicatedAllocation = false;
+                       req->prefersDedicatedAllocation = req->requiresDedicatedAllocation;
+                       break;
+               }
+               default:
+                       break;
+               }
+       }
 }
 
 void radv_GetImageMemoryRequirements(
@@ -2239,6 +2257,20 @@ void radv_GetImageMemoryRequirements2KHR(
 {
        radv_GetImageMemoryRequirements(device, pInfo->image,
                                         &pMemoryRequirements->memoryRequirements);
+
+       vk_foreach_struct(ext, pMemoryRequirements->pNext) {
+               switch (ext->sType) {
+               case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR: {
+                       VkMemoryDedicatedRequirementsKHR *req =
+                                      (VkMemoryDedicatedRequirementsKHR *) ext;
+                       req->requiresDedicatedAllocation = false;
+                       req->prefersDedicatedAllocation = req->requiresDedicatedAllocation;
+                       break;
+               }
+               default:
+                       break;
+               }
+       }
 }
 
 void radv_GetImageSparseMemoryRequirements(
index d47a7011197f148724171cbbad6d0efc67b6ac30..d305a07e7d7262d0bc346dbd6848378c481a838c 100644 (file)
@@ -43,6 +43,7 @@ supported_extensions = [
    'VK_KHR_xcb_surface',
    'VK_KHR_xlib_surface',
    'VK_KHR_get_memory_requirements2',
+   'VK_KHR_dedicated_allocation',
 ]
 
 # We generate a static hash table for entry point lookup