Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net> On Fri, May 11, 2018 at 4:35 PM, Caio Marcelo de Oliveira Filho < caio.olive...@intel.com> wrote:
> From: Gustavo Lima Chaves <gustavo.lima.cha...@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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev