glsl_to_nir: fix bitfield_extract with 16-bit operands

These are defined to explicitly take 32b values.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6073>
This commit is contained in:
Rob Clark 2020-07-18 10:02:11 -07:00 committed by Marge Bot
parent 92f5e94a93
commit 5e922fbc16
1 changed files with 6 additions and 4 deletions

View File

@ -2300,12 +2300,14 @@ nir_visitor::visit(ir_expression *ir)
result = nir_bcsel(&b, srcs[0], srcs[1], srcs[2]);
break;
case ir_triop_bitfield_extract:
result = (out_type == GLSL_TYPE_INT) ?
nir_ibitfield_extract(&b, srcs[0], srcs[1], srcs[2]) :
nir_ubitfield_extract(&b, srcs[0], srcs[1], srcs[2]);
result = ir->type->is_int_16_32() ?
nir_ibitfield_extract(&b, nir_i2i32(&b, srcs[0]), nir_i2i32(&b, srcs[1]), nir_i2i32(&b, srcs[2])) :
nir_ubitfield_extract(&b, nir_u2u32(&b, srcs[0]), nir_i2i32(&b, srcs[1]), nir_i2i32(&b, srcs[2]));
break;
case ir_quadop_bitfield_insert:
result = nir_bitfield_insert(&b, srcs[0], srcs[1], srcs[2], srcs[3]);
result = nir_bitfield_insert(&b,
nir_u2u32(&b, srcs[0]), nir_u2u32(&b, srcs[1]),
nir_i2i32(&b, srcs[2]), nir_i2i32(&b, srcs[3]));
break;
case ir_quadop_vector:
result = nir_vec(&b, srcs, ir->type->vector_elements);