[Mesa-dev] [PATCH] compiler/spirv: set is_shadow for depth comparitor sampling opcodes
Iago Toral
itoral at igalia.com
Tue Apr 3 06:37:10 UTC 2018
On Mon, 2018-04-02 at 09:31 -0700, Jason Ekstrand wrote:
>
> On April 2, 2018 04:04:49 Iago Toral Quiroga <itoral at igalia.com>
> wrote:
>
> From the SPIR-V spec, OpTypeImage:
>
> "Depth is whether or not this image is a depth image. (Note that
> whether or not depth comparisons are actually done is a property of
> the sampling opcode, not of this type declaration.)"
>
> OpImageSample{Proj}Dref{Explicit,Implicit}Lod sampling opcodes always
> do
> a depth comparison, regardless of the Depth property of the image
> type,
> and as stated in the spec quote, this should be honored. For us, it
> means
> that we always have to handle them as shadow sampling opcodes.
>
> Fixes crashes in:
> dEQP-
> VK.spirv_assembly.instruction.graphics.image_sampler.depth_property.*
> ---
> src/compiler/spirv/spirv_to_nir.c | 17 ++++++++++++++++-
> 1 file changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/src/compiler/spirv/spirv_to_nir.c
> b/src/compiler/spirv/spirv_to_nir.c
> index 72ab426e80..f968c4d387 100644
> --- a/src/compiler/spirv/spirv_to_nir.c
> +++ b/src/compiler/spirv/spirv_to_nir.c
> @@ -1908,7 +1908,22 @@ vtn_handle_texture(struct vtn_builder *b,
> SpvOp opcode,
> const struct glsl_type *image_type = sampled.type->type;
> const enum glsl_sampler_dim sampler_dim =
> glsl_get_sampler_dim(image_type);
> const bool is_array = glsl_sampler_type_is_array(image_type);
> - const bool is_shadow = glsl_sampler_type_is_shadow(image_type);
> +
> + bool is_shadow;
> + switch (opcode) {
> + /* These opcodes are always depth-comparitors regardless of the
> depth
> + * property of the image
> + */
> + case SpvOpImageSampleDrefImplicitLod:
> + case SpvOpImageSampleProjDrefImplicitLod:
> + case SpvOpImageSampleDrefExplicitLod:
> + case SpvOpImageSampleProjDrefExplicitLod:
> + is_shadow = true;
> + break;
> + default:
> + is_shadow = glsl_sampler_type_is_shadow(image_type);
>
> Given the sure quote above, should this just be false?
Yes, I think you're right. I have just tested a shadow mapping demo I
have around and verified that GLSLang produces these opcodes for shadow
samplers, so I think it should be safe to do this change. I'll run it
through Jenkins and send a new patch if that doesn't find anything
suspicious.
> Also, don't we
> already have a switch for the Dref source that we can use instead of
> making
> a new one?
Yes, we can use other switches to do this, although we will need to use
a fallthrough, but I guess that's okay.
>
> + break;
> + }
>
> /* Figure out the base texture operation */
> nir_texop texop;
> --
> 2.14.1
>
>
>
>
More information about the mesa-dev
mailing list