From e8acc5a7ea8168fce587c6728bb988e77516e64c Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 2 Dec 2021 14:11:21 -0600 Subject: [PATCH] nir: Add a new sample_pos_or_center system value Reviewed-by: Lionel Landwerlin Part-of: --- src/compiler/nir/nir.c | 4 ++++ src/compiler/nir/nir_divergence_analysis.c | 1 + src/compiler/nir/nir_gather_info.c | 1 + src/compiler/nir/nir_intrinsics.py | 3 +++ src/compiler/nir/nir_opt_peephole_select.c | 1 + src/compiler/shader_enums.h | 1 + 6 files changed, 11 insertions(+) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index d02f3d28da8..b8ddf57ea30 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -2369,6 +2369,8 @@ nir_intrinsic_from_system_value(gl_system_value val) return nir_intrinsic_load_sample_id; case SYSTEM_VALUE_SAMPLE_POS: return nir_intrinsic_load_sample_pos; + case SYSTEM_VALUE_SAMPLE_POS_OR_CENTER: + return nir_intrinsic_load_sample_pos_or_center; case SYSTEM_VALUE_SAMPLE_MASK_IN: return nir_intrinsic_load_sample_mask_in; case SYSTEM_VALUE_LOCAL_INVOCATION_ID: @@ -2500,6 +2502,8 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin) return SYSTEM_VALUE_SAMPLE_ID; case nir_intrinsic_load_sample_pos: return SYSTEM_VALUE_SAMPLE_POS; + case nir_intrinsic_load_sample_pos_or_center: + return SYSTEM_VALUE_SAMPLE_POS_OR_CENTER; case nir_intrinsic_load_sample_mask_in: return SYSTEM_VALUE_SAMPLE_MASK_IN; case nir_intrinsic_load_local_invocation_id: diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 20bbd8f8ae4..58ed99ea2d5 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -390,6 +390,7 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr) case nir_intrinsic_load_line_coord: case nir_intrinsic_load_frag_coord: case nir_intrinsic_load_sample_pos: + case nir_intrinsic_load_sample_pos_or_center: case nir_intrinsic_load_vertex_id_zero_base: case nir_intrinsic_load_vertex_id: case nir_intrinsic_load_instance_id: diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index bafc9a597ab..5463657cd31 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -629,6 +629,7 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader, case nir_intrinsic_load_front_face: case nir_intrinsic_load_sample_id: case nir_intrinsic_load_sample_pos: + case nir_intrinsic_load_sample_pos_or_center: case nir_intrinsic_load_sample_mask_in: case nir_intrinsic_load_helper_invocation: case nir_intrinsic_load_tess_coord: diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 43ec0446b69..ffc1c97bfdf 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -738,6 +738,9 @@ system_value("sample_id", 1) # sample shading. See the lower_helper_invocation option. system_value("sample_id_no_per_sample", 1) system_value("sample_pos", 2) +# sample_pos_or_center is like sample_pos but does not imply per-sample +# shading. When per-sample dispatch is not enabled, it returns (0.5, 0.5). +system_value("sample_pos_or_center", 2) system_value("sample_mask_in", 1) system_value("primitive_id", 1) system_value("invocation_id", 1) diff --git a/src/compiler/nir/nir_opt_peephole_select.c b/src/compiler/nir/nir_opt_peephole_select.c index 9d7e4e4b3a4..fc0a32b2bc6 100644 --- a/src/compiler/nir/nir_opt_peephole_select.c +++ b/src/compiler/nir/nir_opt_peephole_select.c @@ -128,6 +128,7 @@ block_check_for_allowed_instrs(nir_block *block, unsigned *count, case nir_intrinsic_load_layer_id: case nir_intrinsic_load_frag_coord: case nir_intrinsic_load_sample_pos: + case nir_intrinsic_load_sample_pos_or_center: case nir_intrinsic_load_sample_id: case nir_intrinsic_load_sample_mask_in: case nir_intrinsic_load_vertex_id_zero_base: diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index a98d52743e4..3519a58c029 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -715,6 +715,7 @@ typedef enum SYSTEM_VALUE_FRONT_FACE, SYSTEM_VALUE_SAMPLE_ID, SYSTEM_VALUE_SAMPLE_POS, + SYSTEM_VALUE_SAMPLE_POS_OR_CENTER, SYSTEM_VALUE_SAMPLE_MASK_IN, SYSTEM_VALUE_HELPER_INVOCATION, SYSTEM_VALUE_COLOR0,