typedef de::SharedPtr<Unique<VkShaderModule> > ShaderModuleSP;
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,
return tcu::TestStatus::pass("Pass");
}
-void MultiViewRenderTestInstance::beforeDraw (void)
+void MultiViewRenderTestInstance::beforeRenderPass (void)
{
const VkImageSubresourceRange subresourceRange =
{
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
}
-void MultiViewRenderTestInstance::afterDraw (void)
+void MultiViewRenderTestInstance::afterRenderPass (void)
{
const VkImageSubresourceRange subresourceRange =
{
beginCommandBuffer(*m_device, *m_cmdBuffer);
- beforeDraw();
+ beforeRenderPass();
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 (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();
+
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
public:
MultiViewAttachmentsTestInstance (Context& context, const TestParameters& parameters);
protected:
- tcu::TestStatus iterate (void);
- void beforeDraw (void);
+ tcu::TestStatus iterate (void) override;
+ void beforeRenderPass (void) override;
+ void bindResources (void) override;
void setImageData (VkImage image);
de::SharedPtr<ImageAttachment> m_inputAttachment;
Move<VkDescriptorPool> m_descriptorPool;
return tcu::TestStatus::pass("Pass");
}
-void MultiViewAttachmentsTestInstance::beforeDraw (void)
+void MultiViewAttachmentsTestInstance::beforeRenderPass (void)
{
const VkDescriptorPoolSize poolSize =
{
0u, //deUint32 baseArrayLayer;
m_parameters.extent.depth, //deUint32 layerCount;
};
- m_device->cmdBindDescriptorSets(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0u, 1u, &(*m_descriptorSet), 0u, NULL);
imageBarrier(*m_device, *m_cmdBuffer, m_colorAttachment->getImage(), subresourceRange,
VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
}
+void MultiViewAttachmentsTestInstance::bindResources (void)
+{
+ m_device->cmdBindDescriptorSets(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0u, 1u, &(*m_descriptorSet), 0u, NULL);
+}
+
void MultiViewAttachmentsTestInstance::setImageData (VkImage image)
{
const MovePtr<tcu::Texture2DArray> data = imageData();
beginCommandBuffer(*m_device, *m_cmdBuffer);
- beforeDraw();
+ beforeRenderPass();
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);
-
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]);
m_device->cmdDraw(*m_cmdBuffer, 4u, drawCountPerSubpass, 0u, subpassNdx % m_squareCount);
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- 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);
- 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]);
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- 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);
- 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);
+
m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]);
if (m_hasMultiDrawIndirect)
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- 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);
- m_device->cmdBindVertexBuffers(*m_cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(vertexBuffers), vertexBuffers, vertexBufferOffsets);
-
for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++)
{
VkClearAttachment clearAttachment =
};
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)
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- 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);
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- 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);
- 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]);
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
VkRenderPass renderPass,
VkFramebuffer frameBuffer,
vector<PipelineSp>& pipelines);
- void afterDraw (void);
+ void afterRenderPass (void);
private:
de::SharedPtr<ImageAttachment> m_resolveAttachment;
};
beginCommandBuffer(*m_device, *m_cmdBuffer);
- beforeDraw();
+ beforeRenderPass();
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);
-
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]);
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- afterDraw();
+ afterRenderPass();
m_device->cmdResolveImage(*m_cmdBuffer, m_colorAttachment->getImage(), VK_IMAGE_LAYOUT_GENERAL, m_resolveAttachment->getImage(), VK_IMAGE_LAYOUT_GENERAL, 1u, &imageResolveRegion);
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
}
-void MultiViewMultsampleTestInstance::afterDraw (void)
+void MultiViewMultsampleTestInstance::afterRenderPass (void)
{
const VkImageSubresourceRange subresourceRange =
{
beginCommandBuffer(*m_device, *m_cmdBuffer);
- beforeDraw();
+ beforeRenderPass();
// Query pools must be reset before use
m_device->cmdResetQueryPool(*m_cmdBuffer, *occlusionQueryPool, queryStartIndex, queryCountersNumber);
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_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]);
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- 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);
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
if (!clearPass)
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
VkRenderPass renderPass,
VkFramebuffer frameBuffer,
vector<PipelineSp>& pipelines);
- void beforeDraw (void);
- void afterDraw (void);
+ void beforeRenderPass (void);
+ void afterRenderPass (void);
vector<VkImageView> makeAttachmentsVector (void);
void readImage (VkImage image,
const tcu::PixelBufferAccess& dst);
beginCommandBuffer(*m_device, *m_cmdBuffer);
- beforeDraw();
+ beforeRenderPass();
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);
-
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]);
for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx)
cmdEndRenderPass(*m_device, *m_cmdBuffer, m_parameters.renderPassType);
- afterDraw();
+ afterRenderPass();
VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer));
submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer);
}
-void MultiViewDepthStencilTestInstance::beforeDraw (void)
+void MultiViewDepthStencilTestInstance::beforeRenderPass (void)
{
- MultiViewRenderTestInstance::beforeDraw();
+ MultiViewRenderTestInstance::beforeRenderPass();
const VkImageSubresourceRange subresourceRange =
{
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT);
}
-void MultiViewDepthStencilTestInstance::afterDraw (void)
+void MultiViewDepthStencilTestInstance::afterRenderPass (void)
{
- MultiViewRenderTestInstance::afterDraw();
+ MultiViewRenderTestInstance::afterRenderPass();
const VkImageSubresourceRange dsSubresourceRange =
{