2024-11-21 03:00:00 -08:00
|
|
|
|
# What's new in vkd3d 1.14 (21 November 2024)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- Depth bounds can be changed dynamically using the OMSetDepthBounds() method
|
|
|
|
|
of the ID3D12GraphicsCommandList1 interface.
|
|
|
|
|
|
|
|
|
|
- The new VKD3D_CAPS_OVERRIDE environment variable can be used to override the
|
|
|
|
|
value of capabilities like the maximum feature level and resource binding
|
|
|
|
|
tier reported to applications.
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Interstage I/O variable packing matches d3dcompiler/fxc more closely.
|
|
|
|
|
- The following intrinsic functions are supported:
|
|
|
|
|
- dst()
|
|
|
|
|
- f32tof16()
|
|
|
|
|
- mad()
|
|
|
|
|
- modf()
|
|
|
|
|
- sincos()
|
|
|
|
|
- ‘discard’ support for shader model 1-3 target profiles.
|
|
|
|
|
- The ‘SV_SampleIndex’ input semantic for fragment shaders.
|
|
|
|
|
- The ‘SV_GroupIndex’ input semantic for compute shaders.
|
|
|
|
|
- The ‘earlydepthstencil’ function attribute.
|
|
|
|
|
- Constant folding of expressions like ‘x && c’ and ‘x || c’, where ‘c’ is a
|
|
|
|
|
constant.
|
|
|
|
|
- Preprocessor support for namespaces in macro identifiers. I.e., syntax
|
|
|
|
|
like ‘#define NAME1::NAME2::NAME3 1’ works as intended now.
|
|
|
|
|
- Structure inheritance. Multiple inheritance is not supported.
|
|
|
|
|
- Register assignments for unused constant buffers are allowed to overlap
|
|
|
|
|
register assignments for used constant buffers.
|
|
|
|
|
- Instruction count reflection data for shader model 4+ target profiles.
|
|
|
|
|
This data is contained in the ‘STAT’ DXBC section, and can be queried with
|
|
|
|
|
the GetDesc() method of the ID3D11ShaderReflection and
|
|
|
|
|
ID3D12ShaderReflection interfaces. Note that the ID3D12ShaderReflection
|
|
|
|
|
implementation provided by vkd3d-utils does not currently correctly report
|
|
|
|
|
this information.
|
|
|
|
|
- ‘unorm’ and ‘snorm’ resource format modifiers. For example,
|
|
|
|
|
‘Texture2D<unorm float4> t;’
|
|
|
|
|
- Parser support for ‘ByteAddressBuffer’ resources, as well as their
|
|
|
|
|
Load()/Load2()/Load3()/Load4() methods.
|
|
|
|
|
- Parser support for ‘RWByteAddressBuffer’ resources, as well as their
|
|
|
|
|
Store()/Store2()/Store3()/Store4() methods.
|
|
|
|
|
- Parser support for the ‘compile’ keyword, as well as the CompileShader()
|
|
|
|
|
and ConstructGSWithSO() intrinsic functions. Actual compilation of
|
|
|
|
|
embedded shaders is not implemented yet, but parser support is sufficient
|
|
|
|
|
for allowing compilation of HLSL sources containing this syntax to succeed
|
|
|
|
|
when targetting shader target profiles like ‘vs_5_0’ or ‘ps_5_0’.
|
|
|
|
|
- Initial support for tessellation shaders. Only the most trivial shaders
|
|
|
|
|
are supported in this release. Perhaps most notably, both ‘InputPatch’ and
|
|
|
|
|
‘OutputPatch’ are not implemented yet.
|
|
|
|
|
|
|
|
|
|
- The new ‘fx’ source type can be used in combination with the ‘d3d-asm’
|
|
|
|
|
target type to disassemble binary effects.
|
|
|
|
|
|
|
|
|
|
- More complete support for fx_2_0 binary effect output, including support for
|
|
|
|
|
annotations, default values, as well as object initialiser data used for e.g.
|
|
|
|
|
string, texture, and shader objects.
|
|
|
|
|
|
|
|
|
|
- A significant number of instructions have been implemented for the
|
|
|
|
|
experimental GLSL target. The GLSL output currently targets version 4.40
|
|
|
|
|
without extensions, but the intention is to make this configurable in a
|
|
|
|
|
future release of vkd3d.
|
|
|
|
|
|
|
|
|
|
- Experimental support for Metal Shading Language (MSL) output, enabled by
|
|
|
|
|
building vkd3d with the ‘-DVKD3D_SHADER_UNSUPPORTED_MSL’ preprocessor
|
|
|
|
|
option. The current release is only able to compile the most basic shaders
|
|
|
|
|
when targetting MSL. Being an experimental feature, both the ABI and API may
|
|
|
|
|
change in future releases; the feature may even go away completely.
|
|
|
|
|
Nevertheless, we hope our users find this feature useful, and welcome
|
|
|
|
|
feedback and contributions.
|
|
|
|
|
|
|
|
|
|
- Shader code generation for various legacy fixed-function features, including
|
|
|
|
|
clip planes, point sizes, and point sprites. This is mainly relevant for
|
|
|
|
|
executing shader model 1-3 sources in modern target environments like
|
|
|
|
|
Vulkan, because those target environments do not implement equivalent
|
|
|
|
|
fixed-function features.
|
|
|
|
|
|
|
|
|
|
- The amount of shader validation done by the internal validator has been
|
|
|
|
|
greatly extended. The validator is enabled by the ‘force_validation’ option,
|
|
|
|
|
specified through the VKD3D_SHADER_CONFIG environment variable.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_DOUBLE_AS_FLOAT_ALIAS flag specifies that
|
|
|
|
|
the ‘double’ type behaves as an alias for the ‘float’ type in HLSL sources
|
|
|
|
|
with shader model 1-3 target profiles.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4 enumeration value
|
|
|
|
|
specifies that a shader parameter contains a 4-dimensional vector of
|
|
|
|
|
32-bit floating-point data.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_MASK shader parameter specifies
|
|
|
|
|
which clip planes are enabled.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_[0-7] shader parameters specify
|
|
|
|
|
the corresponding clip planes.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE shader parameter specifies the
|
|
|
|
|
point size to output when the source shader does not explicitly output a
|
|
|
|
|
point size.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MIN shader parameter specifies
|
|
|
|
|
the minimum point size to clamp point size outputs to.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MAX shader parameter specifies
|
|
|
|
|
the maximum point size to clamp point size outputs to.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_NAME_POINT_SPRITE shader parameter specifies
|
|
|
|
|
whether texture coordinate inputs in fragment shaders should be replaced
|
|
|
|
|
with point coordinates.
|
|
|
|
|
- The VKD3D_SHADER_SOURCE_FX source type specifies binary Direct3D effects.
|
|
|
|
|
- The VKD3D_SHADER_TARGET_MSL target type specifies Metal Shading Language
|
|
|
|
|
shaders.
|
|
|
|
|
|
|
|
|
|
### libvkd3d-utils
|
|
|
|
|
|
|
|
|
|
- The GetDesc() method of the ID3D12ShaderReflection interface returned by
|
|
|
|
|
D3DReflect() returns shader version information.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- D3DCompile2VKD3D() is a variant of D3DCompile2() that allows targeting the
|
|
|
|
|
behaviour of a specific d3dcompiler version.
|
|
|
|
|
|
|
|
|
|
### vkd3d-compiler
|
|
|
|
|
|
|
|
|
|
- The ‘--alias-double-as-float’ option specifies that the ‘double’ type
|
|
|
|
|
behaves as an alias for the ‘float’ type in HLSL sources with shader model
|
|
|
|
|
1-3 target profiles.
|
|
|
|
|
|
|
|
|
|
- The ‘fx’ source type specifies binary Direct3D effects.
|
|
|
|
|
|
|
|
|
|
- The ‘msl’ target type specifies Metal Shading Language shaders.
|
|
|
|
|
|
2024-08-29 03:00:00 -07:00
|
|
|
|
# What's new in vkd3d 1.13 (29 August 2024)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- The ID3D12CommandList6 interface is supported.
|
|
|
|
|
|
|
|
|
|
- Block-compressed textures can be created with unaligned dimensions. This
|
|
|
|
|
corresponds to
|
|
|
|
|
D3D12_FEATURE_D3D12_OPTIONS8.UnalignedBlockTexturesSupported.
|
|
|
|
|
|
|
|
|
|
- Some minor issues pointed out by the Vulkan validation layers have been
|
|
|
|
|
addressed. These are not known to affect applications in practice, but
|
|
|
|
|
should make libvkd3d slightly more well-behaved.
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Basic loop unrolling support. Some of the more complicated cases like
|
|
|
|
|
loops containing conditional jumps are still unsupported.
|
|
|
|
|
- Initialisation values for global variables, function parameters, and
|
|
|
|
|
annotation variables are parsed and stored in output formats supporting
|
|
|
|
|
them.
|
|
|
|
|
- Shader model 5.1 register spaces are supported when using the
|
|
|
|
|
corresponding target profiles, as well as shader model 5.1 reflection
|
|
|
|
|
data.
|
|
|
|
|
- Register reservations support expressions as offsets. For example:
|
|
|
|
|
‘float f : register(c0[1 + 1 * 2]);’
|
|
|
|
|
- The tex1D(), tex2D(), tex3D(), and texCUBE() intrinsic function variants
|
|
|
|
|
with explicit derivatives are supported.
|
|
|
|
|
- The following intrinsic functions are supported:
|
|
|
|
|
- asint()
|
|
|
|
|
- f16tof32()
|
|
|
|
|
- faceforward()
|
|
|
|
|
- GetRenderTargetSampleCount()
|
|
|
|
|
- rcp()
|
|
|
|
|
- tex2Dbias()
|
|
|
|
|
- tex1Dgrad(), tex2Dgrad(), tex3Dgrad(), and texCUBEgrad()
|
|
|
|
|
- The sin() and cos() intrinsic functions are supported in shader model
|
|
|
|
|
1-3 profiles. These were already supported in shader model 4+ profiles.
|
|
|
|
|
- The following features specific to effects target profiles:
|
|
|
|
|
- Types supported in version 4.0+:
|
|
|
|
|
- BlendState
|
|
|
|
|
- ComputeShader, DomainShader, GeometryShader, and HullShader
|
|
|
|
|
- DepthStencilState
|
|
|
|
|
- RasterizerState
|
|
|
|
|
- State application functions implemented for version 4.0+ effects:
|
|
|
|
|
- OMSetRenderTargets()
|
|
|
|
|
- SetBlendState()
|
|
|
|
|
- SetComputeShader(), SetDomainShader(), SetGeometryShader(),
|
|
|
|
|
SetHullShader(), SetPixelShader(), and SetVertexShader()
|
|
|
|
|
- SetDepthStencilState()
|
|
|
|
|
- SetRasterizerState()
|
|
|
|
|
- String types. These are mainly used for annotations.
|
|
|
|
|
- Annotations on global variables.
|
|
|
|
|
- Support for the ‘Texture’ field of the ‘SamplerState’ type.
|
|
|
|
|
- Support for NULL values.
|
|
|
|
|
- Stores to swizzled matrix variables.
|
|
|
|
|
- The ‘unsigned’ type modifier is supported. (For example,
|
|
|
|
|
‘unsigned int’.) Note that ‘uint’ and related types were already
|
|
|
|
|
supported.
|
|
|
|
|
- ‘ConstantBuffer<>’ types.
|
|
|
|
|
- The ‘SV_Coverage’ output semantic for fragment shaders.
|
|
|
|
|
|
|
|
|
|
- The experimental DXIL source type supports quad group operations.
|
|
|
|
|
|
|
|
|
|
- The Direct3D shader model 2-3 ‘texldb’ instruction is correctly disassembled
|
|
|
|
|
when outputting Direct3D shader assembly.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- The vkd3d_shader_parameter_info structure extends the
|
|
|
|
|
vkd3d_shader_compile_info structure, and can be used to specify shader
|
|
|
|
|
parameters. This is a more generic version of the shader parameter
|
|
|
|
|
interface for SPIR-V targets in struct vkd3d_shader_spirv_target_info.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32 enumeration value specifies
|
|
|
|
|
that a shader parameter contains 32-bit floating-point data.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_FUNC shader parameter
|
|
|
|
|
specifies the alpha test function.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF shader parameter
|
|
|
|
|
specifies the alpha test reference value.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_NAME_FLAT_INTERPOLATION shader parameter
|
|
|
|
|
specifies the interpolation mode for colour inputs in Direct3D shader
|
|
|
|
|
model 1-3 fragment shaders.
|
|
|
|
|
- The VKD3D_SHADER_PARAMETER_TYPE_BUFFER enumeration value specifies that
|
|
|
|
|
the value of a shader parameter is provided at run-time through a buffer
|
|
|
|
|
resource.
|
|
|
|
|
|
2024-05-28 03:00:00 -07:00
|
|
|
|
# What's new in vkd3d 1.12 (28 May 2024)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- When the VK_EXT_fragment_shader_interlock extension is available, libvkd3d
|
|
|
|
|
supports rasteriser-ordered views.
|
|
|
|
|
|
|
|
|
|
- Compute pipeline state objects can be created from compute shaders with
|
|
|
|
|
embedded root signatures.
|
|
|
|
|
|
|
|
|
|
- When supported by the underlying Vulkan implementation, libvkd3d supports
|
|
|
|
|
the DXGI_FORMAT_B5G6R5_UNORM, DXGI_FORMAT_B5G5R5A1_UNORM, and
|
|
|
|
|
DXGI_FORMAT_B4G4R4A4_UNORM formats.
|
|
|
|
|
|
|
|
|
|
- The ID3D12ShaderCacheSession interface is supported.
|
|
|
|
|
|
|
|
|
|
- The ID3D12Device9 interface is supported.
|
|
|
|
|
|
|
|
|
|
- The CreateCommittedResource2(), CreatePlacedResource1(),
|
|
|
|
|
GetCopyableFootprints1(), and GetResourceAllocationInfo2() methods of the
|
|
|
|
|
ID3D12Device8 interface are implemented.
|
|
|
|
|
|
|
|
|
|
- Several new feature queries are supported:
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS14
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS15
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS16
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS17
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS18
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- The experimental DXIL source type supports the majority of Direct3D shader
|
|
|
|
|
model 6.0 instructions and features. Note that this is currently still an
|
|
|
|
|
unsupported feature, enabled by building vkd3d with the
|
|
|
|
|
‘-DVKD3D_SHADER_UNSUPPORTED_DXIL’ preprocessor option. No API or ABI
|
|
|
|
|
stability guarantees are provided for experimental features.
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Support for compiling directly to Direct3D shader assembly and SPIR-V
|
|
|
|
|
target types. This is primarily a convenience feature, as targeting
|
|
|
|
|
these could previously be achieved by going through either the ‘Legacy
|
|
|
|
|
Direct3D byte-code’ or ‘Tokenized Program Format’ formats as
|
|
|
|
|
intermediates.
|
|
|
|
|
- Improved support for shader model 1-3 profiles. In particular:
|
|
|
|
|
- The ternary, comparison, and logical operators are now supported for
|
|
|
|
|
these profiles.
|
|
|
|
|
- Support for integer and Boolean types has been improved.
|
|
|
|
|
- Shader constants are allocated in an order compatible with the
|
|
|
|
|
Microsoft implementation.
|
|
|
|
|
- More complex array size expressions. For example, matrix and vector
|
|
|
|
|
swizzles are allowed, as well as (constant) array dereferences.
|
|
|
|
|
- The following intrinsic functions are supported:
|
|
|
|
|
- cosh()
|
|
|
|
|
- determinant()
|
|
|
|
|
- refract()
|
|
|
|
|
- sinh()
|
|
|
|
|
- tanh()
|
|
|
|
|
- Reflection data for ‘Tokenized Program Format’ targets more accurately
|
|
|
|
|
reflects the source shader.
|
|
|
|
|
- Constant folding of expressions like ‘x + 0’ and ‘x * 1’.
|
|
|
|
|
- Support for the ‘single’ qualifier on constant buffer declarations.
|
|
|
|
|
- Parser support for annotations on constant buffer declarations.
|
|
|
|
|
- Parser support for effect state objects.
|
|
|
|
|
|
|
|
|
|
- When the SPV_EXT_fragment_shader_interlock extension is supported, SPIR-V
|
|
|
|
|
targets support rasteriser-ordered views.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- The VKD3D_SHADER_PARSE_DXBC_IGNORE_CHECKSUM flag indicates that
|
|
|
|
|
vkd3d_shader_parse_dxbc() should skip validating the checksum of the
|
|
|
|
|
DXBC blob. This allows otherwise valid blobs with a missing or invalid
|
|
|
|
|
checksum to be parsed.
|
|
|
|
|
- The VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_1 enumeration value
|
|
|
|
|
specifies the Vulkan 1.1 environment for SPIR-V targets. Most notably,
|
|
|
|
|
the Vulkan 1.1 environment implies support for SPIR-V 1.3, which is a
|
|
|
|
|
requirement for supporting Direct3D shader model 6 wave operations on
|
|
|
|
|
SPIR-V targets.
|
|
|
|
|
- The VKD3D_SHADER_SPIRV_EXTENSION_EXT_FRAGMENT_SHADER_INTERLOCK
|
|
|
|
|
enumeration value indicates support for the
|
|
|
|
|
SPV_EXT_fragment_shader_interlock extension in the SPIR-V target
|
|
|
|
|
environment.
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_FEATURE_WAVE_OPS flag indicates support
|
|
|
|
|
for Direct3D shader model 6 wave operations in the SPIR-V target
|
|
|
|
|
environment.
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_FORMATTING_IO_SIGNATURES flag indicates
|
|
|
|
|
that vkd3d_shader_compile() should include information about input,
|
|
|
|
|
output, and patch constant shader signatures when targeting Direct3D
|
|
|
|
|
shader assembly. Note that this is a libvkd3d-shader extension, and
|
|
|
|
|
potentially makes the output incompatible with other implementations.
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_CHILD_EFFECT compile option specifies
|
|
|
|
|
whether libvkd3d-shader should produce child effects for ‘fx_4_0’ and
|
|
|
|
|
‘fx_4_1’ HLSL target profiles.
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_INCLUDE_EMPTY_BUFFERS_IN_EFFECTS compile
|
|
|
|
|
option specifies whether empty constant buffer descriptions should be
|
|
|
|
|
included in the output for ‘fx_4_0’ and ‘fx_4_1’ HLSL target profiles.
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_WARN_IMPLICIT_TRUNCATION compile option
|
|
|
|
|
specifies whether the HLSL compiler should emit warnings for vector and
|
|
|
|
|
matrix truncation in implicit type conversions.
|
|
|
|
|
|
|
|
|
|
### libvkd3d-utils
|
|
|
|
|
|
|
|
|
|
- D3D12CreateDeviceVKD3D() and D3D12CreateDevice() no longer require the
|
|
|
|
|
VK_KHR_surface and VK_KHR_swapchain extensions to be available. This
|
|
|
|
|
allows them to be used in environments with a windowing system, for
|
|
|
|
|
example for off-screen rendering and compute tasks.
|
|
|
|
|
|
|
|
|
|
- The GetConstantBufferByIndex() and GetResourceBindingDesc() methods of the
|
|
|
|
|
ID3D12ShaderReflection interface are implemented.
|
|
|
|
|
|
|
|
|
|
- The GetVariableByIndex() method of the
|
|
|
|
|
ID3D12ShaderReflectionConstantBuffer interface is implemented.
|
|
|
|
|
|
|
|
|
|
- The GetMemberTypeByIndex() method of the ID3D12ShaderReflectionType
|
|
|
|
|
interface is implemented.
|
|
|
|
|
|
|
|
|
|
- The GetType() method of the ID3D12ShaderReflectionVariable interface is
|
|
|
|
|
implemented.
|
|
|
|
|
|
|
|
|
|
### vkd3d-compiler
|
|
|
|
|
|
|
|
|
|
- The ‘+signatures’ flag for the ‘--formatting’ option can be used to
|
|
|
|
|
specify that vkd3d-compiler should include information about input,
|
|
|
|
|
output, and patch constant shader signatures when outputting Direct3D
|
|
|
|
|
shader assembly. Note that this is a vkd3d-compiler extension, and
|
|
|
|
|
potentially makes the output incompatible with other implementations.
|
|
|
|
|
|
|
|
|
|
- The ‘--child-effect’ option can be used to specify that vkd3d-compiler
|
|
|
|
|
should produce child effects for ‘fx_4_0’ and ‘fx_4_1’ HLSL target
|
|
|
|
|
profiles.
|
|
|
|
|
|
|
|
|
|
- The ‘--fx-include-empty-buffers’ option can be used to specify that
|
|
|
|
|
vkd3d-compiler should include empty constant buffer descriptions in the
|
|
|
|
|
output for ‘fx_4_0’ and ‘fx_4_1’ HLSL target profiles.
|
|
|
|
|
|
|
|
|
|
### vkd3d-dxbc
|
|
|
|
|
|
|
|
|
|
- The ‘--ignore-checksum’ option can be used to specify that vkd3d-dxbc
|
|
|
|
|
should skip validating the checksum of the DXBC input blob. This allows
|
|
|
|
|
vkd3d-dxbc to operate on otherwise valid blobs with missing or invalid
|
|
|
|
|
checksums.
|
|
|
|
|
|
|
|
|
|
- The ‘--emit’ option can be used to indicate that vkd3d-dxbc should output
|
|
|
|
|
a new DXBC blob.
|
|
|
|
|
|
|
|
|
|
- The ‘--extract’ option can be used to specify a section to extract out of
|
|
|
|
|
the input blob. For example, ‘vkd3d-dxbc -x t:PRIV blob.dxbc > priv.bin’
|
|
|
|
|
would extract the private data section of ‘blob.dxbc’ to ‘priv.bin’, and
|
|
|
|
|
‘vkd3d-dxbc -x t:RTS0 blob.dxbc > root_signature.bin’ would extract the
|
|
|
|
|
root signature to ‘root_signature.bin’.
|
|
|
|
|
|
|
|
|
|
- The ‘--output’ option can be used to specify where vkd3d-dxbc should write
|
|
|
|
|
its output for the ‘--emit’ and ‘--extract’ options.
|
|
|
|
|
|
2024-03-05 02:40:33 -08:00
|
|
|
|
# What's new in vkd3d 1.11 (5 Mar 2024)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- Descriptor updates happen asynchronously on an internal worker thread, for
|
|
|
|
|
a minor performance improvement in applications that update many
|
|
|
|
|
descriptors per frame.
|
|
|
|
|
|
|
|
|
|
- When the VK_EXT_mutable_descriptor_type extension is available, libvkd3d
|
|
|
|
|
will make more efficient use of descriptor pools and sets.
|
|
|
|
|
|
|
|
|
|
- When the VK_EXT_shader_viewport_index_layer extension is available,
|
|
|
|
|
libvkd3d supports indexing viewport and render target arrays from vertex
|
|
|
|
|
and tessellation evaluation shaders.
|
|
|
|
|
|
|
|
|
|
- Support for standard (i.e., black and white) border colours is
|
|
|
|
|
implemented.
|
|
|
|
|
|
|
|
|
|
- The GetResourceAllocationInfo1() method of the ID3D12Device4 interface is
|
|
|
|
|
implemented.
|
|
|
|
|
|
|
|
|
|
- The ID3D12Device7 interface is supported.
|
|
|
|
|
|
|
|
|
|
- The ID3D12Resource2 interface is supported.
|
|
|
|
|
|
|
|
|
|
- Several new feature queries are supported:
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS6
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS7
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS8
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS9
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS10
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS11
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS12
|
|
|
|
|
- D3D12_FEATURE_D3D12_OPTIONS13
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- Initial support for compiling legacy Direct3D bytecode to SPIR-V.
|
|
|
|
|
|
|
|
|
|
- Experimental support for compiling DirectX Intermediate Language (DXIL) to
|
|
|
|
|
SPIR-V and Direct3D shader assembly. Being an experimental feature, this
|
|
|
|
|
requires building vkd3d with the ‘-DVKD3D_SHADER_UNSUPPORTED_DXIL’
|
|
|
|
|
preprocessor option. Note that enabling this feature will affect the
|
|
|
|
|
capabilities reported by libvkd3d as well, and may cause previously
|
|
|
|
|
working applications to break due to attempting to use incomplete DXIL
|
|
|
|
|
support. No API or ABI stability guarantees are provided for experimental
|
|
|
|
|
features.
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Initial support for the ‘fx_2_0’, ‘fx_4_0’, ‘fx_4_1’, and ‘fx_5_0’
|
|
|
|
|
profiles, using the new ‘VKD3D_SHADER_TARGET_FX’ target type.
|
|
|
|
|
- Support for ‘Buffer’ resources.
|
|
|
|
|
- The acos(), asin(), atan(), and atan2() intrinsic functions are
|
|
|
|
|
supported.
|
|
|
|
|
- Explicit register assignment using the ‘register()’ keyword in shader
|
|
|
|
|
model 1-3 profiles. This was previously only supported in shader model
|
|
|
|
|
4+ profiles.
|
|
|
|
|
- Casts from integer to floating-point types in shader model 1-3 profiles.
|
|
|
|
|
- Support for various input/output semantics:
|
|
|
|
|
- SV_InstanceID in shader model 4+ fragment shaders.
|
|
|
|
|
- SV_PrimitiveID in shader model 4+ fragment shaders. In previous
|
|
|
|
|
versions this was only supported in shader model 4+ geometry shaders.
|
|
|
|
|
- SV_RenderTargetArrayIndex in shader model 4+ vertex and fragment shaders.
|
|
|
|
|
- SV_ViewportArrayIndex in shader model 4+ vertex and fragment shaders.
|
|
|
|
|
- Support for various rasteriser-ordered view types. Specifically:
|
|
|
|
|
- RasterizerOrderedBuffer
|
|
|
|
|
- RasterizerOrderedStructuredBuffer
|
|
|
|
|
- RasterizerOrderedTexture1D
|
|
|
|
|
- RasterizerOrderedTexture1DArray
|
|
|
|
|
- RasterizerOrderedTexture2D
|
|
|
|
|
- RasterizerOrderedTexture2DArray
|
|
|
|
|
- RasterizerOrderedTexture3D
|
|
|
|
|
|
|
|
|
|
- New features for the SPIR-V target type:
|
|
|
|
|
- Support for globally coherent unordered access views. These have the
|
|
|
|
|
‘globallycoherent’ storage class in HLSL, and the ‘_glc’ suffix in
|
|
|
|
|
Direct3D assembly.
|
|
|
|
|
- Support for thread group unordered access view barriers. This
|
|
|
|
|
corresponds to ‘sync_ugroup’ instructions in Direct3D assembly.
|
|
|
|
|
- When the SPV_EXT_viewport_index_layer extension is supported, vertex and
|
|
|
|
|
tessellation evaluation shaders can write render target and viewport
|
|
|
|
|
array indices. This corresponds to the ‘SV_RenderTargetArrayIndex’ and
|
|
|
|
|
‘SV_ViewportArrayIndex’ HLSL output semantics.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_FEATURE compile option can be used to
|
|
|
|
|
specify features available in the target environment. The
|
|
|
|
|
VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64 flag indicates support for
|
|
|
|
|
64-bit integer types in the SPIR-V target environment. The
|
|
|
|
|
VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64 flag indicates support for
|
|
|
|
|
64-bit floating-point types in the SPIR-V target environment. For
|
|
|
|
|
backward compatibility, VKD3D_SHADER_API_VERSION_1_10 and earlier also
|
|
|
|
|
imply support for 64-bit floating-point types.
|
|
|
|
|
- The VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER enumeration
|
|
|
|
|
value indicates support for the SPV_EXT_viewport_index_layer extension
|
|
|
|
|
in the SPIR-V target environment.
|
|
|
|
|
|
|
|
|
|
### libvkd3d-utils
|
|
|
|
|
|
|
|
|
|
- When available, the following Vulkan extensions are enabled by
|
|
|
|
|
D3D12CreateDeviceVKD3D() and D3D12CreateDevice():
|
|
|
|
|
- VK_KHR_android_surface
|
|
|
|
|
- VK_KHR_wayland_surface
|
|
|
|
|
- VK_KHR_win32_surface
|
|
|
|
|
- VK_KHR_xlib_surface
|
|
|
|
|
- VK_EXT_metal_surface
|
|
|
|
|
- VK_MVK_ios_surface
|
|
|
|
|
|
|
|
|
|
Previous versions of vkd3d-utils enabled VK_KHR_xcb_surface and
|
|
|
|
|
VK_MVK_macos_surface. In practice this means that
|
|
|
|
|
D3D12CreateDevice()/D3D12CreateDeviceVKD3D() can be used on the
|
|
|
|
|
corresponding additional window systems.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- D3DReflect() is used to retrieve information about shaders. It currently
|
|
|
|
|
supports retrieving information about input, output, and patch constant
|
|
|
|
|
parameters using the ID3D12ShaderReflection interface.
|
|
|
|
|
- D3DDisassemble() is used to disassemble legacy Direct3D bytecode (shader
|
|
|
|
|
model 1-3) and ‘Tokenized Program Format’ (shader model 4 and 5)
|
|
|
|
|
shaders.
|
|
|
|
|
|
|
|
|
|
### vkd3d-compiler
|
|
|
|
|
|
|
|
|
|
- The new ‘fx’ target is used for outputting Direct3D effects when compiling
|
|
|
|
|
HLSL ‘fx_2_0’, ‘fx_4_0’, ‘fx_4_1’, and ‘fx_5_0’ profiles.
|
|
|
|
|
|
|
|
|
|
### build
|
|
|
|
|
|
|
|
|
|
- The minimum required version of Vulkan-Headers for this release is version
|
|
|
|
|
1.3.228.
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.10 (6 Dec 2023)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- Creating pipeline state objects from pipeline state stream descriptions is
|
|
|
|
|
implemented.
|
|
|
|
|
- Depth-bounds testing is implemented.
|
|
|
|
|
- When the VK_KHR_maintenance2 extension is available, libvkd3d will
|
|
|
|
|
explicitly specify the usage flags of Vulkan image views. This is
|
|
|
|
|
particularly useful on MoltenVK, where 2D-array views of 3D textures are
|
|
|
|
|
subject to usage restrictions.
|
|
|
|
|
- The D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD and/or
|
|
|
|
|
D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE feature flags are reported for
|
|
|
|
|
UAV formats when the ‘shaderStorageImageReadWithoutFormat’ and/or
|
|
|
|
|
‘shaderStorageImageWriteWithoutFormat’ Vulkan device features are
|
|
|
|
|
supported.
|
|
|
|
|
- The ID3D12Device5 interface is supported.
|
|
|
|
|
- The ID3D12GraphicsCommandList5 interface is supported.
|
|
|
|
|
- The ID3D12Resource1 interface is supported.
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Support for the following intrinsic functions:
|
|
|
|
|
- ceil()
|
|
|
|
|
- degrees() and radians()
|
|
|
|
|
- fwidth()
|
|
|
|
|
- tan()
|
|
|
|
|
- tex2Dlod(), tex2Dproj(), texCUBEproj(), and tex3Dproj()
|
|
|
|
|
- Constant folding support for more expression types. In particular:
|
|
|
|
|
- ternary operators and branches
|
|
|
|
|
- reciprocal square roots
|
|
|
|
|
- exponentials
|
|
|
|
|
- logical ‘not’ on booleans
|
|
|
|
|
- bitwise complements
|
|
|
|
|
- left/right shifts
|
|
|
|
|
- ceil(), floor(), frac(), and saturate()
|
|
|
|
|
- Support for dynamic indexing of arrays.
|
|
|
|
|
- Support for ‘break’ and ‘continue’ statements.
|
|
|
|
|
- Support for ‘switch’ statements.
|
|
|
|
|
- The ‘linear’, ‘centroid’, and ‘noperspective’ interpolation modifiers
|
|
|
|
|
are supported.
|
|
|
|
|
- The ‘RWTexture1DArray’ and ‘RWTexture2DArray’ unordered access view
|
|
|
|
|
types are supported.
|
|
|
|
|
- ‘\[loop\]’ attributes are accepted on loops.
|
|
|
|
|
- u/U and l/L suffixes on integer constants.
|
|
|
|
|
|
|
|
|
|
- Floating-point values are explicitly clamped to the upper and lower bounds
|
|
|
|
|
of the target type by ‘ftoi’ and ‘ftou’ instructions when targeting
|
|
|
|
|
SPIR-V. Similarly, NaNs are flushed to zero. Some hardware/drivers would
|
|
|
|
|
already do this implicitly, but behaviour for such inputs is undefined as
|
|
|
|
|
far as SPIR-V is concerned.
|
|
|
|
|
|
|
|
|
|
- The VKD3D_SHADER_CONFIG environment variable can be used to modify the
|
|
|
|
|
behaviour of libvkd3d-shader at run-time, analogous to the existing
|
|
|
|
|
VKD3D_CONFIG environment variable for libvkd3d. See the README for a list
|
|
|
|
|
of supported options.
|
|
|
|
|
|
|
|
|
|
- When scanning legacy Direct3D bytecode using vkd3d_shader_scan(),
|
|
|
|
|
descriptor information for shader model 2 and 3 combined resource-sampler
|
|
|
|
|
pairs is returned in the vkd3d_shader_scan_descriptor_info structure.
|
|
|
|
|
Note that this information is not yet available for shader model 1
|
|
|
|
|
sources, although this will likely be added in a future release.
|
|
|
|
|
|
|
|
|
|
- The Direct3D shader assembly target supports the ‘rasteriser ordered view’
|
|
|
|
|
flag (‘_rov’) on unordered access view declarations.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_BACKWARD_COMPATIBILITY compile
|
|
|
|
|
option can be used to specify backward compatibility options. The
|
|
|
|
|
VKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_MAP_SEMANTIC_NAMES flag is
|
|
|
|
|
the only currently supported flag, and can be used to specify that
|
|
|
|
|
shader model 1-3 semantic names should be mapped to their shader model
|
|
|
|
|
4+ system value equivalents when compiling HLSL sources.
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN compile
|
|
|
|
|
option can be used to specify the origin of fragment coordinates for
|
|
|
|
|
SPIR-V targets. This is especially useful in OpenGL environments, where
|
|
|
|
|
the origin may be different than in Direct3D or Vulkan environments.
|
|
|
|
|
- The vkd3d_shader_scan_combined_resource_sampler_info structure
|
|
|
|
|
extends the vkd3d_shader_compile_info structure, and can be used to
|
|
|
|
|
retrieve information about the combined resource-sampler pairs used by a
|
|
|
|
|
shader. This is especially useful when compiling shaders for usage in
|
|
|
|
|
environments without separate binding points for samplers and resources,
|
|
|
|
|
like OpenGL.
|
|
|
|
|
- vkd3d_shader_free_scan_combined_resource_sampler_info() is used
|
|
|
|
|
to free vkd3d_shader_scan_combined_resource_sampler_info
|
|
|
|
|
structures.
|
|
|
|
|
|
|
|
|
|
### libvkd3d-utils
|
|
|
|
|
|
|
|
|
|
- Passing the D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY flag to
|
|
|
|
|
D3DCompile() and D3DCompile2() will enable mapping shader model 1-3
|
|
|
|
|
semantic names to their shader model 4+ system value equivalents.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- D3DGetBlobPart() is used to retrieve specific parts of DXBC blobs.
|
|
|
|
|
- D3DGetDebugInfo() is used to retrieve debug information from DXBC blobs.
|
|
|
|
|
- D3DGetInputAndOutputSignatureBlob() is used to retrieve input and output
|
|
|
|
|
signatures from DXBC blobs.
|
|
|
|
|
- D3DGetInputSignatureBlob() is used to retrieve input signatures from
|
|
|
|
|
DXBC blobs.
|
|
|
|
|
- D3DGetOutputSignatureBlob() is used to retrieve output signatures from
|
|
|
|
|
DXBC blobs.
|
|
|
|
|
- D3DStripShader() is used to remove specific parts from DXBC blobs.
|
|
|
|
|
|
|
|
|
|
### vkd3d-compiler
|
|
|
|
|
|
|
|
|
|
- The ‘--fragment-coordinate-origin’ option can be used to specify the
|
|
|
|
|
origin of fragment coordinates for SPIR-V targets.
|
|
|
|
|
|
|
|
|
|
- The ‘--semantic-compat-map’ option can be used to specify that shader
|
|
|
|
|
model 1-3 semantic names should be mapped to their shader model 4+ system
|
|
|
|
|
value equivalents when compiling HLSL sources.
|
|
|
|
|
|
|
|
|
|
### vkd3d-dxbc
|
|
|
|
|
|
|
|
|
|
- The ‘--list’ and ‘--list-data’ options now also output the offsets of
|
|
|
|
|
sections inside the input data.
|
|
|
|
|
|
|
|
|
|
### build
|
|
|
|
|
|
|
|
|
|
- The minimum required version of Vulkan-Headers for this release is version
|
|
|
|
|
1.2.148.
|
|
|
|
|
|
|
|
|
|
- When available, the libEGL and libOpenGL libraries are used to run the
|
|
|
|
|
vkd3d tests in additional configurations. These libraries are not used by
|
|
|
|
|
vkd3d itself.
|
|
|
|
|
|
|
|
|
|
- The SONAME_LIBDXCOMPILER configure variable can be used specify the
|
|
|
|
|
shared object name of the dxcompiler library. When available, it's used to
|
|
|
|
|
run the vkd3d tests in additional configurations. The dxcompiler library
|
|
|
|
|
is not used by vkd3d itself.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.9 (21 Sep 2023)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- Copying between depth/stencil and colour formats in
|
|
|
|
|
ID3D12GraphicsCommandList::CopyResource() is supported.
|
|
|
|
|
- The ID3D12Fence1 interface is supported.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- vkd3d_shader_scan() supports retrieving descriptor information for ‘d3dbc’
|
|
|
|
|
shaders. This is one of the requirements for eventual SPIR-V generation from
|
|
|
|
|
‘d3dbc’ sources.
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Support for the following intrinsic functions:
|
|
|
|
|
- clip()
|
|
|
|
|
- ddx_coarse() and ddy_coarse()
|
|
|
|
|
- ddx_fine() and ddy_fine()
|
|
|
|
|
- tex1D(), tex2D(), texCUBE(), and tex3D()
|
|
|
|
|
- Constant folding support for more expression types. In particular:
|
|
|
|
|
- comparison operators
|
|
|
|
|
- floating-point min() and max()
|
|
|
|
|
- logical ‘and’ and ‘or’
|
|
|
|
|
- dot products
|
|
|
|
|
- square roots
|
|
|
|
|
- logarithms
|
|
|
|
|
- Support for multi-sample texture object declarations without explicit
|
|
|
|
|
sample counts in shader model 4.1 and later shaders.
|
|
|
|
|
- Support for using constant expressions as sample counts in multi-sample
|
|
|
|
|
texture object declarations.
|
|
|
|
|
- Support for variable initialisers using variables declared earlier in the
|
|
|
|
|
same declaration list. E.g., ‘float a = 1, b = a, c = b + 1;’.
|
|
|
|
|
- The GetDimensions() texture object method is implemented.
|
|
|
|
|
- Matrix swizzles are implemented.
|
|
|
|
|
- Parser support for if-statement attributes like ‘[branch]’ and
|
|
|
|
|
‘[flatten]’.
|
|
|
|
|
- Support for the ‘inline’ function modifier.
|
|
|
|
|
|
|
|
|
|
- Previously, vkd3d_shader_compile() would in some cases return VKD3D_OK
|
|
|
|
|
despite compilation failing when targeting legacy Direct3D bytecode. These
|
|
|
|
|
cases have been fixed.
|
|
|
|
|
|
|
|
|
|
- Various HLSL preprocessor fixes for edge cases related to stringification.
|
|
|
|
|
|
|
|
|
|
- SPIR-V target support for the ‘linear noperspective centroid’ input
|
|
|
|
|
interpolation mode.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- The vkd3d_shader_scan_signature_info structure extends the
|
|
|
|
|
vkd3d_shader_compile_info structure, and can be used to retrieve
|
|
|
|
|
descriptions of ‘dxbc-tpf’ and ‘d3dbc’ shader inputs and outputs.
|
|
|
|
|
- vkd3d_shader_free_scan_signature_info() is used to free
|
|
|
|
|
vkd3d_shader_scan_signature_info structures.
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ORDER compile option can be
|
|
|
|
|
used to specify the default matrix packing order for HLSL sources.
|
|
|
|
|
- The vkd3d_shader_varying_map_info structure extends the
|
|
|
|
|
vkd3d_shader_compile_info structure, and can be used to specify a mapping
|
|
|
|
|
between the outputs of a shader stage and the inputs of the next shader
|
|
|
|
|
stage.
|
|
|
|
|
- vkd3d_shader_build_varying_map() is used to build a mapping between the
|
|
|
|
|
outputs of a shader stage and the inputs of the next shader stage.
|
|
|
|
|
- The VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_RAW_BUFFER flag returned as part of
|
|
|
|
|
the vkd3d_shader_descriptor_info structure indicates the descriptor refers
|
|
|
|
|
to a byte-addressed (‘raw’) buffer resource.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### vkd3d-compiler
|
|
|
|
|
|
|
|
|
|
- The ‘--matrix-storage-order’ option can used to specify the default matrix
|
|
|
|
|
storage order for HLSL sources.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### vkd3d-dxbc
|
|
|
|
|
|
|
|
|
|
- vkd3d-dxbc is a new utility that can be used to inspect the contents of DXBC
|
|
|
|
|
blobs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.8 (22 Jun 2023)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- Performance improvements have been made to the code that handles descriptor
|
|
|
|
|
updates. In some applications the improvement can be quite significant.
|
|
|
|
|
|
|
|
|
|
- Host-visible descriptor heaps are persistently mapped on creation. Some
|
|
|
|
|
applications access resource data from the CPU after calling Unmap(), and
|
|
|
|
|
that's supposed to work in practice.
|
|
|
|
|
|
|
|
|
|
- 1-dimensional texture unordered-access views and shader resource views are
|
|
|
|
|
implemented.
|
|
|
|
|
|
|
|
|
|
- Shader resource view, unordered access view, and constant buffer view root
|
|
|
|
|
descriptors with NULL GPU addresses are supported.
|
|
|
|
|
|
|
|
|
|
- Direct3D 12 descriptor heap destruction is delayed until all contained
|
|
|
|
|
resources are destroyed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Support for the ternary conditional operator "?:".
|
|
|
|
|
- Support for "discard" statements.
|
|
|
|
|
- Support for the "packoffset" keyword.
|
|
|
|
|
- Support for semantics on array types.
|
|
|
|
|
- Support for RWBuffer loads and stores.
|
|
|
|
|
- Register allocation for arrays and structures of resources and samplers
|
|
|
|
|
is implemented.
|
|
|
|
|
- Support for the SV_IsFrontFace pixel shader system-value semantics.
|
|
|
|
|
- Support for using constant expressions as array sizes and indices.
|
|
|
|
|
- Support for dynamic selection of vector components.
|
|
|
|
|
- Support for the following intrinsic functions:
|
|
|
|
|
- D3DCOLORtoUBYTE4()
|
|
|
|
|
- any()
|
|
|
|
|
- asfloat()
|
|
|
|
|
- ddx() and ddy()
|
|
|
|
|
- fmod()
|
|
|
|
|
- log(), log2(), and log10()
|
|
|
|
|
- sign()
|
|
|
|
|
- trunc()
|
|
|
|
|
- The SampleBias(), SampleCmp(), SampleCmpLevelZero(), and SampleGrad()
|
|
|
|
|
texture object methods are implemented.
|
|
|
|
|
- Support for the case-insensitive variants of the "vector" and "matrix"
|
|
|
|
|
data types.
|
|
|
|
|
- Parser support for the "unroll" loop attribute. A warning is output for
|
|
|
|
|
"unroll" without iteration count, and an error is output when an iteration
|
|
|
|
|
count is specified. Actual unrolling is not implemented yet.
|
|
|
|
|
- Parser support for RWStructuredBuffer resources.
|
|
|
|
|
- Parser support for SamplerComparisonState objects. Note that outputting
|
|
|
|
|
compiled effects is not supported yet, but parsing these allows shaders
|
|
|
|
|
containing SamplerComparisonState state objects to be compiled.
|
|
|
|
|
|
|
|
|
|
- More improvements to HLSL support for the Direct3D shader model 1/2/3
|
|
|
|
|
profiles.
|
|
|
|
|
|
|
|
|
|
- The section alignment of DXBC blobs produced by
|
|
|
|
|
vkd3d_shader_serialize_dxbc() matches those produced by d3dcompiler more
|
|
|
|
|
closely.
|
|
|
|
|
|
|
|
|
|
- The "main" function for shaders produced by the SPIR-V target is always
|
|
|
|
|
terminated, even when the source was a TPF shader without explicit "ret"
|
|
|
|
|
instruction.
|
|
|
|
|
|
|
|
|
|
- Relative addressing of shader input registers is supported by SPIR-V
|
|
|
|
|
targets.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.7 (23 Mar 2023)
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Support for calling user-defined functions.
|
|
|
|
|
- Support for array parameters to user-defined functions.
|
|
|
|
|
- Much improved support for the Direct3D shader model 1/2/3 profiles.
|
|
|
|
|
- Support for the SV_DispatchThreadID, SV_GroupID, and SV_GroupThreadID
|
|
|
|
|
compute shader system-value semantics.
|
|
|
|
|
- Support for the optional "offset" parameter of the texture object Load()
|
|
|
|
|
method.
|
|
|
|
|
- Support for the all() intrinsic function.
|
|
|
|
|
- Support for the distance() intrinsic function.
|
|
|
|
|
- Support for the exp() and exp2() intrinsic functions.
|
|
|
|
|
- Support for the frac() intrinsic function.
|
|
|
|
|
- Support for the lit() intrinsic function.
|
|
|
|
|
- Support for the reflect() intrinsic function.
|
|
|
|
|
- Support for the sin() and cos() intrinsic functions.
|
|
|
|
|
- Support for the smoothstep() intrinsic function.
|
|
|
|
|
- Support for the sqrt() and rsqrt() intrinsic functions.
|
|
|
|
|
- Support for the step() intrinsic function.
|
|
|
|
|
- Support for the transpose() intrinsic function.
|
|
|
|
|
- Support for the case-insensitive variants of the "float" and "dword" data
|
|
|
|
|
types.
|
|
|
|
|
- Partial support for minimum precision data types like "min16float". These
|
|
|
|
|
are currently interpreted as their regular counterparts.
|
|
|
|
|
- Improved constant propagation support, in particular to constant
|
|
|
|
|
propagation through swizzles.
|
|
|
|
|
|
|
|
|
|
- HLSL static variables are now properly zero-initialised.
|
|
|
|
|
|
|
|
|
|
- The Direct3D shader model 4 and 5 disassembler outputs sample counts for
|
|
|
|
|
multi-sampled resource declarations.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- vkd3d_shader_parse_dxbc() provides support for parsing DXBC blobs.
|
|
|
|
|
- vkd3d_shader_serialize_dxbc() provides support for serialising DXBC blobs.
|
|
|
|
|
- vkd3d_shader_free_dxbc() is used to free vkd3d_shader_dxbc_desc
|
|
|
|
|
structures, as returned by vkd3d_shader_parse_dxbc().
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE compile option
|
|
|
|
|
can be used to specify whether SPIR-V shaders targeting Vulkan
|
|
|
|
|
environments should write point sizes for geometry and tessellation
|
|
|
|
|
shaders. If left unspecified, point sizes will be written.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.6 (7 Dec 2022)
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Initial support for compute shaders.
|
|
|
|
|
- Improved support for initialisation and assignment of compound objects
|
|
|
|
|
like structures and arrays, including casts and implicit conversions.
|
|
|
|
|
- Support for loads and stores of texture resource unordered-access views.
|
|
|
|
|
- Support for function attributes. In particular, the required "numthreads"
|
|
|
|
|
attribute for compute shader entry points is now supported.
|
|
|
|
|
- Support for the asuint() intrinsic function.
|
|
|
|
|
- Support for the length() intrinsic function.
|
|
|
|
|
- Support for the normalize() intrinsic function.
|
|
|
|
|
- Support for integer division and modulus.
|
|
|
|
|
- Support for taking the absolute value of integers.
|
|
|
|
|
- Support for floating-point modulus.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- The VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_ATOMICS descriptor info flag is
|
|
|
|
|
used to indicate that atomic operations are used on unordered-access view
|
|
|
|
|
descriptors.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-common
|
|
|
|
|
|
|
|
|
|
- vkd3d debug output is prefixed with "vkd3d:" in order to make it easier to
|
|
|
|
|
distinguish from output produced by applications or other libraries.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### demos
|
|
|
|
|
|
|
|
|
|
- The demos now use libvkd3d-shader to compile HLSL shaders at run-time.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.5 (22 Sep 2022)
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Improved support for HLSL object types (like e.g. ‘Texture2D’) inside
|
|
|
|
|
structures and arrays.
|
|
|
|
|
- Implicitly sized array initialisers.
|
|
|
|
|
- Support for the dot() intrinsic function.
|
|
|
|
|
- Support for the ldexp() intrinsic function.
|
|
|
|
|
- Support for the lerp() intrinsic function.
|
|
|
|
|
- Support for the logical ‘and’, ‘or’, and ‘not’ operators in shader model 4
|
|
|
|
|
and 5 targets.
|
|
|
|
|
- Support for casts from ‘bool’ types in shader model 4 and 5 targets.
|
|
|
|
|
- Constant folding for integer bitwise operations.
|
|
|
|
|
- Constant folding for integer min() and max().
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV compile option can be used to
|
|
|
|
|
specify the SPIR-V format to use for typed unordered access view loads.
|
|
|
|
|
When set to ‘Unknown’, and the ‘shaderStorageImageReadWithoutFormat’
|
|
|
|
|
feature is enabled in the target environment, this allows typed loads from
|
|
|
|
|
multicomponent format unordered access views. If left unspecified, a R32
|
|
|
|
|
format will be used, like in previous versions of libvkd3d-shader.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.4 (22 Jun 2022)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- A new descriptor heap implementation using the VK_EXT_descriptor_indexing
|
|
|
|
|
extension. In particular, the new implementation is more efficient when
|
|
|
|
|
large descriptor heaps are used by multiple command lists. The new
|
|
|
|
|
‘virtual_heaps’ configuration option can be used to select the original
|
|
|
|
|
implementation even when the VK_EXT_descriptor_indexing extension is
|
|
|
|
|
available.
|
|
|
|
|
|
|
|
|
|
- A new fence implementation using the VK_KHR_timeline_semaphore extension.
|
|
|
|
|
The new implementation addresses a number of edge cases the original
|
|
|
|
|
implementation was unable to, as well as being somewhat more efficient.
|
|
|
|
|
|
|
|
|
|
- When the VK_EXT_robustness2 extension is available, it is used to implement
|
|
|
|
|
null views. This more accurately matches Direct3D 12 behaviour. For example,
|
|
|
|
|
all reads from such a null view return zeroes, while that isn't necessarily
|
|
|
|
|
the case for out-of-bounds reads with the original implementation.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- vkd3d_set_log_callback() allows writing log output via a custom callback.
|
|
|
|
|
This can be used to integrate vkd3d's log output with other logging
|
|
|
|
|
systems.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- New features for the HLSL source type:
|
|
|
|
|
- Support for integer arithmetic, bitwise and shift operations.
|
|
|
|
|
- Support for matrix and vector subscripting.
|
|
|
|
|
- Support for the mul() intrinsic function.
|
|
|
|
|
- Support for matrix copying, casting, and entry-wise operations.
|
|
|
|
|
- Support for complex initialisers.
|
|
|
|
|
- Support for the ‘nointerpolation’ modifier. This modifier is applied by
|
|
|
|
|
default to integer variables.
|
|
|
|
|
- Support for the SV_VertexID semantic.
|
|
|
|
|
- Support for matrix-typed varyings.
|
|
|
|
|
- Constant folding for a number of operators.
|
|
|
|
|
- Copy propagation across branches and loops. This allows use of non-numeric
|
|
|
|
|
variables anywhere in a program, as well as more optimised code for
|
|
|
|
|
accessing numeric variables within branches and loops.
|
|
|
|
|
|
|
|
|
|
- The disassembler supports the shader model 5 ‘msad’ instruction.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- vkd3d_shader_set_log_callback() allows writing log output via a custom
|
|
|
|
|
callback.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-utils
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- vkd3d_utils_set_log_callback() allows writing log output via a custom
|
|
|
|
|
callback.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### build
|
|
|
|
|
|
|
|
|
|
- The minimum required version of Vulkan-Headers and SPIRV-Headers for this
|
|
|
|
|
release is version 1.2.139.
|
|
|
|
|
|
|
|
|
|
- The SONAME_LIBVULKAN configure variable can be used to specify the shared
|
|
|
|
|
object name of the Vulkan library. Because vkd3d loads the Vulkan library
|
|
|
|
|
dynamically, specifying this removes the need for a Vulkan import library at
|
|
|
|
|
build time.
|
|
|
|
|
|
|
|
|
|
- The ‘crosstests’ target no longer builds Win32/PE demos or tests when these
|
|
|
|
|
were not enabled at configure time.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.3 (2 Mar 2022)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- Newly implemented Direct3D 12 features:
|
|
|
|
|
- Root signature support for unbounded descriptor tables.
|
|
|
|
|
- Unordered-access view counters in pixel shaders. These were previously
|
|
|
|
|
only supported in compute shaders.
|
|
|
|
|
- Output merger logical operations.
|
|
|
|
|
- Retrieving CPU/GPU timestamp calibration values. This requires support for
|
|
|
|
|
the VK_EXT_calibrated_timestamps extension.
|
|
|
|
|
- The ‘mirror_once’ texture addressing mode. This requires support for the
|
|
|
|
|
VK_KHR_sampler_mirror_clamp_to_edge extension.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- The vkd3d_host_time_domain_info structure extends the
|
|
|
|
|
vkd3d_instance_create_info structure, and can be used to specify how to
|
|
|
|
|
convert between timestamps and tick counts. If left unspecified, a tick
|
|
|
|
|
is assumed to take 100 nanoseconds.
|
|
|
|
|
|
|
|
|
|
- Various bug fixes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- New features:
|
|
|
|
|
- Initial support for HLSL compilation and preprocessing. This is an ongoing
|
|
|
|
|
effort; although support for many features is already implemented, support
|
|
|
|
|
for many more isn't yet.
|
|
|
|
|
- Support for disassembling Direct3D byte-code shaders to Direct3D assembly.
|
|
|
|
|
- Support for parsing the legacy Direct3D byte-code format used by Direct3D
|
|
|
|
|
shader model 1, 2, and 3 shaders. In the current vkd3d-shader release,
|
|
|
|
|
only Direct3D assembly is supported as a target for these; we intend to
|
|
|
|
|
support SPIR-V as a target in a future release.
|
|
|
|
|
|
|
|
|
|
- New features for the SPIR-V target:
|
|
|
|
|
- Support for various aspects of Direct3D shader model 5.1 descriptor
|
|
|
|
|
arrays, including unbounded descriptor arrays, UAV counter arrays, dynamic
|
|
|
|
|
indexing of descriptor arrays, and non-uniform indexing of descriptor
|
|
|
|
|
arrays. With the exception of some special cases, this requires support
|
|
|
|
|
for the SPV_EXT_descriptor_indexing extension in the target environment.
|
|
|
|
|
- Support for double precision floating-point operations.
|
|
|
|
|
- Support for indirect addressing of tessellation control shader inputs.
|
|
|
|
|
- Stencil export. I.e., writing stencil values from shaders. This requires
|
|
|
|
|
support for the SPV_EXT_shader_stencil_export extension in the target
|
|
|
|
|
environment.
|
|
|
|
|
- Support for the Direct3D shader model 4+ ‘precise’ modifier.
|
|
|
|
|
- Support for Direct3D shader model 4+ global resource memory barriers.
|
|
|
|
|
|
|
|
|
|
New interfaces:
|
|
|
|
|
- vkd3d_shader_preprocess() provides support for preprocessing shaders.
|
|
|
|
|
- The vkd3d_shader_preprocess_info structure extends the
|
|
|
|
|
vkd3d_shader_compile_info structure, and can be used to specify
|
|
|
|
|
preprocessing parameters like preprocessor macro definitions.
|
|
|
|
|
- The vkd3d_shader_hlsl_source_info structure extends the
|
|
|
|
|
vkd3d_shader_compile_info structure, and can be used to specify HLSL
|
|
|
|
|
compilation parameters like the target profile and entry point.
|
|
|
|
|
- The vkd3d_shader_descriptor_offset_info structure extends the
|
|
|
|
|
vkd3d_shader_interface_info structure, and can be used to specify offsets
|
|
|
|
|
into descriptor arrays referenced by shader interface bindings. This
|
|
|
|
|
allows mapping multiple descriptor arrays in a shader to a single binding
|
|
|
|
|
point in the target environment, and helps with mapping between the
|
|
|
|
|
Direct3D 12 and Vulkan binding models.
|
|
|
|
|
- The VKD3D_SHADER_COMPILE_OPTION_API_VERSION compile option can
|
|
|
|
|
be used to specify the version of the libvkd3d-shader API the
|
|
|
|
|
application is targetting. If left unspecified,
|
|
|
|
|
VKD3D_SHADER_API_VERSION_1_2 will be used.
|
|
|
|
|
|
|
|
|
|
- Various shader translation fixes, for tessellation shaders in particular.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### vkd3d-compiler
|
|
|
|
|
|
|
|
|
|
- New source and target types:
|
|
|
|
|
- The ‘hlsl’ source type specifies High Level Shader Language source code.
|
|
|
|
|
- The ‘d3d-asm’ target type specifies Direct3D assembly shaders.
|
|
|
|
|
- The ‘d3dbc’ format specifies legacy Direct3D byte-code, which is used for
|
|
|
|
|
Direct3D shader model 1, 2, and 3 shaders.
|
|
|
|
|
- The existing ‘dxbc-tpf’ format can now also be used as a target format.
|
|
|
|
|
|
|
|
|
|
- New command line options:
|
|
|
|
|
- ‘-E’ can be used to specify the input should only be preprocessed.
|
|
|
|
|
- ‘-e’/‘--entry’ can be used to specify the entry point for HLSL and/or
|
|
|
|
|
SPIR-V shaders.
|
|
|
|
|
- ‘-p’/‘--profile’ can be used to specify the target profile for HLSL
|
|
|
|
|
shaders.
|
|
|
|
|
|
|
|
|
|
- When no source type is explicitly specified, vkd3d-compiler will attempt to
|
|
|
|
|
determine the source type from the provided input. Note that this is
|
|
|
|
|
intended as a convenience for interactive usage only, and the heuristics
|
|
|
|
|
used are subject to future change. Non-interactive usage of vkd3d-compiler,
|
|
|
|
|
for example in build scripts, should always explicitly specify source and
|
|
|
|
|
target types.
|
|
|
|
|
|
|
|
|
|
- When no target type is explicitly specified, a default will be chosen based
|
|
|
|
|
on the source type. Like the earlier mentioned source type detection, this
|
|
|
|
|
is intended for interactive usage only.
|
|
|
|
|
|
|
|
|
|
- vkd3d-compiler will default to colour output if it can determine that the
|
|
|
|
|
output is a colour-capable teleprinter.
|
|
|
|
|
|
|
|
|
|
- New environment variables:
|
|
|
|
|
- NO_COLOUR/NO_COLOR can be used to disable default colour output.
|
|
|
|
|
See the README for more detailed descriptions and how to use these.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-utils
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- D3DCreateBlob() provides support for creating ID3DBlob objects.
|
|
|
|
|
- D3DPreprocess() provides support for preprocessing HLSL source code.
|
|
|
|
|
- D3DCompile() and D3DCompile2() provide support for compiling HLSL source
|
|
|
|
|
code.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### build
|
|
|
|
|
|
|
|
|
|
- The ‘gears’ and ‘triangle’ demo applications are installed as ‘vkd3d-gears’
|
|
|
|
|
and ‘vkd3d-triangle’. These were originally intended more as documentation
|
|
|
|
|
than as end-user executables, but there's some value in using them for
|
|
|
|
|
diagnostic purposes, much like e.g. ‘glxgears’.
|
|
|
|
|
|
|
|
|
|
- The VULKAN_LIBS configure variable is used when detecting the Vulkan
|
|
|
|
|
library.
|
|
|
|
|
|
|
|
|
|
- Builds for the Microsoft Windows target platform no longer require support
|
|
|
|
|
for POSIX threads. Windows synchronisation primitives are used instead.
|
|
|
|
|
|
|
|
|
|
- If ncurses is available, it will be use by vkd3d-compiler to determine the
|
|
|
|
|
capabilities of the connected teleprinter, if any.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.2 (22 Sep 2020)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- Newly implemented Direct3D 12 features:
|
|
|
|
|
- Multi-sampling.
|
|
|
|
|
- Reserved resources.
|
|
|
|
|
- Instance data step rates. This requires the
|
|
|
|
|
VK_EXT_vertex_attribute_divisor extension.
|
|
|
|
|
- ‘Private data’ APIs for all interfaces.
|
|
|
|
|
- Shader-resource view component mappings.
|
|
|
|
|
- Indirect indexed draws.
|
|
|
|
|
- Indirect draws with a count buffer. This requires the
|
|
|
|
|
VK_KHR_draw_indirect_count extension.
|
|
|
|
|
- Stream output and stream output queries. This requires the
|
|
|
|
|
VK_EXT_transform_feedback extension.
|
|
|
|
|
- Predicated/conditional rendering.
|
|
|
|
|
- Primitive restart.
|
|
|
|
|
- Depth rendering without a pixel shader.
|
|
|
|
|
- Depth clipping. This requires the VK_EXT_depth_clip_enable extension.
|
|
|
|
|
- Rasteriser discard.
|
|
|
|
|
- Dual-source blending.
|
|
|
|
|
- Mapping placed resources.
|
|
|
|
|
- The ReadFromSubresource() and WriteToSubresource() ID3D12Resource methods.
|
|
|
|
|
- Simultaneous access to resources from multiple queues.
|
|
|
|
|
- Null-views. I.e., views without an underlying resource.
|
|
|
|
|
- Several more feature support queries.
|
|
|
|
|
|
|
|
|
|
- New interfaces:
|
|
|
|
|
- vkd3d_serialize_versioned_root_signature() and
|
|
|
|
|
vkd3d_create_versioned_root_signature_deserializer() provide support for
|
|
|
|
|
versioned root signatures.
|
|
|
|
|
- The vkd3d_application_info structure extends the
|
|
|
|
|
vkd3d_instance_create_info structure, and can be used to pass information
|
|
|
|
|
about the application to libvkd3d. It is analogous to the
|
|
|
|
|
VkApplicationInfo structure in Vulkan. Its ‘api_version’ field should be
|
|
|
|
|
set to the version of the libvkd3d API that the application targets.
|
|
|
|
|
- The vkd3d_optional_device_extensions_info structure extends the
|
|
|
|
|
vkd3d_device_create_info structure, and can be used to pass a list of
|
|
|
|
|
device extensions to enable only when available to libvkd3d. It is
|
|
|
|
|
analogous to the vkd3d_optional_instance_extensions_info structure for
|
|
|
|
|
instance extensions.
|
|
|
|
|
|
|
|
|
|
- New environment variables:
|
|
|
|
|
- VKD3D_CONFIG can be used to set options that change the behaviour of
|
|
|
|
|
libvkd3d.
|
|
|
|
|
- VKD3D_TEST_BUG can be used to disable bug_if() conditions in the test
|
|
|
|
|
suite.
|
|
|
|
|
- VKD3D_TEST_FILTER can be used to control which tests are run.
|
|
|
|
|
- VKD3D_VULKAN_DEVICE can be used to override the Vulkan physical device
|
|
|
|
|
used by vkd3d.
|
|
|
|
|
See the README for more detailed descriptions and how to use these.
|
|
|
|
|
|
|
|
|
|
- When the VK_KHR_dedicated_allocation extension is available, dedicated
|
|
|
|
|
allocations may be used for committed resources.
|
|
|
|
|
|
|
|
|
|
- When the VK_KHR_image_format_list extension is available, it will be used to
|
|
|
|
|
inform the driver about the view formats that a particular mutable Vulkan
|
|
|
|
|
image can be used with. This improves performance on some Vulkan
|
|
|
|
|
implementations.
|
|
|
|
|
|
|
|
|
|
- When the VK_EXT_debug_marker extension is available, object names set with
|
|
|
|
|
the ID3D12Object SetName() method will be propagated to the underlying
|
|
|
|
|
Vulkan objects.
|
|
|
|
|
|
|
|
|
|
- Unordered-access view clears are supported on more formats. Previously these
|
|
|
|
|
were limited to integer formats for texture resources, and single component
|
|
|
|
|
integer formats for buffer resources.
|
|
|
|
|
|
|
|
|
|
- When the D24_UNORM_S8_UINT format is not supported by the Vulkan
|
|
|
|
|
implementation, the D32_SFLOAT_S8_UINT format will be used instead to
|
|
|
|
|
implement the D24_UNORM_S8_UINT and related DXGI formats. This is required
|
|
|
|
|
because the DXGI D24_UNORM_S8_UINT format is mandatory, while the Vulkan
|
|
|
|
|
D24_UNORM_S8_UINT format is optional.
|
|
|
|
|
|
|
|
|
|
- Various bug fixes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- libvkd3d-shader is now available as a public instead of an internal library.
|
|
|
|
|
|
|
|
|
|
- New features:
|
|
|
|
|
- Tessellation shaders.
|
|
|
|
|
- Root signature version 1.1 serialisation, deserialisation, and conversion.
|
|
|
|
|
- Multi-sample masks.
|
|
|
|
|
- Per-sample shading.
|
|
|
|
|
- Early depth/stencil test.
|
|
|
|
|
- Conservative depth output.
|
|
|
|
|
- Dual-source blending.
|
|
|
|
|
- Stream output.
|
|
|
|
|
- Viewport arrays.
|
|
|
|
|
|
|
|
|
|
- Support for OpenGL SPIR-V target environments. This allows SPIR-V produced
|
|
|
|
|
by libvkd3d-shader to be used with GL_ARB_gl_spirv. This includes support
|
|
|
|
|
for OpenGL atomic counters and combined samplers.
|
|
|
|
|
|
|
|
|
|
- Preliminary support for shader model 5.1 shaders. This is still a work in
|
|
|
|
|
progress. Notably, support for resource arrays is not yet implemented.
|
|
|
|
|
|
|
|
|
|
- When the SPV_EXT_demote_to_helper_invocation is available, it will be used
|
|
|
|
|
to implement the ‘discard’ shader instruction instead of using SpvOpKill. In
|
|
|
|
|
particular, this ensures the ‘deriv_rtx’ and ‘deriv_rty’ instruction return
|
|
|
|
|
accurate results after a (conditional) ‘discard’ instruction.
|
|
|
|
|
|
|
|
|
|
- Support for using SPIR-V specialisation constants for shader parameters.
|
|
|
|
|
|
|
|
|
|
- Support for more shader instructions:
|
|
|
|
|
- bufinfo,
|
|
|
|
|
- eval_centroid,
|
|
|
|
|
- eval_sample_index,
|
|
|
|
|
- ld2ms,
|
|
|
|
|
- sample_b,
|
|
|
|
|
- sample_d,
|
|
|
|
|
- sample_info,
|
|
|
|
|
- samplepos.
|
|
|
|
|
|
|
|
|
|
- When built against SPIRV-Tools, libvkd3d-shader can produce SPIR-V shaders
|
|
|
|
|
in text form.
|
|
|
|
|
|
|
|
|
|
- libvkd3d-shader now has its own environment variable (VKD3D_SHADER_DEBUG) to
|
|
|
|
|
control debug output.
|
|
|
|
|
|
|
|
|
|
- Various shader translation fixes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### vkd3d-compiler
|
|
|
|
|
|
|
|
|
|
- When supported by libvkd3d-shader, text form SPIR-V is available as a target
|
|
|
|
|
format, in addition to the existing binary form SPIR-V target format.
|
|
|
|
|
|
|
|
|
|
- Input from standard input, and output to standard output is supported.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-utils
|
|
|
|
|
|
|
|
|
|
- To specify the libvkd3d API version to use when creating vkd3d instances,
|
|
|
|
|
define VKD3D_UTILS_API_VERSION to the desired version before including
|
|
|
|
|
vkd3d_utils.h. If VKD3D_UTILS_API_VERSION is not explicitly defined,
|
|
|
|
|
VKD3D_API_VERSION_1_0 will be used.
|
|
|
|
|
|
|
|
|
|
- Support for versioned root signatures is provided by the
|
|
|
|
|
D3D12SerializeVersionedRootSignature() and
|
|
|
|
|
D3D12CreateVersionedRootSignatureDeserializer() entry points.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### build
|
|
|
|
|
|
|
|
|
|
- The minimum required version of Vulkan-Headers and SPIRV-Headers for this
|
|
|
|
|
release is version 1.1.113.
|
|
|
|
|
|
|
|
|
|
- The minimum required version of widl for this release is version 3.20.
|
|
|
|
|
|
|
|
|
|
- If doxygen is available, it will be used to build API documentation. By
|
|
|
|
|
default, documentation will be generated in HTML and PDF formats.
|
|
|
|
|
|
|
|
|
|
- If debug logs are not required or desired, defining VKD3D_NO_TRACE_MESSAGES
|
|
|
|
|
and VKD3D_NO_DEBUG_MESSAGES will prevent them from being included in the
|
|
|
|
|
build. For example, a release build may want to configure with
|
|
|
|
|
‘CPPFLAGS="-DNDEBUG -DVKD3D_NO_TRACE_MESSAGES -DVKD3D_NO_DEBUG_MESSAGES"’.
|
|
|
|
|
|
|
|
|
|
- Microsoft Windows is now a supported target platform. To create a build for
|
|
|
|
|
Windows, either cross-compile by configuring with an appropriate --host
|
|
|
|
|
option like for example ‘--host=x86_64-w64-mingw32’, or build on Windows
|
|
|
|
|
itself using an environment like MSYS2 or Cygwin.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's new in vkd3d 1.1 (5 Oct 2018)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- Initial support for memory heaps and placed resources.
|
|
|
|
|
|
|
|
|
|
- Improved support for resource views.
|
|
|
|
|
|
|
|
|
|
- ClearUnorderedAccessViewUint() is implemented for textures.
|
|
|
|
|
|
|
|
|
|
- Blend factor is implemented.
|
|
|
|
|
|
|
|
|
|
- Performance improvements.
|
|
|
|
|
|
|
|
|
|
- A new interface is available for enabling additional Vulkan instance
|
|
|
|
|
extensions.
|
|
|
|
|
|
|
|
|
|
- A new public function is available for mapping VkFormats to DXGI_FORMATs.
|
|
|
|
|
|
|
|
|
|
- Support for more DXGI formats.
|
|
|
|
|
|
|
|
|
|
- Various bug fixes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- Support for geometry shaders.
|
|
|
|
|
|
|
|
|
|
- Pretty printing is implemented for shader code extracted from DXBC.
|
|
|
|
|
|
|
|
|
|
- Clip and cull distances are supported.
|
|
|
|
|
|
|
|
|
|
- Support for more shader instructions:
|
|
|
|
|
- round_ne,
|
|
|
|
|
- sincos,
|
|
|
|
|
- ineg,
|
|
|
|
|
- continue,
|
|
|
|
|
- continuec,
|
|
|
|
|
- gather4_po,
|
|
|
|
|
- gather4_po_c,
|
|
|
|
|
- gather4_c.
|
|
|
|
|
|
|
|
|
|
- Texel offsets are supported.
|
|
|
|
|
|
|
|
|
|
- Various shader translation fixes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-utils
|
|
|
|
|
|
|
|
|
|
- Vulkan WSI extensions are detected at runtime.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### build
|
|
|
|
|
|
|
|
|
|
- Demos are not built by default.
|
|
|
|
|
|
|
|
|
|
- libxcb is now an optional dependency required only for demos.
|
|
|
|
|
|
|
|
|
|
- MoltenVK is supported.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# What's included in vkd3d 1.0 (23 May 2018)
|
|
|
|
|
|
|
|
|
|
### libvkd3d
|
|
|
|
|
|
|
|
|
|
- libvkd3d is the main component of the vkd3d project. It's a 3D graphics
|
|
|
|
|
library built on top of Vulkan with an API very similar to Direct3D 12.
|
|
|
|
|
|
|
|
|
|
- A significant number of Direct3D 12 features are implemented, including:
|
|
|
|
|
- Graphics and compute pipelines.
|
|
|
|
|
- Command lists, command allocators and command queues.
|
|
|
|
|
- Descriptors and descriptor heaps.
|
|
|
|
|
- Root signatures.
|
|
|
|
|
- Constant buffer, shader resource, unordered access, render target and depth
|
|
|
|
|
stencil views.
|
|
|
|
|
- Samplers.
|
|
|
|
|
- Static samplers.
|
|
|
|
|
- Descriptors copying.
|
|
|
|
|
- Committed resources.
|
|
|
|
|
- Fences.
|
|
|
|
|
- Queries and query heaps.
|
|
|
|
|
- Resource barriers.
|
|
|
|
|
- Root constants.
|
|
|
|
|
- Basic support for indirect draws and dispatches.
|
|
|
|
|
- Basic support for command signatures.
|
|
|
|
|
- Various Clear*() methods.
|
|
|
|
|
- Various Copy*() methods.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-shader
|
|
|
|
|
|
|
|
|
|
- libvkd3d-shader is a library which translates shader model 4 and 5 bytecode
|
|
|
|
|
to SPIR-V. In this release, libvkd3d-shader is an internal library. Its API
|
|
|
|
|
isn't set in stone yet.
|
|
|
|
|
|
|
|
|
|
- Vertex, pixel and compute shaders are supported. Also, very simple geometry
|
|
|
|
|
shaders should be translated correctly. Issues are expected when trying to
|
|
|
|
|
translate tessellation shaders or more complex geometry shaders.
|
|
|
|
|
|
|
|
|
|
- A significant number of shader instructions are supported in this release,
|
|
|
|
|
including:
|
|
|
|
|
- Arithmetic instructions.
|
|
|
|
|
- Bit instructions.
|
|
|
|
|
- Comparison instructions.
|
|
|
|
|
- Control flow instructions.
|
|
|
|
|
- Sample, gather and load instructions.
|
|
|
|
|
- Atomic instructions.
|
|
|
|
|
- UAV instructions.
|
|
|
|
|
|
|
|
|
|
- Root signature serialization and deserialization is implemented.
|
|
|
|
|
|
|
|
|
|
- Shader model 4 and 5 bytecode parser is imported from wined3d.
|
|
|
|
|
|
|
|
|
|
- Shader model 5.1 is not supported yet.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### libvkd3d-utils
|
|
|
|
|
|
|
|
|
|
- libvkd3d-utils contains simple implementations of various functions which
|
|
|
|
|
might be useful for source ports of Direct3D 12 applications.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### demos
|
|
|
|
|
|
|
|
|
|
- A simple hello triangle Direct3D 12 demo.
|
|
|
|
|
- A Direct3D 12 port of glxgears.
|