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:
parent
a196f05fc2
commit
701cb9d60c
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue