summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/iris/iris_blorp.c6
-rw-r--r--src/gallium/drivers/iris/iris_context.h3
-rw-r--r--src/gallium/drivers/iris/iris_state.c2
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,