[PATCH 5/6] wined3d: Apply texture barriers only to the view range.
Zebediah Figura
zfigura at codeweavers.com
Mon Jul 19 22:23:27 CDT 2021
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
I don't know if this (or the next patch) offers a measurable performance
benefit, but it seems like probably a good idea...
dlls/wined3d/context_vk.c | 4 ++--
dlls/wined3d/texture.c | 10 +++++-----
dlls/wined3d/wined3d_private.h | 6 +++---
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/dlls/wined3d/context_vk.c b/dlls/wined3d/context_vk.c
index 856adc4ad1a..6af857fac4e 100644
--- a/dlls/wined3d/context_vk.c
+++ b/dlls/wined3d/context_vk.c
@@ -3043,7 +3043,7 @@ static void wined3d_context_vk_load_shader_resources(struct wined3d_context_vk *
struct wined3d_texture_vk *texture_vk = wined3d_texture_vk(texture_from_resource(srv->resource));
wined3d_texture_load(&texture_vk->t, &context_vk->c, FALSE);
- wined3d_texture_vk_barrier(texture_vk, context_vk, WINED3D_BIND_SHADER_RESOURCE);
+ wined3d_texture_vk_barrier(texture_vk, context_vk, WINED3D_BIND_SHADER_RESOURCE, &srv->desc);
}
break;
@@ -3075,7 +3075,7 @@ static void wined3d_context_vk_load_shader_resources(struct wined3d_context_vk *
wined3d_texture_load(&texture_vk->t, &context_vk->c, FALSE);
wined3d_unordered_access_view_invalidate_location(uav, ~WINED3D_LOCATION_TEXTURE_RGB);
- wined3d_texture_vk_barrier(texture_vk, context_vk, WINED3D_BIND_UNORDERED_ACCESS);
+ wined3d_texture_vk_barrier(texture_vk, context_vk, WINED3D_BIND_UNORDERED_ACCESS, &uav->desc);
}
break;
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index c1247fbc56b..3a467c4aa06 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -5242,7 +5242,7 @@ HRESULT wined3d_texture_vk_init(struct wined3d_texture_vk *texture_vk, struct wi
}
void wined3d_texture_vk_barrier(struct wined3d_texture_vk *texture_vk,
- struct wined3d_context_vk *context_vk, uint32_t bind_mask)
+ struct wined3d_context_vk *context_vk, uint32_t bind_mask, const struct wined3d_view_desc *view_desc)
{
VkImageSubresourceRange vk_range;
@@ -5255,10 +5255,10 @@ void wined3d_texture_vk_barrier(struct wined3d_texture_vk *texture_vk,
wined3d_debug_bind_flags(texture_vk->bind_mask), wined3d_debug_bind_flags(bind_mask));
vk_range.aspectMask = vk_aspect_mask_from_format(texture_vk->t.resource.format);
- vk_range.baseMipLevel = 0;
- vk_range.levelCount = VK_REMAINING_MIP_LEVELS;
- vk_range.baseArrayLayer = 0;
- vk_range.layerCount = VK_REMAINING_ARRAY_LAYERS;
+ vk_range.baseMipLevel = view_desc->u.texture.level_idx;
+ vk_range.levelCount = view_desc->u.texture.level_count;
+ vk_range.baseArrayLayer = view_desc->u.texture.layer_idx;
+ vk_range.layerCount = view_desc->u.texture.layer_count;
wined3d_context_vk_image_barrier(context_vk, wined3d_context_vk_get_command_buffer(context_vk),
vk_pipeline_stage_mask_from_bind_flags(texture_vk->bind_mask),
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 98cb1c9e2f7..7783a68bd7e 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4488,8 +4488,8 @@ static inline struct wined3d_texture_vk *wined3d_texture_vk(struct wined3d_textu
return CONTAINING_RECORD(texture, struct wined3d_texture_vk, t);
}
-void wined3d_texture_vk_barrier(struct wined3d_texture_vk *texture_vk,
- struct wined3d_context_vk *context_vk, uint32_t bind_mask) DECLSPEC_HIDDEN;
+void wined3d_texture_vk_barrier(struct wined3d_texture_vk *texture_vk, struct wined3d_context_vk *context_vk,
+ uint32_t bind_mask, const struct wined3d_view_desc *view_desc) DECLSPEC_HIDDEN;
const VkDescriptorImageInfo *wined3d_texture_vk_get_default_image_info(struct wined3d_texture_vk *texture_vk,
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
HRESULT wined3d_texture_vk_init(struct wined3d_texture_vk *texture_vk, struct wined3d_device *device,
@@ -5057,7 +5057,7 @@ static inline void wined3d_rendertarget_view_vk_barrier(struct wined3d_rendertar
{
struct wined3d_texture_vk *texture_vk = wined3d_texture_vk(texture_from_resource(rtv_vk->v.resource));
- wined3d_texture_vk_barrier(texture_vk, context_vk, bind_mask);
+ wined3d_texture_vk_barrier(texture_vk, context_vk, bind_mask, &rtv_vk->v.desc);
}
static inline VkImageView wined3d_rendertarget_view_vk_get_image_view(struct wined3d_rendertarget_view_vk *rtv_vk,
--
2.32.0
More information about the wine-devel
mailing list