Mesa (master): anv: Avoid emitting UBO surface states that won't be used
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Oct 30 16:06:37 UTC 2019
Module: Mesa
Branch: master
Commit: beca63c6c07f7263a56a3517ba0fec6fe6335325
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=beca63c6c07f7263a56a3517ba0fec6fe6335325
Author: Jason Ekstrand <jason at jlekstrand.net>
Date: Tue Oct 29 16:10:49 2019 -0500
anv: Avoid emitting UBO surface states that won't be used
This shaves around 4-5% off of a CPU-limited example running with the
Dawn WebGPU implementation.
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/intel/vulkan/genX_cmd_buffer.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index af7ced32e39..6c1cd04f336 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -2118,7 +2118,8 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
return VK_SUCCESS;
}
- struct anv_pipeline_bind_map *map = &pipeline->shaders[stage]->bind_map;
+ struct anv_shader_bin *bin = pipeline->shaders[stage];
+ struct anv_pipeline_bind_map *map = &bin->bind_map;
if (map->surface_count == 0) {
*bt_state = (struct anv_state) { 0, };
return VK_SUCCESS;
@@ -2292,6 +2293,16 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
break;
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
+ /* If the shader never does any UBO pulls (this is a fairly common
+ * case) then we don't need to fill out those binding table entries.
+ * The real cost savings here is that we don't have to build the
+ * surface state for them which is surprisingly expensive when it's
+ * on the hot-path.
+ */
+ if (!bin->prog_data->has_ubo_pull)
+ continue;
+ /* Fall through */
+
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: {
/* Compute the offset within the buffer */
uint32_t dynamic_offset =
More information about the mesa-commit
mailing list