vkd3d-proton/include
Hans-Kristian Arntzen 2dcb1e2efc cache: Implement an on-disk pipeline library.
With VKD3D_SHADER_CACHE_PATH, we can add automatic serialization of pipeline
blobs to disk, even for games which do not make any use of GetCachedBlob
of ID3D12PipelineLibrary interfaces. Most applications expect drivers to
have some kind of internal caching.

This is implemented as a system where a disk
thread will manage a private ID3D12PipelineLibrary, and new PSOs are
automatically committed to this library. PSO creation will also consult
this internal pipeline library if applications do not provide their own
blob.

The strategy for updating the cache is based on a read-only cache which
is mmaped from disk, with an exclusive write-only portion for new blobs,
which ensures some degree of safety if there are multiple
concurrent processes using the same cache.

The memory layout of the disk cache is optimized to be very efficient
for appending new blobs, just simple fwrites + fflush.
The format is also robust against sliced files, which solves the problem
where applications tear down without destroying the D3D12 device
properly.

This structure is very similar to Fossilize, and in fact the idea is to
move towards actually using the Fossilize format directly later.
This implementation prepares us for this scenario where e.g. Steam could
potentially manage the vkd3d-proton cache.

The main complication in this implementation is that we have to merge
the read-only and write caches.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
2022-04-06 16:36:26 +02:00
..
private common: Move time query to common header. 2022-04-05 14:12:20 +02:00
shader-debug vkd3d: Emit deadca7 cookie for num_words in debug ring. 2022-03-11 13:26:27 +01:00
.gitignore include: Move debug interfaces to vkd3d_d3d12sdklayers.h. 2019-08-02 16:57:30 +02:00
meson.build vkd3d: Implement new interfaces required for DX12 DLSS support. 2021-08-27 11:37:15 +02:00
vkd3d.h cache: Implement an on-disk pipeline library. 2022-04-06 16:36:26 +02:00
vkd3d_command_list_vkd3d_ext.idl vkd3d: Implement new interfaces required for DX12 DLSS support. 2021-08-27 11:37:15 +02:00
vkd3d_d3d12.idl idl: Fix type of D3D12_ERROR defines. 2022-03-04 14:53:57 +01:00
vkd3d_d3d12sdklayers.idl include: Move debug interfaces to vkd3d_d3d12sdklayers.h. 2019-08-02 16:57:30 +02:00
vkd3d_d3dcommon.idl include: Define WKPID_D3DDebugObjectName and friends 2021-02-25 21:51:43 +01:00
vkd3d_device_vkd3d_ext.idl vkd3d: Implement new interfaces required for DX12 DLSS support. 2021-08-27 11:37:15 +02:00
vkd3d_dxgi.idl tests: Print adapter info on Windows. 2018-12-03 22:22:42 +01: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_dxgibase.idl include: Prefix public header file names with vkd3d. 2017-12-15 16:27:34 +01:00
vkd3d_dxgiformat.idl include: Add some new dxgi formats. 2021-06-24 12:55:17 +02: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 mechanism to get vkd3d-shader implementation revision. 2022-01-25 14:07:07 +01:00
vkd3d_sonames.h vkd3d: Remove dependency on linking directly against libvulkan. 2020-06-15 15:47:18 +02:00
vkd3d_swapchain_factory.idl meta: Add missing newlines to end of files 2020-11-05 17:16:57 +01:00
vkd3d_types.h include: Move vkd3d_result to common header. 2018-11-08 19:07:34 +01: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: Move to .def exports 2020-10-28 17:05:13 +01:00
vkd3d_vk_includes.h vkd3d: Implement new interfaces required for DX12 DLSS support. 2021-08-27 11:37:15 +02:00
vkd3d_win32.h vkd3d: Add private extension header. 2022-03-04 13:34:18 +01:00
vkd3d_windows.h common: Add wrapper for _ftelli64/_fseeki64. 2022-04-05 14:12:20 +02:00