diff options
author | Jason Ekstrand <[email protected]> | 2016-10-22 22:27:23 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-11-08 08:32:55 -0800 |
commit | 406cd9d1261996ba53e3301b2a5a01b5c5c56f00 (patch) | |
tree | 7d2381c57bf91a280b1d28d4acf3f80c8f5ae222 | |
parent | 112a2ba2763f14351de33501d2731dbdcab48658 (diff) |
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 <[email protected]>
Reviewed-by: Topi Pohjolainen <[email protected]>
Cc: "13.0" <[email protected]>
-rw-r--r-- | src/intel/blorp/blorp_genX_exec.h | 5 |
1 files changed, 5 insertions, 0 deletions
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; } |