mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-09 23:08:18 +02:00
radeonsi: use ac_nir_lower_sample_mask_in
to use the same code as RADV Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41768>
This commit is contained in:
parent
d5c4fb763a
commit
4b5852ad3f
2 changed files with 37 additions and 7 deletions
|
|
@ -342,9 +342,6 @@ static bool lower_intrinsic(nir_builder *b, nir_instr *instr, struct lower_abi_s
|
|||
replacement =
|
||||
nir_iadd_imm(b, ac_nir_unpack_arg(b, &args->ac, args->ac.tcs_offchip_layout, 7, 5), 1);
|
||||
break;
|
||||
case nir_intrinsic_load_sample_mask_in:
|
||||
replacement = ac_nir_load_arg(b, &args->ac, args->ac.sample_coverage);
|
||||
break;
|
||||
case nir_intrinsic_load_lshs_vertex_stride_amd:
|
||||
if (stage == MESA_SHADER_VERTEX) {
|
||||
replacement = nir_imm_int(b, si_shader_lshs_vertex_stride(shader));
|
||||
|
|
@ -695,6 +692,9 @@ static bool lower_intrinsic(nir_builder *b, nir_instr *instr, struct lower_abi_s
|
|||
case nir_intrinsic_load_ring_mesh_scratch_amd:
|
||||
replacement = build_mesh_scratch_ring_desc(b, s);
|
||||
break;
|
||||
case nir_intrinsic_load_use_sample_mask_in_amd:
|
||||
replacement = nir_imm_true(b);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -841,12 +841,32 @@ static void si_preprocess_nir(struct si_nir_shader_ctx *ctx)
|
|||
if (key->ps.mono.point_smoothing)
|
||||
NIR_PASS(progress, nir, nir_lower_point_smooth, true);
|
||||
|
||||
bool msaa_disabled = key->ps.part.prolog.force_persp_center_interp ||
|
||||
key->ps.part.prolog.force_linear_center_interp ||
|
||||
key->ps.part.prolog.force_samplemask_to_helper_invocation ||
|
||||
key->ps.mono.interpolate_at_sample_force_center;
|
||||
bool sample_shading = key->ps.part.prolog.samplemask_log_ps_iter ||
|
||||
key->ps.part.prolog.force_persp_sample_interp ||
|
||||
key->ps.part.prolog.force_linear_sample_interp;
|
||||
ac_nir_lower_sample_mask_in_options lower_sample_mask_in_options = {0};
|
||||
|
||||
/* samplemask_log_ps_iter is always 3 with maximum sample shading */
|
||||
if (nir->info.fs.uses_sample_shading || key->ps.part.prolog.samplemask_log_ps_iter == 3) {
|
||||
lower_sample_mask_in_options.behavior = ac_nir_lower_samplemask_sample_shading_max;
|
||||
} else if (sample_shading) {
|
||||
lower_sample_mask_in_options.behavior = ac_nir_lower_samplemask_sample_shading_partial;
|
||||
lower_sample_mask_in_options.ps_iter_samples = 1 << key->ps.part.prolog.samplemask_log_ps_iter;
|
||||
} else if (msaa_disabled) {
|
||||
lower_sample_mask_in_options.behavior = ac_nir_lower_samplemask_1sample_no_vrs;
|
||||
} else {
|
||||
lower_sample_mask_in_options.behavior = ac_nir_lower_samplemask_unknown_states_no_sample_shading;
|
||||
}
|
||||
|
||||
NIR_PASS(progress, nir, ac_nir_lower_sample_mask_in, &lower_sample_mask_in_options);
|
||||
|
||||
/* This eliminates system values and unused shader output components. */
|
||||
ac_nir_lower_ps_early_options early_options = {
|
||||
.msaa_disabled = key->ps.part.prolog.force_persp_center_interp ||
|
||||
key->ps.part.prolog.force_linear_center_interp ||
|
||||
key->ps.part.prolog.force_samplemask_to_helper_invocation ||
|
||||
key->ps.mono.interpolate_at_sample_force_center,
|
||||
.msaa_disabled = msaa_disabled,
|
||||
.load_sample_positions_always_loads_current_ones = true,
|
||||
.force_front_face = key->ps.opt.force_front_face_input,
|
||||
/* This does a lot of things. See the description in ac_nir_lower_ps_early_options. */
|
||||
|
|
@ -886,6 +906,16 @@ static void si_preprocess_nir(struct si_nir_shader_ctx *ctx)
|
|||
if (key->ps.part.prolog.poly_stipple)
|
||||
NIR_PASS(progress, nir, si_nir_lower_polygon_stipple);
|
||||
} else {
|
||||
ac_nir_lower_sample_mask_in_options lower_sample_mask_in_options = {0};
|
||||
|
||||
/* Sample shading with the sample mask used always uses monolithic shader compilation. */
|
||||
if (nir->info.fs.uses_sample_shading)
|
||||
lower_sample_mask_in_options.behavior = ac_nir_lower_samplemask_sample_shading_max;
|
||||
else
|
||||
lower_sample_mask_in_options.behavior = ac_nir_lower_samplemask_unknown_states_no_sample_shading;
|
||||
|
||||
NIR_PASS(progress, nir, ac_nir_lower_sample_mask_in, &lower_sample_mask_in_options);
|
||||
|
||||
ac_nir_lower_ps_early_options early_options = {
|
||||
.ps_iter_samples = nir->info.fs.uses_sample_shading ? 8 : 0,
|
||||
.lower_color_inputs_to_load_color01 = true,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue