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:
Italo Nicola 2020-12-16 03:52:15 +00:00 committed by Marge Bot
parent 8edccb7e8d
commit 7584a25919
2 changed files with 21 additions and 0 deletions

View File

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

View File

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