From WineHQ Wiki
Jump to: navigation, search

libvkd3d-shader release

  • Finish API for flexible shader parameters.
  • Add API for enabling optional features/extensions, e.g. SPIR-V extensions, GLSL extensions.
  • Avoid artificial limits in the API, e.g. VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS.
  • Should shader translation to GLSL use the same exported function as SPIR-V translator?
  • Should DXIL use the same exported function as TPF (DXBC)?
  • Consider renaming vkd3d_shader_compile_dxbc() to vkd3d_shader_compile_tpf() (Tokenized Program Format).
  • Consider addding tests for OpenGL SPIR-V.
  • Review API for consistency and extensibility.
  • Add support for resource arrays.
  • Add or consider support for Shader Model 5.1 and 6.0+.
  • Add or consider support for UAV in vertex processing shader stages.
  • Add support for SSBO.
  • Finish API for scanning/gathering info from shaders (registers used, bindings used, parameters used, required limits, extensions).


  • Re-implement descriptor heaps on top of VK_EXT_descriptor_indexing.
  • Try to use VK_EXT_buffer_device_address for GPU addresses (re-implement root descriptors).
  • Implement ID3D12Resource::ReadFromSubresource() for Metro Exodus.
  • Emulate wait-before-signal (mostly done - jkucia).
  • Emulate NULL SRVs and UAVs.
  • Add tests for out-of-bounds access with vertex buffers.
  • Improve multi-queue support.
  • Fix all Vulkan validation errors.
  • Test ClearRTV() with UINT formats.
  • Fix clears for A8_UNORM.
  • Implement UAVs in vertex processing shader stages.
  • Implement support for multiple viewports.
  • Implement ID3D12GraphicsCommandList::SetPredication().
  • Test and fix copying between BC and other compatible formats.
  • State decay for resources and queue ownership transfer for resources.
  • Add tests for "lod" shader instruction.
  • Add tests for sample_d and sample_b instructions.
  • Add tests for "bufinfo" instruction.
  • Add tests for bufinfo and resinfo with NULL SRV and UAV descriptors.
  • Add a test for early depth-stencil (mostly done - jkucia).
  • Add a test and fix relative vertex input addressing.
  • Try to avoid fence worker thread when possible.
  • Optimize fence worker thread?
  • Raytracing?
  • DirectML?


  • Add support for capturing components with stream output.
  • Add support for unlimited registers (SM5.1).
  • Finish and fix tessellation shaders (I have some patches but unfortunately a lot of shaders are broken by Nvidia driver bugs - jkucia).
  • Import SM4 to GLSL shader translation from wined3d.
  • Start working on DXIL.
  • Add foundations for common shader tests. Write a shader test one time and run it on D3D10, D3D11, D3D12, Vulkan and OpenGL on Linux and Windows (mostly done - jkucia).
  • Add tests for OpenGL atomic counters.

TPF validation

Vkd3d-shader generally assumes that Direct3D shader bytecode is valid and doesn't do much validation. It would be nice to have some kind of validation pass. The validation potentially could be optional, e.g. used only in debug builds.

  • Interpolation mode is the same for all variables in the input register.


  • Implement d3d12_swapchain_SetFullscreenState().
  • Implement d3d12_swapchain_GetFullscreenState().
  • Implement d3d12_swapchain_ResizeTarget().
  • Fix adapter LUIDs in Wine.


  • Try to fix detached WSI surfaces after D3D9/D3D11 swapchain (OpenGL) is created for a window with D3D12 swapchain (Vulkan).
  • Fix child window rendering for D3D12 RenderDoc.