[Mesa-dev] [PATCH] nir/validate: Allow subroutine types for the tails of derefs

Connor Abbott cwabbott0 at gmail.com
Tue Nov 10 16:18:25 PST 2015


Since subroutine types are really just integers, should we just make
glsl_type_is_vector_or_scalar() return true for them?

On Tue, Nov 10, 2015 at 5:18 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> The shader-subroutine code creates uniforms of type SUBROUTINE for
> subroutines that are then read as integers in the backends.  If we ever
> want to do any optimizations on these, we'll need to come up with a better
> plan where they are actual scalars or something, but this works for now.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92859
> Cc: Mark Janes <mark.a.janes at intel.com>
> ---
>  src/glsl/nir/nir_validate.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/src/glsl/nir/nir_validate.c b/src/glsl/nir/nir_validate.c
> index a42e830..51c2529 100644
> --- a/src/glsl/nir/nir_validate.c
> +++ b/src/glsl/nir/nir_validate.c
> @@ -401,7 +401,9 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
>     case nir_intrinsic_load_var: {
>        const struct glsl_type *type =
>           nir_deref_tail(&instr->variables[0]->deref)->type;
> -      assert(glsl_type_is_vector_or_scalar(type));
> +      assert(glsl_type_is_vector_or_scalar(type) ||
> +             (instr->variables[0]->var->data.mode == nir_var_uniform &&
> +              glsl_get_base_type(type) == GLSL_TYPE_SUBROUTINE));
>        assert(instr->num_components == glsl_get_vector_elements(type));
>        assert(instr->variables[0]->var->data.mode != nir_var_shader_out);
>        break;
> @@ -409,7 +411,9 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
>     case nir_intrinsic_store_var: {
>        const struct glsl_type *type =
>           nir_deref_tail(&instr->variables[0]->deref)->type;
> -      assert(glsl_type_is_vector_or_scalar(type));
> +      assert(glsl_type_is_vector_or_scalar(type) ||
> +             (instr->variables[0]->var->data.mode == nir_var_uniform &&
> +              glsl_get_base_type(type) == GLSL_TYPE_SUBROUTINE));
>        assert(instr->num_components == glsl_get_vector_elements(type));
>        assert(instr->variables[0]->var->data.mode != nir_var_shader_in &&
>               instr->variables[0]->var->data.mode != nir_var_uniform &&
> --
> 2.5.0.400.gff86faf
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list