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