1932fee600b73b54426a83ce0122e37578289a24fKantoch#ifndef _VKTSPARSERESOURCESTESTSUTIL_HPP 2932fee600b73b54426a83ce0122e37578289a24fKantoch#define _VKTSPARSERESOURCESTESTSUTIL_HPP 3932fee600b73b54426a83ce0122e37578289a24fKantoch/*------------------------------------------------------------------------ 4932fee600b73b54426a83ce0122e37578289a24fKantoch * Vulkan Conformance Tests 5932fee600b73b54426a83ce0122e37578289a24fKantoch * ------------------------ 6932fee600b73b54426a83ce0122e37578289a24fKantoch * 7932fee600b73b54426a83ce0122e37578289a24fKantoch * Copyright (c) 2016 The Khronos Group Inc. 8932fee600b73b54426a83ce0122e37578289a24fKantoch * 9978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 10978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License. 11978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at 12932fee600b73b54426a83ce0122e37578289a24fKantoch * 13978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 14932fee600b73b54426a83ce0122e37578289a24fKantoch * 15978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software 16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and 19978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License. 20932fee600b73b54426a83ce0122e37578289a24fKantoch * 21932fee600b73b54426a83ce0122e37578289a24fKantoch *//*! 22932fee600b73b54426a83ce0122e37578289a24fKantoch * \file vktSparseResourcesTestsUtil.hpp 23932fee600b73b54426a83ce0122e37578289a24fKantoch * \brief Sparse Resources Tests Utility Classes 24932fee600b73b54426a83ce0122e37578289a24fKantoch *//*--------------------------------------------------------------------*/ 25932fee600b73b54426a83ce0122e37578289a24fKantoch 26932fee600b73b54426a83ce0122e37578289a24fKantoch#include "vkDefs.hpp" 27932fee600b73b54426a83ce0122e37578289a24fKantoch#include "vkMemUtil.hpp" 28932fee600b73b54426a83ce0122e37578289a24fKantoch#include "vkRef.hpp" 29932fee600b73b54426a83ce0122e37578289a24fKantoch#include "vkRefUtil.hpp" 30a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski#include "vkMemUtil.hpp" 31932fee600b73b54426a83ce0122e37578289a24fKantoch#include "vkImageUtil.hpp" 32932fee600b73b54426a83ce0122e37578289a24fKantoch#include "deSharedPtr.hpp" 33a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski#include "deUniquePtr.hpp" 34932fee600b73b54426a83ce0122e37578289a24fKantoch 35932fee600b73b54426a83ce0122e37578289a24fKantochnamespace vkt 36932fee600b73b54426a83ce0122e37578289a24fKantoch{ 37932fee600b73b54426a83ce0122e37578289a24fKantochnamespace sparse 38932fee600b73b54426a83ce0122e37578289a24fKantoch{ 39932fee600b73b54426a83ce0122e37578289a24fKantoch 40a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskitypedef de::SharedPtr<vk::Unique<vk::VkDeviceMemory> > DeviceMemorySp; 41a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 42932fee600b73b54426a83ce0122e37578289a24fKantochenum ImageType 43932fee600b73b54426a83ce0122e37578289a24fKantoch{ 44932fee600b73b54426a83ce0122e37578289a24fKantoch IMAGE_TYPE_1D = 0, 45932fee600b73b54426a83ce0122e37578289a24fKantoch IMAGE_TYPE_1D_ARRAY, 46932fee600b73b54426a83ce0122e37578289a24fKantoch IMAGE_TYPE_2D, 47932fee600b73b54426a83ce0122e37578289a24fKantoch IMAGE_TYPE_2D_ARRAY, 48932fee600b73b54426a83ce0122e37578289a24fKantoch IMAGE_TYPE_3D, 49932fee600b73b54426a83ce0122e37578289a24fKantoch IMAGE_TYPE_CUBE, 50932fee600b73b54426a83ce0122e37578289a24fKantoch IMAGE_TYPE_CUBE_ARRAY, 51932fee600b73b54426a83ce0122e37578289a24fKantoch IMAGE_TYPE_BUFFER, 52932fee600b73b54426a83ce0122e37578289a24fKantoch 53932fee600b73b54426a83ce0122e37578289a24fKantoch IMAGE_TYPE_LAST 54932fee600b73b54426a83ce0122e37578289a24fKantoch}; 55932fee600b73b54426a83ce0122e37578289a24fKantoch 56a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskienum FeatureFlagBits 57452d94dd78885b79b938cbb5297f076a4d3f3a9ePetros Bantolas{ 58a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski FEATURE_TESSELLATION_SHADER = 1u << 0, 59a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski FEATURE_GEOMETRY_SHADER = 1u << 1, 60a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski FEATURE_SHADER_FLOAT_64 = 1u << 2, 61a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS = 1u << 3, 62a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski FEATURE_FRAGMENT_STORES_AND_ATOMICS = 1u << 4, 63a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski FEATURE_SHADER_TESSELLATION_AND_GEOMETRY_POINT_SIZE = 1u << 5, 64452d94dd78885b79b938cbb5297f076a4d3f3a9ePetros Bantolas}; 65a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskitypedef deUint32 FeatureFlags; 66452d94dd78885b79b938cbb5297f076a4d3f3a9ePetros Bantolas 67a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskienum 68932fee600b73b54426a83ce0122e37578289a24fKantoch{ 69a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski BUFFER_IMAGE_COPY_OFFSET_GRANULARITY = 4u, 70a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski NO_MATCH_FOUND = ~((deUint32)0), //!< no matching index 71932fee600b73b54426a83ce0122e37578289a24fKantoch}; 72932fee600b73b54426a83ce0122e37578289a24fKantoch 73a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkImageType mapImageType (const ImageType imageType); 74932fee600b73b54426a83ce0122e37578289a24fKantoch 75a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkImageViewType mapImageViewType (const ImageType imageType); 760abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch 77a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskistd::string getImageTypeName (const ImageType imageType); 78a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 79a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskistd::string getShaderImageType (const tcu::TextureFormat& format, 80a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const ImageType imageType); 81a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 82a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskistd::string getShaderImageDataType (const tcu::TextureFormat& format); 83a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 84a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskistd::string getShaderImageFormatQualifier (const tcu::TextureFormat& format); 85a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 86a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskistd::string getShaderImageCoordinates (const ImageType imageType, 87a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const std::string& x, 88a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const std::string& xy, 89a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const std::string& xyz); 900abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch 910abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch//!< Size used for addresing image in a compute shader 92a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskitcu::UVec3 getShaderGridSize (const ImageType imageType, 93a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const tcu::UVec3& imageSize, 94a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 mipLevel = 0); 95a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 960abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch//!< Size of a single image layer 97a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskitcu::UVec3 getLayerSize (const ImageType imageType, 98a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const tcu::UVec3& imageSize); 99a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 1000abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch//!< Number of array layers (for array and cube types) 101a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej JesionowskideUint32 getNumLayers (const ImageType imageType, 102a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const tcu::UVec3& imageSize); 103a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 1040abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch//!< Number of texels in an image 105a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej JesionowskideUint32 getNumPixels (const ImageType imageType, 106a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const tcu::UVec3& imageSize); 107a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 1080abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch//!< Coordinate dimension used for addressing (e.g. 3 (x,y,z) for 2d array) 109a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej JesionowskideUint32 getDimensions (const ImageType imageType); 110a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 1110abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch//!< Coordinate dimension used for addressing a single layer (e.g. 2 (x,y) for 2d array) 112a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej JesionowskideUint32 getLayerDimensions (const ImageType imageType); 113a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 1140abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch//!< Helper function for checking if requested image size does not exceed device limits 115a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskibool isImageSizeSupported (const vk::InstanceInterface& instance, 116a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkPhysicalDevice physicalDevice, 117a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const ImageType imageType, 118a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const tcu::UVec3& imageSize); 119a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 120a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkExtent3D mipLevelExtents (const vk::VkExtent3D& baseExtents, 121a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 mipLevel); 122a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 123a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskitcu::UVec3 mipLevelExtents (const tcu::UVec3& baseExtents, 124a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 mipLevel); 125a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 126a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej JesionowskideUint32 getImageMaxMipLevels (const vk::VkImageFormatProperties& imageFormatProperties, 127a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkExtent3D& extent); 128a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 129a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej JesionowskideUint32 getImageMipLevelSizeInBytes (const vk::VkExtent3D& baseExtents, 130a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 layersCount, 131a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const tcu::TextureFormat& format, 132a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 mipmapLevel, 133a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 mipmapMemoryAlignment = 1u); 134a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 135a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej JesionowskideUint32 getImageSizeInBytes (const vk::VkExtent3D& baseExtents, 136a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 layersCount, 137a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const tcu::TextureFormat& format, 138a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 mipmapLevelsCount = 1u, 139a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 mipmapMemoryAlignment = 1u); 140a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 141a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::Move<vk::VkCommandPool> makeCommandPool (const vk::DeviceInterface& vk, 142a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 143a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 queueFamilyIndex); 144a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 145a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::Move<vk::VkCommandBuffer> makeCommandBuffer (const vk::DeviceInterface& vk, 146a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 147a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkCommandPool commandPool); 148a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 149a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::Move<vk::VkPipelineLayout> makePipelineLayout (const vk::DeviceInterface& vk, 150a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 151b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski const vk::VkDescriptorSetLayout descriptorSetLayout = DE_NULL); 152a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 153a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::Move<vk::VkPipeline> makeComputePipeline (const vk::DeviceInterface& vk, 154a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 155a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkPipelineLayout pipelineLayout, 156a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkShaderModule shaderModule, 157a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkSpecializationInfo* specializationInfo = 0); 158a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 159a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::Move<vk::VkBufferView> makeBufferView (const vk::DeviceInterface& vk, 160a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 161a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkBuffer buffer, 162a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkFormat format, 163a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDeviceSize offset, 164a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDeviceSize size); 165a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 166a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::Move<vk::VkImageView> makeImageView (const vk::DeviceInterface& vk, 167a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 168a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImage image, 169a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageViewType imageViewType, 170a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkFormat format, 171a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageSubresourceRange subresourceRange); 172a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 173a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::Move<vk::VkDescriptorSet> makeDescriptorSet (const vk::DeviceInterface& vk, 174a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 175a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDescriptorPool descriptorPool, 176a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDescriptorSetLayout setLayout); 177a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 178a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::Move<vk::VkSemaphore> makeSemaphore (const vk::DeviceInterface& vk, 179a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device); 180a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 181a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::Move<vk::VkFence> makeFence (const vk::DeviceInterface& vk, 182a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 183a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkFenceCreateFlags flags = 0u); 184a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 185b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowskivk::Move<vk::VkFramebuffer> makeFramebuffer (const vk::DeviceInterface& vk, 186b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski const vk::VkDevice device, 187b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski const vk::VkRenderPass renderPass, 188b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski const deUint32 attachmentCount, 189b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski const vk::VkImageView* pAttachments, 190b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski const deUint32 width, 191b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski const deUint32 height, 192b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski const deUint32 layers = 1u); 193b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski 194a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskide::MovePtr<vk::Allocation> bindImage (const vk::DeviceInterface& vk, 195a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 196a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski vk::Allocator& allocator, 197a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImage image, 198a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::MemoryRequirement requirement); 199a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 200a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskide::MovePtr<vk::Allocation> bindBuffer (const vk::DeviceInterface& vk, 201a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 202a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski vk::Allocator& allocator, 203a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkBuffer buffer, 204a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::MemoryRequirement requirement); 205a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 206a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkBufferCreateInfo makeBufferCreateInfo (const vk::VkDeviceSize bufferSize, 207a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkBufferUsageFlags usage); 208a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 209a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkBufferImageCopy makeBufferImageCopy (const vk::VkExtent3D extent, 210a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 layersCount, 211a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 mipmapLevel = 0u, 212a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDeviceSize bufferOffset = 0ull); 213a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 214a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkBufferMemoryBarrier makeBufferMemoryBarrier (const vk::VkAccessFlags srcAccessMask, 215a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkAccessFlags dstAccessMask, 216a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkBuffer buffer, 217a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDeviceSize offset, 218a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDeviceSize bufferSizeBytes); 219a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 220a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkImageMemoryBarrier makeImageMemoryBarrier (const vk::VkAccessFlags srcAccessMask, 221a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkAccessFlags dstAccessMask, 222a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageLayout oldLayout, 223a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageLayout newLayout, 224a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImage image, 225a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageSubresourceRange subresourceRange); 226a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 227a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkImageMemoryBarrier makeImageMemoryBarrier (const vk::VkAccessFlags srcAccessMask, 228a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkAccessFlags dstAccessMask, 229a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageLayout oldLayout, 230a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageLayout newLayout, 231a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 srcQueueFamilyIndex, 232a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 destQueueFamilyIndex, 233a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImage image, 234a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageSubresourceRange subresourceRange); 235a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 236a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkMemoryBarrier makeMemoryBarrier (const vk::VkAccessFlags srcAccessMask, 237a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkAccessFlags dstAccessMask); 238a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 239a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkSparseImageMemoryBind makeSparseImageMemoryBind (const vk::DeviceInterface& vk, 240a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 241a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDeviceSize allocationSize, 242a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 memoryType, 243a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageSubresource& subresource, 244a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkOffset3D& offset, 245a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkExtent3D& extent); 246a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 247a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivk::VkSparseMemoryBind makeSparseMemoryBind (const vk::DeviceInterface& vk, 248a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 249a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDeviceSize allocationSize, 250a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 memoryType, 251a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDeviceSize resourceOffset); 252a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 253a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivoid beginCommandBuffer (const vk::DeviceInterface& vk, 254a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkCommandBuffer cmdBuffer); 255a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 256a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivoid endCommandBuffer (const vk::DeviceInterface& vk, 257a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkCommandBuffer cmdBuffer); 258a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 259a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivoid submitCommands (const vk::DeviceInterface& vk, 260a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkQueue queue, 261a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkCommandBuffer cmdBuffer, 262a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 waitSemaphoreCount = 0, 263a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkSemaphore* pWaitSemaphores = DE_NULL, 264a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkPipelineStageFlags* pWaitDstStageMask = DE_NULL, 265a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 signalSemaphoreCount = 0, 266a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkSemaphore* pSignalSemaphores = DE_NULL); 267a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 268a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivoid submitCommandsAndWait (const vk::DeviceInterface& vk, 269a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkDevice device, 270a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkQueue queue, 271a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkCommandBuffer cmdBuffer, 272a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 waitSemaphoreCount = 0, 273a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkSemaphore* pWaitSemaphores = DE_NULL, 274a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkPipelineStageFlags* pWaitDstStageMask = DE_NULL, 275a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const deUint32 signalSemaphoreCount = 0, 276a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkSemaphore* pSignalSemaphores = DE_NULL); 277a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 278a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskivoid requireFeatures (const vk::InstanceInterface& vki, 279a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkPhysicalDevice physicalDevice, 280a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const FeatureFlags flags); 281a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 282a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej JesionowskideUint32 findMatchingMemoryType (const vk::InstanceInterface& instance, 283a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkPhysicalDevice physicalDevice, 284a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkMemoryRequirements& objectMemoryRequirements, 285a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::MemoryRequirement& memoryRequirement); 286a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 287a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskibool checkSparseSupportForImageType (const vk::InstanceInterface& instance, 288a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkPhysicalDevice physicalDevice, 289a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const ImageType imageType); 290a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 291a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskibool checkSparseSupportForImageFormat (const vk::InstanceInterface& instance, 292a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkPhysicalDevice physicalDevice, 293a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageCreateInfo& imageInfo); 294a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 295a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskibool checkImageFormatFeatureSupport (const vk::InstanceInterface& instance, 296a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkPhysicalDevice physicalDevice, 297a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkFormat format, 298a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkFormatFeatureFlags featureFlags); 299a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 300a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej JesionowskideUint32 getSparseAspectRequirementsIndex (const std::vector<vk::VkSparseImageMemoryRequirements>& requirements, 301a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski const vk::VkImageAspectFlags aspectFlags); 3020abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch 303b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowskiinline vk::Move<vk::VkBuffer> makeBuffer (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkBufferCreateInfo& createInfo) 304b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski{ 305b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski return createBuffer(vk, device, &createInfo); 306b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski} 307b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski 308b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowskiinline vk::Move<vk::VkImage> makeImage (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkImageCreateInfo& createInfo) 309b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski{ 310b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski return createImage(vk, device, &createInfo); 311b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski} 312b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski 313932fee600b73b54426a83ce0122e37578289a24fKantochtemplate<typename T> 314a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskiinline de::SharedPtr<vk::Unique<T> > makeVkSharedPtr (vk::Move<T> vkMove) 315932fee600b73b54426a83ce0122e37578289a24fKantoch{ 316932fee600b73b54426a83ce0122e37578289a24fKantoch return de::SharedPtr<vk::Unique<T> >(new vk::Unique<T>(vkMove)); 317932fee600b73b54426a83ce0122e37578289a24fKantoch} 318932fee600b73b54426a83ce0122e37578289a24fKantoch 3190abb8ae884208e3355eb68bde6cedab1dd7b773cKantochtemplate<typename T> 320b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowskiinline de::SharedPtr<de::UniquePtr<T> > makeDeSharedPtr (de::MovePtr<T> deMove) 321b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski{ 322b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski return de::SharedPtr<de::UniquePtr<T> >(new de::UniquePtr<T>(deMove)); 323b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski} 324b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowski 325b61fc2025246c4a88212f4f97895b47ad82a138dMaciej Jesionowskitemplate<typename T> 326a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskiinline std::size_t sizeInBytes (const std::vector<T>& vec) 3270abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch{ 3280abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch return vec.size() * sizeof(vec[0]); 3290abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch} 3300abb8ae884208e3355eb68bde6cedab1dd7b773cKantoch 331a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskitemplate<typename T> 332a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowskiinline const T* getDataOrNullptr (const std::vector<T>& vec, const std::size_t index = 0u) 333a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski{ 334a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski return (index < vec.size() ? &vec[index] : DE_NULL); 335a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski} 336a6fbec3926163fbfc0ad45b21f7b7e2f8aae7adfMaciej Jesionowski 337932fee600b73b54426a83ce0122e37578289a24fKantoch} // sparse 338932fee600b73b54426a83ce0122e37578289a24fKantoch} // vkt 339932fee600b73b54426a83ce0122e37578289a24fKantoch 340932fee600b73b54426a83ce0122e37578289a24fKantoch#endif // _VKTSPARSERESOURCESTESTSUTIL_HPP 341