pan/mdg: implement nir_intrinsic_image_size
To implement it in midgard, we just need to read the image_size sysval. Signed-off-by: Italo Nicola <italonicola@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8066>
This commit is contained in:
parent
8edccb7e8d
commit
7584a25919
|
@ -1646,6 +1646,12 @@ emit_intrinsic(compiler_context *ctx, nir_intrinsic_instr *instr)
|
|||
emit_image_op(ctx, instr, false);
|
||||
break;
|
||||
|
||||
case nir_intrinsic_image_size: {
|
||||
unsigned nr_comp = nir_intrinsic_dest_components(instr);
|
||||
emit_sysval_read(ctx, &instr->instr, nr_comp, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_load_uniform:
|
||||
case nir_intrinsic_load_ubo:
|
||||
case nir_intrinsic_load_global:
|
||||
|
|
|
@ -48,6 +48,19 @@ panfrost_sysval_for_sampler(nir_intrinsic_instr *instr)
|
|||
return PAN_SYSVAL(SAMPLER, uindex);
|
||||
}
|
||||
|
||||
static int
|
||||
panfrost_sysval_for_image_size(nir_intrinsic_instr *instr)
|
||||
{
|
||||
nir_src index = instr->src[0];
|
||||
assert(nir_src_is_const(index));
|
||||
|
||||
bool is_array = nir_intrinsic_image_array(instr);
|
||||
uint32_t uindex = nir_src_as_uint(index);
|
||||
unsigned dim = nir_intrinsic_dest_components(instr) - is_array;
|
||||
|
||||
return PAN_SYSVAL(IMAGE_SIZE, PAN_TXS_SYSVAL_ID(uindex, dim, is_array));
|
||||
}
|
||||
|
||||
static unsigned
|
||||
panfrost_nir_sysval_for_intrinsic(nir_intrinsic_instr *instr)
|
||||
{
|
||||
|
@ -67,6 +80,8 @@ panfrost_nir_sysval_for_intrinsic(nir_intrinsic_instr *instr)
|
|||
return panfrost_sysval_for_ssbo(instr);
|
||||
case nir_intrinsic_load_sampler_lod_parameters_pan:
|
||||
return panfrost_sysval_for_sampler(instr);
|
||||
case nir_intrinsic_image_size:
|
||||
return panfrost_sysval_for_image_size(instr);
|
||||
default:
|
||||
return ~0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue