diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index 32d420d655fa8c31dfeb9de763ce0a72b74dbbbd..5b2d0072dcbe793ec67308c4ae042f7b4ecbf325 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -3356,11 +3356,37 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewUint(ID
         const UINT values[4], UINT rect_count, const D3D12_RECT *rects)
 {
     struct d3d12_command_list *list = impl_from_ID3D12GraphicsCommandList(iface);
+    const struct vkd3d_vk_device_procs *vk_procs = &list->device->vk_procs;
+    const struct d3d12_desc *cpu_descriptor;
+    struct d3d12_resource *resource_impl;
 
-    FIXME("iface %p, gpu_handle %#"PRIx64", cpu_handle %lx, resource %p, values %p, rect_count %u, rects %p stub!\n",
+    TRACE("iface %p, gpu_handle %#"PRIx64", cpu_handle %lx, resource %p, values %p, rect_count %u, rects %p.\n",
             iface, gpu_handle.ptr, cpu_handle.ptr, resource, values, rect_count, rects);
 
-    d3d12_command_list_track_resource_usage(list, unsafe_impl_from_ID3D12Resource(resource));
+    resource_impl = unsafe_impl_from_ID3D12Resource(resource);
+
+    d3d12_command_list_track_resource_usage(list, resource_impl);
+
+    if (d3d12_resource_is_texture(resource_impl))
+    {
+        FIXME("Not implemented for textures.\n");
+        return;
+    }
+    if (rect_count)
+    {
+        FIXME("Clear rects not supported.\n");
+        return;
+    }
+
+    cpu_descriptor = d3d12_desc_from_cpu_handle(cpu_handle);
+    if (!cpu_descriptor->view_size)
+    {
+        FIXME("Not supported for UAV descriptor %p.\n", cpu_descriptor);
+        return;
+    }
+
+    VK_CALL(vkCmdFillBuffer(list->vk_command_buffer, resource_impl->u.vk_buffer,
+            cpu_descriptor->view_offset, cpu_descriptor->view_size, values[0]));
 }
 
 static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewFloat(ID3D12GraphicsCommandList *iface,
@@ -3368,11 +3394,14 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewFloat(I
         const float values[4], UINT rect_count, const D3D12_RECT *rects)
 {
     struct d3d12_command_list *list = impl_from_ID3D12GraphicsCommandList(iface);
+    struct d3d12_resource *resource_impl;
 
     FIXME("iface %p, gpu_handle %#"PRIx64", cpu_handle %lx, resource %p, values %p, rect_count %u, rects %p stub!\n",
             iface, gpu_handle.ptr, cpu_handle.ptr, resource, values, rect_count, rects);
 
-    d3d12_command_list_track_resource_usage(list, unsafe_impl_from_ID3D12Resource(resource));
+    resource_impl = unsafe_impl_from_ID3D12Resource(resource);
+
+    d3d12_command_list_track_resource_usage(list, resource_impl);
 }
 
 static void STDMETHODCALLTYPE d3d12_command_list_DiscardResource(ID3D12GraphicsCommandList *iface,
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index 22f62a565e2ad433f8a73acc706af0f2bd1a95b4..729d0c9d84f08aae092348f6e0e69bc204f62dfc 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -1131,6 +1131,16 @@ static void vkd3d_create_buffer_uav(struct d3d12_desc *descriptor, struct d3d12_
             d3d12_desc_destroy(descriptor, device);
         }
     }
+
+    /* FIXME: Clears are implemented only for R32_UINT buffer UAVs. */
+    if ((desc->Format == DXGI_FORMAT_R32_TYPELESS && (desc->u.Buffer.Flags & VKD3D_VIEW_RAW_BUFFER))
+            || desc->Format == DXGI_FORMAT_R32_UINT)
+    {
+        const struct vkd3d_format *format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false);
+
+        descriptor->view_offset = desc->u.Buffer.FirstElement * format->byte_count;
+        descriptor->view_size = desc->u.Buffer.NumElements * format->byte_count;
+    }
 }
 
 static void vkd3d_create_texture_uav(struct d3d12_desc *descriptor,
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index 676bb9cc4924d57cc656e99459738c19a79d00e7..32c55382dbae648a310853ab26afd04d620bc022 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -209,6 +209,9 @@ struct d3d12_desc
         VkDescriptorBufferInfo vk_cbv_info;
         struct vkd3d_view *view;
     } u;
+
+    VkDeviceSize view_offset;
+    VkDeviceSize view_size;
 };
 
 static inline struct d3d12_desc *d3d12_desc_from_cpu_handle(D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle)