diff --git a/src/asahi/lib/agx_nir_lower_gs.c b/src/asahi/lib/agx_nir_lower_gs.c index a5c71511539..83c16aed688 100644 --- a/src/asahi/lib/agx_nir_lower_gs.c +++ b/src/asahi/lib/agx_nir_lower_gs.c @@ -946,12 +946,13 @@ agx_nir_create_pre_gs(struct agx_xfb_key *key) nir_imm_ivec4(b, key->static_count[0], key->static_count[1], key->static_count[2], key->static_count[3]), nir_imm_int(b, key->invocations), nir_imm_int(b, key->vertices_per_prim), - nir_load_stat_query_address_agx(b, - .base = PIPE_STAT_QUERY_GS_INVOCATIONS), - nir_load_stat_query_address_agx(b, .base = PIPE_STAT_QUERY_GS_PRIMITIVES), - nir_load_stat_query_address_agx(b, .base = PIPE_STAT_QUERY_C_PRIMITIVES), - nir_load_stat_query_address_agx(b, - .base = PIPE_STAT_QUERY_C_INVOCATIONS)); + nir_load_stat_query_address_poly(b, + .base = PIPE_STAT_QUERY_GS_INVOCATIONS), + nir_load_stat_query_address_poly(b, + .base = PIPE_STAT_QUERY_GS_PRIMITIVES), + nir_load_stat_query_address_poly(b, .base = PIPE_STAT_QUERY_C_PRIMITIVES), + nir_load_stat_query_address_poly(b, + .base = PIPE_STAT_QUERY_C_INVOCATIONS)); agx_preprocess_nir(b->shader); return b->shader; } diff --git a/src/asahi/lib/agx_nir_prolog_epilog.c b/src/asahi/lib/agx_nir_prolog_epilog.c index fe9d5cd506f..fe2d63e505d 100644 --- a/src/asahi/lib/agx_nir_prolog_epilog.c +++ b/src/asahi/lib/agx_nir_prolog_epilog.c @@ -706,7 +706,7 @@ agx_nir_lower_stats_fs(nir_shader *s) nir_def *samples = nir_bit_count(b, nir_load_sample_mask_in(b)); unsigned query = PIPE_STAT_QUERY_PS_INVOCATIONS; - nir_def *addr = nir_load_stat_query_address_agx(b, .base = query); + nir_def *addr = nir_load_stat_query_address_poly(b, .base = query); nir_global_atomic(b, 32, addr, samples, .atomic_op = nir_atomic_op_iadd); nir_pop_if(b, NULL); diff --git a/src/asahi/vulkan/hk_nir_lower_descriptors.c b/src/asahi/vulkan/hk_nir_lower_descriptors.c index 5954bacf713..2c046c2262e 100644 --- a/src/asahi/vulkan/hk_nir_lower_descriptors.c +++ b/src/asahi/vulkan/hk_nir_lower_descriptors.c @@ -478,7 +478,7 @@ lower_uvs_index(nir_builder *b, nir_intrinsic_instr *intrin, void *data) return true; } - case nir_intrinsic_load_stat_query_address_agx: { + case nir_intrinsic_load_stat_query_address_poly: { b->cursor = nir_instr_remove(&intrin->instr); unsigned off1 = hk_root_descriptor_offset(draw.pipeline_stats); diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 41371db0be7..47fc1f02906 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1426,6 +1426,9 @@ system_value("geometry_param_buffer_poly", 1, bit_sizes=[64]) # Address of the parameter buffer for poly tessellation shaders system_value("tess_param_buffer_poly", 1, bit_sizes=[64]) +# Address of the pipeline statistic query result indexed by BASE +system_value("stat_query_address_poly", 1, bit_sizes=[64], indices=[BASE]) + # IR3-specific version of most SSBO intrinsics. The only different # compare to the originals is that they add an extra source to hold # the dword-offset, which is needed by the backend code apart from @@ -2327,9 +2330,6 @@ barrier("fence_pbe_to_tex_pixel_agx") # Unknown fence used in the helper program on exit. barrier("fence_helper_exit_agx") -# Address of the pipeline statistic query result indexed by BASE -system_value("stat_query_address_agx", 1, bit_sizes=[64], indices=[BASE]) - # Helper shader intrinsics # src[] = { value }. intrinsic("doorbell_agx", src_comp=[1]) diff --git a/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c b/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c index f21f44da6b5..677e19f0588 100644 --- a/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c +++ b/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c @@ -166,7 +166,7 @@ lower_intrinsic(nir_builder *b, nir_intrinsic_instr *intr, return load_sysval_root(b, 1, 16, &u->sample_mask); case nir_intrinsic_load_sample_positions_agx: return load_sysval_root(b, 1, 32, &u->ppp_multisamplectl); - case nir_intrinsic_load_stat_query_address_agx: + case nir_intrinsic_load_stat_query_address_poly: return load_sysval_root( b, 1, 64, &u->pipeline_statistics[nir_intrinsic_base(intr)]); case nir_intrinsic_load_ssbo_address: diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index 19f136e836a..bec5b7a8172 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -2072,7 +2072,7 @@ static bool lower_fs_prolog_abi(nir_builder *b, nir_intrinsic_instr *intr, UNUSED void *_) { if (intr->intrinsic != nir_intrinsic_load_polygon_stipple_agx && - intr->intrinsic != nir_intrinsic_load_stat_query_address_agx) + intr->intrinsic != nir_intrinsic_load_stat_query_address_poly) return false; b->cursor = nir_before_instr(&intr->instr);