i965: passthru formats cannot be used width edge flag enabled
authorAlejandro Piñeiro <apinheiro@igalia.com>
Thu, 24 Mar 2016 10:49:53 +0000 (11:49 +0100)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Tue, 17 May 2016 05:34:40 +0000 (07:34 +0200)
Add an assertion to detect this case.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/gen8_draw_upload.c

index c862f05c826985b155ef06a1ac19a935de5e0954..dce11dd0ff377e4ec093db00923ead5a636960f8 100644 (file)
 #include "intel_batchbuffer.h"
 #include "intel_buffer_objects.h"
 
+static bool
+is_passthru_format(uint32_t format)
+{
+   switch (format) {
+   case BRW_SURFACEFORMAT_R64_PASSTHRU:
+   case BRW_SURFACEFORMAT_R64G64_PASSTHRU:
+   case BRW_SURFACEFORMAT_R64G64B64_PASSTHRU:
+   case BRW_SURFACEFORMAT_R64G64B64A64_PASSTHRU:
+      return true;
+   default:
+      return false;
+   }
+}
+
 static void
 gen8_emit_vertices(struct brw_context *brw)
 {
@@ -193,6 +207,12 @@ gen8_emit_vertices(struct brw_context *brw)
       uint32_t comp2 = BRW_VE1_COMPONENT_STORE_SRC;
       uint32_t comp3 = BRW_VE1_COMPONENT_STORE_SRC;
 
+      /* From the BDW PRM, Volume 2d, page 588 (VERTEX_ELEMENT_STATE):
+       * "Any SourceElementFormat of *64*_PASSTHRU cannot be used with an
+       * element which has edge flag enabled."
+       */
+      assert(!(is_passthru_format(format) && uses_edge_flag));
+
       /* The gen4 driver expects edgeflag to come in as a float, and passes
        * that float on to the tests in the clipper.  Mesa's current vertex
        * attribute value for EdgeFlag is stored as a float, which works out.