v3dv/cmd_buffer: set instance id to 0 at start of tile
authorAlejandro Piñeiro <apinheiro@igalia.com>
Wed, 19 Aug 2020 14:38:34 +0000 (16:38 +0200)
committerMarge Bot <eric+marge@anholt.net>
Tue, 13 Oct 2020 21:21:33 +0000 (21:21 +0000)
PTB assumes that instance id to be 0 at start of tile, but hw would
not do that, we need to set it.

This fixes some Vulkan CTS tests that start to fails after some other
tests used an instance id.

So for example, before this commit for the following tests, executed
in that order, we got the following behaviour:

dEQP-VK.pipeline.vertex_input.multiple_attributes.binding_one_to_many.attributes.float.mat2.mat3 => Pass
dEQP-VK.draw.indexed_draw.draw_instanced_indexed_triangle_strip => Pass
dEQP-VK.pipeline.vertex_input.multiple_attributes.binding_one_to_many.attributes.float.mat2.mat3 => Fails

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>

src/broadcom/vulkan/v3dv_cmd_buffer.c

index 4fe5473..593816f 100644 (file)
@@ -1838,6 +1838,11 @@ cmd_buffer_render_pass_emit_per_tile_rcl(struct v3dv_cmd_buffer *cmd_buffer,
       fmt.primitive_type = LIST_TRIANGLES;
    }
 
+   /* PTB assumes that value to be 0, but hw will not set it. */
+   cl_emit(cl, SET_INSTANCEID, set) {
+      set.instance_id = 0;
+   }
+
    cl_emit(cl, BRANCH_TO_IMPLICIT_TILE_LIST, branch);
 
    cmd_buffer_render_pass_emit_stores(cmd_buffer, cl, layer);