vkd3d/include
Conor McCarthy 2b71ea406f vkd3d: Back descriptor heaps with Vulkan descriptor sets if descriptor indexing is available.
The existing implementation using virtual descriptor heaps, where Vk
descriptor sets are created for the bindings in the root descriptor tables,
is inefficient when multiple command lists are used with large descriptor
heaps. It also cannot support updating a descriptor set after it is bound.

This patch creates Vk sets for each D3D12 heap. Because D3D12 heaps
can contain CBV, SRV and UAV descriptors in the same heap, multiple Vk sets
are needed for each heap, however the total number of populated descriptors
is never more than (heap size + UAV counter count).

A new 'virtual_heaps' config option is introduced to make the old
implementation available when needed. It's not always possible to determine
if this is necessary when the device is created.

Up to nine Vk descriptor sets may be used. It's theoretically possible to
reduce this to eight by placing immutable samplers in the push descriptor
set layout, but contradictions in earlier versions of the Vulkan spec made
driver support inconsistent. The documentation was corrected in version
1.2.203.

This patch also adds support for UAV counter descriptor arrays. It's not
practical to add this in a separate patch due to complications with
combining the old UAV counter implementation with the new descriptor heap
implementation.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47713
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47154
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-03-18 12:38:53 +01:00
..
private vkd3d: Back descriptor heaps with Vulkan descriptor sets if descriptor indexing is available. 2022-03-18 12:38:53 +01:00
.gitignore vkd3d-shader: Write the SM1 constant table. 2021-04-20 18:27:09 +02:00
vkd3d_d3d9types.h vkd3d-shader: Write SM1 store instructions. 2021-05-14 21:02:15 +02:00
vkd3d_d3d12.idl tests: Add tests for output merger logic ops. 2021-10-18 18:36:55 +02:00
vkd3d_d3d12sdklayers.idl include: Add the D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE enumeration. 2020-10-07 18:41:33 +02:00
vkd3d_d3dcommon.idl vkd3d-shader/hlsl: Write bound resources into the RDEF table. 2021-10-15 10:14:03 +02:00
vkd3d_d3dcompiler.h vkd3d-utils: Return an ID3DBlob pointer from D3DCreateBlob(). 2022-02-25 20:41:37 +01:00
vkd3d_d3dx9shader.idl vkd3d-shader: Write the SM1 constant table. 2021-04-20 18:27:09 +02:00
vkd3d_dxgi1_2.idl include: Prefix public header file names with vkd3d. 2017-12-15 16:27:34 +01:00
vkd3d_dxgi1_3.idl include: Prefix public header file names with vkd3d. 2017-12-15 16:27:34 +01:00
vkd3d_dxgi1_4.idl include: Prefix public header file names with vkd3d. 2017-12-15 16:27:34 +01:00
vkd3d_dxgi.idl tests: Print adapter info on Windows. 2018-12-03 22:22:42 +01:00
vkd3d_dxgibase.idl include: Prefix public header file names with vkd3d. 2017-12-15 16:27:34 +01:00
vkd3d_dxgiformat.idl include: Prefix public header file names with vkd3d. 2017-12-15 16:27:34 +01:00
vkd3d_dxgitype.idl include: Prefix public header file names with vkd3d. 2017-12-15 16:27:34 +01:00
vkd3d_shader.h vkd3d-shader: Add missing version information for some enum elements. 2022-03-02 19:53:57 +01:00
vkd3d_types.h build: Use dllimport/dllexport on Win32 targets. 2021-08-09 21:43:25 +02:00
vkd3d_unknown.idl include: Prefix public header file names with vkd3d. 2017-12-15 16:27:34 +01:00
vkd3d_utils.h vkd3d-utils: Return an ID3DBlob pointer from D3DCreateBlob(). 2022-02-25 20:41:37 +01:00
vkd3d_windows.h vkd3d: Back descriptor heaps with Vulkan descriptor sets if descriptor indexing is available. 2022-03-18 12:38:53 +01:00
vkd3d.h Release 1.3. 2022-03-02 21:32:57 +01:00