Het Wine-project heeft de release van het vkd3d-pakket 1.13 gepubliceerd met de implementatie van Direct3D 12, die werkt via oproeptranslatie naar de Vulkan grafische API. Het pakket bevat de bibliotheken libvkd3d met de implementatie van Direct3D 12, libvkd3d-shader met de vertaler voor shadermodel 4 en 5, en libvkd3d-utils met functies voor het vergemakkelijken van de portering van Direct3D 12-applicaties, evenals een set demonstratievoorbeelden, waaronder de poort van glxgears naar Direct3D 12. De code van het project wordt verspreid onder de LGPLv2.1-licentie.
De libvkd3d-bibliotheek ondersteunt het merendeel van de mogelijkheden van Direct3D 12, inclusief graphics en compute functies, queues en command lists, descriptors en heap descriptors, root signatures, unordered access, samplers, command signatures, root constants, indirect rendering, en de clear*() en copy*() methoden. In libvkd3d-shader is de vertaling van shadermodel bytecode naar de tussentijdse representatie SPIR-V geïmplementeerd. Vertex, pixel, tessellatie, compute en eenvoudige geometry shaders worden ondersteund, evenals de serialisatie en deserialisatie van root signatures. Van de shader-instructies zijn rekenkundige, atomische en bitoperaties, vergelijkings- en flowcontrol-instructies, sample, gather en load-instructies, en unordered access (UAV) bewerkingen geïmplementeerd.
In de nieuwe versie:
- De HLSL-compiler heeft ondersteuning voor loop unrolling toegevoegd (optimalisatie waarbij cyclische bewerkingen worden vervangen door meerdere aaneengeschakelde kopieën van de code voor een efficiënter gebruik van de processorcache en vermindering van takken).
- Ondersteuning voor de effectcompiler is toegevoegd voor enkele statusobjecten van shadermodel 4.
- Ondersteuning voor de typen van shadermodel 4 BlendState, ComputeShader, DomainShader, GeometryShader, HullShader, DepthStencilState en RasterizerState is gegarandeerd, evenals functies zoals OMSetRenderTargets(), SetBlendState(), SetComputeShader(), SetDomainShader(), SetGeometryShader(), SetHullShader(), SetPixelShader(), SetVertexShader(), SetDepthStencilState() en SetRasterizerState().
- De shadercompiler heeft ondersteuning geïmplementeerd voor het parseren en opslaan van initiële waarden in verschillende formaten voor globale variabelen, functieparameters en annotaties.
- Ondersteuning voor het registerruimte van shadermodel 5.1 is toegevoegd.
- Ingebouwde functies zoals tex1D(), tex2D(), tex3D(), texCUBE(), asint(), f16tof32(), faceforward(), GetRenderTargetSampleCount(), rcp(), tex2Dbias(), tex1Dgrad(), tex2Dgrad(), tex3Dgrad() en texCUBEgrad() zijn geïmplementeerd.
- In libvkd3d is de interface ID3D12CommandList6 toegevoegd en is de mogelijkheid geïmplementeerd om texturen te creëren waarvan de compressie op blockniveau wordt uitgevoerd (bijvoorbeeld afzonderlijke compressie van blokken van 4×4 pixels).
- Ondersteuning is toegevoegd voor de structuur vkd3d_shader_parameter_info en de parameters VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32, VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_FUNC, VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF, VKD3D_SHADER_PARAMETER_NAME_FLAT_INTERPOLATION en VKD3D_SHADER_PARAMETER_TYPE_BUFFER.
Bron: opennet.ru
