From f3d3c5e571970c249b8b8a95483ac8fba3a6e695 Mon Sep 17 00:00:00 2001 From: Toni Merilehti Date: Thu, 3 May 2018 15:04:09 +0300 Subject: [PATCH] Add tests for render targets with write masks New tests verify correct rendering when using multiple render targets with write masks. New tests: dEQP-VK.renderpass.suballocation.attachment_write_mask.* dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.* Components: Vulkan VK-GL-CTS issue: 1082 VK-GL-CTS public issue: 91 Change-Id: I3b308bdcd83f7936c078ecedcf21bd6339dd1f28 --- android/cts/master/vk-master.txt | 36 +++ .../vulkan/renderpass/vktRenderPassTests.cpp | 274 ++++++++++++++------- .../mustpass/1.1.2/vk-default-no-waivers.txt | 36 +++ external/vulkancts/mustpass/1.1.2/vk-default.txt | 36 +++ 4 files changed, 296 insertions(+), 86 deletions(-) diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 25b88cc..bb4e0ee 100755 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -237310,6 +237310,24 @@ dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.96 dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.97 dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.98 dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.99 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_1.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_2.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_2.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_3.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_3.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_3.start_index_2 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_2 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_3 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_2 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_3 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_4 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_5 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_6 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_7 dEQP-VK.renderpass.suballocation.multisample.r5g6b5_unorm_pack16.samples_2 dEQP-VK.renderpass.suballocation.multisample.r5g6b5_unorm_pack16.samples_4 dEQP-VK.renderpass.suballocation.multisample.r5g6b5_unorm_pack16.samples_8 @@ -243894,6 +243912,24 @@ dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.96 dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.97 dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.98 dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.99 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_1.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_2.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_2.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_3.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_3.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_3.start_index_2 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_2 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_3 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_2 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_3 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_4 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_5 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_6 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_7 dEQP-VK.renderpass.multisample.r5g6b5_unorm_pack16.samples_2 dEQP-VK.renderpass.multisample.r5g6b5_unorm_pack16.samples_4 dEQP-VK.renderpass.multisample.r5g6b5_unorm_pack16.samples_8 diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassTests.cpp index 06ced3a..d6b29fc 100644 --- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassTests.cpp +++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassTests.cpp @@ -693,7 +693,9 @@ struct TestConfig const UVec2& targetSize_, const UVec2& renderPos_, const UVec2& renderSize_, + deBool useFormatCompCount_, deUint32 seed_, + deUint32 drawStartNdx_, AllocationKind allocationKind_) : renderPass (renderPass_) , renderTypes (renderTypes_) @@ -702,7 +704,9 @@ struct TestConfig , targetSize (targetSize_) , renderPos (renderPos_) , renderSize (renderSize_) + , useFormatCompCount (useFormatCompCount_) , seed (seed_) + , drawStartNdx (drawStartNdx_) , allocationKind (allocationKind_) { } @@ -714,7 +718,9 @@ struct TestConfig UVec2 targetSize; UVec2 renderPos; UVec2 renderSize; + deBool useFormatCompCount; deUint32 seed; + deUint32 drawStartNdx; AllocationKind allocationKind; }; @@ -878,11 +884,12 @@ void logRenderPassInfo (TestLog& log, } } -std::string clearColorToString (VkFormat vkFormat, VkClearColorValue value) +std::string clearColorToString (VkFormat vkFormat, VkClearColorValue value, deBool useFormatCompCount) { const tcu::TextureFormat format = mapVkFormat(vkFormat); const tcu::TextureChannelClass channelClass = tcu::getTextureChannelClass(format.type); const tcu::BVec4 channelMask = tcu::getTextureFormatChannelMask(format); + const deUint32 componentCount = (useFormatCompCount ? (deUint32)tcu::getNumUsedChannels(format.order) : 4); std::ostringstream stream; @@ -891,7 +898,7 @@ std::string clearColorToString (VkFormat vkFormat, VkClearColorValue value) switch (channelClass) { case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: - for (int i = 0; i < 4; i++) + for (deUint32 i = 0; i < componentCount; i++) { if (i > 0) stream << ", "; @@ -904,7 +911,7 @@ std::string clearColorToString (VkFormat vkFormat, VkClearColorValue value) break; case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: - for (int i = 0; i < 4; i++) + for (deUint32 i = 0; i < componentCount; i++) { if (i > 0) stream << ", "; @@ -919,7 +926,7 @@ std::string clearColorToString (VkFormat vkFormat, VkClearColorValue value) case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: - for (int i = 0; i < 4; i++) + for (deUint32 i = 0; i < componentCount; i++) { if (i > 0) stream << ", "; @@ -940,7 +947,7 @@ std::string clearColorToString (VkFormat vkFormat, VkClearColorValue value) return stream.str(); } -std::string clearValueToString (VkFormat vkFormat, VkClearValue value) +std::string clearValueToString (VkFormat vkFormat, VkClearValue value, deBool useFormatCompCount) { const tcu::TextureFormat format = mapVkFormat(vkFormat); @@ -964,22 +971,23 @@ std::string clearValueToString (VkFormat vkFormat, VkClearValue value) return stream.str(); } else - return clearColorToString(vkFormat, value.color); + return clearColorToString(vkFormat, value.color, useFormatCompCount); } -VkClearColorValue randomColorClearValue (const Attachment& attachment, de::Random& rng) +VkClearColorValue randomColorClearValue (const Attachment& attachment, de::Random& rng, deBool useFormatCompCount) { const float clearNan = tcu::Float32::nan().asFloat(); const tcu::TextureFormat format = mapVkFormat(attachment.getFormat()); const tcu::TextureChannelClass channelClass = tcu::getTextureChannelClass(format.type); const tcu::BVec4 channelMask = tcu::getTextureFormatChannelMask(format); + const deUint32 componentCount = (useFormatCompCount ? (deUint32)tcu::getNumUsedChannels(format.order) : 4); VkClearColorValue clearColor; switch (channelClass) { case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: { - for (int ndx = 0; ndx < 4; ndx++) + for (deUint32 ndx = 0; ndx < componentCount; ndx++) { if (!channelMask[ndx]) clearColor.int32[ndx] = std::numeric_limits::min(); @@ -991,7 +999,7 @@ VkClearColorValue randomColorClearValue (const Attachment& attachment, de::Rando case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: { - for (int ndx = 0; ndx < 4; ndx++) + for (deUint32 ndx = 0; ndx < componentCount; ndx++) { if (!channelMask[ndx]) clearColor.uint32[ndx] = std::numeric_limits::max(); @@ -1005,7 +1013,7 @@ VkClearColorValue randomColorClearValue (const Attachment& attachment, de::Rando case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: { - for (int ndx = 0; ndx < 4; ndx++) + for (deUint32 ndx = 0; ndx < componentCount; ndx++) { if (!channelMask[ndx]) clearColor.float32[ndx] = clearNan; @@ -1268,7 +1276,7 @@ Move createImageAttachmentView (const DeviceInterface& vk, return createImageView(vk, device, 0u, image, VK_IMAGE_VIEW_TYPE_2D, format, makeComponentMappingRGBA(), range); } -VkClearValue randomClearValue (const Attachment& attachment, de::Random& rng) +VkClearValue randomClearValue (const Attachment& attachment, de::Random& rng, deBool useFormatCompCount) { const float clearNan = tcu::Float32::nan().asFloat(); const tcu::TextureFormat format = mapVkFormat(attachment.getFormat()); @@ -1296,7 +1304,7 @@ VkClearValue randomClearValue (const Attachment& attachment, de::Random& rng) { VkClearValue clearValue; - clearValue.color = randomColorClearValue(attachment, rng); + clearValue.color = randomColorClearValue(attachment, rng, useFormatCompCount); return clearValue; } @@ -1569,6 +1577,7 @@ class SubpassRenderInfo public: SubpassRenderInfo (const RenderPass& renderPass, deUint32 subpassIndex, + deUint32 drawStartNdx, bool isSecondary_, @@ -1581,6 +1590,7 @@ public: : m_viewportOffset (viewportOffset) , m_viewportSize (viewportSize) , m_subpassIndex (subpassIndex) + , m_drawStartNdx (drawStartNdx) , m_isSecondary (isSecondary_) , m_flags (renderPass.getSubpasses()[subpassIndex].getFlags()) , m_renderQuad (renderQuad) @@ -1603,6 +1613,7 @@ public: const UVec2& getViewportSize (void) const { return m_viewportSize; } deUint32 getSubpassIndex (void) const { return m_subpassIndex; } + deUint32 getDrawStartNdx (void) const { return m_drawStartNdx; } bool isSecondary (void) const { return m_isSecondary; } const Maybe& getRenderQuad (void) const { return m_renderQuad; } @@ -1627,6 +1638,7 @@ private: UVec2 m_viewportSize; deUint32 m_subpassIndex; + deUint32 m_drawStartNdx; bool m_isSecondary; VkSubpassDescriptionFlags m_flags; @@ -1665,14 +1677,15 @@ Move createSubpassPipeline (const DeviceInterface& vk, { const VkPipelineColorBlendAttachmentState attachmentBlendState = { - VK_FALSE, // blendEnable - VK_BLEND_FACTOR_SRC_ALPHA, // srcBlendColor - VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, // destBlendColor - VK_BLEND_OP_ADD, // blendOpColor - VK_BLEND_FACTOR_ONE, // srcBlendAlpha - VK_BLEND_FACTOR_ONE, // destBlendAlpha - VK_BLEND_OP_ADD, // blendOpAlpha - VK_COLOR_COMPONENT_R_BIT|VK_COLOR_COMPONENT_G_BIT|VK_COLOR_COMPONENT_B_BIT|VK_COLOR_COMPONENT_A_BIT, // channelWriteMask + VK_FALSE, // blendEnable + VK_BLEND_FACTOR_SRC_ALPHA, // srcBlendColor + VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, // destBlendColor + VK_BLEND_OP_ADD, // blendOpColor + VK_BLEND_FACTOR_ONE, // srcBlendAlpha + VK_BLEND_FACTOR_ONE, // destBlendAlpha + VK_BLEND_OP_ADD, // blendOpAlpha + (attachmentNdx < renderInfo.getDrawStartNdx() ? (deUint32)0 : + VK_COLOR_COMPONENT_R_BIT|VK_COLOR_COMPONENT_G_BIT|VK_COLOR_COMPONENT_B_BIT|VK_COLOR_COMPONENT_A_BIT) // channelWriteMask }; attachmentBlendStates.push_back(attachmentBlendState); @@ -2843,7 +2856,8 @@ void renderReferenceValues (vector >& referenceAttachments, const vector >& renderPassClearValues, const vector& subpassRenderInfo, const UVec2& renderPos, - const UVec2& renderSize) + const UVec2& renderSize, + const deUint32 drawStartNdx) { const vector& subpasses = renderPassInfo.getSubpasses(); vector attachmentUsed (renderPassInfo.getAttachments().size(), false); @@ -2978,7 +2992,7 @@ void renderReferenceValues (vector >& referenceAttachments, if (subpass.getInputAttachments().empty()) { - for (size_t attachmentRefNdx = 0; attachmentRefNdx < subpass.getColorAttachments().size(); attachmentRefNdx++) + for (size_t attachmentRefNdx = drawStartNdx; attachmentRefNdx < subpass.getColorAttachments().size(); attachmentRefNdx++) { const deUint32 attachmentIndex = subpass.getColorAttachments()[attachmentRefNdx].getAttachment(); const Attachment& attachment = renderPassInfo.getAttachments()[attachmentIndex]; @@ -3293,7 +3307,8 @@ void renderReferenceImagesFromValues (vector& referenceImag bool verifyColorAttachment (const vector& reference, const ConstPixelBufferAccess& result, - const PixelBufferAccess& errorImage) + const PixelBufferAccess& errorImage, + const deBool useFormatCompCount) { const Vec4 red (1.0f, 0.0f, 0.0f, 1.0f); const Vec4 green (0.0f, 1.0f, 0.0f, 1.0f); @@ -3309,8 +3324,9 @@ bool verifyColorAttachment (const vector& reference, const Vec4 resultColor = result.getPixel(x, y); const PixelValue& referenceValue = reference[x + y * result.getWidth()]; bool pixelOk = true; + const deUint32 componentCount = useFormatCompCount ? (deUint32)tcu::getNumUsedChannels(result.getFormat().order) : 4; - for (int compNdx = 0; compNdx < 4; compNdx++) + for (deUint32 compNdx = 0; compNdx < componentCount; compNdx++) { const Maybe maybeValue = referenceValue.getValue(compNdx); @@ -3438,7 +3454,7 @@ bool logAndVerifyImages (TestLog& log, log << TestLog::Message << "Reference images fill undefined pixels with 3x3 grid pattern." << TestLog::EndMessage; - renderReferenceValues(referenceValues, renderPassInfo, targetSize, imageClearValues, renderPassClearValues, subpassRenderInfo, config.renderPos, config.renderSize); + renderReferenceValues(referenceValues, renderPassInfo, targetSize, imageClearValues, renderPassClearValues, subpassRenderInfo, config.renderPos, config.renderSize, config.drawStartNdx); renderReferenceImagesFromValues(referenceAttachments, referenceValues, targetSize, renderPassInfo); for (size_t attachmentNdx = 0; attachmentNdx < renderPassInfo.getAttachments().size(); attachmentNdx++) @@ -3557,7 +3573,7 @@ bool logAndVerifyImages (TestLog& log, log << TestLog::Image("AttachmentReference" + de::toString(attachmentNdx), "Attachment reference " + de::toString(attachmentNdx), referenceAttachments[attachmentNdx].getAccess()); if ((renderPassInfo.getAttachments()[attachmentNdx].getStoreOp() == VK_ATTACHMENT_STORE_OP_STORE || renderPassInfo.getAttachments()[attachmentNdx].getStencilStoreOp() == VK_ATTACHMENT_STORE_OP_STORE) - && !verifyColorAttachment(referenceValues[attachmentNdx], access, errorImage.getAccess())) + && !verifyColorAttachment(referenceValues[attachmentNdx], access, errorImage.getAccess(), config.useFormatCompCount)) { log << TestLog::Image("AttachmentError" + de::toString(attachmentNdx), "Attachment Error " + de::toString(attachmentNdx), errorImage.getAccess()); isOk = false; @@ -3594,23 +3610,33 @@ std::string getInputAttachmentType (VkFormat vkFormat) } } -std::string getAttachmentType (VkFormat vkFormat) +std::string getAttachmentType (VkFormat vkFormat, deBool useFormatCompCount) { const tcu::TextureFormat format = mapVkFormat(vkFormat); const tcu::TextureChannelClass channelClass = tcu::getTextureChannelClass(format.type); + const size_t componentCount = (size_t)tcu::getNumUsedChannels(format.order); switch (channelClass) { case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: - return "ivec4"; + if (useFormatCompCount) + return (componentCount == 1 ? "int" : "ivec" + de::toString(componentCount)); + else + return "ivec4"; case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: - return "uvec4"; + if (useFormatCompCount) + return (componentCount == 1 ? "uint" : "uvec" + de::toString(componentCount)); + else + return "uvec4"; case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: - return "vec4"; + if (useFormatCompCount) + return (componentCount == 1 ? "float" : "vec" + de::toString(componentCount)); + else + return "vec4"; default: DE_FATAL("Unknown channel class"); @@ -3640,7 +3666,7 @@ void createTestShaders (SourceCollections& dst, TestConfig config) fragmentShader << "#version 310 es\n" << "precision highp float;\n"; - for (size_t attachmentNdx = 0; attachmentNdx < subpass.getInputAttachments().size(); attachmentNdx++) + for (size_t attachmentNdx = config.drawStartNdx; attachmentNdx < subpass.getInputAttachments().size(); attachmentNdx++) { const deUint32 attachmentIndex = subpass.getInputAttachments()[attachmentNdx].getAttachment(); const VkImageLayout layout = subpass.getInputAttachments()[attachmentNdx].getImageLayout(); @@ -3672,9 +3698,11 @@ void createTestShaders (SourceCollections& dst, TestConfig config) } } - for (size_t attachmentNdx = 0; attachmentNdx < subpass.getColorAttachments().size(); attachmentNdx++) + for (size_t attachmentNdx = config.drawStartNdx; attachmentNdx < subpass.getColorAttachments().size(); attachmentNdx++) { - const std::string attachmentType = getAttachmentType(config.renderPass.getAttachments()[subpass.getColorAttachments()[attachmentNdx].getAttachment()].getFormat()); + const Attachment attachment = config.renderPass.getAttachments()[subpass.getColorAttachments()[attachmentNdx].getAttachment()]; + std::string attachmentType = getAttachmentType(attachment.getFormat(), config.useFormatCompCount); + fragmentShader << "layout(location = " << attachmentNdx << ") out highp " << attachmentType << " o_color" << attachmentNdx << ";\n"; } @@ -3682,14 +3710,17 @@ void createTestShaders (SourceCollections& dst, TestConfig config) if (subpass.getInputAttachments().empty()) { - for (size_t attachmentNdx = 0; attachmentNdx < subpass.getColorAttachments().size(); attachmentNdx++) + for (size_t attachmentNdx = config.drawStartNdx; attachmentNdx < subpass.getColorAttachments().size(); attachmentNdx++) { - const deUint32 attachmentIndex = subpass.getColorAttachments()[attachmentNdx].getAttachment(); - const std::string attachmentType = getAttachmentType(config.renderPass.getAttachments()[attachmentIndex].getFormat()); + const deUint32 attachmentIndex = subpass.getColorAttachments()[attachmentNdx].getAttachment(); + const Attachment attachment = config.renderPass.getAttachments()[attachmentIndex]; + const tcu::TextureFormat format = mapVkFormat(attachment.getFormat()); + const size_t componentCount = config.useFormatCompCount ? (size_t)tcu::getNumUsedChannels(format.order) : 4; + std::string attachmentType = getAttachmentType(attachment.getFormat(), config.useFormatCompCount); - fragmentShader << "\to_color" << attachmentNdx << " = " << attachmentType << "(vec4("; + fragmentShader << "\to_color" << attachmentNdx << " = " << attachmentType << "(" << attachmentType + "("; - for (size_t compNdx = 0; compNdx < 4; compNdx++) + for (size_t compNdx = 0; compNdx < componentCount; compNdx++) { const size_t index = subpassNdx + attachmentIndex + compNdx; const BoolOp op = boolOpFromIndex(index); @@ -3724,7 +3755,7 @@ void createTestShaders (SourceCollections& dst, TestConfig config) size_t inputComponentCount = 0; size_t outputComponentCount = 0; - for (size_t attachmentNdx = 0; attachmentNdx < subpass.getInputAttachments().size(); attachmentNdx++) + for (size_t attachmentNdx = config.drawStartNdx; attachmentNdx < subpass.getInputAttachments().size(); attachmentNdx++) { const deUint32 attachmentIndex = subpass.getInputAttachments()[attachmentNdx].getAttachment(); const VkImageLayout layout = subpass.getInputAttachments()[attachmentNdx].getImageLayout(); @@ -3740,7 +3771,7 @@ void createTestShaders (SourceCollections& dst, TestConfig config) inputComponentCount += componentCount; } - for (size_t attachmentNdx = 0; attachmentNdx < subpass.getColorAttachments().size(); attachmentNdx++) + for (size_t attachmentNdx = config.drawStartNdx; attachmentNdx < subpass.getColorAttachments().size(); attachmentNdx++) { const deUint32 attachmentIndex = subpass.getColorAttachments()[attachmentNdx].getAttachment(); const Attachment attachment = config.renderPass.getAttachments()[attachmentIndex]; @@ -3771,7 +3802,7 @@ void createTestShaders (SourceCollections& dst, TestConfig config) size_t inputValueNdx = 0; - for (size_t attachmentNdx = 0; attachmentNdx < subpass.getInputAttachments().size(); attachmentNdx++) + for (size_t attachmentNdx = config.drawStartNdx; attachmentNdx < subpass.getInputAttachments().size(); attachmentNdx++) { const char* const components[] = { @@ -3811,11 +3842,11 @@ void createTestShaders (SourceCollections& dst, TestConfig config) size_t outputValueNdx = 0; - for (size_t attachmentNdx = 0; attachmentNdx < subpass.getColorAttachments().size(); attachmentNdx++) + for (size_t attachmentNdx = config.drawStartNdx; attachmentNdx < subpass.getColorAttachments().size(); attachmentNdx++) { const deUint32 attachmentIndex = subpass.getColorAttachments()[attachmentNdx].getAttachment(); const Attachment attachment = config.renderPass.getAttachments()[attachmentIndex]; - const std::string attachmentType = getAttachmentType(config.renderPass.getAttachments()[attachmentIndex].getFormat()); + const std::string attachmentType = getAttachmentType(config.renderPass.getAttachments()[attachmentIndex].getFormat(), config.useFormatCompCount); const tcu::TextureFormat format = mapVkFormat(attachment.getFormat()); const size_t componentCount = (size_t)tcu::getNumUsedChannels(format.order); @@ -3836,7 +3867,7 @@ void createTestShaders (SourceCollections& dst, TestConfig config) fragmentShader << "\to_color" << attachmentNdx << " = " << attachmentType << "("; - for (size_t compNdx = 0; compNdx < 4; compNdx++) + for (size_t compNdx = 0; compNdx < (config.useFormatCompCount ? componentCount : 4); compNdx++) { if (compNdx > 0) fragmentShader << ", "; @@ -4061,32 +4092,32 @@ void initializeSubpassIsSecondary (vector& subpassIsSecondary, const vecto } } -void initializeImageClearValues (de::Random& rng, vector >& clearValues, const vector& attachments, const vector& isLazy) +void initializeImageClearValues (de::Random& rng, vector >& clearValues, const vector& attachments, const vector& isLazy, deBool useFormatCompCount) { for (size_t attachmentNdx = 0; attachmentNdx < attachments.size(); attachmentNdx++) { if (!isLazy[attachmentNdx]) - clearValues.push_back(just(randomClearValue(attachments[attachmentNdx], rng))); + clearValues.push_back(just(randomClearValue(attachments[attachmentNdx], rng, useFormatCompCount))); else clearValues.push_back(nothing()); } } -void initializeRenderPassClearValues (de::Random& rng, vector >& clearValues, const vector& attachments) +void initializeRenderPassClearValues (de::Random& rng, vector >& clearValues, const vector& attachments, deBool useFormatCompCount) { for (size_t attachmentNdx = 0; attachmentNdx < attachments.size(); attachmentNdx++) { if (attachments[attachmentNdx].getLoadOp() == VK_ATTACHMENT_LOAD_OP_CLEAR || attachments[attachmentNdx].getStencilLoadOp() == VK_ATTACHMENT_LOAD_OP_CLEAR) { - clearValues.push_back(just(randomClearValue(attachments[attachmentNdx], rng))); + clearValues.push_back(just(randomClearValue(attachments[attachmentNdx], rng, useFormatCompCount))); } else clearValues.push_back(nothing()); } } -void initializeSubpassClearValues (de::Random& rng, vector >& clearValues, const RenderPass& renderPass) +void initializeSubpassClearValues (de::Random& rng, vector >& clearValues, const RenderPass& renderPass, deBool useFormatCompCount) { clearValues.resize(renderPass.getSubpasses().size()); @@ -4102,13 +4133,12 @@ void initializeSubpassClearValues (de::Random& rng, vector& renderInfos, de::Ra const UVec2 size ((viewportSize * UVec2(2)) / UVec2(3)); const UVec2 offset (viewportOffset.x() + ((deUint32)attachmentRefNdx % 2u) * (viewportSize.x() / 3u), viewportOffset.y() + (((deUint32)attachmentRefNdx / 2u) % 2u) * (viewportSize.y() / 3u)); - const VkClearColorValue color = randomColorClearValue(attachment, rng); + const VkClearColorValue color = randomColorClearValue(attachment, rng, config.useFormatCompCount); colorClears.push_back(ColorClear(offset, size, color)); } @@ -4238,7 +4270,7 @@ void initializeSubpassRenderInfo (vector& renderInfos, de::Ra const UVec2 size ((viewportSize * UVec2(2)) / UVec2(3)); const UVec2 offset (viewportOffset.x() + ((deUint32)colorAttachments.size() % 2u) * (viewportSize.x() / 3u), viewportOffset.y() + (((deUint32)colorAttachments.size() / 2u) % 2u) * (viewportSize.y() / 3u)); - const VkClearValue value = randomClearValue(attachment, rng); + const VkClearValue value = randomClearValue(attachment, rng, config.useFormatCompCount); depthStencilClear = tcu::just(DepthStencilClear(offset, size, value.depthStencil.depth, value.depthStencil.stencil)); } @@ -4258,7 +4290,7 @@ void initializeSubpassRenderInfo (vector& renderInfos, de::Ra renderQuad = tcu::just(RenderQuad(tcu::Vec2(x0, y0), tcu::Vec2(x1, y1))); } - renderInfos.push_back(SubpassRenderInfo(renderPass, subpassNdx, subpassIsSecondary, viewportOffset, viewportSize, renderQuad, colorClears, depthStencilClear)); + renderInfos.push_back(SubpassRenderInfo(renderPass, subpassNdx, config.drawStartNdx, subpassIsSecondary, viewportOffset, viewportSize, renderQuad, colorClears, depthStencilClear)); } } @@ -4383,12 +4415,12 @@ tcu::TestStatus renderPassTest (Context& context, TestConfig config) } initializeAttachmentIsLazy(attachmentIsLazy, renderPassInfo.getAttachments(), config.imageMemory); - initializeImageClearValues(rng, imageClearValues, renderPassInfo.getAttachments(), attachmentIsLazy); + initializeImageClearValues(rng, imageClearValues, renderPassInfo.getAttachments(), attachmentIsLazy, config.useFormatCompCount); initializeAttachmentImageUsage(context, attachmentImageUsage, renderPassInfo, attachmentIsLazy, imageClearValues); - initializeRenderPassClearValues(rng, renderPassClearValues, renderPassInfo.getAttachments()); + initializeRenderPassClearValues(rng, renderPassClearValues, renderPassInfo.getAttachments(), config.useFormatCompCount); initializeSubpassIsSecondary(subpassIsSecondary, renderPassInfo.getSubpasses(), config.commandBufferTypes); - initializeSubpassClearValues(rng, subpassColorClearValues, renderPassInfo); + initializeSubpassClearValues(rng, subpassColorClearValues, renderPassInfo, config.useFormatCompCount); initializeSubpassRenderInfo(subpassRenderInfo, rng, renderPassInfo, config); logTestCaseInfo(log, config, attachmentIsLazy, imageClearValues, renderPassClearValues, subpassRenderInfo); @@ -4691,7 +4723,77 @@ void addAttachmentTests (tcu::TestCaseGroup* group, AllocationKind allocationKin const UVec2 renderPos = rng.choose(DE_ARRAY_BEGIN(renderPositions), DE_ARRAY_END(renderPositions)); const UVec2 renderSize = rng.choose(DE_ARRAY_BEGIN(renderSizes), DE_ARRAY_END(renderSizes)); - addFunctionCaseWithPrograms(attachmentCountGroup.get(), testCaseName.c_str(), testCaseName.c_str(), createTestShaders, renderPassTest, TestConfig(renderPass, render, commandBuffer, imageMemory, targetSize, renderPos, renderSize, 1293809, allocationKind)); + addFunctionCaseWithPrograms(attachmentCountGroup.get(), testCaseName.c_str(), testCaseName.c_str(), createTestShaders, renderPassTest,TestConfig(renderPass, render, commandBuffer, imageMemory, targetSize, renderPos, renderSize, DE_FALSE, 1293809, 0, allocationKind)); + } + } + + group->addChild(attachmentCountGroup.release()); + } +} + +void addAttachmentWriteMaskTests(tcu::TestCaseGroup* group, AllocationKind allocationKind) +{ + const deUint32 attachmentCounts[] = { 1, 2, 3, 4, 8 }; + + const VkFormat attachmentFormats[] = + { + VK_FORMAT_R8G8B8A8_UINT, + VK_FORMAT_R8G8B8A8_UNORM, + VK_FORMAT_R5G6B5_UNORM_PACK16, + VK_FORMAT_R8G8_UNORM + }; + + tcu::TestContext& testCtx = group->getTestContext(); + + for (deUint32 attachmentCountNdx = 0; attachmentCountNdx < DE_LENGTH_OF_ARRAY(attachmentCounts); attachmentCountNdx++) + { + const deUint32 attachmentCount = attachmentCounts[attachmentCountNdx]; + const string groupName = "attachment_count_" + de::toString(attachmentCount); + + de::MovePtr attachmentCountGroup(new tcu::TestCaseGroup(testCtx, groupName.c_str(), de::toString(attachmentCount).c_str())); + + for (deUint32 drawStartNdx = 0; drawStartNdx < (attachmentCount); drawStartNdx++) + { + deUint32 formatNdx = 0; + vector attachments; + vector colorAttachmentReferences; + + for (deUint32 attachmentNdx = 0; attachmentNdx < attachmentCount; attachmentNdx++) + { + const VkFormat format = attachmentFormats[formatNdx]; + const VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT; + const VkAttachmentLoadOp loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; + const VkAttachmentStoreOp storeOp = VK_ATTACHMENT_STORE_OP_STORE; + const VkAttachmentLoadOp stencilLoadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; + const VkAttachmentStoreOp stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE; + const VkImageLayout initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + const VkImageLayout finalizeLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + const VkImageLayout subpassLayout = VK_IMAGE_LAYOUT_GENERAL; + + attachments.push_back(Attachment(format, sampleCount, loadOp, storeOp, stencilLoadOp, stencilStoreOp, initialLayout, finalizeLayout)); + colorAttachmentReferences.push_back(AttachmentReference((deUint32)attachmentNdx, subpassLayout)); + + if (++formatNdx == DE_LENGTH_OF_ARRAY(attachmentFormats)) + formatNdx = 0; + } + + { + const VkImageLayout depthStencilLayout = VK_IMAGE_LAYOUT_GENERAL; + const vector subpass (1, Subpass(VK_PIPELINE_BIND_POINT_GRAPHICS, 0u, vector(), colorAttachmentReferences, vector(), AttachmentReference(VK_ATTACHMENT_UNUSED, depthStencilLayout), vector())); + const vector deps; + + const string testCaseName = "start_index_" + de::toString(drawStartNdx); + const RenderPass renderPass (attachments, subpass, deps); + + const TestConfig::RenderTypes render = TestConfig::RENDERTYPES_DRAW; + const TestConfig::CommandBufferTypes commandBuffer = TestConfig::COMMANDBUFFERTYPES_INLINE; + const TestConfig::ImageMemory imageMemory = TestConfig::IMAGEMEMORY_LAZY; + const UVec2 targetSize = UVec2(64, 64); + const UVec2 renderPos = UVec2(0, 0); + const UVec2 renderSize = UVec2(64, 64); + const deBool useFormatCompCount = DE_TRUE; + + addFunctionCaseWithPrograms(attachmentCountGroup.get(), testCaseName.c_str(), testCaseName.c_str(), createTestShaders, renderPassTest, TestConfig(renderPass, render, commandBuffer, imageMemory, targetSize, renderPos, renderSize, useFormatCompCount, 1293809, drawStartNdx, allocationKind)); } } @@ -5125,7 +5227,7 @@ void addAttachmentAllocationTests (tcu::TestCaseGroup* group, AllocationKind all const RenderPass renderPass (attachments, subpasses, deps); - addFunctionCaseWithPrograms(allocationTypeGroup.get(), testCaseName.c_str(), testCaseName.c_str(), createTestShaders, renderPassTest, TestConfig(renderPass, render, commandBuffer, imageMemory, targetSize, renderPos, renderSize, 80329, allocationKind)); + addFunctionCaseWithPrograms(allocationTypeGroup.get(), testCaseName.c_str(), testCaseName.c_str(), createTestShaders, renderPassTest, TestConfig(renderPass, render, commandBuffer, imageMemory, targetSize, renderPos, renderSize, DE_FALSE, 80329, 0, allocationKind)); } } else @@ -5309,7 +5411,7 @@ void addAttachmentAllocationTests (tcu::TestCaseGroup* group, AllocationKind all const RenderPass renderPass (attachments, subpasses, deps); - addFunctionCaseWithPrograms(allocationTypeGroup.get(), testCaseName.c_str(), testCaseName.c_str(), createTestShaders, renderPassTest, TestConfig(renderPass, render, commandBuffer, imageMemory, targetSize, renderPos, renderSize, 80329, allocationKind)); + addFunctionCaseWithPrograms(allocationTypeGroup.get(), testCaseName.c_str(), testCaseName.c_str(), createTestShaders, renderPassTest, TestConfig(renderPass, render, commandBuffer, imageMemory, targetSize, renderPos, renderSize, DE_FALSE, 80329, 0, allocationKind)); } } } @@ -5342,7 +5444,7 @@ void addSimpleTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(group, "color", "Single color attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(group, "color", "Single color attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } // depth @@ -5364,7 +5466,7 @@ void addSimpleTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(group, "depth", "Single depth attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(group, "depth", "Single depth attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } // stencil @@ -5386,7 +5488,7 @@ void addSimpleTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(group, "stencil", "Single stencil attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(group, "stencil", "Single stencil attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } // depth_stencil @@ -5408,7 +5510,7 @@ void addSimpleTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(group, "depth_stencil", "Single depth stencil attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(group, "depth_stencil", "Single depth stencil attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } // color_depth @@ -5443,7 +5545,7 @@ void addSimpleTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(group, "color_depth", "Color and depth attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(group, "color_depth", "Color and depth attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } // color_stencil @@ -5478,8 +5580,7 @@ void addSimpleTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - - addFunctionCaseWithPrograms(group, "color_stencil", "Color and stencil attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(group, "color_stencil", "Color and stencil attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } // color_depth_stencil @@ -5514,7 +5615,7 @@ void addSimpleTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(group, "color_depth_stencil", "Color, depth and stencil attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(group, "color_depth_stencil", "Color, depth and stencil attachment case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } // no attachments @@ -5529,7 +5630,7 @@ void addSimpleTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(group, "no_attachments", "No attachments case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(group, "no_attachments", "No attachments case.", createTestShaders, renderPassTest, TestConfig(renderPass, TestConfig::RENDERTYPES_DRAW, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } } @@ -5613,7 +5714,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(loadOpGroup.get(), renderTypes[renderTypeNdx].str, renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(loadOpGroup.get(), renderTypes[renderTypeNdx].str, renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } formatGroup->addChild(loadOpGroup.release()); @@ -5701,7 +5802,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) { const RenderPass renderPass (attachments, subpasses, deps, inputAspects); - addFunctionCaseWithPrograms(storeOpGroup.get(), renderTypes[renderTypeNdx].str + string(useInputAspect ? "_use_input_aspect" : ""), renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 89246, allocationKind)); + addFunctionCaseWithPrograms(storeOpGroup.get(), renderTypes[renderTypeNdx].str + string(useInputAspect ? "_use_input_aspect" : ""), renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 89246, 0, allocationKind)); } } { @@ -5757,7 +5858,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) { const RenderPass renderPass (attachments, subpasses, deps, inputAspects); - addFunctionCaseWithPrograms(storeOpGroup.get(), string("self_dep_") + renderTypes[renderTypeNdx].str + (useInputAspect ? "_use_input_aspect" : ""), string("self_dep_") + renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 89246, allocationKind)); + addFunctionCaseWithPrograms(storeOpGroup.get(), string("self_dep_") + renderTypes[renderTypeNdx].str + (useInputAspect ? "_use_input_aspect" : ""), string("self_dep_") + renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 89246, 0, allocationKind)); } } } @@ -5809,7 +5910,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(loadOpGroup.get(), renderTypes[renderTypeNdx].str, renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(loadOpGroup.get(), renderTypes[renderTypeNdx].str, renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } if (isStencilAttachment && isDepthAttachment) @@ -5832,7 +5933,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(loadOpGroup.get(), string(renderTypes[renderTypeNdx].str) + "_depth_read_only", renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(loadOpGroup.get(), string(renderTypes[renderTypeNdx].str) + "_depth_read_only", renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } { @@ -5853,7 +5954,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) vector())), vector()); - addFunctionCaseWithPrograms(loadOpGroup.get(), string(renderTypes[renderTypeNdx].str) + "_stencil_read_only", renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 90239, allocationKind)); + addFunctionCaseWithPrograms(loadOpGroup.get(), string(renderTypes[renderTypeNdx].str) + "_stencil_read_only", renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 90239, 0, allocationKind)); } } } @@ -5951,7 +6052,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) { const RenderPass renderPass (attachments, subpasses, deps, inputAspects); - addFunctionCaseWithPrograms(storeOpGroup.get(), renderTypes[renderTypeNdx].str + string(useInputAspect ? "_use_input_aspect" : ""), renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 89246, allocationKind)); + addFunctionCaseWithPrograms(storeOpGroup.get(), renderTypes[renderTypeNdx].str + string(useInputAspect ? "_use_input_aspect" : ""), renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 89246, 0, allocationKind)); } } { @@ -6010,7 +6111,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) { const RenderPass renderPass (attachments, subpasses, deps, inputAspects); - addFunctionCaseWithPrograms(storeOpGroup.get(), string("self_dep_") + renderTypes[renderTypeNdx].str + (useInputAspect ? "_use_input_aspect" : ""), string("self_dep_") + renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 89246, allocationKind)); + addFunctionCaseWithPrograms(storeOpGroup.get(), string("self_dep_") + renderTypes[renderTypeNdx].str + (useInputAspect ? "_use_input_aspect" : ""), string("self_dep_") + renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 89246, 0, allocationKind)); } } @@ -6081,7 +6182,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) { const RenderPass renderPass (attachments, subpasses, deps, inputAspects); - addFunctionCaseWithPrograms(storeOpGroup.get(), renderTypes[renderTypeNdx].str + string(useInputAspect ? "_use_input_aspect" : "") + "_depth_read_only", renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 89246, allocationKind)); + addFunctionCaseWithPrograms(storeOpGroup.get(), renderTypes[renderTypeNdx].str + string(useInputAspect ? "_use_input_aspect" : "") + "_depth_read_only", renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 89246, 0, allocationKind)); } } { @@ -6148,7 +6249,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) { const RenderPass renderPass (attachments, subpasses, deps, inputAspects); - addFunctionCaseWithPrograms(storeOpGroup.get(), string("self_dep_") + renderTypes[renderTypeNdx].str + (useInputAspect ? "_use_input_aspect" : "") + "_depth_read_only", string("self_dep_") + renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 89246, allocationKind)); + addFunctionCaseWithPrograms(storeOpGroup.get(), string("self_dep_") + renderTypes[renderTypeNdx].str + (useInputAspect ? "_use_input_aspect" : "") + "_depth_read_only", string("self_dep_") + renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 89246, 0, allocationKind)); } } // Stencil read only @@ -6216,7 +6317,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) { const RenderPass renderPass (attachments, subpasses, deps, inputAspects); - addFunctionCaseWithPrograms(storeOpGroup.get(), renderTypes[renderTypeNdx].str + string(useInputAspect ? "_use_input_aspect" : "") + "_stencil_read_only", renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 89246, allocationKind)); + addFunctionCaseWithPrograms(storeOpGroup.get(), renderTypes[renderTypeNdx].str + string(useInputAspect ? "_use_input_aspect" : "") + "_stencil_read_only", renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 89246, 0, allocationKind)); } } { @@ -6283,7 +6384,7 @@ void addFormatTests (tcu::TestCaseGroup* group, AllocationKind allocationKind) { const RenderPass renderPass (attachments, subpasses, deps, inputAspects); - addFunctionCaseWithPrograms(storeOpGroup.get(), string("self_dep_") + renderTypes[renderTypeNdx].str + (useInputAspect ? "_use_input_aspect" : "") + "_stencil_read_only", string("self_dep_") + renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, 89246, allocationKind)); + addFunctionCaseWithPrograms(storeOpGroup.get(), string("self_dep_") + renderTypes[renderTypeNdx].str + (useInputAspect ? "_use_input_aspect" : "") + "_stencil_read_only", string("self_dep_") + renderTypes[renderTypeNdx].str, createTestShaders, renderPassTest, TestConfig(renderPass, renderTypes[renderTypeNdx].types, TestConfig::COMMANDBUFFERTYPES_INLINE, TestConfig::IMAGEMEMORY_STRICT, targetSize, renderPos, renderSize, DE_FALSE, 89246, 0, allocationKind)); } } } @@ -6309,6 +6410,7 @@ void addRenderPassTests (tcu::TestCaseGroup* group, AllocationKind allocationKin addTestGroup(group, "formats", "Tests for different image formats.", addFormatTests, allocationKind); addTestGroup(group, "attachment", "Attachment format and count tests with load and store ops and image layouts", addAttachmentTests, allocationKind); addTestGroup(group, "attachment_allocation", "Attachment allocation tests", addAttachmentAllocationTests, allocationKind); + addTestGroup(group, "attachment_write_mask", "Attachment write mask tests", addAttachmentWriteMaskTests, allocationKind); } de::MovePtr createSuballocationTests(tcu::TestContext& testCtx) diff --git a/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt b/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt index f674b93..901f905 100644 --- a/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt @@ -237327,6 +237327,24 @@ dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.96 dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.97 dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.98 dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.99 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_1.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_2.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_2.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_3.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_3.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_3.start_index_2 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_2 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_3 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_2 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_3 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_4 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_5 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_6 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_7 dEQP-VK.renderpass.suballocation.multisample.r5g6b5_unorm_pack16.samples_2 dEQP-VK.renderpass.suballocation.multisample.r5g6b5_unorm_pack16.samples_4 dEQP-VK.renderpass.suballocation.multisample.r5g6b5_unorm_pack16.samples_8 @@ -243911,6 +243929,24 @@ dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.96 dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.97 dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.98 dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.99 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_1.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_2.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_2.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_3.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_3.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_3.start_index_2 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_2 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_3 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_2 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_3 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_4 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_5 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_6 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_7 dEQP-VK.renderpass.multisample.r5g6b5_unorm_pack16.samples_2 dEQP-VK.renderpass.multisample.r5g6b5_unorm_pack16.samples_4 dEQP-VK.renderpass.multisample.r5g6b5_unorm_pack16.samples_8 diff --git a/external/vulkancts/mustpass/1.1.2/vk-default.txt b/external/vulkancts/mustpass/1.1.2/vk-default.txt index 8a79d09..ed03c85 100644 --- a/external/vulkancts/mustpass/1.1.2/vk-default.txt +++ b/external/vulkancts/mustpass/1.1.2/vk-default.txt @@ -237289,6 +237289,24 @@ dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.96 dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.97 dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.98 dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.99 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_1.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_2.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_2.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_3.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_3.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_3.start_index_2 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_2 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_4.start_index_3 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_0 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_1 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_2 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_3 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_4 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_5 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_6 +dEQP-VK.renderpass.suballocation.attachment_write_mask.attachment_count_8.start_index_7 dEQP-VK.renderpass.suballocation.multisample.r5g6b5_unorm_pack16.samples_2 dEQP-VK.renderpass.suballocation.multisample.r5g6b5_unorm_pack16.samples_4 dEQP-VK.renderpass.suballocation.multisample.r5g6b5_unorm_pack16.samples_8 @@ -243873,6 +243891,24 @@ dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.96 dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.97 dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.98 dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.99 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_1.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_2.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_2.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_3.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_3.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_3.start_index_2 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_2 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_4.start_index_3 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_0 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_1 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_2 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_3 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_4 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_5 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_6 +dEQP-VK.renderpass.dedicated_allocation.attachment_write_mask.attachment_count_8.start_index_7 dEQP-VK.renderpass.multisample.r5g6b5_unorm_pack16.samples_2 dEQP-VK.renderpass.multisample.r5g6b5_unorm_pack16.samples_4 dEQP-VK.renderpass.multisample.r5g6b5_unorm_pack16.samples_8 -- 2.7.4