nir/vtn: Handle integer sampling coordinates

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5242>
This commit is contained in:
Jesse Natalie 2020-05-06 17:20:26 -07:00 committed by Marge Bot
parent a196f05fc2
commit 701cb9d60c
1 changed files with 13 additions and 1 deletions

View File

@ -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;