summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancisco Jerez <[email protected]>2016-06-23 00:05:37 -0700
committerFrancisco Jerez <[email protected]>2016-08-30 16:54:19 -0700
commit965934f38ab36b77672b70693b5b7b9c983f852b (patch)
tree5c0972394c09cc6cdfb9d1a1f8195fc544c4d371
parent342f945b1320d588e61e4efe1ccc7852a3c8ad9f (diff)
glsl: Fix incorrect hard-coded location of the gl_SecondaryFragColorEXT built-in.
gl_SecondaryFragColorEXT should have the same location as gl_FragColor for the secondary fragment color to be replicated to all fragment outputs. The incorrect location of gl_SecondaryFragColorEXT would cause the linker to mark both FRAG_RESULT_COLOR and FRAG_RESULT_DATA0 as being written to, which isn't allowed by the spec and would ultimately lead to an assertion failure in fs_visitor::emit_fb_writes() on my i965-fb-fetch branch. This should also fix the code below for multiple dual-source-blended render targets, which no driver currently supports but we have plans to enable eventually in the i965 driver (the comment saying that no hardware will ever support it seems rather hilarious). Reviewed-by: Ilia Mirkin <[email protected]>
-rw-r--r--src/compiler/glsl/builtin_variables.cpp9
1 files changed, 2 insertions, 7 deletions
diff --git a/src/compiler/glsl/builtin_variables.cpp b/src/compiler/glsl/builtin_variables.cpp
index d379de66030..f4ddeb99cde 100644
--- a/src/compiler/glsl/builtin_variables.cpp
+++ b/src/compiler/glsl/builtin_variables.cpp
@@ -1147,13 +1147,8 @@ builtin_variable_generator::generate_fs_special_vars()
}
if (state->es_shader && state->language_version == 100 && state->EXT_blend_func_extended_enable) {
- /* We make an assumption here that there will only ever be one dual-source draw buffer
- * In case this assumption is ever proven to be false, make sure to assert here
- * since we don't handle this case.
- * In practice, this issue will never arise since no hardware will support it.
- */
- assert(state->Const.MaxDualSourceDrawBuffers <= 1);
- add_index_output(FRAG_RESULT_DATA0, 1, vec4_t, "gl_SecondaryFragColorEXT");
+ add_index_output(FRAG_RESULT_COLOR, 1, vec4_t,
+ "gl_SecondaryFragColorEXT");
add_index_output(FRAG_RESULT_DATA0, 1,
array(vec4_t, state->Const.MaxDualSourceDrawBuffers),
"gl_SecondaryFragDataEXT");