Jeroen Bakker
e008eacfbe
Remove unneeded includes.
2023-03-17 13:46:56 +01:00
Jeroen Bakker
8ec17cbc78
Merge branch 'main' into vulkan-storage-buffer-clear
2023-03-17 13:44:43 +01:00
Jeroen Bakker
93ef702424
Merge branch 'main' into vulkan-storage-buffer-clear
2023-03-09 18:54:40 +01:00
Jeroen Bakker
43cdb89179
Merge branch 'gpu-storage-buffer-clear-api' into vulkan-storage-buffer-clear
2023-03-09 15:13:40 +01:00
Jeroen Bakker
945022a931
Merge branch 'eevee-next-init-shadow-clip-buffer' into gpu-storage-buffer-clear-api
2023-03-09 15:08:06 +01:00
Jeroen Bakker
556ef545b3
Merge branch 'main' into eevee-next-init-shadow-clip-buffer
2023-03-09 15:06:50 +01:00
Jeroen Bakker
05d98893d1
Merge branch 'main' into eevee-next-init-shadow-clip-buffer
2023-03-09 07:59:13 +01:00
Jeroen Bakker
27fab835cf
Limit to the number of items to clear.
2023-03-09 07:58:20 +01:00
Jeroen Bakker
1ec53f799a
Merge branch 'gpu-storage-buffer-clear-api' into vulkan-storage-buffer-clear
2023-03-08 15:01:01 +01:00
Jeroen Bakker
f24852e13c
Merge branch 'main' into gpu-storage-buffer-clear-api
2023-03-08 14:53:59 +01:00
Jeroen Bakker
0bc9e2e661
Fix incorrect parameters in OpenGL storage buffer clear.
2023-03-08 14:49:32 +01:00
Jeroen Bakker
dc13925901
Updated API to only support a single 32bit value.
2023-03-08 14:48:11 +01:00
Jeroen Bakker
f9fec1abdc
Merge branch 'eevee-next-init-shadow-clip-buffer' into gpu-storage-buffer-clear-api
2023-03-08 14:31:45 +01:00
Jeroen Bakker
3739fc7aea
Eevee-next: Use Compute Shader to Clear Clipmaps.
...
Clearing of clipmaps is the only place in Blender that uses non
uniform data (not all components of the cleared data to be exact
the same).
Vulkan has only the possibility to clear buffers with using a single
uint32_t. There were two solutions:
- Add compute shader to Vulkan backend.
- Make Eevee-next responsible to clear the clipmaps.
When fixing this in the Vulkan backend it could lead to other issues
as the backend isn't aware what is exactly required and might overwrite
active bindings. We chose to make it a responsibility of Eevee-next
as there it is clear what is needed.
Related issue: #105492
2023-03-08 10:40:59 +01:00
Jeroen Bakker
53d92d7704
Merge branch 'gpu-storage-buffer-clear-api' into vulkan-storage-buffer-clear
2023-03-08 08:26:48 +01:00
Jeroen Bakker
83b62f2562
Resolve review comments.
...
- Make clear_data_size an int.
- Use GL_RED_INTEGER when initializing variable.
2023-03-07 15:27:12 +01:00
Jeroen Bakker
1967026b22
Fix Shadow rendering in Eevee-next/Workbench-next.
...
Used the integer gl formats and not the float ones.
2023-03-07 15:01:10 +01:00
Jeroen Bakker
04aa6f381e
Revert partial change in eevee-next shadows.
2023-03-07 14:45:07 +01:00
Jeroen Bakker
57004af96e
Revert cleanup change.
2023-03-07 14:38:58 +01:00
Jeroen Bakker
96af333650
GPU: Refactor API for Clearing Storage Buffers.
...
The previous API for clearing storage buffers was extracted from OpenGL.
OpenGL has many options to support for data conversions, striding and
sizzling. Metal and Vulkan don't have this inside the API and we have to
deal it ourselves.
Blender internally only uses a tiny subset for what is possible in OpenGL.
making the current API to difficult to implement on our future platforms
as we had to implement all cases, most even not used at all.
By changing the API we make future development easier as we only need to
implement what we are actually using.
*New API*
`GPU_storagebuf_clear_int(GPUStorageBuf* ssbo, int32_t* clear_data,
uint8_t clear_data_len);`
`GPU_storagebuf_clear_uint(GPUStorageBuf* ssbo, uint32_t* clear_data,
uint8_t clear_data_len);`
Related issue: #105492
2023-03-07 08:51:47 +01:00
Jeroen Bakker
376c9386c3
Merge branch 'main' into gpu-storage-buffer-clear
2023-03-06 13:32:44 +01:00
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