Mesa (main): d3d12: Optimize transition_subresource_states that covers a whole resource

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 22 14:58:07 UTC 2022


Module: Mesa
Branch: main
Commit: fa570bda087a110e2885991a165139e2aff1d557
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fa570bda087a110e2885991a165139e2aff1d557

Author: Jesse Natalie <jenatali at microsoft.com>
Date:   Thu Jul 21 10:00:01 2022 -0700

d3d12: Optimize transition_subresource_states that covers a whole resource

Reviewed-by: Bill Kristiansen <billkris at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17688>

---

 src/gallium/drivers/d3d12/d3d12_resource_state.cpp | 24 ++++++++++++++--------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/d3d12/d3d12_resource_state.cpp b/src/gallium/drivers/d3d12/d3d12_resource_state.cpp
index dbcfb76b679..c70df8a75d3 100644
--- a/src/gallium/drivers/d3d12/d3d12_resource_state.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_resource_state.cpp
@@ -471,15 +471,21 @@ d3d12_transition_subresources_state(struct d3d12_context *ctx,
       d3d12_invalidate_context_bindings(ctx, res);
 
    d3d12_context_state_table_entry *state_entry = find_or_create_state_entry(ctx->bo_state_table, res->bo);
-   for (uint32_t l = 0; l < num_levels; l++) {
-      const uint32_t level = start_level + l;
-      for (uint32_t a = 0; a < num_layers; a++) {
-         const uint32_t layer = start_layer + a;
-         for( uint32_t p = 0; p < num_planes; p++) {
-            const uint32_t plane = start_plane + p;
-            uint32_t subres_id = level + (layer * res->mip_levels) + plane * (res->mip_levels * res->base.b.array_size);
-            assert(subres_id < state_entry->desired.num_subresources);
-            d3d12_set_desired_subresource_state(&state_entry->desired, subres_id, state);
+   bool is_whole_resource = num_levels * num_layers * num_planes == state_entry->batch_end.num_subresources;
+   if (is_whole_resource) {
+      d3d12_set_desired_resource_state(&state_entry->desired, state);
+   } else {
+      for (uint32_t l = 0; l < num_levels; l++) {
+         const uint32_t level = start_level + l;
+         for (uint32_t a = 0; a < num_layers; a++) {
+            const uint32_t layer = start_layer + a;
+            for (uint32_t p = 0; p < num_planes; p++) {
+               const uint32_t plane = start_plane + p;
+               uint32_t subres_id =
+                  level + (layer * res->mip_levels) + plane * (res->mip_levels * res->base.b.array_size);
+               assert(subres_id < state_entry->desired.num_subresources);
+               d3d12_set_desired_subresource_state(&state_entry->desired, subres_id, state);
+            }
          }
       }
    }



More information about the mesa-commit mailing list