[Mesa-dev] [PATCH v2 05/21] nir/lower_samplers: Limit assert to GLSL shader programs
Timothy Arceri
tarceri at itsqueeze.com
Wed Jun 6 04:20:41 UTC 2018
I guess this will need to be rewritten with all the deref stuff almost
ready to land. If you manage to get this stuff in before then you can
have a:
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
On 12/05/18 19:40, Alejandro PiƱeiro wrote:
> From: Eduardo Lima Mitev <elima at igalia.com>
>
> Vulkan has the concept of separate image and sampler objects in the
> SPIR-V code whereas GL conflates them into one. nir_lower_samplers
> contains an assert to verify that sampler operand is not being set on
> the nir instruction. However when the code comes from spirv_to_nir the
> sampler operand is always set. GL_arb_gl_spirv explicitly states that
> OpTypeSampler is not supported so it retains the GL behaviour of not
> being able to seperate them. Therefore the sampler will always be the
> same as the texture. This GL version of the lowering code ignores
> instr->sampler and sets instr->sampler_index to the same value as
> instr->texture_index. Some other places in the code (such as in
> nir_print) assume that once the instruction is lowered then both
> instr->texture and instr->sampler will be NULL, so to keep this
> behaviour we now set instr->sampler to NULL after ignoring it to fill
> in instr->sampler_index.
>
> Signed-off-by: Eduardo Lima <elima at igalia.com>
> Signed-off-by: Neil Roberts <nroberts at igalia.com>
> ---
> src/compiler/glsl/gl_nir_lower_samplers.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/src/compiler/glsl/gl_nir_lower_samplers.c b/src/compiler/glsl/gl_nir_lower_samplers.c
> index a53fabb7e62..c54455f91de 100644
> --- a/src/compiler/glsl/gl_nir_lower_samplers.c
> +++ b/src/compiler/glsl/gl_nir_lower_samplers.c
> @@ -93,7 +93,7 @@ lower_sampler(nir_tex_instr *instr, const struct gl_shader_program *shader_progr
> return false;
>
> /* In GLSL, we only fill out the texture field. The sampler is inferred */
> - assert(instr->sampler == NULL);
> + assert(instr->sampler == NULL || shader_program->data->spirv);
>
> instr->texture_index = 0;
> unsigned location = instr->texture->var->data.location;
> @@ -125,6 +125,7 @@ lower_sampler(nir_tex_instr *instr, const struct gl_shader_program *shader_progr
> instr->sampler_index = instr->texture_index;
>
> instr->texture = NULL;
> + nir_instr_rewrite_deref(&instr->instr, &instr->sampler, NULL);
>
> return true;
> }
>
More information about the mesa-dev
mailing list