From 706c9f2d6072b1f1eeef90e6d67bcaeda0529e16 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Thu, 19 Sep 2019 00:33:28 -0700 Subject: 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. --- src/gallium/drivers/iris/iris_blorp.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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. */ -- cgit v1.2.1