vc4: Set the primitive list format at the start of rendering.
authorEric Anholt <eric@anholt.net>
Thu, 16 Oct 2014 09:17:57 +0000 (10:17 +0100)
committerEric Anholt <eric@anholt.net>
Fri, 17 Oct 2014 12:09:28 +0000 (13:09 +0100)
The other driver does this manually before calling into each tile, but we
can just let it get binned into the tiles (saving repeated kernel
validation on the packet).

Fixes simulator assertion failures on polygon-mode and non-auto texwrap.

src/gallium/drivers/vc4/vc4_draw.c
src/gallium/drivers/vc4/vc4_packet.h

index f3c225de399ba2005bc99b2133fbbcf1466627a4..f53caf79cfbde6df2afcdf53f5bb93ebc6c76768 100644 (file)
@@ -85,6 +85,15 @@ vc4_start_draw(struct vc4_context *vc4)
          */
         cl_u8(&vc4->bcl, VC4_PACKET_START_TILE_BINNING);
 
+        /* Reset the current compressed primitives format.  This gets modified
+         * by VC4_PACKET_GL_INDEXED_PRIMITIVE and
+         * VC4_PACKET_GL_ARRAY_PRIMITIVE, so it needs to be reset at the start
+         * of every tile.
+         */
+        cl_u8(&vc4->bcl, VC4_PACKET_PRIMITIVE_LIST_FORMAT);
+        cl_u8(&vc4->bcl, (VC4_PRIMITIVE_LIST_FORMAT_16_INDEX |
+                          VC4_PRIMITIVE_LIST_FORMAT_TYPE_TRIANGLES));
+
         vc4->needs_flush = true;
         vc4->draw_call_queued = true;
 }
index e9abfd173147a5f8aa264fab5b1e720cb5af67a9..181f2e01dc9777d2dd4e65a631367bb08fa26a12 100644 (file)
@@ -234,6 +234,12 @@ enum vc4_packet {
 #define VC4_RENDER_CONFIG_TILE_BUFFER_64BIT        (1 << 1)
 #define VC4_RENDER_CONFIG_MS_MODE_4X               (1 << 0)
 
+#define VC4_PRIMITIVE_LIST_FORMAT_16_INDEX         (1 << 4)
+#define VC4_PRIMITIVE_LIST_FORMAT_32_XY            (3 << 4)
+#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_POINTS      (0 << 0)
+#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_LINES       (1 << 0)
+#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_TRIANGLES   (2 << 0)
+#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_RHT         (3 << 0)
 
 enum vc4_texture_data_type {
         VC4_TEXTURE_TYPE_RGBA8888 = 0,