[Mesa-dev] [PATCH] Add NV_fragment_shader_interlock support.

Manolova, Plamena plamena.manolova at intel.com
Mon Aug 20 11:50:13 UTC 2018


Hi Kevin,
This looks good to me :)

Reviewed-by: Plamena Manolova <plamena.manolova at intel.com>

On Wed, Aug 15, 2018 at 2:29 PM, <kevin.rogovin at intel.com> wrote:

> From: Kevin Rogovin <kevin.rogovin at gmail.com>
>
> The main purpose for having NV_fragment_shader_interlock
> extension is because that extension is also for GLES31 while
> the ARB extension is for GL only.
> ---
>  src/compiler/glsl/builtin_functions.cpp  | 18 ++++++++++++++++++
>  src/compiler/glsl/glsl_parser.yy         |  6 ++++--
>  src/compiler/glsl/glsl_parser_extras.cpp |  1 +
>  src/compiler/glsl/glsl_parser_extras.h   |  2 ++
>  src/mesa/main/extensions_table.h         |  1 +
>  5 files changed, 26 insertions(+), 2 deletions(-)
>
> diff --git a/src/compiler/glsl/builtin_functions.cpp
> b/src/compiler/glsl/builtin_functions.cpp
> index 7119903795..e7b78c0158 100644
> --- a/src/compiler/glsl/builtin_functions.cpp
> +++ b/src/compiler/glsl/builtin_functions.cpp
> @@ -519,6 +519,12 @@ supports_arb_fragment_shader_interlock(const
> _mesa_glsl_parse_state *state)
>     return state->ARB_fragment_shader_interlock_enable;
>  }
>
> +static bool
> +supports_nv_fragment_shader_interlock(const _mesa_glsl_parse_state
> *state)
> +{
> +   return state->NV_fragment_shader_interlock_enable;
> +}
> +
>  static bool
>  shader_clock(const _mesa_glsl_parse_state *state)
>  {
> @@ -3331,6 +3337,18 @@ builtin_builder::create_builtins()
>                     supports_arb_fragment_shader_interlock),
>                  NULL);
>
> +   add_function("beginInvocationInterlockNV",
> +                _invocation_interlock(
> +                   "__intrinsic_begin_invocation_interlock",
> +                   supports_nv_fragment_shader_interlock),
> +                NULL);
> +
> +   add_function("endInvocationInterlockNV",
> +                _invocation_interlock(
> +                   "__intrinsic_end_invocation_interlock",
> +                   supports_nv_fragment_shader_interlock),
> +                NULL);
> +
>     add_function("anyInvocationARB",
>                  _vote("__intrinsic_vote_any", vote),
>                  NULL);
> diff --git a/src/compiler/glsl/glsl_parser.yy
> b/src/compiler/glsl/glsl_parser.yy
> index cb7376995d..bc2571b684 100644
> --- a/src/compiler/glsl/glsl_parser.yy
> +++ b/src/compiler/glsl/glsl_parser.yy
> @@ -1450,10 +1450,12 @@ layout_qualifier_id:
>                            "only valid in fragment shader input layout
> declaration.");
>        } else if (pixel_interlock_ordered + pixel_interlock_unordered +
>                   sample_interlock_ordered + sample_interlock_unordered >
> 0 &&
> -                 !state->ARB_fragment_shader_interlock_enable) {
> +                 !state->ARB_fragment_shader_interlock_enable &&
> +                 !state->NV_fragment_shader_interlock_enable) {
>           _mesa_glsl_error(& @1, state,
>                            "interlock layout qualifier present, but the "
> -                          "GL_ARB_fragment_shader_interlock extension is
> not "
> +                          "GL_ARB_fragment_shader_interlock or "
> +                          "GL_NV_fragment_shader_interlock extension is
> not "
>                            "enabled.");
>        } else {
>           $$.flags.q.pixel_interlock_ordered = pixel_interlock_ordered;
> diff --git a/src/compiler/glsl/glsl_parser_extras.cpp
> b/src/compiler/glsl/glsl_parser_extras.cpp
> index 6d92f24ea2..393942b62c 100644
> --- a/src/compiler/glsl/glsl_parser_extras.cpp
> +++ b/src/compiler/glsl/glsl_parser_extras.cpp
> @@ -724,6 +724,7 @@ static const _mesa_glsl_extension
> _mesa_glsl_supported_extensions[] = {
>     EXT_AEP(EXT_texture_cube_map_array),
>     EXT(INTEL_conservative_rasterization),
>     EXT(MESA_shader_integer_functions),
> +   EXT(NV_fragment_shader_interlock),
>     EXT(NV_image_formats),
>  };
>
> diff --git a/src/compiler/glsl/glsl_parser_extras.h
> b/src/compiler/glsl/glsl_parser_extras.h
> index 59a173418b..3b17b54f0a 100644
> --- a/src/compiler/glsl/glsl_parser_extras.h
> +++ b/src/compiler/glsl/glsl_parser_extras.h
> @@ -810,6 +810,8 @@ struct _mesa_glsl_parse_state {
>     bool INTEL_conservative_rasterization_warn;
>     bool MESA_shader_integer_functions_enable;
>     bool MESA_shader_integer_functions_warn;
> +   bool NV_fragment_shader_interlock_enable;
> +   bool NV_fragment_shader_interlock_warn;
>     bool NV_image_formats_enable;
>     bool NV_image_formats_warn;
>     /*@}*/
> diff --git a/src/mesa/main/extensions_table.h
> b/src/mesa/main/extensions_table.h
> index af5ce118da..746e821886 100644
> --- a/src/mesa/main/extensions_table.h
> +++ b/src/mesa/main/extensions_table.h
> @@ -346,6 +346,7 @@ EXT(NV_draw_buffers                         ,
> dummy_true
>  EXT(NV_fbo_color_attachments                , dummy_true
>            ,  x ,  x ,  x , ES2, 2010)
>  EXT(NV_fill_rectangle                       , NV_fill_rectangle
>             , GLL, GLC,  x ,  x , 2015)
>  EXT(NV_fog_distance                         , NV_fog_distance
>             , GLL,  x ,  x ,  x , 2001)
> +EXT(NV_fragment_shader_interlock            ,
> ARB_fragment_shader_interlock          , GLL, GLC,  x ,  31, 2015)
>  EXT(NV_image_formats                        ,
> ARB_shader_image_load_store            ,  x ,  x ,  x ,  31, 2014)
>  EXT(NV_light_max_exponent                   , dummy_true
>            , GLL,  x ,  x ,  x , 1999)
>  EXT(NV_packed_depth_stencil                 , dummy_true
>            , GLL, GLC,  x ,  x , 2000)
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180820/1fd76d34/attachment-0001.html>


More information about the mesa-dev mailing list