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. > 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: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev