compiler/spirv: set is_shadow for depth comparitor sampling opcodes
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.)" The sampling opcodes that specify depth comparisons are OpImageSample{Proj}Dref{Explicit,Implicit}Lod, so we should set is_shadow only for these (we were using the deph property of the image until now). v2: - Do the same for OpImageDrefGather. - Set is_shadow to false if the sampling opcode is not one of these (Jason) - Reuse an existing switch statement instead of adding a new one (Jason) Fixes crashes in: dEQP-VK.spirv_assembly.instruction.graphics.image_sampler.depth_property.* Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
@@ -1908,7 +1908,6 @@ 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);
|
||||
|
||||
/* Figure out the base texture operation */
|
||||
nir_texop texop;
|
||||
@@ -2032,6 +2031,7 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
|
||||
break;
|
||||
}
|
||||
|
||||
bool is_shadow = false;
|
||||
unsigned gather_component = 0;
|
||||
switch (opcode) {
|
||||
case SpvOpImageSampleDrefImplicitLod:
|
||||
@@ -2040,6 +2040,7 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
|
||||
case SpvOpImageSampleProjDrefExplicitLod:
|
||||
case SpvOpImageDrefGather:
|
||||
/* These all have an explicit depth value as their next source */
|
||||
is_shadow = true;
|
||||
(*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_comparator);
|
||||
break;
|
||||
|
||||
|
Reference in New Issue
Block a user