Commit cf4c8c2ac431191da5aa355834f36227efb426ae

Tim Van Patten 2025-07-10T15:50:36

Add max sampler count to maxUniformLocations OpenGL ES 3.2 Spec: > ## 7.6. UNIFORM VARIABLES > > When a program is linked successfully, all active uniforms, except for > atomic counters, belonging to the program object’s default uniform > block are initialized as defined by the version of the OpenGL ES > Shading Language used to compile the program. A successful link will > also generate a location for each active uniform in the default > uniform block which doesn’t already have an explicit location defined > in the shader. The generated locations will never take the location of > a uniform with an explicit location defined in the shader, even if that > uniform is determined to be inactive. The values of active uniforms in > the default uniform block can be changed using this location and the > appropriate Uniform* or ProgramUniform* command (see section 7.6.1). > These generated locations are invalidated and new ones assigned after > each successful re-link. The explicitly defined locations and the > generated locations must be in the range of 0 to the value of > MAX_UNIFORM_LOCATIONS minus one. Currently, ANGLE sets the mNativeCaps.maxUniformLocations to the maximum number of supported uniform variables (maxUniformVectors). However, samplers are also uniforms and consume uniform locations during shader linking. This causes shader compilation to fail for context versions 3.1+ if a shader uses both the maximum number of uniform variables and maximum number of samplers because the number of uniform locations is exceeded. This specific edge case is being tested by the end2end test GLSLTest.VerifyMaxVertexUniformVectorsWithSamplers. Unfortunately, that test is only instantiated for GLES 2.0 and 3.0 and ANGLE's shader linker only validates the number of supported uniform locations are not exceeded for GLES 3.1+, so that error path is not being validated. 1. Include both the maximum number of supported uniform variables and maximum number of samplers whe calculating the supported maximum number of uniform locations. 2. Instantiate GLSLTest.VerifyMaxVertexUniformVectorsWithSamplers for GLES 2.0, 3.0, 3.1, and 3.2 so the edge cases are tested for all supported GLES versions. Bug: b/279980674 Test: angle_end2end_tests --gtest_filter=GLSLTest.VerifyMaxVertexUniformVectorsWithSamplers* Change-Id: I8ad1f4d2a040a189625d516b54bf2f79ef218edc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6724940 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>