diff options
author | Tapani Pälli <[email protected]> | 2015-07-03 10:19:23 +0300 |
---|---|---|
committer | Tapani Pälli <[email protected]> | 2015-07-29 08:17:55 +0300 |
commit | e17056f5a20beb752a530180fce1aba0e68877b6 (patch) | |
tree | 7e23efad4cdc1edc23effb27d36903c829b205cc /src/glsl | |
parent | b868971e786b849e70675852a0043538bcce0739 (diff) |
glsl: verify location when dual source blending
Same check is made for glBindFragDataLocationIndexed but it was missing
when using layout qualifiers.
Fixes following Piglit test:
arb_blend_func_extended-output-location
Signed-off-by: Tapani Pälli <[email protected]>
Reviewed-by: Anuj Phogat <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/linker.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index c8d2e8e9571..a7812116944 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -2431,6 +2431,25 @@ assign_attribute_or_color_locations(gl_shader_program *prog, } } + /* From GL4.5 core spec, section 15.2 (Shader Execution): + * + * "Output binding assignments will cause LinkProgram to fail: + * ... + * If the program has an active output assigned to a location greater + * than or equal to the value of MAX_DUAL_SOURCE_DRAW_BUFFERS and has + * an active output assigned an index greater than or equal to one;" + */ + if (target_index == MESA_SHADER_FRAGMENT && var->data.index >= 1 && + var->data.location - generic_base >= + (int) constants->MaxDualSourceDrawBuffers) { + linker_error(prog, + "output location %d >= GL_MAX_DUAL_SOURCE_DRAW_BUFFERS " + "with index %u for %s\n", + var->data.location - generic_base, var->data.index, + var->name); + return false; + } + const unsigned slots = var->type->count_attribute_slots(); /* From GL4.5 core spec, section 11.1.1 (Vertex Attributes): |