[Mesa-dev] [PATCH v8 1/2] spirv: add/hookup SpvCapabilityStencilExportEXT

Jason Ekstrand jason at jlekstrand.net
Fri May 11 23:50:50 UTC 2018


Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

On Fri, May 11, 2018 at 4:35 PM, Caio Marcelo de Oliveira Filho <
caio.oliveira at intel.com> wrote:

> From: Gustavo Lima Chaves <gustavo.lima.chaves at intel.com>
>
> v2:
> An attempt to support SpvExecutionModeStencilRefReplacingEXT's behavior
> also follows, with the interpretation to said mode being we prevent
> writes to the built-in FragStencilRefEXT variable when the execution
> mode isn't set.
>
> v3:
> A more cautious reading of 1db44252d01bf7539452ccc2b5210c74b8dcd573 led
> me to a missing change that would stop (what I later discovered were)
> GPU hangs on the CTS test written to exercise this.
>
> v4:
> Turn FragStencilRefEXT decoration usage without StencilRefReplacingEXT
> mode into a warning, instead of trying to make the variable read-only.
> If we are to follow the originating extension on GL, the built-in
> variable in question should never be readable anyway.
>
> v5/v6: rebases.
>
> v7:
> Fix check for gen9 lost in rebase. (Ilia)
> Reduce the scope of the bool used to track whether
> SpvExecutionModeStencilRefReplacingEXT was used. Was in shader_info,
> moved to vtn_builder. (Jason)
>
> v8:
> Assert for fragment shader handling StencilRefReplacingEXT execution
> mode. (Caio)
> Remove warning logic, since an entry point might not have
> StencilRefReplacingEXT execution mode, but the global output variable
> might still exist for another entry point in the module. (Jason)
> ---
>  src/compiler/shader_info.h         | 1 +
>  src/compiler/spirv/spirv_to_nir.c  | 8 ++++++++
>  src/compiler/spirv/vtn_variables.c | 4 ++++
>  3 files changed, 13 insertions(+)
>
> diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h
> index afc53a88405..81f844d36ae 100644
> --- a/src/compiler/shader_info.h
> +++ b/src/compiler/shader_info.h
> @@ -56,6 +56,7 @@ struct spirv_supported_capabilities {
>     bool trinary_minmax;
>     bool descriptor_array_dynamic_indexing;
>     bool runtime_descriptor_array;
> +   bool stencil_export;
>  };
>
>  typedef struct shader_info {
> diff --git a/src/compiler/spirv/spirv_to_nir.c
> b/src/compiler/spirv/spirv_to_nir.c
> index 78437428aa7..3c3ef4658d6 100644
> --- a/src/compiler/spirv/spirv_to_nir.c
> +++ b/src/compiler/spirv/spirv_to_nir.c
> @@ -3396,6 +3396,10 @@ vtn_handle_preamble_instruction(struct vtn_builder
> *b, SpvOp opcode,
>           spv_check_supported(runtime_descriptor_array, cap);
>           break;
>
> +      case SpvCapabilityStencilExportEXT:
> +         spv_check_supported(stencil_export, cap);
> +         break;
> +
>        default:
>           vtn_fail("Unhandled capability");
>        }
> @@ -3573,6 +3577,10 @@ vtn_handle_execution_mode(struct vtn_builder *b,
> struct vtn_value *entry_point,
>     case SpvExecutionModeContractionOff:
>        break; /* OpenCL */
>
> +   case SpvExecutionModeStencilRefReplacingEXT:
> +      vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
> +      break;
> +
>     default:
>        vtn_fail("Unhandled execution mode");
>     }
> diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_
> variables.c
> index fd8ab7f247a..53bee1b9288 100644
> --- a/src/compiler/spirv/vtn_variables.c
> +++ b/src/compiler/spirv/vtn_variables.c
> @@ -1354,6 +1354,10 @@ vtn_get_builtin_location(struct vtn_builder *b,
>        *location = SYSTEM_VALUE_SUBGROUP_LT_MASK,
>        set_mode_system_value(b, mode);
>        break;
> +   case SpvBuiltInFragStencilRefEXT:
> +      *location = FRAG_RESULT_STENCIL;
> +      vtn_assert(*mode == nir_var_shader_out);
> +      break;
>     default:
>        vtn_fail("unsupported builtin");
>     }
> --
> 2.17.0
>
> _______________________________________________
> 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/20180511/36b500a6/attachment.html>


More information about the mesa-dev mailing list