From 327b19d759e4a8baac64cd92cf9946ff743a0e0a Mon Sep 17 00:00:00 2001 From: Boris Zanin Date: Thu, 14 Dec 2017 16:55:43 +0100 Subject: [PATCH] Extend multiview tests Add multiview queries tests for: * occlusion queries * timestamp queries Clear attachment test reimplemented to avoid usage of geometry shader and added test to validate loading from multiview attachments. Add tests * dEQP-VK.multiview.queries.* * dEQP-VK.multiview.readback_with_explicit_clear.* * dEQP-VK.multiview.readback_with_implicit_clear.* * dEQP-VK.multiview.*.5_10_5_10.* Updates tests * dEQP-VK.multiview.clear_attachments.* Components: Vulkan VK-GL-CTS issue: 789 Change-Id: I66063f99eea4dfd8936f9b88d02ede043ae52553 --- android/cts/master/vk-master.txt | 41 ++ .../vulkan/multiview/vktMultiViewRenderTests.cpp | 566 ++++++++++++++++++++- .../vulkan/multiview/vktMultiViewRenderUtil.cpp | 5 +- .../vulkan/multiview/vktMultiViewRenderUtil.hpp | 2 +- .../mustpass/1.1.2/vk-default-no-waivers.txt | 41 ++ external/vulkancts/mustpass/1.1.2/vk-default.txt | 41 ++ 6 files changed, 686 insertions(+), 10 deletions(-) diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 9cebe15..f348f42 100755 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -279883,6 +279883,7 @@ dEQP-VK.multiview.masks.8 dEQP-VK.multiview.masks.1_2_4_8 dEQP-VK.multiview.masks.15_15_15_15 dEQP-VK.multiview.masks.8_1_1_8 +dEQP-VK.multiview.masks.5_10_5_10 dEQP-VK.multiview.masks.1_2_4_8_16_32 dEQP-VK.multiview.masks.max_multi_view_view_count dEQP-VK.multiview.input_attachments.15 @@ -279890,6 +279891,7 @@ dEQP-VK.multiview.input_attachments.8 dEQP-VK.multiview.input_attachments.1_2_4_8 dEQP-VK.multiview.input_attachments.15_15_15_15 dEQP-VK.multiview.input_attachments.8_1_1_8 +dEQP-VK.multiview.input_attachments.5_10_5_10 dEQP-VK.multiview.input_attachments.1_2_4_8_16_32 dEQP-VK.multiview.input_attachments.max_multi_view_view_count dEQP-VK.multiview.input_attachments_geometry.15 @@ -279897,6 +279899,7 @@ dEQP-VK.multiview.input_attachments_geometry.8 dEQP-VK.multiview.input_attachments_geometry.1_2_4_8 dEQP-VK.multiview.input_attachments_geometry.15_15_15_15 dEQP-VK.multiview.input_attachments_geometry.8_1_1_8 +dEQP-VK.multiview.input_attachments_geometry.5_10_5_10 dEQP-VK.multiview.input_attachments_geometry.1_2_4_8_16_32 dEQP-VK.multiview.input_attachments_geometry.max_multi_view_view_count dEQP-VK.multiview.instanced.15 @@ -279904,6 +279907,7 @@ dEQP-VK.multiview.instanced.8 dEQP-VK.multiview.instanced.1_2_4_8 dEQP-VK.multiview.instanced.15_15_15_15 dEQP-VK.multiview.instanced.8_1_1_8 +dEQP-VK.multiview.instanced.5_10_5_10 dEQP-VK.multiview.instanced.1_2_4_8_16_32 dEQP-VK.multiview.instanced.max_multi_view_view_count dEQP-VK.multiview.input_instance.15 @@ -279911,6 +279915,7 @@ dEQP-VK.multiview.input_instance.8 dEQP-VK.multiview.input_instance.1_2_4_8 dEQP-VK.multiview.input_instance.15_15_15_15 dEQP-VK.multiview.input_instance.8_1_1_8 +dEQP-VK.multiview.input_instance.5_10_5_10 dEQP-VK.multiview.input_instance.1_2_4_8_16_32 dEQP-VK.multiview.input_instance.max_multi_view_view_count dEQP-VK.multiview.draw_indirect.15 @@ -279918,6 +279923,7 @@ dEQP-VK.multiview.draw_indirect.8 dEQP-VK.multiview.draw_indirect.1_2_4_8 dEQP-VK.multiview.draw_indirect.15_15_15_15 dEQP-VK.multiview.draw_indirect.8_1_1_8 +dEQP-VK.multiview.draw_indirect.5_10_5_10 dEQP-VK.multiview.draw_indirect.1_2_4_8_16_32 dEQP-VK.multiview.draw_indirect.max_multi_view_view_count dEQP-VK.multiview.draw_indirect_indexed.15 @@ -279925,6 +279931,7 @@ dEQP-VK.multiview.draw_indirect_indexed.8 dEQP-VK.multiview.draw_indirect_indexed.1_2_4_8 dEQP-VK.multiview.draw_indirect_indexed.15_15_15_15 dEQP-VK.multiview.draw_indirect_indexed.8_1_1_8 +dEQP-VK.multiview.draw_indirect_indexed.5_10_5_10 dEQP-VK.multiview.draw_indirect_indexed.1_2_4_8_16_32 dEQP-VK.multiview.draw_indirect_indexed.max_multi_view_view_count dEQP-VK.multiview.draw_indexed.15 @@ -279932,6 +279939,7 @@ dEQP-VK.multiview.draw_indexed.8 dEQP-VK.multiview.draw_indexed.1_2_4_8 dEQP-VK.multiview.draw_indexed.15_15_15_15 dEQP-VK.multiview.draw_indexed.8_1_1_8 +dEQP-VK.multiview.draw_indexed.5_10_5_10 dEQP-VK.multiview.draw_indexed.1_2_4_8_16_32 dEQP-VK.multiview.draw_indexed.max_multi_view_view_count dEQP-VK.multiview.clear_attachments.15 @@ -279939,6 +279947,7 @@ dEQP-VK.multiview.clear_attachments.8 dEQP-VK.multiview.clear_attachments.1_2_4_8 dEQP-VK.multiview.clear_attachments.15_15_15_15 dEQP-VK.multiview.clear_attachments.8_1_1_8 +dEQP-VK.multiview.clear_attachments.5_10_5_10 dEQP-VK.multiview.clear_attachments.1_2_4_8_16_32 dEQP-VK.multiview.clear_attachments.max_multi_view_view_count dEQP-VK.multiview.secondary_cmd_buffer.15 @@ -279946,6 +279955,7 @@ dEQP-VK.multiview.secondary_cmd_buffer.8 dEQP-VK.multiview.secondary_cmd_buffer.1_2_4_8 dEQP-VK.multiview.secondary_cmd_buffer.15_15_15_15 dEQP-VK.multiview.secondary_cmd_buffer.8_1_1_8 +dEQP-VK.multiview.secondary_cmd_buffer.5_10_5_10 dEQP-VK.multiview.secondary_cmd_buffer.1_2_4_8_16_32 dEQP-VK.multiview.secondary_cmd_buffer.max_multi_view_view_count dEQP-VK.multiview.secondary_cmd_buffer_geometry.15 @@ -279953,6 +279963,7 @@ dEQP-VK.multiview.secondary_cmd_buffer_geometry.8 dEQP-VK.multiview.secondary_cmd_buffer_geometry.1_2_4_8 dEQP-VK.multiview.secondary_cmd_buffer_geometry.15_15_15_15 dEQP-VK.multiview.secondary_cmd_buffer_geometry.8_1_1_8 +dEQP-VK.multiview.secondary_cmd_buffer_geometry.5_10_5_10 dEQP-VK.multiview.secondary_cmd_buffer_geometry.1_2_4_8_16_32 dEQP-VK.multiview.secondary_cmd_buffer_geometry.max_multi_view_view_count dEQP-VK.multiview.point_size.15 @@ -279960,6 +279971,7 @@ dEQP-VK.multiview.point_size.8 dEQP-VK.multiview.point_size.1_2_4_8 dEQP-VK.multiview.point_size.15_15_15_15 dEQP-VK.multiview.point_size.8_1_1_8 +dEQP-VK.multiview.point_size.5_10_5_10 dEQP-VK.multiview.point_size.1_2_4_8_16_32 dEQP-VK.multiview.point_size.max_multi_view_view_count dEQP-VK.multiview.multisample.15 @@ -279967,13 +279979,39 @@ dEQP-VK.multiview.multisample.8 dEQP-VK.multiview.multisample.1_2_4_8 dEQP-VK.multiview.multisample.15_15_15_15 dEQP-VK.multiview.multisample.8_1_1_8 +dEQP-VK.multiview.multisample.5_10_5_10 dEQP-VK.multiview.multisample.1_2_4_8_16_32 dEQP-VK.multiview.multisample.max_multi_view_view_count +dEQP-VK.multiview.queries.15 +dEQP-VK.multiview.queries.8 +dEQP-VK.multiview.queries.1_2_4_8 +dEQP-VK.multiview.queries.15_15_15_15 +dEQP-VK.multiview.queries.8_1_1_8 +dEQP-VK.multiview.queries.5_10_5_10 +dEQP-VK.multiview.queries.1_2_4_8_16_32 +dEQP-VK.multiview.queries.max_multi_view_view_count +dEQP-VK.multiview.readback_implicit_clear.15 +dEQP-VK.multiview.readback_implicit_clear.8 +dEQP-VK.multiview.readback_implicit_clear.1_2_4_8 +dEQP-VK.multiview.readback_implicit_clear.15_15_15_15 +dEQP-VK.multiview.readback_implicit_clear.8_1_1_8 +dEQP-VK.multiview.readback_implicit_clear.5_10_5_10 +dEQP-VK.multiview.readback_implicit_clear.1_2_4_8_16_32 +dEQP-VK.multiview.readback_implicit_clear.max_multi_view_view_count +dEQP-VK.multiview.readback_explicit_clear.15 +dEQP-VK.multiview.readback_explicit_clear.8 +dEQP-VK.multiview.readback_explicit_clear.1_2_4_8 +dEQP-VK.multiview.readback_explicit_clear.15_15_15_15 +dEQP-VK.multiview.readback_explicit_clear.8_1_1_8 +dEQP-VK.multiview.readback_explicit_clear.5_10_5_10 +dEQP-VK.multiview.readback_explicit_clear.1_2_4_8_16_32 +dEQP-VK.multiview.readback_explicit_clear.max_multi_view_view_count dEQP-VK.multiview.index.vertex_shader.15 dEQP-VK.multiview.index.vertex_shader.8 dEQP-VK.multiview.index.vertex_shader.1_2_4_8 dEQP-VK.multiview.index.vertex_shader.15_15_15_15 dEQP-VK.multiview.index.vertex_shader.8_1_1_8 +dEQP-VK.multiview.index.vertex_shader.5_10_5_10 dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.vertex_shader.max_multi_view_view_count dEQP-VK.multiview.index.fragment_shader.15 @@ -279981,6 +280019,7 @@ dEQP-VK.multiview.index.fragment_shader.8 dEQP-VK.multiview.index.fragment_shader.1_2_4_8 dEQP-VK.multiview.index.fragment_shader.15_15_15_15 dEQP-VK.multiview.index.fragment_shader.8_1_1_8 +dEQP-VK.multiview.index.fragment_shader.5_10_5_10 dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.fragment_shader.max_multi_view_view_count dEQP-VK.multiview.index.geometry_shader.15 @@ -279988,6 +280027,7 @@ dEQP-VK.multiview.index.geometry_shader.8 dEQP-VK.multiview.index.geometry_shader.1_2_4_8 dEQP-VK.multiview.index.geometry_shader.15_15_15_15 dEQP-VK.multiview.index.geometry_shader.8_1_1_8 +dEQP-VK.multiview.index.geometry_shader.5_10_5_10 dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.geometry_shader.max_multi_view_view_count dEQP-VK.multiview.index.tesellation_shader.15 @@ -279995,6 +280035,7 @@ dEQP-VK.multiview.index.tesellation_shader.8 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8 dEQP-VK.multiview.index.tesellation_shader.15_15_15_15 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8 +dEQP-VK.multiview.index.tesellation_shader.5_10_5_10 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count dEQP-VK.subgroups.builtin_var.subgroupsize_graphic diff --git a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp index 64b3305..b4fbb15 100644 --- a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp +++ b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp @@ -78,6 +78,9 @@ enum TestType TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY, TEST_TYPE_POINT_SIZE, TEST_TYPE_MULTISAMPLE, + TEST_TYPE_QUERIES, + TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR, + TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR, TEST_TYPE_LAST }; @@ -157,6 +160,7 @@ protected: 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); const TestParameters m_parameters; const int m_seed; @@ -179,6 +183,7 @@ protected: Move m_cmdBuffer; de::SharedPtr m_colorAttachment; VkBool32 m_hasMultiDrawIndirect; + vector m_colorTable; }; MultiViewRenderTestInstance::MultiViewRenderTestInstance (Context& context, const TestParameters& parameters) @@ -191,6 +196,18 @@ MultiViewRenderTestInstance::MultiViewRenderTestInstance (Context& context, cons if (!isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_multiview")) throw tcu::NotSupportedError("VK_KHR_multiview is not supported"); + const float v = 0.75f; + const float o = 0.25f; + + m_colorTable.push_back(tcu::Vec4(v, o, o, 1.0f)); + m_colorTable.push_back(tcu::Vec4(o, v, o, 1.0f)); + m_colorTable.push_back(tcu::Vec4(o, o, v, 1.0f)); + m_colorTable.push_back(tcu::Vec4(o, v, v, 1.0f)); + m_colorTable.push_back(tcu::Vec4(v, o, v, 1.0f)); + m_colorTable.push_back(tcu::Vec4(v, v, o, 1.0f)); + m_colorTable.push_back(tcu::Vec4(o, o, o, 1.0f)); + m_colorTable.push_back(tcu::Vec4(v, v, v, 1.0f)); + createMultiViewDevices(); // Color attachment @@ -522,8 +539,7 @@ void MultiViewRenderTestInstance::createMultiViewDevices (void) bool requiresGeomShader = (TEST_TYPE_VIEW_INDEX_IN_GEOMETRY == m_parameters.viewIndex) || (TEST_TYPE_INPUT_ATTACHMENTS_GEOMETRY == m_parameters.viewIndex) || - (TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY == m_parameters.viewIndex) || - (TEST_TYPE_CLEAR_ATTACHMENTS == m_parameters.viewIndex); + (TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY == m_parameters.viewIndex); if (requiresGeomShader && !multiviewFeatures.multiviewGeometryShader) TCU_THROW(NotSupportedError, "Geometry shader is not supported"); @@ -624,16 +640,19 @@ void MultiViewRenderTestInstance::madeShaderModule (map(createShaderModule(*m_device, *m_logicalDevice, m_context.getBinaryCollection().get("vertex"), 0)))); shaderModule[VK_SHADER_STAGE_FRAGMENT_BIT] = (ShaderModuleSP(new Unique(createShaderModule(*m_device, *m_logicalDevice, m_context.getBinaryCollection().get("fragment"), 0)))); break; case TEST_TYPE_VIEW_INDEX_IN_GEOMETRY: case TEST_TYPE_INPUT_ATTACHMENTS_GEOMETRY: - case TEST_TYPE_CLEAR_ATTACHMENTS: case TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY: shaderModule[VK_SHADER_STAGE_VERTEX_BIT] = (ShaderModuleSP(new Unique(createShaderModule(*m_device, *m_logicalDevice, m_context.getBinaryCollection().get("vertex"), 0)))); shaderModule[VK_SHADER_STAGE_GEOMETRY_BIT] = (ShaderModuleSP(new Unique(createShaderModule(*m_device, *m_logicalDevice, m_context.getBinaryCollection().get("geometry"), 0)))); @@ -1017,6 +1036,18 @@ const tcu::Vec4 MultiViewRenderTestInstance::getQuarterRefColor (const deUint32 case TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY: return m_vertexColor[colorNdx] + tcu::Vec4(0.0, static_cast(layerNdx) * 0.10f, 0.0, 0.0); + case TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR: + if (background) + return m_colorTable[4 + quarterNdx % 4]; + else + return m_colorTable[layerNdx % 4]; + + case TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR: + if (background) + return m_colorTable[4 + quarterNdx % 4]; + else + return m_colorTable[0]; + case TEST_TYPE_POINT_SIZE: case TEST_TYPE_MULTISAMPLE: if (background) @@ -1059,6 +1090,13 @@ void MultiViewRenderTestInstance::fillTriangle (const tcu::PixelBufferAccess& pi } } +void MultiViewRenderTestInstance::fillLayer (const tcu::PixelBufferAccess& pixelBuffer, const tcu::Vec4& color, const int layerNdx) +{ + for (deUint32 y = 0u; y < m_parameters.extent.height; ++y) + for (deUint32 x = 0u; x < m_parameters.extent.width; ++x) + pixelBuffer.setPixel(color, x, y, layerNdx); +} + MovePtr MultiViewRenderTestInstance::imageData (void) { MovePtr referenceFrame = MovePtr(new tcu::Texture2DArray(mapVkFormat(m_parameters.colorFormat), m_parameters.extent.width, m_parameters.extent.height, m_parameters.extent.depth)); @@ -1067,6 +1105,27 @@ MovePtr MultiViewRenderTestInstance::imageData (void) deMemset (referenceFrame->getLevel(0).getDataPtr(), 0, m_parameters.extent.width * m_parameters.extent.height * m_parameters.extent.depth* mapVkFormat(m_parameters.colorFormat).getPixelSize()); + if (TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR == m_parameters.viewIndex || TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR == m_parameters.viewIndex) + { + deUint32 clearedViewMask = 0; + + // Start from last clear command color, which actually takes effect + for (int subpassNdx = static_cast(subpassCount) - 1; subpassNdx >= 0; --subpassNdx) + { + deUint32 subpassToClearViewMask = m_parameters.viewMasks[subpassNdx] & ~clearedViewMask; + + if (subpassToClearViewMask == 0) + continue; + + for (deUint32 layerNdx = 0; layerNdx < m_parameters.extent.depth; ++layerNdx) + if ((subpassToClearViewMask & (1 << layerNdx)) != 0 && (clearedViewMask & (1 << layerNdx)) == 0) + fillLayer(referenceFrame->getLevel(0), getQuarterRefColor(0u, 0u, subpassNdx, false), layerNdx); + + // These has been cleared. Exclude these layers from upcoming attempts to clear + clearedViewMask |= subpassToClearViewMask; + } + } + for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++) { int layerNdx = 0; @@ -1075,6 +1134,7 @@ MovePtr MultiViewRenderTestInstance::imageData (void) while (mask > 0u) { int colorNdx = 0; + if (mask & 1u) { if (TEST_TYPE_CLEAR_ATTACHMENTS == m_parameters.viewIndex) @@ -2178,6 +2238,476 @@ void MultiViewMultsampleTestInstance::afterDraw (void) VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); } +class MultiViewQueriesTestInstance : public MultiViewRenderTestInstance +{ +public: + MultiViewQueriesTestInstance (Context& context, const TestParameters& parameters); +protected: + tcu::TestStatus iterate (void); + void createVertexData (void); + void draw (const deUint32 subpassCount, + VkRenderPass renderPass, + VkFramebuffer frameBuffer, + vector& pipelines); + deUint32 getUsedViewsCount (const deUint32 viewMaskIndex); + deUint32 getQueryCountersNumber (); +private: + const deUint32 m_verticesPerPrimitive; + deUint64 m_timestampMask; + vector m_timestampStartValues; + vector m_timestampEndValues; + vector m_counterSeriesStart; + vector m_counterSeriesEnd; + vector m_occlusionValues; + vector m_occlusionExpectedValues; + deUint32 m_occlusionObjectsOffset; + vector m_occlusionObjectPixelsCount; +}; + +MultiViewQueriesTestInstance::MultiViewQueriesTestInstance (Context& context, const TestParameters& parameters) + : MultiViewRenderTestInstance (context, parameters) + , m_verticesPerPrimitive(4u) +{ + // Generate the timestamp mask + const std::vector queueProperties = vk::getPhysicalDeviceQueueFamilyProperties(m_context.getInstanceInterface(), m_context.getPhysicalDevice()); + + if(queueProperties[0].timestampValidBits == 0) + TCU_THROW(NotSupportedError, "Device does not support timestamp."); + + m_timestampMask = 0xFFFFFFFFFFFFFFFFull >> (64 - queueProperties[0].timestampValidBits); +} + +tcu::TestStatus MultiViewQueriesTestInstance::iterate (void) +{ + const deUint32 subpassCount = static_cast(m_parameters.viewMasks.size()); + Unique renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks)); + vector attachments (1u, m_colorAttachment->getImageView()); + Unique frameBuffer (makeFramebuffer(*m_device, *m_logicalDevice, *renderPass, attachments, m_parameters.extent.width, m_parameters.extent.height, 1u)); + Unique pipelineLayout (makePipelineLayout(*m_device, *m_logicalDevice)); + vector pipelines (subpassCount); + deUint64 occlusionValue = 0; + deUint64 occlusionExpectedValue = 0; + map shaderModule; + + { + vector shaderStageParams; + + madeShaderModule(shaderModule, shaderStageParams); + for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; ++subpassNdx) + pipelines[subpassNdx] = (PipelineSp(new Unique(makeGraphicsPipeline(*renderPass, *pipelineLayout, static_cast(shaderStageParams.size()), shaderStageParams.data(), subpassNdx)))); + } + + createCommandBuffer(); + createVertexData(); + createVertexBuffer(); + + draw(subpassCount, *renderPass, *frameBuffer, pipelines); + + DE_ASSERT(!m_occlusionValues.empty()); + DE_ASSERT(m_occlusionValues.size() == m_occlusionExpectedValues.size()); + DE_ASSERT(m_occlusionValues.size() == m_counterSeriesEnd.size()); + for (size_t ndx = 0; ndx < m_counterSeriesEnd.size(); ++ndx) + { + occlusionValue += m_occlusionValues[ndx]; + occlusionExpectedValue += m_occlusionExpectedValues[ndx]; + + if (m_counterSeriesEnd[ndx]) + if (occlusionExpectedValue != occlusionValue) + return tcu::TestStatus::fail("occlusion, result:" + de::toString(occlusionValue) + ", expected:" + de::toString(occlusionExpectedValue)); + } + + DE_ASSERT(!m_timestampStartValues.empty()); + DE_ASSERT(m_timestampStartValues.size() == m_timestampEndValues.size()); + DE_ASSERT(m_timestampStartValues.size() == m_counterSeriesStart.size()); + for (size_t ndx = 0; ndx < m_timestampStartValues.size(); ++ndx) + { + if (m_counterSeriesStart[ndx]) + { + if (m_timestampEndValues[ndx] > 0 && m_timestampEndValues[ndx] >= m_timestampStartValues[ndx]) + continue; + } + else + { + if (m_timestampEndValues[ndx] > 0 && m_timestampEndValues[ndx] >= m_timestampStartValues[ndx]) + continue; + + if (m_timestampEndValues[ndx] == 0 && m_timestampStartValues[ndx] == 0) + continue; + } + + return tcu::TestStatus::fail("timestamp"); + } + + return tcu::TestStatus::pass("Pass"); +} + +void MultiViewQueriesTestInstance::createVertexData (void) +{ + tcu::Vec4 color = tcu::Vec4(0.2f, 0.0f, 0.1f, 1.0f); + + appendVertex(tcu::Vec4(-1.0f,-1.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4(-1.0f, 0.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 0.0f,-1.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 0.0f, 0.0f, 0.0f, 1.0f), color); + + color = tcu::Vec4(0.3f, 0.0f, 0.2f, 1.0f); + appendVertex(tcu::Vec4(-1.0f, 0.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4(-1.0f, 1.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 0.0f, 0.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 0.0f, 1.0f, 0.0f, 1.0f), color); + + color = tcu::Vec4(0.4f, 0.2f, 0.3f, 1.0f); + appendVertex(tcu::Vec4( 0.0f,-1.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 0.0f, 0.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 1.0f,-1.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 1.0f, 0.0f, 0.0f, 1.0f), color); + + color = tcu::Vec4(0.5f, 0.0f, 0.4f, 1.0f); + appendVertex(tcu::Vec4( 0.0f, 0.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 0.0f, 1.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 1.0f, 0.0f, 0.0f, 1.0f), color); + appendVertex(tcu::Vec4( 1.0f, 1.0f, 0.0f, 1.0f), color); + + // Create occluded square objects as zoom out of main + const deUint32 mainObjectsVerticesCount = static_cast(m_vertexCoord.size()); + const deUint32 mainObjectsCount = mainObjectsVerticesCount / m_verticesPerPrimitive; + const deUint32 occlusionObjectMultiplierX[] = { 1, 2, 2, 1 }; + const deUint32 occlusionObjectMultiplierY[] = { 1, 1, 3, 3 }; + const deUint32 occlusionObjectDivisor = 4u; + const float occlusionObjectDivisorFloat = static_cast(occlusionObjectDivisor); + + DE_ASSERT(0 == m_parameters.extent.width % (2 * occlusionObjectDivisor)); + DE_ASSERT(0 == m_parameters.extent.height % (2 * occlusionObjectDivisor)); + DE_ASSERT(DE_LENGTH_OF_ARRAY(occlusionObjectMultiplierX) == mainObjectsCount); + DE_ASSERT(DE_LENGTH_OF_ARRAY(occlusionObjectMultiplierY) == mainObjectsCount); + + for (size_t objectNdx = 0; objectNdx < mainObjectsCount; ++objectNdx) + { + const size_t objectStart = objectNdx * m_verticesPerPrimitive; + const float xRatio = static_cast(occlusionObjectMultiplierX[objectNdx]) / occlusionObjectDivisorFloat; + const float yRatio = static_cast(occlusionObjectMultiplierY[objectNdx]) / occlusionObjectDivisorFloat; + const double areaRatio = static_cast(xRatio) * static_cast(yRatio); + const deUint64 occludedPixelsCount = static_cast(areaRatio * (m_parameters.extent.width / 2) * (m_parameters.extent.height / 2)); + + m_occlusionObjectPixelsCount.push_back(occludedPixelsCount); + + for (size_t vertexNdx = 0; vertexNdx < m_verticesPerPrimitive; ++vertexNdx) + { + const float occludedObjectVertexXCoord = m_vertexCoord[objectStart + vertexNdx][0] * xRatio; + const float occludedObjectVertexYCoord = m_vertexCoord[objectStart + vertexNdx][1] * yRatio; + const tcu::Vec4 occludedObjectVertexCoord = tcu::Vec4(occludedObjectVertexXCoord, occludedObjectVertexYCoord, 1.0f, 1.0f); + + appendVertex(occludedObjectVertexCoord, m_vertexColor[objectStart + vertexNdx]); + } + } + + m_occlusionObjectsOffset = mainObjectsVerticesCount; +} + +void MultiViewQueriesTestInstance::draw (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector& pipelines) +{ + const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } }; + const VkClearValue renderPassClearValue = makeClearValueColor(tcu::Vec4(0.0f)); + const VkBuffer vertexBuffers[] = { *m_vertexCoordBuffer, *m_vertexColorBuffer }; + const VkDeviceSize vertexBufferOffsets[] = { 0u, 0u }; + const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u; + const deUint32 queryCountersNumber = (subpassCount == 1) ? m_squareCount * getUsedViewsCount(0) : getQueryCountersNumber(); + const VkRenderPassBeginInfo renderPassBeginInfo = + { + VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // VkStructureType sType; + DE_NULL, // const void* pNext; + renderPass, // VkRenderPass renderPass; + frameBuffer, // VkFramebuffer framebuffer; + renderArea, // VkRect2D renderArea; + 1u, // uint32_t clearValueCount; + &renderPassClearValue, // const VkClearValue* pClearValues; + }; + const VkQueryPoolCreateInfo occlusionQueryPoolCreateInfo = + { + VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, // VkStructureType sType; + DE_NULL, // const void* pNext; + (VkQueryPoolCreateFlags)0, // VkQueryPoolCreateFlags flags; + VK_QUERY_TYPE_OCCLUSION, // VkQueryType queryType; + queryCountersNumber, // deUint32 queryCount; + 0u, // VkQueryPipelineStatisticFlags pipelineStatistics; + }; + const VkQueryPoolCreateInfo timestampQueryPoolCreateInfo = + { + VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, // VkStructureType sType; + DE_NULL, // const void* pNext; + (VkQueryPoolCreateFlags)0, // VkQueryPoolCreateFlags flags; + VK_QUERY_TYPE_TIMESTAMP, // VkQueryType queryType; + queryCountersNumber, // deUint32 queryCount; + 0u, // VkQueryPipelineStatisticFlags pipelineStatistics; + }; + const Unique occlusionQueryPool (createQueryPool(*m_device, *m_logicalDevice, &occlusionQueryPoolCreateInfo)); + const Unique timestampStartQueryPool (createQueryPool(*m_device, *m_logicalDevice, ×tampQueryPoolCreateInfo)); + const Unique timestampEndQueryPool (createQueryPool(*m_device, *m_logicalDevice, ×tampQueryPoolCreateInfo)); + VkQueryControlFlags occlusionQueryFlags = VK_QUERY_CONTROL_PRECISE_BIT; + deUint32 queryStartIndex = 0; + + beginCommandBuffer(*m_device, *m_cmdBuffer); + + beforeDraw(); + + m_device->cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + + 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); + + for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++) + { + deUint32 queryCountersToUse = getUsedViewsCount(subpassNdx); + + m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]); + + for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx) + { + const deUint32 primitiveNumber = drawNdx + subpassNdx % m_squareCount; + const deUint32 firstVertex = primitiveNumber * m_verticesPerPrimitive; + + m_device->cmdWriteTimestamp(*m_cmdBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, *timestampStartQueryPool, queryStartIndex); + { + m_device->cmdDraw(*m_cmdBuffer, m_verticesPerPrimitive, 1u, firstVertex, 0u); + + // Render occluded object + m_device->cmdBeginQuery(*m_cmdBuffer, *occlusionQueryPool, queryStartIndex, occlusionQueryFlags); + m_device->cmdDraw(*m_cmdBuffer, m_verticesPerPrimitive, 1u, m_occlusionObjectsOffset + firstVertex, 0u); + m_device->cmdEndQuery(*m_cmdBuffer, *occlusionQueryPool, queryStartIndex); + + for (deUint32 viewMaskNdx = 0; viewMaskNdx < queryCountersToUse; ++viewMaskNdx) + { + m_occlusionExpectedValues.push_back(m_occlusionObjectPixelsCount[primitiveNumber]); + m_counterSeriesStart.push_back(viewMaskNdx == 0); + m_counterSeriesEnd.push_back(viewMaskNdx + 1 == queryCountersToUse); + } + } + m_device->cmdWriteTimestamp(*m_cmdBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, *timestampEndQueryPool, queryStartIndex); + + queryStartIndex += queryCountersToUse; + } + + if (subpassNdx < subpassCount - 1u) + m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE); + } + + DE_ASSERT(queryStartIndex == queryCountersNumber); + + m_device->cmdEndRenderPass(*m_cmdBuffer); + + afterDraw(); + + VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer)); + submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer); + + m_occlusionValues.resize(queryCountersNumber, 0ull); + m_device->getQueryPoolResults(*m_logicalDevice, *occlusionQueryPool, 0u, queryCountersNumber, sizeof(deUint64) * queryCountersNumber, (void*)&m_occlusionValues[0], sizeof(deUint64), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT); + + m_timestampStartValues.resize(queryCountersNumber, 0ull); + m_device->getQueryPoolResults(*m_logicalDevice, *timestampStartQueryPool, 0u, queryCountersNumber, sizeof(deUint64) * queryCountersNumber, (void*)&m_timestampStartValues[0], sizeof(deUint64), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT); + for (deUint32 ndx = 0; ndx < m_timestampStartValues.size(); ++ndx) + m_timestampStartValues[ndx] &= m_timestampMask; + + m_timestampEndValues.resize(queryCountersNumber, 0ull); + m_device->getQueryPoolResults(*m_logicalDevice, *timestampEndQueryPool, 0u, queryCountersNumber, sizeof(deUint64) * queryCountersNumber, (void*)&m_timestampEndValues[0], sizeof(deUint64), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT); + for (deUint32 ndx = 0; ndx < m_timestampEndValues.size(); ++ndx) + m_timestampEndValues[ndx] &= m_timestampMask; +} + +deUint32 MultiViewQueriesTestInstance::getUsedViewsCount (const deUint32 viewMaskIndex) +{ + deUint32 result = 0; + + for (deUint32 viewMask = m_parameters.viewMasks[viewMaskIndex]; viewMask != 0; viewMask >>= 1) + if ((viewMask & 1) != 0) + result++; + + return result; +} + +deUint32 MultiViewQueriesTestInstance::getQueryCountersNumber () +{ + deUint32 result = 0; + + for (deUint32 i = 0; i < m_parameters.viewMasks.size(); ++i) + result += getUsedViewsCount(i); + + return result; +} + +class MultiViewReadbackTestInstance : public MultiViewRenderTestInstance +{ +public: + MultiViewReadbackTestInstance (Context& context, const TestParameters& parameters); +protected: + tcu::TestStatus iterate (void); + void beforeDraw (void); + void drawClears (const deUint32 subpassCount, + VkRenderPass renderPass, + VkFramebuffer frameBuffer, + vector& pipelines, + const bool clearPass); + void clear (const VkCommandBuffer commandBuffer, + const VkRect2D& clearRect2D, + const tcu::Vec4& clearColor); +private: + vector m_quarters; +}; + +MultiViewReadbackTestInstance::MultiViewReadbackTestInstance (Context& context, const TestParameters& parameters) + : MultiViewRenderTestInstance (context, parameters) +{ + const deUint32 halfWidth = m_parameters.extent.width / 2; + const deUint32 halfHeight = m_parameters.extent.height / 2; + + for (deInt32 x = 0; x < 2; ++x) + for (deInt32 y = 0; y < 2; ++y) + { + const deInt32 offsetX = static_cast(halfWidth) * x; + const deInt32 offsetY = static_cast(halfHeight) * y; + const VkRect2D area = { { offsetX, offsetY}, {halfWidth, halfHeight} }; + + m_quarters.push_back(area); + } +} + +tcu::TestStatus MultiViewReadbackTestInstance::iterate (void) +{ + const deUint32 subpassCount = static_cast(m_parameters.viewMasks.size()); + + createCommandBuffer(); + + for (deUint32 pass = 0; pass < 2; ++pass) + { + const bool fullClearPass = (pass == 0); + const VkAttachmentLoadOp loadOp = (!fullClearPass) ? VK_ATTACHMENT_LOAD_OP_LOAD : + (m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR) ? VK_ATTACHMENT_LOAD_OP_CLEAR : + (m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR) ? VK_ATTACHMENT_LOAD_OP_DONT_CARE : + VK_ATTACHMENT_LOAD_OP_LAST; + Unique renderPass (makeRenderPass (*m_device, *m_logicalDevice, m_parameters.colorFormat, m_parameters.viewMasks, VK_SAMPLE_COUNT_1_BIT, loadOp)); + vector attachments (1u, m_colorAttachment->getImageView()); + Unique frameBuffer (makeFramebuffer(*m_device, *m_logicalDevice, *renderPass, attachments, m_parameters.extent.width, m_parameters.extent.height, 1u)); + Unique pipelineLayout (makePipelineLayout(*m_device, *m_logicalDevice)); + vector pipelines (subpassCount); + map shaderModule; + + { + vector shaderStageParams; + madeShaderModule(shaderModule, shaderStageParams); + for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; ++subpassNdx) + pipelines[subpassNdx] = (PipelineSp(new Unique(makeGraphicsPipeline(*renderPass, *pipelineLayout, static_cast(shaderStageParams.size()), shaderStageParams.data(), subpassNdx)))); + } + + drawClears(subpassCount, *renderPass, *frameBuffer, pipelines, fullClearPass); + } + + { + vector pixelAccessData (m_parameters.extent.width * m_parameters.extent.height * m_parameters.extent.depth * mapVkFormat(m_parameters.colorFormat).getPixelSize()); + tcu::PixelBufferAccess dst (mapVkFormat(m_parameters.colorFormat), m_parameters.extent.width, m_parameters.extent.height, m_parameters.extent.depth, pixelAccessData.data()); + + readImage(m_colorAttachment->getImage(), dst); + + if (!checkImage(dst)) + return tcu::TestStatus::fail("Fail"); + } + + return tcu::TestStatus::pass("Pass"); +} + +void MultiViewReadbackTestInstance::beforeDraw (void) +{ + const VkImageSubresourceRange subresourceRange = + { + VK_IMAGE_ASPECT_COLOR_BIT, //VkImageAspectFlags aspectMask; + 0u, //deUint32 baseMipLevel; + 1u, //deUint32 levelCount; + 0u, //deUint32 baseArrayLayer; + m_parameters.extent.depth, //deUint32 layerCount; + }; + + imageBarrier(*m_device, *m_cmdBuffer, m_colorAttachment->getImage(), subresourceRange, + VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + 0, 0, + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT); +} + +void MultiViewReadbackTestInstance::drawClears (const deUint32 subpassCount, VkRenderPass renderPass, VkFramebuffer frameBuffer, vector& pipelines, const bool clearPass) +{ + const VkRect2D renderArea = { { 0, 0 }, { m_parameters.extent.width, m_parameters.extent.height } }; + const VkClearValue renderPassClearValue = makeClearValueColor(m_colorTable[0]); + const deUint32 drawCountPerSubpass = (subpassCount == 1) ? m_squareCount : 1u; + const bool withClearColor = (clearPass && m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR); + const VkRenderPassBeginInfo renderPassBeginInfo = + { + VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // VkStructureType sType; + DE_NULL, // const void* pNext; + renderPass, // VkRenderPass renderPass; + frameBuffer, // VkFramebuffer framebuffer; + renderArea, // VkRect2D renderArea; + withClearColor ? 1u : 0u, // uint32_t clearValueCount; + withClearColor ? &renderPassClearValue : DE_NULL, // const VkClearValue* pClearValues; + }; + + beginCommandBuffer(*m_device, *m_cmdBuffer); + + if (clearPass) + beforeDraw(); + + m_device->cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + + for (deUint32 subpassNdx = 0u; subpassNdx < subpassCount; subpassNdx++) + { + m_device->cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[subpassNdx]); + + if (clearPass) + { + if (m_parameters.viewIndex == TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR) + clear(*m_cmdBuffer, renderArea, m_colorTable[subpassNdx % 4]); + } + else + { + for (deUint32 drawNdx = 0u; drawNdx < drawCountPerSubpass; ++drawNdx) + { + const deUint32 primitiveNumber = drawNdx + subpassNdx % m_squareCount; + + clear(*m_cmdBuffer, m_quarters[primitiveNumber], m_colorTable[4 + primitiveNumber]); + } + } + + if (subpassNdx < subpassCount - 1u) + m_device->cmdNextSubpass(*m_cmdBuffer, VK_SUBPASS_CONTENTS_INLINE); + } + + m_device->cmdEndRenderPass(*m_cmdBuffer); + + if (!clearPass) + afterDraw(); + + VK_CHECK(m_device->endCommandBuffer(*m_cmdBuffer)); + submitCommandsAndWait(*m_device, *m_logicalDevice, m_queue, *m_cmdBuffer); +} + +void MultiViewReadbackTestInstance::clear (const VkCommandBuffer commandBuffer, const VkRect2D& clearRect2D, const tcu::Vec4& clearColor) +{ + const VkClearRect clearRect = + { + clearRect2D, // VkRect2D rect + 0u, // deUint32 baseArrayLayer + 1u, // deUint32 layerCount + }; + const VkClearAttachment clearAttachment = + { + VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspectMask + 0u, // deUint32 colorAttachment + makeClearValueColor(clearColor) // VkClearValue clearValue + }; + + m_device->cmdClearAttachments(commandBuffer, 1u, &clearAttachment, 1u, &clearRect); +} + class MultiViewRenderTestsCase : public vkt::TestCase { public: @@ -2219,6 +2749,9 @@ private: if (TEST_TYPE_MULTISAMPLE == m_parameters.viewIndex) return new MultiViewMultsampleTestInstance(context, m_parameters); + if (TEST_TYPE_QUERIES == m_parameters.viewIndex) + return new MultiViewQueriesTestInstance(context, m_parameters); + if (TEST_TYPE_VIEW_MASK == m_parameters.viewIndex || TEST_TYPE_VIEW_INDEX_IN_VERTEX == m_parameters.viewIndex || TEST_TYPE_VIEW_INDEX_IN_FRAGMENT == m_parameters.viewIndex || @@ -2227,6 +2760,10 @@ private: TEST_TYPE_DRAW_INDEXED == m_parameters.viewIndex) return new MultiViewRenderTestInstance(context, m_parameters); + if (TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR == m_parameters.viewIndex || + TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR == m_parameters.viewIndex) + return new MultiViewReadbackTestInstance(context, m_parameters); + TCU_THROW(InternalError, "Unknown test type"); } @@ -2302,6 +2839,10 @@ private: } else { + const bool generateColor = (TEST_TYPE_VIEW_INDEX_IN_VERTEX == m_parameters.viewIndex) + || (TEST_TYPE_DRAW_INDIRECT == m_parameters.viewIndex) + || (TEST_TYPE_DRAW_INDIRECT_INDEXED == m_parameters.viewIndex) + || (TEST_TYPE_CLEAR_ATTACHMENTS == m_parameters.viewIndex); std::ostringstream source; source << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n" << "#extension GL_EXT_multiview : enable\n" @@ -2311,7 +2852,7 @@ private: << "void main (void)\n" << "{\n" << " gl_Position = in_position;\n"; - if (TEST_TYPE_VIEW_INDEX_IN_VERTEX == m_parameters.viewIndex || TEST_TYPE_DRAW_INDIRECT == m_parameters.viewIndex || TEST_TYPE_DRAW_INDIRECT_INDEXED == m_parameters.viewIndex) + if (generateColor) source << " out_color = in_color + vec4(0.0, gl_ViewIndex * 0.10f, 0.0, 0.0);\n"; else source << " out_color = in_color;\n"; @@ -2365,7 +2906,6 @@ private: if (TEST_TYPE_VIEW_INDEX_IN_GEOMETRY == m_parameters.viewIndex || TEST_TYPE_INPUT_ATTACHMENTS_GEOMETRY == m_parameters.viewIndex || - TEST_TYPE_CLEAR_ATTACHMENTS == m_parameters.viewIndex || TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY == m_parameters.viewIndex) {// Geometry Shader std::ostringstream source; @@ -2432,7 +2972,7 @@ private: void multiViewRenderCreateTests (tcu::TestCaseGroup* group) { tcu::TestContext& testCtx = group->getTestContext(); - const deUint32 testCaseCount = 6u; + const deUint32 testCaseCount = 7u; MovePtr groupViewIndex (new tcu::TestCaseGroup(testCtx, "index", "ViewIndex rendering tests.")); const string shaderName[TEST_TYPE_LAST] = { @@ -2453,6 +2993,9 @@ void multiViewRenderCreateTests (tcu::TestCaseGroup* group) "secondary_cmd_buffer_geometry", "point_size", "multisample", + "queries", + "readback_implicit_clear", + "readback_explicit_clear", }; const VkExtent3D extent3D[testCaseCount] = { @@ -2461,6 +3004,7 @@ void multiViewRenderCreateTests (tcu::TestCaseGroup* group) {128u, 128u, 4u}, {32u, 32u, 5u}, {64u, 64u, 6u}, + {32u, 32u, 4u}, {16u, 16u, 10u}, }; vector viewMasks[testCaseCount]; @@ -2484,11 +3028,16 @@ void multiViewRenderCreateTests (tcu::TestCaseGroup* group) viewMasks[4].push_back(1u); //0001 viewMasks[4].push_back(8u); //1000 + viewMasks[5].push_back(5u); //0101 + viewMasks[5].push_back(10u); //1010 + viewMasks[5].push_back(5u); //0101 + viewMasks[5].push_back(10u); //1010 + const deUint32 minSupportedMultiviewViewCount = 6u; const deUint32 maxViewMask = (1u << minSupportedMultiviewViewCount) - 1u; for (deUint32 mask = 1u; mask <= maxViewMask; mask = mask << 1u) - viewMasks[5].push_back(mask); + viewMasks[testCaseCount - 1].push_back(mask); for (int testTypeNdx = TEST_TYPE_VIEW_MASK; testTypeNdx < TEST_TYPE_LAST; ++testTypeNdx) { @@ -2536,6 +3085,9 @@ void multiViewRenderCreateTests (tcu::TestCaseGroup* group) case TEST_TYPE_SECONDARY_CMD_BUFFER_GEOMETRY: case TEST_TYPE_POINT_SIZE: case TEST_TYPE_MULTISAMPLE: + case TEST_TYPE_QUERIES: + case TEST_TYPE_READBACK_WITH_IMPLICIT_CLEAR: + case TEST_TYPE_READBACK_WITH_EXPLICIT_CLEAR: group->addChild(groupShader.release()); break; case TEST_TYPE_VIEW_INDEX_IN_VERTEX: diff --git a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.cpp b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.cpp index b07fbd4..bfbe068 100644 --- a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.cpp +++ b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.cpp @@ -188,7 +188,8 @@ Move makeRenderPass (const DeviceInterface& vk, const VkDevice device, const VkFormat colorFormat, const vector& viewMasks, - const VkSampleCountFlagBits samples) + const VkSampleCountFlagBits samples, + const VkAttachmentLoadOp colorLoadOp) { const deUint32 subpassCount = static_cast(viewMasks.size()); @@ -197,7 +198,7 @@ Move makeRenderPass (const DeviceInterface& vk, (VkAttachmentDescriptionFlags)0, // VkAttachmentDescriptionFlags flags; colorFormat, // VkFormat format; samples, // VkSampleCountFlagBits samples; - VK_ATTACHMENT_LOAD_OP_CLEAR, // VkAttachmentLoadOp loadOp; + colorLoadOp, // VkAttachmentLoadOp loadOp; VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp; VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp stencilLoadOp; VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp stencilStoreOp; diff --git a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.hpp b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.hpp index 295d6c1..f9a45f5 100644 --- a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.hpp +++ b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.hpp @@ -39,7 +39,7 @@ vk::Move makeImageView (const vk::DeviceInterface& vk, co vk::Move makeFramebuffer (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkRenderPass renderPass, const std::vector& attachments, const deUint32 width, const deUint32 height, const deUint32 layers); vk::Move makePipelineLayout (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkDescriptorSetLayout* pSetLayouts = DE_NULL); vk::Move makeDescriptorSetLayout (const vk::DeviceInterface& vk, const vk::VkDevice device); -vk::Move makeRenderPass (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector& viewMasks, const vk::VkSampleCountFlagBits samples = vk::VK_SAMPLE_COUNT_1_BIT); +vk::Move makeRenderPass (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector& viewMasks, const vk::VkSampleCountFlagBits samples = vk::VK_SAMPLE_COUNT_1_BIT, const vk::VkAttachmentLoadOp colorLoadOp = vk::VK_ATTACHMENT_LOAD_OP_CLEAR); vk::Move makeRenderPassWithAttachments (const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkFormat colorFormat, const std::vector& viewMasks); void beginCommandBuffer (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer); void beginSecondaryCommandBuffer (const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer, const vk::VkRenderPass renderPass, const deUint32 subpass, const vk::VkFramebuffer framebuffer); 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 8264073..e656273 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 @@ -280206,6 +280206,7 @@ dEQP-VK.multiview.masks.8 dEQP-VK.multiview.masks.1_2_4_8 dEQP-VK.multiview.masks.15_15_15_15 dEQP-VK.multiview.masks.8_1_1_8 +dEQP-VK.multiview.masks.5_10_5_10 dEQP-VK.multiview.masks.1_2_4_8_16_32 dEQP-VK.multiview.masks.max_multi_view_view_count dEQP-VK.multiview.input_attachments.15 @@ -280213,6 +280214,7 @@ dEQP-VK.multiview.input_attachments.8 dEQP-VK.multiview.input_attachments.1_2_4_8 dEQP-VK.multiview.input_attachments.15_15_15_15 dEQP-VK.multiview.input_attachments.8_1_1_8 +dEQP-VK.multiview.input_attachments.5_10_5_10 dEQP-VK.multiview.input_attachments.1_2_4_8_16_32 dEQP-VK.multiview.input_attachments.max_multi_view_view_count dEQP-VK.multiview.input_attachments_geometry.15 @@ -280220,6 +280222,7 @@ dEQP-VK.multiview.input_attachments_geometry.8 dEQP-VK.multiview.input_attachments_geometry.1_2_4_8 dEQP-VK.multiview.input_attachments_geometry.15_15_15_15 dEQP-VK.multiview.input_attachments_geometry.8_1_1_8 +dEQP-VK.multiview.input_attachments_geometry.5_10_5_10 dEQP-VK.multiview.input_attachments_geometry.1_2_4_8_16_32 dEQP-VK.multiview.input_attachments_geometry.max_multi_view_view_count dEQP-VK.multiview.instanced.15 @@ -280227,6 +280230,7 @@ dEQP-VK.multiview.instanced.8 dEQP-VK.multiview.instanced.1_2_4_8 dEQP-VK.multiview.instanced.15_15_15_15 dEQP-VK.multiview.instanced.8_1_1_8 +dEQP-VK.multiview.instanced.5_10_5_10 dEQP-VK.multiview.instanced.1_2_4_8_16_32 dEQP-VK.multiview.instanced.max_multi_view_view_count dEQP-VK.multiview.input_instance.15 @@ -280234,6 +280238,7 @@ dEQP-VK.multiview.input_instance.8 dEQP-VK.multiview.input_instance.1_2_4_8 dEQP-VK.multiview.input_instance.15_15_15_15 dEQP-VK.multiview.input_instance.8_1_1_8 +dEQP-VK.multiview.input_instance.5_10_5_10 dEQP-VK.multiview.input_instance.1_2_4_8_16_32 dEQP-VK.multiview.input_instance.max_multi_view_view_count dEQP-VK.multiview.draw_indirect.15 @@ -280241,6 +280246,7 @@ dEQP-VK.multiview.draw_indirect.8 dEQP-VK.multiview.draw_indirect.1_2_4_8 dEQP-VK.multiview.draw_indirect.15_15_15_15 dEQP-VK.multiview.draw_indirect.8_1_1_8 +dEQP-VK.multiview.draw_indirect.5_10_5_10 dEQP-VK.multiview.draw_indirect.1_2_4_8_16_32 dEQP-VK.multiview.draw_indirect.max_multi_view_view_count dEQP-VK.multiview.draw_indirect_indexed.15 @@ -280248,6 +280254,7 @@ dEQP-VK.multiview.draw_indirect_indexed.8 dEQP-VK.multiview.draw_indirect_indexed.1_2_4_8 dEQP-VK.multiview.draw_indirect_indexed.15_15_15_15 dEQP-VK.multiview.draw_indirect_indexed.8_1_1_8 +dEQP-VK.multiview.draw_indirect_indexed.5_10_5_10 dEQP-VK.multiview.draw_indirect_indexed.1_2_4_8_16_32 dEQP-VK.multiview.draw_indirect_indexed.max_multi_view_view_count dEQP-VK.multiview.draw_indexed.15 @@ -280255,6 +280262,7 @@ dEQP-VK.multiview.draw_indexed.8 dEQP-VK.multiview.draw_indexed.1_2_4_8 dEQP-VK.multiview.draw_indexed.15_15_15_15 dEQP-VK.multiview.draw_indexed.8_1_1_8 +dEQP-VK.multiview.draw_indexed.5_10_5_10 dEQP-VK.multiview.draw_indexed.1_2_4_8_16_32 dEQP-VK.multiview.draw_indexed.max_multi_view_view_count dEQP-VK.multiview.clear_attachments.15 @@ -280262,6 +280270,7 @@ dEQP-VK.multiview.clear_attachments.8 dEQP-VK.multiview.clear_attachments.1_2_4_8 dEQP-VK.multiview.clear_attachments.15_15_15_15 dEQP-VK.multiview.clear_attachments.8_1_1_8 +dEQP-VK.multiview.clear_attachments.5_10_5_10 dEQP-VK.multiview.clear_attachments.1_2_4_8_16_32 dEQP-VK.multiview.clear_attachments.max_multi_view_view_count dEQP-VK.multiview.secondary_cmd_buffer.15 @@ -280269,6 +280278,7 @@ dEQP-VK.multiview.secondary_cmd_buffer.8 dEQP-VK.multiview.secondary_cmd_buffer.1_2_4_8 dEQP-VK.multiview.secondary_cmd_buffer.15_15_15_15 dEQP-VK.multiview.secondary_cmd_buffer.8_1_1_8 +dEQP-VK.multiview.secondary_cmd_buffer.5_10_5_10 dEQP-VK.multiview.secondary_cmd_buffer.1_2_4_8_16_32 dEQP-VK.multiview.secondary_cmd_buffer.max_multi_view_view_count dEQP-VK.multiview.secondary_cmd_buffer_geometry.15 @@ -280276,6 +280286,7 @@ dEQP-VK.multiview.secondary_cmd_buffer_geometry.8 dEQP-VK.multiview.secondary_cmd_buffer_geometry.1_2_4_8 dEQP-VK.multiview.secondary_cmd_buffer_geometry.15_15_15_15 dEQP-VK.multiview.secondary_cmd_buffer_geometry.8_1_1_8 +dEQP-VK.multiview.secondary_cmd_buffer_geometry.5_10_5_10 dEQP-VK.multiview.secondary_cmd_buffer_geometry.1_2_4_8_16_32 dEQP-VK.multiview.secondary_cmd_buffer_geometry.max_multi_view_view_count dEQP-VK.multiview.point_size.15 @@ -280283,6 +280294,7 @@ dEQP-VK.multiview.point_size.8 dEQP-VK.multiview.point_size.1_2_4_8 dEQP-VK.multiview.point_size.15_15_15_15 dEQP-VK.multiview.point_size.8_1_1_8 +dEQP-VK.multiview.point_size.5_10_5_10 dEQP-VK.multiview.point_size.1_2_4_8_16_32 dEQP-VK.multiview.point_size.max_multi_view_view_count dEQP-VK.multiview.multisample.15 @@ -280290,13 +280302,39 @@ dEQP-VK.multiview.multisample.8 dEQP-VK.multiview.multisample.1_2_4_8 dEQP-VK.multiview.multisample.15_15_15_15 dEQP-VK.multiview.multisample.8_1_1_8 +dEQP-VK.multiview.multisample.5_10_5_10 dEQP-VK.multiview.multisample.1_2_4_8_16_32 dEQP-VK.multiview.multisample.max_multi_view_view_count +dEQP-VK.multiview.queries.15 +dEQP-VK.multiview.queries.8 +dEQP-VK.multiview.queries.1_2_4_8 +dEQP-VK.multiview.queries.15_15_15_15 +dEQP-VK.multiview.queries.8_1_1_8 +dEQP-VK.multiview.queries.5_10_5_10 +dEQP-VK.multiview.queries.1_2_4_8_16_32 +dEQP-VK.multiview.queries.max_multi_view_view_count +dEQP-VK.multiview.readback_implicit_clear.15 +dEQP-VK.multiview.readback_implicit_clear.8 +dEQP-VK.multiview.readback_implicit_clear.1_2_4_8 +dEQP-VK.multiview.readback_implicit_clear.15_15_15_15 +dEQP-VK.multiview.readback_implicit_clear.8_1_1_8 +dEQP-VK.multiview.readback_implicit_clear.5_10_5_10 +dEQP-VK.multiview.readback_implicit_clear.1_2_4_8_16_32 +dEQP-VK.multiview.readback_implicit_clear.max_multi_view_view_count +dEQP-VK.multiview.readback_explicit_clear.15 +dEQP-VK.multiview.readback_explicit_clear.8 +dEQP-VK.multiview.readback_explicit_clear.1_2_4_8 +dEQP-VK.multiview.readback_explicit_clear.15_15_15_15 +dEQP-VK.multiview.readback_explicit_clear.8_1_1_8 +dEQP-VK.multiview.readback_explicit_clear.5_10_5_10 +dEQP-VK.multiview.readback_explicit_clear.1_2_4_8_16_32 +dEQP-VK.multiview.readback_explicit_clear.max_multi_view_view_count dEQP-VK.multiview.index.vertex_shader.15 dEQP-VK.multiview.index.vertex_shader.8 dEQP-VK.multiview.index.vertex_shader.1_2_4_8 dEQP-VK.multiview.index.vertex_shader.15_15_15_15 dEQP-VK.multiview.index.vertex_shader.8_1_1_8 +dEQP-VK.multiview.index.vertex_shader.5_10_5_10 dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.vertex_shader.max_multi_view_view_count dEQP-VK.multiview.index.fragment_shader.15 @@ -280304,6 +280342,7 @@ dEQP-VK.multiview.index.fragment_shader.8 dEQP-VK.multiview.index.fragment_shader.1_2_4_8 dEQP-VK.multiview.index.fragment_shader.15_15_15_15 dEQP-VK.multiview.index.fragment_shader.8_1_1_8 +dEQP-VK.multiview.index.fragment_shader.5_10_5_10 dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.fragment_shader.max_multi_view_view_count dEQP-VK.multiview.index.geometry_shader.15 @@ -280311,6 +280350,7 @@ dEQP-VK.multiview.index.geometry_shader.8 dEQP-VK.multiview.index.geometry_shader.1_2_4_8 dEQP-VK.multiview.index.geometry_shader.15_15_15_15 dEQP-VK.multiview.index.geometry_shader.8_1_1_8 +dEQP-VK.multiview.index.geometry_shader.5_10_5_10 dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.geometry_shader.max_multi_view_view_count dEQP-VK.multiview.index.tesellation_shader.15 @@ -280318,6 +280358,7 @@ dEQP-VK.multiview.index.tesellation_shader.8 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8 dEQP-VK.multiview.index.tesellation_shader.15_15_15_15 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8 +dEQP-VK.multiview.index.tesellation_shader.5_10_5_10 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count dEQP-VK.subgroups.builtin_var.subgroupsize_graphic diff --git a/external/vulkancts/mustpass/1.1.2/vk-default.txt b/external/vulkancts/mustpass/1.1.2/vk-default.txt index 6569c4c..53ecd9f 100644 --- a/external/vulkancts/mustpass/1.1.2/vk-default.txt +++ b/external/vulkancts/mustpass/1.1.2/vk-default.txt @@ -280167,6 +280167,7 @@ dEQP-VK.multiview.masks.8 dEQP-VK.multiview.masks.1_2_4_8 dEQP-VK.multiview.masks.15_15_15_15 dEQP-VK.multiview.masks.8_1_1_8 +dEQP-VK.multiview.masks.5_10_5_10 dEQP-VK.multiview.masks.1_2_4_8_16_32 dEQP-VK.multiview.masks.max_multi_view_view_count dEQP-VK.multiview.input_attachments.15 @@ -280174,6 +280175,7 @@ dEQP-VK.multiview.input_attachments.8 dEQP-VK.multiview.input_attachments.1_2_4_8 dEQP-VK.multiview.input_attachments.15_15_15_15 dEQP-VK.multiview.input_attachments.8_1_1_8 +dEQP-VK.multiview.input_attachments.5_10_5_10 dEQP-VK.multiview.input_attachments.1_2_4_8_16_32 dEQP-VK.multiview.input_attachments.max_multi_view_view_count dEQP-VK.multiview.input_attachments_geometry.15 @@ -280181,6 +280183,7 @@ dEQP-VK.multiview.input_attachments_geometry.8 dEQP-VK.multiview.input_attachments_geometry.1_2_4_8 dEQP-VK.multiview.input_attachments_geometry.15_15_15_15 dEQP-VK.multiview.input_attachments_geometry.8_1_1_8 +dEQP-VK.multiview.input_attachments_geometry.5_10_5_10 dEQP-VK.multiview.input_attachments_geometry.1_2_4_8_16_32 dEQP-VK.multiview.input_attachments_geometry.max_multi_view_view_count dEQP-VK.multiview.instanced.15 @@ -280188,6 +280191,7 @@ dEQP-VK.multiview.instanced.8 dEQP-VK.multiview.instanced.1_2_4_8 dEQP-VK.multiview.instanced.15_15_15_15 dEQP-VK.multiview.instanced.8_1_1_8 +dEQP-VK.multiview.instanced.5_10_5_10 dEQP-VK.multiview.instanced.1_2_4_8_16_32 dEQP-VK.multiview.instanced.max_multi_view_view_count dEQP-VK.multiview.input_instance.15 @@ -280195,6 +280199,7 @@ dEQP-VK.multiview.input_instance.8 dEQP-VK.multiview.input_instance.1_2_4_8 dEQP-VK.multiview.input_instance.15_15_15_15 dEQP-VK.multiview.input_instance.8_1_1_8 +dEQP-VK.multiview.input_instance.5_10_5_10 dEQP-VK.multiview.input_instance.1_2_4_8_16_32 dEQP-VK.multiview.input_instance.max_multi_view_view_count dEQP-VK.multiview.draw_indirect.15 @@ -280202,6 +280207,7 @@ dEQP-VK.multiview.draw_indirect.8 dEQP-VK.multiview.draw_indirect.1_2_4_8 dEQP-VK.multiview.draw_indirect.15_15_15_15 dEQP-VK.multiview.draw_indirect.8_1_1_8 +dEQP-VK.multiview.draw_indirect.5_10_5_10 dEQP-VK.multiview.draw_indirect.1_2_4_8_16_32 dEQP-VK.multiview.draw_indirect.max_multi_view_view_count dEQP-VK.multiview.draw_indirect_indexed.15 @@ -280209,6 +280215,7 @@ dEQP-VK.multiview.draw_indirect_indexed.8 dEQP-VK.multiview.draw_indirect_indexed.1_2_4_8 dEQP-VK.multiview.draw_indirect_indexed.15_15_15_15 dEQP-VK.multiview.draw_indirect_indexed.8_1_1_8 +dEQP-VK.multiview.draw_indirect_indexed.5_10_5_10 dEQP-VK.multiview.draw_indirect_indexed.1_2_4_8_16_32 dEQP-VK.multiview.draw_indirect_indexed.max_multi_view_view_count dEQP-VK.multiview.draw_indexed.15 @@ -280216,6 +280223,7 @@ dEQP-VK.multiview.draw_indexed.8 dEQP-VK.multiview.draw_indexed.1_2_4_8 dEQP-VK.multiview.draw_indexed.15_15_15_15 dEQP-VK.multiview.draw_indexed.8_1_1_8 +dEQP-VK.multiview.draw_indexed.5_10_5_10 dEQP-VK.multiview.draw_indexed.1_2_4_8_16_32 dEQP-VK.multiview.draw_indexed.max_multi_view_view_count dEQP-VK.multiview.clear_attachments.15 @@ -280223,6 +280231,7 @@ dEQP-VK.multiview.clear_attachments.8 dEQP-VK.multiview.clear_attachments.1_2_4_8 dEQP-VK.multiview.clear_attachments.15_15_15_15 dEQP-VK.multiview.clear_attachments.8_1_1_8 +dEQP-VK.multiview.clear_attachments.5_10_5_10 dEQP-VK.multiview.clear_attachments.1_2_4_8_16_32 dEQP-VK.multiview.clear_attachments.max_multi_view_view_count dEQP-VK.multiview.secondary_cmd_buffer.15 @@ -280230,6 +280239,7 @@ dEQP-VK.multiview.secondary_cmd_buffer.8 dEQP-VK.multiview.secondary_cmd_buffer.1_2_4_8 dEQP-VK.multiview.secondary_cmd_buffer.15_15_15_15 dEQP-VK.multiview.secondary_cmd_buffer.8_1_1_8 +dEQP-VK.multiview.secondary_cmd_buffer.5_10_5_10 dEQP-VK.multiview.secondary_cmd_buffer.1_2_4_8_16_32 dEQP-VK.multiview.secondary_cmd_buffer.max_multi_view_view_count dEQP-VK.multiview.secondary_cmd_buffer_geometry.15 @@ -280237,6 +280247,7 @@ dEQP-VK.multiview.secondary_cmd_buffer_geometry.8 dEQP-VK.multiview.secondary_cmd_buffer_geometry.1_2_4_8 dEQP-VK.multiview.secondary_cmd_buffer_geometry.15_15_15_15 dEQP-VK.multiview.secondary_cmd_buffer_geometry.8_1_1_8 +dEQP-VK.multiview.secondary_cmd_buffer_geometry.5_10_5_10 dEQP-VK.multiview.secondary_cmd_buffer_geometry.1_2_4_8_16_32 dEQP-VK.multiview.secondary_cmd_buffer_geometry.max_multi_view_view_count dEQP-VK.multiview.point_size.15 @@ -280244,6 +280255,7 @@ dEQP-VK.multiview.point_size.8 dEQP-VK.multiview.point_size.1_2_4_8 dEQP-VK.multiview.point_size.15_15_15_15 dEQP-VK.multiview.point_size.8_1_1_8 +dEQP-VK.multiview.point_size.5_10_5_10 dEQP-VK.multiview.point_size.1_2_4_8_16_32 dEQP-VK.multiview.point_size.max_multi_view_view_count dEQP-VK.multiview.multisample.15 @@ -280251,13 +280263,39 @@ dEQP-VK.multiview.multisample.8 dEQP-VK.multiview.multisample.1_2_4_8 dEQP-VK.multiview.multisample.15_15_15_15 dEQP-VK.multiview.multisample.8_1_1_8 +dEQP-VK.multiview.multisample.5_10_5_10 dEQP-VK.multiview.multisample.1_2_4_8_16_32 dEQP-VK.multiview.multisample.max_multi_view_view_count +dEQP-VK.multiview.queries.15 +dEQP-VK.multiview.queries.8 +dEQP-VK.multiview.queries.1_2_4_8 +dEQP-VK.multiview.queries.15_15_15_15 +dEQP-VK.multiview.queries.8_1_1_8 +dEQP-VK.multiview.queries.5_10_5_10 +dEQP-VK.multiview.queries.1_2_4_8_16_32 +dEQP-VK.multiview.queries.max_multi_view_view_count +dEQP-VK.multiview.readback_implicit_clear.15 +dEQP-VK.multiview.readback_implicit_clear.8 +dEQP-VK.multiview.readback_implicit_clear.1_2_4_8 +dEQP-VK.multiview.readback_implicit_clear.15_15_15_15 +dEQP-VK.multiview.readback_implicit_clear.8_1_1_8 +dEQP-VK.multiview.readback_implicit_clear.5_10_5_10 +dEQP-VK.multiview.readback_implicit_clear.1_2_4_8_16_32 +dEQP-VK.multiview.readback_implicit_clear.max_multi_view_view_count +dEQP-VK.multiview.readback_explicit_clear.15 +dEQP-VK.multiview.readback_explicit_clear.8 +dEQP-VK.multiview.readback_explicit_clear.1_2_4_8 +dEQP-VK.multiview.readback_explicit_clear.15_15_15_15 +dEQP-VK.multiview.readback_explicit_clear.8_1_1_8 +dEQP-VK.multiview.readback_explicit_clear.5_10_5_10 +dEQP-VK.multiview.readback_explicit_clear.1_2_4_8_16_32 +dEQP-VK.multiview.readback_explicit_clear.max_multi_view_view_count dEQP-VK.multiview.index.vertex_shader.15 dEQP-VK.multiview.index.vertex_shader.8 dEQP-VK.multiview.index.vertex_shader.1_2_4_8 dEQP-VK.multiview.index.vertex_shader.15_15_15_15 dEQP-VK.multiview.index.vertex_shader.8_1_1_8 +dEQP-VK.multiview.index.vertex_shader.5_10_5_10 dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.vertex_shader.max_multi_view_view_count dEQP-VK.multiview.index.fragment_shader.15 @@ -280265,6 +280303,7 @@ dEQP-VK.multiview.index.fragment_shader.8 dEQP-VK.multiview.index.fragment_shader.1_2_4_8 dEQP-VK.multiview.index.fragment_shader.15_15_15_15 dEQP-VK.multiview.index.fragment_shader.8_1_1_8 +dEQP-VK.multiview.index.fragment_shader.5_10_5_10 dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.fragment_shader.max_multi_view_view_count dEQP-VK.multiview.index.geometry_shader.15 @@ -280272,6 +280311,7 @@ dEQP-VK.multiview.index.geometry_shader.8 dEQP-VK.multiview.index.geometry_shader.1_2_4_8 dEQP-VK.multiview.index.geometry_shader.15_15_15_15 dEQP-VK.multiview.index.geometry_shader.8_1_1_8 +dEQP-VK.multiview.index.geometry_shader.5_10_5_10 dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.geometry_shader.max_multi_view_view_count dEQP-VK.multiview.index.tesellation_shader.15 @@ -280279,6 +280319,7 @@ dEQP-VK.multiview.index.tesellation_shader.8 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8 dEQP-VK.multiview.index.tesellation_shader.15_15_15_15 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8 +dEQP-VK.multiview.index.tesellation_shader.5_10_5_10 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count dEQP-VK.subgroups.builtin_var.subgroupsize_graphic -- 2.7.4