Module: wine Branch: master Commit: 2a9142de5ce016352bad613136fd7cbb3622af45 URL: https://source.winehq.org/git/wine.git/?a=commit;h=2a9142de5ce016352bad61313...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed May 13 19:34:51 2020 +0430
wined3d: Implement Vulkan sampler descriptors.
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wined3d/context_vk.c | 16 ++++++++++++++++ dlls/wined3d/wined3d_private.h | 6 ++++++ 2 files changed, 22 insertions(+)
diff --git a/dlls/wined3d/context_vk.c b/dlls/wined3d/context_vk.c index 4e4e064250..ba1f6bb926 100644 --- a/dlls/wined3d/context_vk.c +++ b/dlls/wined3d/context_vk.c @@ -1335,6 +1335,7 @@ static bool wined3d_context_vk_update_descriptors(struct wined3d_context_vk *con struct wined3d_resource *resource; VkDescriptorSet vk_descriptor_set; struct wined3d_view_vk *view_vk; + struct wined3d_sampler *sampler; struct wined3d_buffer *buffer; VkBufferView *buffer_view; VkDescriptorType type; @@ -1400,6 +1401,14 @@ static bool wined3d_context_vk_update_descriptors(struct wined3d_context_vk *con return false; break;
+ case WINED3D_SHADER_DESCRIPTOR_TYPE_SAMPLER: + if (!(sampler = state->sampler[binding->shader_type][binding->resource_idx])) + sampler = context_vk->c.device->null_sampler; + if (!wined3d_shader_descriptor_writes_vk_add_write(writes, vk_descriptor_set, binding->binding_idx, + VK_DESCRIPTOR_TYPE_SAMPLER, NULL, &wined3d_sampler_vk(sampler)->vk_image_info, NULL)) + return false; + break; + default: FIXME("Unhandled descriptor type %#x.\n", binding->shader_descriptor_type); return false; @@ -1506,6 +1515,7 @@ static void wined3d_context_vk_load_shader_resources(struct wined3d_context_vk * struct wined3d_shader_resource_view_vk *srv_vk; struct wined3d_shader_resource_view *srv; struct wined3d_buffer_vk *buffer_vk; + struct wined3d_sampler *sampler; struct wined3d_buffer *buffer; size_t i;
@@ -1551,6 +1561,12 @@ static void wined3d_context_vk_load_shader_resources(struct wined3d_context_vk * case WINED3D_SHADER_DESCRIPTOR_TYPE_UAV_COUNTER: break;
+ case WINED3D_SHADER_DESCRIPTOR_TYPE_SAMPLER: + if (!(sampler = state->sampler[binding->shader_type][binding->resource_idx])) + sampler = context_vk->c.device->null_sampler; + wined3d_context_vk_reference_sampler(context_vk, wined3d_sampler_vk(sampler)); + break; + default: FIXME("Unhandled descriptor type %#x.\n", binding->shader_descriptor_type); break; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 35b0815d95..93852e0de7 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -5662,6 +5662,12 @@ static inline void wined3d_context_vk_reference_texture(const struct wined3d_con texture_vk->command_buffer_id = context_vk->current_command_buffer.id; }
+static inline void wined3d_context_vk_reference_sampler(const struct wined3d_context_vk *context_vk, + struct wined3d_sampler_vk *sampler_vk) +{ + sampler_vk->command_buffer_id = context_vk->current_command_buffer.id; +} + static inline void wined3d_context_vk_reference_rendertarget_view(const struct wined3d_context_vk *context_vk, struct wined3d_rendertarget_view_vk *rtv_vk) {