[Mesa-dev] [1/2] mesa: Add GL/GLSL plumbing for INTEL_fragment_shader_ordering.

2018-08-28 Thread Rogovin, Kevin
Hi all,

Patch addressing the missing enum warning is here: 
https://lists.freedesktop.org/archives/mesa-dev/2018-August/203796.html . Also, 
see my reply to Francisco why I think it is better to have a new intrinsic 
function for that.

Best Regards,
-Kevin
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [1/2] mesa: Add GL/GLSL plumbing for INTEL_fragment_shader_ordering.

2018-08-28 Thread Eric Engestrom
On Tuesday, 2018-08-28 17:59:15 +0100, Rogovin, Kevin wrote:
> Hi,
> 
> Sighs; I missed that warning on the build since there is so much build
> output.

Fair enough; I'll send a few patches to drastically cut the build
warnings later today/tomorrow :)

> I can issue a small patch to handle the missing enum.

Sounds good for now, but you might want to consider Francisco's
suggestion:
https://lists.freedesktop.org/archives/mesa-dev/2018-August/203767.html
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [1/2] mesa: Add GL/GLSL plumbing for INTEL_fragment_shader_ordering.

2018-08-28 Thread Rogovin, Kevin
Hi,

Sighs; I missed that warning on the build since there is so much build output. 
I can issue a small patch to handle the missing enum.

-Kevin
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [1/2] mesa: Add GL/GLSL plumbing for INTEL_fragment_shader_ordering.

2018-08-28 Thread Eric Engestrom
On Monday, 2018-08-27 09:54:23 +0300, kevin.rogo...@intel.com wrote:
> From: Kevin Rogovin 
> 
>This extension provides new GLSL built-in function
>beginFragmentShaderOrderingIntel() that guarantees
>(taking wording of GL_INTEL_fragment_shader_ordering
>extension) that any memory transactions issued by
>shader invocations from previous primitives mapped to
>same xy window coordinates (and same sample when
>per-sample shading is active), complete and are visible
>to the shader invocation that called
>beginFragmentShaderOrderingINTEL().
> 
>One advantage of INTEL_fragment_shader_ordering over
>ARB_fragment_shader_interlock is that it provides a
>function that operates as a memory barrie (instead
>of a defining a critcial section) that can be called
>under arbitary control flow from any function (in
>contrast the begin/end of ARB_fragment_shader_interlock
>may only be called once, from main(), under no control
>flow.
> 
> Signed-off-by: Kevin Rogovin 
> ---
>  src/compiler/glsl/builtin_functions.cpp  | 17 +
>  src/compiler/glsl/glsl_parser_extras.cpp |  1 +
>  src/compiler/glsl/glsl_parser_extras.h   |  2 ++
>  src/compiler/glsl/glsl_to_nir.cpp|  6 ++
>  src/compiler/glsl/ir.h   |  1 +
>  src/compiler/nir/nir_intrinsics.py   |  1 +
>  src/mesa/main/extensions_table.h |  1 +
>  src/mesa/main/mtypes.h   |  1 +
>  8 files changed, 30 insertions(+)
> 
> diff --git a/src/compiler/glsl/builtin_functions.cpp 
> b/src/compiler/glsl/builtin_functions.cpp
> index b601880686..5650365d1d 100644
> --- a/src/compiler/glsl/builtin_functions.cpp
> +++ b/src/compiler/glsl/builtin_functions.cpp
> @@ -525,6 +525,12 @@ supports_nv_fragment_shader_interlock(const 
> _mesa_glsl_parse_state *state)
> return state->NV_fragment_shader_interlock_enable;
>  }
>  
> +static bool
> +supports_intel_fragment_shader_ordering(const _mesa_glsl_parse_state *state)
> +{
> +   return state->INTEL_fragment_shader_ordering_enable;
> +}
> +
>  static bool
>  shader_clock(const _mesa_glsl_parse_state *state)
>  {
> @@ -1305,6 +1311,11 @@ builtin_builder::create_intrinsics()
> supports_arb_fragment_shader_interlock,
> ir_intrinsic_end_invocation_interlock), NULL);
>  
> +   add_function("__intrinsic_begin_fragment_shader_ordering",
> +_invocation_interlock_intrinsic(
> +   supports_intel_fragment_shader_ordering,
> +   ir_intrinsic_begin_fragment_shader_ordering), NULL);
> +
> add_function("__intrinsic_shader_clock",
>  _shader_clock_intrinsic(shader_clock,
>  glsl_type::uvec2_type),
> @@ -3419,6 +3430,12 @@ builtin_builder::create_builtins()
> supports_nv_fragment_shader_interlock),
>  NULL);
>  
> +   add_function("beginFragmentShaderOrderingINTEL",
> +_invocation_interlock(
> +   "__intrinsic_begin_fragment_shader_ordering",
> +   supports_intel_fragment_shader_ordering),
> +NULL);
> +
> add_function("anyInvocationARB",
>  _vote("__intrinsic_vote_any", vote),
>  NULL);
> diff --git a/src/compiler/glsl/glsl_parser_extras.cpp 
> b/src/compiler/glsl/glsl_parser_extras.cpp
> index 0a7d0d78b1..21d4122444 100644
> --- a/src/compiler/glsl/glsl_parser_extras.cpp
> +++ b/src/compiler/glsl/glsl_parser_extras.cpp
> @@ -725,6 +725,7 @@ static const _mesa_glsl_extension 
> _mesa_glsl_supported_extensions[] = {
> EXT_AEP(EXT_texture_buffer),
> EXT_AEP(EXT_texture_cube_map_array),
> EXT(INTEL_conservative_rasterization),
> +   EXT(INTEL_fragment_shader_ordering),
> EXT(INTEL_shader_atomic_float_minmax),
> EXT(MESA_shader_integer_functions),
> EXT(NV_fragment_shader_interlock),
> diff --git a/src/compiler/glsl/glsl_parser_extras.h 
> b/src/compiler/glsl/glsl_parser_extras.h
> index 2c8353214a..e03b34d7d6 100644
> --- a/src/compiler/glsl/glsl_parser_extras.h
> +++ b/src/compiler/glsl/glsl_parser_extras.h
> @@ -812,6 +812,8 @@ struct _mesa_glsl_parse_state {
> bool EXT_texture_cube_map_array_warn;
> bool INTEL_conservative_rasterization_enable;
> bool INTEL_conservative_rasterization_warn;
> +   bool INTEL_fragment_shader_ordering_enable;
> +   bool INTEL_fragment_shader_ordering_warn;
> bool INTEL_shader_atomic_float_minmax_enable;
> bool INTEL_shader_atomic_float_minmax_warn;
> bool MESA_shader_integer_functions_enable;
> diff --git a/src/compiler/glsl/glsl_to_nir.cpp 
> b/src/compiler/glsl/glsl_to_nir.cpp
> index a53000f47e..efbb2317ac 100644
> --- a/src/compiler/glsl/glsl_to_nir.cpp
> +++ b/src/compiler/glsl/glsl_to_nir.cpp
> @@ -742,6 +742,9 @@ nir_visitor::visit(ir_call *ir)
>case ir_intrinsic_end_invocation_interlock:
>   op = nir_intrinsic_end_invocation_interlock;
>