The vkd3d team is proud to announce that release 1.15 of vkd3d, the Direct3D
to Vulkan translation library, is now available.

This release contains improvements that are listed in the release notes below.
The main highlights are:

  - Much more complete support for tessellation shaders in the HLSL compiler.
  - Improved function overload resolution in the HLSL compiler.
  - Miscellaneous bug fixes.

The source is available from the following location:

  <https://dl.winehq.org/vkd3d/source/vkd3d-1.15.tar.xz>

The current source can also be pulled directly from the git repository:

  <https://gitlab.winehq.org/wine/vkd3d.git>

Vkd3d is available thanks to the work of multiple people. See the file AUTHORS
for the complete list.

# What's new in vkd3d 1.15

### libvkd3d

  - New interfaces:
    - vkd3d_queue_signal_on_cpu() allows a Direct3D 12 fence to be signalled
      when all preceding work on a Direct3D 12 command queue has been submitted
      to the corresponding Vulkan queue.

### libvkd3d-shader

  - New features for the HLSL source type:
    - ‘InputPatch’ and ‘OutputPatch’ tessellation shader objects. This was the
      main feature required by most tessellation shaders that was still missing,
      and tessellation shaders should be considered generally usable now.
    - Unrolling of loops containing conditional jumps.
    - Improved function overload resolution. Previously the compiler was unable
      to decide between multiple function overloads with the same number of
      parameters.
    - The parser is able to continue parsing in a larger number of error cases.
      This allows more issues in the input to be reported during a single
      compilaton attempt.
    - The following intrinsic functions are supported:
      - GatherCmp()
      - GatherCmpAlpha(), GatherCmpBlue(), GatherCmpGreen(), and GatherCmpRed()
      - InterlockedAdd(), InterlockedAnd(), InterlockedCompareExchange(),
        InterlockedCompareStore(), InterlockedExchange(), InterlockedMax(),
        InterlockedMin(), InterlockedOr(), and InterlockedXor()
      - isinf()
    - Separate resource and sampler support for shader model 1-3 target
      profiles.
    - Casts on the left hand side of assignments.
    - Reassociation and redistribution of constants in binary expressions, to
      facilitate constant folding.
    - Packing of interstage I/O variables with the ‘SV_IsFrontFace’,
      ‘SV_PrimitiveID’, ‘SV_RenderTargetArrayIndex’, ‘SV_SampleIndex’, and
      ‘SV_ViewPortArrayIndex’ semantics matches d3dcompiler/fxc more closely.
    - Parser support for the ‘LineStream’, ‘PointStream’, and ‘TriangleStream’
      Stream-Output objects.

  - A number of instructions have been implemented for the experimental MSL
    target. Although more and more shaders are starting to work, support is
    still fairly limited. For example, shader resource views and unordered
    access views are still entirely unsupported.

  - Shader code generation for fixed-function fog. Like the existing shader code
    generation for other fixed-function features, this is mainly relevant for
    executing shader model 1-3 sources in modern target environments like
    Vulkan.

  - The ‘fx’ parser can parse binary effects containing inline shader blobs.

  - Internal validator support for validating I/O signatures, as well as I/O
    source and destination parameters. The validator is enabled by the
    ‘force_validation’ option, specified through the VKD3D_SHADER_CONFIG
    environment variable.

  - Internal validator support for validating the number of indices used with a
    register, as well as basic bounds checking for static indices.

  - New interfaces:
    - The vkd3d_shader_scan_hull_shader_tessellation_info structure extends the
      vkd3d_shader_compile_info structure, and can be used to retrieve the
      output primitive type and partitioning mode used by a hull shader. This
      information is particularly useful for specifying
      vkd3d_shader_spirv_domain_shader_target_info structures when targetting
      SPIR-V in OpenGL environments.
    - The VKD3D_SHADER_PARAMETER_NAME_FOG_FRAGMENT_MODE shader parameter
      specifies the kind of fog to generate in a fragment shader.
    - The VKD3D_SHADER_PARAMETER_NAME_FOG_COLOUR shader parameter
      specifies the fog colour.
    - The VKD3D_SHADER_PARAMETER_NAME_FOG_END shader parameter
      specifies the ‘end’ parameter used for linear fog generation.
    - The VKD3D_SHADER_PARAMETER_NAME_FOG_SCALE shader parameter
      specifies the ‘scale’ parameter used for fog generation.
    - The VKD3D_SHADER_PARAMETER_NAME_FOG_SOURCE shader parameter
      specifies the kind of fog coordinate to output from a pre-rasterisation
      shader.

### vkd3d-compiler

  - The new ‘dxbc-fx’ source type specifies an effect binary embedded in a DXBC
    container. This is a convenience feature;
    ‘vkd3d-compiler -x dxbc-fx blob.dxbc’ is equivalent to
    ‘vkd3d-dxbc -x t:FX10 blob.dxbc | vkd3d-compiler -x fx’.

### Changes since vkd3d 1.14:
```
Anna (navi) Figueiredo Gomes (6):
      vkd3d-shader/hlsl: Implement cast from bool to int for SM1.
      tests/hlsl: Add GatherCmp() tests.
      vkd3d-shader/hlsl: Implement the GatherCmp() methods.
      tests/shader_runner: Add a "mesa<23.3" tag.
      tests/hlsl: Add mixed argument size tests.
      vkd3d-shader/hlsl: Consider conversions across all parameters in function_compare().

Conor McCarthy (29):
      vkd3d: Store only a single vkd3d descriptor type in each Vulkan descriptor set.
      vkd3d: Introduce struct vkd3d_vk_descriptor_pool_array.
      vkd3d: Introduce vkd3d_vk_descriptor_pool_array_push_array().
      vkd3d: Introduce vkd3d_vk_descriptor_pool_array_push().
      vkd3d: Introduce vkd3d_vk_descriptor_pool_array_pop().
      vkd3d: Introduce vkd3d_vk_descriptor_pool_array_destroy_pools().
      vkd3d: Create separate descriptor pools for each vkd3d descriptor type.
      vkd3d: Create descriptor pools of geometrically increasing size.
      tests/hlsl: Add float64 wave op tests.
      tests/hlsl: Add uint64 wave op tests.
      tests/hlsl: Add int64 wave op tests.
      vkd3d-shader/dxil: Implement DX intrinsic EvalSampleIndex.
      vkd3d-shader/dxil: Implement DX intrinsic EvalCentroid.
      vkd3d: Return the correct depth/stencil plane format from GetCopyableFootprints().
      vkd3d: Return correctly aligned depth/stencil sizes from GetCopyableFootprints().
      vkd3d: Do not require the ALLOW_DEPTH_STENCIL flag for depth/stencil formats in GetCopyableFootprints().
      tests/hlsl: Add a test for SV_RenderTargetArrayIndex.
      vkd3d-shader/dxil: Handle SV_RenderTargetArrayIndex.
      tests/hlsl: Pass a profile string instead of a shader type to dxc_compiler_compile_shader().
      tests/hlsl: Add some arithmetic uint16 shader tests.
      tests/hlsl: Add more arithmetic uint16 tests.
      tests/hlsl: Add arithmetic int16 tests.
      tests/hlsl: Add arithmetic float16 tests.
      tests/hlsl: Add a numeric types 16-bit test.
      tests/hlsl: Add constant buffer 16-bit tests.
      tests/hlsl: Add GetDimensions() 16-bit tests.
      tests/hlsl: Add typed buffer UAV 16-bit tests.
      tests/hlsl: Add a raw buffer UAV 16-bit test.
      tests/hlsl: Add structured buffer UAV 16-bit tests.

Elizabeth Figura (65):
      vkd3d-shader/spirv: Handle SSA registers in spirv_compiler_get_register_info().
      vkd3d-shader/ir: Allow controlling fog through parameters.
      vkd3d-shader/ir: Add a couple of traces for signature remapping.
      vkd3d-shader/ir: Allow controlling the fog source through a parameter.
      vkd3d-shader/ir: Implement exponential fog.
      vkd3d-shader/hlsl: Do not abort when modifying a const expression.
      vkd3d-shader/hlsl: Do not abort parsing when invalid modifiers are used.
      vkd3d-shader/hlsl: Move the numeric type check to add_constructor().
      vkd3d-shader/hlsl: Return an error expression when a function is used as a variable.
      vkd3d-shader/hlsl: Translate invalid implicit-size arrays to an error type.
      vkd3d-shader/d3dbc: Omit unnecessary instruction maximum versions.
      vkd3d-shader/d3dbc: Mark some more instructions as version-limited.
      vkd3d-shader: Fix the disassembly names of IFC and BREAKC.
      vkd3d-shader: Correct the disassembly for POSITIONT.
      tests: Add a reflection test for shader model 4.0.
      vkd3d-shader/hlsl: Remove unused expr ops.
      vkd3d-shader/ir: Always initialise "*control_point_count" in vsir_signature_from_register_type().
      vkd3d-shader/hlsl: Document matrix swizzles.
      vkd3d-shader/hlsl: Use a structure for matrix swizzles.
      vkd3d-shader/hlsl: Use swizzle helpers in more places.
      vkd3d-shader/hlsl: Store swizzles in vsir format.
      tests/shader_runner: Use is_todo instead of separate shader states.
      tests/shader_runner: Use a separate variable for shader type.
      tests/shader_runner: Don't bother distinguishing directive substrings.
      vkd3d-shader/d3dbc: Use struct vkd3d_shader_dst_param instead of struct sm1_dst_register.
      vkd3d-shader/d3dbc: Use struct vkd3d_shader_src_param instead of struct sm1_src_register.
      vkd3d-shader/d3dbc: Use struct vkd3d_shader_instruction instead of struct sm1_instruction.
      tests/shader_runner: Record HLSL todo/fail state for each shader model.
      tests/shader_runner: Test HLSL compilation in a separate pass.
      tests/shader_runner: Test versions where the compilation result changes.
      tests: Use fail(sm<5) instead of [require] for uav-atomics.
      vkd3d-shader/spirv: Correctly implement DTOF.
      vkd3d-shader/spirv: Correctly implement DTOI.
      vkd3d-shader/spirv: Correctly implement DTOU.
      tests/d3d12: Make the dtof test a bit more interesting.
      vkd3d-shader: Explicitly translate between d3dbc and vsir register types.
      vkd3d-shader/d3dbc: Normalize to a single VKD3DSPR_CONST register set when reading.
      vkd3d-shader/d3d-asm: Define register names in a table.
      vkd3d-shader/ir: Separate VKD3DSPR_ADDR and VKD3DSPR_TEXTURE.
      vkd3d-shader/ir: Separate VKD3DSPR_OUTPUT and VKD3DSPR_TEXCRDOUT.
      vkd3d-shader/d3dbc: Introduce d3dbc_parse_register().
      vkd3d-shader/hlsl: Avoid some uses of the default case when switching over hlsl_base_type.
      vkd3d-shader/d3dbc: Do not access the type dimensions for non-numeric types.
      vkd3d-shader/hlsl: Move the "dimx" and "dimy" fields to the type-specific union.
      tests: Adjust angle-unit.shader_test to pass with 1.x.
      tests: Adjust arithmetic-float.shader_test to pass with 1.x.
      tests: Adjust arithmetic-float-uniform.shader_test to pass with 1.x.
      tests: Adjust arithmetic-int.shader_test to pass with 1.x.
      tests: Adjust array-parameters.shader_test to pass with 1.x.
      tests: Adjust array-size-expr.shader_test to pass with 1.x.
      tests: Adjust abs.shader_test to pass with 1.x.
      tests: Add another unrolling test.
      vkd3d-shader/hlsl: Implement broadcasts in constant folding.
      vkd3d-utils: Fix matrix packing precedence in D3DCompile2VKD3D().
      vkd3d-shader/hlsl: Use the casted value in exp().
      tests: Add some stress tests for scope and variable definition.
      vkd3d-shader/hlsl: Do not define a separate scope for function parameters.
      vkd3d-shader/hlsl: Factor out the error message into hlsl_add_var().
      vkd3d-shader/hlsl: Do not abort on variable redefinition.
      vkd3d-shader/hlsl: Handle error instructions in add_shader_compilation().
      vkd3d-shader/hlsl: Add an add_switch() helper.
      vkd3d-shader/hlsl: Handle error instructions in add_switch().
      vkd3d-shader/hlsl: Pass the block to add_zero_mipmap_level().
      vkd3d-shader/hlsl: Use a block in prepend_input_var_copy().
      vkd3d-shader/hlsl: Use a block in hlsl_normalize_binary_exprs().

Feifan He (46):
      vkd3d-shader/msl: Implement VKD3DSIH_ADD.
      vkd3d-shader/msl: Implement support for VKD3DSPR_IMMCONST registers.
      vkd3d-shader/msl: Implement support for VKD3DSPSM_ABS modifiers.
      vkd3d-shader/msl: Implement VKD3DSIH_AND.
      vkd3d-shader/msl: Implement VKD3DSIH_NEU.
      vkd3d-shader/msl: Implement support for VSIR_DIMENSION_VEC4 immediate constants.
      vkd3d-shader/msl: Implement VKD3DSIH_MUL.
      vkd3d-shader/msl: Implement VKD3DSIH_INE.
      vkd3d-shader/msl: Implement VKD3DSIH_OR.
      vkd3d-shader/msl: Implement VKD3DSIH_DIV.
      vkd3d-shader/msl: Implement support for VKD3DSPSM_NEG modifiers.
      vkd3d-shader/msl: Implement VKD3DSIH_GEO.
      vkd3d-shader/msl: Implement VKD3DSIH_FRC.
      vkd3d-shader/msl: Implement VKD3DSIH_MOVC.
      vkd3d-shader/msl: Implement VKD3DSIH_ITOF.
      vkd3d-shader/msl: Implement VKD3DSIH_FTOI.
      vkd3d-shader/msl: Implement VKD3DSIH_UTOF.
      vkd3d-shader/msl: Implement VKD3DSIH_FTOU.
      vkd3d-shader/msl: Implement VKD3DSIH_ROUND_PI.
      vkd3d-shader/msl: Implement VKD3DSIH_ROUND_Z.
      tests/shader_runner_metal: Implement depth texture and state.
      tests/shader_runner_metal: Implement clears.
      vkd3d-shader/msl: Implement support for the VKD3DSPR_DEPTHOUT register.
      vkd3d-shader/msl: Implement VKD3DSIH_DP3.
      vkd3d-shader/msl: Implement VKD3DSIH_DP4.
      vkd3d-shader/msl: Implement VKD3DSIH_DP2.
      vkd3d-shader/msl: Implement VKD3DSIH_SQRT.
      vkd3d-shader/msl: Handle the VKD3DSIM_LINEAR interpolation modifier on inputs.
      vkd3d-shader/msl: Implement VKD3DSIH_IEQ.
      vkd3d-shader/msl: Implement VKD3DSIH_EXP.
      vkd3d-shader/msl: Implement VKD3DSIH_LTO.
      vkd3d-shader/msl: Implement VKD3DSIH_ROUND_NI.
      vkd3d-shader/msl: Implement VKD3DSIH_IF and VKD3DSIH_ENDIF.
      vkd3d-shader/msl: Implement VKD3DSIH_ROUND_NE.
      vkd3d-shader/msl: Handle SV_IS_FRONT_FACE inputs.
      vkd3d-shader/msl: Implement VKD3DSIH_LOG.
      vkd3d-shader/msl: Implement VKD3DSIH_MAX.
      vkd3d-shader/msl: Implement VKD3DSIH_MIN.
      vkd3d-shader/msl: Implement VKD3DSIH_RSQ.
      vkd3d-shader/msl: Implement VKD3DSIH_NOT.
      vkd3d-shader/msl: Implement VKD3DSIH_ELSE.
      vkd3d-shader/msl: Implement support for VKD3DSPDM_SATURATE modifiers.
      vkd3d-shader/msl: Implement VKD3DSIH_MAD.
      vkd3d-shader/msl: Implement VKD3DSIH_ISHL.
      vkd3d-shader/msl: Implement VKD3DSIH_ISHR.
      vkd3d-shader/msl: Implement VKD3DSIH_USHR.

Francisco Casas (55):
      vkd3d-shader/tpf: Remove HLSL_IR_SWIZZLE handling.
      vkd3d-shader/hlsl: Store SM4 stores in the vsir program.
      vkd3d-shader/hlsl: Store SM4 loads in the vsir program.
      vkd3d-shader/hlsl: Store SM4 resource stores in the vsir program.
      tests: Test signature reflection for PRIMID, RTINDEX and VPINDEX.
      vkd3d-shader/hlsl: Add special allocation rules for PRIMID, RTINDEX, and VPINDEX.
      tests: Test allocation rules for FFACE and SAMPLE.
      vkd3d-shader/hlsl: Add special allocation rules for FFACE and SAMPLE.
      vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_LOADs in the vsir program.
      vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_SAMPLEs in the vsir program.
      vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_GATHERs in the vsir program.
      vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_SAMPLE_INFOs in the vsir program.
      vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_RESINFOs in the vsir program.
      vkd3d-shader/hlsl: Store SM4 jumps in the vsir program.
      vkd3d-shader/tpf: Apply extra bits to all conditional ops.
      vkd3d-shader/hlsl: Migrate SM4 control flow instructions to the vsir program.
      vkd3d-shader/hlsl: Remove hlsl_ir_vsir_instruction_ref, again.
      vkd3d-shader/dxbc: Parse the SFI0 ROV requirement.
      vkd3d-shader/hlsl: Store ROV feature requirement in the vsir_program.
      vkd3d-shader/hlsl: Store the global flags in the vsir program.
      vkd3d-shader/hlsl: Store SM4 sampler declarations in the vsir program.
      vkd3d-shader/hlsl: Store SM4 texture declarations in the vsir program.
      tests: Add additional sampler allocation tests for SM1.
      tests: Test sampler array allocation.
      vkd3d-shader/hlsl: Lower separated samplers for SM1.
      vkd3d-shader/hlsl: Support combined samplers from texture arrays.
      vkd3d-shader/hlsl: Allocate samplers by decreasing bind count in SM1.
      vkd3d-shader/hlsl: Allow lowering separate sampler arrays on deref offset 0.
      vkd3d-shader/hlsl: Store SM4 constant buffer declarations in vsir program.
      vkd3d-shader/hlsl: Generate RDEF outside tpf_compile().
      vkd3d-shader/hlsl: Generate CTAB outside sm1_generate_vsir().
      vkd3d-shader/hlsl: Store hull and domain shader properties in vsir_program.
      vkd3d-shader/tpf: Remove hlsl_ctx from tpf_compiler.
      vkd3d-shader/hlsl: Lower sample lods for SM1.
      vkd3d-shader/ir: Properly lower texldb.
      tests/hlsl: Test tex2Dproj().
      vkd3d-shader/ir: Properly lower texldp.
      vkd3d-shader: Avoid passing NULL to memcpy(). (ubsan)
      vkd3d-shader: Avoid passing NULL to qsort(). (ubsan)
      vkd3d-shader: Avoid passing NULL to memset(). (ubsan)
      vkd3d-shader: Avoid left shifting signed integers. (ubsan)
      tests: Test SampleGrad() on ps_3_0.
      vkd3d-shader/hlsl: Lower separate SampleGrad() for SM1.
      vkd3d-shader/hlsl: Don't lower separate samples with texel offsets.
      tests: Test casting negative floats to int.
      vkd3d-shader/hlsl: Properly lower casts to int for negative numbers.
      vkd3d-shader/hlsl: Specialize lowering SM1 casts to int for vertex shaders.
      tests/hlsl: Add lhs cast tests.
      tests/hlsl: Test partial assignments due to lhs casts.
      tests/hlsl: Add more function cast tests.
      vkd3d-shader/hlsl: Delay lowering complex casts until after parse time.
      vkd3d-shader/hlsl: Support non-size-changing lhs casts.
      vkd3d-shader/hlsl: Don't count cast to param type on IN as part of OUT var's lhs.
      vkd3d-shader/hlsl: Don't forbid first base type cast on var assignments.
      tests/shader_runner: Pass the correct buffer size to swprintf() in dxc_compiler_compile_shader().

Giovanni Mascellani (87):
      vkd3d-shader/ir: Validate the semantic index for tessellation system values.
      vkd3d-shader/ir: Check that semantic indices for tessellation system values are not duplicated.
      vkd3d-shader/ir: Keep track of the tessellator domain in struct vsir_program.
      vkd3d-shader/ir: Validate tessellation system values for the given tessellator domain.
      vkd3d-shader/ir: Check that tessellation system values only appear in the patch constant signature.
      vkd3d-shader/ir: Validate index count for PRIMID registers.
      vkd3d-shader/ir: Validate index count for OUTPOINTID registers.
      vkd3d-shader/ir: Validate index count for FORKINSTID registers.
      vkd3d-shader/ir: Validate index count for JOININSTID registers.
      vkd3d-shader/ir: Validate index count for TESSCOORD registers.
      vkd3d-shader/ir: Validate index count for THREADID registers.
      vkd3d-shader/ir: Validate index count for THREADGROUPID registers.
      vkd3d-shader/ir: Validate index count for LOCALTHREADID registers.
      vkd3d-shader/ir: Validate index count for LOCALTHREADINDEX registers.
      vkd3d-shader/ir: Check that all tessellation system values appear in the patch constant signature.
      vkd3d-shader/ir: Check that tessellation system value registers are consecutive.
      vkd3d-shader/ir: Validate index count for COVERAGE registers.
      vkd3d-shader/ir: Validate index count for SAMPLEMASK registers.
      vkd3d-shader/ir: Validate index count for GSINSTID registers.
      vkd3d-shader/ir: Validate index count for WAVELANECOUNT registers.
      vkd3d-shader/ir: Validate index count for WAVELANEINDEX registers.
      vkd3d-shader/ir: Validate index count for OUTSTENCILREF registers.
      vkd3d-shader/dxil: Emit register SAMPLEMASK for output sysval SV_Coverage.
      vkd3d-shader/ir: Validate the register type for DCL_INPUT instructions.
      vkd3d-shader/ir: Validate the register type for DCL_INPUT_SIV instructions.
      vkd3d-shader/ir: Validate the register type for DCL_INPUT_SGV instructions.
      vkd3d-shader/ir: Validate the register type for DCL_INPUT_PS instructions.
      vkd3d-shader/ir: Validate the register type for DCL_INPUT_PS_SIV instructions.
      vkd3d-shader/ir: Validate the register type for DCL_INPUT_PS_SGV instructions.
      vkd3d-shader/ir: Validate the register type for DCL_OUTPUT instructions.
      vkd3d-shader/ir: Validate the register type for DCL_OUTPUT_SIV instructions.
      vkd3d-shader/ir: Synthesize the default control point phase in the HS control point I/O normaliser.
      vkd3d-shader/ir: Evaluate OUTCONTROLPOINT usage in the patch constant phase directly.
      tests: Use plain skip() when skipping a test in the shader runner.
      tests: Print the file name instead of the test name in test logs.
      vkd3d-shader/spirv: Merge emitting input and output registers.
      vkd3d-shader/ir: Encode I/O declarations in vsir_program.
      vkd3d-shader/ir: Remove I/O declarations before I/O normalisation.
      vkd3d-shader/ir: Remove I/O declarations before normalising hull shader control point I/O.
      vkd3d-shader/ir: Remove I/O declarations before flattening hull shader phases.
      vkd3d-shader/ir: Merge removing I/O declarations in the general instruction lowering pass.
      vkd3d-shader/ir: Validate the control point index when it is statically known.
      vkd3d: Do not use more than a few million descriptors in Vulkan heap set layouts.
      vkd3d-shader/ir: Validate the array index when it is statically known.
      vkd3d-shader/ir: Validate the register type for registers used as relative addresses.
      vkd3d-shader/ir: Introduce a helper function to determine the signature for a register type.
      vkd3d-shader/ir: Validate the DCL_INDEX_RANGE instruction.
      vkd3d-shader/ir: Check that DCL_INDEX_RANGE ranges do not overlap with unrelated signature elements.
      vkd3d-shader/spirv: Introduce a SPIR-V parser.
      vkd3d-shader/spirv: Parse the SPIR-V magic number.
      vkd3d-shader/spirv: Parse the SPIR-V version number.
      vkd3d-shader/spirv: Parse the SPIR-V generator magic number.
      vkd3d-shader/spirv: Parse the SPIR-V id bound.
      vkd3d-shader/spirv: Parse the SPIR-V instruction schema.
      vkd3d-shader/ir: Check that the DCL_INDEX_RANGE effective mask stabilizes after one iteration.
      vkd3d-shader/ir: Check that signature element masks are left-aligned with in a DCL_INDEX_RANGE.
      vkd3d-shader/ir: Validate the register index and count for signature elements.
      vkd3d-shader/ir: Validate the signature element stream index.
      vkd3d-shader/ir: Validate the signature element register index, for some sysvals.
      vkd3d-shader/ir: Check that signature elements do not conflict with each other.
      vkd3d-shader/ir: Give more meaningful names to I/O normalisation levels.
      vkd3d-shader/d3dbc: Normalise I/O register write masks when not disassembling.
      vkd3d-shader/ir: Represent information about I/O registers with a table.
      vkd3d-shader/ir: Validate INPUT destination parameters using a uniform helper.
      vkd3d-shader/ir: Validate PATCHCONST destination parameters using a uniform helper.
      vkd3d-shader/ir: Validate OUTPUT destination parameters.
      vkd3d-shader/ir: Validate INCONTROLPOINT destination parameters.
      vkd3d-shader/ir: Validate OUTCONTROLPOINT destination parameters.
      vkd3d-shader/ir: Remove a redundant assignment.
      vkd3d-shader/ir: Simplify shader_register_normalise_arrayed_addressing().
      tests/hlsl: Add tests for the EvaluateAttribute*() intrinsics.
      tests/hlsl: Add some clip/cull distance tests.
      vkd3d-shader/ir: Disallow array signature elements for normalisation levels < SM6.
      vkd3d-shader/ir: Validate OUTPUT source parameters using a uniform helper.
      vkd3d-shader/ir: Validate PATCHCONST source parameters using a uniform helper.
      vkd3d-shader/ir: Validate INPUT source parameters.
      vkd3d-shader/ir: Validate INCONTROLPOINT source parameters.
      vkd3d-shader/ir: Validate OUTCONTROLPOINT source parameters.
      vkd3d: Log the requested feature levels for D3D12_FEATURE_FEATURE_LEVELS.
      vkd3d: Describe DXGI_UNKNOWN as having one plane.
      vkd3d: Only call d3d12_fence_garbage_collect_vk_semaphores_locked() when using binary semaphores.
      vkd3d: Release queued fences when stopping the fence worker.
      vkd3d: Support signalling a fence once all outstanding work is submitted to Vulkan.
      vkd3d: Explicitly call the appropriate waiting function in the fence worker.
      vkd3d-shader/spirv: Interpret the write mask as a destination swizzle for double comparison operations.
      vkd3d-common: Write a thread id in the log on macOS too.
      ci: Explicitly install SPIRV-Tools in the macOS CI environment.

Henri Verbeet (31):
      tests: Get rid of some redundant "glsl" todo's.
      vkd3d-shader/hlsl: Use hlsl_error() instead of hlsl_fixme() for ambiguous function calls.
      vkd3d-shader/hlsl: Introduce hlsl_dump_type().
      vkd3d-shader/hlsl: Introduce hlsl_dump_ir_function_decl().
      vkd3d-shader/hlsl: Output the candidates for ambiguous function calls.
      vkd3d: Introduce d3d12_descriptor_set_layout_init().
      vkd3d-shader/spirv: Parse SPIR-V instructions.
      vkd3d: Drop smaller pools in d3d12_command_allocator_reset_descriptor_pool_array().
      tests: Add yet more overload resolution tests.
      vkd3d-shader/hlsl: Prefer overload candidates without component count narrowing.
      vkd3d-shader/hlsl: Prefer overload candidates with matching component type classes.
      vkd3d-shader/hlsl: Prefer overload candidates with matching component types.
      vkd3d-shader/hlsl: Prefer overload candidates without component type narrowing.
      vkd3d-shader/hlsl: Prefer overload candidates without component count widening.
      vkd3d-shader/d3dbc: Separate writing the comment bytecode from write_sm1_uniforms().
      vkd3d-shader/hlsl: Move CTAB generation to hlsl_codegen.c.
      tests/shader_runner: Ignore the "backcompat" option for shader model 5.1+.
      vkd3d-shader/hlsl: Make sm4_get_interpolation_mode() static.
      vkd3d-shader/hlsl: Move sm4_get_extern_resources() to hlsl_codegen.c.
      vkd3d-shader/hlsl: Move sm4_free_extern_resources() to hlsl_codegen.c.
      tests/shader_runner: Do not use skip() for shader model requirements.
      vkd3d-shader/hlsl: Move RDEF generation to hlsl_codegen.c.
      demos: Use the assembler to embed HLSL sources.
      vkd3d-shader/msl: Get rid of a stray vkd3d_string_buffer_printf() in the VEC4 UINT immediate constant handling.
      vkd3d: Avoid freeing the input signature twice on error paths in d3d12_pipeline_state_init_graphics().
      vkd3d-compiler: Store the target type as a struct target_type_info pointer.
      vkd3d-compiler: Store the source type as a struct source_type_info pointer.
      vkd3d-compiler: Introduce "dxbc-fx" as a source type.
      include: Add vkd3d_shader_scan_hull_shader_tessellation_info to the list of chained compilation structures.
      include: Add missing VKD3D_FORCE_32_BIT_ENUM enum elements.
      vkd3d-shader/ir: Remove vForkInstanceId and vJoinInstanceId declarations in vsir_program_flatten_hull_shader_phases().

Nikolay Sivov (5):
      vkd3d-shader/hlsl: Add parser support for stream-output object types.
      vkd3d-shader/fx: Implement parsing inline shader blobs.
      vkd3d-shader/fx: Remove newlines from the parser error messages.
      vkd3d-compiler: Support fx_4_0 sources embedded in DXBC containers.
      vkd3d-shader/hlsl: Implement the isinf() intrinsic.

Shaun Ren (43):
      vkd3d-shader/dxil: Allow zero domain input control point count.
      vkd3d-shader: Implement scanning hull shader tessellation information.
      tests/shader_runner_vulkan: Enable patch list topology support.
      tests/shader_runner_gl: Implement tessellation support.
      vkd3d-shader/hlsl: Implement normalization of binary expressions.
      vkd3d-shader/hlsl: Collect together terms with constant coefficients.
      tests/shader_runner_vulkan: Check if create_shader_stage() fails in create_compute_pipeline().
      tests/shader_runner_gl: Add "opengl" tag.
      tests/shader_runner_gl: Bind buffer UAVs for compute shaders.
      tests/hlsl: Add a test for UAV InterlockedCompareExchange().
      tests/hlsl: Add tests to check the types of the value arguments of atomic ops.
      tests/hlsl: Add tests to check the void return type of atomic ops.
      tests/hlsl: Add tests for valid destination types of atomic operations.
      vkd3d-shader/hlsl: Implement the InterlockedAdd() intrinsic.
      vkd3d-shader/hlsl: Implement the InterlockedAnd() intrinsic.
      vkd3d-shader/hlsl: Implement the InterlockedCompareExchange() intrinsic.
      vkd3d-shader/hlsl: Implement the InterlockedCompareStore() intrinsic.
      vkd3d-shader/hlsl: Implement the InterlockedExchange() intrinsic.
      vkd3d-shader/hlsl: Implement the InterlockedMax() intrinsic.
      vkd3d-shader/hlsl: Implement the InterlockedMin() intrinsic.
      vkd3d-shader/hlsl: Implement the InterlockedOr() intrinsic.
      vkd3d-shader/hlsl: Implement the InterlockedXor() intrinsic.
      vkd3d-shader/spirv: Emit the tessellator domain for domain shaders.
      vkd3d-shader/hlsl: Forbid declaring parameters as both out and const.
      tests: Test invalid out const parameters.
      vkd3d-shader/d3d-asm: Print vocp registers with subscript.
      vkd3d-shader/hlsl: Forbid declaring const variables with no initializer.
      tests/hlsl: Test invalid const variables with no initializer.
      vkd3d-shader/hlsl: Parse InputPatch and OutputPatch objects.
      vkd3d-shader/hlsl: Validate and record InputPatch/OutputPatch types.
      tests/hlsl: Test the syntax of InputPatch/OutputPatch variables.
      tests/hlsl: Test passthrough hull shader control point function.
      tests/hlsl: Test hull shader control point function output parameters.
      tests/hlsl: Test OutputPatch usage in patch constant functions.
      vkd3d-shader/hlsl: Add an "is_patch_constant_func" field to struct hlsl_ctx.
      vkd3d-shader/hlsl: Implement input semantic variable copies for patch variables.
      vkd3d-shader/tpf: Improve readability of compat mapping in sm4_sysval_semantic_from_semantic_name().
      vkd3d-shader/hlsl: Generate vsir signature entries for patch variables.
      vkd3d-shader/hlsl: Declare semantics for patch variables in vsir.
      vkd3d-shader/hlsl: Allocate semantic registers for patch variables.
      tests/shader_runner: Support the negation of tag matches.
      vkd3d-shader/hlsl: Generate vsir registers from patch variable derefs.
      tests: Test signature reflection for patch inputs in hull/domain shaders.

Victor Chiletto (10):
      tests: Add more function overloading tests.
      vkd3d-shader/hlsl: Explicitly track the copy propagation state stack.
      vkd3d-shader/hlsl: Allow copy propagation to be stopped early.
      vkd3d-shader/hlsl: Constant fold casts to boolean.
      vkd3d-shader/hlsl: Run copy propagation incrementally during loop unrolling.
      vkd3d-shader/hlsl: Do not clone the entire program for loop unrolling.
      vkd3d-shader/hlsl: Remove loop_unrolling_find_unrollable_loop().
      vkd3d-shader/hlsl: Partially defer continue resolution.
      vkd3d-shader/hlsl: Unroll loops with conditional jumps.
      vkd3d-shader/hlsl: Drop the _ir_ infix from enum hlsl_loop_unroll_type.
```
