WIP: Vulkan: Clearing Storage Buffers #105299

Closed
Jeroen Bakker wants to merge 73 commits from Jeroen-Bakker:gpu-storage-buffer-clear into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.

73 Commits

Author SHA1 Message Date
Jeroen Bakker 8957c56f62 Moved clearing to VKBuffer. 2023-03-01 10:21:28 +01:00
Jeroen Bakker 0632abc9f3 Fix test case. when only a single command is used. 2023-02-28 15:22:34 +01:00
Jeroen Bakker b723a4dec5 Added test cases for clearing storage buffers. 2023-02-28 13:20:07 +01:00
Jeroen Bakker b466cbcbc8 Merge branch 'main' into vulkan-push-constants 2023-02-28 08:00:05 +01:00
Jeroen Bakker 0c5745f060 Missing renames Layout->LayoutT 2023-02-27 14:03:32 +01:00
Jeroen Bakker 919e0ece3b Use single memcpy when copying an array that is tightly packed in std140. 2023-02-27 13:11:34 +01:00
Jeroen Bakker f9e23882c7 Rename template argument Layout->LayoutT 2023-02-27 13:05:55 +01:00
Jeroen Bakker 390cee5f88 Naming parameters generate_test_data function. 2023-02-27 13:04:12 +01:00
Jeroen Bakker cbccad44cc Merge branch 'main' into vulkan-push-constants 2023-02-27 13:02:14 +01:00
Jeroen Bakker ad5ac6bdf7 Cleanup: Spelling in comment. 2023-02-23 18:24:14 +01:00
Jeroen Bakker 7876291d08 Cleanup: Incorrect reference to storage buffer in comment. 2023-02-23 18:22:12 +01:00
Jeroen Bakker 8a591a7845 Cleanup: function naming. 2023-02-23 18:20:02 +01:00
Jeroen Bakker d20bf06825 Cleanup: Moved Layout inside VKPushConstants. 2023-02-23 17:55:55 +01:00
Jeroen Bakker b4cad5c613 Remove unneeded comment. 2023-02-23 15:01:21 +01:00
Jeroen Bakker 2e9062e4d4 Merge branch 'main' into vulkan-push-constants 2023-02-23 14:58:30 +01:00
Jeroen Bakker 868b2e377f Added documentation. 2023-02-23 13:35:33 +01:00
Jeroen Bakker c088dcbaab Reverted unneeded change in includes. 2023-02-23 13:31:03 +01:00
Jeroen Bakker 64e4d5e7d5 Identified resource change issue. 2023-02-23 12:55:41 +01:00
Jeroen Bakker 9698a12bc3 Element striding of std140 arrays. 2023-02-22 21:00:52 +01:00
Jeroen Bakker 2765552504 Add builtin uniforms. 2023-02-22 20:42:44 +01:00
Jeroen Bakker 87feaaf40f Updated assert message to be more generic. 2023-02-22 20:32:20 +01:00
Jeroen Bakker e8ad8d934e Documentation. 2023-02-22 19:22:51 +01:00
Jeroen Bakker df5985548a Fixed test case. 2023-02-22 17:53:39 +01:00
Jeroen Bakker a26eca251b Added test cases for std140. 2023-02-22 17:46:13 +01:00
Jeroen Bakker 7b9edb674f Missing removal of storage buffer. 2023-02-22 16:58:48 +01:00
Jeroen Bakker 27590e3a11 Fix incorrect comment. 2023-02-22 14:51:45 +01:00
Jeroen Bakker 42191cf0eb Merge branch 'main' into vulkan-push-constants 2023-02-22 14:51:25 +01:00
Jeroen Bakker edc641947f Small clean ups. 2023-02-22 13:04:59 +01:00
Jeroen Bakker c9bd43b0a1 Remove Storage buffers for push constants. 2023-02-22 12:42:05 +01:00
Jeroen Bakker 739d088c55 Initial (incomplete) Std140 implementation. 2023-02-22 12:06:09 +01:00
Jeroen Bakker 05d533e057 Fix issue where uniform buffers where not updated in the descriptor set. 2023-02-22 10:19:44 +01:00
Jeroen Bakker 9e6947d744 Determine descriptor set location after input sorting. 2023-02-22 09:56:10 +01:00
Jeroen Bakker 56cbef9e02 Refactored shader interface to keep track of descriptor sets. 2023-02-22 07:04:16 +01:00
Jeroen Bakker dee686bd9d Some small tweaks 2023-02-21 21:39:17 +01:00
Jeroen Bakker 0ae03c78f4 Use uniform buffers for fallback. (still in progress) 2023-02-21 20:21:14 +01:00
Jeroen Bakker 76dcdf78e9 Move std430 layout utility to vk_memory. 2023-02-21 16:17:00 +01:00
Jeroen Bakker 754c0acc76 Merge branch 'main' into vulkan-push-constants 2023-02-21 15:39:39 +01:00
Jeroen Bakker ec31a09e20 Merge branch 'main' into vulkan-push-constants 2023-02-21 15:12:53 +01:00
Jeroen Bakker 17157843cd Merge branch 'vulkan-compute-shaders' into vulkan-push-constants 2023-02-21 14:36:19 +01:00
Jeroen Bakker 6937a26243 Merge branch 'main' into vulkan-compute-shaders 2023-02-21 14:31:23 +01:00
Jeroen Bakker 797320c96b Use storage buffers as fallback.
Eventually we want to use uniform buffers as they are a bit faster.
But they require std140.
2023-02-21 14:27:11 +01:00
Jeroen Bakker a8dc114efc First round trip of using push constants. 2023-02-21 07:54:01 +01:00
Jeroen Bakker e7d683106e Initial commit for push constants. 2023-02-21 07:53:48 +01:00
Jeroen Bakker baf768ecfb Merge branch 'main' into vulkan-compute-shaders 2023-02-21 07:48:58 +01:00
Jeroen Bakker 28220c4505 Merge branch 'main' into vulkan-compute-shaders 2023-02-20 09:23:31 +01:00
Jeroen Bakker 36d6cb2b17 Merge branch 'blender-v3.5-release' 2023-02-20 09:18:53 +01:00
Jeroen Bakker dd76a85011 Merge branch 'blender-v3.5-release' 2023-02-20 08:12:35 +01:00
Jeroen Bakker 64f81d7c29 Merge branch 'main' into vulkan-compute-shaders 2023-02-18 17:41:22 +01:00
Jeroen Bakker c7b9a5a759 Remove binding clashing between textures and images. 2023-02-17 11:29:20 +01:00
Jeroen Bakker 902250a704 Remove debug statement. 2023-02-17 10:15:14 +01:00
Jeroen Bakker aca7d7ed35 Add support for shaders without any resources. 2023-02-17 10:05:29 +01:00
Jeroen Bakker 59c667b524 Merge branch 'main' into vulkan-compute-shaders 2023-02-17 09:55:33 +01:00
Jeroen Bakker 5079127a5a Merge branch 'main' into vulkan-compute-shaders 2023-02-17 09:50:43 +01:00
Jeroen Bakker 1a6a97d8df Add support for shader input lookup in shaders using samplers + images. 2023-02-17 09:40:17 +01:00
Jeroen Bakker 74c505c25d Separate descriptor set bindings and gpu module bindings. 2023-02-17 09:00:44 +01:00
Jeroen Bakker 380e69148e Check if image format is supported. 2023-02-16 12:13:14 +01:00
Jeroen Bakker 4fcaf128b0 Added documentation to the GHOST C-api and Context. 2023-02-16 10:25:44 +01:00
Jeroen Bakker 68bbed1e4b Added initial support for sampling. 2023-02-16 09:27:29 +01:00
Jeroen Bakker 26b0c7c3fb Increase descriptor pool resources.
Added image samplers and uniform buffers. Required for
shader builder.
2023-02-16 07:50:25 +01:00
Jeroen Bakker bbece58e98 Merge branch 'main' into vulkan-compute-shaders 2023-02-14 15:13:12 +01:00
Jeroen Bakker d75180cfba Improve comments of known limitations of the implementation. 2023-02-14 14:43:15 +01:00
Jeroen Bakker a2ba452c31 Move common data conversions to vk_common. 2023-02-14 14:23:41 +01:00
Jeroen Bakker 22cc7f7749 Fixed unneeded std::move. 2023-02-14 14:07:30 +01:00
Jeroen Bakker 6225cb7c94 Introduce vk_common. 2023-02-14 13:46:31 +01:00
Jeroen Bakker 64c20b4d6e Add support for 2d and 3d textures. 2023-02-14 12:58:11 +01:00
Jeroen Bakker fda61f18d1 Add support for 1d textures. 2023-02-14 12:38:20 +01:00
Jeroen Bakker afa2d25db0 Added 1d texture, bind as image. Descriptor sets still needs to be updated. 2023-02-13 16:08:55 +01:00
Jeroen Bakker 319c79128d Fix ssbo name change during merge. 2023-02-13 14:24:55 +01:00
Jeroen Bakker 0295a2e2fa Merge branch 'main' into vulkan-compute-shaders 2023-02-13 13:58:47 +01:00
Jeroen Bakker 8b6db40ccc Use guardedalloc for vulkan allocations. 2023-02-13 13:56:26 +01:00
Jeroen Bakker 0331654760 Added initial support for index buffers. 2023-02-13 13:29:56 +01:00
Jeroen Bakker 95609c174e Fix missing create info for ssbo test. 2023-02-13 09:45:52 +01:00
Jeroen Bakker 366404d274 Vulkan: Initial Compute Shaders and SSBO+VBO support.
This patch adds initial support for compute shaders and SSBOs to
the vulkan backend. As the development is oriented to the test-
cases we have the implementation is limited to what is used there.

It has been validated that with this patch 2 test cases are running
as expected
- `GPUVulkanTest.gpu_shader_compute_ssbo`
- `GPUVulkanTest.gpu_storage_buffer_create_update_read`

This patch includes:
- Allocating VkBuffer on device.
- Uploading data from CPU to VkBuffer.
- Binding VkBuffer as SSBO to a compute shader.
- Execute compute shader and altering VkBuffer.
- Download the VkBuffer to CPU ram.
- Validate that it worked.

GHOST API has been changed as the original design was created before
we even had support for compute shaders in blender. The function `GHOST_getVulkanBackbuffer` has been separated to retrieve the command
buffer without a backbuffer (`GHOST_getVulkanCommandBuffer`). In order
to do correct command buffer processing we needed access to the queue
owned by GHOST. This is returned as part of the `GHOST_getVulkanHandles`
function.
2023-02-13 09:36:43 +01:00