diff --git a/.pick_status.json b/.pick_status.json index 3e5cdfa1b56..4cf2d8648bf 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1201,7 +1201,7 @@ "description": "pan/bi: Lower swizzles on CSEL.i32/MUX.i32", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/panfrost/bifrost/bi_lower_swizzle.c b/src/panfrost/bifrost/bi_lower_swizzle.c index a0d5917b218..b7549b0f385 100644 --- a/src/panfrost/bifrost/bi_lower_swizzle.c +++ b/src/panfrost/bifrost/bi_lower_swizzle.c @@ -50,6 +50,19 @@ bi_lower_swizzle_16(bi_context *ctx, bi_instr *ins, unsigned src) * derivatives, which might require swizzle lowering */ case BI_OPCODE_CLPER_I32: case BI_OPCODE_CLPER_V6_I32: + + /* Similarly, CSEL.i32 consumes a boolean as a 32-bit argument. If the + * boolean is implemented as a 16-bit integer, the swizzle is needed + * for correct operation if the instruction producing the 16-bit + * boolean does not replicate to both halves of the containing 32-bit + * register. As such, we may need to lower a swizzle. + * + * This is a silly hack. Ideally, code gen would be smart enough to + * avoid this case (by replicating). In practice, silly hardware design + * decisions force our hand here. + */ + case BI_OPCODE_MUX_I32: + case BI_OPCODE_CSEL_I32: break; case BI_OPCODE_IADD_V2S16: diff --git a/src/panfrost/ci/panfrost-g52-fails.txt b/src/panfrost/ci/panfrost-g52-fails.txt index e3dd9fb5fbe..d5f85f621f6 100644 --- a/src/panfrost/ci/panfrost-g52-fails.txt +++ b/src/panfrost/ci/panfrost-g52-fails.txt @@ -19,7 +19,6 @@ glx@glx-visuals-stencil -pixmap,Crash shaders@glsl-bug-110796,Fail shaders@glsl-uniform-interstage-limits@subdivide 5,Crash shaders@glsl-uniform-interstage-limits@subdivide 5- statechanges,Crash -shaders@glsl-vs-if-bool,Fail shaders@point-vertex-id divisor,Fail shaders@point-vertex-id gl_instanceid divisor,Fail shaders@point-vertex-id gl_instanceid,Fail @@ -102,12 +101,6 @@ spec@arb_pixel_buffer_object@texsubimage cube_map_array pbo,Fail spec@arb_point_sprite@arb_point_sprite-checkerboard,Fail spec@arb_point_sprite@arb_point_sprite-mipmap,Fail spec@arb_provoking_vertex@arb-provoking-vertex-render,Fail -spec@arb_sample_shading@builtin-gl-sample-id 0,Fail -spec@arb_sample_shading@builtin-gl-sample-id 2,Fail -spec@arb_sample_shading@builtin-gl-sample-id 4,Fail -spec@arb_sample_shading@builtin-gl-sample-mask 0,Fail -spec@arb_sample_shading@builtin-gl-sample-mask 2,Fail -spec@arb_sample_shading@builtin-gl-sample-mask 4,Fail spec@arb_sample_shading@samplemask 2@0.250000 mask_in_one,Fail spec@arb_sample_shading@samplemask 2@0.500000 mask_in_one,Fail spec@arb_sample_shading@samplemask 2@1.000000 mask_in_one,Fail