From 406cd9d1261996ba53e3301b2a5a01b5c5c56f00 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Sat, 22 Oct 2016 22:27:23 -0700 Subject: [PATCH] intel/blorp: Emit all the binding tables At least on Sky Lake, after emitting 3DSTATE_CONSTANT_*, you are required to re-emit the 3DSTATE_BINDING_TABLE_POINTERS packet for the corresponding stage. If you don't, double-buffering may fail and you may get the wrong constants. It turns out that you need to do this even if you have no push constants to speak of or else the next 3DSTATE_CONSTANT packet you emit for that stage may not work correctly. Signed-off-by: Jason Ekstrand Reviewed-by: Topi Pohjolainen Cc: "13.0" --- src/intel/blorp/blorp_genX_exec.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h index 2051859770f..07c335aee52 100644 --- a/src/intel/blorp/blorp_genX_exec.h +++ b/src/intel/blorp/blorp_genX_exec.h @@ -1117,6 +1117,11 @@ blorp_emit_surface_states(struct blorp_batch *batch, } #if GEN_GEN >= 7 + blorp_emit(batch, GENX(3DSTATE_BINDING_TABLE_POINTERS_VS), bt); + blorp_emit(batch, GENX(3DSTATE_BINDING_TABLE_POINTERS_HS), bt); + blorp_emit(batch, GENX(3DSTATE_BINDING_TABLE_POINTERS_DS), bt); + blorp_emit(batch, GENX(3DSTATE_BINDING_TABLE_POINTERS_GS), bt); + blorp_emit(batch, GENX(3DSTATE_BINDING_TABLE_POINTERS_PS), bt) { bt.PointertoPSBindingTable = bind_offset; } -- 2.30.2