Fix shader call stack size mismatch https://swiftshader-review.googlesource.com/c/SwiftShader/+/16328 increased the maximum call depth validated by the GLSL ES compiler, without increasing the stack size supported by our back-end. The sw::MAX_SHADER_CALL_STACK_SIZE of the back-end is now statically passed to an es2::MAX_SHADER_CALL_STACK_SIZE (has to remain equal or smaller) and then passed to the GLSL compiler's resources limits. Bug b/123587120 Change-Id: I9a56d5b4e980dc0881c238669d2b786bb3c855e3 Reviewed-on: https://swiftshader-review.googlesource.com/c/24628 Tested-by: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Ben Clayton <bclayton@google.com> Reviewed-by: Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Main/Config.hpp b/src/Main/Config.hpp index d2ba6ff..f0e9563 100644 --- a/src/Main/Config.hpp +++ b/src/Main/Config.hpp
@@ -100,7 +100,7 @@ MAX_SHADER_CALL_SITES = 2048, MAX_SHADER_NESTED_LOOPS = 4, MAX_SHADER_NESTED_IFS = 24 + 24, - MAX_SHADER_CALL_STACK_SIZE = 16, + MAX_SHADER_CALL_STACK_SIZE = 64, MAX_SHADER_ENABLE_STACK_SIZE = 1 + 24, }; }
diff --git a/src/OpenGL/libGLESv2/Context.h b/src/OpenGL/libGLESv2/Context.h index 5e3449f..bb85011 100644 --- a/src/OpenGL/libGLESv2/Context.h +++ b/src/OpenGL/libGLESv2/Context.h
@@ -105,6 +105,7 @@ MAX_UNIFORM_BUFFER_BINDINGS = sw::MAX_UNIFORM_BUFFER_BINDINGS, UNIFORM_BUFFER_OFFSET_ALIGNMENT = 4, NUM_PROGRAM_BINARY_FORMATS = 0, + MAX_SHADER_CALL_STACK_SIZE = sw::MAX_SHADER_CALL_STACK_SIZE, }; const GLenum compressedTextureFormats[] =
diff --git a/src/OpenGL/libGLESv2/Shader.cpp b/src/OpenGL/libGLESv2/Shader.cpp index 1b77941..ba19865 100644 --- a/src/OpenGL/libGLESv2/Shader.cpp +++ b/src/OpenGL/libGLESv2/Shader.cpp
@@ -183,7 +183,7 @@ resources.OES_EGL_image_external_essl3 = 1; resources.EXT_draw_buffers = 1; resources.ARB_texture_rectangle = 1; - resources.MaxCallStackDepth = 64; + resources.MaxCallStackDepth = MAX_SHADER_CALL_STACK_SIZE; assembler->Init(resources); return assembler;