From 33e74cab2c7069aa236460cac6b39800272880e5 Mon Sep 17 00:00:00 2001 From: nmzik Date: Sun, 4 Oct 2026 11:59:42 +0400 Subject: [PATCH] test: verify native vector descriptor loads in structured loops --- tests/shaderCfgTests.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/tests/shaderCfgTests.cpp b/tests/shaderCfgTests.cpp index 35d37843a..1138895a4 100644 --- a/tests/shaderCfgTests.cpp +++ b/tests/shaderCfgTests.cpp @@ -7933,8 +7933,7 @@ void TestNewShaderRecompilerCfgLoopHeaderDynamicScalarBufferLoadStructured() { CheckSpirvBinaryValidates(result.spirv); } -#if KYTY_PLATFORM != KYTY_PLATFORM_WINDOWS -void TestNewShaderRecompilerCfgLoopHeaderBufferLoadDispatcher() { +void TestNewShaderRecompilerCfgLoopHeaderBufferLoadStructured() { const uint32_t shader[] = { EncodeSMovB32(0, 128), // preheader: s0 = 0 EncodeMubuf0(0x0c), @@ -7947,13 +7946,15 @@ void TestNewShaderRecompilerCfgLoopHeaderBufferLoadDispatcher() { 0xbf810000u, }; - auto options = MakeCompileOptions(ShaderType::Compute); - options.dump_ir = true; - ExpectFatal([&] { (void)RecompileForTest(shader, options); }, - "self-modifying vector-buffer descriptor did not terminate " - "compilation"); + const auto result = RecompileForTest(shader, MakeCompileOptions(ShaderType::Compute)); + Check(result.program.info.uses_dma && !result.program.dispatcher_fallback && + SpirvContainsOpcode(result.spirv, 246), + "loop-carried vector descriptor lost its structured GPU loop"); + Check(result.program.info.buffers.size() == 1u && result.program.info.buffers[0].written && + result.resources.flattened_srt.empty() && result.resources.specialization_reads.empty(), + "loop-carried vector descriptor was evaluated on the host"); + CheckSpirvBinaryValidates(result.spirv); } -#endif void TestNewShaderRecompilerCfgLoopHeaderDsAppendConsumeStructured() { const uint32_t shader[] = { @@ -14657,9 +14658,7 @@ int main() { TestNewShaderRecompilerCfgPostEndTargetMergePS(); TestNewShaderRecompilerCfgLoopBreakContinue(); TestNewShaderRecompilerCfgLoopHeaderDynamicScalarBufferLoadStructured(); -#if KYTY_PLATFORM != KYTY_PLATFORM_WINDOWS - TestNewShaderRecompilerCfgLoopHeaderBufferLoadDispatcher(); -#endif + TestNewShaderRecompilerCfgLoopHeaderBufferLoadStructured(); TestNewShaderRecompilerCfgLoopHeaderDsAppendConsumeStructured(); TestNewShaderRecompilerCfgLoopHeaderDsReadStructured(); TestNewShaderRecompilerCfgLoopHeaderDsRead2B64Structured();