WineHQ

Vkd3d-todo

Revision as of 21:27, 8 November 2023 by Zf (talk | contribs) (get rid of 1.3 review section)

Vkd3d

libvkd3d

  • Re-implement descriptor heaps on top of VK_EXT_descriptor_indexing (WIP - jkucia).
  • Try to use VK_EXT_buffer_device_address for GPU addresses (partially done - jkucia).
  • Implement ID3D12Resource::ReadFromSubresource() for Metro Exodus.
  • Emulate wait-before-signal (partially done - jkucia).
  • Emulate NULL SRVs and UAVs.
  • Add tests for out-of-bounds access with vertex buffers.
  • Improve multi-queue support.
  • Queue family ownership transfer.
  • 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.
  • Add a test and fix relative vertex input addressing.
  • Reduce the number of queue submits. Queue submits are generally expensive, especially on recent kernels with amdgpu (mostly done - jkucia).
  • Use VK_KHR_image_format_list.
  • Merge vkCmdPipelineBarrier() calls.
  • Try to avoid fence worker thread when possible.
  • Implement workaround for minTexelBufferOffsetAlignment (NVIDIA).
  • Implement stencil aspect resource state transitions.
  • Implement cache for SPIR-V shaders?
  • Implement disk pipeline/shader cache?
  • Implement sparse resources?
  • Optimize barriers (render passes, ClearUnorderedAccessView, transform feedback).
  • Memory residency.
  • Raytracing?
  • DirectML?
  • Add support for sRGB swapchain views (VK_KHR_image_format_list).
  • Add tests for validation of view format compatibility (RTV, SRV, UAV, DSV).

libvkd3d-shader

  • 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).
  • 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.
  • Implement D3D discard.
  • Import SM4 to GLSL shader translation from wined3d.
  • Add support for Shader Model 6.0+.
  • Allow ignoring checking the checksum when parsing DXBC, both from the API and from the command line.
  • Always check that memory allocation didn't fail; for example, calls to vkd3d_string_buffer_printf() usually are not checked.
  • Factor shader dumping in vkd3d_shader_compile(), so that it happens also when parsing fails. This requires avoiding dumping the shader format, but that's acceptable.
  • Finish API for scanning/gathering info from shaders (registers used, bindings used, parameters used, required limits, extensions).
  • Implement ID3D11ShaderReflection et al.
    • Should we put everything into the same (chained) vkd3d_shader_scan_dxbc_info struct, or split them up? (Split up the DXBC-specific ones from the rest?)
    • I guess HLSL compile flags should be preserved verbatim...? I don't like the disparity we currently have.
    • How to do things like constant table types?
  • Add support for SSBO.

TPF validation

Vkd3d-shader generally assumes that Direct3D shader bytecode is valid and doesn't do much validation. We should introduce 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.
  • Number of indices for resources (SM5 vs SM5.1).

Tests

  • Make it possible to run all reasonable test combinations mixing these factors:
    • the library used to compile the shaders: vkd3d-shader, d3dcompiler_xx.dll or dxcompiler.dll;
    • the Shader Model to target;
    • the API to use to run the shader (d3d8, d3d9, d3d10, d3d11, d3d12, Vulkan);
    • when running on Windows, the actual library to use to run the shader: vkd3d or a native implementation;
    • possibly, one day, the library to use to recompile the shaders (it currently only makes sense on macOS once we support the Apple shader compiler for Metal; in all the other cases the choice is forced).
  • Run a decent subsets of those combinations in the CI.
  • Need more shader runners: OpenGL + SPIRV (Henri has WIP), OpenGL + GLSL (Henri has WIP), d3d10core, d3d8
  • Some HLSL functionality was accepted despite a lack of tests. We need tests for:
    • all tex*() variants
    • D3DCOLORtoUBYTE4() different results on sm1
    • min()
    • texture arrays
    • centroid interpolation
    • noperspective interpolation
    • precise?
    • texture types other than 2D
    • nontrivial tests for 2D multisample textures
    • GetDimensions()
    • SampleCmp(), SampleCmpLevelZero()
    • depth output
    • GS SV_PrimitiveID
    • For the sake of sm1 and its weird disjoint instruction sets, a lot of tests probably deserve VS variants as well.
    • Uniform reflection, which depends on uniform reflection API design
    • SM1 semantic matching (Zeb has this)
    • Test that all of the SM1 input semantics work
    • tbuffer
    • We should properly gate features based on profile version, and test that we are correctly doing this.

None of this necessarily needs to be extensions to the shader runner; we can find a way to write C tests for these.

We would also like a way to invoke shader runner logic from C. It's a bit unfortunate that the tests in hlsl_d3d12.c are d3d12-specific.

DXGI

  • Implement d3d12_swapchain_SetFullscreenState().
  • Implement d3d12_swapchain_GetFullscreenState().
  • Implement d3d12_swapchain_ResizeTarget().
  • Fix adapter LUIDs in Wine.
  • Reimplement IDXGIAdapter3::QueryVideoMemoryInfo() on top of VK_EXT_memory_budget. Ideally, Vulkan implementations should return the memory budget based on total system load (memory used by all graphics APIs).

Vulkan

  • 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.
This page was last edited on 8 November 2023, at 21:27.