diff options
-rw-r--r-- | src/gallium/drivers/iris/iris_blorp.c | 6 | ||||
-rw-r--r-- | src/gallium/drivers/iris/iris_context.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/iris/iris_state.c | 2 |
3 files changed, 11 insertions, 0 deletions
diff --git a/src/gallium/drivers/iris/iris_blorp.c b/src/gallium/drivers/iris/iris_blorp.c index cd6d74960cb..a3df22c0a40 100644 --- a/src/gallium/drivers/iris/iris_blorp.c +++ b/src/gallium/drivers/iris/iris_blorp.c @@ -249,6 +249,12 @@ blorp_emit_urb_config(struct blorp_batch *blorp_batch, unsigned size[4] = { vs_entry_size, 1, 1, 1 }; + /* If last VS URB size is good enough for what the BLORP operation needed, + * then we can skip reconfiguration + */ + if (ice->shaders.last_vs_entry_size >= vs_entry_size) + return; + genX(emit_urb_setup)(ice, batch, size, false, false); ice->state.dirty |= IRIS_DIRTY_URB; } diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h index d4f88f2a907..8f91d28446f 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -502,6 +502,9 @@ struct iris_context { unsigned urb_size; + /* Track last VS URB entry size */ + unsigned last_vs_entry_size; + /** * Scratch buffers for various sizes and stages. * diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index c6dc065dc3b..469d149dfba 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -5866,6 +5866,8 @@ genX(emit_urb_setup)(struct iris_context *ice, unsigned entries[4]; unsigned start[4]; + ice->shaders.last_vs_entry_size = size[MESA_SHADER_VERTEX]; + gen_get_urb_config(devinfo, 1024 * push_size_kB, 1024 * ice->shaders.urb_size, tess_present, gs_present, |