From 6714a9fa2322a9552dd6d2adb1eed110bc1290d4 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 29 Jan 2018 10:22:18 +0100 Subject: [PATCH] Need to sort declared temporaries to ensure stable output. --- reference/opt/shaders-msl/comp/torture-loop.comp | 2 +- reference/opt/shaders/comp/torture-loop.comp | 2 +- spirv_glsl.cpp | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/reference/opt/shaders-msl/comp/torture-loop.comp b/reference/opt/shaders-msl/comp/torture-loop.comp index 47acff93..b6543079 100644 --- a/reference/opt/shaders-msl/comp/torture-loop.comp +++ b/reference/opt/shaders-msl/comp/torture-loop.comp @@ -22,9 +22,9 @@ kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], devic int _94; _93 = _24.in_data[gl_GlobalInvocationID.x]; _94 = 0; - int _48; int _40; float4 _46; + int _48; for (;;) { _40 = _94 + 1; diff --git a/reference/opt/shaders/comp/torture-loop.comp b/reference/opt/shaders/comp/torture-loop.comp index 8002984f..640142b3 100644 --- a/reference/opt/shaders/comp/torture-loop.comp +++ b/reference/opt/shaders/comp/torture-loop.comp @@ -20,9 +20,9 @@ void main() int _94; _93 = _24.in_data[gl_GlobalInvocationID.x]; _94 = 0; - int _48; int _40; vec4 _46; + int _48; for (;;) { _40 = _94 + 1; diff --git a/spirv_glsl.cpp b/spirv_glsl.cpp index ea80c20c..1f6efba2 100644 --- a/spirv_glsl.cpp +++ b/spirv_glsl.cpp @@ -8265,6 +8265,10 @@ void CompilerGLSL::emit_block_chain(SPIRBlock &block) bool emitted_for_loop_header = false; // If we need to force temporaries for certain IDs due to continue blocks, do it before starting loop header. + // Need to sort these to ensure that reference output is stable. + sort(begin(block.declare_temporary), end(block.declare_temporary), + [](const pair &a, const pair &b) { return a.second < b.second; }); + for (auto &tmp : block.declare_temporary) { auto flags = meta[tmp.second].decoration.decoration_flags;