From f2d9805f9b27e8b8bc05cd77403b846a8024d317 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Fri, 1 Jul 2022 17:32:53 -0700 Subject: [PATCH] freedreno/ir3: Add more tess varying slots Fixes some piglits that I stumbled across by mistake. Signed-off-by: Rob Clark Part-of: --- src/freedreno/ci/freedreno-a630-fails.txt | 60 ----------------------- src/freedreno/ir3/ir3_nir_lower_tess.c | 42 ++++++++++------ src/freedreno/ir3/ir3_shader.h | 2 +- 3 files changed, 27 insertions(+), 77 deletions(-) diff --git a/src/freedreno/ci/freedreno-a630-fails.txt b/src/freedreno/ci/freedreno-a630-fails.txt index 7cf4c79b415..77feb4cc0a6 100644 --- a/src/freedreno/ci/freedreno-a630-fails.txt +++ b/src/freedreno/ci/freedreno-a630-fails.txt @@ -52,7 +52,6 @@ glx@glx-multi-window-single-context,Fail glx@glx-swap-pixmap-bad,Fail glx@glx-visuals-depth -pixmap,Crash glx@glx-visuals-stencil -pixmap,Crash -shaders@glsl-fs-fogscale,Fail # "../src/freedreno/ir3/ir3_shader.h:968:ir3_link_add: Assertion `i < ARRAY_SIZE(l->var)' failed." shaders@glsl-max-varyings >max_varying_components,Crash @@ -311,15 +310,6 @@ spec@glsl-1.50@execution@compatibility@clipping@vs-gs-clip-vertex-equal-to-posit spec@glsl-1.50@execution@compatibility@clipping@vs-gs-clip-vertex-homogeneity,Crash spec@glsl-1.50@execution@compatibility@clipping@vs-gs-clip-vertex-primitives-triangle-strip,Crash -spec@glsl-1.50@execution@compatibility@gs-clamp-vertex-color,Fail -spec@glsl-1.50@execution@compatibility@gs-ff-frag,Fail - -spec@glsl-1.50@execution@compatibility@gs-texcoord-array-2,Fail -spec@glsl-1.50@execution@compatibility@gs-texcoord-array,Fail - -# "ir3_nir_lower_tess.c:111: shader_io_get_unique_index: Assertion `!"illegal slot in get unique index\n"' failed." -# I think on VARYING_SLOT_COL0 from the VS. -spec@glsl-1.50@execution@compatibility@vs-gs-ff-frag,Crash spec@glsl-1.50@execution@compatibility@vs-gs-texcoord-array-2,Crash spec@glsl-1.50@execution@compatibility@vs-gs-texcoord-array,Crash @@ -457,56 +447,6 @@ spec@!opengl 1.4@gl-1.4-polygon-offset,Fail spec@!opengl 2.0@gl-2.0-edgeflag,Crash spec@!opengl 2.0@gl-2.0-edgeflag-immediate,Crash -# "src/freedreno/ir3/ir3_nir_lower_tess.c:111: shader_io_get_unique_index: Assertion `!"illegal slot in get unique index\n"'" -spec@!opengl 2.0@vertex-program-two-side back back2,Crash - -spec@!opengl 2.0@vertex-program-two-side back front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side back front2,Fail -spec@!opengl 2.0@vertex-program-two-side back,Crash -spec@!opengl 2.0@vertex-program-two-side back2,Crash -spec@!opengl 2.0@vertex-program-two-side enabled back back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled back front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled back front2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled back,Fail -spec@!opengl 2.0@vertex-program-two-side enabled back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back front2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front front2 back2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front front2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front front2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front2 back2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front back back2,Fail -spec@!opengl 2.0@vertex-program-two-side front back back2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front back front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side front back front2 back2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front back front2,Fail -spec@!opengl 2.0@vertex-program-two-side front back front2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front back,Fail -spec@!opengl 2.0@vertex-program-two-side front back@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front back2,Fail -spec@!opengl 2.0@vertex-program-two-side front back2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side front front2 back2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front front2,Fail -spec@!opengl 2.0@vertex-program-two-side front front2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front,Fail -spec@!opengl 2.0@vertex-program-two-side front@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side front2 back2@gs-out and fs,Fail -spec@!opengl 2.0@vertex-program-two-side front2,Fail -spec@!opengl 2.0@vertex-program-two-side front2@gs-out and fs,Fail - spec@!opengl 2.1@pbo,Fail spec@!opengl 2.1@pbo@test_polygon_stip,Fail spec@!opengl 2.1@polygon-stipple-fs,Fail diff --git a/src/freedreno/ir3/ir3_nir_lower_tess.c b/src/freedreno/ir3/ir3_nir_lower_tess.c index b03f88f5f08..1e0b217993c 100644 --- a/src/freedreno/ir3/ir3_nir_lower_tess.c +++ b/src/freedreno/ir3/ir3_nir_lower_tess.c @@ -30,7 +30,7 @@ struct state { struct primitive_map { /* +POSITION, +PSIZE, ... - see shader_io_get_unique_index */ - unsigned loc[32 + 6]; + unsigned loc[32 + 11]; unsigned stride; } map; @@ -99,21 +99,31 @@ is_tess_levels(gl_varying_slot slot) static unsigned shader_io_get_unique_index(gl_varying_slot slot) { - if (slot == VARYING_SLOT_POS) - return 0; - if (slot == VARYING_SLOT_PSIZ) - return 1; - if (slot == VARYING_SLOT_CLIP_DIST0) - return 2; - if (slot == VARYING_SLOT_CLIP_DIST1) - return 3; - if (slot == VARYING_SLOT_VIEWPORT) - return 4; - if (slot == VARYING_SLOT_LAYER) - return 5; - if (slot >= VARYING_SLOT_VAR0 && slot <= VARYING_SLOT_VAR31) - return 6 + (slot - VARYING_SLOT_VAR0); - unreachable("illegal slot in get unique index\n"); + switch (slot) { + case VARYING_SLOT_POS: return 0; + case VARYING_SLOT_PSIZ: return 1; + case VARYING_SLOT_COL0: return 2; + case VARYING_SLOT_COL1: return 3; + case VARYING_SLOT_BFC0: return 4; + case VARYING_SLOT_BFC1: return 5; + case VARYING_SLOT_FOGC: return 6; + case VARYING_SLOT_CLIP_DIST0: return 7; + case VARYING_SLOT_CLIP_DIST1: return 8; + case VARYING_SLOT_CLIP_VERTEX: return 9; + case VARYING_SLOT_LAYER: return 10; + case VARYING_SLOT_VIEWPORT: return 11; + case VARYING_SLOT_VAR0 ... VARYING_SLOT_VAR31: { + struct state state = {}; + STATIC_ASSERT(ARRAY_SIZE(state.map.loc) == + (12 + VARYING_SLOT_VAR31 - VARYING_SLOT_VAR0)); + struct ir3_shader_variant v = {}; + STATIC_ASSERT(ARRAY_SIZE(v.output_loc) == + (12 + VARYING_SLOT_VAR31 - VARYING_SLOT_VAR0)); + return 12 + (slot - VARYING_SLOT_VAR0); + } + default: + unreachable("illegal slot in get unique index\n"); + } } static nir_ssa_def * diff --git a/src/freedreno/ir3/ir3_shader.h b/src/freedreno/ir3/ir3_shader.h index e91c2df6cc1..7833dbb5e62 100644 --- a/src/freedreno/ir3/ir3_shader.h +++ b/src/freedreno/ir3/ir3_shader.h @@ -627,7 +627,7 @@ struct ir3_shader_variant { * offset, and in bytes for all other stages. * +POSITION, +PSIZE, ... - see shader_io_get_unique_index */ - unsigned output_loc[32 + 6]; + unsigned output_loc[32 + 11]; /* attributes (VS) / varyings (FS): * Note that sysval's should come *after* normal inputs.