mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 03:08:05 +02:00
nir: Support multisampled images in lower_read_only_images_to_tex()
This is needed for cl_khr_gl_msaa_sharing Reviewed-by: Jesse Natalie <jenatali@microsoft.com> Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30834>
This commit is contained in:
parent
c5e38d5cb8
commit
260a50add5
1 changed files with 26 additions and 4 deletions
|
|
@ -75,7 +75,8 @@ lower_readonly_image_instr_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin
|
|||
const struct readonly_image_lower_options *options)
|
||||
{
|
||||
if (intrin->intrinsic != nir_intrinsic_image_deref_load &&
|
||||
intrin->intrinsic != nir_intrinsic_image_deref_size)
|
||||
intrin->intrinsic != nir_intrinsic_image_deref_size &&
|
||||
intrin->intrinsic != nir_intrinsic_image_deref_samples)
|
||||
return false;
|
||||
|
||||
nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
|
||||
|
|
@ -102,13 +103,22 @@ lower_readonly_image_instr_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin
|
|||
nir_texop texop;
|
||||
switch (intrin->intrinsic) {
|
||||
case nir_intrinsic_image_deref_load:
|
||||
texop = nir_texop_txf;
|
||||
num_srcs = 3;
|
||||
if (nir_intrinsic_image_dim(intrin) == GLSL_SAMPLER_DIM_MS) {
|
||||
texop = nir_texop_txf_ms;
|
||||
num_srcs = 4;
|
||||
} else {
|
||||
texop = nir_texop_txf;
|
||||
num_srcs = 3;
|
||||
}
|
||||
break;
|
||||
case nir_intrinsic_image_deref_size:
|
||||
texop = nir_texop_txs;
|
||||
num_srcs = 2;
|
||||
break;
|
||||
case nir_intrinsic_image_deref_samples:
|
||||
texop = nir_texop_texture_samples;
|
||||
num_srcs = 1;
|
||||
break;
|
||||
default:
|
||||
unreachable("Unsupported intrinsic");
|
||||
}
|
||||
|
|
@ -145,7 +155,13 @@ lower_readonly_image_instr_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin
|
|||
nir_def *lod = intrin->src[3].ssa;
|
||||
tex->src[2] = nir_tex_src_for_ssa(nir_tex_src_lod, lod);
|
||||
|
||||
assert(num_srcs == 3);
|
||||
if (texop == nir_texop_txf_ms) {
|
||||
assert(num_srcs == 4);
|
||||
nir_def *ms_index = intrin->src[2].ssa;
|
||||
tex->src[3] = nir_tex_src_for_ssa(nir_tex_src_ms_index, ms_index);
|
||||
} else {
|
||||
assert(num_srcs == 3);
|
||||
}
|
||||
|
||||
tex->dest_type = nir_intrinsic_dest_type(intrin);
|
||||
nir_def_init(&tex->instr, &tex->def, 4, 32);
|
||||
|
|
@ -163,6 +179,12 @@ lower_readonly_image_instr_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin
|
|||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_image_deref_samples:
|
||||
assert(num_srcs == 1);
|
||||
tex->dest_type = nir_type_uint32;
|
||||
nir_def_init(&tex->instr, &tex->def, 1, 32);
|
||||
break;
|
||||
|
||||
default:
|
||||
unreachable("Unsupported intrinsic");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue