From a2a9e93e7271cf5b9604575413fb2ce6dea1ba74 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Sun, 27 Oct 2024 12:46:13 +0100 Subject: [PATCH] radv: add support for load_pixel_coord MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Timur Kristóf Reviewed-by: Alyssa Rosenzweig Part-of: --- src/amd/vulkan/radv_pipeline_graphics.c | 1 + src/amd/vulkan/radv_shader.c | 3 ++- src/amd/vulkan/radv_shader_args.c | 2 +- src/amd/vulkan/radv_shader_info.c | 4 ++++ src/amd/vulkan/radv_shader_info.h | 1 + 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline_graphics.c b/src/amd/vulkan/radv_pipeline_graphics.c index a4aa262a127..b8e2c248704 100644 --- a/src/amd/vulkan/radv_pipeline_graphics.c +++ b/src/amd/vulkan/radv_pipeline_graphics.c @@ -2107,6 +2107,7 @@ radv_consider_force_vrs(const struct radv_graphics_state_key *gfx_state, const s */ nir_shader *fs_shader = fs_stage->nir; if (fs_shader && (BITSET_TEST(fs_shader->info.system_values_read, SYSTEM_VALUE_FRAG_COORD) || + BITSET_TEST(fs_shader->info.system_values_read, SYSTEM_VALUE_PIXEL_COORD) || fs_shader->info.fs.sample_interlock_ordered || fs_shader->info.fs.sample_interlock_unordered || fs_shader->info.fs.pixel_interlock_ordered || fs_shader->info.fs.pixel_interlock_unordered)) { return false; diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 1e72ea3ba14..ee9f0c09c32 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -3393,7 +3393,8 @@ radv_compute_spi_ps_input(const struct radv_physical_device *pdev, const struct S_0286CC_LINEAR_CENTROID_ENA(info->ps.reads_linear_centroid) | S_0286CC_LINEAR_SAMPLE_ENA(info->ps.reads_linear_sample) | S_0286CC_PERSP_PULL_MODEL_ENA(info->ps.reads_barycentric_model) | - S_0286CC_FRONT_FACE_ENA(info->ps.reads_front_face); + S_0286CC_FRONT_FACE_ENA(info->ps.reads_front_face) | + S_0286CC_POS_FIXED_PT_ENA(info->ps.reads_pixel_coord); if (info->ps.reads_frag_coord_mask || info->ps.reads_sample_pos_mask) { uint8_t mask = info->ps.reads_frag_coord_mask | info->ps.reads_sample_pos_mask; diff --git a/src/amd/vulkan/radv_shader_args.c b/src/amd/vulkan/radv_shader_args.c index 75f5a66444f..6d14e50ad12 100644 --- a/src/amd/vulkan/radv_shader_args.c +++ b/src/amd/vulkan/radv_shader_args.c @@ -276,7 +276,7 @@ declare_ps_input_vgprs(const struct radv_shader_info *info, struct radv_shader_a ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.front_face); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.ancillary); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.sample_coverage); - ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, NULL); /* fixed pt */ + ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.pos_fixed_pt); if (args->remap_spi_ps_input) ac_compact_ps_vgpr_args(&args->ac, info->ps.spi_ps_input_ena); diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index 4271ea79eb6..0652efed287 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -270,6 +270,9 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr, s } break; } + case nir_intrinsic_load_pixel_coord: + info->ps.reads_pixel_coord = true; + break; case nir_intrinsic_load_frag_coord: info->ps.reads_frag_coord_mask |= nir_def_components_read(&instr->def); break; @@ -963,6 +966,7 @@ gather_shader_info_fs(const struct radv_device *device, const nir_shader *nir, !(uses_persp_or_linear_interp || info->ps.needs_sample_positions || info->ps.reads_frag_shading_rate || info->ps.writes_memory || nir->info.fs.needs_quad_helper_invocations || BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_FRAG_COORD) || + BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_PIXEL_COORD) || BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_POINT_COORD) || BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_SAMPLE_ID) || BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_SAMPLE_POS) || diff --git a/src/amd/vulkan/radv_shader_info.h b/src/amd/vulkan/radv_shader_info.h index e08ef575136..bb15752cdf2 100644 --- a/src/amd/vulkan/radv_shader_info.h +++ b/src/amd/vulkan/radv_shader_info.h @@ -198,6 +198,7 @@ struct radv_shader_info { bool reads_linear_center; bool reads_linear_centroid; bool reads_fully_covered; + bool reads_pixel_coord; uint8_t reads_frag_coord_mask; uint8_t reads_sample_pos_mask; uint8_t depth_layout;