Vulkan: Push constants #104880

Merged
Jeroen Bakker merged 73 commits from Jeroen-Bakker/blender:vulkan-push-constants into main 2023-03-06 12:29:06 +01:00

73 Commits

Author SHA1 Message Date
Jeroen Bakker 9d0e6c1d6f Merged blender:main in 2023-03-06 12:26:15 +01:00
Jeroen Bakker a265b19985 Hide updating of push constants inside VKPushConstants.update. 2023-03-06 11:07:50 +01:00
Jeroen Bakker 70b1f871a7 Moved fallback name to local static const of init.
* constexpr isn't compiling on all platforms (CLang/Apple)
* Visibility is only in a single function.
2023-03-06 10:46:16 +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