i965: passthru formats cannot be used width edge flag enabled

Add an assertion to detect this case.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Alejandro Piñeiro 2016-03-24 11:49:53 +01:00
parent 8b0a334b5e
commit 1ff32ae8b2
1 changed files with 20 additions and 0 deletions

View File

@ -34,6 +34,20 @@
#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.