mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 13:38:06 +02:00
pan,nir: Add cube face intrinsics
Reviewed-by: Christoph Pillmayer <christoph.pillmayer@arm.com> Reviewed-by: Lorenzo Rossi <lorenzo.rossi@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41036>
This commit is contained in:
parent
c99f97efd3
commit
337aaa0ab9
3 changed files with 46 additions and 0 deletions
|
|
@ -769,6 +769,9 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
|
|||
case nir_intrinsic_load_global_cvt_pan:
|
||||
case nir_intrinsic_lea_attr_pan:
|
||||
case nir_intrinsic_lea_buf_pan:
|
||||
case nir_intrinsic_cubeface_pan:
|
||||
case nir_intrinsic_cube_ssel_pan:
|
||||
case nir_intrinsic_cube_tsel_pan:
|
||||
case nir_intrinsic_atomic_counter_read:
|
||||
case nir_intrinsic_atomic_counter_read_deref:
|
||||
case nir_intrinsic_is_sparse_texels_resident:
|
||||
|
|
|
|||
|
|
@ -1733,6 +1733,18 @@ store("raw_output_pan", [], [IO_SEMANTICS, BASE])
|
|||
store("combined_output_pan", [1, 1, 1, 4], [IO_SEMANTICS, COMPONENT, SRC_TYPE, DEST_TYPE])
|
||||
load("raw_output_pan", [1], [IO_SEMANTICS], [CAN_ELIMINATE, CAN_REORDER])
|
||||
|
||||
# Returns a vec2 which is the result of CUBEFACE1/2
|
||||
# src = { x, y, z }
|
||||
intrinsic("cubeface_pan", [1, 1, 1], dest_comp=2, bit_sizes=[32],
|
||||
flags=[CAN_ELIMINATE, CAN_REORDER])
|
||||
|
||||
# src = { z, x, face }
|
||||
intrinsic("cube_ssel_pan", [1, 1, 1], dest_comp=1, bit_sizes=[32],
|
||||
flags=[CAN_ELIMINATE, CAN_REORDER])
|
||||
# src = { y, z, face }
|
||||
intrinsic("cube_tsel_pan", [1, 1, 1], dest_comp=1, bit_sizes=[32],
|
||||
flags=[CAN_ELIMINATE, CAN_REORDER])
|
||||
|
||||
# Loads the sampler paramaters <min_lod, max_lod, lod_bias>
|
||||
# src[] = { sampler_index }
|
||||
load("sampler_lod_parameters", [1], flags=[CAN_ELIMINATE, CAN_REORDER])
|
||||
|
|
|
|||
|
|
@ -2198,6 +2198,37 @@ bi_emit_intrinsic(bi_builder *b, nir_intrinsic_instr *instr)
|
|||
b->shader->info.has_ld_gclk_instr = true;
|
||||
break;
|
||||
|
||||
case nir_intrinsic_cubeface_pan: {
|
||||
bi_index x = bi_src_index(&instr->src[0]);
|
||||
bi_index y = bi_src_index(&instr->src[1]);
|
||||
bi_index z = bi_src_index(&instr->src[2]);
|
||||
|
||||
bi_index max_xyz = bi_temp(b->shader);
|
||||
bi_index inf_face = bi_temp(b->shader);
|
||||
|
||||
/* Use a pseudo op on Bifrost due to tuple restrictions */
|
||||
if (b->shader->arch <= 8) {
|
||||
bi_cubeface_to(b, max_xyz, inf_face, x, y, z);
|
||||
} else {
|
||||
bi_cubeface1_to(b, max_xyz, x, y, z);
|
||||
bi_cubeface2_v9_to(b, inf_face, x, y, z);
|
||||
}
|
||||
bi_collect_v2i32_to(b, dst, max_xyz, inf_face);
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_cube_ssel_pan:
|
||||
bi_cube_ssel_to(b, dst, bi_src_index(&instr->src[0]),
|
||||
bi_src_index(&instr->src[1]),
|
||||
bi_src_index(&instr->src[2]));
|
||||
break;
|
||||
|
||||
case nir_intrinsic_cube_tsel_pan:
|
||||
bi_cube_tsel_to(b, dst, bi_src_index(&instr->src[0]),
|
||||
bi_src_index(&instr->src[1]),
|
||||
bi_src_index(&instr->src[2]));
|
||||
break;
|
||||
|
||||
case nir_intrinsic_ddx:
|
||||
case nir_intrinsic_ddx_fine:
|
||||
bi_emit_derivative(b, dst, instr, 1, false);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue