dEQP-VK.pipeline: extract common util functions
authorMaciej Jesionowski <maciej.jesionowski@mobica.com>
Thu, 21 Jul 2016 14:31:15 +0000 (16:31 +0200)
committerKantoch <marcin.kantoch@mobica.com>
Wed, 10 Aug 2016 09:40:59 +0000 (11:40 +0200)
Change-Id: I45c331494e4b72851e7b7505445244d8baaa6b6e

external/vulkancts/modules/vulkan/pipeline/CMakeLists.txt
external/vulkancts/modules/vulkan/pipeline/vktPipelineEarlyFragmentTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineMakeUtil.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/pipeline/vktPipelineMakeUtil.hpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/pipeline/vktPipelineSpecConstantTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineSpecConstantUtil.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineSpecConstantUtil.hpp

index b7fd16f..383e8b2 100644 (file)
@@ -48,6 +48,8 @@ set(DEQP_VK_PIPELINE_SRCS
        vktPipelineEarlyFragmentTests.hpp
        vktPipelineCacheTests.cpp
        vktPipelineCacheTests.hpp
+       vktPipelineMakeUtil.cpp
+       vktPipelineMakeUtil.hpp
        )
 
 set(DEQP_VK_PIPELINE_LIBS
index c5fe5b1..dd3649f 100644 (file)
@@ -23,6 +23,7 @@
  *//*--------------------------------------------------------------------*/
 
 #include "vktPipelineEarlyFragmentTests.hpp"
+#include "vktPipelineMakeUtil.hpp"
 #include "vktTestCaseUtil.hpp"
 
 #include "vkDefs.hpp"
@@ -51,251 +52,6 @@ namespace pipeline
 namespace
 {
 
-// \note Some utility functions are general, but others are custom tailored to this test.
-
-class Buffer
-{
-public:
-                                                                       Buffer                  (const DeviceInterface&         vk,
-                                                                                                        const VkDevice                         device,
-                                                                                                        Allocator&                                     allocator,
-                                                                                                        const VkBufferCreateInfo&      bufferCreateInfo,
-                                                                                                        const MemoryRequirement        memoryRequirement)
-
-                                                                               : m_buffer              (createBuffer(vk, device, &bufferCreateInfo))
-                                                                               , m_allocation  (allocator.allocate(getBufferMemoryRequirements(vk, device, *m_buffer), memoryRequirement))
-                                                                       {
-                                                                               VK_CHECK(vk.bindBufferMemory(device, *m_buffer, m_allocation->getMemory(), m_allocation->getOffset()));
-                                                                       }
-
-       const VkBuffer&                                 get                             (void) const { return *m_buffer; }
-       const VkBuffer&                                 operator*               (void) const { return get(); }
-       Allocation&                                             getAllocation   (void) const { return *m_allocation; }
-
-private:
-       const Unique<VkBuffer>                  m_buffer;
-       const de::UniquePtr<Allocation> m_allocation;
-
-       // "deleted"
-                                                                       Buffer                  (const Buffer&);
-       Buffer&                                                 operator=               (const Buffer&);
-};
-
-class Image
-{
-public:
-                                                                       Image                   (const DeviceInterface&         vk,
-                                                                                                        const VkDevice                         device,
-                                                                                                        Allocator&                                     allocator,
-                                                                                                        const VkImageCreateInfo&       imageCreateInfo,
-                                                                                                        const MemoryRequirement        memoryRequirement)
-
-                                                                               : m_image               (createImage(vk, device, &imageCreateInfo))
-                                                                               , m_allocation  (allocator.allocate(getImageMemoryRequirements(vk, device, *m_image), memoryRequirement))
-                                                                       {
-                                                                               VK_CHECK(vk.bindImageMemory(device, *m_image, m_allocation->getMemory(), m_allocation->getOffset()));
-                                                                       }
-
-       const VkImage&                                  get                             (void) const { return *m_image; }
-       const VkImage&                                  operator*               (void) const { return get(); }
-       Allocation&                                             getAllocation   (void) const { return *m_allocation; }
-
-private:
-       const Unique<VkImage>                   m_image;
-       const de::UniquePtr<Allocation> m_allocation;
-
-       // "deleted"
-                                                                       Image                   (const Image&);
-       Image&                                                  operator=               (const Image&);
-};
-
-Move<VkImageView> makeImageView (const DeviceInterface&                        vk,
-                                                                const VkDevice                                 vkDevice,
-                                                                const VkImage                                  image,
-                                                                const VkImageViewType                  imageViewType,
-                                                                const VkFormat                                 format,
-                                                                const VkImageSubresourceRange  subresourceRange)
-{
-       const VkImageViewCreateInfo imageViewParams =
-       {
-               VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,               // VkStructureType                      sType;
-               DE_NULL,                                                                                // const void*                          pNext;
-               (VkImageViewCreateFlags)0,                                              // VkImageViewCreateFlags       flags;
-               image,                                                                                  // VkImage                                      image;
-               imageViewType,                                                                  // VkImageViewType                      viewType;
-               format,                                                                                 // VkFormat                                     format;
-               makeComponentMappingRGBA(),                                             // VkComponentMapping           components;
-               subresourceRange,                                                               // VkImageSubresourceRange      subresourceRange;
-       };
-       return createImageView(vk, vkDevice, &imageViewParams);
-}
-
-VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize                    bufferSize,
-                                                                                const VkBufferUsageFlags       usage)
-{
-       const VkBufferCreateInfo bufferCreateInfo =
-       {
-               VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,   // VkStructureType              sType;
-               DE_NULL,                                                                // const void*                  pNext;
-               (VkBufferCreateFlags)0,                                 // VkBufferCreateFlags  flags;
-               bufferSize,                                                             // VkDeviceSize                 size;
-               usage,                                                                  // VkBufferUsageFlags   usage;
-               VK_SHARING_MODE_EXCLUSIVE,                              // VkSharingMode                sharingMode;
-               0u,                                                                             // deUint32                             queueFamilyIndexCount;
-               DE_NULL,                                                                // const deUint32*              pQueueFamilyIndices;
-       };
-       return bufferCreateInfo;
-}
-
-Move<VkDescriptorSet> makeDescriptorSet (const DeviceInterface&                        vk,
-                                                                                const VkDevice                                 device,
-                                                                                const VkDescriptorPool                 descriptorPool,
-                                                                                const VkDescriptorSetLayout    setLayout)
-{
-       const VkDescriptorSetAllocateInfo allocateParams =
-       {
-               VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,         // VkStructureType                              sType;
-               DE_NULL,                                                                                        // const void*                                  pNext;
-               descriptorPool,                                                                         // VkDescriptorPool                             descriptorPool;
-               1u,                                                                                                     // deUint32                                             setLayoutCount;
-               &setLayout,                                                                                     // const VkDescriptorSetLayout* pSetLayouts;
-       };
-       return allocateDescriptorSet(vk, device, &allocateParams);
-}
-
-Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&              vk,
-                                                                                  const VkDevice                               device,
-                                                                                  const VkDescriptorSetLayout  descriptorSetLayout)
-{
-       const VkPipelineLayoutCreateInfo pipelineLayoutParams =
-       {
-               VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,          // VkStructureType                                      sType;
-               DE_NULL,                                                                                        // const void*                                          pNext;
-               (VkPipelineLayoutCreateFlags)0,                                         // VkPipelineLayoutCreateFlags          flags;
-               1u,                                                                                                     // deUint32                                                     setLayoutCount;
-               &descriptorSetLayout,                                                           // const VkDescriptorSetLayout*         pSetLayouts;
-               0u,                                                                                                     // deUint32                                                     pushConstantRangeCount;
-               DE_NULL,                                                                                        // const VkPushConstantRange*           pPushConstantRanges;
-       };
-       return createPipelineLayout(vk, device, &pipelineLayoutParams);
-}
-
-Move<VkCommandPool> makeCommandPool (const DeviceInterface& vk, const VkDevice device, const deUint32 queueFamilyIndex)
-{
-       const VkCommandPoolCreateInfo commandPoolParams =
-       {
-               VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,                     // VkStructureType                      sType;
-               DE_NULL,                                                                                        // const void*                          pNext;
-               VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,        // VkCommandPoolCreateFlags     flags;
-               queueFamilyIndex,                                                                       // deUint32                                     queueFamilyIndex;
-       };
-       return createCommandPool(vk, device, &commandPoolParams);
-}
-
-Move<VkCommandBuffer> makeCommandBuffer (const DeviceInterface& vk, const VkDevice device, const VkCommandPool commandPool)
-{
-       const VkCommandBufferAllocateInfo bufferAllocateParams =
-       {
-               VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,         // VkStructureType                      sType;
-               DE_NULL,                                                                                        // const void*                          pNext;
-               commandPool,                                                                            // VkCommandPool                        commandPool;
-               VK_COMMAND_BUFFER_LEVEL_PRIMARY,                                        // VkCommandBufferLevel         level;
-               1u,                                                                                                     // deUint32                                     bufferCount;
-       };
-       return allocateCommandBuffer(vk, device, &bufferAllocateParams);
-}
-
-void beginCommandBuffer (const DeviceInterface& vk, const VkCommandBuffer commandBuffer)
-{
-       const VkCommandBufferBeginInfo commandBufBeginParams =
-       {
-               VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
-               DE_NULL,                                                                                // const void*                                          pNext;
-               (VkCommandBufferUsageFlags)0,                                   // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                // const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
-       };
-       VK_CHECK(vk.beginCommandBuffer(commandBuffer, &commandBufBeginParams));
-}
-
-void endCommandBuffer (const DeviceInterface& vk, const VkCommandBuffer commandBuffer)
-{
-       VK_CHECK(vk.endCommandBuffer(commandBuffer));
-}
-
-void submitCommandsAndWait (const DeviceInterface&     vk,
-                                                       const VkDevice                  device,
-                                                       const VkQueue                   queue,
-                                                       const VkCommandBuffer   commandBuffer)
-{
-       const VkFenceCreateInfo fenceParams =
-       {
-               VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,    // VkStructureType              sType;
-               DE_NULL,                                                                // const void*                  pNext;
-               (VkFenceCreateFlags)0,                                  // VkFenceCreateFlags   flags;
-       };
-       const Unique<VkFence> fence(createFence(vk, device, &fenceParams));
-
-       const VkSubmitInfo submitInfo =
-       {
-               VK_STRUCTURE_TYPE_SUBMIT_INFO,          // VkStructureType                      sType;
-               DE_NULL,                                                        // const void*                          pNext;
-               0u,                                                                     // deUint32                                     waitSemaphoreCount;
-               DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
-               DE_NULL,                                                        // const VkPipelineStageFlags*    pWaitDstStageMask;
-               1u,                                                                     // deUint32                                     commandBufferCount;
-               &commandBuffer,                                         // const VkCommandBuffer*       pCommandBuffers;
-               0u,                                                                     // deUint32                                     signalSemaphoreCount;
-               DE_NULL,                                                        // const VkSemaphore*           pSignalSemaphores;
-       };
-
-       VK_CHECK(vk.queueSubmit(queue, 1u, &submitInfo, *fence));
-       VK_CHECK(vk.waitForFences(device, 1u, &fence.get(), DE_TRUE, ~0ull));
-}
-
-VkImageMemoryBarrier makeImageMemoryBarrier    (const VkAccessFlags                    srcAccessMask,
-                                                                                        const VkAccessFlags                    dstAccessMask,
-                                                                                        const VkImageLayout                    oldLayout,
-                                                                                        const VkImageLayout                    newLayout,
-                                                                                        const VkImage                                  image,
-                                                                                        const VkImageSubresourceRange  subresourceRange)
-{
-       const VkImageMemoryBarrier barrier =
-       {
-               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
-               DE_NULL,                                                                                // const void*                          pNext;
-               srcAccessMask,                                                                  // VkAccessFlags                        outputMask;
-               dstAccessMask,                                                                  // VkAccessFlags                        inputMask;
-               oldLayout,                                                                              // VkImageLayout                        oldLayout;
-               newLayout,                                                                              // VkImageLayout                        newLayout;
-               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
-               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     destQueueFamilyIndex;
-               image,                                                                                  // VkImage                                      image;
-               subresourceRange,                                                               // VkImageSubresourceRange      subresourceRange;
-       };
-       return barrier;
-}
-
-VkBufferMemoryBarrier makeBufferMemoryBarrier (const VkAccessFlags     srcAccessMask,
-                                                                                          const VkAccessFlags  dstAccessMask,
-                                                                                          const VkBuffer               buffer,
-                                                                                          const VkDeviceSize   offset,
-                                                                                          const VkDeviceSize   bufferSizeBytes)
-{
-       const VkBufferMemoryBarrier barrier =
-       {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,        // VkStructureType      sType;
-               DE_NULL,                                                                        // const void*          pNext;
-               srcAccessMask,                                                          // VkAccessFlags        srcAccessMask;
-               dstAccessMask,                                                          // VkAccessFlags        dstAccessMask;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     srcQueueFamilyIndex;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     destQueueFamilyIndex;
-               buffer,                                                                         // VkBuffer                     buffer;
-               offset,                                                                         // VkDeviceSize         offset;
-               bufferSizeBytes,                                                        // VkDeviceSize         size;
-       };
-       return barrier;
-}
-
 //! Basic 2D image.
 inline VkImageCreateInfo makeImageCreateInfo (const tcu::IVec2& size, const VkFormat format, const VkImageUsageFlags usage)
 {
@@ -348,12 +104,6 @@ void beginRenderPass (const DeviceInterface&       vk,
        vk.cmdBeginRenderPass(commandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 }
 
-void endRenderPass (const DeviceInterface&     vk,
-                                       const VkCommandBuffer   commandBuffer)
-{
-       vk.cmdEndRenderPass(commandBuffer);
-}
-
 Move<VkRenderPass> makeRenderPass (const DeviceInterface&      vk,
                                                                   const VkDevice                       device,
                                                                   const VkFormat                       colorFormat,
@@ -975,7 +725,7 @@ tcu::TestStatus EarlyFragmentTestInstance::iterate (void)
                        commandClearStencilAttachment(vk, *cmdBuffer, makeOffset2D(0, 0), makeExtent2D(renderSize.x()/2, renderSize.y()), 1u);
 
                vk.cmdDraw(*cmdBuffer, numVertices, 1u, 0u, 0u);
-               endRenderPass(vk, *cmdBuffer);
+               vk.cmdEndRenderPass(*cmdBuffer);
 
                {
                        const VkBufferMemoryBarrier shaderWriteBarrier = makeBufferMemoryBarrier(
@@ -1002,7 +752,7 @@ tcu::TestStatus EarlyFragmentTestInstance::iterate (void)
                                0u, DE_NULL, 1u, &postCopyColorBufferBarrier, 0u, DE_NULL);
                }
 
-               endCommandBuffer(vk, *cmdBuffer);
+               VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
                submitCommandsAndWait(vk, device, queue, *cmdBuffer);
        }
 
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMakeUtil.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMakeUtil.cpp
new file mode 100644 (file)
index 0000000..7485b26
--- /dev/null
@@ -0,0 +1,323 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2016 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Object creation utilities
+ *//*--------------------------------------------------------------------*/
+
+#include "vktPipelineMakeUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkPrograms.hpp"
+#include "vkRefUtil.hpp"
+#include "vkQueryUtil.hpp"
+#include <vector>
+
+namespace vkt
+{
+namespace pipeline
+{
+using namespace vk;
+using de::MovePtr;
+
+Buffer::Buffer (const vk::DeviceInterface&             vk,
+                               const vk::VkDevice                              device,
+                               vk::Allocator&                                  allocator,
+                               const vk::VkBufferCreateInfo&   bufferCreateInfo,
+                               const vk::MemoryRequirement             memoryRequirement)
+       : m_buffer              (createBuffer(vk, device, &bufferCreateInfo))
+       , m_allocation  (bindBuffer(vk, device, allocator, *m_buffer, memoryRequirement))
+{
+}
+
+Image::Image (const vk::DeviceInterface&               vk,
+                         const vk::VkDevice                            device,
+                         vk::Allocator&                                        allocator,
+                         const vk::VkImageCreateInfo&          imageCreateInfo,
+                         const vk::MemoryRequirement           memoryRequirement)
+       : m_image               (createImage(vk, device, &imageCreateInfo))
+       , m_allocation  (bindImage(vk, device, allocator, *m_image, memoryRequirement))
+{
+}
+
+VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize                    bufferSize,
+                                                                                const VkBufferUsageFlags       usage)
+{
+       const VkBufferCreateInfo bufferCreateInfo =
+       {
+               VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,   // VkStructureType              sType;
+               DE_NULL,                                                                // const void*                  pNext;
+               (VkBufferCreateFlags)0,                                 // VkBufferCreateFlags  flags;
+               bufferSize,                                                             // VkDeviceSize                 size;
+               usage,                                                                  // VkBufferUsageFlags   usage;
+               VK_SHARING_MODE_EXCLUSIVE,                              // VkSharingMode                sharingMode;
+               0u,                                                                             // deUint32                             queueFamilyIndexCount;
+               DE_NULL,                                                                // const deUint32*              pQueueFamilyIndices;
+       };
+       return bufferCreateInfo;
+}
+
+VkBufferMemoryBarrier makeBufferMemoryBarrier (const VkAccessFlags     srcAccessMask,
+                                                                                          const VkAccessFlags  dstAccessMask,
+                                                                                          const VkBuffer               buffer,
+                                                                                          const VkDeviceSize   offset,
+                                                                                          const VkDeviceSize   bufferSizeBytes)
+{
+       const VkBufferMemoryBarrier barrier =
+       {
+               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,        // VkStructureType      sType;
+               DE_NULL,                                                                        // const void*          pNext;
+               srcAccessMask,                                                          // VkAccessFlags        srcAccessMask;
+               dstAccessMask,                                                          // VkAccessFlags        dstAccessMask;
+               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     srcQueueFamilyIndex;
+               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     destQueueFamilyIndex;
+               buffer,                                                                         // VkBuffer                     buffer;
+               offset,                                                                         // VkDeviceSize         offset;
+               bufferSizeBytes,                                                        // VkDeviceSize         size;
+       };
+       return barrier;
+}
+
+VkImageMemoryBarrier makeImageMemoryBarrier    (const VkAccessFlags                    srcAccessMask,
+                                                                                        const VkAccessFlags                    dstAccessMask,
+                                                                                        const VkImageLayout                    oldLayout,
+                                                                                        const VkImageLayout                    newLayout,
+                                                                                        const VkImage                                  image,
+                                                                                        const VkImageSubresourceRange  subresourceRange)
+{
+       const VkImageMemoryBarrier barrier =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
+               DE_NULL,                                                                                // const void*                          pNext;
+               srcAccessMask,                                                                  // VkAccessFlags                        outputMask;
+               dstAccessMask,                                                                  // VkAccessFlags                        inputMask;
+               oldLayout,                                                                              // VkImageLayout                        oldLayout;
+               newLayout,                                                                              // VkImageLayout                        newLayout;
+               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
+               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     destQueueFamilyIndex;
+               image,                                                                                  // VkImage                                      image;
+               subresourceRange,                                                               // VkImageSubresourceRange      subresourceRange;
+       };
+       return barrier;
+}
+
+Move<VkCommandPool> makeCommandPool (const DeviceInterface& vk, const VkDevice device, const deUint32 queueFamilyIndex)
+{
+       const VkCommandPoolCreateInfo info =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,                     // VkStructureType                      sType;
+               DE_NULL,                                                                                        // const void*                          pNext;
+               VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,        // VkCommandPoolCreateFlags     flags;
+               queueFamilyIndex,                                                                       // deUint32                                     queueFamilyIndex;
+       };
+       return createCommandPool(vk, device, &info);
+}
+
+Move<VkCommandBuffer> makeCommandBuffer (const DeviceInterface& vk, const VkDevice device, const VkCommandPool commandPool)
+{
+       const VkCommandBufferAllocateInfo info =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,         // VkStructureType              sType;
+               DE_NULL,                                                                                        // const void*                  pNext;
+               commandPool,                                                                            // VkCommandPool                commandPool;
+               VK_COMMAND_BUFFER_LEVEL_PRIMARY,                                        // VkCommandBufferLevel level;
+               1u,                                                                                                     // deUint32                             commandBufferCount;
+       };
+       return allocateCommandBuffer(vk, device, &info);
+}
+
+Move<VkDescriptorSet> makeDescriptorSet (const DeviceInterface&                        vk,
+                                                                                const VkDevice                                 device,
+                                                                                const VkDescriptorPool                 descriptorPool,
+                                                                                const VkDescriptorSetLayout    setLayout)
+{
+       const VkDescriptorSetAllocateInfo info =
+       {
+               VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,         // VkStructureType                              sType;
+               DE_NULL,                                                                                        // const void*                                  pNext;
+               descriptorPool,                                                                         // VkDescriptorPool                             descriptorPool;
+               1u,                                                                                                     // deUint32                                             descriptorSetCount;
+               &setLayout,                                                                                     // const VkDescriptorSetLayout* pSetLayouts;
+       };
+       return allocateDescriptorSet(vk, device, &info);
+}
+
+Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&              vk,
+                                                                                  const VkDevice                               device)
+{
+       const VkPipelineLayoutCreateInfo info =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,          // VkStructureType                              sType;
+               DE_NULL,                                                                                        // const void*                                  pNext;
+               (VkPipelineLayoutCreateFlags)0,                                         // VkPipelineLayoutCreateFlags  flags;
+               0u,                                                                                                     // deUint32                                             setLayoutCount;
+               DE_NULL,                                                                                        // const VkDescriptorSetLayout* pSetLayouts;
+               0u,                                                                                                     // deUint32                                             pushConstantRangeCount;
+               DE_NULL,                                                                                        // const VkPushConstantRange*   pPushConstantRanges;
+       };
+       return createPipelineLayout(vk, device, &info);
+}
+
+Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&              vk,
+                                                                                  const VkDevice                               device,
+                                                                                  const VkDescriptorSetLayout  descriptorSetLayout)
+{
+       const VkPipelineLayoutCreateInfo info =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,          // VkStructureType                              sType;
+               DE_NULL,                                                                                        // const void*                                  pNext;
+               (VkPipelineLayoutCreateFlags)0,                                         // VkPipelineLayoutCreateFlags  flags;
+               1u,                                                                                                     // deUint32                                             setLayoutCount;
+               &descriptorSetLayout,                                                           // const VkDescriptorSetLayout* pSetLayouts;
+               0u,                                                                                                     // deUint32                                             pushConstantRangeCount;
+               DE_NULL,                                                                                        // const VkPushConstantRange*   pPushConstantRanges;
+       };
+       return createPipelineLayout(vk, device, &info);
+}
+
+Move<VkPipeline> makeComputePipeline (const DeviceInterface&           vk,
+                                                                         const VkDevice                                device,
+                                                                         const VkPipelineLayout                pipelineLayout,
+                                                                         const VkShaderModule                  shaderModule,
+                                                                         const VkSpecializationInfo*   specInfo)
+{
+       const VkPipelineShaderStageCreateInfo shaderStageInfo =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,    // VkStructureType                                      sType;
+               DE_NULL,                                                                                                // const void*                                          pNext;
+               (VkPipelineShaderStageCreateFlags)0,                                    // VkPipelineShaderStageCreateFlags     flags;
+               VK_SHADER_STAGE_COMPUTE_BIT,                                                    // VkShaderStageFlagBits                        stage;
+               shaderModule,                                                                                   // VkShaderModule                                       module;
+               "main",                                                                                                 // const char*                                          pName;
+               specInfo,                                                                                               // const VkSpecializationInfo*          pSpecializationInfo;
+       };
+       const VkComputePipelineCreateInfo pipelineInfo =
+       {
+               VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,         // VkStructureType                                      sType;
+               DE_NULL,                                                                                        // const void*                                          pNext;
+               (VkPipelineCreateFlags)0,                                                       // VkPipelineCreateFlags                        flags;
+               shaderStageInfo,                                                                        // VkPipelineShaderStageCreateInfo      stage;
+               pipelineLayout,                                                                         // VkPipelineLayout                                     layout;
+               DE_NULL,                                                                                        // VkPipeline                                           basePipelineHandle;
+               0,                                                                                                      // deInt32                                                      basePipelineIndex;
+       };
+       return createComputePipeline(vk, device, DE_NULL , &pipelineInfo);
+}
+
+Move<VkImageView> makeImageView (const DeviceInterface&                        vk,
+                                                                const VkDevice                                 vkDevice,
+                                                                const VkImage                                  image,
+                                                                const VkImageViewType                  viewType,
+                                                                const VkFormat                                 format,
+                                                                const VkImageSubresourceRange  subresourceRange)
+{
+       const VkImageViewCreateInfo imageViewParams =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,               // VkStructureType                      sType;
+               DE_NULL,                                                                                // const void*                          pNext;
+               (VkImageViewCreateFlags)0,                                              // VkImageViewCreateFlags       flags;
+               image,                                                                                  // VkImage                                      image;
+               viewType,                                                                               // VkImageViewType                      viewType;
+               format,                                                                                 // VkFormat                                     format;
+               makeComponentMappingRGBA(),                                             // VkComponentMapping           components;
+               subresourceRange,                                                               // VkImageSubresourceRange      subresourceRange;
+       };
+       return createImageView(vk, vkDevice, &imageViewParams);
+}
+
+void beginCommandBuffer (const DeviceInterface& vk, const VkCommandBuffer commandBuffer)
+{
+       const VkCommandBufferBeginInfo info =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                          sType;
+               DE_NULL,                                                                                // const void*                              pNext;
+               VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,    // VkCommandBufferUsageFlags                flags;
+               DE_NULL,                                                                                // const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
+       };
+       VK_CHECK(vk.beginCommandBuffer(commandBuffer, &info));
+}
+
+void submitCommandsAndWait (const DeviceInterface&     vk,
+                                                       const VkDevice                  device,
+                                                       const VkQueue                   queue,
+                                                       const VkCommandBuffer   commandBuffer)
+{
+       const VkFenceCreateInfo fenceInfo =
+       {
+               VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,    // VkStructureType              sType;
+               DE_NULL,                                                                // const void*                  pNext;
+               (VkFenceCreateFlags)0,                                  // VkFenceCreateFlags   flags;
+       };
+       const Unique<VkFence> fence(createFence(vk, device, &fenceInfo));
+
+       const VkSubmitInfo submitInfo =
+       {
+               VK_STRUCTURE_TYPE_SUBMIT_INFO,          // VkStructureType                sType;
+               DE_NULL,                                                        // const void*                    pNext;
+               0u,                                                                     // uint32_t                       waitSemaphoreCount;
+               DE_NULL,                                                        // const VkSemaphore*             pWaitSemaphores;
+               DE_NULL,                                                        // const VkPipelineStageFlags*    pWaitDstStageMask;
+               1u,                                                                     // uint32_t                       commandBufferCount;
+               &commandBuffer,                                         // const VkCommandBuffer*         pCommandBuffers;
+               0u,                                                                     // uint32_t                       signalSemaphoreCount;
+               DE_NULL,                                                        // const VkSemaphore*             pSignalSemaphores;
+       };
+       VK_CHECK(vk.queueSubmit(queue, 1u, &submitInfo, *fence));
+       VK_CHECK(vk.waitForFences(device, 1u, &fence.get(), DE_TRUE, ~0ull));
+}
+
+Move<VkFramebuffer> makeFramebuffer (const DeviceInterface&            vk,
+                                                                        const VkDevice                         device,
+                                                                        const VkRenderPass                     renderPass,
+                                                                        const deUint32                         attachmentCount,
+                                                                        const VkImageView*                     pAttachments,
+                                                                        const deUint32                         width,
+                                                                        const deUint32                         height,
+                                                                        const deUint32                         layers)
+{
+       const VkFramebufferCreateInfo framebufferInfo = {
+               VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,              // VkStructureType                             sType;
+               DE_NULL,                                                                                // const void*                                 pNext;
+               (VkFramebufferCreateFlags)0,                                    // VkFramebufferCreateFlags                    flags;
+               renderPass,                                                                             // VkRenderPass                                renderPass;
+               attachmentCount,                                                                // uint32_t                                    attachmentCount;
+               pAttachments,                                                                   // const VkImageView*                          pAttachments;
+               width,                                                                                  // uint32_t                                    width;
+               height,                                                                                 // uint32_t                                    height;
+               layers,                                                                                 // uint32_t                                    layers;
+       };
+
+       return createFramebuffer(vk, device, &framebufferInfo);
+}
+
+MovePtr<Allocation> bindImage (const DeviceInterface& vk, const VkDevice device, Allocator& allocator, const VkImage image, const MemoryRequirement requirement)
+{
+       MovePtr<Allocation> alloc = allocator.allocate(getImageMemoryRequirements(vk, device, image), requirement);
+       VK_CHECK(vk.bindImageMemory(device, image, alloc->getMemory(), alloc->getOffset()));
+       return alloc;
+}
+
+MovePtr<Allocation> bindBuffer (const DeviceInterface& vk, const VkDevice device, Allocator& allocator, const VkBuffer buffer, const MemoryRequirement requirement)
+{
+       MovePtr<Allocation> alloc(allocator.allocate(getBufferMemoryRequirements(vk, device, buffer), requirement));
+       VK_CHECK(vk.bindBufferMemory(device, buffer, alloc->getMemory(), alloc->getOffset()));
+       return alloc;
+}
+
+} // pipeline
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMakeUtil.hpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMakeUtil.hpp
new file mode 100644 (file)
index 0000000..b7e81f8
--- /dev/null
@@ -0,0 +1,98 @@
+#ifndef _VKTPIPELINEMAKEUTIL_HPP
+#define _VKTPIPELINEMAKEUTIL_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2016 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Object creation utilities
+ *//*--------------------------------------------------------------------*/
+
+#include "vkDefs.hpp"
+#include "vkRef.hpp"
+#include "vkMemUtil.hpp"
+#include "deUniquePtr.hpp"
+#include "tcuVector.hpp"
+
+namespace vkt
+{
+namespace pipeline
+{
+
+class Buffer
+{
+public:
+                                                                               Buffer                  (const vk::DeviceInterface&             vk,
+                                                                                                                const vk::VkDevice                             device,
+                                                                                                                vk::Allocator&                                 allocator,
+                                                                                                                const vk::VkBufferCreateInfo&  bufferCreateInfo,
+                                                                                                                const vk::MemoryRequirement    memoryRequirement);
+
+       const vk::VkBuffer&                                     get                             (void) const { return *m_buffer; }
+       const vk::VkBuffer&                                     operator*               (void) const { return get(); }
+       vk::Allocation&                                         getAllocation   (void) const { return *m_allocation; }
+
+private:
+       const vk::Unique<vk::VkBuffer>          m_buffer;
+       const de::UniquePtr<vk::Allocation>     m_allocation;
+
+                                                                               Buffer                  (const Buffer&);        // "deleted"
+       Buffer&                                                         operator=               (const Buffer&);
+};
+
+class Image
+{
+public:
+                                                                               Image                   (const vk::DeviceInterface&             vk,
+                                                                                                                const vk::VkDevice                             device,
+                                                                                                                vk::Allocator&                                 allocator,
+                                                                                                                const vk::VkImageCreateInfo&   imageCreateInfo,
+                                                                                                                const vk::MemoryRequirement    memoryRequirement);
+
+       const vk::VkImage&                                      get                             (void) const { return *m_image; }
+       const vk::VkImage&                                      operator*               (void) const { return get(); }
+       vk::Allocation&                                         getAllocation   (void) const { return *m_allocation; }
+
+private:
+       const vk::Unique<vk::VkImage>           m_image;
+       const de::UniquePtr<vk::Allocation>     m_allocation;
+
+                                                                               Image                   (const Image&);         // "deleted"
+       Image&                                                          operator=               (const Image&);
+};
+
+vk::VkBufferCreateInfo                 makeBufferCreateInfo    (const vk::VkDeviceSize bufferSize, const vk::VkBufferUsageFlags usage);
+vk::Move<vk::VkCommandPool>            makeCommandPool                 (const vk::DeviceInterface& vk, const vk::VkDevice device, const deUint32 queueFamilyIndex);
+vk::Move<vk::VkCommandBuffer>  makeCommandBuffer               (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkCommandPool commandPool);
+vk::Move<vk::VkDescriptorSet>  makeDescriptorSet               (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkDescriptorPool descriptorPool, const vk::VkDescriptorSetLayout setLayout);
+vk::Move<vk::VkPipelineLayout> makePipelineLayout              (const vk::DeviceInterface& vk, const vk::VkDevice device);
+vk::Move<vk::VkPipelineLayout> makePipelineLayout              (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkDescriptorSetLayout descriptorSetLayout);
+vk::Move<vk::VkPipeline>               makeComputePipeline             (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkPipelineLayout pipelineLayout, const vk::VkShaderModule shaderModule, const vk::VkSpecializationInfo* specInfo);
+vk::Move<vk::VkFramebuffer>            makeFramebuffer                 (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkRenderPass renderPass, const deUint32 attachmentCount, const vk::VkImageView* pAttachments, const deUint32 width, const deUint32 height, const deUint32 layers = 1u);
+vk::Move<vk::VkImageView>              makeImageView                   (const vk::DeviceInterface& vk, const vk::VkDevice vkDevice, const vk::VkImage image, const vk::VkImageViewType viewType, const vk::VkFormat format, const vk::VkImageSubresourceRange subresourceRange);
+vk::VkBufferMemoryBarrier              makeBufferMemoryBarrier (const vk::VkAccessFlags srcAccessMask, const vk::VkAccessFlags dstAccessMask, const vk::VkBuffer buffer, const vk::VkDeviceSize offset, const vk::VkDeviceSize bufferSizeBytes);
+vk::VkImageMemoryBarrier               makeImageMemoryBarrier  (const vk::VkAccessFlags srcAccessMask, const vk::VkAccessFlags dstAccessMask, const vk::VkImageLayout oldLayout, const vk::VkImageLayout newLayout, const vk::VkImage image, const vk::VkImageSubresourceRange subresourceRange);
+de::MovePtr<vk::Allocation>            bindImage                               (const vk::DeviceInterface& vk, const vk::VkDevice device, vk::Allocator& allocator, const vk::VkImage image, const vk::MemoryRequirement requirement);
+de::MovePtr<vk::Allocation>            bindBuffer                              (const vk::DeviceInterface& vk, const vk::VkDevice device, vk::Allocator& allocator, const vk::VkBuffer buffer, const vk::MemoryRequirement requirement);
+void                                                   beginCommandBuffer              (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer);
+void                                                   submitCommandsAndWait   (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkQueue queue, const vk::VkCommandBuffer commandBuffer);
+
+} // pipeline
+} // vkt
+
+#endif // _VKTPIPELINEMAKEUTIL_HPP
index 0a91f38..b090c75 100644 (file)
@@ -24,6 +24,7 @@
 #include "vktPipelineSpecConstantTests.hpp"
 #include "vktTestCase.hpp"
 #include "vktPipelineSpecConstantUtil.hpp"
+#include "vktPipelineMakeUtil.hpp"
 
 #include "tcuTestLog.hpp"
 #include "tcuTexture.hpp"
@@ -515,7 +516,7 @@ tcu::TestStatus ComputeTestInstance::iterate (void)
                        0u, DE_NULL, 1u, &shaderWriteBarrier, 0u, DE_NULL);
        }
 
-       endCommandBuffer(vk, *cmdBuffer);
+       VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
        submitCommandsAndWait(vk, device, queue, *cmdBuffer);
 
        // Verify results
@@ -573,7 +574,7 @@ tcu::TestStatus GraphicsTestInstance::iterate (void)
        const tcu::IVec2          renderSize    = tcu::IVec2(32, 32);
        const VkFormat            imageFormat   = VK_FORMAT_R8G8B8A8_UNORM;
        const Image               colorImage    (vk, device, allocator, makeImageCreateInfo(renderSize, imageFormat, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT), MemoryRequirement::Any);
-       const Unique<VkImageView> colorImageView(makeImageView(vk, device, *colorImage, VK_IMAGE_VIEW_TYPE_2D, imageFormat));
+       const Unique<VkImageView> colorImageView(makeImageView(vk, device, *colorImage, VK_IMAGE_VIEW_TYPE_2D, imageFormat, makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u)));
 
        // Vertex buffer
 
@@ -620,7 +621,7 @@ tcu::TestStatus GraphicsTestInstance::iterate (void)
        // Pipeline
 
        const Unique<VkRenderPass>     renderPass    (makeRenderPass    (vk, device, imageFormat));
-       const Unique<VkFramebuffer>    framebuffer   (makeFramebuffer   (vk, device, *renderPass, *colorImageView, renderSize.x(), renderSize.y()));
+       const Unique<VkFramebuffer>    framebuffer   (makeFramebuffer   (vk, device, *renderPass, 1u, &colorImageView.get(), static_cast<deUint32>(renderSize.x()), static_cast<deUint32>(renderSize.y())));
        const Unique<VkPipelineLayout> pipelineLayout(makePipelineLayout(vk, device, *descriptorSetLayout));
        const Unique<VkCommandPool>    cmdPool       (makeCommandPool   (vk, device, queueFamilyIndex));
        const Unique<VkCommandBuffer>  cmdBuffer     (makeCommandBuffer (vk, device, *cmdPool));
@@ -671,7 +672,7 @@ tcu::TestStatus GraphicsTestInstance::iterate (void)
        vk.cmdBindVertexBuffers (*cmdBuffer, 0u, 1u, &vertexBuffer.get(), &vertexBufferOffset);
 
        vk.cmdDraw(*cmdBuffer, numVertices, 1u, 0u, 0u);
-       endRenderPass(vk, *cmdBuffer);
+       vk.cmdEndRenderPass(*cmdBuffer);
 
        {
                const VkBufferMemoryBarrier shaderWriteBarrier = makeBufferMemoryBarrier(
@@ -681,7 +682,7 @@ tcu::TestStatus GraphicsTestInstance::iterate (void)
                        0u, DE_NULL, 1u, &shaderWriteBarrier, 0u, DE_NULL);
        }
 
-       endCommandBuffer(vk, *cmdBuffer);
+       VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
        submitCommandsAndWait(vk, device, queue, *cmdBuffer);
 
        // Verify results
index 7549257..0e70995 100644 (file)
@@ -29,355 +29,8 @@ namespace vkt
 {
 namespace pipeline
 {
-
 using namespace vk;
 
-VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize                    bufferSize,
-                                                                                const VkBufferUsageFlags       usage)
-{
-       const VkBufferCreateInfo bufferCreateInfo =
-       {
-               VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,   // VkStructureType              sType;
-               DE_NULL,                                                                // const void*                  pNext;
-               (VkBufferCreateFlags)0,                                 // VkBufferCreateFlags  flags;
-               bufferSize,                                                             // VkDeviceSize                 size;
-               usage,                                                                  // VkBufferUsageFlags   usage;
-               VK_SHARING_MODE_EXCLUSIVE,                              // VkSharingMode                sharingMode;
-               0u,                                                                             // deUint32                             queueFamilyIndexCount;
-               DE_NULL,                                                                // const deUint32*              pQueueFamilyIndices;
-       };
-       return bufferCreateInfo;
-}
-
-VkBufferMemoryBarrier makeBufferMemoryBarrier (const VkAccessFlags     srcAccessMask,
-                                                                                          const VkAccessFlags  dstAccessMask,
-                                                                                          const VkBuffer               buffer,
-                                                                                          const VkDeviceSize   offset,
-                                                                                          const VkDeviceSize   bufferSizeBytes)
-{
-       const VkBufferMemoryBarrier barrier =
-       {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,        // VkStructureType      sType;
-               DE_NULL,                                                                        // const void*          pNext;
-               srcAccessMask,                                                          // VkAccessFlags        srcAccessMask;
-               dstAccessMask,                                                          // VkAccessFlags        dstAccessMask;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     srcQueueFamilyIndex;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     destQueueFamilyIndex;
-               buffer,                                                                         // VkBuffer                     buffer;
-               offset,                                                                         // VkDeviceSize         offset;
-               bufferSizeBytes,                                                        // VkDeviceSize         size;
-       };
-       return barrier;
-}
-
-VkImageMemoryBarrier makeImageMemoryBarrier    (const VkAccessFlags                    srcAccessMask,
-                                                                                        const VkAccessFlags                    dstAccessMask,
-                                                                                        const VkImageLayout                    oldLayout,
-                                                                                        const VkImageLayout                    newLayout,
-                                                                                        const VkImage                                  image,
-                                                                                        const VkImageSubresourceRange  subresourceRange)
-{
-       const VkImageMemoryBarrier barrier =
-       {
-               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
-               DE_NULL,                                                                                // const void*                          pNext;
-               srcAccessMask,                                                                  // VkAccessFlags                        outputMask;
-               dstAccessMask,                                                                  // VkAccessFlags                        inputMask;
-               oldLayout,                                                                              // VkImageLayout                        oldLayout;
-               newLayout,                                                                              // VkImageLayout                        newLayout;
-               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
-               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     destQueueFamilyIndex;
-               image,                                                                                  // VkImage                                      image;
-               subresourceRange,                                                               // VkImageSubresourceRange      subresourceRange;
-       };
-       return barrier;
-}
-
-Move<VkCommandPool> makeCommandPool (const DeviceInterface& vk, const VkDevice device, const deUint32 queueFamilyIndex)
-{
-       const VkCommandPoolCreateInfo info =
-       {
-               VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,                     // VkStructureType                      sType;
-               DE_NULL,                                                                                        // const void*                          pNext;
-               VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,        // VkCommandPoolCreateFlags     flags;
-               queueFamilyIndex,                                                                       // deUint32                                     queueFamilyIndex;
-       };
-       return createCommandPool(vk, device, &info);
-}
-
-Move<VkCommandBuffer> makeCommandBuffer (const DeviceInterface& vk, const VkDevice device, const VkCommandPool commandPool)
-{
-       const VkCommandBufferAllocateInfo info =
-       {
-               VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,         // VkStructureType              sType;
-               DE_NULL,                                                                                        // const void*                  pNext;
-               commandPool,                                                                            // VkCommandPool                commandPool;
-               VK_COMMAND_BUFFER_LEVEL_PRIMARY,                                        // VkCommandBufferLevel level;
-               1u,                                                                                                     // deUint32                             commandBufferCount;
-       };
-       return allocateCommandBuffer(vk, device, &info);
-}
-
-Move<VkDescriptorSet> makeDescriptorSet (const DeviceInterface&                        vk,
-                                                                                const VkDevice                                 device,
-                                                                                const VkDescriptorPool                 descriptorPool,
-                                                                                const VkDescriptorSetLayout    setLayout)
-{
-       const VkDescriptorSetAllocateInfo info =
-       {
-               VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,         // VkStructureType                              sType;
-               DE_NULL,                                                                                        // const void*                                  pNext;
-               descriptorPool,                                                                         // VkDescriptorPool                             descriptorPool;
-               1u,                                                                                                     // deUint32                                             descriptorSetCount;
-               &setLayout,                                                                                     // const VkDescriptorSetLayout* pSetLayouts;
-       };
-       return allocateDescriptorSet(vk, device, &info);
-}
-
-Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&              vk,
-                                                                                  const VkDevice                               device,
-                                                                                  const VkDescriptorSetLayout  descriptorSetLayout)
-{
-       const VkPipelineLayoutCreateInfo info =
-       {
-               VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,          // VkStructureType                              sType;
-               DE_NULL,                                                                                        // const void*                                  pNext;
-               (VkPipelineLayoutCreateFlags)0,                                         // VkPipelineLayoutCreateFlags  flags;
-               1u,                                                                                                     // deUint32                                             setLayoutCount;
-               &descriptorSetLayout,                                                           // const VkDescriptorSetLayout* pSetLayouts;
-               0u,                                                                                                     // deUint32                                             pushConstantRangeCount;
-               DE_NULL,                                                                                        // const VkPushConstantRange*   pPushConstantRanges;
-       };
-       return createPipelineLayout(vk, device, &info);
-}
-
-Move<VkPipeline> makeComputePipeline (const DeviceInterface&           vk,
-                                                                         const VkDevice                                device,
-                                                                         const VkPipelineLayout                pipelineLayout,
-                                                                         const VkShaderModule                  shaderModule,
-                                                                         const VkSpecializationInfo*   specInfo)
-{
-       const VkPipelineShaderStageCreateInfo shaderStageInfo =
-       {
-               VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,    // VkStructureType                                      sType;
-               DE_NULL,                                                                                                // const void*                                          pNext;
-               (VkPipelineShaderStageCreateFlags)0,                                    // VkPipelineShaderStageCreateFlags     flags;
-               VK_SHADER_STAGE_COMPUTE_BIT,                                                    // VkShaderStageFlagBits                        stage;
-               shaderModule,                                                                                   // VkShaderModule                                       module;
-               "main",                                                                                                 // const char*                                          pName;
-               specInfo,                                                                                               // const VkSpecializationInfo*          pSpecializationInfo;
-       };
-       const VkComputePipelineCreateInfo pipelineInfo =
-       {
-               VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,         // VkStructureType                                      sType;
-               DE_NULL,                                                                                        // const void*                                          pNext;
-               (VkPipelineCreateFlags)0,                                                       // VkPipelineCreateFlags                        flags;
-               shaderStageInfo,                                                                        // VkPipelineShaderStageCreateInfo      stage;
-               pipelineLayout,                                                                         // VkPipelineLayout                                     layout;
-               DE_NULL,                                                                                        // VkPipeline                                           basePipelineHandle;
-               0,                                                                                                      // deInt32                                                      basePipelineIndex;
-       };
-       return createComputePipeline(vk, device, DE_NULL , &pipelineInfo);
-}
-
-VkImageCreateInfo makeImageCreateInfo (const tcu::IVec2& size, const VkFormat format, const VkImageUsageFlags usage)
-{
-       const VkImageCreateInfo imageInfo =
-       {
-               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,            // VkStructureType          sType;
-               DE_NULL,                                                                        // const void*              pNext;
-               (VkImageCreateFlags)0,                                          // VkImageCreateFlags       flags;
-               VK_IMAGE_TYPE_2D,                                                       // VkImageType              imageType;
-               format,                                                                         // VkFormat                 format;
-               makeExtent3D(size.x(), size.y(), 1),            // VkExtent3D               extent;
-               1u,                                                                                     // uint32_t                 mipLevels;
-               1u,                                                                                     // uint32_t                 arrayLayers;
-               VK_SAMPLE_COUNT_1_BIT,                                          // VkSampleCountFlagBits    samples;
-               VK_IMAGE_TILING_OPTIMAL,                                        // VkImageTiling            tiling;
-               usage,                                                                          // VkImageUsageFlags        usage;
-               VK_SHARING_MODE_EXCLUSIVE,                                      // VkSharingMode            sharingMode;
-               0u,                                                                                     // uint32_t                 queueFamilyIndexCount;
-               DE_NULL,                                                                        // const uint32_t*          pQueueFamilyIndices;
-               VK_IMAGE_LAYOUT_UNDEFINED,                                      // VkImageLayout            initialLayout;
-       };
-       return imageInfo;
-}
-
-Move<VkImageView> makeImageView (const DeviceInterface&                        vk,
-                                                                const VkDevice                                 vkDevice,
-                                                                const VkImage                                  image,
-                                                                const VkImageViewType                  viewType,
-                                                                const VkFormat                                 format)
-{
-       const VkImageViewCreateInfo imageViewParams =
-       {
-               VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,               // VkStructureType                      sType;
-               DE_NULL,                                                                                // const void*                          pNext;
-               (VkImageViewCreateFlags)0,                                              // VkImageViewCreateFlags       flags;
-               image,                                                                                  // VkImage                                      image;
-               viewType,                                                                               // VkImageViewType                      viewType;
-               format,                                                                                 // VkFormat                                     format;
-               makeComponentMappingRGBA(),                                             // VkComponentMapping           components;
-               makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u),   // VkImageSubresourceRange      subresourceRange;
-       };
-       return createImageView(vk, vkDevice, &imageViewParams);
-}
-
-void beginCommandBuffer (const DeviceInterface& vk, const VkCommandBuffer commandBuffer)
-{
-       const VkCommandBufferBeginInfo info =
-       {
-               VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                          sType;
-               DE_NULL,                                                                                // const void*                              pNext;
-               VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,    // VkCommandBufferUsageFlags                flags;
-               DE_NULL,                                                                                // const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
-       };
-       VK_CHECK(vk.beginCommandBuffer(commandBuffer, &info));
-}
-
-void endCommandBuffer (const DeviceInterface& vk, const VkCommandBuffer commandBuffer)
-{
-       VK_CHECK(vk.endCommandBuffer(commandBuffer));
-}
-
-void submitCommandsAndWait (const DeviceInterface&     vk,
-                                                       const VkDevice                  device,
-                                                       const VkQueue                   queue,
-                                                       const VkCommandBuffer   commandBuffer)
-{
-       const VkFenceCreateInfo fenceInfo =
-       {
-               VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,    // VkStructureType              sType;
-               DE_NULL,                                                                // const void*                  pNext;
-               (VkFenceCreateFlags)0,                                  // VkFenceCreateFlags   flags;
-       };
-       const Unique<VkFence> fence(createFence(vk, device, &fenceInfo));
-
-       const VkSubmitInfo submitInfo =
-       {
-               VK_STRUCTURE_TYPE_SUBMIT_INFO,          // VkStructureType                sType;
-               DE_NULL,                                                        // const void*                    pNext;
-               0u,                                                                     // uint32_t                       waitSemaphoreCount;
-               DE_NULL,                                                        // const VkSemaphore*             pWaitSemaphores;
-               DE_NULL,                                                        // const VkPipelineStageFlags*    pWaitDstStageMask;
-               1u,                                                                     // uint32_t                       commandBufferCount;
-               &commandBuffer,                                         // const VkCommandBuffer*         pCommandBuffers;
-               0u,                                                                     // uint32_t                       signalSemaphoreCount;
-               DE_NULL,                                                        // const VkSemaphore*             pSignalSemaphores;
-       };
-       VK_CHECK(vk.queueSubmit(queue, 1u, &submitInfo, *fence));
-       VK_CHECK(vk.waitForFences(device, 1u, &fence.get(), DE_TRUE, ~0ull));
-}
-
-void beginRenderPass (const DeviceInterface&   vk,
-                                         const VkCommandBuffer         commandBuffer,
-                                         const VkRenderPass            renderPass,
-                                         const VkFramebuffer           framebuffer,
-                                         const VkRect2D&                       renderArea,
-                                         const tcu::Vec4&                      clearColor)
-{
-       const VkClearValue clearValue = makeClearValueColor(clearColor);
-
-       const VkRenderPassBeginInfo renderPassBeginInfo = {
-               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,               // VkStructureType         sType;
-               DE_NULL,                                                                                // const void*             pNext;
-               renderPass,                                                                             // VkRenderPass            renderPass;
-               framebuffer,                                                                    // VkFramebuffer           framebuffer;
-               renderArea,                                                                             // VkRect2D                renderArea;
-               1u,                                                                                             // uint32_t                clearValueCount;
-               &clearValue,                                                                    // const VkClearValue*     pClearValues;
-       };
-
-       vk.cmdBeginRenderPass(commandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
-}
-
-void endRenderPass (const DeviceInterface&     vk,
-                                       const VkCommandBuffer   commandBuffer)
-{
-       vk.cmdEndRenderPass(commandBuffer);
-}
-
-Move<VkRenderPass> makeRenderPass (const DeviceInterface&      vk,
-                                                                  const VkDevice                       device,
-                                                                  const VkFormat                       colorFormat)
-{
-       const VkAttachmentDescription colorAttachmentDescription =
-       {
-               (VkAttachmentDescriptionFlags)0,                                        // VkAttachmentDescriptionFlags         flags;
-               colorFormat,                                                                            // VkFormat                                                     format;
-               VK_SAMPLE_COUNT_1_BIT,                                                          // VkSampleCountFlagBits                        samples;
-               VK_ATTACHMENT_LOAD_OP_CLEAR,                                            // VkAttachmentLoadOp                           loadOp;
-               VK_ATTACHMENT_STORE_OP_STORE,                                           // VkAttachmentStoreOp                          storeOp;
-               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                        // VkAttachmentLoadOp                           stencilLoadOp;
-               VK_ATTACHMENT_STORE_OP_DONT_CARE,                                       // VkAttachmentStoreOp                          stencilStoreOp;
-               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                       // VkImageLayout                                        initialLayout;
-               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                        // VkImageLayout                                        finalLayout;
-       };
-
-       const VkAttachmentReference colorAttachmentReference =
-       {
-               0u,                                                                                                     // deUint32                     attachment;
-               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                        // VkImageLayout        layout;
-       };
-
-       const VkAttachmentReference depthAttachmentReference =
-       {
-               VK_ATTACHMENT_UNUSED,                                                           // deUint32                     attachment;
-               VK_IMAGE_LAYOUT_UNDEFINED                                                       // VkImageLayout        layout;
-       };
-
-       const VkSubpassDescription subpassDescription =
-       {
-               (VkSubpassDescriptionFlags)0,                                           // VkSubpassDescriptionFlags            flags;
-               VK_PIPELINE_BIND_POINT_GRAPHICS,                                        // VkPipelineBindPoint                          pipelineBindPoint;
-               0u,                                                                                                     // deUint32                                                     inputAttachmentCount;
-               DE_NULL,                                                                                        // const VkAttachmentReference*         pInputAttachments;
-               1u,                                                                                                     // deUint32                                                     colorAttachmentCount;
-               &colorAttachmentReference,                                                      // const VkAttachmentReference*         pColorAttachments;
-               DE_NULL,                                                                                        // const VkAttachmentReference*         pResolveAttachments;
-               &depthAttachmentReference,                                                      // const VkAttachmentReference*         pDepthStencilAttachment;
-               0u,                                                                                                     // deUint32                                                     preserveAttachmentCount;
-               DE_NULL                                                                                         // const deUint32*                                      pPreserveAttachments;
-       };
-
-       const VkRenderPassCreateInfo renderPassInfo =
-       {
-               VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,                      // VkStructureType                                      sType;
-               DE_NULL,                                                                                        // const void*                                          pNext;
-               (VkRenderPassCreateFlags)0,                                                     // VkRenderPassCreateFlags                      flags;
-               1u,                                                                                                     // deUint32                                                     attachmentCount;
-               &colorAttachmentDescription,                                            // const VkAttachmentDescription*       pAttachments;
-               1u,                                                                                                     // deUint32                                                     subpassCount;
-               &subpassDescription,                                                            // const VkSubpassDescription*          pSubpasses;
-               0u,                                                                                                     // deUint32                                                     dependencyCount;
-               DE_NULL                                                                                         // const VkSubpassDependency*           pDependencies;
-       };
-
-       return createRenderPass(vk, device, &renderPassInfo);
-}
-
-Move<VkFramebuffer> makeFramebuffer (const DeviceInterface&            vk,
-                                                                        const VkDevice                         device,
-                                                                        const VkRenderPass                     renderPass,
-                                                                        const VkImageView                      colorAttachment,
-                                                                        const deUint32                         width,
-                                                                        const deUint32                         height)
-{
-       const VkFramebufferCreateInfo framebufferInfo = {
-               VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,              // VkStructureType                             sType;
-               DE_NULL,                                                                                // const void*                                 pNext;
-               (VkFramebufferCreateFlags)0,                                    // VkFramebufferCreateFlags                    flags;
-               renderPass,                                                                             // VkRenderPass                                renderPass;
-               1u,                                                                                             // uint32_t                                    attachmentCount;
-               &colorAttachment,                                                               // const VkImageView*                          pAttachments;
-               width,                                                                                  // uint32_t                                    width;
-               height,                                                                                 // uint32_t                                    height;
-               1u,                                                                                             // uint32_t                                    layers;
-       };
-
-       return createFramebuffer(vk, device, &framebufferInfo);
-}
-
 GraphicsPipelineBuilder& GraphicsPipelineBuilder::setShader (const DeviceInterface&                    vk,
                                                                                                                         const VkDevice                                 device,
                                                                                                                         const VkShaderStageFlagBits    stage,
@@ -615,6 +268,110 @@ Move<VkPipeline> GraphicsPipelineBuilder::build (const DeviceInterface&   vk,
        return createGraphicsPipeline(vk, device, DE_NULL, &graphicsPipelineInfo);
 }
 
+Move<VkRenderPass> makeRenderPass (const DeviceInterface&      vk,
+                                                                  const VkDevice                       device,
+                                                                  const VkFormat                       colorFormat)
+{
+       const VkAttachmentDescription colorAttachmentDescription =
+       {
+               (VkAttachmentDescriptionFlags)0,                                        // VkAttachmentDescriptionFlags         flags;
+               colorFormat,                                                                            // VkFormat                                                     format;
+               VK_SAMPLE_COUNT_1_BIT,                                                          // VkSampleCountFlagBits                        samples;
+               VK_ATTACHMENT_LOAD_OP_CLEAR,                                            // VkAttachmentLoadOp                           loadOp;
+               VK_ATTACHMENT_STORE_OP_STORE,                                           // VkAttachmentStoreOp                          storeOp;
+               VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                        // VkAttachmentLoadOp                           stencilLoadOp;
+               VK_ATTACHMENT_STORE_OP_DONT_CARE,                                       // VkAttachmentStoreOp                          stencilStoreOp;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                       // VkImageLayout                                        initialLayout;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                        // VkImageLayout                                        finalLayout;
+       };
+
+       const VkAttachmentReference colorAttachmentReference =
+       {
+               0u,                                                                                                     // deUint32                     attachment;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                        // VkImageLayout        layout;
+       };
+
+       const VkAttachmentReference depthAttachmentReference =
+       {
+               VK_ATTACHMENT_UNUSED,                                                           // deUint32                     attachment;
+               VK_IMAGE_LAYOUT_UNDEFINED                                                       // VkImageLayout        layout;
+       };
+
+       const VkSubpassDescription subpassDescription =
+       {
+               (VkSubpassDescriptionFlags)0,                                           // VkSubpassDescriptionFlags            flags;
+               VK_PIPELINE_BIND_POINT_GRAPHICS,                                        // VkPipelineBindPoint                          pipelineBindPoint;
+               0u,                                                                                                     // deUint32                                                     inputAttachmentCount;
+               DE_NULL,                                                                                        // const VkAttachmentReference*         pInputAttachments;
+               1u,                                                                                                     // deUint32                                                     colorAttachmentCount;
+               &colorAttachmentReference,                                                      // const VkAttachmentReference*         pColorAttachments;
+               DE_NULL,                                                                                        // const VkAttachmentReference*         pResolveAttachments;
+               &depthAttachmentReference,                                                      // const VkAttachmentReference*         pDepthStencilAttachment;
+               0u,                                                                                                     // deUint32                                                     preserveAttachmentCount;
+               DE_NULL                                                                                         // const deUint32*                                      pPreserveAttachments;
+       };
+
+       const VkRenderPassCreateInfo renderPassInfo =
+       {
+               VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,                      // VkStructureType                                      sType;
+               DE_NULL,                                                                                        // const void*                                          pNext;
+               (VkRenderPassCreateFlags)0,                                                     // VkRenderPassCreateFlags                      flags;
+               1u,                                                                                                     // deUint32                                                     attachmentCount;
+               &colorAttachmentDescription,                                            // const VkAttachmentDescription*       pAttachments;
+               1u,                                                                                                     // deUint32                                                     subpassCount;
+               &subpassDescription,                                                            // const VkSubpassDescription*          pSubpasses;
+               0u,                                                                                                     // deUint32                                                     dependencyCount;
+               DE_NULL                                                                                         // const VkSubpassDependency*           pDependencies;
+       };
+
+       return createRenderPass(vk, device, &renderPassInfo);
+}
+
+void beginRenderPass (const DeviceInterface&   vk,
+                                         const VkCommandBuffer         commandBuffer,
+                                         const VkRenderPass            renderPass,
+                                         const VkFramebuffer           framebuffer,
+                                         const VkRect2D&                       renderArea,
+                                         const tcu::Vec4&                      clearColor)
+{
+       const VkClearValue clearValue = makeClearValueColor(clearColor);
+
+       const VkRenderPassBeginInfo renderPassBeginInfo = {
+               VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,               // VkStructureType         sType;
+               DE_NULL,                                                                                // const void*             pNext;
+               renderPass,                                                                             // VkRenderPass            renderPass;
+               framebuffer,                                                                    // VkFramebuffer           framebuffer;
+               renderArea,                                                                             // VkRect2D                renderArea;
+               1u,                                                                                             // uint32_t                clearValueCount;
+               &clearValue,                                                                    // const VkClearValue*     pClearValues;
+       };
+
+       vk.cmdBeginRenderPass(commandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
+}
+
+VkImageCreateInfo makeImageCreateInfo (const tcu::IVec2& size, const VkFormat format, const VkImageUsageFlags usage)
+{
+       const VkImageCreateInfo imageInfo =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,            // VkStructureType          sType;
+               DE_NULL,                                                                        // const void*              pNext;
+               (VkImageCreateFlags)0,                                          // VkImageCreateFlags       flags;
+               VK_IMAGE_TYPE_2D,                                                       // VkImageType              imageType;
+               format,                                                                         // VkFormat                 format;
+               makeExtent3D(size.x(), size.y(), 1),            // VkExtent3D               extent;
+               1u,                                                                                     // uint32_t                 mipLevels;
+               1u,                                                                                     // uint32_t                 arrayLayers;
+               VK_SAMPLE_COUNT_1_BIT,                                          // VkSampleCountFlagBits    samples;
+               VK_IMAGE_TILING_OPTIMAL,                                        // VkImageTiling            tiling;
+               usage,                                                                          // VkImageUsageFlags        usage;
+               VK_SHARING_MODE_EXCLUSIVE,                                      // VkSharingMode            sharingMode;
+               0u,                                                                                     // uint32_t                 queueFamilyIndexCount;
+               DE_NULL,                                                                        // const uint32_t*          pQueueFamilyIndices;
+               VK_IMAGE_LAYOUT_UNDEFINED,                                      // VkImageLayout            initialLayout;
+       };
+       return imageInfo;
+}
+
 void requireFeatures (const InstanceInterface& vki, const VkPhysicalDevice physDevice, const FeatureFlags flags)
 {
        const VkPhysicalDeviceFeatures features = getPhysicalDeviceFeatures(vki, physDevice);
index ededb93..12cd2f5 100644 (file)
@@ -35,62 +35,6 @@ namespace vkt
 namespace pipeline
 {
 
-class Buffer
-{
-public:
-                                                                               Buffer                  (const vk::DeviceInterface&             vk,
-                                                                                                                const vk::VkDevice                             device,
-                                                                                                                vk::Allocator&                                 allocator,
-                                                                                                                const vk::VkBufferCreateInfo&  bufferCreateInfo,
-                                                                                                                const vk::MemoryRequirement    memoryRequirement)
-
-                                                                                       : m_buffer              (createBuffer(vk, device, &bufferCreateInfo))
-                                                                                       , m_allocation  (allocator.allocate(getBufferMemoryRequirements(vk, device, *m_buffer), memoryRequirement))
-                                                                               {
-                                                                                       VK_CHECK(vk.bindBufferMemory(device, *m_buffer, m_allocation->getMemory(), m_allocation->getOffset()));
-                                                                               }
-
-       const vk::VkBuffer&                                     get                             (void) const { return *m_buffer; }
-       const vk::VkBuffer&                                     operator*               (void) const { return get(); }
-       vk::Allocation&                                         getAllocation   (void) const { return *m_allocation; }
-
-private:
-       const vk::Unique<vk::VkBuffer>          m_buffer;
-       const de::UniquePtr<vk::Allocation>     m_allocation;
-
-       // "deleted"
-                                                                               Buffer                  (const Buffer&);
-       Buffer&                                                         operator=               (const Buffer&);
-};
-
-class Image
-{
-public:
-                                                                               Image                   (const vk::DeviceInterface&             vk,
-                                                                                                                const vk::VkDevice                             device,
-                                                                                                                vk::Allocator&                                 allocator,
-                                                                                                                const vk::VkImageCreateInfo&   imageCreateInfo,
-                                                                                                                const vk::MemoryRequirement    memoryRequirement)
-
-                                                                                       : m_image               (createImage(vk, device, &imageCreateInfo))
-                                                                                       , m_allocation  (allocator.allocate(getImageMemoryRequirements(vk, device, *m_image), memoryRequirement))
-                                                                               {
-                                                                                       VK_CHECK(vk.bindImageMemory(device, *m_image, m_allocation->getMemory(), m_allocation->getOffset()));
-                                                                               }
-
-       const vk::VkImage&                                      get                             (void) const { return *m_image; }
-       const vk::VkImage&                                      operator*               (void) const { return get(); }
-       vk::Allocation&                                         getAllocation   (void) const { return *m_allocation; }
-
-private:
-       const vk::Unique<vk::VkImage>           m_image;
-       const de::UniquePtr<vk::Allocation>     m_allocation;
-
-       // "deleted"
-                                                                               Image                   (const Image&);
-       Image&                                                          operator=               (const Image&);
-};
-
 class GraphicsPipelineBuilder
 {
 public:
@@ -125,23 +69,9 @@ enum FeatureFlagBits
 };
 typedef deUint32 FeatureFlags;
 
-vk::VkBufferCreateInfo                 makeBufferCreateInfo    (const vk::VkDeviceSize bufferSize, const vk::VkBufferUsageFlags usage);
 vk::VkImageCreateInfo                  makeImageCreateInfo             (const tcu::IVec2& size, const vk::VkFormat format, const vk::VkImageUsageFlags usage);
-vk::Move<vk::VkCommandPool>            makeCommandPool                 (const vk::DeviceInterface& vk, const vk::VkDevice device, const deUint32 queueFamilyIndex);
-vk::Move<vk::VkCommandBuffer>  makeCommandBuffer               (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkCommandPool commandPool);
-vk::Move<vk::VkDescriptorSet>  makeDescriptorSet               (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkDescriptorPool descriptorPool, const vk::VkDescriptorSetLayout setLayout);
-vk::Move<vk::VkPipelineLayout> makePipelineLayout              (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkDescriptorSetLayout descriptorSetLayout);
-vk::Move<vk::VkPipeline>               makeComputePipeline             (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkPipelineLayout pipelineLayout, const vk::VkShaderModule shaderModule, const vk::VkSpecializationInfo* specInfo);
 vk::Move<vk::VkRenderPass>             makeRenderPass                  (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat);
-vk::Move<vk::VkFramebuffer>            makeFramebuffer                 (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkRenderPass renderPass, const vk::VkImageView colorAttachment, const deUint32 width, const deUint32 height);
-vk::Move<vk::VkImageView>              makeImageView                   (const vk::DeviceInterface& vk, const vk::VkDevice vkDevice, const vk::VkImage image, const vk::VkImageViewType viewType, const vk::VkFormat format);
-vk::VkBufferMemoryBarrier              makeBufferMemoryBarrier (const vk::VkAccessFlags srcAccessMask, const vk::VkAccessFlags dstAccessMask, const vk::VkBuffer buffer, const vk::VkDeviceSize offset, const vk::VkDeviceSize bufferSizeBytes);
-vk::VkImageMemoryBarrier               makeImageMemoryBarrier  (const vk::VkAccessFlags srcAccessMask, const vk::VkAccessFlags dstAccessMask, const vk::VkImageLayout oldLayout, const vk::VkImageLayout newLayout, const vk::VkImage image, const vk::VkImageSubresourceRange subresourceRange);
-void                                                   beginCommandBuffer              (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer);
-void                                                   endCommandBuffer                (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer);
-void                                                   submitCommandsAndWait   (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkQueue queue, const vk::VkCommandBuffer commandBuffer);
 void                                                   beginRenderPass                 (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer, const vk::VkRenderPass renderPass, const vk::VkFramebuffer framebuffer, const vk::VkRect2D& renderArea, const tcu::Vec4& clearColor);
-void                                                   endRenderPass                   (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer);
 void                                                   requireFeatures                 (const vk::InstanceInterface& vki, const vk::VkPhysicalDevice physDevice, const FeatureFlags flags);
 
 // Ugly, brute-force replacement for the initializer list