[Mesa-dev] [PATCH v2 2/3] gallium: add support for gl_HelperInvocation semantic

Glenn Kennard glenn.kennard at gmail.com
Thu Nov 12 14:58:03 PST 2015


On Thu, 12 Nov 2015 18:32:25 +0100, Ilia Mirkin <imirkin at alum.mit.edu>  
wrote:

> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  src/gallium/auxiliary/tgsi/tgsi_strings.c  | 1 +
>  src/gallium/docs/source/tgsi.rst           | 8 ++++++++
>  src/gallium/include/pipe/p_shader_tokens.h | 3 ++-
>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 4 +++-
>  4 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.c  
> b/src/gallium/auxiliary/tgsi/tgsi_strings.c
> index 89369d6..fc29a23 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_strings.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_strings.c
> @@ -95,6 +95,7 @@ const char *tgsi_semantic_names[TGSI_SEMANTIC_COUNT] =
>     "TESSOUTER",
>     "TESSINNER",
>     "VERTICESIN",
> +   "HELPER_INVOCATION",
>  };
> const char *tgsi_texture_names[TGSI_TEXTURE_COUNT] =
> diff --git a/src/gallium/docs/source/tgsi.rst  
> b/src/gallium/docs/source/tgsi.rst
> index 01e18f3..e7b0c2f 100644
> --- a/src/gallium/docs/source/tgsi.rst
> +++ b/src/gallium/docs/source/tgsi.rst
> @@ -2941,6 +2941,14 @@ TGSI_SEMANTIC_VERTICESIN
>  For tessellation evaluation/control shaders, this semantic label  
> indicates the
>  number of vertices provided in the input patch. Only the X value is  
> defined.
> +TGSI_SEMANTIC_HELPER_INVOCATION
> +"""""""""""""""""""""""""""""""
> +
> +For fragment shaders, this semantic indicates whether the current
> +invocation is covered or not. Helper invocations are created in order
> +to properly compute derivatives, however it may be desirable to skip
> +some of the logic in those cases. See ``gl_HelperInvocation``  
> documentation.
> +
> Declaration Interpolate
>  ^^^^^^^^^^^^^^^^^^^^^^^
> diff --git a/src/gallium/include/pipe/p_shader_tokens.h  
> b/src/gallium/include/pipe/p_shader_tokens.h
> index e0ab901..a3137ae 100644
> --- a/src/gallium/include/pipe/p_shader_tokens.h
> +++ b/src/gallium/include/pipe/p_shader_tokens.h
> @@ -185,7 +185,8 @@ struct tgsi_declaration_interp
>  #define TGSI_SEMANTIC_TESSOUTER  32 /**< outer tessellation levels */
>  #define TGSI_SEMANTIC_TESSINNER  33 /**< inner tessellation levels */
>  #define TGSI_SEMANTIC_VERTICESIN 34 /**< number of input vertices */
> -#define TGSI_SEMANTIC_COUNT      35 /**< number of semantic values */
> +#define TGSI_SEMANTIC_HELPER_INVOCATION 35 /**< current invocation is  
> helper */
> +#define TGSI_SEMANTIC_COUNT      36 /**< number of semantic values */
> struct tgsi_declaration_semantic
>  {
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp  
> b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index b565127..3ad1afd 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -4408,7 +4408,7 @@ const unsigned  
> _mesa_sysval_to_semantic[SYSTEM_VALUE_MAX] = {
>     TGSI_SEMANTIC_SAMPLEID,
>     TGSI_SEMANTIC_SAMPLEPOS,
>     TGSI_SEMANTIC_SAMPLEMASK,
> -   0, /* gl_HelperInvocation */
> +   TGSI_SEMANTIC_HELPER_INVOCATION,
>    /* Tessellation shaders
>      */
> @@ -5139,6 +5139,8 @@ st_translate_program(
>            TGSI_SEMANTIC_BASEVERTEX);
>     assert(_mesa_sysval_to_semantic[SYSTEM_VALUE_TESS_COORD] ==
>            TGSI_SEMANTIC_TESSCOORD);
> +   assert(_mesa_sysval_to_semantic[SYSTEM_VALUE_HELPER_INVOCATION] ==
> +          TGSI_SEMANTIC_HELPER_INVOCATION);
>    t = CALLOC_STRUCT(st_translate);
>     if (!t) {

Reviewed-by: Glenn Kennard <glenn.kennard at gmail.com>


More information about the mesa-dev mailing list