From 05a0349949921406aefe1d99e9d2af84629997e1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alejandro=20Pi=C3=B1eiro?= Date: Mon, 24 Aug 2020 10:33:46 +0200 Subject: [PATCH] v3d: set instance id to 0 at start of tile PTB assumes that base instance to be 0 at start of tile, but hw would not do that, we need to set it. It is worth to note that the opcode name is somewhat confusing as what it really sets is the base instance. We could rename the opcode, but then the name would be different to the original Broadcom name, so confusing in any case. This fixes several dEQP-GLES3 and dEQP-GLES31 tests that passes individually, but started to fail depending on other tests running before using base instance different to zero. This is the backport of a Vulkan patch that fixed some Vulkan CTS tests that start to fails after some other tests used an instance id. CC: 20.2 20.1 Reviewed-by: Eric Anholt Part-of: --- src/gallium/drivers/v3d/v3dx_rcl.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gallium/drivers/v3d/v3dx_rcl.c b/src/gallium/drivers/v3d/v3dx_rcl.c index 0582e9abab0..739088ec3ed 100644 --- a/src/gallium/drivers/v3d/v3dx_rcl.c +++ b/src/gallium/drivers/v3d/v3dx_rcl.c @@ -440,6 +440,13 @@ v3d_rcl_emit_generic_per_tile_list(struct v3d_job *job, int layer) fmt.primitive_type = LIST_TRIANGLES; } +#if V3D_VERSION >= 41 + /* PTB assumes that value to be 0, but hw will not set it. */ + cl_emit(cl, SET_INSTANCEID, set) { + set.instance_id = 0; + } +#endif + cl_emit(cl, BRANCH_TO_IMPLICIT_TILE_LIST, branch); v3d_rcl_emit_stores(job, cl, layer); -- 2.30.2