From 9be333ef548eef1a4d9423c284a551858534e090 Mon Sep 17 00:00:00 2001 From: Boris Zanin Date: Thu, 18 May 2017 08:45:39 +0200 Subject: [PATCH] Definitions for VK_KHR_dedicated_allocation Add definitions for VK_KHR_dedicated_allocation. Components: Vulkan VK-GL-CTS issue: 153 Change-Id: I062e3eb03edfd4d785d5d93775915541bcd4aa02 --- external/vulkancts/framework/vulkan/vkMemUtil.cpp | 67 +++++++++++++++++++++++ external/vulkancts/framework/vulkan/vkMemUtil.hpp | 9 ++- external/vulkancts/scripts/src/vulkan.h.in | 4 ++ 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/external/vulkancts/framework/vulkan/vkMemUtil.cpp b/external/vulkancts/framework/vulkan/vkMemUtil.cpp index d23f6ce..1d933f0 100644 --- a/external/vulkancts/framework/vulkan/vkMemUtil.cpp +++ b/external/vulkancts/framework/vulkan/vkMemUtil.cpp @@ -202,6 +202,73 @@ MovePtr SimpleAllocator::allocate (const VkMemoryRequirements& memRe return MovePtr(new SimpleAllocation(mem, hostPtr)); } +static MovePtr allocateDedicated (const InstanceInterface& vki, + const DeviceInterface& vkd, + const VkPhysicalDevice& physDevice, + const VkDevice device, + const VkMemoryRequirements& memReqs, + const MemoryRequirement requirement, + const void* pNext) +{ + const VkPhysicalDeviceMemoryProperties memoryProperties = getPhysicalDeviceMemoryProperties(vki, physDevice); + const deUint32 memoryTypeNdx = selectMatchingMemoryType(memoryProperties, memReqs.memoryTypeBits, requirement); + const VkMemoryAllocateInfo allocInfo = + { + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // VkStructureType sType + pNext, // const void* pNext + memReqs.size, // VkDeviceSize allocationSize + memoryTypeNdx, // deUint32 memoryTypeIndex + }; + Move mem = allocateMemory(vkd, device, &allocInfo); + MovePtr hostPtr; + + if (requirement & MemoryRequirement::HostVisible) + { + DE_ASSERT(isHostVisibleMemory(memoryProperties, allocInfo.memoryTypeIndex)); + hostPtr = MovePtr(new HostPtr(vkd, device, *mem, 0u, allocInfo.allocationSize, 0u)); + } + + return MovePtr(new SimpleAllocation(mem, hostPtr)); +} + +de::MovePtr allocateDedicated (const InstanceInterface& vki, + const DeviceInterface& vkd, + const VkPhysicalDevice& physDevice, + const VkDevice device, + const VkBuffer buffer, + MemoryRequirement requirement) +{ + const VkMemoryRequirements memoryRequirements = getBufferMemoryRequirements(vkd, device, buffer); + const VkMemoryDedicatedAllocateInfoKHR dedicatedAllocationInfo = + { + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR, // VkStructureType sType + DE_NULL, // const void* pNext + DE_NULL, // VkImage image + buffer // VkBuffer buffer + }; + + return allocateDedicated(vki, vkd, physDevice, device, memoryRequirements, requirement, &dedicatedAllocationInfo); +} + +de::MovePtr allocateDedicated (const InstanceInterface& vki, + const DeviceInterface& vkd, + const VkPhysicalDevice& physDevice, + const VkDevice device, + const VkImage image, + MemoryRequirement requirement) +{ + const VkMemoryRequirements memoryRequirements = getImageMemoryRequirements(vkd, device, image); + const VkMemoryDedicatedAllocateInfoKHR dedicatedAllocationInfo = + { + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR, // VkStructureType sType + DE_NULL, // const void* pNext + image, // VkImage image + DE_NULL // VkBuffer buffer + }; + + return allocateDedicated(vki, vkd, physDevice, device, memoryRequirements, requirement, &dedicatedAllocationInfo); +} + void* mapMemory (const DeviceInterface& vkd, VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags) { void* hostPtr = DE_NULL; diff --git a/external/vulkancts/framework/vulkan/vkMemUtil.hpp b/external/vulkancts/framework/vulkan/vkMemUtil.hpp index a85a944..87c9b61 100644 --- a/external/vulkancts/framework/vulkan/vkMemUtil.hpp +++ b/external/vulkancts/framework/vulkan/vkMemUtil.hpp @@ -133,9 +133,12 @@ private: const VkPhysicalDeviceMemoryProperties m_memProps; }; -void* mapMemory (const DeviceInterface& vkd, VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags); -void flushMappedMemoryRange (const DeviceInterface& vkd, VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size); -void invalidateMappedMemoryRange (const DeviceInterface& vkd, VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size); +de::MovePtr allocateDedicated (const InstanceInterface& vki, const DeviceInterface& vkd, const VkPhysicalDevice& physDevice, const VkDevice device, const VkBuffer buffer, MemoryRequirement requirement); +de::MovePtr allocateDedicated (const InstanceInterface& vki, const DeviceInterface& vkd, const VkPhysicalDevice& physDevice, const VkDevice device, const VkImage image, MemoryRequirement requirement); + +void* mapMemory (const DeviceInterface& vkd, VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags); +void flushMappedMemoryRange (const DeviceInterface& vkd, VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size); +void invalidateMappedMemoryRange (const DeviceInterface& vkd, VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size); } // vk diff --git a/external/vulkancts/scripts/src/vulkan.h.in b/external/vulkancts/scripts/src/vulkan.h.in index 6127314..bbf250a 100644 --- a/external/vulkancts/scripts/src/vulkan.h.in +++ b/external/vulkancts/scripts/src/vulkan.h.in @@ -4161,6 +4161,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR( VkSurfaceFormat2KHR* pSurfaceFormats); #endif + #define VK_KHR_dedicated_allocation 1 #define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 1 #define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation" @@ -4179,6 +4180,7 @@ typedef struct VkMemoryDedicatedAllocateInfoKHR { VkBuffer buffer; } VkMemoryDedicatedAllocateInfoKHR; + #define VK_KHR_get_memory_requirements2 1 #define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1 #define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2" @@ -4236,6 +4238,8 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR( VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements); #endif + + #define VK_EXT_debug_report 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) -- 2.7.4