summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2019-09-19 00:33:28 -0700
committerKenneth Graunke <[email protected]>2019-09-19 07:56:15 -0700
commit706c9f2d6072b1f1eeef90e6d67bcaeda0529e16 (patch)
tree7ff8dca7ec587f3cc3f430fff12cef6e3c2eb3d8
parent7f7060dc73928a49e1d6780177a0d847d9d73e12 (diff)
iris: Skip double-disabling TCS/TES/GS after BLORP operations
BLORP always turns off TCS/TES/GS. If regular drawing also has them disabled (the overwhelmingly common case), then leaving them disabled is just fine by us and we can skip dirtying them, as that would just re-disable them a second time on the next draw. If they are actually enabled, however, we do need to flag them. Cuts 52% of the 3DSTATE_HS packets in an Aztec Ruins trace.
-rw-r--r--src/gallium/drivers/iris/iris_blorp.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gallium/drivers/iris/iris_blorp.c b/src/gallium/drivers/iris/iris_blorp.c
index f357b922e58..fa46dafcda2 100644
--- a/src/gallium/drivers/iris/iris_blorp.c
+++ b/src/gallium/drivers/iris/iris_blorp.c
@@ -342,6 +342,23 @@ iris_blorp_exec(struct blorp_batch *blorp_batch,
IRIS_DIRTY_SAMPLER_STATES_TES |
IRIS_DIRTY_SAMPLER_STATES_GS);
+ if (!ice->shaders.uncompiled[MESA_SHADER_TESS_EVAL]) {
+ /* BLORP disabled tessellation, that's fine for the next draw */
+ skip_bits |= IRIS_DIRTY_TCS |
+ IRIS_DIRTY_TES |
+ IRIS_DIRTY_CONSTANTS_TCS |
+ IRIS_DIRTY_CONSTANTS_TES |
+ IRIS_DIRTY_BINDINGS_TCS |
+ IRIS_DIRTY_BINDINGS_TES;
+ }
+
+ if (!ice->shaders.uncompiled[MESA_SHADER_GEOMETRY]) {
+ /* BLORP disabled geometry shaders, that's fine for the next draw */
+ skip_bits |= IRIS_DIRTY_GS |
+ IRIS_DIRTY_CONSTANTS_GS |
+ IRIS_DIRTY_BINDINGS_GS;
+ }
+
/* we can skip flagging IRIS_DIRTY_DEPTH_BUFFER, if
* BLORP_BATCH_NO_EMIT_DEPTH_STENCIL is set.
*/