diff options
author | Kenneth Graunke <[email protected]> | 2017-10-20 15:38:52 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2017-10-30 20:38:08 -0700 |
commit | 877dd14e88de6ee115617a2a6412e86ba67db443 (patch) | |
tree | 06aa9411a9b1aa0d6e425060f55ddd53c4ce157e | |
parent | 28fcf5cd9443ac688692c1f14e31cf4f43fd56d0 (diff) |
i965: Don't flag BRW_NEW_SURFACES unless some push constants are dirty.
Due to a gaffe on my part, we were re-emitting all binding table entries
on every single draw call. The push_constant_packets atom listens to
BRW_NEW_DRAW_CALL, but skips emitting 3DSTATE_CONSTANT_XS for each stage
unless stage_state->push_constants_dirty is true. However, it flagged
BRW_NEW_SURFACES unconditionally at the end, by mistake.
Instead, it should only flag it if we actually emit 3DSTATE_CONSTANT_XS
for a stage. We can move it a few lines up, inside the loop - the early
continues will skip over it if push constants aren't dirty for a stage.
With INTEL_NO_HW=1 set, improves performance of GFXBench5 gl_driver_2
on Apollolake at 1280x720 by 1.01122% +/- 0.470723% (n=35).
Reviewed-by: Rafael Antognolli <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/genX_state_upload.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c index 98f69522de5..b7a6cd73619 100644 --- a/src/mesa/drivers/dri/i965/genX_state_upload.c +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c @@ -3117,9 +3117,8 @@ genX(upload_push_constant_packets)(struct brw_context *brw) } stage_state->push_constants_dirty = false; + brw->ctx.NewDriverState |= GEN_GEN >= 9 ? BRW_NEW_SURFACES : 0; } - - brw->ctx.NewDriverState |= GEN_GEN >= 9 ? BRW_NEW_SURFACES : 0; } const struct brw_tracked_state genX(push_constant_packets) = { |