external/vulkancts/modules/vulkan/memory/vktMemoryPipelineBarrierTests.cpp \
external/vulkancts/modules/vulkan/memory/vktMemoryRequirementsTests.cpp \
external/vulkancts/modules/vulkan/memory/vktMemoryTests.cpp \
+ external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderPassUtil.cpp \
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp \
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.cpp \
external/vulkancts/modules/vulkan/multiview/vktMultiViewTests.cpp \
dEQP-VK.multiview.index.tesellation_shader.5_10_5_10
dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.masks.15
+dEQP-VK.multiview.renderpass2.masks.8
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8
+dEQP-VK.multiview.renderpass2.masks.15_15_15_15
+dEQP-VK.multiview.renderpass2.masks.8_1_1_8
+dEQP-VK.multiview.renderpass2.masks.5_10_5_10
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.masks.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments.15
+dEQP-VK.multiview.renderpass2.input_attachments.8
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.instanced.15
+dEQP-VK.multiview.renderpass2.instanced.8
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8
+dEQP-VK.multiview.renderpass2.instanced.15_15_15_15
+dEQP-VK.multiview.renderpass2.instanced.8_1_1_8
+dEQP-VK.multiview.renderpass2.instanced.5_10_5_10
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.instanced.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_instance.15
+dEQP-VK.multiview.renderpass2.input_instance.8
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_instance.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_instance.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_instance.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_instance.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect.15
+dEQP-VK.multiview.renderpass2.draw_indirect.8
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.clear_attachments.15
+dEQP-VK.multiview.renderpass2.clear_attachments.8
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.clear_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.clear_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.clear_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.clear_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.point_size.15
+dEQP-VK.multiview.renderpass2.point_size.8
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8
+dEQP-VK.multiview.renderpass2.point_size.15_15_15_15
+dEQP-VK.multiview.renderpass2.point_size.8_1_1_8
+dEQP-VK.multiview.renderpass2.point_size.5_10_5_10
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.point_size.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.multisample.15
+dEQP-VK.multiview.renderpass2.multisample.8
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8
+dEQP-VK.multiview.renderpass2.multisample.15_15_15_15
+dEQP-VK.multiview.renderpass2.multisample.8_1_1_8
+dEQP-VK.multiview.renderpass2.multisample.5_10_5_10
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.multisample.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.queries.15
+dEQP-VK.multiview.renderpass2.queries.8
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8
+dEQP-VK.multiview.renderpass2.queries.15_15_15_15
+dEQP-VK.multiview.renderpass2.queries.8_1_1_8
+dEQP-VK.multiview.renderpass2.queries.5_10_5_10
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.queries.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.depth.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.stencil.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.vertex_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.fragment_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.geometry_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.max_multi_view_view_count
dEQP-VK.subgroups.builtin_var.subgroupsize_graphic
dEQP-VK.subgroups.builtin_var.subgroupsize_compute
dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer
set(DEQP_VK_MULTI_VIEW_SRCS
vktMultiViewTests.hpp
vktMultiViewTests.cpp
+ vktMultiViewRenderPassUtil.hpp
+ vktMultiViewRenderPassUtil.cpp
vktMultiViewRenderTests.hpp
vktMultiViewRenderTests.cpp
vktMultiViewRenderUtil.hpp
--- /dev/null
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2018 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 RenderPass utils
+ *//*--------------------------------------------------------------------*/
+
+#include "vktMultiViewRenderPassUtil.hpp"
+#include "tcuTestCase.hpp"
+#include "vkRefUtil.hpp"
+
+using namespace vk;
+
+namespace vkt
+{
+namespace MultiView
+{
+
+AttachmentDescription1::AttachmentDescription1 (const void* pNext_,
+ VkAttachmentDescriptionFlags flags_,
+ VkFormat format_,
+ VkSampleCountFlagBits samples_,
+ VkAttachmentLoadOp loadOp_,
+ VkAttachmentStoreOp storeOp_,
+ VkAttachmentLoadOp stencilLoadOp_,
+ VkAttachmentStoreOp stencilStoreOp_,
+ VkImageLayout initialLayout_,
+ VkImageLayout finalLayout_)
+{
+ DE_ASSERT(pNext_ == DE_NULL);
+
+ // No sType field in this struct
+ DE_UNREF(pNext_);
+ flags = flags_;
+ format = format_;
+ samples = samples_;
+ loadOp = loadOp_;
+ storeOp = storeOp_;
+ stencilLoadOp = stencilLoadOp_;
+ stencilStoreOp = stencilStoreOp_;
+ initialLayout = initialLayout_;
+ finalLayout = finalLayout_;
+}
+
+AttachmentDescription2::AttachmentDescription2 (const void* pNext_,
+ VkAttachmentDescriptionFlags flags_,
+ VkFormat format_,
+ VkSampleCountFlagBits samples_,
+ VkAttachmentLoadOp loadOp_,
+ VkAttachmentStoreOp storeOp_,
+ VkAttachmentLoadOp stencilLoadOp_,
+ VkAttachmentStoreOp stencilStoreOp_,
+ VkImageLayout initialLayout_,
+ VkImageLayout finalLayout_)
+{
+ sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR;
+ pNext = pNext_;
+ flags = flags_;
+ format = format_;
+ samples = samples_;
+ loadOp = loadOp_;
+ storeOp = storeOp_;
+ stencilLoadOp = stencilLoadOp_;
+ stencilStoreOp = stencilStoreOp_;
+ initialLayout = initialLayout_;
+ finalLayout = finalLayout_;
+}
+
+AttachmentReference1::AttachmentReference1 (const void* pNext_,
+ deUint32 attachment_,
+ VkImageLayout layout_,
+ VkImageAspectFlags aspectMask_)
+{
+ DE_ASSERT(pNext_ == DE_NULL);
+ DE_ASSERT(aspectMask_ == 0);
+
+ // No sType field in this struct
+ DE_UNREF (pNext_);
+ attachment = attachment_;
+ layout = layout_;
+ DE_UNREF (aspectMask_);
+}
+
+AttachmentReference2::AttachmentReference2 (const void* pNext_,
+ deUint32 attachment_,
+ VkImageLayout layout_,
+ VkImageAspectFlags aspectMask_)
+{
+ sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR;
+ pNext = pNext_;
+ attachment = attachment_;
+ layout = layout_;
+ aspectMask = aspectMask_;
+}
+
+SubpassDescription1::SubpassDescription1 (const void* pNext_,
+ VkSubpassDescriptionFlags flags_,
+ VkPipelineBindPoint pipelineBindPoint_,
+ deUint32 viewMask_,
+ deUint32 inputAttachmentCount_,
+ const VkAttachmentReference* pInputAttachments_,
+ deUint32 colorAttachmentCount_,
+ const VkAttachmentReference* pColorAttachments_,
+ const VkAttachmentReference* pResolveAttachments_,
+ const VkAttachmentReference* pDepthStencilAttachment_,
+ deUint32 preserveAttachmentCount_,
+ const deUint32* pPreserveAttachments_)
+{
+ DE_ASSERT(pNext_ == DE_NULL);
+ DE_ASSERT(viewMask_ == 0);
+
+ // No sType field in this struct
+ DE_UNREF (pNext_);
+ flags = flags_;
+ pipelineBindPoint = pipelineBindPoint_;
+ DE_UNREF (viewMask_);
+ inputAttachmentCount = inputAttachmentCount_;
+ pInputAttachments = pInputAttachments_;
+ colorAttachmentCount = colorAttachmentCount_;
+ pColorAttachments = pColorAttachments_;
+ pResolveAttachments = pResolveAttachments_;
+ pDepthStencilAttachment = pDepthStencilAttachment_;
+ preserveAttachmentCount = preserveAttachmentCount_;
+ pPreserveAttachments = pPreserveAttachments_;
+}
+
+SubpassDescription2::SubpassDescription2 (const void* pNext_,
+ VkSubpassDescriptionFlags flags_,
+ VkPipelineBindPoint pipelineBindPoint_,
+ deUint32 viewMask_,
+ deUint32 inputAttachmentCount_,
+ const VkAttachmentReference2KHR* pInputAttachments_,
+ deUint32 colorAttachmentCount_,
+ const VkAttachmentReference2KHR* pColorAttachments_,
+ const VkAttachmentReference2KHR* pResolveAttachments_,
+ const VkAttachmentReference2KHR* pDepthStencilAttachment_,
+ deUint32 preserveAttachmentCount_,
+ const deUint32* pPreserveAttachments_)
+{
+ sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR;
+ pNext = pNext_;
+ flags = flags_;
+ pipelineBindPoint = pipelineBindPoint_;
+ viewMask = viewMask_;
+ inputAttachmentCount = inputAttachmentCount_;
+ pInputAttachments = pInputAttachments_;
+ colorAttachmentCount = colorAttachmentCount_;
+ pColorAttachments = pColorAttachments_;
+ pResolveAttachments = pResolveAttachments_;
+ pDepthStencilAttachment = pDepthStencilAttachment_;
+ preserveAttachmentCount = preserveAttachmentCount_;
+ pPreserveAttachments = pPreserveAttachments_;
+}
+
+SubpassDependency1::SubpassDependency1 (const void* pNext_,
+ deUint32 srcSubpass_,
+ deUint32 dstSubpass_,
+ VkPipelineStageFlags srcStageMask_,
+ VkPipelineStageFlags dstStageMask_,
+ VkAccessFlags srcAccessMask_,
+ VkAccessFlags dstAccessMask_,
+ VkDependencyFlags dependencyFlags_,
+ deInt32 viewOffset_)
+{
+ DE_ASSERT(pNext_ == DE_NULL);
+ DE_ASSERT(viewOffset_ == 0);
+
+ // No sType field in this struct
+ DE_UNREF (pNext_);
+ srcSubpass = srcSubpass_;
+ dstSubpass = dstSubpass_;
+ srcStageMask = srcStageMask_;
+ dstStageMask = dstStageMask_;
+ srcAccessMask = srcAccessMask_;
+ dstAccessMask = dstAccessMask_;
+ dependencyFlags = dependencyFlags_;
+ DE_UNREF (viewOffset_);
+}
+
+SubpassDependency2::SubpassDependency2 (const void* pNext_,
+ deUint32 srcSubpass_,
+ deUint32 dstSubpass_,
+ VkPipelineStageFlags srcStageMask_,
+ VkPipelineStageFlags dstStageMask_,
+ VkAccessFlags srcAccessMask_,
+ VkAccessFlags dstAccessMask_,
+ VkDependencyFlags dependencyFlags_,
+ deInt32 viewOffset_)
+{
+ sType = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR;
+ pNext = pNext_;
+ srcSubpass = srcSubpass_;
+ dstSubpass = dstSubpass_;
+ srcStageMask = srcStageMask_;
+ dstStageMask = dstStageMask_;
+ srcAccessMask = srcAccessMask_;
+ dstAccessMask = dstAccessMask_;
+ dependencyFlags = dependencyFlags_;
+ viewOffset = viewOffset_;
+}
+
+RenderPassCreateInfo1::RenderPassCreateInfo1 (const void* pNext_,
+ VkRenderPassCreateFlags flags_,
+ deUint32 attachmentCount_,
+ const VkAttachmentDescription* pAttachments_,
+ deUint32 subpassCount_,
+ const VkSubpassDescription* pSubpasses_,
+ deUint32 dependencyCount_,
+ const VkSubpassDependency* pDependencies_,
+ deUint32 correlatedViewMaskCount_,
+ const deUint32* pCorrelatedViewMasks_)
+{
+ DE_ASSERT(correlatedViewMaskCount_ == 0);
+ DE_ASSERT(pCorrelatedViewMasks_ == DE_NULL);
+
+ sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
+ pNext = pNext_;
+ flags = flags_;
+ attachmentCount = attachmentCount_;
+ pAttachments = pAttachments_;
+ subpassCount = subpassCount_;
+ pSubpasses = pSubpasses_;
+ dependencyCount = dependencyCount_;
+ pDependencies = pDependencies_;
+ DE_UNREF (correlatedViewMaskCount_);
+ DE_UNREF (pCorrelatedViewMasks_);
+}
+
+Move<VkRenderPass> RenderPassCreateInfo1::createRenderPass (const DeviceInterface& vk, VkDevice device) const
+{
+ return vk::createRenderPass(vk, device, this);
+}
+
+RenderPassCreateInfo2::RenderPassCreateInfo2 (const void* pNext_,
+ VkRenderPassCreateFlags flags_,
+ deUint32 attachmentCount_,
+ const VkAttachmentDescription2KHR* pAttachments_,
+ deUint32 subpassCount_,
+ const VkSubpassDescription2KHR* pSubpasses_,
+ deUint32 dependencyCount_,
+ const VkSubpassDependency2KHR* pDependencies_,
+ deUint32 correlatedViewMaskCount_,
+ const deUint32* pCorrelatedViewMasks_)
+{
+ sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR;
+ pNext = pNext_;
+ flags = flags_;
+ attachmentCount = attachmentCount_;
+ pAttachments = pAttachments_;
+ subpassCount = subpassCount_;
+ pSubpasses = pSubpasses_;
+ dependencyCount = dependencyCount_;
+ pDependencies = pDependencies_;
+ correlatedViewMaskCount = correlatedViewMaskCount_;
+ pCorrelatedViewMasks = pCorrelatedViewMasks_;
+}
+
+Move<VkRenderPass> RenderPassCreateInfo2::createRenderPass (const DeviceInterface& vk, VkDevice device) const
+{
+ return vk::createRenderPass2KHR(vk, device, this);
+}
+
+SubpassBeginInfo1::SubpassBeginInfo1 (const void* pNext_,
+ VkSubpassContents contents_)
+ : contents (contents_)
+{
+ DE_ASSERT(pNext_ == DE_NULL);
+
+ DE_UNREF(pNext_);
+}
+
+SubpassBeginInfo2::SubpassBeginInfo2 (const void* pNext_,
+ VkSubpassContents contents_)
+{
+ sType = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR;
+ pNext = pNext_;
+ contents = contents_;
+}
+
+SubpassEndInfo1::SubpassEndInfo1 (const void* pNext_)
+{
+ DE_ASSERT(pNext_ == DE_NULL);
+
+ DE_UNREF(pNext_);
+}
+
+SubpassEndInfo2::SubpassEndInfo2 (const void* pNext_)
+{
+ sType = VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR;
+ pNext = pNext_;
+}
+
+void RenderpassSubpass1::cmdBeginRenderPass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const VkRenderPassBeginInfo* pRenderPassBegin,
+ const SubpassBeginInfo* pSubpassBeginInfo)
+{
+ DE_ASSERT(pSubpassBeginInfo != DE_NULL);
+
+ vk.cmdBeginRenderPass(cmdBuffer, pRenderPassBegin, pSubpassBeginInfo->contents);
+}
+
+void RenderpassSubpass1::cmdNextSubpass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const SubpassBeginInfo* pSubpassBeginInfo,
+ const SubpassEndInfo* pSubpassEndInfo)
+{
+ DE_UNREF(pSubpassEndInfo);
+ DE_ASSERT(pSubpassBeginInfo != DE_NULL);
+
+ vk.cmdNextSubpass(cmdBuffer, pSubpassBeginInfo->contents);
+}
+
+void RenderpassSubpass1::cmdEndRenderPass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const SubpassEndInfo* pSubpassEndInfo)
+{
+ DE_UNREF(pSubpassEndInfo);
+
+ vk.cmdEndRenderPass(cmdBuffer);
+}
+
+void RenderpassSubpass2::cmdBeginRenderPass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const VkRenderPassBeginInfo* pRenderPassBegin,
+ const SubpassBeginInfo* pSubpassBeginInfo)
+{
+ vk.cmdBeginRenderPass2KHR(cmdBuffer, pRenderPassBegin, pSubpassBeginInfo);
+}
+
+void RenderpassSubpass2::cmdNextSubpass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const SubpassBeginInfo* pSubpassBeginInfo,
+ const SubpassEndInfo* pSubpassEndInfo)
+{
+ DE_ASSERT(pSubpassBeginInfo != DE_NULL);
+ DE_ASSERT(pSubpassEndInfo != DE_NULL);
+
+ vk.cmdNextSubpass2KHR(cmdBuffer, pSubpassBeginInfo, pSubpassEndInfo);
+}
+
+void RenderpassSubpass2::cmdEndRenderPass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const SubpassEndInfo* pSubpassEndInfo)
+{
+ DE_ASSERT(pSubpassEndInfo != DE_NULL);
+
+ vk.cmdEndRenderPass2KHR(cmdBuffer, pSubpassEndInfo);
+}
+
+} // renderpass
+
+} // vkt
+
--- /dev/null
+#ifndef _VKTMULTIVIEWRENDERPASSUTIL_HPP
+#define _VKTMULTIVIEWRENDERPASSUTIL_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2018 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 RenderPass utils
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "vkRef.hpp"
+#include "vkDefs.hpp"
+#include "vkTypeUtil.hpp"
+
+namespace vkt
+{
+namespace MultiView
+{
+using namespace vk;
+
+class AttachmentDescription1 : public vk::VkAttachmentDescription
+{
+public:
+ AttachmentDescription1 (const void* pNext,
+ VkAttachmentDescriptionFlags flags,
+ VkFormat format,
+ VkSampleCountFlagBits samples,
+ VkAttachmentLoadOp loadOp,
+ VkAttachmentStoreOp storeOp,
+ VkAttachmentLoadOp stencilLoadOp,
+ VkAttachmentStoreOp stencilStoreOp,
+ VkImageLayout initialLayout,
+ VkImageLayout finalLayout);
+};
+
+class AttachmentDescription2 : public vk::VkAttachmentDescription2KHR
+{
+public:
+ AttachmentDescription2 (const void* pNext,
+ VkAttachmentDescriptionFlags flags,
+ VkFormat format,
+ VkSampleCountFlagBits samples,
+ VkAttachmentLoadOp loadOp,
+ VkAttachmentStoreOp storeOp,
+ VkAttachmentLoadOp stencilLoadOp,
+ VkAttachmentStoreOp stencilStoreOp,
+ VkImageLayout initialLayout,
+ VkImageLayout finalLayout);
+};
+
+class AttachmentReference1 : public vk::VkAttachmentReference
+{
+public:
+ AttachmentReference1 (const void* pNext,
+ deUint32 attachment,
+ VkImageLayout layout,
+ VkImageAspectFlags aspectMask);
+};
+
+class AttachmentReference2 : public vk::VkAttachmentReference2KHR
+{
+public:
+ AttachmentReference2 (const void* pNext,
+ deUint32 attachment,
+ VkImageLayout layout,
+ VkImageAspectFlags aspectMask);
+};
+
+class SubpassDescription1 : public vk::VkSubpassDescription
+{
+public:
+ SubpassDescription1 (const void* pNext,
+ VkSubpassDescriptionFlags flags,
+ VkPipelineBindPoint pipelineBindPoint,
+ deUint32 viewMask,
+ deUint32 inputAttachmentCount,
+ const VkAttachmentReference* pInputAttachments,
+ deUint32 colorAttachmentCount,
+ const VkAttachmentReference* pColorAttachments,
+ const VkAttachmentReference* pResolveAttachments,
+ const VkAttachmentReference* pDepthStencilAttachment,
+ deUint32 preserveAttachmentCount,
+ const deUint32* pPreserveAttachments);
+};
+
+class SubpassDescription2 : public vk::VkSubpassDescription2KHR
+{
+public:
+ SubpassDescription2 (const void* pNext,
+ VkSubpassDescriptionFlags flags,
+ VkPipelineBindPoint pipelineBindPoint,
+ deUint32 viewMask,
+ deUint32 inputAttachmentCount,
+ const VkAttachmentReference2KHR* pInputAttachments,
+ deUint32 colorAttachmentCount,
+ const VkAttachmentReference2KHR* pColorAttachments,
+ const VkAttachmentReference2KHR* pResolveAttachments,
+ const VkAttachmentReference2KHR* pDepthStencilAttachment,
+ deUint32 preserveAttachmentCount,
+ const deUint32* pPreserveAttachments);
+};
+
+class SubpassDependency1 : public vk::VkSubpassDependency
+{
+public:
+ SubpassDependency1 (const void* pNext,
+ deUint32 srcSubpass,
+ deUint32 dstSubpass,
+ VkPipelineStageFlags srcStageMask,
+ VkPipelineStageFlags dstStageMask,
+ VkAccessFlags srcAccessMask,
+ VkAccessFlags dstAccessMask,
+ VkDependencyFlags dependencyFlags,
+ deInt32 viewOffset);
+};
+
+class SubpassDependency2 : public vk::VkSubpassDependency2KHR
+{
+public:
+ SubpassDependency2 (const void* pNext,
+ deUint32 srcSubpass,
+ deUint32 dstSubpass,
+ VkPipelineStageFlags srcStageMask,
+ VkPipelineStageFlags dstStageMask,
+ VkAccessFlags srcAccessMask,
+ VkAccessFlags dstAccessMask,
+ VkDependencyFlags dependencyFlags,
+ deInt32 viewOffset);
+};
+
+class RenderPassCreateInfo1 : public VkRenderPassCreateInfo
+{
+public:
+ RenderPassCreateInfo1 (const void* pNext,
+ VkRenderPassCreateFlags flags,
+ deUint32 attachmentCount,
+ const VkAttachmentDescription* pAttachments,
+ deUint32 subpassCount,
+ const VkSubpassDescription* pSubpasses,
+ deUint32 dependencyCount,
+ const VkSubpassDependency* pDependencies,
+ deUint32 correlatedViewMaskCount,
+ const deUint32* pCorrelatedViewMasks);
+
+ Move<VkRenderPass> createRenderPass (const DeviceInterface& vk,
+ VkDevice device) const;
+};
+
+class RenderPassCreateInfo2 : public VkRenderPassCreateInfo2KHR
+{
+public:
+ RenderPassCreateInfo2 (const void* pNext,
+ VkRenderPassCreateFlags flags,
+ deUint32 attachmentCount,
+ const VkAttachmentDescription2KHR* pAttachments,
+ deUint32 subpassCount,
+ const VkSubpassDescription2KHR* pSubpasses,
+ deUint32 dependencyCount,
+ const VkSubpassDependency2KHR* pDependencies,
+ deUint32 correlatedViewMaskCount,
+ const deUint32* pCorrelatedViewMasks);
+
+ Move<VkRenderPass> createRenderPass (const DeviceInterface& vk,
+ VkDevice device) const;
+};
+
+class SubpassBeginInfo1
+{
+public:
+ SubpassBeginInfo1 (const void* pNext,
+ VkSubpassContents contents);
+
+ VkSubpassContents contents;
+};
+
+class SubpassBeginInfo2 : public VkSubpassBeginInfoKHR
+{
+public:
+ SubpassBeginInfo2 (const void* pNext,
+ VkSubpassContents contents);
+};
+
+class SubpassEndInfo1
+{
+public:
+ SubpassEndInfo1 (const void* pNext);
+};
+
+class SubpassEndInfo2 : public VkSubpassEndInfoKHR
+{
+public:
+ SubpassEndInfo2 (const void* pNext);
+};
+
+class RenderpassSubpass1
+{
+public:
+ typedef SubpassBeginInfo1 SubpassBeginInfo;
+ typedef SubpassEndInfo1 SubpassEndInfo;
+
+ static void cmdBeginRenderPass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const VkRenderPassBeginInfo* pRenderPassBegin,
+ const SubpassBeginInfo* pSubpassBeginInfo);
+
+ static void cmdNextSubpass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const SubpassBeginInfo* pSubpassBeginInfo,
+ const SubpassEndInfo* pSubpassEndInfo);
+
+ static void cmdEndRenderPass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const SubpassEndInfo* pSubpassEndInfo);
+};
+
+class RenderpassSubpass2
+{
+public:
+ typedef SubpassBeginInfo2 SubpassBeginInfo;
+ typedef SubpassEndInfo2 SubpassEndInfo;
+
+ static void cmdBeginRenderPass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const VkRenderPassBeginInfo* pRenderPassBegin,
+ const SubpassBeginInfo* pSubpassBeginInfo);
+
+ static void cmdNextSubpass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const SubpassBeginInfo* pSubpassBeginInfo,
+ const SubpassEndInfo* pSubpassEndInfo);
+
+ static void cmdEndRenderPass (const DeviceInterface& vk,
+ VkCommandBuffer cmdBuffer,
+ const SubpassEndInfo* pSubpassEndInfo);
+};
+
+} // renderpass
+
+} // vkt
+
+#endif // _VKTMULTIVIEWRENDERPASSUTIL_HPP
#include "vktMultiViewRenderTests.hpp"
#include "vktMultiViewRenderUtil.hpp"
+#include "vktMultiViewRenderPassUtil.hpp"
#include "vktTestCase.hpp"
#include "vkBuilderUtil.hpp"
TEST_TYPE_LAST
};
+enum RenderPassType
+{
+ RENDERPASS_TYPE_LEGACY = 0,
+ RENDERPASS_TYPE_RENDERPASS2,
+};
+
struct TestParameters
{
VkExtent3D extent;
TestType viewIndex;
VkSampleCountFlagBits samples;
VkFormat colorFormat;
+ RenderPassType renderPassType;
};
const int TEST_POINT_SIZE_SMALL = 2;
const int TEST_POINT_SIZE_WIDE = 4;
+vk::Move<vk::VkRenderPass> makeRenderPass (const DeviceInterface& vk,
+ const VkDevice device,
+ const VkFormat colorFormat,
+ const vector<deUint32>& viewMasks,
+ RenderPassType renderPassType,
+ const VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT,
+ const VkAttachmentLoadOp colorLoadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
+ const VkFormat dsFormat = VK_FORMAT_UNDEFINED)
+{
+ switch (renderPassType)
+ {
+ case RENDERPASS_TYPE_LEGACY:
+ return MultiView::makeRenderPass<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>(vk, device, colorFormat, viewMasks, samples, colorLoadOp, dsFormat);
+ case RENDERPASS_TYPE_RENDERPASS2:
+ return MultiView::makeRenderPass<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>(vk, device, colorFormat, viewMasks, samples, colorLoadOp, dsFormat);
+ default:
+ TCU_THROW(InternalError, "Impossible");
+ }
+}
+
+vk::Move<vk::VkRenderPass> makeRenderPassWithAttachments (const DeviceInterface& vk,
+ const VkDevice device,
+ const VkFormat colorFormat,
+ const vector<deUint32>& viewMasks,
+ RenderPassType renderPassType)
+{
+ switch (renderPassType)
+ {
+ case RENDERPASS_TYPE_LEGACY:
+ return MultiView::makeRenderPassWithAttachments<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>(vk, device, colorFormat, viewMasks);
+ case RENDERPASS_TYPE_RENDERPASS2:
+ return MultiView::makeRenderPassWithAttachments<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>(vk, device, colorFormat, viewMasks);
+ default:
+ TCU_THROW(InternalError, "Impossible");
+ }
+}
+
+vk::Move<vk::VkRenderPass> makeRenderPassWithDepth (const DeviceInterface& vk,
+ const VkDevice device,
+ const VkFormat colorFormat,
+ const vector<deUint32>& viewMasks,
+ const VkFormat dsFormat,
+ RenderPassType renderPassType)
+{
+ switch (renderPassType)
+ {
+ case RENDERPASS_TYPE_LEGACY:
+ return MultiView::makeRenderPassWithDepth<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>(vk, device, colorFormat, viewMasks, dsFormat);
+ case RENDERPASS_TYPE_RENDERPASS2:
+ return MultiView::makeRenderPassWithDepth<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>(vk, device, colorFormat, viewMasks, dsFormat);
+ default:
+ TCU_THROW(InternalError, "Impossible");
+ }
+}
+
+template<typename RenderpassSubpass>
+void cmdBeginRenderPass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassContents contents)
+{
+ const typename RenderpassSubpass::SubpassBeginInfo subpassBeginInfo (DE_NULL, contents);
+
+ RenderpassSubpass::cmdBeginRenderPass(vkd, cmdBuffer, pRenderPassBegin, &subpassBeginInfo);
+}
+
+void cmdBeginRenderPass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassContents contents, RenderPassType renderPassType)
+{
+ switch (renderPassType)
+ {
+ case RENDERPASS_TYPE_LEGACY: cmdBeginRenderPass<RenderpassSubpass1>(vkd, cmdBuffer, pRenderPassBegin, contents); break;
+ case RENDERPASS_TYPE_RENDERPASS2: cmdBeginRenderPass<RenderpassSubpass2>(vkd, cmdBuffer, pRenderPassBegin, contents); break;
+ default: TCU_THROW(InternalError, "Impossible");
+ }
+}
+
+template<typename RenderpassSubpass>
+void cmdNextSubpass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, const VkSubpassContents contents)
+{
+ const typename RenderpassSubpass::SubpassBeginInfo subpassBeginInfo (DE_NULL, contents);
+ const typename RenderpassSubpass::SubpassEndInfo subpassEndInfo (DE_NULL);
+
+ RenderpassSubpass::cmdNextSubpass(vkd, cmdBuffer, &subpassBeginInfo, &subpassEndInfo);
+}
+
+void cmdNextSubpass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, const VkSubpassContents contents, RenderPassType renderPassType)
+{
+ switch (renderPassType)
+ {
+ case RENDERPASS_TYPE_LEGACY: cmdNextSubpass<RenderpassSubpass1>(vkd, cmdBuffer, contents); break;
+ case RENDERPASS_TYPE_RENDERPASS2: cmdNextSubpass<RenderpassSubpass2>(vkd, cmdBuffer, contents); break;
+ default: TCU_THROW(InternalError, "Impossible");
+ }
+}
+
+template<typename RenderpassSubpass>
+void cmdEndRenderPass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer)
+{
+ const typename RenderpassSubpass::SubpassEndInfo subpassEndInfo (DE_NULL);
+
+ RenderpassSubpass::cmdEndRenderPass(vkd, cmdBuffer, &subpassEndInfo);
+}
+
+void cmdEndRenderPass (DeviceInterface& vkd, VkCommandBuffer cmdBuffer, RenderPassType renderPassType)
+{
+ switch (renderPassType)
+ {
+ case RENDERPASS_TYPE_LEGACY: cmdEndRenderPass<RenderpassSubpass1>(vkd, cmdBuffer); break;
+ case RENDERPASS_TYPE_RENDERPASS2: cmdEndRenderPass<RenderpassSubpass2>(vkd, cmdBuffer); break;
+ default: TCU_THROW(InternalError, "Impossible");
+ }
+}
+
class ImageAttachment
{
public:
void fillLayer (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx);
void fillQuarter (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx, const deUint32 quarter, const deUint32 subpassNdx);
+ const bool m_extensionSupported;
const TestParameters m_parameters;
const int m_seed;
const deUint32 m_squareCount;
MultiViewRenderTestInstance::MultiViewRenderTestInstance (Context& context, const TestParameters& parameters)
: TestInstance (context)
+ , m_extensionSupported ((parameters.renderPassType == RENDERPASS_TYPE_RENDERPASS2) && context.requireDeviceExtension("VK_KHR_create_renderpass2"))
, m_parameters (fillMissingParameters(parameters))
, m_seed (context.getTestContext().getCommandLine().getBaseSeed())
, m_squareCount (4u)
const deUint32 subpassCount = static_cast<deUint32>(m_parameters.viewMasks.size());
// FrameBuffer & renderPass
- Unique<VkRenderPass> renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks));
+ Unique<VkRenderPass> renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType));
vector<VkImageView> attachments;
attachments.push_back(m_colorAttachment->getImageView());
void MultiViewRenderTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
{
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
+
beginCommandBuffer(*m_device, *m_cmdBuffer);
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdDraw(*m_cmdBuffer, 4u, 1u, (drawNdx + subpassNdx % m_squareCount) * 4u, 0u);
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
if (!isCoreDeviceExtension(m_context.getUsedApiVersion(), "VK_KHR_multiview"))
deviceExtensions.push_back("VK_KHR_multiview");
+ if (m_parameters.renderPassType == RENDERPASS_TYPE_RENDERPASS2)
+ if (!isCoreDeviceExtension(m_context.getUsedApiVersion(), "VK_KHR_create_renderpass2"))
+ deviceExtensions.push_back("VK_KHR_create_renderpass2");
+
const VkDeviceCreateInfo deviceInfo =
{
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //VkStructureType sType;
m_inputAttachment = de::SharedPtr<ImageAttachment>(new ImageAttachment(*m_logicalDevice, *m_device, *m_allocator, m_parameters.extent, m_parameters.colorFormat));
// FrameBuffer & renderPass
- Unique<VkRenderPass> renderPass (makeRenderPassWithAttachments(*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks));
+ Unique<VkRenderPass> renderPass (makeRenderPassWithAttachments(*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType));
vector<VkImageView> attachments;
attachments.push_back(m_colorAttachment->getImageView());
appendVertex(tcu::Vec4( 0.0f, 0.0f, 1.0f, 1.0f), color);
}
-void MultiViewInstancedTestInstance::draw (const deUint32 subpassCount,VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
+void MultiViewInstancedTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
{
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
beginCommandBuffer(*m_device, *m_cmdBuffer);
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdDraw(*m_cmdBuffer, 4u, drawCountPerSubpass, 0u, subpassNdx % m_squareCount);
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
MultiViewInputRateInstanceTestInstance (Context& context, const TestParameters& parameters);
protected:
void createVertexData (void);
+
void draw (const deUint32 subpassCount,
VkRenderPass renderPass,
VkFramebuffer frameBuffer,
appendVertex(tcu::Vec4( 0.0f, 0.0f, 1.0f, 1.0f), tcu::Vec4(0.5f, 0.0f, 0.4f, 1.0f));
}
-void MultiViewInputRateInstanceTestInstance::draw (const deUint32 subpassCount,VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
+void MultiViewInputRateInstanceTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
{
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
beginCommandBuffer(*m_device, *m_cmdBuffer);
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdDraw(*m_cmdBuffer, 4u, 4u, 0u, 0u);
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
public:
MultiViewDrawIndirectTestInstance (Context& context, const TestParameters& parameters);
protected:
+
void draw (const deUint32 subpassCount,
VkRenderPass renderPass,
VkFramebuffer frameBuffer,
{
}
-void MultiViewDrawIndirectTestInstance::draw (const deUint32 subpassCount,VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
+void MultiViewDrawIndirectTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
{
typedef de::SharedPtr<Unique<VkBuffer> > BufferSP;
typedef de::SharedPtr<UniquePtr<Allocation> > AllocationSP;
const size_t nonCoherentAtomSize = static_cast<size_t>(m_context.getDeviceProperties().limits.nonCoherentAtomSize);
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
indirectAllocations[subpassNdx] = (AllocationSP(new UniquePtr<Allocation>(allocationBuffer)));
}
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
+
beginCommandBuffer(*m_device, *m_cmdBuffer);
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
}
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
{
}
-void MultiViewClearAttachmentsTestInstance::draw (const deUint32 subpassCount,VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
+void MultiViewClearAttachmentsTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
{
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
+
beginCommandBuffer(*m_device, *m_cmdBuffer);
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdClearAttachments(*m_cmdBuffer, 1u, &clearAttachment, 1u, &clearRect);
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
{
typedef de::SharedPtr<Unique<VkCommandBuffer> > VkCommandBufferSp;
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
beginCommandBuffer(*m_device, *m_cmdBuffer);
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderPassType);
//Create secondary buffer
const VkCommandBufferAllocateInfo cmdBufferAllocateInfo =
m_device->cmdExecuteCommands(*m_cmdBuffer, 1u, &cmdBufferSecondary.back().get()->get());
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
void MultiViewPointSizeTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
{
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
+
beginCommandBuffer(*m_device, *m_cmdBuffer);
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdDraw(*m_cmdBuffer, 1u, 1u, drawNdx + subpassNdx % m_squareCount, 0u);
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
protected:
tcu::TestStatus iterate (void);
void createVertexData (void);
+
void draw (const deUint32 subpassCount,
VkRenderPass renderPass,
VkFramebuffer frameBuffer,
const deUint32 subpassCount = static_cast<deUint32>(m_parameters.viewMasks.size());
// FrameBuffer & renderPass
- Unique<VkRenderPass> renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, VK_SAMPLE_COUNT_2_BIT));
+ Unique<VkRenderPass> renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType, VK_SAMPLE_COUNT_2_BIT));
vector<VkImageView> attachments;
attachments.push_back(m_colorAttachment->getImageView());
void MultiViewMultsampleTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
{
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
makeExtent3D(m_parameters.extent.width, m_parameters.extent.height, 1u), // VkExtent3D extent;
};
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
+
beginCommandBuffer(*m_device, *m_cmdBuffer);
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdDraw(*m_cmdBuffer, vertexPerPrimitive, 1u, (drawNdx + subpassNdx % m_squareCount) * vertexPerPrimitive, 0u);
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
protected:
tcu::TestStatus iterate (void);
void createVertexData (void);
+
void draw (const deUint32 subpassCount,
VkRenderPass renderPass,
VkFramebuffer frameBuffer,
tcu::TestStatus MultiViewQueriesTestInstance::iterate (void)
{
const deUint32 subpassCount = static_cast<deUint32>(m_parameters.viewMasks.size());
- Unique<VkRenderPass> renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks));
+ Unique<VkRenderPass> renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType));
vector<VkImageView> attachments (1u, m_colorAttachment->getImageView());
Unique<VkFramebuffer> frameBuffer (makeFramebuffer(*m_device, *m_logicalDevice, *renderPass, attachments, m_parameters.extent.width, m_parameters.extent.height, 1u));
Unique<VkPipelineLayout> pipelineLayout (makePipelineLayout(*m_device, *m_logicalDevice));
void MultiViewQueriesTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
{
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
const deUint32 queryCountersNumber = (subpassCount == 1) ? m_squareCount * getUsedViewsCount(0) : getQueryCountersNumber();
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
const VkQueryPoolCreateInfo occlusionQueryPoolCreateInfo =
{
VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, // VkStructureType sType;
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
}
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
DE_ASSERT(queryStartIndex == queryCountersNumber);
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
(m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR) ? VK_ATTACHMENT_LOAD_OP_CLEAR :
(m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR) ? VK_ATTACHMENT_LOAD_OP_DONT_CARE :
VK_ATTACHMENT_LOAD_OP_LAST;
- Unique<VkRenderPass> renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, VK_SAMPLE_COUNT_1_BIT, loadOp));
+ Unique<VkRenderPass> renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_parameters.renderPassType, VK_SAMPLE_COUNT_1_BIT, loadOp));
vector<VkImageView> attachments (1u, m_colorAttachment->getImageView());
Unique<VkFramebuffer> frameBuffer (makeFramebuffer(*m_device, *m_logicalDevice, *renderPass, attachments, m_parameters.extent.width, m_parameters.extent.height, 1u));
Unique<VkPipelineLayout> pipelineLayout (makePipelineLayout(*m_device, *m_logicalDevice));
void MultiViewReadbackTestInstance::drawClears (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines, const bool clearPass)
{
- const VkRect2D renderArea = makeRect2D(m_parameters.extent);
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(m_colorTable[0]);
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
const bool withClearColor = (clearPass && m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR);
+ 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;
+ withClearColor ? 1u : 0u, // uint32_t clearValueCount;
+ withClearColor ? &renderPassClearValue : DE_NULL, // const VkClearValue* pClearValues;
+ };
beginCommandBuffer(*m_device, *m_cmdBuffer);
if (clearPass)
beforeDraw();
- if (withClearColor)
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), m_colorTable[0]);
- else
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
}
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
if (!clearPass)
afterDraw();
protected:
tcu::TestStatus iterate (void);
void createVertexData (void);
+
void draw (const deUint32 subpassCount,
VkRenderPass renderPass,
VkFramebuffer frameBuffer,
tcu::TestStatus MultiViewDepthStencilTestInstance::iterate (void)
{
const deUint32 subpassCount = static_cast<deUint32>(m_parameters.viewMasks.size());
- Unique<VkRenderPass> renderPass (makeRenderPassWithDepth (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_dsFormat));
+ Unique<VkRenderPass> renderPass (makeRenderPassWithDepth (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, m_dsFormat, m_parameters.renderPassType));
vector<VkImageView> attachments (makeAttachmentsVector());
Unique<VkFramebuffer> frameBuffer (makeFramebuffer(*m_device, *m_logicalDevice, *renderPass, attachments, m_parameters.extent.width, m_parameters.extent.height, 1u));
Unique<VkPipelineLayout> pipelineLayout (makePipelineLayout(*m_device, *m_logicalDevice));
void MultiViewDepthStencilTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector<PipelineSp>& pipelines)
{
+ const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } };
+ const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f));
const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer };
const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u };
const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u;
const deUint32 vertexPerPrimitive = 4u;
+ 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;
+ &renderPassClearValue, // const VkClearValue* pClearValues;
+ };
beginCommandBuffer(*m_device, *m_cmdBuffer);
beforeDraw();
- beginRenderPass(*m_device, *m_cmdBuffer, renderPass, frameBuffer, makeRect2D(0, 0, m_parameters.extent.width, m_parameters.extent.height), tcu::Vec4(0.0f));
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdDraw(*m_cmdBuffer, vertexPerPrimitive, 1u, firstVertexOffset + (drawNdx + subpassNdx % m_squareCount) * vertexPerPrimitive, 0u);
if (subpassNdx < subpassCount - 1u)
- m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
}
- endRenderPass(*m_device, *m_cmdBuffer);
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
afterDraw();
void multiViewRenderCreateTests (tcu::TestCaseGroup* group)
{
- tcu::TestContext& testCtx = group->getTestContext();
const deUint32 testCaseCount = 7u;
- MovePtr<tcu::TestCaseGroup> groupViewIndex (new tcu::TestCaseGroup(testCtx, "index", "ViewIndex rendering tests."));
const string shaderName[TEST_TYPE_LAST] =
{
"masks",
depthStencilMasks.push_back(12u); // 1100
depthStencilMasks.push_back(9u); // 1001
- for (int testTypeNdx = TEST_TYPE_VIEW_MASK; testTypeNdx < TEST_TYPE_LAST; ++testTypeNdx)
+ for (int renderPassTypeNdx = 0; renderPassTypeNdx < 2; ++renderPassTypeNdx)
{
- MovePtr<tcu::TestCaseGroup> groupShader (new tcu::TestCaseGroup(testCtx, shaderName[testTypeNdx].c_str(), ""));
- const TestType testType = static_cast<TestType>(testTypeNdx);
- const VkSampleCountFlagBits sampleCountFlags = (testType == TEST_TYPE_MULTISAMPLE) ? VK_SAMPLE_COUNT_2_BIT : VK_SAMPLE_COUNT_1_BIT;
- const VkFormat colorFormat = (testType == TEST_TYPE_MULTISAMPLE) ? VK_FORMAT_R32G32B32A32_SFLOAT : VK_FORMAT_R8G8B8A8_UNORM;
+ RenderPassType renderPassType ((renderPassTypeNdx == 0) ? RENDERPASS_TYPE_LEGACY : RENDERPASS_TYPE_RENDERPASS2);
+ MovePtr<tcu::TestCaseGroup> groupRenderPass2 ((renderPassTypeNdx == 0) ? DE_NULL : new tcu::TestCaseGroup(group->getTestContext(), "renderpass2", "RenderPass2 index tests"));
+ tcu::TestCaseGroup* targetGroup ((renderPassTypeNdx == 0) ? group : groupRenderPass2.get());
+ tcu::TestContext& testCtx (targetGroup->getTestContext());
+ MovePtr<tcu::TestCaseGroup> groupViewIndex (new tcu::TestCaseGroup(testCtx, "index", "ViewIndex rendering tests."));
- if (testTypeNdx == TEST_TYPE_DEPTH || testTypeNdx == TEST_TYPE_STENCIL)
+ for (int testTypeNdx = TEST_TYPE_VIEW_MASK; testTypeNdx < TEST_TYPE_LAST; ++testTypeNdx)
{
- const VkExtent3D dsTestExtent3D = { 64u, 64u, 4u };
- const TestParameters parameters = { dsTestExtent3D, tripleDepthStencilMasks(depthStencilMasks), testType, sampleCountFlags, colorFormat };
- const std::string testName = createViewMasksName(parameters.viewMasks);
+ MovePtr<tcu::TestCaseGroup> groupShader (new tcu::TestCaseGroup(testCtx, shaderName[testTypeNdx].c_str(), ""));
+ const TestType testType = static_cast<TestType>(testTypeNdx);
+ const VkSampleCountFlagBits sampleCountFlags = (testType == TEST_TYPE_MULTISAMPLE) ? VK_SAMPLE_COUNT_2_BIT : VK_SAMPLE_COUNT_1_BIT;
+ const VkFormat colorFormat = (testType == TEST_TYPE_MULTISAMPLE) ? VK_FORMAT_R32G32B32A32_SFLOAT : VK_FORMAT_R8G8B8A8_UNORM;
- groupShader->addChild(new MultiViewRenderTestsCase(testCtx, testName.c_str(), "", parameters));
- }
- else
- {
- for (deUint32 testCaseNdx = 0u; testCaseNdx < testCaseCount; ++testCaseNdx)
+ if (testTypeNdx == TEST_TYPE_DEPTH || testTypeNdx == TEST_TYPE_STENCIL)
{
- const TestParameters parameters = { extent3D[testCaseNdx], viewMasks[testCaseNdx], testType, sampleCountFlags, colorFormat };
- const std::string testName = createViewMasksName(parameters.viewMasks);
+ const VkExtent3D dsTestExtent3D = { 64u, 64u, 4u };
+ const TestParameters parameters = { dsTestExtent3D, tripleDepthStencilMasks(depthStencilMasks), testType, sampleCountFlags, colorFormat, renderPassType };
+ const std::string testName = createViewMasksName(parameters.viewMasks);
groupShader->addChild(new MultiViewRenderTestsCase(testCtx, testName.c_str(), "", parameters));
}
-
- // maxMultiviewViewCount case
+ else
{
- const VkExtent3D incompleteExtent3D = { 16u, 16u, 0u };
- const vector<deUint32> dummyMasks;
- const TestParameters parameters = { incompleteExtent3D, dummyMasks, testType, sampleCountFlags, colorFormat };
+ for (deUint32 testCaseNdx = 0u; testCaseNdx < testCaseCount; ++testCaseNdx)
+ {
+ const TestParameters parameters = { extent3D[testCaseNdx], viewMasks[testCaseNdx], testType, sampleCountFlags, colorFormat, renderPassType };
+ const std::string testName = createViewMasksName(parameters.viewMasks);
- groupShader->addChild(new MultiViewRenderTestsCase(testCtx, "max_multi_view_view_count", "", parameters));
+ groupShader->addChild(new MultiViewRenderTestsCase(testCtx, testName.c_str(), "", parameters));
+ }
+
+ // maxMultiviewViewCount case
+ {
+ const VkExtent3D incompleteExtent3D = { 16u, 16u, 0u };
+ const vector<deUint32> dummyMasks;
+ const TestParameters parameters = { incompleteExtent3D, dummyMasks, testType, sampleCountFlags, colorFormat, renderPassType };
+
+ groupShader->addChild(new MultiViewRenderTestsCase(testCtx, "max_multi_view_view_count", "", parameters));
+ }
}
+
+ switch (testType)
+ {
+ case TEST_TYPE_VIEW_MASK:
+ case TEST_TYPE_INPUT_ATTACHMENTS:
+ case TEST_TYPE_INPUT_ATTACHMENTS_GEOMETRY:
+ case TEST_TYPE_INSTANCED_RENDERING:
+ case TEST_TYPE_INPUT_RATE_INSTANCE:
+ case TEST_TYPE_DRAW_INDIRECT:
+ case TEST_TYPE_DRAW_INDIRECT_INDEXED:
+ case TEST_TYPE_DRAW_INDEXED:
+ case TEST_TYPE_CLEAR_ATTACHMENTS:
+ case TEST_TYPE_SECONDARY_CMD_BUFFER:
+ case TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY:
+ case TEST_TYPE_POINT_SIZE:
+ case TEST_TYPE_MULTISAMPLE:
+ case TEST_TYPE_QUERIES:
+ case TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR:
+ case TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR:
+ case TEST_TYPE_DEPTH:
+ case TEST_TYPE_STENCIL:
+ targetGroup->addChild(groupShader.release());
+ break;
+ case TEST_TYPE_VIEW_INDEX_IN_VERTEX:
+ case TEST_TYPE_VIEW_INDEX_IN_FRAGMENT:
+ case TEST_TYPE_VIEW_INDEX_IN_GEOMETRY:
+ case TEST_TYPE_VIEW_INDEX_IN_TESELLATION:
+ groupViewIndex->addChild(groupShader.release());
+ break;
+ default:
+ DE_ASSERT(0);
+ break;
+ };
}
- switch (testType)
- {
- case TEST_TYPE_VIEW_MASK:
- case TEST_TYPE_INPUT_ATTACHMENTS:
- case TEST_TYPE_INPUT_ATTACHMENTS_GEOMETRY:
- case TEST_TYPE_INSTANCED_RENDERING:
- case TEST_TYPE_INPUT_RATE_INSTANCE:
- case TEST_TYPE_DRAW_INDIRECT:
- case TEST_TYPE_DRAW_INDIRECT_INDEXED:
- case TEST_TYPE_DRAW_INDEXED:
- case TEST_TYPE_CLEAR_ATTACHMENTS:
- case TEST_TYPE_SECONDARY_CMD_BUFFER:
- case TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY:
- case TEST_TYPE_POINT_SIZE:
- case TEST_TYPE_MULTISAMPLE:
- case TEST_TYPE_QUERIES:
- case TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR:
- case TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR:
- case TEST_TYPE_DEPTH:
- case TEST_TYPE_STENCIL:
- group->addChild(groupShader.release());
- break;
- case TEST_TYPE_VIEW_INDEX_IN_VERTEX:
- case TEST_TYPE_VIEW_INDEX_IN_FRAGMENT:
- case TEST_TYPE_VIEW_INDEX_IN_GEOMETRY:
- case TEST_TYPE_VIEW_INDEX_IN_TESELLATION:
- groupViewIndex->addChild(groupShader.release());
- break;
- default:
- DE_ASSERT(0);
- break;
- };
- }
+ targetGroup->addChild(groupViewIndex.release());
- group->addChild(groupViewIndex.release());
+ if (renderPassTypeNdx == 1)
+ group->addChild(groupRenderPass2.release());
+ }
}
} //MultiView
*//*--------------------------------------------------------------------*/
#include "vktMultiViewRenderUtil.hpp"
+#include "vktMultiViewRenderPassUtil.hpp"
#include "vktTestCase.hpp"
#include "vkBuilderUtil.hpp"
return vk::createDescriptorSetLayout(vk, device, &createInfo);
}
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
Move<VkRenderPass> makeRenderPass (const DeviceInterface& vk,
const VkDevice device,
const VkFormat colorFormat,
const vector<deUint32>& viewMasks,
const VkSampleCountFlagBits samples,
const VkAttachmentLoadOp colorLoadOp,
- const vk::VkFormat dsFormat)
+ const VkFormat dsFormat)
{
const bool dsAttacmentAvailable = (dsFormat != vk::VK_FORMAT_UNDEFINED);
const deUint32 subpassCount = static_cast<deUint32>(viewMasks.size());
- const VkAttachmentDescription colorAttachmentDescription =
- {
- (VkAttachmentDescriptionFlags)0, // VkAttachmentDescriptionFlags flags;
- colorFormat, // VkFormat format;
- samples, // VkSampleCountFlagBits samples;
- colorLoadOp, // 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 VkAttachmentDescription dsAttachmentDescription =
- {
- (VkAttachmentDescriptionFlags)0, // VkAttachmentDescriptionFlags flags;
- dsFormat, // VkFormat format;
- samples, // VkSampleCountFlagBits samples;
- VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp loadOp;
- VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp storeOp;
- VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp stencilLoadOp;
- VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp stencilStoreOp;
- VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VkImageLayout initialLayout;
- VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL // VkImageLayout finalLayout;
- };
-
- const VkAttachmentReference depthAttachmentReference =
- {
- dsAttacmentAvailable ? 1u : VK_ATTACHMENT_UNUSED, // deUint32 attachment;
- dsAttacmentAvailable ? // VkImageLayout layout;
+ const AttachmentDesc colorAttachmentDescription // VkAttachmentDescription || VkAttachmentDescription2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ (VkAttachmentDescriptionFlags)0, // VkAttachmentDescriptionFlags flags; || VkAttachmentDescriptionFlags flags;
+ colorFormat, // VkFormat format; || VkFormat format;
+ samples, // VkSampleCountFlagBits samples; || VkSampleCountFlagBits samples;
+ colorLoadOp, // VkAttachmentLoadOp loadOp; || VkAttachmentLoadOp loadOp;
+ VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp; || VkAttachmentStoreOp storeOp;
+ VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp stencilLoadOp; || VkAttachmentLoadOp stencilLoadOp;
+ VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp stencilStoreOp; || VkAttachmentStoreOp stencilStoreOp;
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout initialLayout; || VkImageLayout initialLayout;
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL // VkImageLayout finalLayout; || VkImageLayout finalLayout;
+ );
+
+ const AttachmentRef colorAttachmentReference // VkAttachmentReference || VkAttachmentReference2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ 0u, // deUint32 attachment; || deUint32 attachment;
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout layout; || VkImageLayout layout;
+ 0u // || VkImageAspectFlags aspectMask;
+ );
+
+ const AttachmentDesc dsAttachmentDescription // VkAttachmentDescription || VkAttachmentDescription2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ (VkAttachmentDescriptionFlags)0, // VkAttachmentDescriptionFlags flags; || VkAttachmentDescriptionFlags flags;
+ dsFormat, // VkFormat format; || VkFormat format;
+ samples, // VkSampleCountFlagBits samples; || VkSampleCountFlagBits samples;
+ VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp loadOp; || VkAttachmentLoadOp loadOp;
+ VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp storeOp; || VkAttachmentStoreOp storeOp;
+ VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp stencilLoadOp; || VkAttachmentLoadOp stencilLoadOp;
+ VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp stencilStoreOp; || VkAttachmentStoreOp stencilStoreOp;
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VkImageLayout initialLayout; || VkImageLayout initialLayout;
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL // VkImageLayout finalLayout; || VkImageLayout finalLayout;
+ );
+
+ const AttachmentRef depthAttachmentReference // VkAttachmentReference || VkAttachmentReference2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ dsAttacmentAvailable ? 1u : VK_ATTACHMENT_UNUSED, // deUint32 attachment; || deUint32 attachment;
+ dsAttacmentAvailable ? // VkImageLayout layout; || VkImageLayout layout;
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL :
- VK_IMAGE_LAYOUT_UNDEFINED
- };
+ VK_IMAGE_LAYOUT_UNDEFINED,
+ 0u // || VkImageAspectFlags aspectMask;
+ );
- const VkAttachmentDescription attachmentDescriptions[] =
+ const AttachmentDesc attachmentDescriptions[] =
{
colorAttachmentDescription,
dsAttachmentDescription,
};
- const VkSubpassDescription subpassDescription =
+ DE_ASSERT((typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo1)) || (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo2)));
+
+ vector <SubpassDesc> subpassDescriptions;
+ for (deUint32 subpassNdx = 0; subpassNdx < subpassCount; ++subpassNdx)
{
- (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;
- };
- vector <VkSubpassDescription> subpassDescriptions (subpassCount, subpassDescription);
+ const deUint32 viewMask = (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo2))
+ ? viewMasks[subpassNdx]
+ : 0u;
+ const SubpassDesc subpassDescription // VkSubpassDescription || VkSubpassDescription2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ (VkSubpassDescriptionFlags)0, // VkSubpassDescriptionFlags flags; || VkSubpassDescriptionFlags flags;
+ VK_PIPELINE_BIND_POINT_GRAPHICS, // VkPipelineBindPoint pipelineBindPoint; || VkPipelineBindPoint pipelineBindPoint;
+ viewMask, // || deUint32 viewMask;
+ 0u, // deUint32 inputAttachmentCount; || deUint32 inputAttachmentCount;
+ DE_NULL, // const VkAttachmentReference* pInputAttachments; || const VkAttachmentReference2KHR* pInputAttachments;
+ 1u, // deUint32 colorAttachmentCount; || deUint32 colorAttachmentCount;
+ &colorAttachmentReference, // const VkAttachmentReference* pColorAttachments; || const VkAttachmentReference2KHR* pColorAttachments;
+ DE_NULL, // const VkAttachmentReference* pResolveAttachments; || const VkAttachmentReference2KHR* pResolveAttachments;
+ &depthAttachmentReference, // const VkAttachmentReference* pDepthStencilAttachment; || const VkAttachmentReference2KHR* pDepthStencilAttachment;
+ 0u, // deUint32 preserveAttachmentCount; || deUint32 preserveAttachmentCount;
+ DE_NULL // const deUint32* pPreserveAttachments; || const deUint32* pPreserveAttachments;
+ );
+
+ subpassDescriptions.push_back(subpassDescription);
+ }
const VkRenderPassMultiviewCreateInfo renderPassMultiviewInfo =
{
- VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR, //VkStructureType sType;
- DE_NULL, //const void* pNext;
- subpassCount, //uint32_t subpassCount;
- &viewMasks[0], //const uint32_t* pViewMasks;
- 0u, //uint32_t dependencyCount;
- DE_NULL, //const int32_t* pViewOffsets;
- 0u, //uint32_t correlationMaskCount;
- DE_NULL, //const uint32_t* pCorrelationMasks;
+ VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ subpassCount, // uint32_t subpassCount;
+ &viewMasks[0], // const uint32_t* pViewMasks;
+ 0u, // uint32_t dependencyCount;
+ DE_NULL, // const int32_t* pViewOffsets;
+ 0u, // uint32_t correlationMaskCount;
+ DE_NULL, // const uint32_t* pCorrelationMasks;
};
+ const VkRenderPassMultiviewCreateInfo* renderPassMultiviewInfoPtr = (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo1))
+ ? &renderPassMultiviewInfo
+ : DE_NULL;
const VkPipelineStageFlags srcStageMask = dsAttacmentAvailable
? VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
const VkAccessFlags srcAccessMask = dsAttacmentAvailable
? VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
: VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
- vector <VkSubpassDependency> subpassDependencies;
+ vector <SubpassDep> subpassDependencies;
for(deUint32 subpassNdx = 0u; subpassNdx < subpassCount; ++subpassNdx)
{
- const VkSubpassDependency subpassDependency =
- {
- subpassNdx, // deUint32 srcSubpass;
- (subpassNdx ==subpassCount - 1u) ? subpassNdx : subpassNdx+1u, // deUint32 dstSubpass;
- srcStageMask, // VkPipelineStageFlags srcStageMask;
- VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, // VkPipelineStageFlags dstStageMask;
- srcAccessMask, // VkAccessFlags srcAccessMask;
- VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, // VkAccessFlags dstAccessMask;
- VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR, // VkDependencyFlags dependencyFlags;
- };
+ const SubpassDep subpassDependency // VkSubpassDependency || VkSubpassDependency2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ subpassNdx, // deUint32 srcSubpass; || deUint32 srcSubpass;
+ (subpassNdx == subpassCount -1u) ? subpassNdx : subpassNdx+1u, // deUint32 dstSubpass; || deUint32 dstSubpass;
+ srcStageMask, // VkPipelineStageFlags srcStageMask; || VkPipelineStageFlags srcStageMask;
+ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, // VkPipelineStageFlags dstStageMask; || VkPipelineStageFlags dstStageMask;
+ srcAccessMask, // VkAccessFlags srcAccessMask; || VkAccessFlags srcAccessMask;
+ VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, // VkAccessFlags dstAccessMask; || VkAccessFlags dstAccessMask;
+ VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR, // VkDependencyFlags dependencyFlags; || VkDependencyFlags dependencyFlags;
+ 0 // || deInt32 viewOffset;
+ );
subpassDependencies.push_back(subpassDependency);
}
- const VkRenderPassCreateInfo renderPassInfo =
- {
- VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, // VkStructureType sType;
- &renderPassMultiviewInfo, // const void* pNext;
- (VkRenderPassCreateFlags)0, // VkRenderPassCreateFlags flags;
- dsAttacmentAvailable ? 2u : 1u, // deUint32 attachmentCount;
- attachmentDescriptions, // const VkAttachmentDescription* pAttachments;
- subpassCount, // deUint32 subpassCount;
- &subpassDescriptions[0], // const VkSubpassDescription* pSubpasses;
- subpassCount, // deUint32 dependencyCount;
- &subpassDependencies[0] // const VkSubpassDependency* pDependencies;
- };
-
- return createRenderPass(vk, device, &renderPassInfo);
+ const RenderPassCreateInfo renderPassInfo // VkRenderPassCreateInfo || VkRenderPassCreateInfo2KHR
+ (
+ // VkStructureType sType; || VkStructureType sType;
+ renderPassMultiviewInfoPtr, // const void* pNext; || const void* pNext;
+ (VkRenderPassCreateFlags)0, // VkRenderPassCreateFlags flags; || VkRenderPassCreateFlags flags;
+ dsAttacmentAvailable ? 2u : 1u, // deUint32 attachmentCount; || deUint32 attachmentCount;
+ attachmentDescriptions, // const VkAttachmentDescription* pAttachments; || const VkAttachmentDescription2KHR* pAttachments;
+ subpassCount, // deUint32 subpassCount; || deUint32 subpassCount;
+ &subpassDescriptions[0], // const VkSubpassDescription* pSubpasses; || const VkSubpassDescription2KHR* pSubpasses;
+ subpassCount, // deUint32 dependencyCount; || deUint32 dependencyCount;
+ &subpassDependencies[0], // const VkSubpassDependency* pDependencies; || const VkSubpassDependency2KHR* pDependencies;
+ 0u, // || deUint32 correlatedViewMaskCount;
+ DE_NULL // || const deUint32* pCorrelatedViewMasks;
+ );
+
+ return renderPassInfo.createRenderPass(vk, device);
}
-Move<VkRenderPass> makeRenderPassWithDepth (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks, const vk::VkFormat dsFormat)
+// Instantiate function for legacy renderpass structures
+template
+Move<VkRenderPass> makeRenderPass<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>
+ (const DeviceInterface& vk,
+ const VkDevice device,
+ const VkFormat colorFormat,
+ const vector<deUint32>& viewMasks,
+ const VkSampleCountFlagBits samples,
+ const VkAttachmentLoadOp colorLoadOp,
+ const VkFormat dsFormat);
+
+// Instantiate function for renderpass2 structures
+template
+Move<VkRenderPass> makeRenderPass<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>
+ (const DeviceInterface& vk,
+ const VkDevice device,
+ const VkFormat colorFormat,
+ const vector<deUint32>& viewMasks,
+ const VkSampleCountFlagBits samples,
+ const VkAttachmentLoadOp colorLoadOp,
+ const VkFormat dsFormat);
+
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
+Move<VkRenderPass> makeRenderPassWithDepth (const DeviceInterface& vk, const VkDevice device, const VkFormat colorFormat, const vector<deUint32>& viewMasks, const VkFormat dsFormat)
{
- return makeRenderPass(vk, device, colorFormat, viewMasks, VK_SAMPLE_COUNT_1_BIT, VK_ATTACHMENT_LOAD_OP_CLEAR, dsFormat);
+ return makeRenderPass<AttachmentDesc, AttachmentRef, SubpassDesc, SubpassDep, RenderPassCreateInfo>(vk, device, colorFormat, viewMasks, VK_SAMPLE_COUNT_1_BIT, VK_ATTACHMENT_LOAD_OP_CLEAR, dsFormat);
}
+// Instantiate function for legacy renderpass structures
+template
+Move<VkRenderPass> makeRenderPassWithDepth<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>
+ (const DeviceInterface& vk,
+ const VkDevice device,
+ const VkFormat colorFormat,
+ const vector<deUint32>& viewMasks,
+ const VkFormat dsFormat);
+
+// Instantiate function for renderpass2 structures
+template
+Move<VkRenderPass> makeRenderPassWithDepth<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>
+ (const DeviceInterface& vk,
+ const VkDevice device,
+ const VkFormat colorFormat,
+ const vector<deUint32>& viewMasks,
+ const VkFormat dsFormat);
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
Move<VkRenderPass> makeRenderPassWithAttachments (const DeviceInterface& vk,
const VkDevice device,
const VkFormat colorFormat,
{
const deUint32 subpassCount = static_cast<deUint32>(viewMasks.size());
- 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 VkAttachmentDescription inputAttachmentDescription =
- {
- (VkAttachmentDescriptionFlags)0, // VkAttachmentDescriptionFlags flags;
- colorFormat, // VkFormat format;
- VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples;
- VK_ATTACHMENT_LOAD_OP_LOAD, // 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_GENERAL, // VkImageLayout initialLayout;
- VK_IMAGE_LAYOUT_GENERAL // VkImageLayout finalLayout;
- };
-
- vector<VkAttachmentDescription> attachments;
+ const AttachmentDesc colorAttachmentDescription // VkAttachmentDescription || VkAttachmentDescription2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ (VkAttachmentDescriptionFlags)0, // VkAttachmentDescriptionFlags flags; || VkAttachmentDescriptionFlags flags;
+ colorFormat, // VkFormat format; || VkFormat format;
+ VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples; || VkSampleCountFlagBits samples;
+ VK_ATTACHMENT_LOAD_OP_CLEAR, // VkAttachmentLoadOp loadOp; || VkAttachmentLoadOp loadOp;
+ VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp; || VkAttachmentStoreOp storeOp;
+ VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp stencilLoadOp; || VkAttachmentLoadOp stencilLoadOp;
+ VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp stencilStoreOp; || VkAttachmentStoreOp stencilStoreOp;
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout initialLayout; || VkImageLayout initialLayout;
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL // VkImageLayout finalLayout; || VkImageLayout finalLayout;
+ );
+
+ const AttachmentDesc inputAttachmentDescription // VkAttachmentDescription || VkAttachmentDescription2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ (VkAttachmentDescriptionFlags)0, // VkAttachmentDescriptionFlags flags; || VkAttachmentDescriptionFlags flags;
+ colorFormat, // VkFormat format; || VkFormat format;
+ VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples; || VkSampleCountFlagBits samples;
+ VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp loadOp; || VkAttachmentLoadOp loadOp;
+ VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp; || VkAttachmentStoreOp storeOp;
+ VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp stencilLoadOp; || VkAttachmentLoadOp stencilLoadOp;
+ VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp stencilStoreOp; || VkAttachmentStoreOp stencilStoreOp;
+ VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout initialLayout; || VkImageLayout initialLayout;
+ VK_IMAGE_LAYOUT_GENERAL // VkImageLayout finalLayout; || VkImageLayout finalLayout;
+ );
+
+ vector<AttachmentDesc> attachments;
attachments.push_back(colorAttachmentDescription);
attachments.push_back(inputAttachmentDescription);
- const VkAttachmentReference colorAttachmentReference =
+ const AttachmentRef colorAttachmentReference // VkAttachmentReference || VkAttachmentReference2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ 0u, // deUint32 attachment; || deUint32 attachment;
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout layout; || VkImageLayout layout;
+ 0u // || VkImageAspectFlags aspectMask;
+ );
+
+ const AttachmentRef inputAttachmentReference // VkAttachmentReference || VkAttachmentReference2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ 1u, // deUint32 attachment; || deUint32 attachment;
+ VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout layout; || VkImageLayout layout;
+ 0u // || VkImageAspectFlags aspectMask;
+ );
+
+ const AttachmentRef depthAttachmentReference // VkAttachmentReference || VkAttachmentReference2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ VK_ATTACHMENT_UNUSED, // deUint32 attachment; || deUint32 attachment;
+ VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout layout; || VkImageLayout layout;
+ 0u // || VkImageAspectFlags aspectMask;
+ );
+
+ DE_ASSERT((typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo1)) || (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo2)));
+
+ vector <SubpassDesc> subpassDescriptions;
+ for (deUint32 subpassNdx = 0; subpassNdx < subpassCount; ++subpassNdx)
{
- 0u, // deUint32 attachment;
- VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL // VkImageLayout layout;
- };
-
- const VkAttachmentReference inputAttachmentReference =
- {
- 1u, // deUint32 attachment;
- VK_IMAGE_LAYOUT_GENERAL // 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;
- 1u, // deUint32 inputAttachmentCount;
- &inputAttachmentReference, // 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;
- };
- vector <VkSubpassDescription> subpassDescriptions (subpassCount, subpassDescription);
+ const deUint32 viewMask = (typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo2))
+ ? viewMasks[subpassNdx]
+ : 0u;
+ const SubpassDesc subpassDescription // VkSubpassDescription || VkSubpassDescription2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ (VkSubpassDescriptionFlags)0, // VkSubpassDescriptionFlags flags; || VkSubpassDescriptionFlags flags;
+ VK_PIPELINE_BIND_POINT_GRAPHICS, // VkPipelineBindPoint pipelineBindPoint; || VkPipelineBindPoint pipelineBindPoint;
+ viewMask, // || deUint32 viewMask;
+ 1u, // deUint32 inputAttachmentCount; || deUint32 inputAttachmentCount;
+ &inputAttachmentReference, // const VkAttachmentReference* pInputAttachments; || const VkAttachmentReference2KHR* pInputAttachments;
+ 1u, // deUint32 colorAttachmentCount; || deUint32 colorAttachmentCount;
+ &colorAttachmentReference, // const VkAttachmentReference* pColorAttachments; || const VkAttachmentReference2KHR* pColorAttachments;
+ DE_NULL, // const VkAttachmentReference* pResolveAttachments; || const VkAttachmentReference2KHR* pResolveAttachments;
+ &depthAttachmentReference, // const VkAttachmentReference* pDepthStencilAttachment; || const VkAttachmentReference2KHR* pDepthStencilAttachment;
+ 0u, // deUint32 preserveAttachmentCount; || deUint32 preserveAttachmentCount;
+ DE_NULL // const deUint32* pPreserveAttachments; || const deUint32* pPreserveAttachments;
+ );
+ subpassDescriptions.push_back(subpassDescription);
+ }
- const VkRenderPassMultiviewCreateInfo renderPassMultiviewInfo =
+ const VkRenderPassMultiviewCreateInfo renderPassMultiviewInfo =
{
VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR, //VkStructureType sType;
DE_NULL, //const void* pNext;
0u, //uint32_t correlationMaskCount;
DE_NULL, //const uint32_t* pCorrelationMasks;
};
+ const VkRenderPassMultiviewCreateInfo* renderPassMultiviewInfoPtr = typeid(RenderPassCreateInfo) == typeid(RenderPassCreateInfo1)
+ ? &renderPassMultiviewInfo
+ : DE_NULL;
- vector <VkSubpassDependency> subpassDependencies;
+ vector <SubpassDep> subpassDependencies;
for(deUint32 subpassNdx = 0u; subpassNdx < subpassCount; ++subpassNdx)
{
- const VkSubpassDependency subpassDependency =
- {
- subpassNdx, // deUint32 srcSubpass;
- (subpassNdx ==subpassCount - 1u) ? subpassNdx : subpassNdx+1u, // deUint32 dstSubpass;
- VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, // VkPipelineStageFlags srcStageMask;
- VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, // VkPipelineStageFlags dstStageMask;
- VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags srcAccessMask;
- VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, // VkAccessFlags dstAccessMask;
- VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR, // VkDependencyFlags dependencyFlags;
- };
+ const SubpassDep subpassDependency // VkSubpassDependency || VkSubpassDependency2KHR
+ (
+ // || VkStructureType sType;
+ DE_NULL, // || const void* pNext;
+ subpassNdx, // deUint32 srcSubpass; || deUint32 srcSubpass;
+ (subpassNdx == subpassCount -1u) ? subpassNdx : subpassNdx+1u, // deUint32 dstSubpass; || deUint32 dstSubpass;
+ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, // VkPipelineStageFlags srcStageMask; || VkPipelineStageFlags srcStageMask;
+ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, // VkPipelineStageFlags dstStageMask; || VkPipelineStageFlags dstStageMask;
+ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags srcAccessMask; || VkAccessFlags srcAccessMask;
+ VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, // VkAccessFlags dstAccessMask; || VkAccessFlags dstAccessMask;
+ VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR, // VkDependencyFlags dependencyFlags; || VkDependencyFlags dependencyFlags;
+ 0 // || deInt32 viewOffset;
+ );
subpassDependencies.push_back(subpassDependency);
}
- const VkRenderPassCreateInfo renderPassInfo =
- {
- VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, // VkStructureType sType;
- &renderPassMultiviewInfo, // const void* pNext;
- (VkRenderPassCreateFlags)0, // VkRenderPassCreateFlags flags;
- 2u, // deUint32 attachmentCount;
- &attachments[0], // const VkAttachmentDescription* pAttachments;
- subpassCount, // deUint32 subpassCount;
- &subpassDescriptions[0], // const VkSubpassDescription* pSubpasses;
- subpassCount, // deUint32 dependencyCount;
- &subpassDependencies[0] // const VkSubpassDependency* pDependencies;
- };
-
- return createRenderPass(vk, device, &renderPassInfo);
+ const RenderPassCreateInfo renderPassInfo // VkRenderPassCreateInfo || VkRenderPassCreateInfo2KHR
+ (
+ // VkStructureType sType; || VkStructureType sType;
+ renderPassMultiviewInfoPtr, // const void* pNext; || const void* pNext;
+ (VkRenderPassCreateFlags)0, // VkRenderPassCreateFlags flags; || VkRenderPassCreateFlags flags;
+ 2u, // deUint32 attachmentCount; || deUint32 attachmentCount;
+ &attachments[0], // const VkAttachmentDescription* pAttachments; || const VkAttachmentDescription2KHR* pAttachments;
+ subpassCount, // deUint32 subpassCount; || deUint32 subpassCount;
+ &subpassDescriptions[0], // const VkSubpassDescription* pSubpasses; || const VkSubpassDescription2KHR* pSubpasses;
+ subpassCount, // deUint32 dependencyCount; || deUint32 dependencyCount;
+ &subpassDependencies[0], // const VkSubpassDependency* pDependencies; || const VkSubpassDependency2KHR* pDependencies;
+ 0u, // || deUint32 correlatedViewMaskCount;
+ DE_NULL // || const deUint32* pCorrelatedViewMasks;
+ );
+
+ return renderPassInfo.createRenderPass(vk, device);
}
+// Instantiate function for legacy renderpass structures
+template
+Move<VkRenderPass> makeRenderPassWithAttachments<AttachmentDescription1, AttachmentReference1, SubpassDescription1, SubpassDependency1, RenderPassCreateInfo1>
+ (const DeviceInterface& vk,
+ const VkDevice device,
+ const VkFormat colorFormat,
+ const vector<deUint32>& viewMasks);
+
+// Instantiate function for renderpass2 structures
+template
+Move<VkRenderPass> makeRenderPassWithAttachments<AttachmentDescription2, AttachmentReference2, SubpassDescription2, SubpassDependency2, RenderPassCreateInfo2>
+ (const DeviceInterface& vk,
+ const VkDevice device,
+ const VkFormat colorFormat,
+ const vector<deUint32>& viewMasks);
+
void beginSecondaryCommandBuffer (const DeviceInterface& vk,
const VkCommandBuffer commandBuffer,
const VkRenderPass renderPass,
vk::Move<vk::VkFramebuffer> makeFramebuffer (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkRenderPass renderPass, const std::vector<vk::VkImageView>& attachments, const deUint32 width, const deUint32 height, const deUint32 layers);
vk::Move<vk::VkPipelineLayout> makePipelineLayout (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkDescriptorSetLayout* pSetLayouts = DE_NULL);
vk::Move<vk::VkDescriptorSetLayout> makeDescriptorSetLayout (const vk::DeviceInterface& vk, const vk::VkDevice device);
-vk::Move<vk::VkRenderPass> makeRenderPass (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks, const vk::VkSampleCountFlagBits samples = vk::VK_SAMPLE_COUNT_1_BIT, const vk::VkAttachmentLoadOp colorLoadOp = vk::VK_ATTACHMENT_LOAD_OP_CLEAR, const vk::VkFormat dsFormat = vk::VK_FORMAT_UNDEFINED);
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
+vk::Move<vk::VkRenderPass> makeRenderPass (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks, const vk::VkSampleCountFlagBits samples, const vk::VkAttachmentLoadOp colorLoadOp, const vk::VkFormat dsFormat);
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
vk::Move<vk::VkRenderPass> makeRenderPassWithAttachments (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks);
+
+template<typename AttachmentDesc, typename AttachmentRef, typename SubpassDesc, typename SubpassDep, typename RenderPassCreateInfo>
vk::Move<vk::VkRenderPass> makeRenderPassWithDepth (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector<deUint32>& viewMasks, const vk::VkFormat dsFormat);
+
void beginSecondaryCommandBuffer (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer, const vk::VkRenderPass renderPass, const deUint32 subpass, const vk::VkFramebuffer framebuffer);
void imageBarrier (const vk::DeviceInterface& vk, const vk::VkCommandBuffer cmdBuffer, const vk::VkImage image, const vk::VkImageSubresourceRange subresourceRange, const vk::VkImageLayout oldLayout, const vk::VkImageLayout newLayout, const vk::VkAccessFlags srcAccessMask, const vk::VkAccessFlags dstAccessMask, const vk::VkPipelineStageFlags srcStageMask = vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, const vk::VkPipelineStageFlags dstStageMask = vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
dEQP-VK.multiview.index.tesellation_shader.5_10_5_10
dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.masks.15
+dEQP-VK.multiview.renderpass2.masks.8
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8
+dEQP-VK.multiview.renderpass2.masks.15_15_15_15
+dEQP-VK.multiview.renderpass2.masks.8_1_1_8
+dEQP-VK.multiview.renderpass2.masks.5_10_5_10
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.masks.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments.15
+dEQP-VK.multiview.renderpass2.input_attachments.8
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.instanced.15
+dEQP-VK.multiview.renderpass2.instanced.8
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8
+dEQP-VK.multiview.renderpass2.instanced.15_15_15_15
+dEQP-VK.multiview.renderpass2.instanced.8_1_1_8
+dEQP-VK.multiview.renderpass2.instanced.5_10_5_10
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.instanced.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_instance.15
+dEQP-VK.multiview.renderpass2.input_instance.8
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_instance.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_instance.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_instance.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_instance.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect.15
+dEQP-VK.multiview.renderpass2.draw_indirect.8
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.clear_attachments.15
+dEQP-VK.multiview.renderpass2.clear_attachments.8
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.clear_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.clear_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.clear_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.clear_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.point_size.15
+dEQP-VK.multiview.renderpass2.point_size.8
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8
+dEQP-VK.multiview.renderpass2.point_size.15_15_15_15
+dEQP-VK.multiview.renderpass2.point_size.8_1_1_8
+dEQP-VK.multiview.renderpass2.point_size.5_10_5_10
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.point_size.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.multisample.15
+dEQP-VK.multiview.renderpass2.multisample.8
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8
+dEQP-VK.multiview.renderpass2.multisample.15_15_15_15
+dEQP-VK.multiview.renderpass2.multisample.8_1_1_8
+dEQP-VK.multiview.renderpass2.multisample.5_10_5_10
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.multisample.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.queries.15
+dEQP-VK.multiview.renderpass2.queries.8
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8
+dEQP-VK.multiview.renderpass2.queries.15_15_15_15
+dEQP-VK.multiview.renderpass2.queries.8_1_1_8
+dEQP-VK.multiview.renderpass2.queries.5_10_5_10
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.queries.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.depth.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.stencil.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.vertex_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.fragment_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.geometry_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.max_multi_view_view_count
dEQP-VK.subgroups.builtin_var.subgroupsize_graphic
dEQP-VK.subgroups.builtin_var.subgroupsize_compute
dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer
dEQP-VK.multiview.index.tesellation_shader.5_10_5_10
dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.masks.15
+dEQP-VK.multiview.renderpass2.masks.8
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8
+dEQP-VK.multiview.renderpass2.masks.15_15_15_15
+dEQP-VK.multiview.renderpass2.masks.8_1_1_8
+dEQP-VK.multiview.renderpass2.masks.5_10_5_10
+dEQP-VK.multiview.renderpass2.masks.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.masks.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments.15
+dEQP-VK.multiview.renderpass2.input_attachments.8
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_attachments_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.instanced.15
+dEQP-VK.multiview.renderpass2.instanced.8
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8
+dEQP-VK.multiview.renderpass2.instanced.15_15_15_15
+dEQP-VK.multiview.renderpass2.instanced.8_1_1_8
+dEQP-VK.multiview.renderpass2.instanced.5_10_5_10
+dEQP-VK.multiview.renderpass2.instanced.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.instanced.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.input_instance.15
+dEQP-VK.multiview.renderpass2.input_instance.8
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8
+dEQP-VK.multiview.renderpass2.input_instance.15_15_15_15
+dEQP-VK.multiview.renderpass2.input_instance.8_1_1_8
+dEQP-VK.multiview.renderpass2.input_instance.5_10_5_10
+dEQP-VK.multiview.renderpass2.input_instance.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.input_instance.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect.15
+dEQP-VK.multiview.renderpass2.draw_indirect.8
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indirect_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.draw_indexed.15
+dEQP-VK.multiview.renderpass2.draw_indexed.8
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8
+dEQP-VK.multiview.renderpass2.draw_indexed.15_15_15_15
+dEQP-VK.multiview.renderpass2.draw_indexed.8_1_1_8
+dEQP-VK.multiview.renderpass2.draw_indexed.5_10_5_10
+dEQP-VK.multiview.renderpass2.draw_indexed.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.draw_indexed.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.clear_attachments.15
+dEQP-VK.multiview.renderpass2.clear_attachments.8
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8
+dEQP-VK.multiview.renderpass2.clear_attachments.15_15_15_15
+dEQP-VK.multiview.renderpass2.clear_attachments.8_1_1_8
+dEQP-VK.multiview.renderpass2.clear_attachments.5_10_5_10
+dEQP-VK.multiview.renderpass2.clear_attachments.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.clear_attachments.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.15_15_15_15
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.8_1_1_8
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.5_10_5_10
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.secondary_cmd_buffer_geometry.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.point_size.15
+dEQP-VK.multiview.renderpass2.point_size.8
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8
+dEQP-VK.multiview.renderpass2.point_size.15_15_15_15
+dEQP-VK.multiview.renderpass2.point_size.8_1_1_8
+dEQP-VK.multiview.renderpass2.point_size.5_10_5_10
+dEQP-VK.multiview.renderpass2.point_size.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.point_size.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.multisample.15
+dEQP-VK.multiview.renderpass2.multisample.8
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8
+dEQP-VK.multiview.renderpass2.multisample.15_15_15_15
+dEQP-VK.multiview.renderpass2.multisample.8_1_1_8
+dEQP-VK.multiview.renderpass2.multisample.5_10_5_10
+dEQP-VK.multiview.renderpass2.multisample.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.multisample.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.queries.15
+dEQP-VK.multiview.renderpass2.queries.8
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8
+dEQP-VK.multiview.renderpass2.queries.15_15_15_15
+dEQP-VK.multiview.renderpass2.queries.8_1_1_8
+dEQP-VK.multiview.renderpass2.queries.5_10_5_10
+dEQP-VK.multiview.renderpass2.queries.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.queries.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_implicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.15_15_15_15
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.8_1_1_8
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.5_10_5_10
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.readback_explicit_clear.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.depth.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.stencil.3_6_12_9_6_12_9_3_6_12_9_3
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.vertex_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.vertex_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.vertex_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.fragment_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.fragment_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.fragment_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.geometry_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.geometry_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.geometry_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.tesellation_shader.max_multi_view_view_count
dEQP-VK.subgroups.builtin_var.subgroupsize_graphic
dEQP-VK.subgroups.builtin_var.subgroupsize_compute
dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer