From cb965b207e7a91343acc4ce873aa88fbb10b0cb9 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Mon, 8 May 2023 13:52:44 -0700 Subject: [PATCH] zink: Use PIPE_CAP_FS_POINT_IS_SYSVAL. This better matches up to how spirv treats the value. Part-of: --- src/gallium/drivers/zink/ci/zink-lvp-fails.txt | 1 - src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 1 - src/gallium/drivers/zink/zink_compiler.c | 11 +++-------- src/gallium/drivers/zink/zink_screen.c | 1 + 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt index 682ba6c..52adec7 100644 --- a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt @@ -75,7 +75,6 @@ spec@!opengl 2.1@pbo@test_polygon_stip,Fail spec@!opengl 2.1@polygon-stipple-fs,Fail spec@arb_gpu_shader_fp64@execution@arb_gpu_shader_fp64-tf-separate,Fail spec@arb_pipeline_statistics_query@arb_pipeline_statistics_query-frag,Fail -spec@arb_point_sprite@arb_point_sprite-checkerboard,Fail spec@arb_point_sprite@arb_point_sprite-mipmap,Fail spec@arb_program_interface_query@arb_program_interface_query-getprogramresourceindex,Fail spec@arb_program_interface_query@arb_program_interface_query-getprogramresourceindex@'vs_input2[1][0]' on GL_PROGRAM_INPUT,Fail diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index 8c4921c..14f771d 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -790,7 +790,6 @@ emit_input(struct ntv_context *ctx, struct nir_variable *var) else if (ctx->stage == MESA_SHADER_FRAGMENT) { switch (var->data.location) { HANDLE_EMIT_BUILTIN(POS, FragCoord); - HANDLE_EMIT_BUILTIN(PNTC, PointCoord); HANDLE_EMIT_BUILTIN(LAYER, Layer); HANDLE_EMIT_BUILTIN(PRIMITIVE_ID, PrimitiveId); HANDLE_EMIT_BUILTIN(CLIP_DIST0, ClipDistance); diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index a7c91aa..7a7c480 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -2559,7 +2559,6 @@ assign_producer_var_io(gl_shader_stage stage, nir_variable *var, unsigned *reser switch (slot) { case -1: case VARYING_SLOT_POS: - case VARYING_SLOT_PNTC: case VARYING_SLOT_PSIZ: case VARYING_SLOT_LAYER: case VARYING_SLOT_PRIMITIVE_ID: @@ -2610,7 +2609,6 @@ assign_consumer_var_io(gl_shader_stage stage, nir_variable *var, unsigned *reser unsigned slot = var->data.location; switch (slot) { case VARYING_SLOT_POS: - case VARYING_SLOT_PNTC: case VARYING_SLOT_PSIZ: case VARYING_SLOT_LAYER: case VARYING_SLOT_PRIMITIVE_ID: @@ -3486,10 +3484,7 @@ invert_point_coord_instr(nir_builder *b, nir_instr *instr, void *data) if (instr->type != nir_instr_type_intrinsic) return false; nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_load_deref) - return false; - nir_variable *deref_var = nir_intrinsic_get_var(intr, 0); - if (deref_var->data.location != VARYING_SLOT_PNTC) + if (intr->intrinsic != nir_intrinsic_load_point_coord) return false; b->cursor = nir_after_instr(instr); nir_ssa_def *def = nir_vec2(b, nir_channel(b, &intr->dest.ssa, 0), @@ -3501,7 +3496,7 @@ invert_point_coord_instr(nir_builder *b, nir_instr *instr, void *data) static bool invert_point_coord(nir_shader *nir) { - if (!(nir->info.inputs_read & BITFIELD64_BIT(VARYING_SLOT_PNTC))) + if (!BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_POINT_COORD)) return false; return nir_shader_instructions_pass(nir, invert_point_coord_instr, nir_metadata_dominance, NULL); } @@ -3654,7 +3649,7 @@ zink_shader_compile(struct zink_screen *screen, bool can_shobj, struct zink_shad NIR_PASS_V(nir, lower_dual_blend); } if (zink_fs_key_base(key)->coord_replace_bits) - NIR_PASS_V(nir, nir_lower_texcoord_replace, zink_fs_key_base(key)->coord_replace_bits, false, false); + NIR_PASS_V(nir, nir_lower_texcoord_replace, zink_fs_key_base(key)->coord_replace_bits, true, false); if (zink_fs_key_base(key)->point_coord_yinvert) NIR_PASS_V(nir, invert_point_coord); if (zink_fs_key_base(key)->force_persample_interp || zink_fs_key_base(key)->fbfetch_ms) { diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 9625017..7d26939 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -960,6 +960,7 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param) return 1; case PIPE_CAP_FS_FACE_IS_INTEGER_SYSVAL: + case PIPE_CAP_FS_POINT_IS_SYSVAL: return 1; case PIPE_CAP_VIEWPORT_TRANSFORM_LOWERED: -- 2.7.4