From 3487d2e7bfc3625eee8bf87cee28cf2950e314cc Mon Sep 17 00:00:00 2001 From: Topi Pohjolainen Date: Wed, 18 May 2016 16:18:59 +0300 Subject: [PATCH] i965/blorp: Disable vertex element swizzling Without vertex elements originating directly from vertex fetcher are not passed to wm-state correctly. Signed-off-by: Topi Pohjolainen Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/gen7_blorp.c | 11 +++++++++-- src/mesa/drivers/dri/i965/gen8_blorp.c | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen7_blorp.c b/src/mesa/drivers/dri/i965/gen7_blorp.c index e1145862b64..3a8643f9972 100644 --- a/src/mesa/drivers/dri/i965/gen7_blorp.c +++ b/src/mesa/drivers/dri/i965/gen7_blorp.c @@ -448,8 +448,15 @@ gen7_blorp_emit_sf_config(struct brw_context *brw, BEGIN_BATCH(14); OUT_BATCH(_3DSTATE_SBE << 16 | (14 - 2)); - OUT_BATCH(GEN7_SBE_SWIZZLE_ENABLE | - num_varyings << GEN7_SBE_NUM_OUTPUTS_SHIFT | + + /* There is no need for swizzling (GEN7_SBE_SWIZZLE_ENABLE). All the + * vertex data coming from vertex fetcher is taken as unmodified + * (i.e., passed through). Vertex shader state is disabled and vertex + * fetcher builds complete vertex entries including VUE header. + * This is for unknown reason really needed to be disabled when more + * than one vec4 worth of vertex attributes are needed. + */ + OUT_BATCH(num_varyings << GEN7_SBE_NUM_OUTPUTS_SHIFT | 1 << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT | BRW_SF_URB_ENTRY_READ_OFFSET << GEN7_SBE_URB_ENTRY_READ_OFFSET_SHIFT); diff --git a/src/mesa/drivers/dri/i965/gen8_blorp.c b/src/mesa/drivers/dri/i965/gen8_blorp.c index a7c6ff0011a..77ec11f2f4d 100644 --- a/src/mesa/drivers/dri/i965/gen8_blorp.c +++ b/src/mesa/drivers/dri/i965/gen8_blorp.c @@ -301,8 +301,15 @@ gen8_blorp_emit_sbe_state(struct brw_context *brw, const unsigned sbe_cmd_length = brw->gen == 8 ? 4 : 6; BEGIN_BATCH(sbe_cmd_length); OUT_BATCH(_3DSTATE_SBE << 16 | (sbe_cmd_length - 2)); - OUT_BATCH(GEN7_SBE_SWIZZLE_ENABLE | - num_varyings << GEN7_SBE_NUM_OUTPUTS_SHIFT | + + /* There is no need for swizzling (GEN7_SBE_SWIZZLE_ENABLE). All the + * vertex data coming from vertex fetcher is taken as unmodified + * (i.e., passed through). Vertex shader state is disabled and vertex + * fetcher builds complete vertex entries including VUE header. + * This is for unknown reason really needed to be disabled when more + * than one vec4 worth of vertex attributes are needed. + */ + OUT_BATCH(num_varyings << GEN7_SBE_NUM_OUTPUTS_SHIFT | 1 << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT | BRW_SF_URB_ENTRY_READ_OFFSET << GEN8_SBE_URB_ENTRY_READ_OFFSET_SHIFT | -- 2.30.2