Kenneth Graunke <kenn...@whitecape.org> writes: > On Wednesday, July 20, 2016 9:49:40 PM PDT Francisco Jerez wrote: >> The EXT_shader_framebuffer_fetch extension defines alternative >> language for GLES2 shaders where user-defined fragment outputs are not >> allowed. Instead of using inout user-defined fragment outputs the >> shader is expected to read from the gl_LastFragData built-in array. >> In addition this allows using the same language on desktop GLSL >> versions prior to 4.2 that support the deprecated gl_FragData built-in >> in preparation for the MESA_shader_framebuffer_fetch desktop GL >> extension. >> >> Both legacy and user-defined inout outputs have a common >> representation at the GLSL IR level, so it shouldn't make any >> difference for optimization passes and back-ends whether the >> application is using gl_LastFragData or user-defined outputs, all >> they'll see is a variable dereference of a fragment output at a >> certain interface location with the fb_fetch_output bit set to one. >> --- >> src/compiler/glsl/builtin_variables.cpp | 10 ++++++++++ >> 1 file changed, 10 insertions(+) >> >> diff --git a/src/compiler/glsl/builtin_variables.cpp >> b/src/compiler/glsl/builtin_variables.cpp >> index f63dc3a..6a756ed 100644 >> --- a/src/compiler/glsl/builtin_variables.cpp >> +++ b/src/compiler/glsl/builtin_variables.cpp >> @@ -1136,6 +1136,16 @@ builtin_variable_generator::generate_fs_special_vars() >> array(vec4_t, state->Const.MaxDrawBuffers), "gl_FragData"); >> } >> >> + if (state->has_framebuffer_fetch() && !state->is_version(420, 300)) { >> + ir_variable *const var = >> + add_output(FRAG_RESULT_DATA0, >> + array(vec4_t, state->Const.MaxDrawBuffers), >> + "gl_LastFragData"); >> + var->data.precision = GLSL_PRECISION_MEDIUM; >> + var->data.read_only = 1; >> + var->data.fb_fetch_output = 1; >> + } >> + > > Personally, I'd only create gl_LastFragData in desktop 1.10/1.20, > and not 1.30+ where it's deprecated. Sure, you /can/ use it, but > you can also do the 'inout' syntax that's the preferred way going > forward, so we may as well just require shader authors to do so. >
My thinking here was that since we need to drop the gl_LastFragData built-in at some point, it would be the least confusing if we did it at the same point that Khronos dropped gl_FragData. It doesn't seem like it will make much of a difference in practice though, because this extension has never been available in desktop GL, so backwards compatibility is not really a concern -- I've changed this series locally to check for GLSL 1.3 instead of GLSL 4.2 in the code above and in PATCH 12, and updated my draft spec text so that gl_LastFragData is not required to be present on GLSL 1.3 and above. >> 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 >>
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev