From: Ricardo Garcia Date: Tue, 17 Nov 2020 09:16:50 +0000 (+0100) Subject: Test maxPipelineRayRecursionDepth can be zero X-Git-Tag: upstream/1.3.5~1099 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=04881615424d6e4756e496f8a47dfeed86ceedaf;p=platform%2Fupstream%2FVK-GL-CTS.git Test maxPipelineRayRecursionDepth can be zero Make sure implementations support passing zero as the maxPipelineRayRecursionDepth parameter when creating a ray tracing pipeline. New tests: dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_*_0 Affected tests: dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_* Components: Vulkan VK-GL-CTS issue: 2426 Change-Id: I8c72c9cd5ce427e490e8826bc6b3da47de8e0413 --- diff --git a/android/cts/master/vk-master-2020-03-01.txt b/android/cts/master/vk-master-2020-03-01.txt index 29ad5b5..0365d66 100644 --- a/android/cts/master/vk-master-2020-03-01.txt +++ b/android/cts/master/vk-master-2020-03-01.txt @@ -351089,6 +351089,7 @@ dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_3 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_4 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_5 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_6 +dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_0 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_1 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_2 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_3 @@ -351104,6 +351105,7 @@ dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_12 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_13 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_14 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_15 +dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_0 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_1 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_2 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_3 diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index cda54c0..65184d5 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -761282,6 +761282,7 @@ dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_3 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_4 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_5 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_6 +dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_0 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_1 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_2 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_3 @@ -761297,6 +761298,7 @@ dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_12 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_13 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_14 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_15 +dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_0 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_1 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_2 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_3 diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp index 3d9be19..ee41483 100644 --- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp +++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp @@ -108,6 +108,7 @@ enum class TestType NO_DUPLICATE_ANY_HIT, REPORT_INTERSECTION_RESULT, RAY_PAYLOAD_IN, + RECURSIVE_TRACES_0, RECURSIVE_TRACES_1, RECURSIVE_TRACES_2, RECURSIVE_TRACES_3, @@ -6023,7 +6024,6 @@ public: deUint32 getResultBufferSize() const final { - DE_ASSERT(m_depthToUse != 0); DE_ASSERT(m_depthToUse < 30); //< due to how nItemsExpectedPerRay is stored. DE_ASSERT(m_nRaysToTest != 0); @@ -6063,8 +6063,6 @@ public: bool init( vkt::Context& /* context */, RayTracingProperties* /* rtPropsPtr */) final { - DE_ASSERT(m_depthToUse != 0); - m_specializationEntry.constantID = 1; m_specializationEntry.offset = 0; m_specializationEntry.size = sizeof(deUint32); @@ -6346,6 +6344,8 @@ public: } { + const std::string rayPayloadDefinition = ((m_depthToUse == 0u) ? "" : rayPayloadDefinitionVec.at(0)); + std::stringstream css; css << @@ -6356,7 +6356,7 @@ public: "layout(set = 0, binding = 1) uniform accelerationStructureEXT accelerationStructure;\n" "\n" + de::toString(resultBufferDefinition) - + rayPayloadDefinitionVec.at(0) + + + rayPayloadDefinition + "void main()\n" "{\n" " uint nInvocation = gl_LaunchIDEXT.z * gl_LaunchSizeEXT.x * gl_LaunchSizeEXT.y + gl_LaunchIDEXT.y * gl_LaunchSizeEXT.x + gl_LaunchIDEXT.x;\n" @@ -6383,12 +6383,14 @@ public: " resultItems[nItem].shaderStage = 3;\n" " }\n" "\n" - " currentDepth = 0;\n" - " currentNOriginRay = nInvocation;\n" - " currentResultItem = nItem;\n" - "\n" - " traceRayEXT(accelerationStructure, rayFlags, cullMask, 0, 0, 0, origin, tmin, directionHit, tmax, 0);\n" - " traceRayEXT(accelerationStructure, rayFlags, cullMask, 0, 0, 0, origin, tmin, directionMiss, tmax, 0);\n" + + ((m_depthToUse == 0u) ? "" : + " currentDepth = 0;\n" + " currentNOriginRay = nInvocation;\n" + " currentResultItem = nItem;\n" + "\n" + " traceRayEXT(accelerationStructure, rayFlags, cullMask, 0, 0, 0, origin, tmin, directionHit, tmax, 0);\n" + " traceRayEXT(accelerationStructure, rayFlags, cullMask, 0, 0, 0, origin, tmin, directionMiss, tmax, 0);\n" + ) + "}\n"; programCollection.glslSources.add("rgen") << glu::RaygenSource(css.str() ) << buildOptions; @@ -6496,7 +6498,7 @@ public: } } - if (resultItemPtr->depth >= m_depthToUse) + if (resultItemPtr->depth >= m_depthToUse && m_depthToUse > 0u) { DE_ASSERT(resultItemPtr->depth < m_depthToUse); @@ -6601,14 +6603,14 @@ public: if ( currentResultItemPtr->stage == VK_SHADER_STAGE_RAYGEN_BIT_KHR || currentNLevel != m_depthToUse - 1) { - if (currentResultItemPtr->childCHitNodePtr == nullptr) + if (currentResultItemPtr->childCHitNodePtr == nullptr && m_depthToUse > 0u) { DE_ASSERT(currentResultItemPtr->childCHitNodePtr != nullptr); goto end; } - if (currentResultItemPtr->childMissNodePtr == nullptr) + if (currentResultItemPtr->childMissNodePtr == nullptr && m_depthToUse > 0u) { DE_ASSERT(currentResultItemPtr->childMissNodePtr != nullptr); @@ -7568,10 +7570,13 @@ de::MovePtr RayTracingMiscTestInstance::runTest(void) } } - missShaderStackSize = deviceInterface.getRayTracingShaderGroupStackSizeKHR( deviceVk, - *pipelineVkPtr, - static_cast(ShaderGroups::MISS_GROUP), - VK_SHADER_GROUP_SHADER_GENERAL_KHR); + if (nMissGroups > 0u) + { + missShaderStackSize = deviceInterface.getRayTracingShaderGroupStackSizeKHR( deviceVk, + *pipelineVkPtr, + static_cast(ShaderGroups::MISS_GROUP), + VK_SHADER_GROUP_SHADER_GENERAL_KHR); + } for (deUint32 nCallableShader = 0; nCallableShader < static_cast(callableShaderCollectionNames.size() ); ++nCallableShader) { @@ -7623,39 +7628,47 @@ de::MovePtr RayTracingMiscTestInstance::runTest(void) 0u, /* opaqueCaptureAddress */ 0u); /* shaderBindingTableOffset */ - const void* missShaderBindingGroupShaderRecordDataPtr = m_testPtr->getShaderRecordData( ShaderGroups::MISS_GROUP); - const auto missShaderBindingTablePtr = rayTracingPipelinePtr->createShaderBindingTable( deviceInterface, - deviceVk, - *pipelineVkPtr, - allocator, - m_rayTracingPropsPtr->getShaderGroupHandleSize (), - m_rayTracingPropsPtr->getShaderGroupBaseAlignment (), - missGroupIndex, - nMissGroups, /* groupCount */ - 0u, /* additionalBufferCreateFlags */ - 0u, /* additionalBufferUsageFlags */ - MemoryRequirement::Any, - 0u, /* opaqueCaptureAddress */ - 0u, /* shaderBindingTableOffset */ - m_testPtr->getShaderRecordSize(ShaderGroups::MISS_GROUP), - &missShaderBindingGroupShaderRecordDataPtr); - - const void* hitShaderBindingGroupShaderRecordDataPtr = m_testPtr->getShaderRecordData( ShaderGroups::HIT_GROUP); - const auto hitShaderBindingTablePtr = rayTracingPipelinePtr->createShaderBindingTable( deviceInterface, - deviceVk, - *pipelineVkPtr, - allocator, - m_rayTracingPropsPtr->getShaderGroupHandleSize (), - m_rayTracingPropsPtr->getShaderGroupBaseAlignment (), - hitGroupIndex, - nHitGroups, /* groupCount */ - 0u, /* additionalBufferCreateFlags */ - 0u, /* additionalBufferUsageFlags */ - MemoryRequirement::Any, - 0u, /* opaqueCaptureAddress */ - 0u, /* shaderBindingTableOffset */ - m_testPtr->getShaderRecordSize(ShaderGroups::HIT_GROUP), - &hitShaderBindingGroupShaderRecordDataPtr); + auto missShaderBindingTablePtr = de::MovePtr(); + if (nMissGroups > 0u) + { + const void* missShaderBindingGroupShaderRecordDataPtr = m_testPtr->getShaderRecordData( ShaderGroups::MISS_GROUP); + missShaderBindingTablePtr = rayTracingPipelinePtr->createShaderBindingTable( deviceInterface, + deviceVk, + *pipelineVkPtr, + allocator, + m_rayTracingPropsPtr->getShaderGroupHandleSize (), + m_rayTracingPropsPtr->getShaderGroupBaseAlignment (), + missGroupIndex, + nMissGroups, /* groupCount */ + 0u, /* additionalBufferCreateFlags */ + 0u, /* additionalBufferUsageFlags */ + MemoryRequirement::Any, + 0u, /* opaqueCaptureAddress */ + 0u, /* shaderBindingTableOffset */ + m_testPtr->getShaderRecordSize(ShaderGroups::MISS_GROUP), + &missShaderBindingGroupShaderRecordDataPtr); + } + + auto hitShaderBindingTablePtr = de::MovePtr(); + if (nHitGroups > 0u) + { + const void* hitShaderBindingGroupShaderRecordDataPtr = m_testPtr->getShaderRecordData( ShaderGroups::HIT_GROUP); + hitShaderBindingTablePtr = rayTracingPipelinePtr->createShaderBindingTable( deviceInterface, + deviceVk, + *pipelineVkPtr, + allocator, + m_rayTracingPropsPtr->getShaderGroupHandleSize (), + m_rayTracingPropsPtr->getShaderGroupBaseAlignment (), + hitGroupIndex, + nHitGroups, /* groupCount */ + 0u, /* additionalBufferCreateFlags */ + 0u, /* additionalBufferUsageFlags */ + MemoryRequirement::Any, + 0u, /* opaqueCaptureAddress */ + 0u, /* shaderBindingTableOffset */ + m_testPtr->getShaderRecordSize(ShaderGroups::HIT_GROUP), + &hitShaderBindingGroupShaderRecordDataPtr); + } { const auto resultBufferCreateInfo = makeBufferCreateInfo( resultBufferSize, @@ -7764,18 +7777,24 @@ de::MovePtr RayTracingMiscTestInstance::runTest(void) 0 /* offset */), m_rayTracingPropsPtr->getShaderGroupHandleSize(), m_rayTracingPropsPtr->getShaderGroupHandleSize() ); - const auto missShaderBindingTableRegion = makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress( deviceInterface, - deviceVk, - missShaderBindingTablePtr->get(), - 0 /* offset */), - m_rayTracingPropsPtr->getShaderGroupHandleSize() + m_testPtr->getShaderRecordSize(ShaderGroups::MISS_GROUP), - m_rayTracingPropsPtr->getShaderGroupHandleSize()); - const auto hitShaderBindingTableRegion = makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress( deviceInterface, - deviceVk, - hitShaderBindingTablePtr->get(), - 0 /* offset */), - m_rayTracingPropsPtr->getShaderGroupHandleSize() + m_testPtr->getShaderRecordSize(ShaderGroups::HIT_GROUP), - m_rayTracingPropsPtr->getShaderGroupHandleSize() ); + const auto missShaderBindingTableRegion = ((nMissGroups > 0u) ? makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress( deviceInterface, + deviceVk, + missShaderBindingTablePtr->get(), + 0 /* offset */), + m_rayTracingPropsPtr->getShaderGroupHandleSize() + m_testPtr->getShaderRecordSize(ShaderGroups::MISS_GROUP), + m_rayTracingPropsPtr->getShaderGroupHandleSize()) + : makeStridedDeviceAddressRegionKHR(DE_NULL, + 0, /* stride */ + 0 /* size */)); + const auto hitShaderBindingTableRegion = ((nHitGroups > 0u) ? makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress( deviceInterface, + deviceVk, + hitShaderBindingTablePtr->get(), + 0 /* offset */), + m_rayTracingPropsPtr->getShaderGroupHandleSize() + m_testPtr->getShaderRecordSize(ShaderGroups::HIT_GROUP), + m_rayTracingPropsPtr->getShaderGroupHandleSize() ) + : makeStridedDeviceAddressRegionKHR(DE_NULL, + 0, /* stride */ + 0 /* size */)); const auto callableShaderBindingTableRegion = (callableShaderCollectionNames.size() > 0) ? makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress( deviceInterface, deviceVk, @@ -8044,6 +8063,7 @@ void RayTracingTestCase::initPrograms(SourceCollections& programCollection) cons break; } + case TestType::RECURSIVE_TRACES_0: case TestType::RECURSIVE_TRACES_1: case TestType::RECURSIVE_TRACES_2: case TestType::RECURSIVE_TRACES_3: @@ -8074,7 +8094,9 @@ void RayTracingTestCase::initPrograms(SourceCollections& programCollection) cons case TestType::RECURSIVE_TRACES_28: case TestType::RECURSIVE_TRACES_29: { - const auto nLevels = static_cast(m_data.type) - static_cast(TestType::RECURSIVE_TRACES_1) + 1; + const auto nLevels = ((m_data.type == TestType::RECURSIVE_TRACES_0) + ? 0u + : (static_cast(m_data.type) - static_cast(TestType::RECURSIVE_TRACES_1) + 1)); m_testPtr.reset( new RecursiveTracesTest(m_data.geometryType, m_data.asLayout, nLevels) @@ -8243,6 +8265,7 @@ TestInstance* RayTracingTestCase::createInstance (Context& context) const break; } + case TestType::RECURSIVE_TRACES_0: case TestType::RECURSIVE_TRACES_1: case TestType::RECURSIVE_TRACES_2: case TestType::RECURSIVE_TRACES_3: @@ -8273,7 +8296,9 @@ TestInstance* RayTracingTestCase::createInstance (Context& context) const case TestType::RECURSIVE_TRACES_28: case TestType::RECURSIVE_TRACES_29: { - const auto nLevels = static_cast(m_data.type) - static_cast(TestType::RECURSIVE_TRACES_1) + 1; + const auto nLevels = ((m_data.type == TestType::RECURSIVE_TRACES_0) + ? 0u + : (static_cast(m_data.type) - static_cast(TestType::RECURSIVE_TRACES_1) + 1)); if (m_testPtr == nullptr) { @@ -8627,6 +8652,16 @@ tcu::TestCaseGroup* createMiscTests (tcu::TestContext& testCtx) { const std::string newTestCaseName = "recursiveTraces_" + de::toString(getSuffixForGeometryType(currentGeometryType) ) + "_"; + // 0 recursion levels. + { + auto newTestCasePtr = new RayTracingTestCase( testCtx, + (newTestCaseName + "0").data(), + "Verifies that relevant shader stages can correctly read large ray payloads provided by raygen shader stage.", + CaseDef{TestType::RECURSIVE_TRACES_0, currentGeometryType, AccelerationStructureLayout::ONE_TL_ONE_BL_ONE_GEOMETRY}); + + miscGroupPtr->addChild(newTestCasePtr); + } + // TODO: for (deUint32 nLevels = 1; nLevels <= 29; ++nLevels) for (deUint32 nLevels = 1; nLevels <= 15; ++nLevels) { diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index 4be20c4..ab7e03d 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -763730,6 +763730,7 @@ dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_3 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_4 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_5 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_6 +dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_0 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_1 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_2 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_3 @@ -763745,6 +763746,7 @@ dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_12 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_13 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_14 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_15 +dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_0 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_1 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_2 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_3