[Mesa-dev] [PATCH 10/17] glsl: Define a gl_LastFragData built-in for GLSL versions that have gl_FragData.
Kenneth Graunke
kenneth at whitecape.org
Thu Jul 28 05:22:19 UTC 2016
On Wednesday, July 27, 2016 5:05:39 PM PDT Francisco Jerez wrote:
> Kenneth Graunke <kenneth at 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.
Yeah, makes sense. My thinking was to drop it when gl_FragData was
first deprecated (why add new deprecated things), but it's not a big
deal either way.
Do you have any specs written up for the MESA_framebuffer_fetch_*
extension pair? I feel a little weird about having extension enable
flags for extensions that we don't have a spec for (unless I just
missed something?).
Otherwise, this series looks good to me. I'll try and send actual
R-bs soon...IIRC, there were a few bits I glossed over and should
look over again quickly.
--Ken
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160727/70829f92/attachment.sig>
More information about the mesa-dev
mailing list