From: Jesse Natalie Date: Thu, 7 May 2020 00:20:26 +0000 (-0700) Subject: nir/vtn: Handle integer sampling coordinates X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=701cb9d60c0350b0134e52cb1b51eefbbf27bd22;p=mesa.git nir/vtn: Handle integer sampling coordinates Reviewed-by: Jason Ekstrand Part-of: --- diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index e2912809bb0..8067c419477 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -2632,9 +2632,21 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode, if (is_array && texop != nir_texop_lod) coord_components++; - coord = vtn_get_nir_ssa(b, w[idx++]); + struct vtn_ssa_value *coord_val = vtn_ssa_value(b, w[idx++]); + coord = coord_val->def; p->src = nir_src_for_ssa(nir_channels(&b->nb, coord, (1 << coord_components) - 1)); + + /* OpenCL allows integer sampling coordinates */ + if (glsl_type_is_integer(coord_val->type) && + opcode == SpvOpImageSampleExplicitLod) { + vtn_fail_if(b->shader->info.stage != MESA_SHADER_KERNEL, + "Unless the Kernel capability is being used, the coordinate parameter " + "OpImageSampleExplicitLod must be floating point."); + + p->src = nir_src_for_ssa(nir_i2f32(&b->nb, p->src.ssa)); + } + p->src_type = nir_tex_src_coord; p++; break;