Add test for VK_KHR_get_memory_requirements2
authorBoris Zanin <boris.zanin@mobica.com>
Sun, 7 May 2017 12:21:28 +0000 (14:21 +0200)
committerAlexander Galazin <alexander.galazin@arm.com>
Sun, 18 Jun 2017 15:37:49 +0000 (17:37 +0200)
Update tests:
 * dEQP-VK.memory.requirements.buffer.*
 * dEQP-VK.memory.requirements.image.*

Rename tests (add .core subgroup):
 * dEQP-VK.memory.requirements.core.buffer.*
 * dEQP-VK.memory.requirements.core.image.*

Add tests:
 * dEQP-VK.memory.requirements.extended.buffer.*
 * dEQP-VK.memory.requirements.extended.image.*

Components: Vulkan

VK-GL-CTS issue: 391

Change-Id: I307bbf361d36d5f277ff70ce3204d67f8eb59871
(cherry picked from commit 140028f310bf6116a2c9063a5565fae6bf5152bb)

16 files changed:
android/cts/master/vk-master.txt
external/vulkancts/framework/vulkan/vkBasicTypes.inl
external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl
external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl
external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl
external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
external/vulkancts/framework/vulkan/vkStrUtil.inl
external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
external/vulkancts/framework/vulkan/vkStructTypes.inl
external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl
external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
external/vulkancts/modules/vulkan/memory/vktMemoryRequirementsTests.cpp
external/vulkancts/mustpass/1.0.2/vk-default.txt
external/vulkancts/scripts/src/vulkan.h.in

index aae6941..2674fca 100644 (file)
@@ -15321,21 +15321,36 @@ dEQP-VK.memory.pipeline_barrier.all_device.1024
 dEQP-VK.memory.pipeline_barrier.all_device.8192
 dEQP-VK.memory.pipeline_barrier.all_device.65536
 dEQP-VK.memory.pipeline_barrier.all_device.1048576
-dEQP-VK.memory.requirements.buffer.regular
-dEQP-VK.memory.requirements.buffer.sparse
-dEQP-VK.memory.requirements.buffer.sparse_residency
-dEQP-VK.memory.requirements.buffer.sparse_aliased
-dEQP-VK.memory.requirements.buffer.sparse_residency_aliased
-dEQP-VK.memory.requirements.image.regular_tiling_linear
-dEQP-VK.memory.requirements.image.regular_tiling_optimal
-dEQP-VK.memory.requirements.image.transient_tiling_linear
-dEQP-VK.memory.requirements.image.transient_tiling_optimal
-dEQP-VK.memory.requirements.image.sparse_tiling_linear
-dEQP-VK.memory.requirements.image.sparse_tiling_optimal
-dEQP-VK.memory.requirements.image.sparse_residency_tiling_optimal
-dEQP-VK.memory.requirements.image.sparse_aliased_tiling_linear
-dEQP-VK.memory.requirements.image.sparse_aliased_tiling_optimal
-dEQP-VK.memory.requirements.image.sparse_residency_aliased_tiling_optimal
+dEQP-VK.memory.requirements.core.buffer.regular
+dEQP-VK.memory.requirements.core.buffer.sparse
+dEQP-VK.memory.requirements.core.buffer.sparse_residency
+dEQP-VK.memory.requirements.core.buffer.sparse_aliased
+dEQP-VK.memory.requirements.core.buffer.sparse_residency_aliased
+dEQP-VK.memory.requirements.core.image.regular_tiling_linear
+dEQP-VK.memory.requirements.core.image.regular_tiling_optimal
+dEQP-VK.memory.requirements.core.image.transient_tiling_linear
+dEQP-VK.memory.requirements.core.image.transient_tiling_optimal
+dEQP-VK.memory.requirements.core.image.sparse_tiling_linear
+dEQP-VK.memory.requirements.core.image.sparse_tiling_optimal
+dEQP-VK.memory.requirements.core.image.sparse_residency_tiling_optimal
+dEQP-VK.memory.requirements.core.image.sparse_aliased_tiling_linear
+dEQP-VK.memory.requirements.core.image.sparse_aliased_tiling_optimal
+dEQP-VK.memory.requirements.core.image.sparse_residency_aliased_tiling_optimal
+dEQP-VK.memory.requirements.extended.buffer.regular
+dEQP-VK.memory.requirements.extended.buffer.sparse
+dEQP-VK.memory.requirements.extended.buffer.sparse_residency
+dEQP-VK.memory.requirements.extended.buffer.sparse_aliased
+dEQP-VK.memory.requirements.extended.buffer.sparse_residency_aliased
+dEQP-VK.memory.requirements.extended.image.regular_tiling_linear
+dEQP-VK.memory.requirements.extended.image.regular_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.transient_tiling_linear
+dEQP-VK.memory.requirements.extended.image.transient_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.sparse_tiling_linear
+dEQP-VK.memory.requirements.extended.image.sparse_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.sparse_residency_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.sparse_aliased_tiling_linear
+dEQP-VK.memory.requirements.extended.image.sparse_aliased_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.sparse_residency_aliased_tiling_optimal
 dEQP-VK.pipeline.stencil.format.s8_uint.states.front_fail_decc_pass_repl_dfail_inv_comp_not_equal_back_fail_decc_pass_repl_dfail_keep_comp_less
 dEQP-VK.pipeline.stencil.format.s8_uint.states.front_fail_incc_pass_keep_dfail_inv_comp_not_equal_back_fail_decc_pass_repl_dfail_inv_comp_not_equal
 dEQP-VK.pipeline.stencil.format.s8_uint.states.front_fail_wrap_pass_decw_dfail_wrap_comp_less_back_fail_incc_pass_keep_dfail_inv_comp_not_equal
index ea03621..3086304 100644 (file)
@@ -165,6 +165,11 @@ enum VkStructureType
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR                            = 1000119000,
        VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR                                            = 1000119001,
        VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR                                                          = 1000119002,
+       VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR                         = 1000146000,
+       VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR                          = 1000146001,
+       VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR           = 1000146002,
+       VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR                                                     = 1000146003,
+       VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR                        = 1000146004,
 };
 
 enum VkSystemAllocationScope
index 8cc6e9d..90c9f79 100644 (file)
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  */
-virtual void           destroyDevice                                           (VkDevice device, const VkAllocationCallbacks* pAllocator) const;
-virtual void           getDeviceQueue                                          (VkDevice device, deUint32 queueFamilyIndex, deUint32 queueIndex, VkQueue* pQueue) const;
-virtual VkResult       queueSubmit                                                     (VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence) const;
-virtual VkResult       queueWaitIdle                                           (VkQueue queue) const;
-virtual VkResult       deviceWaitIdle                                          (VkDevice device) const;
-virtual VkResult       allocateMemory                                          (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) const;
-virtual void           freeMemory                                                      (VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       mapMemory                                                       (VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const;
-virtual void           unmapMemory                                                     (VkDevice device, VkDeviceMemory memory) const;
-virtual VkResult       flushMappedMemoryRanges                         (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const;
-virtual VkResult       invalidateMappedMemoryRanges            (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const;
-virtual void           getDeviceMemoryCommitment                       (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) const;
-virtual VkResult       bindBufferMemory                                        (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const;
-virtual VkResult       bindImageMemory                                         (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const;
-virtual void           getBufferMemoryRequirements                     (VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) const;
-virtual void           getImageMemoryRequirements                      (VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) const;
-virtual void           getImageSparseMemoryRequirements        (VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) const;
-virtual VkResult       queueBindSparse                                         (VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) const;
-virtual VkResult       createFence                                                     (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const;
-virtual void           destroyFence                                            (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       resetFences                                                     (VkDevice device, deUint32 fenceCount, const VkFence* pFences) const;
-virtual VkResult       getFenceStatus                                          (VkDevice device, VkFence fence) const;
-virtual VkResult       waitForFences                                           (VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout) const;
-virtual VkResult       createSemaphore                                         (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) const;
-virtual void           destroySemaphore                                        (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createEvent                                                     (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) const;
-virtual void           destroyEvent                                            (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       getEventStatus                                          (VkDevice device, VkEvent event) const;
-virtual VkResult       setEvent                                                        (VkDevice device, VkEvent event) const;
-virtual VkResult       resetEvent                                                      (VkDevice device, VkEvent event) const;
-virtual VkResult       createQueryPool                                         (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const;
-virtual void           destroyQueryPool                                        (VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       getQueryPoolResults                                     (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const;
-virtual VkResult       createBuffer                                            (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const;
-virtual void           destroyBuffer                                           (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createBufferView                                        (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const;
-virtual void           destroyBufferView                                       (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createImage                                                     (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) const;
-virtual void           destroyImage                                            (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) const;
-virtual void           getImageSubresourceLayout                       (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) const;
-virtual VkResult       createImageView                                         (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) const;
-virtual void           destroyImageView                                        (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createShaderModule                                      (VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule) const;
-virtual void           destroyShaderModule                                     (VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createPipelineCache                                     (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) const;
-virtual void           destroyPipelineCache                            (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       getPipelineCacheData                            (VkDevice device, VkPipelineCache pipelineCache, deUintptr* pDataSize, void* pData) const;
-virtual VkResult       mergePipelineCaches                                     (VkDevice device, VkPipelineCache dstCache, deUint32 srcCacheCount, const VkPipelineCache* pSrcCaches) const;
-virtual VkResult       createGraphicsPipelines                         (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const;
-virtual VkResult       createComputePipelines                          (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const;
-virtual void           destroyPipeline                                         (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createPipelineLayout                            (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) const;
-virtual void           destroyPipelineLayout                           (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createSampler                                           (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) const;
-virtual void           destroySampler                                          (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createDescriptorSetLayout                       (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) const;
-virtual void           destroyDescriptorSetLayout                      (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createDescriptorPool                            (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) const;
-virtual void           destroyDescriptorPool                           (VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       resetDescriptorPool                                     (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) const;
-virtual VkResult       allocateDescriptorSets                          (VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) const;
-virtual VkResult       freeDescriptorSets                                      (VkDevice device, VkDescriptorPool descriptorPool, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets) const;
-virtual void           updateDescriptorSets                            (VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) const;
-virtual VkResult       createFramebuffer                                       (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) const;
-virtual void           destroyFramebuffer                                      (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       createRenderPass                                        (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const;
-virtual void           destroyRenderPass                                       (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) const;
-virtual void           getRenderAreaGranularity                        (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) const;
-virtual VkResult       createCommandPool                                       (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) const;
-virtual void           destroyCommandPool                                      (VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       resetCommandPool                                        (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) const;
-virtual VkResult       allocateCommandBuffers                          (VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) const;
-virtual void           freeCommandBuffers                                      (VkDevice device, VkCommandPool commandPool, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const;
-virtual VkResult       beginCommandBuffer                                      (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) const;
-virtual VkResult       endCommandBuffer                                        (VkCommandBuffer commandBuffer) const;
-virtual VkResult       resetCommandBuffer                                      (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const;
-virtual void           cmdBindPipeline                                         (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const;
-virtual void           cmdSetViewport                                          (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const;
-virtual void           cmdSetScissor                                           (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const;
-virtual void           cmdSetLineWidth                                         (VkCommandBuffer commandBuffer, float lineWidth) const;
-virtual void           cmdSetDepthBias                                         (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const;
-virtual void           cmdSetBlendConstants                            (VkCommandBuffer commandBuffer, const float blendConstants[4]) const;
-virtual void           cmdSetDepthBounds                                       (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) const;
-virtual void           cmdSetStencilCompareMask                        (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask) const;
-virtual void           cmdSetStencilWriteMask                          (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask) const;
-virtual void           cmdSetStencilReference                          (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference) const;
-virtual void           cmdBindDescriptorSets                           (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets) const;
-virtual void           cmdBindIndexBuffer                                      (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const;
-virtual void           cmdBindVertexBuffers                            (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const;
-virtual void           cmdDraw                                                         (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const;
-virtual void           cmdDrawIndexed                                          (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance) const;
-virtual void           cmdDrawIndirect                                         (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const;
-virtual void           cmdDrawIndexedIndirect                          (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const;
-virtual void           cmdDispatch                                                     (VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const;
-virtual void           cmdDispatchIndirect                                     (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const;
-virtual void           cmdCopyBuffer                                           (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions) const;
-virtual void           cmdCopyImage                                            (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions) const;
-virtual void           cmdBlitImage                                            (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter) const;
-virtual void           cmdCopyBufferToImage                            (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions) const;
-virtual void           cmdCopyImageToBuffer                            (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions) const;
-virtual void           cmdUpdateBuffer                                         (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) const;
-virtual void           cmdFillBuffer                                           (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data) const;
-virtual void           cmdClearColorImage                                      (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const;
-virtual void           cmdClearDepthStencilImage                       (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const;
-virtual void           cmdClearAttachments                                     (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects) const;
-virtual void           cmdResolveImage                                         (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions) const;
-virtual void           cmdSetEvent                                                     (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const;
-virtual void           cmdResetEvent                                           (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const;
-virtual void           cmdWaitEvents                                           (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const;
-virtual void           cmdPipelineBarrier                                      (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const;
-virtual void           cmdBeginQuery                                           (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const;
-virtual void           cmdEndQuery                                                     (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const;
-virtual void           cmdResetQueryPool                                       (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const;
-virtual void           cmdWriteTimestamp                                       (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const;
-virtual void           cmdCopyQueryPoolResults                         (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const;
-virtual void           cmdPushConstants                                        (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const;
-virtual void           cmdBeginRenderPass                                      (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const;
-virtual void           cmdNextSubpass                                          (VkCommandBuffer commandBuffer, VkSubpassContents contents) const;
-virtual void           cmdEndRenderPass                                        (VkCommandBuffer commandBuffer) const;
-virtual void           cmdExecuteCommands                                      (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const;
-virtual VkResult       createSwapchainKHR                                      (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) const;
-virtual void           destroySwapchainKHR                                     (VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       getSwapchainImagesKHR                           (VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages) const;
-virtual VkResult       acquireNextImageKHR                                     (VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex) const;
-virtual VkResult       queuePresentKHR                                         (VkQueue queue, const VkPresentInfoKHR* pPresentInfo) const;
-virtual VkResult       createSharedSwapchainsKHR                       (VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains) const;
-virtual void           trimCommandPoolKHR                                      (VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlagsKHR flags) const;
-virtual void           cmdPushDescriptorSetKHR                         (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 set, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites) const;
-virtual VkResult       createDescriptorUpdateTemplateKHR       (VkDevice device, const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate) const;
-virtual void           destroyDescriptorUpdateTemplateKHR      (VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator) const;
-virtual void           updateDescriptorSetWithTemplateKHR      (VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void* pData) const;
-virtual void           cmdPushDescriptorSetWithTemplateKHR     (VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout, deUint32 set, const void* pData) const;
-virtual VkResult       getSwapchainStatusKHR                           (VkDevice device, VkSwapchainKHR swapchain) const;
-virtual VkResult       getRefreshCycleDurationGOOGLE           (VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) const;
-virtual VkResult       getPastPresentationTimingGOOGLE         (VkDevice device, VkSwapchainKHR swapchain, deUint32* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings) const;
+virtual void           destroyDevice                                                   (VkDevice device, const VkAllocationCallbacks* pAllocator) const;
+virtual void           getDeviceQueue                                                  (VkDevice device, deUint32 queueFamilyIndex, deUint32 queueIndex, VkQueue* pQueue) const;
+virtual VkResult       queueSubmit                                                             (VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence) const;
+virtual VkResult       queueWaitIdle                                                   (VkQueue queue) const;
+virtual VkResult       deviceWaitIdle                                                  (VkDevice device) const;
+virtual VkResult       allocateMemory                                                  (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) const;
+virtual void           freeMemory                                                              (VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       mapMemory                                                               (VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const;
+virtual void           unmapMemory                                                             (VkDevice device, VkDeviceMemory memory) const;
+virtual VkResult       flushMappedMemoryRanges                                 (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const;
+virtual VkResult       invalidateMappedMemoryRanges                    (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const;
+virtual void           getDeviceMemoryCommitment                               (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) const;
+virtual VkResult       bindBufferMemory                                                (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const;
+virtual VkResult       bindImageMemory                                                 (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const;
+virtual void           getBufferMemoryRequirements                             (VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) const;
+virtual void           getImageMemoryRequirements                              (VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) const;
+virtual void           getImageSparseMemoryRequirements                (VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) const;
+virtual VkResult       queueBindSparse                                                 (VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) const;
+virtual VkResult       createFence                                                             (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const;
+virtual void           destroyFence                                                    (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       resetFences                                                             (VkDevice device, deUint32 fenceCount, const VkFence* pFences) const;
+virtual VkResult       getFenceStatus                                                  (VkDevice device, VkFence fence) const;
+virtual VkResult       waitForFences                                                   (VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout) const;
+virtual VkResult       createSemaphore                                                 (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) const;
+virtual void           destroySemaphore                                                (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createEvent                                                             (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) const;
+virtual void           destroyEvent                                                    (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       getEventStatus                                                  (VkDevice device, VkEvent event) const;
+virtual VkResult       setEvent                                                                (VkDevice device, VkEvent event) const;
+virtual VkResult       resetEvent                                                              (VkDevice device, VkEvent event) const;
+virtual VkResult       createQueryPool                                                 (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const;
+virtual void           destroyQueryPool                                                (VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       getQueryPoolResults                                             (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const;
+virtual VkResult       createBuffer                                                    (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const;
+virtual void           destroyBuffer                                                   (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createBufferView                                                (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const;
+virtual void           destroyBufferView                                               (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createImage                                                             (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) const;
+virtual void           destroyImage                                                    (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) const;
+virtual void           getImageSubresourceLayout                               (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) const;
+virtual VkResult       createImageView                                                 (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) const;
+virtual void           destroyImageView                                                (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createShaderModule                                              (VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule) const;
+virtual void           destroyShaderModule                                             (VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createPipelineCache                                             (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) const;
+virtual void           destroyPipelineCache                                    (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       getPipelineCacheData                                    (VkDevice device, VkPipelineCache pipelineCache, deUintptr* pDataSize, void* pData) const;
+virtual VkResult       mergePipelineCaches                                             (VkDevice device, VkPipelineCache dstCache, deUint32 srcCacheCount, const VkPipelineCache* pSrcCaches) const;
+virtual VkResult       createGraphicsPipelines                                 (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const;
+virtual VkResult       createComputePipelines                                  (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const;
+virtual void           destroyPipeline                                                 (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createPipelineLayout                                    (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) const;
+virtual void           destroyPipelineLayout                                   (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createSampler                                                   (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) const;
+virtual void           destroySampler                                                  (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createDescriptorSetLayout                               (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) const;
+virtual void           destroyDescriptorSetLayout                              (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createDescriptorPool                                    (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) const;
+virtual void           destroyDescriptorPool                                   (VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       resetDescriptorPool                                             (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) const;
+virtual VkResult       allocateDescriptorSets                                  (VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) const;
+virtual VkResult       freeDescriptorSets                                              (VkDevice device, VkDescriptorPool descriptorPool, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets) const;
+virtual void           updateDescriptorSets                                    (VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) const;
+virtual VkResult       createFramebuffer                                               (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) const;
+virtual void           destroyFramebuffer                                              (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       createRenderPass                                                (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const;
+virtual void           destroyRenderPass                                               (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) const;
+virtual void           getRenderAreaGranularity                                (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) const;
+virtual VkResult       createCommandPool                                               (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) const;
+virtual void           destroyCommandPool                                              (VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       resetCommandPool                                                (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) const;
+virtual VkResult       allocateCommandBuffers                                  (VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) const;
+virtual void           freeCommandBuffers                                              (VkDevice device, VkCommandPool commandPool, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const;
+virtual VkResult       beginCommandBuffer                                              (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) const;
+virtual VkResult       endCommandBuffer                                                (VkCommandBuffer commandBuffer) const;
+virtual VkResult       resetCommandBuffer                                              (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const;
+virtual void           cmdBindPipeline                                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const;
+virtual void           cmdSetViewport                                                  (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const;
+virtual void           cmdSetScissor                                                   (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const;
+virtual void           cmdSetLineWidth                                                 (VkCommandBuffer commandBuffer, float lineWidth) const;
+virtual void           cmdSetDepthBias                                                 (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const;
+virtual void           cmdSetBlendConstants                                    (VkCommandBuffer commandBuffer, const float blendConstants[4]) const;
+virtual void           cmdSetDepthBounds                                               (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) const;
+virtual void           cmdSetStencilCompareMask                                (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask) const;
+virtual void           cmdSetStencilWriteMask                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask) const;
+virtual void           cmdSetStencilReference                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference) const;
+virtual void           cmdBindDescriptorSets                                   (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets) const;
+virtual void           cmdBindIndexBuffer                                              (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const;
+virtual void           cmdBindVertexBuffers                                    (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const;
+virtual void           cmdDraw                                                                 (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const;
+virtual void           cmdDrawIndexed                                                  (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance) const;
+virtual void           cmdDrawIndirect                                                 (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const;
+virtual void           cmdDrawIndexedIndirect                                  (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const;
+virtual void           cmdDispatch                                                             (VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const;
+virtual void           cmdDispatchIndirect                                             (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const;
+virtual void           cmdCopyBuffer                                                   (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions) const;
+virtual void           cmdCopyImage                                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions) const;
+virtual void           cmdBlitImage                                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter) const;
+virtual void           cmdCopyBufferToImage                                    (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions) const;
+virtual void           cmdCopyImageToBuffer                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions) const;
+virtual void           cmdUpdateBuffer                                                 (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) const;
+virtual void           cmdFillBuffer                                                   (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data) const;
+virtual void           cmdClearColorImage                                              (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const;
+virtual void           cmdClearDepthStencilImage                               (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const;
+virtual void           cmdClearAttachments                                             (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects) const;
+virtual void           cmdResolveImage                                                 (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions) const;
+virtual void           cmdSetEvent                                                             (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const;
+virtual void           cmdResetEvent                                                   (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const;
+virtual void           cmdWaitEvents                                                   (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const;
+virtual void           cmdPipelineBarrier                                              (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const;
+virtual void           cmdBeginQuery                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const;
+virtual void           cmdEndQuery                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const;
+virtual void           cmdResetQueryPool                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const;
+virtual void           cmdWriteTimestamp                                               (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const;
+virtual void           cmdCopyQueryPoolResults                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const;
+virtual void           cmdPushConstants                                                (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const;
+virtual void           cmdBeginRenderPass                                              (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const;
+virtual void           cmdNextSubpass                                                  (VkCommandBuffer commandBuffer, VkSubpassContents contents) const;
+virtual void           cmdEndRenderPass                                                (VkCommandBuffer commandBuffer) const;
+virtual void           cmdExecuteCommands                                              (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const;
+virtual VkResult       createSwapchainKHR                                              (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) const;
+virtual void           destroySwapchainKHR                                             (VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       getSwapchainImagesKHR                                   (VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages) const;
+virtual VkResult       acquireNextImageKHR                                             (VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex) const;
+virtual VkResult       queuePresentKHR                                                 (VkQueue queue, const VkPresentInfoKHR* pPresentInfo) const;
+virtual VkResult       createSharedSwapchainsKHR                               (VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains) const;
+virtual void           trimCommandPoolKHR                                              (VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlagsKHR flags) const;
+virtual void           cmdPushDescriptorSetKHR                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 set, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites) const;
+virtual VkResult       createDescriptorUpdateTemplateKHR               (VkDevice device, const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate) const;
+virtual void           destroyDescriptorUpdateTemplateKHR              (VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator) const;
+virtual void           updateDescriptorSetWithTemplateKHR              (VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void* pData) const;
+virtual void           cmdPushDescriptorSetWithTemplateKHR             (VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout, deUint32 set, const void* pData) const;
+virtual VkResult       getSwapchainStatusKHR                                   (VkDevice device, VkSwapchainKHR swapchain) const;
+virtual void           getImageMemoryRequirements2KHR                  (VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) const;
+virtual void           getBufferMemoryRequirements2KHR                 (VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) const;
+virtual void           getImageSparseMemoryRequirements2KHR    (VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements) const;
+virtual VkResult       getRefreshCycleDurationGOOGLE                   (VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) const;
+virtual VkResult       getPastPresentationTimingGOOGLE                 (VkDevice device, VkSwapchainKHR swapchain, deUint32* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings) const;
index 3b7a702..ede1507 100644 (file)
@@ -667,6 +667,21 @@ VkResult DeviceDriver::getSwapchainStatusKHR (VkDevice device, VkSwapchainKHR sw
        return m_vk.getSwapchainStatusKHR(device, swapchain);
 }
 
+void DeviceDriver::getImageMemoryRequirements2KHR (VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) const
+{
+       m_vk.getImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
+}
+
+void DeviceDriver::getBufferMemoryRequirements2KHR (VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) const
+{
+       m_vk.getBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
+}
+
+void DeviceDriver::getImageSparseMemoryRequirements2KHR (VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements) const
+{
+       m_vk.getImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
+}
+
 VkResult DeviceDriver::getRefreshCycleDurationGOOGLE (VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) const
 {
        return m_vk.getRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
index 02e1940..d99f2c5 100644 (file)
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  */
-DestroyDeviceFunc                                              destroyDevice;
-GetDeviceQueueFunc                                             getDeviceQueue;
-QueueSubmitFunc                                                        queueSubmit;
-QueueWaitIdleFunc                                              queueWaitIdle;
-DeviceWaitIdleFunc                                             deviceWaitIdle;
-AllocateMemoryFunc                                             allocateMemory;
-FreeMemoryFunc                                                 freeMemory;
-MapMemoryFunc                                                  mapMemory;
-UnmapMemoryFunc                                                        unmapMemory;
-FlushMappedMemoryRangesFunc                            flushMappedMemoryRanges;
-InvalidateMappedMemoryRangesFunc               invalidateMappedMemoryRanges;
-GetDeviceMemoryCommitmentFunc                  getDeviceMemoryCommitment;
-BindBufferMemoryFunc                                   bindBufferMemory;
-BindImageMemoryFunc                                            bindImageMemory;
-GetBufferMemoryRequirementsFunc                        getBufferMemoryRequirements;
-GetImageMemoryRequirementsFunc                 getImageMemoryRequirements;
-GetImageSparseMemoryRequirementsFunc   getImageSparseMemoryRequirements;
-QueueBindSparseFunc                                            queueBindSparse;
-CreateFenceFunc                                                        createFence;
-DestroyFenceFunc                                               destroyFence;
-ResetFencesFunc                                                        resetFences;
-GetFenceStatusFunc                                             getFenceStatus;
-WaitForFencesFunc                                              waitForFences;
-CreateSemaphoreFunc                                            createSemaphore;
-DestroySemaphoreFunc                                   destroySemaphore;
-CreateEventFunc                                                        createEvent;
-DestroyEventFunc                                               destroyEvent;
-GetEventStatusFunc                                             getEventStatus;
-SetEventFunc                                                   setEvent;
-ResetEventFunc                                                 resetEvent;
-CreateQueryPoolFunc                                            createQueryPool;
-DestroyQueryPoolFunc                                   destroyQueryPool;
-GetQueryPoolResultsFunc                                        getQueryPoolResults;
-CreateBufferFunc                                               createBuffer;
-DestroyBufferFunc                                              destroyBuffer;
-CreateBufferViewFunc                                   createBufferView;
-DestroyBufferViewFunc                                  destroyBufferView;
-CreateImageFunc                                                        createImage;
-DestroyImageFunc                                               destroyImage;
-GetImageSubresourceLayoutFunc                  getImageSubresourceLayout;
-CreateImageViewFunc                                            createImageView;
-DestroyImageViewFunc                                   destroyImageView;
-CreateShaderModuleFunc                                 createShaderModule;
-DestroyShaderModuleFunc                                        destroyShaderModule;
-CreatePipelineCacheFunc                                        createPipelineCache;
-DestroyPipelineCacheFunc                               destroyPipelineCache;
-GetPipelineCacheDataFunc                               getPipelineCacheData;
-MergePipelineCachesFunc                                        mergePipelineCaches;
-CreateGraphicsPipelinesFunc                            createGraphicsPipelines;
-CreateComputePipelinesFunc                             createComputePipelines;
-DestroyPipelineFunc                                            destroyPipeline;
-CreatePipelineLayoutFunc                               createPipelineLayout;
-DestroyPipelineLayoutFunc                              destroyPipelineLayout;
-CreateSamplerFunc                                              createSampler;
-DestroySamplerFunc                                             destroySampler;
-CreateDescriptorSetLayoutFunc                  createDescriptorSetLayout;
-DestroyDescriptorSetLayoutFunc                 destroyDescriptorSetLayout;
-CreateDescriptorPoolFunc                               createDescriptorPool;
-DestroyDescriptorPoolFunc                              destroyDescriptorPool;
-ResetDescriptorPoolFunc                                        resetDescriptorPool;
-AllocateDescriptorSetsFunc                             allocateDescriptorSets;
-FreeDescriptorSetsFunc                                 freeDescriptorSets;
-UpdateDescriptorSetsFunc                               updateDescriptorSets;
-CreateFramebufferFunc                                  createFramebuffer;
-DestroyFramebufferFunc                                 destroyFramebuffer;
-CreateRenderPassFunc                                   createRenderPass;
-DestroyRenderPassFunc                                  destroyRenderPass;
-GetRenderAreaGranularityFunc                   getRenderAreaGranularity;
-CreateCommandPoolFunc                                  createCommandPool;
-DestroyCommandPoolFunc                                 destroyCommandPool;
-ResetCommandPoolFunc                                   resetCommandPool;
-AllocateCommandBuffersFunc                             allocateCommandBuffers;
-FreeCommandBuffersFunc                                 freeCommandBuffers;
-BeginCommandBufferFunc                                 beginCommandBuffer;
-EndCommandBufferFunc                                   endCommandBuffer;
-ResetCommandBufferFunc                                 resetCommandBuffer;
-CmdBindPipelineFunc                                            cmdBindPipeline;
-CmdSetViewportFunc                                             cmdSetViewport;
-CmdSetScissorFunc                                              cmdSetScissor;
-CmdSetLineWidthFunc                                            cmdSetLineWidth;
-CmdSetDepthBiasFunc                                            cmdSetDepthBias;
-CmdSetBlendConstantsFunc                               cmdSetBlendConstants;
-CmdSetDepthBoundsFunc                                  cmdSetDepthBounds;
-CmdSetStencilCompareMaskFunc                   cmdSetStencilCompareMask;
-CmdSetStencilWriteMaskFunc                             cmdSetStencilWriteMask;
-CmdSetStencilReferenceFunc                             cmdSetStencilReference;
-CmdBindDescriptorSetsFunc                              cmdBindDescriptorSets;
-CmdBindIndexBufferFunc                                 cmdBindIndexBuffer;
-CmdBindVertexBuffersFunc                               cmdBindVertexBuffers;
-CmdDrawFunc                                                            cmdDraw;
-CmdDrawIndexedFunc                                             cmdDrawIndexed;
-CmdDrawIndirectFunc                                            cmdDrawIndirect;
-CmdDrawIndexedIndirectFunc                             cmdDrawIndexedIndirect;
-CmdDispatchFunc                                                        cmdDispatch;
-CmdDispatchIndirectFunc                                        cmdDispatchIndirect;
-CmdCopyBufferFunc                                              cmdCopyBuffer;
-CmdCopyImageFunc                                               cmdCopyImage;
-CmdBlitImageFunc                                               cmdBlitImage;
-CmdCopyBufferToImageFunc                               cmdCopyBufferToImage;
-CmdCopyImageToBufferFunc                               cmdCopyImageToBuffer;
-CmdUpdateBufferFunc                                            cmdUpdateBuffer;
-CmdFillBufferFunc                                              cmdFillBuffer;
-CmdClearColorImageFunc                                 cmdClearColorImage;
-CmdClearDepthStencilImageFunc                  cmdClearDepthStencilImage;
-CmdClearAttachmentsFunc                                        cmdClearAttachments;
-CmdResolveImageFunc                                            cmdResolveImage;
-CmdSetEventFunc                                                        cmdSetEvent;
-CmdResetEventFunc                                              cmdResetEvent;
-CmdWaitEventsFunc                                              cmdWaitEvents;
-CmdPipelineBarrierFunc                                 cmdPipelineBarrier;
-CmdBeginQueryFunc                                              cmdBeginQuery;
-CmdEndQueryFunc                                                        cmdEndQuery;
-CmdResetQueryPoolFunc                                  cmdResetQueryPool;
-CmdWriteTimestampFunc                                  cmdWriteTimestamp;
-CmdCopyQueryPoolResultsFunc                            cmdCopyQueryPoolResults;
-CmdPushConstantsFunc                                   cmdPushConstants;
-CmdBeginRenderPassFunc                                 cmdBeginRenderPass;
-CmdNextSubpassFunc                                             cmdNextSubpass;
-CmdEndRenderPassFunc                                   cmdEndRenderPass;
-CmdExecuteCommandsFunc                                 cmdExecuteCommands;
-CreateSwapchainKHRFunc                                 createSwapchainKHR;
-DestroySwapchainKHRFunc                                        destroySwapchainKHR;
-GetSwapchainImagesKHRFunc                              getSwapchainImagesKHR;
-AcquireNextImageKHRFunc                                        acquireNextImageKHR;
-QueuePresentKHRFunc                                            queuePresentKHR;
-CreateSharedSwapchainsKHRFunc                  createSharedSwapchainsKHR;
-TrimCommandPoolKHRFunc                                 trimCommandPoolKHR;
-CmdPushDescriptorSetKHRFunc                            cmdPushDescriptorSetKHR;
-CreateDescriptorUpdateTemplateKHRFunc  createDescriptorUpdateTemplateKHR;
-DestroyDescriptorUpdateTemplateKHRFunc destroyDescriptorUpdateTemplateKHR;
-UpdateDescriptorSetWithTemplateKHRFunc updateDescriptorSetWithTemplateKHR;
-CmdPushDescriptorSetWithTemplateKHRFunc        cmdPushDescriptorSetWithTemplateKHR;
-GetSwapchainStatusKHRFunc                              getSwapchainStatusKHR;
-GetRefreshCycleDurationGOOGLEFunc              getRefreshCycleDurationGOOGLE;
-GetPastPresentationTimingGOOGLEFunc            getPastPresentationTimingGOOGLE;
+DestroyDeviceFunc                                                      destroyDevice;
+GetDeviceQueueFunc                                                     getDeviceQueue;
+QueueSubmitFunc                                                                queueSubmit;
+QueueWaitIdleFunc                                                      queueWaitIdle;
+DeviceWaitIdleFunc                                                     deviceWaitIdle;
+AllocateMemoryFunc                                                     allocateMemory;
+FreeMemoryFunc                                                         freeMemory;
+MapMemoryFunc                                                          mapMemory;
+UnmapMemoryFunc                                                                unmapMemory;
+FlushMappedMemoryRangesFunc                                    flushMappedMemoryRanges;
+InvalidateMappedMemoryRangesFunc                       invalidateMappedMemoryRanges;
+GetDeviceMemoryCommitmentFunc                          getDeviceMemoryCommitment;
+BindBufferMemoryFunc                                           bindBufferMemory;
+BindImageMemoryFunc                                                    bindImageMemory;
+GetBufferMemoryRequirementsFunc                                getBufferMemoryRequirements;
+GetImageMemoryRequirementsFunc                         getImageMemoryRequirements;
+GetImageSparseMemoryRequirementsFunc           getImageSparseMemoryRequirements;
+QueueBindSparseFunc                                                    queueBindSparse;
+CreateFenceFunc                                                                createFence;
+DestroyFenceFunc                                                       destroyFence;
+ResetFencesFunc                                                                resetFences;
+GetFenceStatusFunc                                                     getFenceStatus;
+WaitForFencesFunc                                                      waitForFences;
+CreateSemaphoreFunc                                                    createSemaphore;
+DestroySemaphoreFunc                                           destroySemaphore;
+CreateEventFunc                                                                createEvent;
+DestroyEventFunc                                                       destroyEvent;
+GetEventStatusFunc                                                     getEventStatus;
+SetEventFunc                                                           setEvent;
+ResetEventFunc                                                         resetEvent;
+CreateQueryPoolFunc                                                    createQueryPool;
+DestroyQueryPoolFunc                                           destroyQueryPool;
+GetQueryPoolResultsFunc                                                getQueryPoolResults;
+CreateBufferFunc                                                       createBuffer;
+DestroyBufferFunc                                                      destroyBuffer;
+CreateBufferViewFunc                                           createBufferView;
+DestroyBufferViewFunc                                          destroyBufferView;
+CreateImageFunc                                                                createImage;
+DestroyImageFunc                                                       destroyImage;
+GetImageSubresourceLayoutFunc                          getImageSubresourceLayout;
+CreateImageViewFunc                                                    createImageView;
+DestroyImageViewFunc                                           destroyImageView;
+CreateShaderModuleFunc                                         createShaderModule;
+DestroyShaderModuleFunc                                                destroyShaderModule;
+CreatePipelineCacheFunc                                                createPipelineCache;
+DestroyPipelineCacheFunc                                       destroyPipelineCache;
+GetPipelineCacheDataFunc                                       getPipelineCacheData;
+MergePipelineCachesFunc                                                mergePipelineCaches;
+CreateGraphicsPipelinesFunc                                    createGraphicsPipelines;
+CreateComputePipelinesFunc                                     createComputePipelines;
+DestroyPipelineFunc                                                    destroyPipeline;
+CreatePipelineLayoutFunc                                       createPipelineLayout;
+DestroyPipelineLayoutFunc                                      destroyPipelineLayout;
+CreateSamplerFunc                                                      createSampler;
+DestroySamplerFunc                                                     destroySampler;
+CreateDescriptorSetLayoutFunc                          createDescriptorSetLayout;
+DestroyDescriptorSetLayoutFunc                         destroyDescriptorSetLayout;
+CreateDescriptorPoolFunc                                       createDescriptorPool;
+DestroyDescriptorPoolFunc                                      destroyDescriptorPool;
+ResetDescriptorPoolFunc                                                resetDescriptorPool;
+AllocateDescriptorSetsFunc                                     allocateDescriptorSets;
+FreeDescriptorSetsFunc                                         freeDescriptorSets;
+UpdateDescriptorSetsFunc                                       updateDescriptorSets;
+CreateFramebufferFunc                                          createFramebuffer;
+DestroyFramebufferFunc                                         destroyFramebuffer;
+CreateRenderPassFunc                                           createRenderPass;
+DestroyRenderPassFunc                                          destroyRenderPass;
+GetRenderAreaGranularityFunc                           getRenderAreaGranularity;
+CreateCommandPoolFunc                                          createCommandPool;
+DestroyCommandPoolFunc                                         destroyCommandPool;
+ResetCommandPoolFunc                                           resetCommandPool;
+AllocateCommandBuffersFunc                                     allocateCommandBuffers;
+FreeCommandBuffersFunc                                         freeCommandBuffers;
+BeginCommandBufferFunc                                         beginCommandBuffer;
+EndCommandBufferFunc                                           endCommandBuffer;
+ResetCommandBufferFunc                                         resetCommandBuffer;
+CmdBindPipelineFunc                                                    cmdBindPipeline;
+CmdSetViewportFunc                                                     cmdSetViewport;
+CmdSetScissorFunc                                                      cmdSetScissor;
+CmdSetLineWidthFunc                                                    cmdSetLineWidth;
+CmdSetDepthBiasFunc                                                    cmdSetDepthBias;
+CmdSetBlendConstantsFunc                                       cmdSetBlendConstants;
+CmdSetDepthBoundsFunc                                          cmdSetDepthBounds;
+CmdSetStencilCompareMaskFunc                           cmdSetStencilCompareMask;
+CmdSetStencilWriteMaskFunc                                     cmdSetStencilWriteMask;
+CmdSetStencilReferenceFunc                                     cmdSetStencilReference;
+CmdBindDescriptorSetsFunc                                      cmdBindDescriptorSets;
+CmdBindIndexBufferFunc                                         cmdBindIndexBuffer;
+CmdBindVertexBuffersFunc                                       cmdBindVertexBuffers;
+CmdDrawFunc                                                                    cmdDraw;
+CmdDrawIndexedFunc                                                     cmdDrawIndexed;
+CmdDrawIndirectFunc                                                    cmdDrawIndirect;
+CmdDrawIndexedIndirectFunc                                     cmdDrawIndexedIndirect;
+CmdDispatchFunc                                                                cmdDispatch;
+CmdDispatchIndirectFunc                                                cmdDispatchIndirect;
+CmdCopyBufferFunc                                                      cmdCopyBuffer;
+CmdCopyImageFunc                                                       cmdCopyImage;
+CmdBlitImageFunc                                                       cmdBlitImage;
+CmdCopyBufferToImageFunc                                       cmdCopyBufferToImage;
+CmdCopyImageToBufferFunc                                       cmdCopyImageToBuffer;
+CmdUpdateBufferFunc                                                    cmdUpdateBuffer;
+CmdFillBufferFunc                                                      cmdFillBuffer;
+CmdClearColorImageFunc                                         cmdClearColorImage;
+CmdClearDepthStencilImageFunc                          cmdClearDepthStencilImage;
+CmdClearAttachmentsFunc                                                cmdClearAttachments;
+CmdResolveImageFunc                                                    cmdResolveImage;
+CmdSetEventFunc                                                                cmdSetEvent;
+CmdResetEventFunc                                                      cmdResetEvent;
+CmdWaitEventsFunc                                                      cmdWaitEvents;
+CmdPipelineBarrierFunc                                         cmdPipelineBarrier;
+CmdBeginQueryFunc                                                      cmdBeginQuery;
+CmdEndQueryFunc                                                                cmdEndQuery;
+CmdResetQueryPoolFunc                                          cmdResetQueryPool;
+CmdWriteTimestampFunc                                          cmdWriteTimestamp;
+CmdCopyQueryPoolResultsFunc                                    cmdCopyQueryPoolResults;
+CmdPushConstantsFunc                                           cmdPushConstants;
+CmdBeginRenderPassFunc                                         cmdBeginRenderPass;
+CmdNextSubpassFunc                                                     cmdNextSubpass;
+CmdEndRenderPassFunc                                           cmdEndRenderPass;
+CmdExecuteCommandsFunc                                         cmdExecuteCommands;
+CreateSwapchainKHRFunc                                         createSwapchainKHR;
+DestroySwapchainKHRFunc                                                destroySwapchainKHR;
+GetSwapchainImagesKHRFunc                                      getSwapchainImagesKHR;
+AcquireNextImageKHRFunc                                                acquireNextImageKHR;
+QueuePresentKHRFunc                                                    queuePresentKHR;
+CreateSharedSwapchainsKHRFunc                          createSharedSwapchainsKHR;
+TrimCommandPoolKHRFunc                                         trimCommandPoolKHR;
+CmdPushDescriptorSetKHRFunc                                    cmdPushDescriptorSetKHR;
+CreateDescriptorUpdateTemplateKHRFunc          createDescriptorUpdateTemplateKHR;
+DestroyDescriptorUpdateTemplateKHRFunc         destroyDescriptorUpdateTemplateKHR;
+UpdateDescriptorSetWithTemplateKHRFunc         updateDescriptorSetWithTemplateKHR;
+CmdPushDescriptorSetWithTemplateKHRFunc                cmdPushDescriptorSetWithTemplateKHR;
+GetSwapchainStatusKHRFunc                                      getSwapchainStatusKHR;
+GetImageMemoryRequirements2KHRFunc                     getImageMemoryRequirements2KHR;
+GetBufferMemoryRequirements2KHRFunc                    getBufferMemoryRequirements2KHR;
+GetImageSparseMemoryRequirements2KHRFunc       getImageSparseMemoryRequirements2KHR;
+GetRefreshCycleDurationGOOGLEFunc                      getRefreshCycleDurationGOOGLE;
+GetPastPresentationTimingGOOGLEFunc                    getPastPresentationTimingGOOGLE;
index fcffc01..95baf37 100644 (file)
@@ -183,6 +183,9 @@ typedef VKAPI_ATTR void                                     (VKAPI_CALL* CmdPushDescriptorSetWithTemplateKHRFunc
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetSwapchainStatusKHRFunc)                                                         (VkDevice device, VkSwapchainKHR swapchain);
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceSurfaceCapabilities2KHRFunc)                      (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceSurfaceFormats2KHRFunc)                           (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, deUint32* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetImageMemoryRequirements2KHRFunc)                                        (VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetBufferMemoryRequirements2KHRFunc)                                       (VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetImageSparseMemoryRequirements2KHRFunc)                          (VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements);
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateDebugReportCallbackEXTFunc)                                          (VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyDebugReportCallbackEXTFunc)                                         (VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* DebugReportMessageEXTFunc)                                                         (VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, deUint64 object, deUintptr location, deInt32 messageCode, const char* pLayerPrefix, const char* pMessage);
index 285fcfa..82b40fb 100644 (file)
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  */
-m_vk.destroyDevice                                                     = (DestroyDeviceFunc)                                           GET_PROC_ADDR("vkDestroyDevice");
-m_vk.getDeviceQueue                                                    = (GetDeviceQueueFunc)                                          GET_PROC_ADDR("vkGetDeviceQueue");
-m_vk.queueSubmit                                                       = (QueueSubmitFunc)                                                     GET_PROC_ADDR("vkQueueSubmit");
-m_vk.queueWaitIdle                                                     = (QueueWaitIdleFunc)                                           GET_PROC_ADDR("vkQueueWaitIdle");
-m_vk.deviceWaitIdle                                                    = (DeviceWaitIdleFunc)                                          GET_PROC_ADDR("vkDeviceWaitIdle");
-m_vk.allocateMemory                                                    = (AllocateMemoryFunc)                                          GET_PROC_ADDR("vkAllocateMemory");
-m_vk.freeMemory                                                                = (FreeMemoryFunc)                                                      GET_PROC_ADDR("vkFreeMemory");
-m_vk.mapMemory                                                         = (MapMemoryFunc)                                                       GET_PROC_ADDR("vkMapMemory");
-m_vk.unmapMemory                                                       = (UnmapMemoryFunc)                                                     GET_PROC_ADDR("vkUnmapMemory");
-m_vk.flushMappedMemoryRanges                           = (FlushMappedMemoryRangesFunc)                         GET_PROC_ADDR("vkFlushMappedMemoryRanges");
-m_vk.invalidateMappedMemoryRanges                      = (InvalidateMappedMemoryRangesFunc)            GET_PROC_ADDR("vkInvalidateMappedMemoryRanges");
-m_vk.getDeviceMemoryCommitment                         = (GetDeviceMemoryCommitmentFunc)                       GET_PROC_ADDR("vkGetDeviceMemoryCommitment");
-m_vk.bindBufferMemory                                          = (BindBufferMemoryFunc)                                        GET_PROC_ADDR("vkBindBufferMemory");
-m_vk.bindImageMemory                                           = (BindImageMemoryFunc)                                         GET_PROC_ADDR("vkBindImageMemory");
-m_vk.getBufferMemoryRequirements                       = (GetBufferMemoryRequirementsFunc)                     GET_PROC_ADDR("vkGetBufferMemoryRequirements");
-m_vk.getImageMemoryRequirements                                = (GetImageMemoryRequirementsFunc)                      GET_PROC_ADDR("vkGetImageMemoryRequirements");
-m_vk.getImageSparseMemoryRequirements          = (GetImageSparseMemoryRequirementsFunc)        GET_PROC_ADDR("vkGetImageSparseMemoryRequirements");
-m_vk.queueBindSparse                                           = (QueueBindSparseFunc)                                         GET_PROC_ADDR("vkQueueBindSparse");
-m_vk.createFence                                                       = (CreateFenceFunc)                                                     GET_PROC_ADDR("vkCreateFence");
-m_vk.destroyFence                                                      = (DestroyFenceFunc)                                            GET_PROC_ADDR("vkDestroyFence");
-m_vk.resetFences                                                       = (ResetFencesFunc)                                                     GET_PROC_ADDR("vkResetFences");
-m_vk.getFenceStatus                                                    = (GetFenceStatusFunc)                                          GET_PROC_ADDR("vkGetFenceStatus");
-m_vk.waitForFences                                                     = (WaitForFencesFunc)                                           GET_PROC_ADDR("vkWaitForFences");
-m_vk.createSemaphore                                           = (CreateSemaphoreFunc)                                         GET_PROC_ADDR("vkCreateSemaphore");
-m_vk.destroySemaphore                                          = (DestroySemaphoreFunc)                                        GET_PROC_ADDR("vkDestroySemaphore");
-m_vk.createEvent                                                       = (CreateEventFunc)                                                     GET_PROC_ADDR("vkCreateEvent");
-m_vk.destroyEvent                                                      = (DestroyEventFunc)                                            GET_PROC_ADDR("vkDestroyEvent");
-m_vk.getEventStatus                                                    = (GetEventStatusFunc)                                          GET_PROC_ADDR("vkGetEventStatus");
-m_vk.setEvent                                                          = (SetEventFunc)                                                        GET_PROC_ADDR("vkSetEvent");
-m_vk.resetEvent                                                                = (ResetEventFunc)                                                      GET_PROC_ADDR("vkResetEvent");
-m_vk.createQueryPool                                           = (CreateQueryPoolFunc)                                         GET_PROC_ADDR("vkCreateQueryPool");
-m_vk.destroyQueryPool                                          = (DestroyQueryPoolFunc)                                        GET_PROC_ADDR("vkDestroyQueryPool");
-m_vk.getQueryPoolResults                                       = (GetQueryPoolResultsFunc)                                     GET_PROC_ADDR("vkGetQueryPoolResults");
-m_vk.createBuffer                                                      = (CreateBufferFunc)                                            GET_PROC_ADDR("vkCreateBuffer");
-m_vk.destroyBuffer                                                     = (DestroyBufferFunc)                                           GET_PROC_ADDR("vkDestroyBuffer");
-m_vk.createBufferView                                          = (CreateBufferViewFunc)                                        GET_PROC_ADDR("vkCreateBufferView");
-m_vk.destroyBufferView                                         = (DestroyBufferViewFunc)                                       GET_PROC_ADDR("vkDestroyBufferView");
-m_vk.createImage                                                       = (CreateImageFunc)                                                     GET_PROC_ADDR("vkCreateImage");
-m_vk.destroyImage                                                      = (DestroyImageFunc)                                            GET_PROC_ADDR("vkDestroyImage");
-m_vk.getImageSubresourceLayout                         = (GetImageSubresourceLayoutFunc)                       GET_PROC_ADDR("vkGetImageSubresourceLayout");
-m_vk.createImageView                                           = (CreateImageViewFunc)                                         GET_PROC_ADDR("vkCreateImageView");
-m_vk.destroyImageView                                          = (DestroyImageViewFunc)                                        GET_PROC_ADDR("vkDestroyImageView");
-m_vk.createShaderModule                                                = (CreateShaderModuleFunc)                                      GET_PROC_ADDR("vkCreateShaderModule");
-m_vk.destroyShaderModule                                       = (DestroyShaderModuleFunc)                                     GET_PROC_ADDR("vkDestroyShaderModule");
-m_vk.createPipelineCache                                       = (CreatePipelineCacheFunc)                                     GET_PROC_ADDR("vkCreatePipelineCache");
-m_vk.destroyPipelineCache                                      = (DestroyPipelineCacheFunc)                            GET_PROC_ADDR("vkDestroyPipelineCache");
-m_vk.getPipelineCacheData                                      = (GetPipelineCacheDataFunc)                            GET_PROC_ADDR("vkGetPipelineCacheData");
-m_vk.mergePipelineCaches                                       = (MergePipelineCachesFunc)                                     GET_PROC_ADDR("vkMergePipelineCaches");
-m_vk.createGraphicsPipelines                           = (CreateGraphicsPipelinesFunc)                         GET_PROC_ADDR("vkCreateGraphicsPipelines");
-m_vk.createComputePipelines                                    = (CreateComputePipelinesFunc)                          GET_PROC_ADDR("vkCreateComputePipelines");
-m_vk.destroyPipeline                                           = (DestroyPipelineFunc)                                         GET_PROC_ADDR("vkDestroyPipeline");
-m_vk.createPipelineLayout                                      = (CreatePipelineLayoutFunc)                            GET_PROC_ADDR("vkCreatePipelineLayout");
-m_vk.destroyPipelineLayout                                     = (DestroyPipelineLayoutFunc)                           GET_PROC_ADDR("vkDestroyPipelineLayout");
-m_vk.createSampler                                                     = (CreateSamplerFunc)                                           GET_PROC_ADDR("vkCreateSampler");
-m_vk.destroySampler                                                    = (DestroySamplerFunc)                                          GET_PROC_ADDR("vkDestroySampler");
-m_vk.createDescriptorSetLayout                         = (CreateDescriptorSetLayoutFunc)                       GET_PROC_ADDR("vkCreateDescriptorSetLayout");
-m_vk.destroyDescriptorSetLayout                                = (DestroyDescriptorSetLayoutFunc)                      GET_PROC_ADDR("vkDestroyDescriptorSetLayout");
-m_vk.createDescriptorPool                                      = (CreateDescriptorPoolFunc)                            GET_PROC_ADDR("vkCreateDescriptorPool");
-m_vk.destroyDescriptorPool                                     = (DestroyDescriptorPoolFunc)                           GET_PROC_ADDR("vkDestroyDescriptorPool");
-m_vk.resetDescriptorPool                                       = (ResetDescriptorPoolFunc)                                     GET_PROC_ADDR("vkResetDescriptorPool");
-m_vk.allocateDescriptorSets                                    = (AllocateDescriptorSetsFunc)                          GET_PROC_ADDR("vkAllocateDescriptorSets");
-m_vk.freeDescriptorSets                                                = (FreeDescriptorSetsFunc)                                      GET_PROC_ADDR("vkFreeDescriptorSets");
-m_vk.updateDescriptorSets                                      = (UpdateDescriptorSetsFunc)                            GET_PROC_ADDR("vkUpdateDescriptorSets");
-m_vk.createFramebuffer                                         = (CreateFramebufferFunc)                                       GET_PROC_ADDR("vkCreateFramebuffer");
-m_vk.destroyFramebuffer                                                = (DestroyFramebufferFunc)                                      GET_PROC_ADDR("vkDestroyFramebuffer");
-m_vk.createRenderPass                                          = (CreateRenderPassFunc)                                        GET_PROC_ADDR("vkCreateRenderPass");
-m_vk.destroyRenderPass                                         = (DestroyRenderPassFunc)                                       GET_PROC_ADDR("vkDestroyRenderPass");
-m_vk.getRenderAreaGranularity                          = (GetRenderAreaGranularityFunc)                        GET_PROC_ADDR("vkGetRenderAreaGranularity");
-m_vk.createCommandPool                                         = (CreateCommandPoolFunc)                                       GET_PROC_ADDR("vkCreateCommandPool");
-m_vk.destroyCommandPool                                                = (DestroyCommandPoolFunc)                                      GET_PROC_ADDR("vkDestroyCommandPool");
-m_vk.resetCommandPool                                          = (ResetCommandPoolFunc)                                        GET_PROC_ADDR("vkResetCommandPool");
-m_vk.allocateCommandBuffers                                    = (AllocateCommandBuffersFunc)                          GET_PROC_ADDR("vkAllocateCommandBuffers");
-m_vk.freeCommandBuffers                                                = (FreeCommandBuffersFunc)                                      GET_PROC_ADDR("vkFreeCommandBuffers");
-m_vk.beginCommandBuffer                                                = (BeginCommandBufferFunc)                                      GET_PROC_ADDR("vkBeginCommandBuffer");
-m_vk.endCommandBuffer                                          = (EndCommandBufferFunc)                                        GET_PROC_ADDR("vkEndCommandBuffer");
-m_vk.resetCommandBuffer                                                = (ResetCommandBufferFunc)                                      GET_PROC_ADDR("vkResetCommandBuffer");
-m_vk.cmdBindPipeline                                           = (CmdBindPipelineFunc)                                         GET_PROC_ADDR("vkCmdBindPipeline");
-m_vk.cmdSetViewport                                                    = (CmdSetViewportFunc)                                          GET_PROC_ADDR("vkCmdSetViewport");
-m_vk.cmdSetScissor                                                     = (CmdSetScissorFunc)                                           GET_PROC_ADDR("vkCmdSetScissor");
-m_vk.cmdSetLineWidth                                           = (CmdSetLineWidthFunc)                                         GET_PROC_ADDR("vkCmdSetLineWidth");
-m_vk.cmdSetDepthBias                                           = (CmdSetDepthBiasFunc)                                         GET_PROC_ADDR("vkCmdSetDepthBias");
-m_vk.cmdSetBlendConstants                                      = (CmdSetBlendConstantsFunc)                            GET_PROC_ADDR("vkCmdSetBlendConstants");
-m_vk.cmdSetDepthBounds                                         = (CmdSetDepthBoundsFunc)                                       GET_PROC_ADDR("vkCmdSetDepthBounds");
-m_vk.cmdSetStencilCompareMask                          = (CmdSetStencilCompareMaskFunc)                        GET_PROC_ADDR("vkCmdSetStencilCompareMask");
-m_vk.cmdSetStencilWriteMask                                    = (CmdSetStencilWriteMaskFunc)                          GET_PROC_ADDR("vkCmdSetStencilWriteMask");
-m_vk.cmdSetStencilReference                                    = (CmdSetStencilReferenceFunc)                          GET_PROC_ADDR("vkCmdSetStencilReference");
-m_vk.cmdBindDescriptorSets                                     = (CmdBindDescriptorSetsFunc)                           GET_PROC_ADDR("vkCmdBindDescriptorSets");
-m_vk.cmdBindIndexBuffer                                                = (CmdBindIndexBufferFunc)                                      GET_PROC_ADDR("vkCmdBindIndexBuffer");
-m_vk.cmdBindVertexBuffers                                      = (CmdBindVertexBuffersFunc)                            GET_PROC_ADDR("vkCmdBindVertexBuffers");
-m_vk.cmdDraw                                                           = (CmdDrawFunc)                                                         GET_PROC_ADDR("vkCmdDraw");
-m_vk.cmdDrawIndexed                                                    = (CmdDrawIndexedFunc)                                          GET_PROC_ADDR("vkCmdDrawIndexed");
-m_vk.cmdDrawIndirect                                           = (CmdDrawIndirectFunc)                                         GET_PROC_ADDR("vkCmdDrawIndirect");
-m_vk.cmdDrawIndexedIndirect                                    = (CmdDrawIndexedIndirectFunc)                          GET_PROC_ADDR("vkCmdDrawIndexedIndirect");
-m_vk.cmdDispatch                                                       = (CmdDispatchFunc)                                                     GET_PROC_ADDR("vkCmdDispatch");
-m_vk.cmdDispatchIndirect                                       = (CmdDispatchIndirectFunc)                                     GET_PROC_ADDR("vkCmdDispatchIndirect");
-m_vk.cmdCopyBuffer                                                     = (CmdCopyBufferFunc)                                           GET_PROC_ADDR("vkCmdCopyBuffer");
-m_vk.cmdCopyImage                                                      = (CmdCopyImageFunc)                                            GET_PROC_ADDR("vkCmdCopyImage");
-m_vk.cmdBlitImage                                                      = (CmdBlitImageFunc)                                            GET_PROC_ADDR("vkCmdBlitImage");
-m_vk.cmdCopyBufferToImage                                      = (CmdCopyBufferToImageFunc)                            GET_PROC_ADDR("vkCmdCopyBufferToImage");
-m_vk.cmdCopyImageToBuffer                                      = (CmdCopyImageToBufferFunc)                            GET_PROC_ADDR("vkCmdCopyImageToBuffer");
-m_vk.cmdUpdateBuffer                                           = (CmdUpdateBufferFunc)                                         GET_PROC_ADDR("vkCmdUpdateBuffer");
-m_vk.cmdFillBuffer                                                     = (CmdFillBufferFunc)                                           GET_PROC_ADDR("vkCmdFillBuffer");
-m_vk.cmdClearColorImage                                                = (CmdClearColorImageFunc)                                      GET_PROC_ADDR("vkCmdClearColorImage");
-m_vk.cmdClearDepthStencilImage                         = (CmdClearDepthStencilImageFunc)                       GET_PROC_ADDR("vkCmdClearDepthStencilImage");
-m_vk.cmdClearAttachments                                       = (CmdClearAttachmentsFunc)                                     GET_PROC_ADDR("vkCmdClearAttachments");
-m_vk.cmdResolveImage                                           = (CmdResolveImageFunc)                                         GET_PROC_ADDR("vkCmdResolveImage");
-m_vk.cmdSetEvent                                                       = (CmdSetEventFunc)                                                     GET_PROC_ADDR("vkCmdSetEvent");
-m_vk.cmdResetEvent                                                     = (CmdResetEventFunc)                                           GET_PROC_ADDR("vkCmdResetEvent");
-m_vk.cmdWaitEvents                                                     = (CmdWaitEventsFunc)                                           GET_PROC_ADDR("vkCmdWaitEvents");
-m_vk.cmdPipelineBarrier                                                = (CmdPipelineBarrierFunc)                                      GET_PROC_ADDR("vkCmdPipelineBarrier");
-m_vk.cmdBeginQuery                                                     = (CmdBeginQueryFunc)                                           GET_PROC_ADDR("vkCmdBeginQuery");
-m_vk.cmdEndQuery                                                       = (CmdEndQueryFunc)                                                     GET_PROC_ADDR("vkCmdEndQuery");
-m_vk.cmdResetQueryPool                                         = (CmdResetQueryPoolFunc)                                       GET_PROC_ADDR("vkCmdResetQueryPool");
-m_vk.cmdWriteTimestamp                                         = (CmdWriteTimestampFunc)                                       GET_PROC_ADDR("vkCmdWriteTimestamp");
-m_vk.cmdCopyQueryPoolResults                           = (CmdCopyQueryPoolResultsFunc)                         GET_PROC_ADDR("vkCmdCopyQueryPoolResults");
-m_vk.cmdPushConstants                                          = (CmdPushConstantsFunc)                                        GET_PROC_ADDR("vkCmdPushConstants");
-m_vk.cmdBeginRenderPass                                                = (CmdBeginRenderPassFunc)                                      GET_PROC_ADDR("vkCmdBeginRenderPass");
-m_vk.cmdNextSubpass                                                    = (CmdNextSubpassFunc)                                          GET_PROC_ADDR("vkCmdNextSubpass");
-m_vk.cmdEndRenderPass                                          = (CmdEndRenderPassFunc)                                        GET_PROC_ADDR("vkCmdEndRenderPass");
-m_vk.cmdExecuteCommands                                                = (CmdExecuteCommandsFunc)                                      GET_PROC_ADDR("vkCmdExecuteCommands");
-m_vk.createSwapchainKHR                                                = (CreateSwapchainKHRFunc)                                      GET_PROC_ADDR("vkCreateSwapchainKHR");
-m_vk.destroySwapchainKHR                                       = (DestroySwapchainKHRFunc)                                     GET_PROC_ADDR("vkDestroySwapchainKHR");
-m_vk.getSwapchainImagesKHR                                     = (GetSwapchainImagesKHRFunc)                           GET_PROC_ADDR("vkGetSwapchainImagesKHR");
-m_vk.acquireNextImageKHR                                       = (AcquireNextImageKHRFunc)                                     GET_PROC_ADDR("vkAcquireNextImageKHR");
-m_vk.queuePresentKHR                                           = (QueuePresentKHRFunc)                                         GET_PROC_ADDR("vkQueuePresentKHR");
-m_vk.createSharedSwapchainsKHR                         = (CreateSharedSwapchainsKHRFunc)                       GET_PROC_ADDR("vkCreateSharedSwapchainsKHR");
-m_vk.trimCommandPoolKHR                                                = (TrimCommandPoolKHRFunc)                                      GET_PROC_ADDR("vkTrimCommandPoolKHR");
-m_vk.cmdPushDescriptorSetKHR                           = (CmdPushDescriptorSetKHRFunc)                         GET_PROC_ADDR("vkCmdPushDescriptorSetKHR");
-m_vk.createDescriptorUpdateTemplateKHR         = (CreateDescriptorUpdateTemplateKHRFunc)       GET_PROC_ADDR("vkCreateDescriptorUpdateTemplateKHR");
-m_vk.destroyDescriptorUpdateTemplateKHR                = (DestroyDescriptorUpdateTemplateKHRFunc)      GET_PROC_ADDR("vkDestroyDescriptorUpdateTemplateKHR");
-m_vk.updateDescriptorSetWithTemplateKHR                = (UpdateDescriptorSetWithTemplateKHRFunc)      GET_PROC_ADDR("vkUpdateDescriptorSetWithTemplateKHR");
-m_vk.cmdPushDescriptorSetWithTemplateKHR       = (CmdPushDescriptorSetWithTemplateKHRFunc)     GET_PROC_ADDR("vkCmdPushDescriptorSetWithTemplateKHR");
-m_vk.getSwapchainStatusKHR                                     = (GetSwapchainStatusKHRFunc)                           GET_PROC_ADDR("vkGetSwapchainStatusKHR");
-m_vk.getRefreshCycleDurationGOOGLE                     = (GetRefreshCycleDurationGOOGLEFunc)           GET_PROC_ADDR("vkGetRefreshCycleDurationGOOGLE");
-m_vk.getPastPresentationTimingGOOGLE           = (GetPastPresentationTimingGOOGLEFunc)         GET_PROC_ADDR("vkGetPastPresentationTimingGOOGLE");
+m_vk.destroyDevice                                                     = (DestroyDeviceFunc)                                                   GET_PROC_ADDR("vkDestroyDevice");
+m_vk.getDeviceQueue                                                    = (GetDeviceQueueFunc)                                                  GET_PROC_ADDR("vkGetDeviceQueue");
+m_vk.queueSubmit                                                       = (QueueSubmitFunc)                                                             GET_PROC_ADDR("vkQueueSubmit");
+m_vk.queueWaitIdle                                                     = (QueueWaitIdleFunc)                                                   GET_PROC_ADDR("vkQueueWaitIdle");
+m_vk.deviceWaitIdle                                                    = (DeviceWaitIdleFunc)                                                  GET_PROC_ADDR("vkDeviceWaitIdle");
+m_vk.allocateMemory                                                    = (AllocateMemoryFunc)                                                  GET_PROC_ADDR("vkAllocateMemory");
+m_vk.freeMemory                                                                = (FreeMemoryFunc)                                                              GET_PROC_ADDR("vkFreeMemory");
+m_vk.mapMemory                                                         = (MapMemoryFunc)                                                               GET_PROC_ADDR("vkMapMemory");
+m_vk.unmapMemory                                                       = (UnmapMemoryFunc)                                                             GET_PROC_ADDR("vkUnmapMemory");
+m_vk.flushMappedMemoryRanges                           = (FlushMappedMemoryRangesFunc)                                 GET_PROC_ADDR("vkFlushMappedMemoryRanges");
+m_vk.invalidateMappedMemoryRanges                      = (InvalidateMappedMemoryRangesFunc)                    GET_PROC_ADDR("vkInvalidateMappedMemoryRanges");
+m_vk.getDeviceMemoryCommitment                         = (GetDeviceMemoryCommitmentFunc)                               GET_PROC_ADDR("vkGetDeviceMemoryCommitment");
+m_vk.bindBufferMemory                                          = (BindBufferMemoryFunc)                                                GET_PROC_ADDR("vkBindBufferMemory");
+m_vk.bindImageMemory                                           = (BindImageMemoryFunc)                                                 GET_PROC_ADDR("vkBindImageMemory");
+m_vk.getBufferMemoryRequirements                       = (GetBufferMemoryRequirementsFunc)                             GET_PROC_ADDR("vkGetBufferMemoryRequirements");
+m_vk.getImageMemoryRequirements                                = (GetImageMemoryRequirementsFunc)                              GET_PROC_ADDR("vkGetImageMemoryRequirements");
+m_vk.getImageSparseMemoryRequirements          = (GetImageSparseMemoryRequirementsFunc)                GET_PROC_ADDR("vkGetImageSparseMemoryRequirements");
+m_vk.queueBindSparse                                           = (QueueBindSparseFunc)                                                 GET_PROC_ADDR("vkQueueBindSparse");
+m_vk.createFence                                                       = (CreateFenceFunc)                                                             GET_PROC_ADDR("vkCreateFence");
+m_vk.destroyFence                                                      = (DestroyFenceFunc)                                                    GET_PROC_ADDR("vkDestroyFence");
+m_vk.resetFences                                                       = (ResetFencesFunc)                                                             GET_PROC_ADDR("vkResetFences");
+m_vk.getFenceStatus                                                    = (GetFenceStatusFunc)                                                  GET_PROC_ADDR("vkGetFenceStatus");
+m_vk.waitForFences                                                     = (WaitForFencesFunc)                                                   GET_PROC_ADDR("vkWaitForFences");
+m_vk.createSemaphore                                           = (CreateSemaphoreFunc)                                                 GET_PROC_ADDR("vkCreateSemaphore");
+m_vk.destroySemaphore                                          = (DestroySemaphoreFunc)                                                GET_PROC_ADDR("vkDestroySemaphore");
+m_vk.createEvent                                                       = (CreateEventFunc)                                                             GET_PROC_ADDR("vkCreateEvent");
+m_vk.destroyEvent                                                      = (DestroyEventFunc)                                                    GET_PROC_ADDR("vkDestroyEvent");
+m_vk.getEventStatus                                                    = (GetEventStatusFunc)                                                  GET_PROC_ADDR("vkGetEventStatus");
+m_vk.setEvent                                                          = (SetEventFunc)                                                                GET_PROC_ADDR("vkSetEvent");
+m_vk.resetEvent                                                                = (ResetEventFunc)                                                              GET_PROC_ADDR("vkResetEvent");
+m_vk.createQueryPool                                           = (CreateQueryPoolFunc)                                                 GET_PROC_ADDR("vkCreateQueryPool");
+m_vk.destroyQueryPool                                          = (DestroyQueryPoolFunc)                                                GET_PROC_ADDR("vkDestroyQueryPool");
+m_vk.getQueryPoolResults                                       = (GetQueryPoolResultsFunc)                                             GET_PROC_ADDR("vkGetQueryPoolResults");
+m_vk.createBuffer                                                      = (CreateBufferFunc)                                                    GET_PROC_ADDR("vkCreateBuffer");
+m_vk.destroyBuffer                                                     = (DestroyBufferFunc)                                                   GET_PROC_ADDR("vkDestroyBuffer");
+m_vk.createBufferView                                          = (CreateBufferViewFunc)                                                GET_PROC_ADDR("vkCreateBufferView");
+m_vk.destroyBufferView                                         = (DestroyBufferViewFunc)                                               GET_PROC_ADDR("vkDestroyBufferView");
+m_vk.createImage                                                       = (CreateImageFunc)                                                             GET_PROC_ADDR("vkCreateImage");
+m_vk.destroyImage                                                      = (DestroyImageFunc)                                                    GET_PROC_ADDR("vkDestroyImage");
+m_vk.getImageSubresourceLayout                         = (GetImageSubresourceLayoutFunc)                               GET_PROC_ADDR("vkGetImageSubresourceLayout");
+m_vk.createImageView                                           = (CreateImageViewFunc)                                                 GET_PROC_ADDR("vkCreateImageView");
+m_vk.destroyImageView                                          = (DestroyImageViewFunc)                                                GET_PROC_ADDR("vkDestroyImageView");
+m_vk.createShaderModule                                                = (CreateShaderModuleFunc)                                              GET_PROC_ADDR("vkCreateShaderModule");
+m_vk.destroyShaderModule                                       = (DestroyShaderModuleFunc)                                             GET_PROC_ADDR("vkDestroyShaderModule");
+m_vk.createPipelineCache                                       = (CreatePipelineCacheFunc)                                             GET_PROC_ADDR("vkCreatePipelineCache");
+m_vk.destroyPipelineCache                                      = (DestroyPipelineCacheFunc)                                    GET_PROC_ADDR("vkDestroyPipelineCache");
+m_vk.getPipelineCacheData                                      = (GetPipelineCacheDataFunc)                                    GET_PROC_ADDR("vkGetPipelineCacheData");
+m_vk.mergePipelineCaches                                       = (MergePipelineCachesFunc)                                             GET_PROC_ADDR("vkMergePipelineCaches");
+m_vk.createGraphicsPipelines                           = (CreateGraphicsPipelinesFunc)                                 GET_PROC_ADDR("vkCreateGraphicsPipelines");
+m_vk.createComputePipelines                                    = (CreateComputePipelinesFunc)                                  GET_PROC_ADDR("vkCreateComputePipelines");
+m_vk.destroyPipeline                                           = (DestroyPipelineFunc)                                                 GET_PROC_ADDR("vkDestroyPipeline");
+m_vk.createPipelineLayout                                      = (CreatePipelineLayoutFunc)                                    GET_PROC_ADDR("vkCreatePipelineLayout");
+m_vk.destroyPipelineLayout                                     = (DestroyPipelineLayoutFunc)                                   GET_PROC_ADDR("vkDestroyPipelineLayout");
+m_vk.createSampler                                                     = (CreateSamplerFunc)                                                   GET_PROC_ADDR("vkCreateSampler");
+m_vk.destroySampler                                                    = (DestroySamplerFunc)                                                  GET_PROC_ADDR("vkDestroySampler");
+m_vk.createDescriptorSetLayout                         = (CreateDescriptorSetLayoutFunc)                               GET_PROC_ADDR("vkCreateDescriptorSetLayout");
+m_vk.destroyDescriptorSetLayout                                = (DestroyDescriptorSetLayoutFunc)                              GET_PROC_ADDR("vkDestroyDescriptorSetLayout");
+m_vk.createDescriptorPool                                      = (CreateDescriptorPoolFunc)                                    GET_PROC_ADDR("vkCreateDescriptorPool");
+m_vk.destroyDescriptorPool                                     = (DestroyDescriptorPoolFunc)                                   GET_PROC_ADDR("vkDestroyDescriptorPool");
+m_vk.resetDescriptorPool                                       = (ResetDescriptorPoolFunc)                                             GET_PROC_ADDR("vkResetDescriptorPool");
+m_vk.allocateDescriptorSets                                    = (AllocateDescriptorSetsFunc)                                  GET_PROC_ADDR("vkAllocateDescriptorSets");
+m_vk.freeDescriptorSets                                                = (FreeDescriptorSetsFunc)                                              GET_PROC_ADDR("vkFreeDescriptorSets");
+m_vk.updateDescriptorSets                                      = (UpdateDescriptorSetsFunc)                                    GET_PROC_ADDR("vkUpdateDescriptorSets");
+m_vk.createFramebuffer                                         = (CreateFramebufferFunc)                                               GET_PROC_ADDR("vkCreateFramebuffer");
+m_vk.destroyFramebuffer                                                = (DestroyFramebufferFunc)                                              GET_PROC_ADDR("vkDestroyFramebuffer");
+m_vk.createRenderPass                                          = (CreateRenderPassFunc)                                                GET_PROC_ADDR("vkCreateRenderPass");
+m_vk.destroyRenderPass                                         = (DestroyRenderPassFunc)                                               GET_PROC_ADDR("vkDestroyRenderPass");
+m_vk.getRenderAreaGranularity                          = (GetRenderAreaGranularityFunc)                                GET_PROC_ADDR("vkGetRenderAreaGranularity");
+m_vk.createCommandPool                                         = (CreateCommandPoolFunc)                                               GET_PROC_ADDR("vkCreateCommandPool");
+m_vk.destroyCommandPool                                                = (DestroyCommandPoolFunc)                                              GET_PROC_ADDR("vkDestroyCommandPool");
+m_vk.resetCommandPool                                          = (ResetCommandPoolFunc)                                                GET_PROC_ADDR("vkResetCommandPool");
+m_vk.allocateCommandBuffers                                    = (AllocateCommandBuffersFunc)                                  GET_PROC_ADDR("vkAllocateCommandBuffers");
+m_vk.freeCommandBuffers                                                = (FreeCommandBuffersFunc)                                              GET_PROC_ADDR("vkFreeCommandBuffers");
+m_vk.beginCommandBuffer                                                = (BeginCommandBufferFunc)                                              GET_PROC_ADDR("vkBeginCommandBuffer");
+m_vk.endCommandBuffer                                          = (EndCommandBufferFunc)                                                GET_PROC_ADDR("vkEndCommandBuffer");
+m_vk.resetCommandBuffer                                                = (ResetCommandBufferFunc)                                              GET_PROC_ADDR("vkResetCommandBuffer");
+m_vk.cmdBindPipeline                                           = (CmdBindPipelineFunc)                                                 GET_PROC_ADDR("vkCmdBindPipeline");
+m_vk.cmdSetViewport                                                    = (CmdSetViewportFunc)                                                  GET_PROC_ADDR("vkCmdSetViewport");
+m_vk.cmdSetScissor                                                     = (CmdSetScissorFunc)                                                   GET_PROC_ADDR("vkCmdSetScissor");
+m_vk.cmdSetLineWidth                                           = (CmdSetLineWidthFunc)                                                 GET_PROC_ADDR("vkCmdSetLineWidth");
+m_vk.cmdSetDepthBias                                           = (CmdSetDepthBiasFunc)                                                 GET_PROC_ADDR("vkCmdSetDepthBias");
+m_vk.cmdSetBlendConstants                                      = (CmdSetBlendConstantsFunc)                                    GET_PROC_ADDR("vkCmdSetBlendConstants");
+m_vk.cmdSetDepthBounds                                         = (CmdSetDepthBoundsFunc)                                               GET_PROC_ADDR("vkCmdSetDepthBounds");
+m_vk.cmdSetStencilCompareMask                          = (CmdSetStencilCompareMaskFunc)                                GET_PROC_ADDR("vkCmdSetStencilCompareMask");
+m_vk.cmdSetStencilWriteMask                                    = (CmdSetStencilWriteMaskFunc)                                  GET_PROC_ADDR("vkCmdSetStencilWriteMask");
+m_vk.cmdSetStencilReference                                    = (CmdSetStencilReferenceFunc)                                  GET_PROC_ADDR("vkCmdSetStencilReference");
+m_vk.cmdBindDescriptorSets                                     = (CmdBindDescriptorSetsFunc)                                   GET_PROC_ADDR("vkCmdBindDescriptorSets");
+m_vk.cmdBindIndexBuffer                                                = (CmdBindIndexBufferFunc)                                              GET_PROC_ADDR("vkCmdBindIndexBuffer");
+m_vk.cmdBindVertexBuffers                                      = (CmdBindVertexBuffersFunc)                                    GET_PROC_ADDR("vkCmdBindVertexBuffers");
+m_vk.cmdDraw                                                           = (CmdDrawFunc)                                                                 GET_PROC_ADDR("vkCmdDraw");
+m_vk.cmdDrawIndexed                                                    = (CmdDrawIndexedFunc)                                                  GET_PROC_ADDR("vkCmdDrawIndexed");
+m_vk.cmdDrawIndirect                                           = (CmdDrawIndirectFunc)                                                 GET_PROC_ADDR("vkCmdDrawIndirect");
+m_vk.cmdDrawIndexedIndirect                                    = (CmdDrawIndexedIndirectFunc)                                  GET_PROC_ADDR("vkCmdDrawIndexedIndirect");
+m_vk.cmdDispatch                                                       = (CmdDispatchFunc)                                                             GET_PROC_ADDR("vkCmdDispatch");
+m_vk.cmdDispatchIndirect                                       = (CmdDispatchIndirectFunc)                                             GET_PROC_ADDR("vkCmdDispatchIndirect");
+m_vk.cmdCopyBuffer                                                     = (CmdCopyBufferFunc)                                                   GET_PROC_ADDR("vkCmdCopyBuffer");
+m_vk.cmdCopyImage                                                      = (CmdCopyImageFunc)                                                    GET_PROC_ADDR("vkCmdCopyImage");
+m_vk.cmdBlitImage                                                      = (CmdBlitImageFunc)                                                    GET_PROC_ADDR("vkCmdBlitImage");
+m_vk.cmdCopyBufferToImage                                      = (CmdCopyBufferToImageFunc)                                    GET_PROC_ADDR("vkCmdCopyBufferToImage");
+m_vk.cmdCopyImageToBuffer                                      = (CmdCopyImageToBufferFunc)                                    GET_PROC_ADDR("vkCmdCopyImageToBuffer");
+m_vk.cmdUpdateBuffer                                           = (CmdUpdateBufferFunc)                                                 GET_PROC_ADDR("vkCmdUpdateBuffer");
+m_vk.cmdFillBuffer                                                     = (CmdFillBufferFunc)                                                   GET_PROC_ADDR("vkCmdFillBuffer");
+m_vk.cmdClearColorImage                                                = (CmdClearColorImageFunc)                                              GET_PROC_ADDR("vkCmdClearColorImage");
+m_vk.cmdClearDepthStencilImage                         = (CmdClearDepthStencilImageFunc)                               GET_PROC_ADDR("vkCmdClearDepthStencilImage");
+m_vk.cmdClearAttachments                                       = (CmdClearAttachmentsFunc)                                             GET_PROC_ADDR("vkCmdClearAttachments");
+m_vk.cmdResolveImage                                           = (CmdResolveImageFunc)                                                 GET_PROC_ADDR("vkCmdResolveImage");
+m_vk.cmdSetEvent                                                       = (CmdSetEventFunc)                                                             GET_PROC_ADDR("vkCmdSetEvent");
+m_vk.cmdResetEvent                                                     = (CmdResetEventFunc)                                                   GET_PROC_ADDR("vkCmdResetEvent");
+m_vk.cmdWaitEvents                                                     = (CmdWaitEventsFunc)                                                   GET_PROC_ADDR("vkCmdWaitEvents");
+m_vk.cmdPipelineBarrier                                                = (CmdPipelineBarrierFunc)                                              GET_PROC_ADDR("vkCmdPipelineBarrier");
+m_vk.cmdBeginQuery                                                     = (CmdBeginQueryFunc)                                                   GET_PROC_ADDR("vkCmdBeginQuery");
+m_vk.cmdEndQuery                                                       = (CmdEndQueryFunc)                                                             GET_PROC_ADDR("vkCmdEndQuery");
+m_vk.cmdResetQueryPool                                         = (CmdResetQueryPoolFunc)                                               GET_PROC_ADDR("vkCmdResetQueryPool");
+m_vk.cmdWriteTimestamp                                         = (CmdWriteTimestampFunc)                                               GET_PROC_ADDR("vkCmdWriteTimestamp");
+m_vk.cmdCopyQueryPoolResults                           = (CmdCopyQueryPoolResultsFunc)                                 GET_PROC_ADDR("vkCmdCopyQueryPoolResults");
+m_vk.cmdPushConstants                                          = (CmdPushConstantsFunc)                                                GET_PROC_ADDR("vkCmdPushConstants");
+m_vk.cmdBeginRenderPass                                                = (CmdBeginRenderPassFunc)                                              GET_PROC_ADDR("vkCmdBeginRenderPass");
+m_vk.cmdNextSubpass                                                    = (CmdNextSubpassFunc)                                                  GET_PROC_ADDR("vkCmdNextSubpass");
+m_vk.cmdEndRenderPass                                          = (CmdEndRenderPassFunc)                                                GET_PROC_ADDR("vkCmdEndRenderPass");
+m_vk.cmdExecuteCommands                                                = (CmdExecuteCommandsFunc)                                              GET_PROC_ADDR("vkCmdExecuteCommands");
+m_vk.createSwapchainKHR                                                = (CreateSwapchainKHRFunc)                                              GET_PROC_ADDR("vkCreateSwapchainKHR");
+m_vk.destroySwapchainKHR                                       = (DestroySwapchainKHRFunc)                                             GET_PROC_ADDR("vkDestroySwapchainKHR");
+m_vk.getSwapchainImagesKHR                                     = (GetSwapchainImagesKHRFunc)                                   GET_PROC_ADDR("vkGetSwapchainImagesKHR");
+m_vk.acquireNextImageKHR                                       = (AcquireNextImageKHRFunc)                                             GET_PROC_ADDR("vkAcquireNextImageKHR");
+m_vk.queuePresentKHR                                           = (QueuePresentKHRFunc)                                                 GET_PROC_ADDR("vkQueuePresentKHR");
+m_vk.createSharedSwapchainsKHR                         = (CreateSharedSwapchainsKHRFunc)                               GET_PROC_ADDR("vkCreateSharedSwapchainsKHR");
+m_vk.trimCommandPoolKHR                                                = (TrimCommandPoolKHRFunc)                                              GET_PROC_ADDR("vkTrimCommandPoolKHR");
+m_vk.cmdPushDescriptorSetKHR                           = (CmdPushDescriptorSetKHRFunc)                                 GET_PROC_ADDR("vkCmdPushDescriptorSetKHR");
+m_vk.createDescriptorUpdateTemplateKHR         = (CreateDescriptorUpdateTemplateKHRFunc)               GET_PROC_ADDR("vkCreateDescriptorUpdateTemplateKHR");
+m_vk.destroyDescriptorUpdateTemplateKHR                = (DestroyDescriptorUpdateTemplateKHRFunc)              GET_PROC_ADDR("vkDestroyDescriptorUpdateTemplateKHR");
+m_vk.updateDescriptorSetWithTemplateKHR                = (UpdateDescriptorSetWithTemplateKHRFunc)              GET_PROC_ADDR("vkUpdateDescriptorSetWithTemplateKHR");
+m_vk.cmdPushDescriptorSetWithTemplateKHR       = (CmdPushDescriptorSetWithTemplateKHRFunc)             GET_PROC_ADDR("vkCmdPushDescriptorSetWithTemplateKHR");
+m_vk.getSwapchainStatusKHR                                     = (GetSwapchainStatusKHRFunc)                                   GET_PROC_ADDR("vkGetSwapchainStatusKHR");
+m_vk.getImageMemoryRequirements2KHR                    = (GetImageMemoryRequirements2KHRFunc)                  GET_PROC_ADDR("vkGetImageMemoryRequirements2KHR");
+m_vk.getBufferMemoryRequirements2KHR           = (GetBufferMemoryRequirements2KHRFunc)                 GET_PROC_ADDR("vkGetBufferMemoryRequirements2KHR");
+m_vk.getImageSparseMemoryRequirements2KHR      = (GetImageSparseMemoryRequirements2KHRFunc)    GET_PROC_ADDR("vkGetImageSparseMemoryRequirements2KHR");
+m_vk.getRefreshCycleDurationGOOGLE                     = (GetRefreshCycleDurationGOOGLEFunc)                   GET_PROC_ADDR("vkGetRefreshCycleDurationGOOGLE");
+m_vk.getPastPresentationTimingGOOGLE           = (GetPastPresentationTimingGOOGLEFunc)                 GET_PROC_ADDR("vkGetPastPresentationTimingGOOGLE");
index bd776fa..26ab440 100644 (file)
@@ -1222,6 +1222,28 @@ VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceSurfaceFormats2KHR (VkPhysicalDe
        return VK_SUCCESS;
 }
 
+VKAPI_ATTR void VKAPI_CALL getImageMemoryRequirements2KHR (VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements)
+{
+       DE_UNREF(device);
+       DE_UNREF(pInfo);
+       DE_UNREF(pMemoryRequirements);
+}
+
+VKAPI_ATTR void VKAPI_CALL getBufferMemoryRequirements2KHR (VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements)
+{
+       DE_UNREF(device);
+       DE_UNREF(pInfo);
+       DE_UNREF(pMemoryRequirements);
+}
+
+VKAPI_ATTR void VKAPI_CALL getImageSparseMemoryRequirements2KHR (VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements)
+{
+       DE_UNREF(device);
+       DE_UNREF(pInfo);
+       DE_UNREF(pSparseMemoryRequirementCount);
+       DE_UNREF(pSparseMemoryRequirements);
+}
+
 VKAPI_ATTR void VKAPI_CALL debugReportMessageEXT (VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, deUint64 object, deUintptr location, deInt32 messageCode, const char* pLayerPrefix, const char* pMessage)
 {
        DE_UNREF(instance);
@@ -1446,6 +1468,9 @@ static const tcu::StaticFunctionLibrary::Entry s_deviceFunctions[] =
        VK_NULL_FUNC_ENTRY(vkUpdateDescriptorSetWithTemplateKHR,        updateDescriptorSetWithTemplateKHR),
        VK_NULL_FUNC_ENTRY(vkCmdPushDescriptorSetWithTemplateKHR,       cmdPushDescriptorSetWithTemplateKHR),
        VK_NULL_FUNC_ENTRY(vkGetSwapchainStatusKHR,                                     getSwapchainStatusKHR),
+       VK_NULL_FUNC_ENTRY(vkGetImageMemoryRequirements2KHR,            getImageMemoryRequirements2KHR),
+       VK_NULL_FUNC_ENTRY(vkGetBufferMemoryRequirements2KHR,           getBufferMemoryRequirements2KHR),
+       VK_NULL_FUNC_ENTRY(vkGetImageSparseMemoryRequirements2KHR,      getImageSparseMemoryRequirements2KHR),
        VK_NULL_FUNC_ENTRY(vkGetRefreshCycleDurationGOOGLE,                     getRefreshCycleDurationGOOGLE),
        VK_NULL_FUNC_ENTRY(vkGetPastPresentationTimingGOOGLE,           getPastPresentationTimingGOOGLE),
 };
index f65183f..b1fdba4 100644 (file)
@@ -346,6 +346,11 @@ std::ostream&      operator<<      (std::ostream& s, const VkSharedPresentSurfaceCapabilit
 std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSurfaceInfo2KHR& value);
 std::ostream&  operator<<      (std::ostream& s, const VkSurfaceCapabilities2KHR& value);
 std::ostream&  operator<<      (std::ostream& s, const VkSurfaceFormat2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferMemoryRequirementsInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageMemoryRequirementsInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageSparseMemoryRequirementsInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryRequirements2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseImageMemoryRequirements2KHR& value);
 std::ostream&  operator<<      (std::ostream& s, const VkDebugReportCallbackCreateInfoEXT& value);
 std::ostream&  operator<<      (std::ostream& s, const VkRefreshCycleDurationGOOGLE& value);
 std::ostream&  operator<<      (std::ostream& s, const VkPastPresentationTimingGOOGLE& value);
index cfd9ed2..d09aa6c 100644 (file)
@@ -178,6 +178,11 @@ const char* getStructureTypeName (VkStructureType value)
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR:                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR";
                case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR:                                              return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR";
                case VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR:                                                    return "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR";
+               case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR:                   return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR:                    return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR:             return "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR:                                               return "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR";
+               case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR:                  return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR";
                default:                                                                                                                                return DE_NULL;
        }
 }
@@ -3529,6 +3534,56 @@ std::ostream& operator<< (std::ostream& s, const VkSurfaceFormat2KHR& value)
        return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkBufferMemoryRequirementsInfo2KHR& value)
+{
+       s << "VkBufferMemoryRequirementsInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tbuffer = " << value.buffer << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageMemoryRequirementsInfo2KHR& value)
+{
+       s << "VkImageMemoryRequirementsInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\timage = " << value.image << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageSparseMemoryRequirementsInfo2KHR& value)
+{
+       s << "VkImageSparseMemoryRequirementsInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\timage = " << value.image << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryRequirements2KHR& value)
+{
+       s << "VkMemoryRequirements2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemoryRequirements = " << value.memoryRequirements << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryRequirements2KHR& value)
+{
+       s << "VkSparseImageMemoryRequirements2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemoryRequirements = " << value.memoryRequirements << '\n';
+       s << '}';
+       return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkDebugReportCallbackCreateInfoEXT& value)
 {
        s << "VkDebugReportCallbackCreateInfoEXT = {\n";
index f01dabc..ada51dc 100644 (file)
@@ -1524,6 +1524,41 @@ struct VkSurfaceFormat2KHR
        VkSurfaceFormatKHR      surfaceFormat;
 };
 
+struct VkBufferMemoryRequirementsInfo2KHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkBuffer                buffer;
+};
+
+struct VkImageMemoryRequirementsInfo2KHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkImage                 image;
+};
+
+struct VkImageSparseMemoryRequirementsInfo2KHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkImage                 image;
+};
+
+struct VkMemoryRequirements2KHR
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       VkMemoryRequirements    memoryRequirements;
+};
+
+struct VkSparseImageMemoryRequirements2KHR
+{
+       VkStructureType                                 sType;
+       void*                                                   pNext;
+       VkSparseImageMemoryRequirements memoryRequirements;
+};
+
 struct VkDebugReportCallbackCreateInfoEXT
 {
        VkStructureType                                 sType;
index b0a5bd6..f29d512 100644 (file)
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  */
-virtual void           destroyDevice                                           (VkDevice device, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual void           getDeviceQueue                                          (VkDevice device, deUint32 queueFamilyIndex, deUint32 queueIndex, VkQueue* pQueue) const = 0;
-virtual VkResult       queueSubmit                                                     (VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence) const = 0;
-virtual VkResult       queueWaitIdle                                           (VkQueue queue) const = 0;
-virtual VkResult       deviceWaitIdle                                          (VkDevice device) const = 0;
-virtual VkResult       allocateMemory                                          (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) const = 0;
-virtual void           freeMemory                                                      (VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       mapMemory                                                       (VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const = 0;
-virtual void           unmapMemory                                                     (VkDevice device, VkDeviceMemory memory) const = 0;
-virtual VkResult       flushMappedMemoryRanges                         (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const = 0;
-virtual VkResult       invalidateMappedMemoryRanges            (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const = 0;
-virtual void           getDeviceMemoryCommitment                       (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) const = 0;
-virtual VkResult       bindBufferMemory                                        (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const = 0;
-virtual VkResult       bindImageMemory                                         (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const = 0;
-virtual void           getBufferMemoryRequirements                     (VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) const = 0;
-virtual void           getImageMemoryRequirements                      (VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) const = 0;
-virtual void           getImageSparseMemoryRequirements        (VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) const = 0;
-virtual VkResult       queueBindSparse                                         (VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) const = 0;
-virtual VkResult       createFence                                                     (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const = 0;
-virtual void           destroyFence                                            (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       resetFences                                                     (VkDevice device, deUint32 fenceCount, const VkFence* pFences) const = 0;
-virtual VkResult       getFenceStatus                                          (VkDevice device, VkFence fence) const = 0;
-virtual VkResult       waitForFences                                           (VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout) const = 0;
-virtual VkResult       createSemaphore                                         (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) const = 0;
-virtual void           destroySemaphore                                        (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createEvent                                                     (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) const = 0;
-virtual void           destroyEvent                                            (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       getEventStatus                                          (VkDevice device, VkEvent event) const = 0;
-virtual VkResult       setEvent                                                        (VkDevice device, VkEvent event) const = 0;
-virtual VkResult       resetEvent                                                      (VkDevice device, VkEvent event) const = 0;
-virtual VkResult       createQueryPool                                         (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const = 0;
-virtual void           destroyQueryPool                                        (VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       getQueryPoolResults                                     (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
-virtual VkResult       createBuffer                                            (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const = 0;
-virtual void           destroyBuffer                                           (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createBufferView                                        (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const = 0;
-virtual void           destroyBufferView                                       (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createImage                                                     (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) const = 0;
-virtual void           destroyImage                                            (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual void           getImageSubresourceLayout                       (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) const = 0;
-virtual VkResult       createImageView                                         (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) const = 0;
-virtual void           destroyImageView                                        (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createShaderModule                                      (VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule) const = 0;
-virtual void           destroyShaderModule                                     (VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createPipelineCache                                     (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) const = 0;
-virtual void           destroyPipelineCache                            (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       getPipelineCacheData                            (VkDevice device, VkPipelineCache pipelineCache, deUintptr* pDataSize, void* pData) const = 0;
-virtual VkResult       mergePipelineCaches                                     (VkDevice device, VkPipelineCache dstCache, deUint32 srcCacheCount, const VkPipelineCache* pSrcCaches) const = 0;
-virtual VkResult       createGraphicsPipelines                         (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const = 0;
-virtual VkResult       createComputePipelines                          (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const = 0;
-virtual void           destroyPipeline                                         (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createPipelineLayout                            (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) const = 0;
-virtual void           destroyPipelineLayout                           (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createSampler                                           (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) const = 0;
-virtual void           destroySampler                                          (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createDescriptorSetLayout                       (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) const = 0;
-virtual void           destroyDescriptorSetLayout                      (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createDescriptorPool                            (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) const = 0;
-virtual void           destroyDescriptorPool                           (VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       resetDescriptorPool                                     (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) const = 0;
-virtual VkResult       allocateDescriptorSets                          (VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) const = 0;
-virtual VkResult       freeDescriptorSets                                      (VkDevice device, VkDescriptorPool descriptorPool, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets) const = 0;
-virtual void           updateDescriptorSets                            (VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) const = 0;
-virtual VkResult       createFramebuffer                                       (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) const = 0;
-virtual void           destroyFramebuffer                                      (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       createRenderPass                                        (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const = 0;
-virtual void           destroyRenderPass                                       (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual void           getRenderAreaGranularity                        (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) const = 0;
-virtual VkResult       createCommandPool                                       (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) const = 0;
-virtual void           destroyCommandPool                                      (VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       resetCommandPool                                        (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) const = 0;
-virtual VkResult       allocateCommandBuffers                          (VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) const = 0;
-virtual void           freeCommandBuffers                                      (VkDevice device, VkCommandPool commandPool, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const = 0;
-virtual VkResult       beginCommandBuffer                                      (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) const = 0;
-virtual VkResult       endCommandBuffer                                        (VkCommandBuffer commandBuffer) const = 0;
-virtual VkResult       resetCommandBuffer                                      (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const = 0;
-virtual void           cmdBindPipeline                                         (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const = 0;
-virtual void           cmdSetViewport                                          (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const = 0;
-virtual void           cmdSetScissor                                           (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const = 0;
-virtual void           cmdSetLineWidth                                         (VkCommandBuffer commandBuffer, float lineWidth) const = 0;
-virtual void           cmdSetDepthBias                                         (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const = 0;
-virtual void           cmdSetBlendConstants                            (VkCommandBuffer commandBuffer, const float blendConstants[4]) const = 0;
-virtual void           cmdSetDepthBounds                                       (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) const = 0;
-virtual void           cmdSetStencilCompareMask                        (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask) const = 0;
-virtual void           cmdSetStencilWriteMask                          (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask) const = 0;
-virtual void           cmdSetStencilReference                          (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference) const = 0;
-virtual void           cmdBindDescriptorSets                           (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets) const = 0;
-virtual void           cmdBindIndexBuffer                                      (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const = 0;
-virtual void           cmdBindVertexBuffers                            (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const = 0;
-virtual void           cmdDraw                                                         (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const = 0;
-virtual void           cmdDrawIndexed                                          (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance) const = 0;
-virtual void           cmdDrawIndirect                                         (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const = 0;
-virtual void           cmdDrawIndexedIndirect                          (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const = 0;
-virtual void           cmdDispatch                                                     (VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const = 0;
-virtual void           cmdDispatchIndirect                                     (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const = 0;
-virtual void           cmdCopyBuffer                                           (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions) const = 0;
-virtual void           cmdCopyImage                                            (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions) const = 0;
-virtual void           cmdBlitImage                                            (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter) const = 0;
-virtual void           cmdCopyBufferToImage                            (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions) const = 0;
-virtual void           cmdCopyImageToBuffer                            (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions) const = 0;
-virtual void           cmdUpdateBuffer                                         (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) const = 0;
-virtual void           cmdFillBuffer                                           (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data) const = 0;
-virtual void           cmdClearColorImage                                      (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const = 0;
-virtual void           cmdClearDepthStencilImage                       (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const = 0;
-virtual void           cmdClearAttachments                                     (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects) const = 0;
-virtual void           cmdResolveImage                                         (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions) const = 0;
-virtual void           cmdSetEvent                                                     (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const = 0;
-virtual void           cmdResetEvent                                           (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const = 0;
-virtual void           cmdWaitEvents                                           (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const = 0;
-virtual void           cmdPipelineBarrier                                      (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const = 0;
-virtual void           cmdBeginQuery                                           (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const = 0;
-virtual void           cmdEndQuery                                                     (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const = 0;
-virtual void           cmdResetQueryPool                                       (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const = 0;
-virtual void           cmdWriteTimestamp                                       (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const = 0;
-virtual void           cmdCopyQueryPoolResults                         (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
-virtual void           cmdPushConstants                                        (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const = 0;
-virtual void           cmdBeginRenderPass                                      (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const = 0;
-virtual void           cmdNextSubpass                                          (VkCommandBuffer commandBuffer, VkSubpassContents contents) const = 0;
-virtual void           cmdEndRenderPass                                        (VkCommandBuffer commandBuffer) const = 0;
-virtual void           cmdExecuteCommands                                      (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const = 0;
-virtual VkResult       createSwapchainKHR                                      (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) const = 0;
-virtual void           destroySwapchainKHR                                     (VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       getSwapchainImagesKHR                           (VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages) const = 0;
-virtual VkResult       acquireNextImageKHR                                     (VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex) const = 0;
-virtual VkResult       queuePresentKHR                                         (VkQueue queue, const VkPresentInfoKHR* pPresentInfo) const = 0;
-virtual VkResult       createSharedSwapchainsKHR                       (VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains) const = 0;
-virtual void           trimCommandPoolKHR                                      (VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlagsKHR flags) const = 0;
-virtual void           cmdPushDescriptorSetKHR                         (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 set, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites) const = 0;
-virtual VkResult       createDescriptorUpdateTemplateKHR       (VkDevice device, const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate) const = 0;
-virtual void           destroyDescriptorUpdateTemplateKHR      (VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual void           updateDescriptorSetWithTemplateKHR      (VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void* pData) const = 0;
-virtual void           cmdPushDescriptorSetWithTemplateKHR     (VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout, deUint32 set, const void* pData) const = 0;
-virtual VkResult       getSwapchainStatusKHR                           (VkDevice device, VkSwapchainKHR swapchain) const = 0;
-virtual VkResult       getRefreshCycleDurationGOOGLE           (VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) const = 0;
-virtual VkResult       getPastPresentationTimingGOOGLE         (VkDevice device, VkSwapchainKHR swapchain, deUint32* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings) const = 0;
+virtual void           destroyDevice                                                   (VkDevice device, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual void           getDeviceQueue                                                  (VkDevice device, deUint32 queueFamilyIndex, deUint32 queueIndex, VkQueue* pQueue) const = 0;
+virtual VkResult       queueSubmit                                                             (VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence) const = 0;
+virtual VkResult       queueWaitIdle                                                   (VkQueue queue) const = 0;
+virtual VkResult       deviceWaitIdle                                                  (VkDevice device) const = 0;
+virtual VkResult       allocateMemory                                                  (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) const = 0;
+virtual void           freeMemory                                                              (VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       mapMemory                                                               (VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const = 0;
+virtual void           unmapMemory                                                             (VkDevice device, VkDeviceMemory memory) const = 0;
+virtual VkResult       flushMappedMemoryRanges                                 (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const = 0;
+virtual VkResult       invalidateMappedMemoryRanges                    (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const = 0;
+virtual void           getDeviceMemoryCommitment                               (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) const = 0;
+virtual VkResult       bindBufferMemory                                                (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const = 0;
+virtual VkResult       bindImageMemory                                                 (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const = 0;
+virtual void           getBufferMemoryRequirements                             (VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) const = 0;
+virtual void           getImageMemoryRequirements                              (VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) const = 0;
+virtual void           getImageSparseMemoryRequirements                (VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) const = 0;
+virtual VkResult       queueBindSparse                                                 (VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) const = 0;
+virtual VkResult       createFence                                                             (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const = 0;
+virtual void           destroyFence                                                    (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       resetFences                                                             (VkDevice device, deUint32 fenceCount, const VkFence* pFences) const = 0;
+virtual VkResult       getFenceStatus                                                  (VkDevice device, VkFence fence) const = 0;
+virtual VkResult       waitForFences                                                   (VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout) const = 0;
+virtual VkResult       createSemaphore                                                 (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) const = 0;
+virtual void           destroySemaphore                                                (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createEvent                                                             (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) const = 0;
+virtual void           destroyEvent                                                    (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       getEventStatus                                                  (VkDevice device, VkEvent event) const = 0;
+virtual VkResult       setEvent                                                                (VkDevice device, VkEvent event) const = 0;
+virtual VkResult       resetEvent                                                              (VkDevice device, VkEvent event) const = 0;
+virtual VkResult       createQueryPool                                                 (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const = 0;
+virtual void           destroyQueryPool                                                (VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       getQueryPoolResults                                             (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
+virtual VkResult       createBuffer                                                    (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const = 0;
+virtual void           destroyBuffer                                                   (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createBufferView                                                (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const = 0;
+virtual void           destroyBufferView                                               (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createImage                                                             (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) const = 0;
+virtual void           destroyImage                                                    (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual void           getImageSubresourceLayout                               (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) const = 0;
+virtual VkResult       createImageView                                                 (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) const = 0;
+virtual void           destroyImageView                                                (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createShaderModule                                              (VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule) const = 0;
+virtual void           destroyShaderModule                                             (VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createPipelineCache                                             (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) const = 0;
+virtual void           destroyPipelineCache                                    (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       getPipelineCacheData                                    (VkDevice device, VkPipelineCache pipelineCache, deUintptr* pDataSize, void* pData) const = 0;
+virtual VkResult       mergePipelineCaches                                             (VkDevice device, VkPipelineCache dstCache, deUint32 srcCacheCount, const VkPipelineCache* pSrcCaches) const = 0;
+virtual VkResult       createGraphicsPipelines                                 (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const = 0;
+virtual VkResult       createComputePipelines                                  (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const = 0;
+virtual void           destroyPipeline                                                 (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createPipelineLayout                                    (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) const = 0;
+virtual void           destroyPipelineLayout                                   (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createSampler                                                   (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) const = 0;
+virtual void           destroySampler                                                  (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createDescriptorSetLayout                               (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) const = 0;
+virtual void           destroyDescriptorSetLayout                              (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createDescriptorPool                                    (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) const = 0;
+virtual void           destroyDescriptorPool                                   (VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       resetDescriptorPool                                             (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) const = 0;
+virtual VkResult       allocateDescriptorSets                                  (VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) const = 0;
+virtual VkResult       freeDescriptorSets                                              (VkDevice device, VkDescriptorPool descriptorPool, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets) const = 0;
+virtual void           updateDescriptorSets                                    (VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) const = 0;
+virtual VkResult       createFramebuffer                                               (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) const = 0;
+virtual void           destroyFramebuffer                                              (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       createRenderPass                                                (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const = 0;
+virtual void           destroyRenderPass                                               (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual void           getRenderAreaGranularity                                (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) const = 0;
+virtual VkResult       createCommandPool                                               (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) const = 0;
+virtual void           destroyCommandPool                                              (VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       resetCommandPool                                                (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) const = 0;
+virtual VkResult       allocateCommandBuffers                                  (VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) const = 0;
+virtual void           freeCommandBuffers                                              (VkDevice device, VkCommandPool commandPool, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const = 0;
+virtual VkResult       beginCommandBuffer                                              (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) const = 0;
+virtual VkResult       endCommandBuffer                                                (VkCommandBuffer commandBuffer) const = 0;
+virtual VkResult       resetCommandBuffer                                              (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const = 0;
+virtual void           cmdBindPipeline                                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const = 0;
+virtual void           cmdSetViewport                                                  (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const = 0;
+virtual void           cmdSetScissor                                                   (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const = 0;
+virtual void           cmdSetLineWidth                                                 (VkCommandBuffer commandBuffer, float lineWidth) const = 0;
+virtual void           cmdSetDepthBias                                                 (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const = 0;
+virtual void           cmdSetBlendConstants                                    (VkCommandBuffer commandBuffer, const float blendConstants[4]) const = 0;
+virtual void           cmdSetDepthBounds                                               (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) const = 0;
+virtual void           cmdSetStencilCompareMask                                (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask) const = 0;
+virtual void           cmdSetStencilWriteMask                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask) const = 0;
+virtual void           cmdSetStencilReference                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference) const = 0;
+virtual void           cmdBindDescriptorSets                                   (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets) const = 0;
+virtual void           cmdBindIndexBuffer                                              (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const = 0;
+virtual void           cmdBindVertexBuffers                                    (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const = 0;
+virtual void           cmdDraw                                                                 (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const = 0;
+virtual void           cmdDrawIndexed                                                  (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance) const = 0;
+virtual void           cmdDrawIndirect                                                 (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const = 0;
+virtual void           cmdDrawIndexedIndirect                                  (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const = 0;
+virtual void           cmdDispatch                                                             (VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const = 0;
+virtual void           cmdDispatchIndirect                                             (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const = 0;
+virtual void           cmdCopyBuffer                                                   (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions) const = 0;
+virtual void           cmdCopyImage                                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions) const = 0;
+virtual void           cmdBlitImage                                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter) const = 0;
+virtual void           cmdCopyBufferToImage                                    (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions) const = 0;
+virtual void           cmdCopyImageToBuffer                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions) const = 0;
+virtual void           cmdUpdateBuffer                                                 (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) const = 0;
+virtual void           cmdFillBuffer                                                   (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data) const = 0;
+virtual void           cmdClearColorImage                                              (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const = 0;
+virtual void           cmdClearDepthStencilImage                               (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const = 0;
+virtual void           cmdClearAttachments                                             (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects) const = 0;
+virtual void           cmdResolveImage                                                 (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions) const = 0;
+virtual void           cmdSetEvent                                                             (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const = 0;
+virtual void           cmdResetEvent                                                   (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const = 0;
+virtual void           cmdWaitEvents                                                   (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const = 0;
+virtual void           cmdPipelineBarrier                                              (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const = 0;
+virtual void           cmdBeginQuery                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const = 0;
+virtual void           cmdEndQuery                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const = 0;
+virtual void           cmdResetQueryPool                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const = 0;
+virtual void           cmdWriteTimestamp                                               (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const = 0;
+virtual void           cmdCopyQueryPoolResults                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
+virtual void           cmdPushConstants                                                (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const = 0;
+virtual void           cmdBeginRenderPass                                              (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const = 0;
+virtual void           cmdNextSubpass                                                  (VkCommandBuffer commandBuffer, VkSubpassContents contents) const = 0;
+virtual void           cmdEndRenderPass                                                (VkCommandBuffer commandBuffer) const = 0;
+virtual void           cmdExecuteCommands                                              (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const = 0;
+virtual VkResult       createSwapchainKHR                                              (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) const = 0;
+virtual void           destroySwapchainKHR                                             (VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       getSwapchainImagesKHR                                   (VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages) const = 0;
+virtual VkResult       acquireNextImageKHR                                             (VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex) const = 0;
+virtual VkResult       queuePresentKHR                                                 (VkQueue queue, const VkPresentInfoKHR* pPresentInfo) const = 0;
+virtual VkResult       createSharedSwapchainsKHR                               (VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains) const = 0;
+virtual void           trimCommandPoolKHR                                              (VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlagsKHR flags) const = 0;
+virtual void           cmdPushDescriptorSetKHR                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 set, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites) const = 0;
+virtual VkResult       createDescriptorUpdateTemplateKHR               (VkDevice device, const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate) const = 0;
+virtual void           destroyDescriptorUpdateTemplateKHR              (VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual void           updateDescriptorSetWithTemplateKHR              (VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void* pData) const = 0;
+virtual void           cmdPushDescriptorSetWithTemplateKHR             (VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout, deUint32 set, const void* pData) const = 0;
+virtual VkResult       getSwapchainStatusKHR                                   (VkDevice device, VkSwapchainKHR swapchain) const = 0;
+virtual void           getImageMemoryRequirements2KHR                  (VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) const = 0;
+virtual void           getBufferMemoryRequirements2KHR                 (VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) const = 0;
+virtual void           getImageSparseMemoryRequirements2KHR    (VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements) const = 0;
+virtual VkResult       getRefreshCycleDurationGOOGLE                   (VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) const = 0;
+virtual VkResult       getPastPresentationTimingGOOGLE                 (VkDevice device, VkSwapchainKHR swapchain, deUint32* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings) const = 0;
index 73f5cf0..3d99fec 100644 (file)
@@ -678,6 +678,7 @@ void checkDeviceExtensions (tcu::ResultCollector& results, const vector<string>&
                "VK_KHR_shared_presentable_image",
                "VK_KHR_storage_buffer_storage_class",
                "VK_KHR_16bit_storage",
+               "VK_KHR_get_memory_requirements2",
        };
 
        checkKhrExtensions(results, extensions, DE_LENGTH_OF_ARRAY(s_allowedDeviceKhrExtensions), s_allowedDeviceKhrExtensions);
index 154c1b2..d613422 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "deUniquePtr.hpp"
 #include "deStringUtil.hpp"
+#include "deSTLUtil.hpp"
 
 #include "tcuResultCollector.hpp"
 #include "tcuTestLog.hpp"
@@ -64,6 +65,55 @@ Move<VkBuffer> makeBuffer (const DeviceInterface& vk, const VkDevice device, con
        return createBuffer(vk, device, &createInfo);
 }
 
+VkMemoryRequirements getBufferMemoryRequirements (const DeviceInterface& vk, const VkDevice device, const VkDeviceSize size, const VkBufferCreateFlags flags, const VkBufferUsageFlags usage)
+{
+       const Unique<VkBuffer> buffer(makeBuffer(vk, device, size, flags, usage));
+       return getBufferMemoryRequirements(vk, device, *buffer);
+}
+
+VkMemoryRequirements getBufferMemoryRequirements2 (const DeviceInterface& vk, const VkDevice device, const VkDeviceSize size, const VkBufferCreateFlags flags, const VkBufferUsageFlags usage, void* next = DE_NULL)
+{
+       const Unique<VkBuffer>                          buffer          (makeBuffer(vk, device, size, flags, usage));
+       VkBufferMemoryRequirementsInfo2KHR      info    =
+       {
+               VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR,        // VkStructureType      sType
+               DE_NULL,                                                                                                        // const void*          pNext
+               *buffer                                                                                                         // VkBuffer                     buffer
+       };
+       VkMemoryRequirements2KHR                        req2    =
+       {
+               VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR,                            // VkStructureType              sType
+               next,                                                                                                           // void*                                pNext
+               {0, 0, 0}                                                                                                       // VkMemoryRequirements memoryRequirements
+       };
+
+       vk.getBufferMemoryRequirements2KHR(device, &info, &req2);
+
+       return req2.memoryRequirements;
+}
+
+VkMemoryRequirements getImageMemoryRequirements2 (const DeviceInterface& vk, const VkDevice device, const VkImageCreateInfo& createInfo, void* next = DE_NULL)
+{
+       const Unique<VkImage> image(createImage(vk, device, &createInfo));
+
+       VkImageMemoryRequirementsInfo2KHR       info    =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR,         // VkStructureType      sType
+               DE_NULL,                                                                                                        // const void*          pNext
+               *image                                                                                                          // VkImage                      image
+       };
+       VkMemoryRequirements2KHR                        req2    =
+       {
+               VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR,                            // VkStructureType              sType
+               next,                                                                                                           // void*                                pNext
+               {0, 0, 0}                                                                                                       // VkMemoryRequirements memoryRequirements
+       };
+
+       vk.getImageMemoryRequirements2KHR(device, &info, &req2);
+
+       return req2.memoryRequirements;
+}
+
 //! Get an index of each set bit, starting from the least significant bit.
 std::vector<deUint32> bitsToIndices (deUint32 bits)
 {
@@ -76,12 +126,6 @@ std::vector<deUint32> bitsToIndices (deUint32 bits)
        return indices;
 }
 
-VkMemoryRequirements getBufferMemoryRequirements (const DeviceInterface& vk, const VkDevice device, const VkDeviceSize size, const VkBufferCreateFlags flags, const VkBufferUsageFlags usage)
-{
-       const Unique<VkBuffer> buffer(makeBuffer(vk, device, size, flags, usage));
-       return getBufferMemoryRequirements(vk, device, *buffer);
-}
-
 template<typename T>
 T nextEnum (T value)
 {
@@ -105,7 +149,195 @@ T nextFlagExcluding (T value, T excludedFlags)
        return static_cast<T>(tmp);
 }
 
-void requireBufferSparseFeatures (const InstanceInterface& vki, const VkPhysicalDevice physDevice, const VkBufferCreateFlags flags)
+class IBufferMemoryRequirements
+{
+public:
+       virtual void populateTestGroup                  (tcu::TestCaseGroup*                                            group) = 0;
+
+protected:
+       virtual void addFunctionTestCase                (tcu::TestCaseGroup*                                            group,
+                                                                                        const std::string&                                                     name,
+                                                                                        const std::string&                                                     desc,
+                                                                                        VkBufferCreateFlags                                            arg0) = 0;
+
+       virtual tcu::TestStatus execTest                (Context&                                                                       context,
+                                                                                        const VkBufferCreateFlags                                      bufferFlags) = 0;
+
+       virtual void preTestChecks                              (Context&                                                                       context,
+                                                                                        const InstanceInterface&                                       vki,
+                                                                                        const VkPhysicalDevice                                         physDevice,
+                                                                                        const VkBufferCreateFlags                                      flags) = 0;
+
+       virtual void updateMemoryRequirements   (const DeviceInterface&                                         vk,
+                                                                                        const VkDevice                                                         device,
+                                                                                        const VkDeviceSize                                                     size,
+                                                                                        const VkBufferCreateFlags                                      flags,
+                                                                                        const VkBufferUsageFlags                                       usage,
+                                                                                        const bool                                                                     all) = 0;
+
+       virtual void verifyMemoryRequirements   (tcu::ResultCollector&                                          result,
+                                                                                        const VkPhysicalDeviceMemoryProperties&        deviceMemoryProperties,
+                                                                                        const VkPhysicalDeviceLimits&                          limits,
+                                                                                        const VkBufferCreateFlags                                      bufferFlags,
+                                                                                        const VkBufferUsageFlags                                       usage) = 0;
+};
+
+class BufferMemoryRequirementsOriginal : public IBufferMemoryRequirements
+{
+       static tcu::TestStatus testEntryPoint   (Context&                                                                       context,
+                                                                                        const VkBufferCreateFlags                                      bufferFlags);
+
+public:
+       virtual void populateTestGroup                  (tcu::TestCaseGroup*                                            group);
+
+protected:
+       virtual void addFunctionTestCase                (tcu::TestCaseGroup*                                            group,
+                                                                                        const std::string&                                                     name,
+                                                                                        const std::string&                                                     desc,
+                                                                                        VkBufferCreateFlags                                            arg0);
+
+       virtual tcu::TestStatus execTest                (Context&                                                                       context,
+                                                                                        const VkBufferCreateFlags                                      bufferFlags);
+
+       virtual void preTestChecks                              (Context&                                                                       context,
+                                                                                        const InstanceInterface&                                       vki,
+                                                                                        const VkPhysicalDevice                                         physDevice,
+                                                                                        const VkBufferCreateFlags                                      flags);
+
+       virtual void updateMemoryRequirements   (const DeviceInterface&                                         vk,
+                                                                                        const VkDevice                                                         device,
+                                                                                        const VkDeviceSize                                                     size,
+                                                                                        const VkBufferCreateFlags                                      flags,
+                                                                                        const VkBufferUsageFlags                                       usage,
+                                                                                        const bool                                                                     all);
+
+       virtual void verifyMemoryRequirements   (tcu::ResultCollector&                                          result,
+                                                                                        const VkPhysicalDeviceMemoryProperties&        deviceMemoryProperties,
+                                                                                        const VkPhysicalDeviceLimits&                          limits,
+                                                                                        const VkBufferCreateFlags                                      bufferFlags,
+                                                                                        const VkBufferUsageFlags                                       usage);
+
+protected:
+       VkMemoryRequirements    m_allUsageFlagsRequirements;
+       VkMemoryRequirements    m_currentTestRequirements;
+};
+
+
+tcu::TestStatus BufferMemoryRequirementsOriginal::testEntryPoint (Context& context, const VkBufferCreateFlags bufferFlags)
+{
+       BufferMemoryRequirementsOriginal test;
+
+       return test.execTest(context, bufferFlags);
+}
+
+void BufferMemoryRequirementsOriginal::populateTestGroup (tcu::TestCaseGroup* group)
+{
+       const struct
+       {
+               VkBufferCreateFlags             flags;
+               const char* const               name;
+       } bufferCases[] =
+       {
+               { (VkBufferCreateFlags)0,                                                                                                                                                                                               "regular"                                       },
+               { VK_BUFFER_CREATE_SPARSE_BINDING_BIT,                                                                                                                                                                  "sparse"                                        },
+               { VK_BUFFER_CREATE_SPARSE_BINDING_BIT | VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,                                                                                  "sparse_residency"                      },
+               { VK_BUFFER_CREATE_SPARSE_BINDING_BIT                                                                                   | VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,  "sparse_aliased"                        },
+               { VK_BUFFER_CREATE_SPARSE_BINDING_BIT | VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT   | VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,  "sparse_residency_aliased"      },
+       };
+
+       de::MovePtr<tcu::TestCaseGroup> bufferGroup(new tcu::TestCaseGroup(group->getTestContext(), "buffer", ""));
+
+       for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(bufferCases); ++ndx)
+               addFunctionTestCase(bufferGroup.get(), bufferCases[ndx].name, "", bufferCases[ndx].flags);
+
+       group->addChild(bufferGroup.release());
+}
+
+void BufferMemoryRequirementsOriginal::addFunctionTestCase (tcu::TestCaseGroup*        group,
+                                                                                                                       const std::string&      name,
+                                                                                                                       const std::string&      desc,
+                                                                                                                       VkBufferCreateFlags     arg0)
+{
+       addFunctionCase(group, name, desc, testEntryPoint, arg0);
+}
+
+tcu::TestStatus BufferMemoryRequirementsOriginal::execTest (Context& context, const VkBufferCreateFlags bufferFlags)
+{
+       const DeviceInterface&                                  vk                      = context.getDeviceInterface();
+       const InstanceInterface&                                vki                     = context.getInstanceInterface();
+       const VkDevice                                                  device          = context.getDevice();
+       const VkPhysicalDevice                                  physDevice      = context.getPhysicalDevice();
+
+       preTestChecks(context, vki, physDevice, bufferFlags);
+
+       const VkPhysicalDeviceMemoryProperties  memoryProperties        = getPhysicalDeviceMemoryProperties(vki, physDevice);
+       const VkPhysicalDeviceLimits                    limits                          = getPhysicalDeviceProperties(vki, physDevice).limits;
+       const VkBufferUsageFlags                                allUsageFlags           = static_cast<VkBufferUsageFlags>((VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT << 1) - 1);
+       tcu::TestLog&                                                   log                                     = context.getTestContext().getLog();
+       bool                                                                    allPass                         = true;
+
+       const VkDeviceSize sizeCases[] =
+       {
+               1    * 1024,
+               8    * 1024,
+               64   * 1024,
+               1024 * 1024,
+       };
+
+       // Updates m_allUsageFlags* fields
+       updateMemoryRequirements(vk, device, 1024, bufferFlags, allUsageFlags, true); // doesn't depend on size
+
+       for (VkBufferUsageFlags usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; usage <= VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT; usage = nextFlag(usage))
+       {
+               deUint32                previousMemoryTypeBits  = 0u;
+               VkDeviceSize    previousAlignment               = 0u;
+
+               log << tcu::TestLog::Message << "Verify a buffer with usage flags: " << de::toString(getBufferUsageFlagsStr(usage)) << tcu::TestLog::EndMessage;
+
+               for (const VkDeviceSize* pSize = sizeCases; pSize < sizeCases + DE_LENGTH_OF_ARRAY(sizeCases); ++pSize)
+               {
+                       log << tcu::TestLog::Message << "- size " << *pSize << " bytes" << tcu::TestLog::EndMessage;
+
+                       tcu::ResultCollector result(log, "ERROR: ");
+
+                       // Updates m_allUsageFlags* fields
+                       updateMemoryRequirements(vk, device, *pSize, bufferFlags, usage, false);
+
+                       // Check:
+                       // - requirements for a particular buffer usage
+                       // - memoryTypeBits are a subset of bits for requirements with all usage flags combined
+                       verifyMemoryRequirements(result, memoryProperties, limits, bufferFlags, usage);
+
+                       // Check that for the same usage and create flags:
+                       // - memoryTypeBits are the same
+                       // - alignment is the same
+                       if (pSize > sizeCases)
+                       {
+                               result.check(m_currentTestRequirements.memoryTypeBits == previousMemoryTypeBits,
+                                       "memoryTypeBits differ from the ones in the previous buffer size");
+
+                               result.check(m_currentTestRequirements.alignment == previousAlignment,
+                                       "alignment differs from the one in the previous buffer size");
+                       }
+
+                       if (result.getResult() != QP_TEST_RESULT_PASS)
+                               allPass = false;
+
+                       previousMemoryTypeBits  = m_currentTestRequirements.memoryTypeBits;
+                       previousAlignment               = m_currentTestRequirements.alignment;
+               }
+
+               if (!allPass)
+                       break;
+       }
+
+       return allPass ? tcu::TestStatus::pass("Pass") : tcu::TestStatus::fail("Some memory requirements were incorrect");
+}
+
+void BufferMemoryRequirementsOriginal::preTestChecks (Context&                                                         ,
+                                                                                                         const InstanceInterface&                              vki,
+                                                                                                         const VkPhysicalDevice                                physDevice,
+                                                                                                         const VkBufferCreateFlags                             flags)
 {
        const VkPhysicalDeviceFeatures features = getPhysicalDeviceFeatures(vki, physDevice);
 
@@ -119,18 +351,33 @@ void requireBufferSparseFeatures (const InstanceInterface& vki, const VkPhysical
                TCU_THROW(NotSupportedError, "Feature not supported: sparseResidencyAliased");
 }
 
-void verifyBufferRequirements (tcu::ResultCollector&                                   result,
-                                                          const VkPhysicalDeviceMemoryProperties&      deviceMemoryProperties,
-                                                          const VkMemoryRequirements&                          requirements,
-                                                          const VkMemoryRequirements&                          allUsageFlagsRequirements,
-                                                          const VkPhysicalDeviceLimits&                        limits,
-                                                          const VkBufferCreateFlags                            bufferFlags,
-                                                          const VkBufferUsageFlags                                     usage)
+void BufferMemoryRequirementsOriginal::updateMemoryRequirements (const DeviceInterface&                vk,
+                                                                                                                                const VkDevice                         device,
+                                                                                                                                const VkDeviceSize                     size,
+                                                                                                                                const VkBufferCreateFlags      flags,
+                                                                                                                                const VkBufferUsageFlags       usage,
+                                                                                                                                const bool                                     all)
+{
+       if (all)
+       {
+               m_allUsageFlagsRequirements     = getBufferMemoryRequirements(vk, device, size, flags, usage);
+       }
+       else
+       {
+               m_currentTestRequirements       = getBufferMemoryRequirements(vk, device, size, flags, usage);
+       }
+}
+
+void BufferMemoryRequirementsOriginal::verifyMemoryRequirements (tcu::ResultCollector&                                         result,
+                                                                                                                                const VkPhysicalDeviceMemoryProperties&        deviceMemoryProperties,
+                                                                                                                                const VkPhysicalDeviceLimits&                          limits,
+                                                                                                                                const VkBufferCreateFlags                                      bufferFlags,
+                                                                                                                                const VkBufferUsageFlags                                       usage)
 {
-       if (result.check(requirements.memoryTypeBits != 0, "VkMemoryRequirements memoryTypeBits has no bits set"))
+       if (result.check(m_currentTestRequirements.memoryTypeBits != 0, "VkMemoryRequirements memoryTypeBits has no bits set"))
        {
                typedef std::vector<deUint32>::const_iterator   IndexIterator;
-               const std::vector<deUint32>                                             usedMemoryTypeIndices                   = bitsToIndices(requirements.memoryTypeBits);
+               const std::vector<deUint32>                                             usedMemoryTypeIndices                   = bitsToIndices(m_currentTestRequirements.memoryTypeBits);
                bool                                                                                    deviceLocalMemoryFound                  = false;
                bool                                                                                    hostVisibleCoherentMemoryFound  = false;
 
@@ -154,24 +401,24 @@ void verifyBufferRequirements (tcu::ResultCollector&                                      result,
                                "Memory type includes VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
                }
 
-               result.check(deIsPowerOfTwo64(static_cast<deUint64>(requirements.alignment)) == DE_TRUE,
+               result.check(deIsPowerOfTwo64(static_cast<deUint64>(m_currentTestRequirements.alignment)) == DE_TRUE,
                        "VkMemoryRequirements alignment isn't power of two");
 
                if (usage & (VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT))
                {
-                       result.check(requirements.alignment >= limits.minTexelBufferOffsetAlignment,
+                       result.check(m_currentTestRequirements.alignment >= limits.minTexelBufferOffsetAlignment,
                                "VkMemoryRequirements alignment doesn't respect minTexelBufferOffsetAlignment");
                }
 
                if (usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
                {
-                       result.check(requirements.alignment >= limits.minUniformBufferOffsetAlignment,
+                       result.check(m_currentTestRequirements.alignment >= limits.minUniformBufferOffsetAlignment,
                                "VkMemoryRequirements alignment doesn't respect minUniformBufferOffsetAlignment");
                }
 
                if (usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
                {
-                       result.check(requirements.alignment >= limits.minStorageBufferOffsetAlignment,
+                       result.check(m_currentTestRequirements.alignment >= limits.minStorageBufferOffsetAlignment,
                                "VkMemoryRequirements alignment doesn't respect minStorageBufferOffsetAlignment");
                }
 
@@ -181,81 +428,233 @@ void verifyBufferRequirements (tcu::ResultCollector&                                     result,
                result.check((bufferFlags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) || hostVisibleCoherentMemoryFound,
                        "Required memory type doesn't include VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT and VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
 
-               result.check((requirements.memoryTypeBits & allUsageFlagsRequirements.memoryTypeBits) == allUsageFlagsRequirements.memoryTypeBits,
+               result.check((m_currentTestRequirements.memoryTypeBits & m_allUsageFlagsRequirements.memoryTypeBits) == m_allUsageFlagsRequirements.memoryTypeBits,
                        "Memory type bits aren't a superset of memory type bits for all usage flags combined");
        }
 }
 
-tcu::TestStatus testBuffer (Context& context, const VkBufferCreateFlags bufferFlags)
+class BufferMemoryRequirementsExtended : public BufferMemoryRequirementsOriginal
 {
-       const DeviceInterface&                                  vk                                                      = context.getDeviceInterface();
-       const InstanceInterface&                                vki                                                     = context.getInstanceInterface();
-       const VkDevice                                                  device                                          = context.getDevice();
-       const VkPhysicalDevice                                  physDevice                                      = context.getPhysicalDevice();
+       static tcu::TestStatus testEntryPoint   (Context&                                       context,
+                                                                                        const VkBufferCreateFlags      bufferFlags);
+
+protected:
+       virtual void addFunctionTestCase                (tcu::TestCaseGroup*            group,
+                                                                                        const std::string&                     name,
+                                                                                        const std::string&                     desc,
+                                                                                        VkBufferCreateFlags            arg0);
+
+       virtual void preTestChecks                              (Context&                                       context,
+                                                                                        const InstanceInterface&       vki,
+                                                                                        const VkPhysicalDevice         physDevice,
+                                                                                        const VkBufferCreateFlags      flags);
+
+       virtual void updateMemoryRequirements   (const DeviceInterface&         vk,
+                                                                                        const VkDevice                         device,
+                                                                                        const VkDeviceSize                     size,
+                                                                                        const VkBufferCreateFlags      flags,
+                                                                                        const VkBufferUsageFlags       usage,
+                                                                                        const bool                                     all);
+};
 
-       requireBufferSparseFeatures(vki, physDevice, bufferFlags);
+tcu::TestStatus BufferMemoryRequirementsExtended::testEntryPoint (Context& context, const VkBufferCreateFlags bufferFlags)
+{
+       BufferMemoryRequirementsExtended test;
 
-       const VkPhysicalDeviceMemoryProperties  memoryProperties                        = getPhysicalDeviceMemoryProperties(vki, physDevice);
-       const VkPhysicalDeviceLimits                    limits                                          = getPhysicalDeviceProperties(vki, physDevice).limits;
-       const VkBufferUsageFlags                                allUsageFlags                           = static_cast<VkBufferUsageFlags>((VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT << 1) - 1);
-       const VkMemoryRequirements                              allUsageFlagsRequirements       = getBufferMemoryRequirements(vk, device, 1024, bufferFlags, allUsageFlags); // doesn't depend on size
-       tcu::TestLog&                                                   log                                                     = context.getTestContext().getLog();
-       bool                                                                    allPass                                         = true;
+       return test.execTest(context, bufferFlags);
+}
 
-       const VkDeviceSize sizeCases[] =
-       {
-               1        * 1024,
-               8    * 1024,
-               64   * 1024,
-               1024 * 1024,
-       };
+void BufferMemoryRequirementsExtended::addFunctionTestCase (tcu::TestCaseGroup*        group,
+                                                                                                                       const std::string&      name,
+                                                                                                                       const std::string&      desc,
+                                                                                                                       VkBufferCreateFlags     arg0)
+{
+       addFunctionCase(group, name, desc, testEntryPoint, arg0);
+}
 
-       for (VkBufferUsageFlags usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; usage <= VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT; usage = nextFlag(usage))
+void BufferMemoryRequirementsExtended::preTestChecks (Context&                                 context,
+                                                                                                         const InstanceInterface&      vki,
+                                                                                                         const VkPhysicalDevice        physDevice,
+                                                                                                         const VkBufferCreateFlags     flags)
+{
+       const std::string extensionName("VK_KHR_get_memory_requirements2");
+
+       if (!de::contains(context.getDeviceExtensions().begin(), context.getDeviceExtensions().end(), extensionName))
+               TCU_THROW(NotSupportedError, std::string(extensionName + " is not supported").c_str());
+
+       BufferMemoryRequirementsOriginal::preTestChecks(context, vki, physDevice, flags);
+}
+
+void BufferMemoryRequirementsExtended::updateMemoryRequirements (const DeviceInterface&                vk,
+                                                                                                                                const VkDevice                         device,
+                                                                                                                                const VkDeviceSize                     size,
+                                                                                                                                const VkBufferCreateFlags      flags,
+                                                                                                                                const VkBufferUsageFlags       usage,
+                                                                                                                                const bool                                     all)
+{
+       if (all)
        {
-               deUint32                previousMemoryTypeBits  = 0u;
-               VkDeviceSize    previousAlignment               = 0u;
+               m_allUsageFlagsRequirements     = getBufferMemoryRequirements2(vk, device, size, flags, usage);
+       }
+       else
+       {
+               m_currentTestRequirements       = getBufferMemoryRequirements2(vk, device, size, flags, usage);
+       }
+}
 
-               log << tcu::TestLog::Message << "Verify a buffer with usage flags: " << de::toString(getBufferUsageFlagsStr(usage)) << tcu::TestLog::EndMessage;
 
-               for (const VkDeviceSize* pSize = sizeCases; pSize < sizeCases + DE_LENGTH_OF_ARRAY(sizeCases); ++pSize)
-               {
-                       log << tcu::TestLog::Message << "- size " << *pSize << " bytes" << tcu::TestLog::EndMessage;
 
-                       const VkMemoryRequirements      requirements    = getBufferMemoryRequirements(vk, device, *pSize, bufferFlags, usage);
-                       tcu::ResultCollector            result                  (log, "ERROR: ");
+struct ImageTestParams
+{
+       VkImageCreateFlags              flags;
+       VkImageTiling                   tiling;
+       bool                                    transient;
+};
+
+class IImageMemoryRequirements
+{
+public:
+       virtual void populateTestGroup                  (tcu::TestCaseGroup*                                            group) = 0;
 
-                       // Check:
-                       // - requirements for a particular buffer usage
-                       // - memoryTypeBits are a subset of bits for requirements with all usage flags combined
-                       verifyBufferRequirements(result, memoryProperties, requirements, allUsageFlagsRequirements, limits, bufferFlags, usage);
+protected:
+       virtual void addFunctionTestCase                (tcu::TestCaseGroup*                                            group,
+                                                                                        const std::string&                                                     name,
+                                                                                        const std::string&                                                     desc,
+                                                                                        const ImageTestParams                                          arg0) = 0;
 
-                       // Check that for the same usage and create flags:
-                       // - memoryTypeBits are the same
-                       // - alignment is the same
-                       if (pSize > sizeCases)
-                       {
-                               result.check(requirements.memoryTypeBits == previousMemoryTypeBits,
-                                       "memoryTypeBits differ from the ones in the previous buffer size");
+       virtual tcu::TestStatus execTest                (Context&                                                                       context,
+                                                                                        const ImageTestParams                                          bufferFlags) = 0;
 
-                               result.check(requirements.alignment == previousAlignment,
-                                       "alignment differs from the one in the previous buffer size");
-                       }
+       virtual void preTestChecks                              (Context&                                                                       context,
+                                                                                        const InstanceInterface&                                       vki,
+                                                                                        const VkPhysicalDevice                                         physDevice,
+                                                                                        const VkImageCreateFlags                                       flags) = 0;
 
-                       if (result.getResult() != QP_TEST_RESULT_PASS)
-                               allPass = false;
+       virtual void updateMemoryRequirements   (const DeviceInterface&                                         vk,
+                                                                                        const VkDevice                                                         device) = 0;
 
-                       previousMemoryTypeBits  = requirements.memoryTypeBits;
-                       previousAlignment               = requirements.alignment;
+       virtual void verifyMemoryRequirements   (tcu::ResultCollector&                                          result,
+                                                                                        const VkPhysicalDeviceMemoryProperties&        deviceMemoryProperties) = 0;
+};
+
+class ImageMemoryRequirementsOriginal : public IImageMemoryRequirements
+{
+       static tcu::TestStatus testEntryPoint   (Context&                                                                       context,
+                                                                                        const ImageTestParams                                          params);
+
+public:
+       virtual void populateTestGroup                  (tcu::TestCaseGroup*                                            group);
+
+protected:
+       virtual void addFunctionTestCase                (tcu::TestCaseGroup*                                            group,
+                                                                                        const std::string&                                                     name,
+                                                                                        const std::string&                                                     desc,
+                                                                                        const ImageTestParams                                          arg0);
+
+       virtual tcu::TestStatus execTest                (Context&                                                                       context,
+                                                                                        const ImageTestParams                                          params);
+
+       virtual void preTestChecks                              (Context&                                                                       context,
+                                                                                        const InstanceInterface&                                       vki,
+                                                                                        const VkPhysicalDevice                                         physDevice,
+                                                                                        const VkImageCreateFlags                                       flags);
+
+       virtual void updateMemoryRequirements   (const DeviceInterface&                                         vk,
+                                                                                        const VkDevice                                                         device);
+
+       virtual void verifyMemoryRequirements   (tcu::ResultCollector&                                          result,
+                                                                                        const VkPhysicalDeviceMemoryProperties&        deviceMemoryProperties);
+
+private:
+       virtual bool isUsageMatchesFeatures             (const VkImageUsageFlags                                        usage,
+                                                                                        const VkFormatFeatureFlags                                     featureFlags);
+
+       virtual bool isImageSupported                   (const InstanceInterface&                                       vki,
+                                                                                        const VkPhysicalDevice                                         physDevice,
+                                                                                        const VkImageCreateInfo&                                       info);
+
+       virtual VkExtent3D makeExtentForImage   (const VkImageType                                                      imageType);
+
+       virtual bool isFormatMatchingAspect             (const VkFormat                                                         format,
+                                                                                        const VkImageAspectFlags                                       aspect);
+
+
+       virtual std::string getImageInfoString  (const VkImageCreateInfo&                                       imageInfo);
+
+protected:
+       VkImageCreateInfo               m_currentTestImageInfo;
+       VkMemoryRequirements    m_currentTestRequirements;
+};
+
+
+tcu::TestStatus ImageMemoryRequirementsOriginal::testEntryPoint (Context& context, const ImageTestParams params)
+{
+       ImageMemoryRequirementsOriginal test;
+
+       return test.execTest(context, params);
+}
+
+void ImageMemoryRequirementsOriginal::populateTestGroup (tcu::TestCaseGroup* group)
+{
+       const struct
+       {
+               VkImageCreateFlags              flags;
+               bool                                    transient;
+               const char* const               name;
+       } imageFlagsCases[] =
+       {
+               { (VkImageCreateFlags)0,                                                                                                                                                                                                false,  "regular"                                       },
+               { (VkImageCreateFlags)0,                                                                                                                                                                                                true,   "transient"                                     },
+               { VK_IMAGE_CREATE_SPARSE_BINDING_BIT,                                                                                                                                                                   false,  "sparse"                                        },
+               { VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,                                                                                    false,  "sparse_residency"                      },
+               { VK_IMAGE_CREATE_SPARSE_BINDING_BIT                                                                                    | VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,   false,  "sparse_aliased"                        },
+               { VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT             | VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,   false,  "sparse_residency_aliased"      },
+       };
+
+       de::MovePtr<tcu::TestCaseGroup> imageGroup(new tcu::TestCaseGroup(group->getTestContext(), "image", ""));
+
+       for (int flagsNdx = 0; flagsNdx < DE_LENGTH_OF_ARRAY(imageFlagsCases); ++flagsNdx)
+       for (int tilingNdx = 0; tilingNdx <= 1; ++tilingNdx)
+       {
+               ImageTestParams         params;
+               std::ostringstream      caseName;
+
+               params.flags            =  imageFlagsCases[flagsNdx].flags;
+               params.transient        =  imageFlagsCases[flagsNdx].transient;
+               caseName                        << imageFlagsCases[flagsNdx].name;
+
+               if (tilingNdx != 0)
+               {
+                       params.tiling =  VK_IMAGE_TILING_OPTIMAL;
+                       caseName      << "_tiling_optimal";
+               }
+               else
+               {
+                       params.tiling =  VK_IMAGE_TILING_LINEAR;
+                       caseName      << "_tiling_linear";
                }
 
-               if (!allPass)
-                       break;
+               if ((params.flags & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) && (params.tiling == VK_IMAGE_TILING_LINEAR))
+                       continue;
+
+               addFunctionTestCase(imageGroup.get(), caseName.str(), "", params);
        }
 
-       return allPass ? tcu::TestStatus::pass("Pass") : tcu::TestStatus::fail("Some memory requirements were incorrect");
+       group->addChild(imageGroup.release());
+}
+
+void ImageMemoryRequirementsOriginal::addFunctionTestCase (tcu::TestCaseGroup*         group,
+                                                                                                                  const std::string&           name,
+                                                                                                                  const std::string&           desc,
+                                                                                                                  const ImageTestParams        arg0)
+{
+       addFunctionCase(group, name, desc, testEntryPoint, arg0);
 }
 
-void requireImageSparseFeatures (const InstanceInterface& vki, const VkPhysicalDevice physDevice, const VkImageCreateFlags createFlags)
+void ImageMemoryRequirementsOriginal::preTestChecks (Context&                                  ,
+                                                                                                        const InstanceInterface&       vki,
+                                                                                                        const VkPhysicalDevice         physDevice,
+                                                                                                        const VkImageCreateFlags       createFlags)
 {
        const VkPhysicalDeviceFeatures features = getPhysicalDeviceFeatures(vki, physDevice);
 
@@ -269,7 +668,59 @@ void requireImageSparseFeatures (const InstanceInterface& vki, const VkPhysicalD
                TCU_THROW(NotSupportedError, "Feature not supported: sparseResidencyAliased");
 }
 
-bool imageUsageMatchesFormatFeatures (const VkImageUsageFlags usage, const VkFormatFeatureFlags featureFlags)
+void ImageMemoryRequirementsOriginal::updateMemoryRequirements (const DeviceInterface&         vk,
+                                                                                                                                const VkDevice                         device)
+{
+       const Unique<VkImage> image(createImage(vk, device, &m_currentTestImageInfo));
+
+       m_currentTestRequirements = getImageMemoryRequirements(vk, device, *image);
+}
+
+void ImageMemoryRequirementsOriginal::verifyMemoryRequirements (tcu::ResultCollector&                                  result,
+                                                                                                                               const VkPhysicalDeviceMemoryProperties& deviceMemoryProperties)
+{
+       if (result.check(m_currentTestRequirements.memoryTypeBits != 0, "VkMemoryRequirements memoryTypeBits has no bits set"))
+       {
+               typedef std::vector<deUint32>::const_iterator   IndexIterator;
+               const std::vector<deUint32>                                             usedMemoryTypeIndices                   = bitsToIndices(m_currentTestRequirements.memoryTypeBits);
+               bool                                                                                    deviceLocalMemoryFound                  = false;
+               bool                                                                                    hostVisibleCoherentMemoryFound  = false;
+
+               for (IndexIterator memoryTypeNdx = usedMemoryTypeIndices.begin(); memoryTypeNdx != usedMemoryTypeIndices.end(); ++memoryTypeNdx)
+               {
+                       if (*memoryTypeNdx >= deviceMemoryProperties.memoryTypeCount)
+                       {
+                               result.fail("VkMemoryRequirements memoryTypeBits contains bits for non-existing memory types");
+                               continue;
+                       }
+
+                       const VkMemoryPropertyFlags     memoryPropertyFlags = deviceMemoryProperties.memoryTypes[*memoryTypeNdx].propertyFlags;
+
+                       if (memoryPropertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
+                               deviceLocalMemoryFound = true;
+
+                       if (memoryPropertyFlags & (VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT))
+                               hostVisibleCoherentMemoryFound = true;
+
+                       if (memoryPropertyFlags & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
+                       {
+                               result.check((m_currentTestImageInfo.usage & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) != 0u,
+                                       "Memory type includes VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT for a non-transient attachment image");
+                       }
+               }
+
+               result.check(deIsPowerOfTwo64(static_cast<deUint64>(m_currentTestRequirements.alignment)) == DE_TRUE,
+                       "VkMemoryRequirements alignment isn't power of two");
+
+               result.check(deviceLocalMemoryFound,
+                       "None of the required memory types included VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
+
+               result.check(m_currentTestImageInfo.tiling == VK_IMAGE_TILING_OPTIMAL || hostVisibleCoherentMemoryFound,
+                       "Required memory type doesn't include VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT and VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
+       }
+}
+
+bool ImageMemoryRequirementsOriginal::isUsageMatchesFeatures (const VkImageUsageFlags usage, const VkFormatFeatureFlags featureFlags)
 {
        if ((usage & VK_IMAGE_USAGE_SAMPLED_BIT) && (featureFlags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT))
                return true;
@@ -284,7 +735,7 @@ bool imageUsageMatchesFormatFeatures (const VkImageUsageFlags usage, const VkFor
 }
 
 //! This catches both invalid as well as legal but unsupported combinations of image parameters
-bool isImageSupported (const InstanceInterface& vki, const VkPhysicalDevice physDevice, const VkImageCreateInfo& info)
+bool ImageMemoryRequirementsOriginal::isImageSupported (const InstanceInterface& vki, const VkPhysicalDevice physDevice, const VkImageCreateInfo& info)
 {
        DE_ASSERT(info.extent.width >= 1u && info.extent.height >= 1u && info.extent.depth >= 1u);
 
@@ -415,7 +866,7 @@ bool isImageSupported (const InstanceInterface& vki, const VkPhysicalDevice phys
        const VkFormatFeatureFlags      formatFeatures          = (info.tiling == VK_IMAGE_TILING_LINEAR ? formatProperties.linearTilingFeatures
                                                                                                                                                                                         : formatProperties.optimalTilingFeatures);
 
-       if (!imageUsageMatchesFormatFeatures(info.usage, formatFeatures))
+       if (!isUsageMatchesFeatures(info.usage, formatFeatures))
                return false;
 
        VkImageFormatProperties         imageFormatProperties;
@@ -435,7 +886,7 @@ bool isImageSupported (const InstanceInterface& vki, const VkPhysicalDevice phys
        return result == VK_SUCCESS;
 }
 
-VkExtent3D makeExtentForImage (const VkImageType imageType)
+VkExtent3D ImageMemoryRequirementsOriginal::makeExtentForImage (const VkImageType imageType)
 {
        VkExtent3D extent = { 64u, 64u, 4u };
 
@@ -447,7 +898,7 @@ VkExtent3D makeExtentForImage (const VkImageType imageType)
        return extent;
 }
 
-bool isFormatMatchingAspect (const VkFormat format, const VkImageAspectFlags aspect)
+bool ImageMemoryRequirementsOriginal::isFormatMatchingAspect (const VkFormat format, const VkImageAspectFlags aspect)
 {
        DE_ASSERT(aspect == VK_IMAGE_ASPECT_COLOR_BIT || aspect == (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT));
 
@@ -457,53 +908,7 @@ bool isFormatMatchingAspect (const VkFormat format, const VkImageAspectFlags asp
        return (aspect == (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) == isDepthStencilFormat;
 }
 
-void verifyImageRequirements (tcu::ResultCollector&                                            result,
-                                                         const VkPhysicalDeviceMemoryProperties&       deviceMemoryProperties,
-                                                         const VkMemoryRequirements&                           requirements,
-                                                         const VkImageCreateInfo&                                      imageInfo)
-{
-       if (result.check(requirements.memoryTypeBits != 0, "VkMemoryRequirements memoryTypeBits has no bits set"))
-       {
-               typedef std::vector<deUint32>::const_iterator   IndexIterator;
-               const std::vector<deUint32>                                             usedMemoryTypeIndices                   = bitsToIndices(requirements.memoryTypeBits);
-               bool                                                                                    deviceLocalMemoryFound                  = false;
-               bool                                                                                    hostVisibleCoherentMemoryFound  = false;
-
-               for (IndexIterator memoryTypeNdx = usedMemoryTypeIndices.begin(); memoryTypeNdx != usedMemoryTypeIndices.end(); ++memoryTypeNdx)
-               {
-                       if (*memoryTypeNdx >= deviceMemoryProperties.memoryTypeCount)
-                       {
-                               result.fail("VkMemoryRequirements memoryTypeBits contains bits for non-existing memory types");
-                               continue;
-                       }
-
-                       const VkMemoryPropertyFlags     memoryPropertyFlags = deviceMemoryProperties.memoryTypes[*memoryTypeNdx].propertyFlags;
-
-                       if (memoryPropertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
-                               deviceLocalMemoryFound = true;
-
-                       if (memoryPropertyFlags & (VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT))
-                               hostVisibleCoherentMemoryFound = true;
-
-                       if (memoryPropertyFlags & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
-                       {
-                               result.check((imageInfo.usage & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) != 0u,
-                                       "Memory type includes VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT for a non-transient attachment image");
-                       }
-               }
-
-               result.check(deIsPowerOfTwo64(static_cast<deUint64>(requirements.alignment)) == DE_TRUE,
-                       "VkMemoryRequirements alignment isn't power of two");
-
-               result.check(deviceLocalMemoryFound,
-                       "None of the required memory types included VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
-
-               result.check(imageInfo.tiling == VK_IMAGE_TILING_OPTIMAL || hostVisibleCoherentMemoryFound,
-                       "Required memory type doesn't include VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT and VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
-       }
-}
-
-std::string getImageInfoString (const VkImageCreateInfo& imageInfo)
+std::string ImageMemoryRequirementsOriginal::getImageInfoString (const VkImageCreateInfo& imageInfo)
 {
        std::ostringstream str;
 
@@ -531,14 +936,7 @@ std::string getImageInfoString (const VkImageCreateInfo& imageInfo)
        return str.str();
 }
 
-struct ImageParams
-{
-       VkImageCreateFlags              flags;
-       VkImageTiling                   tiling;
-       bool                                    transient;
-};
-
-tcu::TestStatus testImage (Context& context, const ImageParams params)
+tcu::TestStatus ImageMemoryRequirementsOriginal::execTest (Context& context, const ImageTestParams params)
 {
        const DeviceInterface&          vk                              = context.getDeviceInterface();
        const InstanceInterface&        vki                             = context.getInstanceInterface();
@@ -547,7 +945,7 @@ tcu::TestStatus testImage (Context& context, const ImageParams params)
        const VkImageCreateFlags        sparseFlags             = VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT | VK_IMAGE_CREATE_SPARSE_ALIASED_BIT;
        const VkImageUsageFlags         transientFlags  = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT;
 
-       requireImageSparseFeatures(vki, physDevice, params.flags);
+       preTestChecks(context, vki, physDevice, params.flags);
 
        const VkPhysicalDeviceMemoryProperties  memoryProperties                = getPhysicalDeviceMemoryProperties(vki, physDevice);
        const deUint32                                                  notInitializedBits              = ~0u;
@@ -599,26 +997,28 @@ tcu::TestStatus testImage (Context& context, const ImageParams params)
                                        VK_IMAGE_LAYOUT_UNDEFINED,                                      // VkImageLayout            initialLayout;
                                };
 
-                               if (!isImageSupported(vki, physDevice, imageInfo))
+                               m_currentTestImageInfo = imageInfo;
+
+                               if (!isImageSupported(vki, physDevice, m_currentTestImageInfo))
                                        continue;
 
-                               log << tcu::TestLog::Message << "- " << getImageInfoString(imageInfo) << tcu::TestLog::EndMessage;
+                               log << tcu::TestLog::Message << "- " << getImageInfoString(m_currentTestImageInfo) << tcu::TestLog::EndMessage;
                                ++numCheckedImages;
 
-                               const Unique<VkImage>           image                   (createImage(vk, device, &imageInfo));
-                               const VkMemoryRequirements      requirements    = getImageMemoryRequirements(vk, device, *image);
-                               tcu::ResultCollector            result                  (log, "ERROR: ");
+                               tcu::ResultCollector result(log, "ERROR: ");
+
+                               updateMemoryRequirements(vk, device);
 
-                               verifyImageRequirements(result, memoryProperties, requirements, imageInfo);
+                               verifyMemoryRequirements(result, memoryProperties);
 
                                // For the same tiling, transient usage, and sparse flags, (and format, if D/S) memoryTypeBits must be the same for all images
-                               result.check((previousMemoryTypeBits == notInitializedBits) || (requirements.memoryTypeBits == previousMemoryTypeBits),
+                               result.check((previousMemoryTypeBits == notInitializedBits) || (m_currentTestRequirements.memoryTypeBits == previousMemoryTypeBits),
                                                                "memoryTypeBits differ from the ones in the previous image configuration");
 
                                if (result.getResult() != QP_TEST_RESULT_PASS)
                                        allPass = false;
 
-                               previousMemoryTypeBits = requirements.memoryTypeBits;
+                               previousMemoryTypeBits = m_currentTestRequirements.memoryTypeBits;
                        }
                }
        }
@@ -629,86 +1029,93 @@ tcu::TestStatus testImage (Context& context, const ImageParams params)
        return allPass ? tcu::TestStatus::pass("Pass") : tcu::TestStatus::fail("Some memory requirements were incorrect");
 }
 
-void populateTestGroup (tcu::TestCaseGroup* group)
+
+class ImageMemoryRequirementsExtended : public ImageMemoryRequirementsOriginal
 {
-       // Buffers
-       {
-               const struct
-               {
-                       VkBufferCreateFlags             flags;
-                       const char* const               name;
-               } bufferCases[] =
-               {
-                       { (VkBufferCreateFlags)0,                                                                                                                                                                                               "regular"                                       },
-                       { VK_BUFFER_CREATE_SPARSE_BINDING_BIT,                                                                                                                                                                  "sparse"                                        },
-                       { VK_BUFFER_CREATE_SPARSE_BINDING_BIT | VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,                                                                                  "sparse_residency"                      },
-                       { VK_BUFFER_CREATE_SPARSE_BINDING_BIT                                                                                   | VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,  "sparse_aliased"                        },
-                       { VK_BUFFER_CREATE_SPARSE_BINDING_BIT | VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT   | VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,  "sparse_residency_aliased"      },
-               };
+public:
+       static tcu::TestStatus testEntryPoint   (Context&                                                                       context,
+                                                                                        const ImageTestParams                                          params);
+
+protected:
+       virtual void addFunctionTestCase                (tcu::TestCaseGroup*                                            group,
+                                                                                        const std::string&                                                     name,
+                                                                                        const std::string&                                                     desc,
+                                                                                        const ImageTestParams                                          arg0);
+
+       virtual void preTestChecks                              (Context&                                                                       context,
+                                                                                        const InstanceInterface&                                       vki,
+                                                                                        const VkPhysicalDevice                                         physDevice,
+                                                                                        const VkImageCreateFlags                                       flags);
+
+       virtual void updateMemoryRequirements   (const DeviceInterface&                                         vk,
+                                                                                        const VkDevice                                                         device);
+};
 
-               de::MovePtr<tcu::TestCaseGroup> bufferGroup(new tcu::TestCaseGroup(group->getTestContext(), "buffer", ""));
 
-               for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(bufferCases); ++ndx)
-                       addFunctionCase(bufferGroup.get(), bufferCases[ndx].name, "", testBuffer, bufferCases[ndx].flags);
+tcu::TestStatus ImageMemoryRequirementsExtended::testEntryPoint (Context& context, const ImageTestParams params)
+{
+       ImageMemoryRequirementsExtended test;
 
-               group->addChild(bufferGroup.release());
-       }
+       return test.execTest(context, params);
+}
 
-       // Images
-       {
-               const struct
-               {
-                       VkImageCreateFlags              flags;
-                       bool                                    transient;
-                       const char* const               name;
-               } imageFlagsCases[] =
-               {
-                       { (VkImageCreateFlags)0,                                                                                                                                                                                                false,  "regular"                                       },
-                       { (VkImageCreateFlags)0,                                                                                                                                                                                                true,   "transient"                                     },
-                       { VK_IMAGE_CREATE_SPARSE_BINDING_BIT,                                                                                                                                                                   false,  "sparse"                                        },
-                       { VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,                                                                                    false,  "sparse_residency"                      },
-                       { VK_IMAGE_CREATE_SPARSE_BINDING_BIT                                                                                    | VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,   false,  "sparse_aliased"                        },
-                       { VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT             | VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,   false,  "sparse_residency_aliased"      },
-               };
-
-               de::MovePtr<tcu::TestCaseGroup> imageGroup(new tcu::TestCaseGroup(group->getTestContext(), "image", ""));
-
-               for (int flagsNdx = 0; flagsNdx < DE_LENGTH_OF_ARRAY(imageFlagsCases); ++flagsNdx)
-               for (int tilingNdx = 0; tilingNdx <= 1; ++tilingNdx)
-               {
-                       ImageParams                     params;
-                       std::ostringstream      caseName;
+void ImageMemoryRequirementsExtended::addFunctionTestCase (tcu::TestCaseGroup*         group,
+                                                                                                                  const std::string&           name,
+                                                                                                                  const std::string&           desc,
+                                                                                                                  const ImageTestParams        arg0)
+{
+       addFunctionCase(group, name, desc, testEntryPoint, arg0);
+}
+
+void ImageMemoryRequirementsExtended::preTestChecks (Context&                                  context,
+                                                                                                        const InstanceInterface&       vki,
+                                                                                                        const VkPhysicalDevice         physDevice,
+                                                                                                        const VkImageCreateFlags       createFlags)
+{
+       const std::string extensionName("VK_KHR_get_memory_requirements2");
 
-                       params.flags            =  imageFlagsCases[flagsNdx].flags;
-                       params.transient        =  imageFlagsCases[flagsNdx].transient;
-                       caseName                        << imageFlagsCases[flagsNdx].name;
+       if (!de::contains(context.getDeviceExtensions().begin(), context.getDeviceExtensions().end(), extensionName))
+               TCU_THROW(NotSupportedError, std::string(extensionName + " is not supported").c_str());
 
-                       if (tilingNdx != 0)
-                       {
-                               params.tiling =  VK_IMAGE_TILING_OPTIMAL;
-                               caseName      << "_tiling_optimal";
-                       }
-                       else
-                       {
-                               params.tiling =  VK_IMAGE_TILING_LINEAR;
-                               caseName      << "_tiling_linear";
-                       }
+       ImageMemoryRequirementsOriginal::preTestChecks (context, vki, physDevice, createFlags);
+}
 
-                       if ((params.flags & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) && (params.tiling == VK_IMAGE_TILING_LINEAR))
-                               continue;
+void ImageMemoryRequirementsExtended::updateMemoryRequirements (const DeviceInterface&         vk,
+                                                                                                                           const VkDevice                              device)
+{
+       m_currentTestRequirements = getImageMemoryRequirements2(vk, device, m_currentTestImageInfo);
+}
 
-                       addFunctionCase(imageGroup.get(), caseName.str(), "", testImage, params);
-               }
 
-               group->addChild(imageGroup.release());
-       }
+void populateCoreTestGroup (tcu::TestCaseGroup* group)
+{
+       BufferMemoryRequirementsOriginal        bufferTest;
+       ImageMemoryRequirementsOriginal         imageTest;
+
+       bufferTest.populateTestGroup(group);
+       imageTest.populateTestGroup(group);
+}
+
+void populateExtendedTestGroup (tcu::TestCaseGroup* group)
+{
+       BufferMemoryRequirementsExtended        bufferTest;
+       ImageMemoryRequirementsExtended         imageTest;
+
+       bufferTest.populateTestGroup(group);
+       imageTest.populateTestGroup(group);
 }
 
 } // anonymous
 
+
 tcu::TestCaseGroup* createRequirementsTests (tcu::TestContext& testCtx)
 {
-       return createTestGroup(testCtx, "requirements", "Buffer and image memory requirements", populateTestGroup);
+       de::MovePtr<tcu::TestCaseGroup> requirementsGroup(new tcu::TestCaseGroup(testCtx, "requirements", "Buffer and image memory requirements"));
+
+       requirementsGroup->addChild(createTestGroup(testCtx, "core",                                    "Memory requirements tests with core functionality",                                            populateCoreTestGroup));
+       requirementsGroup->addChild(createTestGroup(testCtx, "extended",                                "Memory requirements tests with extension VK_KHR_get_memory_requirements2",     populateExtendedTestGroup));
+
+       return requirementsGroup.release();
 }
 
 } // memory
index 1a15060..fd6e7d7 100644 (file)
@@ -15318,21 +15318,36 @@ dEQP-VK.memory.pipeline_barrier.all_device.1024
 dEQP-VK.memory.pipeline_barrier.all_device.8192
 dEQP-VK.memory.pipeline_barrier.all_device.65536
 dEQP-VK.memory.pipeline_barrier.all_device.1048576
-dEQP-VK.memory.requirements.buffer.regular
-dEQP-VK.memory.requirements.buffer.sparse
-dEQP-VK.memory.requirements.buffer.sparse_residency
-dEQP-VK.memory.requirements.buffer.sparse_aliased
-dEQP-VK.memory.requirements.buffer.sparse_residency_aliased
-dEQP-VK.memory.requirements.image.regular_tiling_linear
-dEQP-VK.memory.requirements.image.regular_tiling_optimal
-dEQP-VK.memory.requirements.image.transient_tiling_linear
-dEQP-VK.memory.requirements.image.transient_tiling_optimal
-dEQP-VK.memory.requirements.image.sparse_tiling_linear
-dEQP-VK.memory.requirements.image.sparse_tiling_optimal
-dEQP-VK.memory.requirements.image.sparse_residency_tiling_optimal
-dEQP-VK.memory.requirements.image.sparse_aliased_tiling_linear
-dEQP-VK.memory.requirements.image.sparse_aliased_tiling_optimal
-dEQP-VK.memory.requirements.image.sparse_residency_aliased_tiling_optimal
+dEQP-VK.memory.requirements.core.buffer.regular
+dEQP-VK.memory.requirements.core.buffer.sparse
+dEQP-VK.memory.requirements.core.buffer.sparse_residency
+dEQP-VK.memory.requirements.core.buffer.sparse_aliased
+dEQP-VK.memory.requirements.core.buffer.sparse_residency_aliased
+dEQP-VK.memory.requirements.core.image.regular_tiling_linear
+dEQP-VK.memory.requirements.core.image.regular_tiling_optimal
+dEQP-VK.memory.requirements.core.image.transient_tiling_linear
+dEQP-VK.memory.requirements.core.image.transient_tiling_optimal
+dEQP-VK.memory.requirements.core.image.sparse_tiling_linear
+dEQP-VK.memory.requirements.core.image.sparse_tiling_optimal
+dEQP-VK.memory.requirements.core.image.sparse_residency_tiling_optimal
+dEQP-VK.memory.requirements.core.image.sparse_aliased_tiling_linear
+dEQP-VK.memory.requirements.core.image.sparse_aliased_tiling_optimal
+dEQP-VK.memory.requirements.core.image.sparse_residency_aliased_tiling_optimal
+dEQP-VK.memory.requirements.extended.buffer.regular
+dEQP-VK.memory.requirements.extended.buffer.sparse
+dEQP-VK.memory.requirements.extended.buffer.sparse_residency
+dEQP-VK.memory.requirements.extended.buffer.sparse_aliased
+dEQP-VK.memory.requirements.extended.buffer.sparse_residency_aliased
+dEQP-VK.memory.requirements.extended.image.regular_tiling_linear
+dEQP-VK.memory.requirements.extended.image.regular_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.transient_tiling_linear
+dEQP-VK.memory.requirements.extended.image.transient_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.sparse_tiling_linear
+dEQP-VK.memory.requirements.extended.image.sparse_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.sparse_residency_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.sparse_aliased_tiling_linear
+dEQP-VK.memory.requirements.extended.image.sparse_aliased_tiling_optimal
+dEQP-VK.memory.requirements.extended.image.sparse_residency_aliased_tiling_optimal
 dEQP-VK.pipeline.stencil.format.s8_uint.states.front_fail_decc_pass_repl_dfail_inv_comp_not_equal_back_fail_decc_pass_repl_dfail_keep_comp_less
 dEQP-VK.pipeline.stencil.format.s8_uint.states.front_fail_incc_pass_keep_dfail_inv_comp_not_equal_back_fail_decc_pass_repl_dfail_inv_comp_not_equal
 dEQP-VK.pipeline.stencil.format.s8_uint.states.front_fail_wrap_pass_decw_dfail_wrap_comp_less_back_fail_incc_pass_keep_dfail_inv_comp_not_equal
index 8f18a78..a102a73 100644 (file)
@@ -232,6 +232,11 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
     VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
     VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
+    VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146000,
+    VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146001,
+    VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146002,
+    VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = 1000146003,
+    VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = 1000146004,
     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
     VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
     VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
@@ -4121,6 +4126,63 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR(
     VkSurfaceFormat2KHR*                        pSurfaceFormats);
 #endif
 
+#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"
+
+typedef struct VkBufferMemoryRequirementsInfo2KHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBuffer           buffer;
+} VkBufferMemoryRequirementsInfo2KHR;
+
+typedef struct VkImageMemoryRequirementsInfo2KHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+} VkImageMemoryRequirementsInfo2KHR;
+
+typedef struct VkImageSparseMemoryRequirementsInfo2KHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+} VkImageSparseMemoryRequirementsInfo2KHR;
+
+typedef struct VkMemoryRequirements2KHR {
+    VkStructureType         sType;
+    void*                   pNext;
+    VkMemoryRequirements    memoryRequirements;
+} VkMemoryRequirements2KHR;
+
+typedef struct VkSparseImageMemoryRequirements2KHR {
+    VkStructureType                    sType;
+    void*                              pNext;
+    VkSparseImageMemoryRequirements    memoryRequirements;
+} VkSparseImageMemoryRequirements2KHR;
+
+
+typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR(
+    VkDevice                                    device,
+    const VkImageMemoryRequirementsInfo2KHR*    pInfo,
+    VkMemoryRequirements2KHR*                   pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR(
+    VkDevice                                    device,
+    const VkBufferMemoryRequirementsInfo2KHR*   pInfo,
+    VkMemoryRequirements2KHR*                   pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR(
+    VkDevice                                    device,
+    const VkImageSparseMemoryRequirementsInfo2KHR* pInfo,
+    uint32_t*                                   pSparseMemoryRequirementCount,
+    VkSparseImageMemoryRequirements2KHR*        pSparseMemoryRequirements);
+#endif
+
 #define VK_EXT_debug_report 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)