Signed-off-by: Zebediah Figura zfigura@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,