attachments.push_back(*dsImageView);
}
- const vk::VkAttachmentReference2 colorAttachmentReference =
+ if (!m_data.useDynamicRendering)
{
- VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, // sType
- DE_NULL, // pNext
- 0, // attachment
- vk::VK_IMAGE_LAYOUT_GENERAL, // layout
- 0, // aspectMask
- };
-
- const vk::VkAttachmentReference2 fragmentShadingRateAttachment =
- {
- VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, // sType
- DE_NULL, // pNext
- srAttachmentIdx, // attachment
- srLayout, // layout
- 0, // aspectMask
- };
-
- const vk::VkAttachmentReference2 depthAttachmentReference =
- {
- VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, // sType
- DE_NULL, // pNext
- dsAttachmentIdx, // attachment
- vk::VK_IMAGE_LAYOUT_GENERAL, // layout
- 0, // aspectMask
- };
-
- const bool noAttachmentPtr = (m_data.attachmentUsage == AttachmentUsage::NO_ATTACHMENT_PTR);
- const VkFragmentShadingRateAttachmentInfoKHR shadingRateAttachmentInfo =
- {
- VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR, // VkStructureType sType;
- DE_NULL, // const void* pNext;
- (noAttachmentPtr ? nullptr : &fragmentShadingRateAttachment), // const VkAttachmentReference2* pFragmentShadingRateAttachment;
- { srTexelWidth, srTexelHeight }, // VkExtent2D shadingRateAttachmentTexelSize;
- };
+ const vk::VkAttachmentReference2 colorAttachmentReference
+ {
+ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, // sType
+ DE_NULL, // pNext
+ 0, // attachment
+ vk::VK_IMAGE_LAYOUT_GENERAL, // layout
+ 0, // aspectMask
+ };
- const bool useAttachmentInfo = (m_data.attachmentUsage != AttachmentUsage::NO_ATTACHMENT);
- const VkSubpassDescription2 subpassDesc =
- {
- VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, // sType
- (useAttachmentInfo ? &shadingRateAttachmentInfo : nullptr), // pNext;
- (vk::VkSubpassDescriptionFlags)0, // flags
- vk::VK_PIPELINE_BIND_POINT_GRAPHICS, // pipelineBindPoint
- m_data.multiView ? 0x3 : 0u, // viewMask
- 0u, // inputCount
- DE_NULL, // pInputAttachments
- 1, // colorCount
- &colorAttachmentReference, // pColorAttachments
- DE_NULL, // pResolveAttachments
- m_data.useDepthStencil ? &depthAttachmentReference : DE_NULL, // depthStencilAttachment
- 0u, // preserveCount
- DE_NULL, // pPreserveAttachments
- };
+ const vk::VkAttachmentReference2 fragmentShadingRateAttachment =
+ {
+ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, // sType
+ DE_NULL, // pNext
+ srAttachmentIdx, // attachment
+ srLayout, // layout
+ 0, // aspectMask
+ };
- std::vector<VkAttachmentDescription2> attachmentDescriptions;
- attachmentDescriptions.push_back(
+ const vk::VkAttachmentReference2 depthAttachmentReference =
{
- VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, // VkStructureType sType;
- DE_NULL, // const void* pNext;
- (VkAttachmentDescriptionFlags)0u, // VkAttachmentDescriptionFlags flags;
- cbFormat, // VkFormat format;
- m_data.samples, // 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;
- }
- );
- if (m_data.useAttachment())
- attachmentDescriptions.push_back(
+ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, // sType
+ DE_NULL, // pNext
+ dsAttachmentIdx, // attachment
+ vk::VK_IMAGE_LAYOUT_GENERAL, // layout
+ 0, // aspectMask
+ };
+
+ const bool noAttachmentPtr = (m_data.attachmentUsage == AttachmentUsage::NO_ATTACHMENT_PTR);
+ const VkFragmentShadingRateAttachmentInfoKHR shadingRateAttachmentInfo =
{
- VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, // VkStructureType sType;
- DE_NULL, // const void* pNext;
- (VkAttachmentDescriptionFlags)0u, // VkAttachmentDescriptionFlags flags;
- srFormat, // 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;
- srLayout, // VkImageLayout initialLayout;
- srLayout // VkImageLayout finalLayout;
- }
- );
+ VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ (noAttachmentPtr ? nullptr : &fragmentShadingRateAttachment), // const VkAttachmentReference2* pFragmentShadingRateAttachment;
+ { srTexelWidth, srTexelHeight }, // VkExtent2D shadingRateAttachmentTexelSize;
+ };
- if (m_data.useDepthStencil)
- attachmentDescriptions.push_back(
+ const bool useAttachmentInfo = (m_data.attachmentUsage != AttachmentUsage::NO_ATTACHMENT);
+ const VkSubpassDescription2 subpassDesc =
{
- VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, // VkStructureType sType;
- DE_NULL, // const void* pNext;
- (VkAttachmentDescriptionFlags)0u, // VkAttachmentDescriptionFlags flags;
- dsFormat, // VkFormat format;
- m_data.samples, // VkSampleCountFlagBits samples;
- VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp loadOp;
- VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp;
- VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp stencilLoadOp;
- VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp stencilStoreOp;
- VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout initialLayout;
- VK_IMAGE_LAYOUT_GENERAL // VkImageLayout finalLayout;
- }
- );
+ VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, // sType
+ (useAttachmentInfo ? &shadingRateAttachmentInfo : nullptr), // pNext;
+ (vk::VkSubpassDescriptionFlags)0, // flags
+ vk::VK_PIPELINE_BIND_POINT_GRAPHICS, // pipelineBindPoint
+ m_data.multiView ? 0x3 : 0u, // viewMask
+ 0u, // inputCount
+ DE_NULL, // pInputAttachments
+ 1, // colorCount
+ &colorAttachmentReference, // pColorAttachments
+ DE_NULL, // pResolveAttachments
+ m_data.useDepthStencil ? &depthAttachmentReference : DE_NULL, // depthStencilAttachment
+ 0u, // preserveCount
+ DE_NULL, // pPreserveAttachments
+ };
- const VkRenderPassCreateInfo2 renderPassParams =
- {
- VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, // sType
- DE_NULL, // pNext
- (vk::VkRenderPassCreateFlags)0,
- (deUint32)attachmentDescriptions.size(), // attachmentCount
- &attachmentDescriptions[0], // pAttachments
- 1u, // subpassCount
- &subpassDesc, // pSubpasses
- 0u, // dependencyCount
- DE_NULL, // pDependencies
- 0u, // correlatedViewMaskCount
- DE_NULL, // pCorrelatedViewMasks
- };
+ std::vector<VkAttachmentDescription2> attachmentDescriptions
+ {
+ {
+ VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ (VkAttachmentDescriptionFlags)0u, // VkAttachmentDescriptionFlags flags;
- VK_FORMAT_R32G32B32A32_UINT, // VkFormat format;
++ cbFormat, // VkFormat format;
+ m_data.samples, // 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;
+ }
+ };
+ if (m_data.useAttachment())
+ attachmentDescriptions.push_back(
+ {
+ VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ (VkAttachmentDescriptionFlags)0u, // VkAttachmentDescriptionFlags flags;
+ srFormat, // 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;
+ srLayout, // VkImageLayout initialLayout;
+ srLayout // VkImageLayout finalLayout;
+ }
+ );
- renderPass = createRenderPass2(vk, device, &renderPassParams);
+ if (m_data.useDepthStencil)
+ attachmentDescriptions.push_back(
+ {
+ VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ (VkAttachmentDescriptionFlags)0u, // VkAttachmentDescriptionFlags flags;
- VK_FORMAT_D32_SFLOAT_S8_UINT, // VkFormat format;
++ dsFormat, // VkFormat format;
+ m_data.samples, // VkSampleCountFlagBits samples;
+ VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp loadOp;
+ VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp;
+ VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp stencilLoadOp;
+ VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp stencilStoreOp;
+ VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout initialLayout;
+ VK_IMAGE_LAYOUT_GENERAL // VkImageLayout finalLayout;
+ }
+ );
- std::vector<VkFramebufferAttachmentImageInfo> framebufferAttachmentImageInfo;
- framebufferAttachmentImageInfo.push_back(
- {
- VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, // VkStructureType sType;
- DE_NULL, // const void* pNext;
- (VkImageCreateFlags)0u, // VkImageCreateFlags flags;
- cbUsage, // VkImageUsageFlags usage;
- m_data.framebufferDim.width, // deUint32 width;
- m_data.framebufferDim.height, // deUint32 height;
- m_data.numColorLayers, // deUint32 layerCount;
- 1u, // deUint32 viewFormatCount;
- &cbFormat, // const VkFormat* pViewFormats;
- }
- );
- if (m_data.useAttachment())
- framebufferAttachmentImageInfo.push_back(
+ const VkRenderPassCreateInfo2 renderPassParams =
{
- VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, // VkStructureType sType;
- DE_NULL, // const void* pNext;
- (VkImageCreateFlags)0u, // VkImageCreateFlags flags;
- srUsage, // VkImageUsageFlags usage;
- srWidth, // deUint32 width;
- srHeight, // deUint32 height;
- numSRLayers, // deUint32 layerCount;
- 1u, // deUint32 viewFormatCount;
- &srFormat, // const VkFormat* pViewFormats;
- }
- );
+ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, // sType
+ DE_NULL, // pNext
+ (vk::VkRenderPassCreateFlags)0,
+ (deUint32)attachmentDescriptions.size(), // attachmentCount
+ &attachmentDescriptions[0], // pAttachments
+ 1u, // subpassCount
+ &subpassDesc, // pSubpasses
+ 0u, // dependencyCount
+ DE_NULL, // pDependencies
+ 0u, // correlatedViewMaskCount
+ DE_NULL, // pCorrelatedViewMasks
+ };
- if (m_data.useDepthStencil)
+ renderPass = createRenderPass2(vk, device, &renderPassParams);
+
+ std::vector<VkFramebufferAttachmentImageInfo> framebufferAttachmentImageInfo;
framebufferAttachmentImageInfo.push_back(
- {
- VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, // VkStructureType sType;
- DE_NULL, // const void* pNext;
- (VkImageCreateFlags)0u, // VkImageCreateFlags flags;
- dsUsage, // VkImageUsageFlags usage;
- m_data.framebufferDim.width, // deUint32 width;
- m_data.framebufferDim.height, // deUint32 height;
- m_data.numColorLayers, // deUint32 layerCount;
- 1u, // deUint32 viewFormatCount;
- &dsFormat, // const VkFormat* pViewFormats;
- }
+ {
+ VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ (VkImageCreateFlags)0u, // VkImageCreateFlags flags;
+ cbUsage, // VkImageUsageFlags usage;
+ m_data.framebufferDim.width, // deUint32 width;
+ m_data.framebufferDim.height, // deUint32 height;
+ m_data.numColorLayers, // deUint32 layerCount;
+ 0u, // deUint32 viewFormatCount;
+ DE_NULL // const VkFormat* pViewFormats;
+ }
);
+ if (m_data.useAttachment())
+ framebufferAttachmentImageInfo.push_back(
+ {
+ VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ (VkImageCreateFlags)0u, // VkImageCreateFlags flags;
+ srUsage, // VkImageUsageFlags usage;
+ srWidth, // deUint32 width;
+ srHeight, // deUint32 height;
+ numSRLayers, // deUint32 layerCount;
+ 0u, // deUint32 viewFormatCount;
+ DE_NULL // const VkFormat* pViewFormats;
+ }
+ );
- const VkFramebufferAttachmentsCreateInfo framebufferAttachmentsCreateInfo =
- {
- VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO, // VkStructureType sType;
- DE_NULL, // const void* pNext;
- (deUint32)framebufferAttachmentImageInfo.size(), // deUint32 attachmentImageInfoCount;
- &framebufferAttachmentImageInfo[0] // const VkFramebufferAttachmentImageInfo* pAttachmentImageInfos;
- };
+ if (m_data.useDepthStencil)
+ framebufferAttachmentImageInfo.push_back(
+ {
+ VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ (VkImageCreateFlags)0u, // VkImageCreateFlags flags;
+ dsUsage, // VkImageUsageFlags usage;
+ m_data.framebufferDim.width, // deUint32 width;
+ m_data.framebufferDim.height, // deUint32 height;
+ m_data.numColorLayers, // deUint32 layerCount;
+ 0u, // deUint32 viewFormatCount;
+ DE_NULL // const VkFormat* pViewFormats;
+ }
+ );
- const vk::VkFramebufferCreateInfo framebufferParams =
- {
- vk::VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, // sType
- imagelessFB ? &framebufferAttachmentsCreateInfo : DE_NULL, // pNext
- (vk::VkFramebufferCreateFlags)(imagelessFB ? VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT : 0),
- *renderPass, // renderPass
- (deUint32)attachments.size(), // attachmentCount
- imagelessFB ? DE_NULL : &attachments[0], // pAttachments
- m_data.framebufferDim.width, // width
- m_data.framebufferDim.height, // height
- m_data.multiView ? 1 : m_data.numColorLayers, // layers
- };
+ const VkFramebufferAttachmentsCreateInfo framebufferAttachmentsCreateInfo =
+ {
+ VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ (deUint32)framebufferAttachmentImageInfo.size(), // deUint32 attachmentImageInfoCount;
+ &framebufferAttachmentImageInfo[0] // const VkFramebufferAttachmentImageInfo* pAttachmentImageInfos;
+ };
+
+ const vk::VkFramebufferCreateInfo framebufferParams =
+ {
+ vk::VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, // sType
+ imagelessFB ? &framebufferAttachmentsCreateInfo : DE_NULL, // pNext
+ (vk::VkFramebufferCreateFlags)(imagelessFB ? VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT : 0),
+ *renderPass, // renderPass
+ (deUint32)attachments.size(), // attachmentCount
+ imagelessFB ? DE_NULL : &attachments[0], // pAttachments
+ m_data.framebufferDim.width, // width
+ m_data.framebufferDim.height, // height
+ m_data.multiView ? 1 : m_data.numColorLayers, // layers
+ };
- framebuffer = createFramebuffer(vk, device, &framebufferParams);
+ framebuffer = createFramebuffer(vk, device, &framebufferParams);
+ }
const VkVertexInputBindingDescription vertexBinding =
{
typedef de::SharedPtr<Unique<VkPipeline> > PipelineSp;
typedef de::SharedPtr<Unique<VkShaderModule> > ShaderModuleSP;
- virtual tcu::TestStatus iterate (void);
- virtual void beforeRenderPass (void);
- virtual void afterRenderPass (void);
- virtual void bindResources (void) {}
- virtual void draw (const deUint32 subpassCount,
- VkRenderPass renderPass,
- VkFramebuffer frameBuffer,
- vector<PipelineSp>& pipelines);
- virtual void createVertexData (void);
- TestParameters fillMissingParameters (const TestParameters& parameters);
- void createVertexBuffer (void);
- void createMultiViewDevices (void);
- void createCommandBuffer (void);
- void madeShaderModule (map<VkShaderStageFlagBits,ShaderModuleSP>& shaderModule, vector<VkPipelineShaderStageCreateInfo>& shaderStageParams);
- Move<VkPipeline> makeGraphicsPipeline (const VkRenderPass renderPass,
- const VkPipelineLayout pipelineLayout,
- const deUint32 pipelineShaderStageCount,
- const VkPipelineShaderStageCreateInfo* pipelineShaderStageCreate,
- const deUint32 subpass,
- const VkVertexInputRate vertexInputRate = VK_VERTEX_INPUT_RATE_VERTEX,
- const bool useDepthTest = false,
- const bool useStencilTest = false);
- void readImage (VkImage image, const tcu::PixelBufferAccess& dst);
- bool checkImage (tcu::ConstPixelBufferAccess& dst);
- MovePtr<tcu::Texture2DArray> imageData (void);
- const tcu::Vec4 getQuarterRefColor (const deUint32 quarterNdx, const int colorNdx, const int layerNdx, const bool background = true, const deUint32 subpassNdx = 0u);
- void appendVertex (const tcu::Vec4& coord, const tcu::Vec4& color);
- void setPoint (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& pointColor, const int pointSize, const int layerNdx, const deUint32 quarter);
- void fillTriangle (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx, const deUint32 quarter);
- 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;
+ virtual tcu::TestStatus iterate (void);
- virtual void beforeDraw (void);
- virtual void afterDraw (void);
++ virtual void beforeRenderPass (void);
++ virtual void afterRenderPass (void);
++ virtual void bindResources (void) {}
+ virtual void draw (const deUint32 subpassCount,
+ VkRenderPass renderPass,
+ VkFramebuffer frameBuffer,
+ vector<PipelineSp>& pipelines);
+ virtual void createVertexData (void);
+ virtual MovePtr<tcu::Texture2DArray> imageData (void) const;
+ TestParameters fillMissingParameters (const TestParameters& parameters);
+ void createVertexBuffer (void);
+ void createMultiViewDevices (void);
+ void createCommandBuffer (void);
+ void madeShaderModule (map<VkShaderStageFlagBits,ShaderModuleSP>& shaderModule, vector<VkPipelineShaderStageCreateInfo>& shaderStageParams);
+ Move<VkPipeline> makeGraphicsPipeline (const VkRenderPass renderPass,
+ const VkPipelineLayout pipelineLayout,
+ const deUint32 pipelineShaderStageCount,
+ const VkPipelineShaderStageCreateInfo* pipelineShaderStageCreate,
+ const deUint32 subpass,
+ const VkVertexInputRate vertexInputRate = VK_VERTEX_INPUT_RATE_VERTEX,
+ const bool useDepthTest = false,
+ const bool useStencilTest = false,
+ const float minDepth = 0.0f,
+ const float maxDepth = 1.0f,
+ const VkFormat dsFormat = VK_FORMAT_UNDEFINED);
+ void readImage (VkImage image, const tcu::PixelBufferAccess& dst);
+ bool checkImage (tcu::ConstPixelBufferAccess& dst);
+ const tcu::Vec4 getQuarterRefColor (const deUint32 quarterNdx, const int colorNdx, const int layerNdx, const bool background = true, const deUint32 subpassNdx = 0u) const;
+ void appendVertex (const tcu::Vec4& coord, const tcu::Vec4& color);
+ void setPoint (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& pointColor, const int pointSize, const int layerNdx, const deUint32 quarter) const;
+ void fillTriangle (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx, const deUint32 quarter) const;
+ void fillLayer (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx) const;
+ void fillQuarter (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx, const deUint32 quarter, const deUint32 subpassNdx) const;
+
const TestParameters m_parameters;
+ const bool m_useDynamicRendering;
const int m_seed;
const deUint32 m_squareCount;
Move<VkDevice> m_logicalDevice;
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();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
- if (m_parameters.viewIndex == TEST_TYPE_DRAW_INDEXED)
- m_device->cmdBindIndexBuffer(*m_cmdBuffer, *m_vertexIndicesBuffer, 0u, VK_INDEX_TYPE_UINT32);
-
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
+ m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
+
+ if (m_parameters.viewIndex == TEST_TYPE_DRAW_INDEXED)
+ m_device->cmdBindIndexBuffer(*m_cmdBuffer, *m_vertexIndicesBuffer, 0u, VK_INDEX_TYPE_UINT32);
+
+ bindResources();
+
+ if (m_useDynamicRendering)
+ {
+ beginRendering(
+ *m_device,
+ *m_cmdBuffer,
+ m_colorAttachment->getImageView(),
+ renderArea,
+ renderPassClearValue,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
+ 0u,
+ m_parameters.extent.depth,
+ m_parameters.viewMasks[subpassNdx]);
+ }
+
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
else
m_device->cmdDraw(*m_cmdBuffer, 4u, 1u, (drawNdx + subpassNdx % m_squareCount) * 4u, 0u);
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
beginCommandBuffer(*m_device, *m_cmdBuffer);
- beforeDraw();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
+ m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
+
+ if (m_useDynamicRendering)
+ {
+ beginRendering(
+ *m_device,
+ *m_cmdBuffer,
+ m_colorAttachment->getImageView(),
+ renderArea,
+ renderPassClearValue,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
+ 0u,
+ m_parameters.extent.depth,
+ m_parameters.viewMasks[subpassNdx]);
+ }
+
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
m_device->cmdDraw(*m_cmdBuffer, 4u, drawCountPerSubpass, 0u, subpassNdx % m_squareCount);
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
beginCommandBuffer(*m_device, *m_cmdBuffer);
- beforeDraw();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
+ m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
+
+ if (m_useDynamicRendering)
+ {
+ beginRendering(
+ *m_device,
+ *m_cmdBuffer,
+ m_colorAttachment->getImageView(),
+ renderArea,
+ renderPassClearValue,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
+ 0u,
+ m_parameters.extent.depth,
+ m_parameters.viewMasks[subpassNdx]);
+ }
+
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
m_device->cmdDraw(*m_cmdBuffer, 4u, 4u, 0u, 0u);
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
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();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
- if (m_parameters.viewIndex == TEST_TYPE_DRAW_INDIRECT_INDEXED)
- m_device->cmdBindIndexBuffer(*m_cmdBuffer, *m_vertexIndicesBuffer, 0u, VK_INDEX_TYPE_UINT32);
-
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
+ m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
+
+ if (m_parameters.viewIndex == TEST_TYPE_DRAW_INDIRECT_INDEXED)
+ m_device->cmdBindIndexBuffer(*m_cmdBuffer, *m_vertexIndicesBuffer, 0u, VK_INDEX_TYPE_UINT32);
+
+ if (m_useDynamicRendering)
+ {
+ beginRendering(
+ *m_device,
+ *m_cmdBuffer,
+ m_colorAttachment->getImageView(),
+ renderArea,
+ renderPassClearValue,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
+ 0u,
+ m_parameters.extent.depth,
+ m_parameters.viewMasks[subpassNdx]);
+ }
+
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
if (m_hasMultiDrawIndirect)
}
}
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
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();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
VkClearAttachment clearAttachment =
1u, // deUint32 layerCount
};
+ if (m_useDynamicRendering)
+ {
+ beginRendering(
+ *m_device,
+ *m_cmdBuffer,
+ m_colorAttachment->getImageView(),
+ renderArea,
+ renderPassClearValue,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
+ 0u,
+ m_parameters.extent.depth,
+ m_parameters.viewMasks[subpassNdx]);
+ }
+
m_device->cmdClearAttachments(*m_cmdBuffer, 1u, &clearAttachment, 1u, &clearRect);
+ m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
clearAttachment.clearValue = makeClearValueColor(tcu::Vec4(0.0f, 0.0f, 1.0f, 1.0f));
m_device->cmdClearAttachments(*m_cmdBuffer, 1u, &clearAttachment, 1u, &clearRect);
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
beginCommandBuffer(*m_device, *m_cmdBuffer);
- beforeDraw();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderingType);
+ }
//Create secondary buffer
const VkCommandBufferAllocateInfo cmdBufferAllocateInfo =
VK_CHECK(m_device->endCommandBuffer(cmdBufferSecondary.back().get()->get()));
m_device->cmdExecuteCommands(*m_cmdBuffer, 1u, &cmdBufferSecondary.back().get()->get());
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
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();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
+ m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
+
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
+ if (m_useDynamicRendering)
+ {
+ beginRendering(
+ *m_device,
+ *m_cmdBuffer,
+ m_colorAttachment->getImageView(),
+ renderArea,
+ renderPassClearValue,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
+ 0u,
+ m_parameters.extent.depth,
+ m_parameters.viewMasks[subpassNdx]);
+ }
+
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
m_device->cmdDraw(*m_cmdBuffer, 1u, 1u, drawNdx + subpassNdx % m_squareCount, 0u);
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
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();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
+ m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
+
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
+ if (m_useDynamicRendering)
+ {
+ beginRendering(
+ *m_device,
+ *m_cmdBuffer,
+ m_colorAttachment->getImageView(),
+ renderArea,
+ renderPassClearValue,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
+ 0u,
+ m_parameters.extent.depth,
+ m_parameters.viewMasks[subpassNdx]);
+ }
+
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
m_device->cmdDraw(*m_cmdBuffer, vertexPerPrimitive, 1u, (drawNdx + subpassNdx % m_squareCount) * vertexPerPrimitive, 0u);
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
m_device->cmdResolveImage(*m_cmdBuffer, m_colorAttachment->getImage(), VK_IMAGE_LAYOUT_GENERAL, m_resolveAttachment->getImage(), VK_IMAGE_LAYOUT_GENERAL, 1u, &imageResolveRegion);
m_device->cmdResetQueryPool(*m_cmdBuffer, *timestampStartQueryPool, queryStartIndex, queryCountersNumber);
m_device->cmdResetQueryPool(*m_cmdBuffer, *timestampEndQueryPool, queryStartIndex, queryCountersNumber);
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
m_occlusionExpectedValues.reserve(queryCountersNumber);
m_counterSeriesStart.reserve(queryCountersNumber);
m_counterSeriesEnd.reserve(queryCountersNumber);
{
deUint32 queryCountersToUse = getUsedViewsCount(subpassNdx);
+ m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
+ if (m_useDynamicRendering)
+ {
+ beginRendering(
+ *m_device,
+ *m_cmdBuffer,
+ m_colorAttachment->getImageView(),
+ renderArea,
+ renderPassClearValue,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ (subpassNdx ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR),
+ 0u,
+ m_parameters.extent.depth,
+ m_parameters.viewMasks[subpassNdx]);
+ }
+
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
{
const deUint32 primitiveNumber = drawNdx + subpassNdx % m_squareCount;
DE_ASSERT(queryStartIndex == queryCountersNumber);
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
beginCommandBuffer(*m_device, *m_cmdBuffer);
if (clearPass)
- beforeDraw();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
}
}
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
if (!clearPass)
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
class MultiViewDepthStencilTestInstance : public MultiViewRenderTestInstance
{
public:
- MultiViewDepthStencilTestInstance (Context& context, const TestParameters& parameters);
+ MultiViewDepthStencilTestInstance (Context& context, const TestParameters& parameters);
protected:
- tcu::TestStatus iterate (void);
- void createVertexData (void);
-
- void draw (const deUint32 subpassCount,
- VkRenderPass renderPass,
- VkFramebuffer frameBuffer,
- vector<PipelineSp>& pipelines);
- void beforeRenderPass (void);
- void afterRenderPass (void);
- vector<VkImageView> makeAttachmentsVector (void);
- void readImage (VkImage image,
- const tcu::PixelBufferAccess& dst);
+ tcu::TestStatus iterate (void) override;
+ void createVertexData (void) override;
+
+ void draw (const deUint32 subpassCount,
+ VkRenderPass renderPass,
+ VkFramebuffer frameBuffer,
+ vector<PipelineSp>& pipelines) override;
- void beforeDraw (void) override;
- void afterDraw (void) override;
++ void beforeRenderPass (void) override;
++ void afterRenderPass (void) override;
+ vector<VkImageView> makeAttachmentsVector (void);
+ MovePtr<tcu::Texture2DArray> imageData (void) const override;
+ void readImage (VkImage image,
+ const tcu::PixelBufferAccess& dst);
+ vector<tcu::Vec2> getDepthRanges (void) const;
+
private:
VkFormat m_dsFormat;
de::SharedPtr<ImageAttachment> m_dsAttachment;
beginCommandBuffer(*m_device, *m_cmdBuffer);
- beforeDraw();
+ beforeRenderPass();
- cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ {
+ 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;
+ };
+ cmdBeginRenderPass(*m_device, *m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
+ }
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
deUint32 firstVertexOffset = (subpassNdx < 4) ? 0u : m_squareCount * vertexPerPrimitive;
+ m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
+ if (m_useDynamicRendering)
+ {
+ VkRenderingAttachmentInfoKHR colorAttachment
+ {
+ vk::VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ m_colorAttachment->getImageView(), // VkImageView imageView;
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout imageLayout;
+ VK_RESOLVE_MODE_NONE, // VkResolveModeFlagBits resolveMode;
+ DE_NULL, // VkImageView resolveImageView;
+ VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout resolveImageLayout;
+ VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp loadOp;
+ vk::VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp;
+ renderPassClearValue // VkClearValue clearValue;
+ };
+
+ VkRenderingAttachmentInfoKHR dsAttachment
+ {
+ VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ m_dsAttachment->getImageView(), // VkImageView imageView;
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VkImageLayout imageLayout;
+ VK_RESOLVE_MODE_NONE, // VkResolveModeFlagBits resolveMode;
+ DE_NULL, // VkImageView resolveImageView;
+ VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout resolveImageLayout;
+ VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp loadOp;
+ VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp;
+ makeClearValueDepthStencil(0.0f, 0) // VkClearValue clearValue;
+ };
+
+ vk::VkRenderingInfoKHR renderingInfo
+ {
+ vk::VK_STRUCTURE_TYPE_RENDERING_INFO_KHR,
+ DE_NULL,
+ 0u, // VkRenderingFlagsKHR flags;
+ renderArea, // VkRect2D renderArea;
+ m_parameters.extent.depth, // deUint32 layerCount;
+ m_parameters.viewMasks[subpassNdx], // deUint32 viewMask;
+ 1u, // deUint32 colorAttachmentCount;
+ &colorAttachment, // const VkRenderingAttachmentInfoKHR* pColorAttachments;
+ (m_depthTest ? &dsAttachment : DE_NULL), // const VkRenderingAttachmentInfoKHR* pDepthAttachment;
+ (m_stencilTest ? &dsAttachment : DE_NULL), // const VkRenderingAttachmentInfoKHR* pStencilAttachment;
+ };
+
+ m_device->cmdBeginRenderingKHR(*m_cmdBuffer, &renderingInfo);
+ }
+
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
m_device->cmdDraw(*m_cmdBuffer, vertexPerPrimitive, 1u, firstVertexOffset + (drawNdx + subpassNdx % m_squareCount) * vertexPerPrimitive, 0u);
- if (subpassNdx < subpassCount - 1u)
- cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderPassType);
+ if (m_useDynamicRendering)
+ endRendering(*m_device, *m_cmdBuffer);
+ else if (subpassNdx < subpassCount - 1u)
+ cmdNextSubpass(*m_device, *m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE, m_parameters.renderingType);
}
- cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
+ if (!m_useDynamicRendering)
+ cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderingType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);