diff --git a/ANNOUNCE b/ANNOUNCE index 05488f578..8a03b0bcb 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,16 +1,17 @@ -The vkd3d team is proud to announce that release 1.16 of vkd3d, the Direct3D +The vkd3d team is proud to announce that release 1.17 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: - - Support for DirectX Intermediate Language (DXIL) shaders. - - Initial support for geometry shaders in the HLSL compiler. + - Initial HLSL support for thread group shared memory. + - Several features have been implemented for the experimental Metal Shading + Language target. - Miscellaneous bug fixes. The source is available from the following location: - + The current source can also be pulled directly from the git repository: @@ -19,493 +20,663 @@ The current source can also be pulled directly from the git repository: Vkd3d is available thanks to the work of multiple people. See the file AUTHORS for the complete list. -# What's new in vkd3d 1.16 +# What's new in vkd3d 1.17 ### libvkd3d - - DXIL shaders are supported in the default configuration. Previously this - required building vkd3d with the ‘-DVKD3D_SHADER_UNSUPPORTED_DXIL’ - preprocessor option. The also raises the maximum supported shader model to - version 6.0. - - - Graphics pipeline state objects can be created from shaders with embedded - root signatures. This was already possible for compute pipeline state - objects. - - - The SetEventOnMultipleFenceCompletion() method of the ID3D12Device1 - interface is implemented. - - - When the VK_KHR_zero_initialize_workgroup_memory extension is supported, - libvkd3d supports zero-initialising compute shader thread group shared - memory. - - - The VK_KHR_maintenance2 extension is now explicitly required. libvkd3d - already unconditionally used features provided by this extension, but - unfortunately didn't explicitly require it. Support for this extension is - widespread, and the extension is part of Vulkan 1.1. + - The EnumerateMetaCommands() method of the ID3D12Device5 interface is + implemented. ### libvkd3d-shader - - The previously experimental support for compiling DXIL shaders is now a - supported feature and enabled by default. Please note that this feature is - nevertheless still far from perfect. + - Several new features and improvements for the HLSL source type: + - Initial thread group shared memory support. + - Improved support for geometry shaders: shader model 5 multiple output + streams, as well as SV_IsFrontFace, SV_RenderTargetArrayIndex, and + SV_ViewportArrayIndex outputs. + - Structure variable input/output semantics are propagated to the + constituent structure fields. + - Shader entry point return values are allocated before any other outputs + in the output signature. This matches d3dcompiler/fxc more closely. + - Hull shader control point pass-through. + - Reflection information can be retrieved using vkd3d_shader_scan(). + - Improved preprocessor handling of comments inside include directives, as + well as inclusion of empty files. + - Memory barrier intrinsics are supported in shader model 4 target + profiles. Previous these were only supported in shader model 5 target + profiles. + - Parser support for the noise() intrinsic. Although the intrinsic itself + isn't implemented, parser support for the intrinsic is required to allow + compilation of any other shaders in the same source file to succeed as + well. + - Parser support for StructuredBuffer resources. - - New features for the HLSL source type: - - Initial support for geometry shaders. - - Indirect addressing in shader model 1-3 target profiles. - - Modulus and truncation operations in shader model 1-3 target profiles. - - Vectorised output code. - - Further improved constant folding and propagation. - - The following intrinsic functions are supported: - - AllMemoryBarrier() - - AllMemoryBarrierWithGroupSync() - - DeviceMemoryBarrier() - - DeviceMemoryBarrierWithGroupSync() - - GroupMemoryBarrier() - - GroupMemoryBarrierWithGroupSync() - - The ‘.Length’ Texture object property. - - The ‘SV_RenderTargetArrayIndex’ and ‘SV_ViewportArrayIndex’ semantics in - tessellation shaders. + - Various new features and improvements for the effects (FX) source type: + - Shader blob assignments and FXLVM value expressions in ‘fx_2_0’ effects. + - Nameless structure types. + - Explicit constant buffer bind points and constant packing offsets. + - The ‘d3ds_noiseswiz’, ‘ge’, ‘lt’, and ‘noise’ FXLVM operations. - - Disassembler support for binary ‘fx_2_0’ effects. + - The experimental Metal Shading Language (MSL) target supports the + following features: + - Texture sampling and gather operations. + - Loops and switches. + - Screen-space partial derivatives. + - Various integer arithmetic and comparison operations. + - Indirect addressing of constant buffers. + - Indexable temporary registers. + - Fragment shader output sample coverage masks. + - SV_Position and SV_SampleIndex fragment shader inputs. + - SV_VertexID inputs. - - Experimental built-in support for disassembling SPIR-V shaders, enabled by - building vkd3d with the ‘-DVKD3D_SHADER_UNSUPPORTED_SPIRV_PARSER’ - preprocessor option. When enabled, the built-in SPIR-V disassembler is - used instead of SPIRV-Tools for the ‘spirv-text’ target type, as well as - for the debug output enabled by the VKD3D_SHADER_DEBUG environment - variable. + - When the experimental MSL target is enabled, the ‘dxbc-dxil’ source type + can be used in combination with the ‘msl’ target type to convert DXIL + shaders to MSL. - - The experimental OpenGL Shading Language (GLSL) target supports indirect - addressing of constant buffers. + - The new ‘tx’ source type can be used in combination with the ‘d3d-asm’ + target type to disassemble D3DX ‘tx_1_0’ texture shaders. - - The experimental Metal Shading Language (MSL) target supports texture - loads. + - The FX target takes alignment and padding into account in ‘fx_4_0’ buffer + size calculations. + + - The SPIR-V target is capable of outputting OpSource and OpLine debug + information. + + - The core grammar for the experimental SPIR-V disassembler has been updated + to the ‘vulkan-sdk-1.4.313.0’ release. - New interfaces: - - The VKD3D_SHADER_COMPILE_OPTION_FEATURE_ZERO_INITIALIZE_WORKGROUP_MEMORY - flag indicates support for zero-initialising workgroup memory in the - SPIR-V target environment. - - The VKD3D_SHADER_COMPONENT_INT64 enumeration value indicates a 64-bit - signed integer value. - - The VKD3D_SHADER_COMPONENT_FLOAT16 enumeration value indicates a 16-bit - IEEE floating-point value. - - The VKD3D_SHADER_COMPONENT_UINT16 enumeration value indicates a 16-bit - unsigned integer value. - - The VKD3D_SHADER_COMPONENT_INT16 enumeration value indicates a 16-bit - signed integer value. - - When targeting VKD3D_SHADER_API_1_16, the - VKD3D_SHADER_RESOURCE_DATA_NONE enumeration value is returned for the - ‘resource_data_type’ field in the vkd3d_shader_descriptor_info structure - for sampler descriptors. VKD3D_SHADER_API_1_15 and before use the - VKD3D_SHADER_RESOURCE_DATA_UINT enumeration value for this. + - The VKD3D_SHADER_SOURCE_TX source type specifies D3DX ‘tx_1_0’ texture + shaders. + +### vkd3d-compiler + + - The new ‘tx’ source type specifies D3DX ‘tx_1_0’ texture shaders. ### demos - - The vkd3d demos now work on both the Microsoft Windows and Apple macOS - builds. The macOS versions of the vkd3d demos are completely new in vkd3d - 1.16, while the Windows demos could previously be built, but only worked - on Wine. Note that the vkd3d demos produced by a Windows build of vkd3d - are distinct from those produced by the ‘make crosstest’ target: the - former are Vulkan applications using vkd3d, while the latter are Direct3D - 12 applications. + - The new vkd3d-teapot demo uses tessellation shaders to render a version of + Martin Newell's famous teapot. It should be noted that current versions of + MoltenVK unfortunately do not support all features required to execute + this demo correctly. - - The vkd3d demos have basic support for DPI scaling. - -### build - - - Perl and the ‘JSON’ Perl module have been added as build dependencies. - These are used for the experimental built-in SPIR-V disassembler, as well - as for the macOS versions of the vkd3d demos. - -### Changes since vkd3d 1.15: +### Changes since vkd3d 1.16: ``` -Andrey Gusev (2): - vkd3d-shader/dxil: Store the actual return value in sm6_parser_signatures_init(). - vkd3d-shader/ir: Store the actual return value in shader_signature_map_patch_constant_index_ranges(). +Anna (navi) Figueiredo Gomes (5): + vkd3d-shader/hlsl: Clone the entry point body and redirect processing to the clone. + vkd3d-shader/hlsl: Reset "extern_vars" before processing "entry_func" in hlsl_emit_bytecode(). + vkd3d-shader/hlsl: Add temporary variables to "dummy_scope" in prepend_uniform_copy(). + vkd3d-shader/hlsl: Don't create a temporary copy for a uniform if one already exists. + vkd3d-shader/hlsl: Move hlsl_ir_function_decl->extern_vars to a local variable. -Anna (navi) Figueiredo Gomes (6): - tests/hlsl: Add lower sm1 saturate test. - tests/hlsl: Add angle bracket state block syntax test. - vkd3d-shader: Parse angle bracket initializer in state blocks. - tests/hlsl: Add some fx_4_0 state tests. - vkd3d-shader/fx: Don't cast between int and uint in state blocks. - vkd3d-shader/hlsl: Use the source data type in clone_interlocked(). +Brendan Shanks (2): + include: Add additional generated files to .gitignore. + tests: Add dxcompiler.h to .gitignore. -Conor McCarthy (13): - tests/hlsl: Add typed buffer SRV 16-bit tests. - tests/hlsl: Add a sampler 16-bit test. - tests/hlsl: Add a TGSM 16-bit test. - tests/hlsl: Add a typed SRV load 16-bit test. - tests/hlsl: Add interstage interface 16-bit tests. - tests/hlsl: Add a conditional 16-bit test. - tests: Replace test_vs_ps_relative_addressing() with a shader runner test. - tests/hlsl: Test casts to 16-bit float. - tests/hlsl: Test casts to 16-bit int. - tests/hlsl: Test casts to 16-bit uint. - tests/hlsl: Test casts from double to 16-bit integer types. - vkd3d-shader/tpf: Emit the resource data type only for typed resource declarations. - tests/hlsl: Add a shader model 5.1 test to srv-byteaddressbuffer.shader_test. +Conor McCarthy (9): + vkd3d-shader/dxil: Validate the function return type after calling the handler. + vkd3d-shader/dxil: Check the destination value is invalid after calling a void function handler. + vkd3d-shader/dxil: Add a null check for the type when validating non-void operands. + vkd3d-shader/ir: Allow constant buffer loads to have a minimum precision. + vkd3d-shader/dxil: Convert constant buffer minimum-precision source registers. + tests: Replace test_ps_viewport_index() with a shader runner test. + vkd3d-shader/dxil: Handle SV_ViewportArrayIndex. + tests/hlsl: Add a test for SV_PrimitiveId inputs and outputs. + vkd3d-shader/dxil: Handle SV_PrimitiveId outputs. -Elizabeth Figura (70): - vkd3d-shader/hlsl: Don't mark extern variables with an explicit first_write or last_read. - vkd3d-shader/hlsl: Skip transformation passes on error. - vkd3d-shader/hlsl: Remove the type equality assertions in hlsl_new_ternary_expr(). - vkd3d-shader/hlsl: Handle error instructions in hlsl_new_swizzle(). - vkd3d-shader/hlsl: Add a hlsl_block_add_uint_constant() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_int_constant() helper. - vkd3d-shader/hlsl: Inline add_pow_expr(). - vkd3d-shader/hlsl: Add a hlsl_block_add_float_constant() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_unary_expr() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_cast() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_binary_expr() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_expr() helper. - vkd3d-shader/hlsl: Pass a block to hlsl_new_void_expr(). - vkd3d-shader/hlsl: Pass the target block to hlsl_new_load_component(). - vkd3d-shader/hlsl: Add a hlsl_block_add_store_index() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_simple_store() helper. - vkd3d-shader/hlsl: Pass the target block to hlsl_new_store_component(). - vkd3d-shader/hlsl: Return void from hlsl_block_add_store_component(). - vkd3d-shader/hlsl: Return an error expr from hlsl_add_load_component() on allocation failure. - vkd3d-shader/hlsl: Add a hlsl_block_add_load_index() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_simple_load() helper. - vkd3d-shader/hlsl: Emit the minimum-precision global flag when minimum-precision semantics are used. - vkd3d-shader/hlsl: Emit minimum-precision signatures. - vkd3d-shader/hlsl: Emit the minimum-precision SFI0 flag. - vkd3d-shader/hlsl: Use common hlsl_type_is_integer() and hlsl_base_type_is_integer() helpers. - vkd3d-shader/hlsl: Pass the correct type to base_type_get_semantic_equivalent(). - vkd3d-shader/hlsl: Make min16uint into a first-class type. - vkd3d-shader/hlsl: Add a hlsl_block_add_jump() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_if() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_loop() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_index() helper. - vkd3d-shader/hlsl: Add a hlsl_block_add_resource_store() helper. - vkd3d-shader/hlsl: Fix temp allocation for ps 1.x. - vkd3d-shader/hlsl: Fix writing the sincos extra constants. - vkd3d-shader/hlsl: Introduce hlsl_block_add_resource_load(). - vkd3d-shader/hlsl: Introduce hlsl_block_add_swizzle(). - vkd3d-shader/hlsl: Return an error expression from add_cast() on allocation failure. - vkd3d-shader/hlsl: Do not abort when performing an invalid explicit cast. - vkd3d-shader/hlsl: Do not abort when performing an invalid implicit cast. - vkd3d-shader/hlsl: Stop checking for failure from intrinsic_float_convert_arg(). - vkd3d-shader/hlsl: Don't invalidate OOB constant derefs. - vkd3d-shader/hlsl: Zero-initialize "nonconst_i" and "ret_swizzle" in copy_propagation_replace_with_deref(). - vkd3d-shader/hlsl: Reuse shader model 1-3 constants. - vkd3d-shader/hlsl: Use vsir_*_from_hlsl_node() helpers in more places. - vkd3d-shader/hlsl: Set the correct index count for sm1 DEPTHOUT. - vkd3d-shader/hlsl: Initialize the vsir dimension for sm1. - vkd3d-shader/hlsl: Leave the swizzle zero for VSIR_DIMENSION_NONE registers. - vkd3d-shader/hlsl: Initialize the temp count for sm1. - vkd3d-shader/glsl: Invert gl_FragCoord w. - vkd3d-shader/hlsl: Allow compiling directly to GLSL. - vkd3d-shader/hlsl: Introduce a compiler pass to vectorize expressions. - vkd3d-shader/hlsl: Introduce a compiler pass to vectorize stores. - vkd3d-shader/hlsl: Set the sysval for more sm1 semantics. - vkd3d-shader/hlsl: Set the right interpolation mode in the vsir signature. - vkd3d-shader/ir: Introduce a vsir_dst_param_init_null() helper. - vkd3d-shader/ir: Validate SSA write masks. - vkd3d-shader: Normalize TEXKILL to use a source register. - tests/hlsl: Show that GetRenderTargetSampleCount() returns a vector. - vkd3d-shader/hlsl: Return a uint1 from GetRenderTargetSampleCount(). - vkd3d-shader/ir: Merge tess factor used masks together. - vkd3d-shader/spirv: Return void from spirv_compiler_emit_input(). - vkd3d-shader/spirv: Do not declare inputs with an empty used_mask. - vkd3d-shader/hlsl: Emit an error when min16uint is used in d3dbc target profiles. - vkd3d-shader/hlsl: Do not emit HLSL_OP1_ABS for unsigned types. - tests/hlsl: Add more tests for the "numthreads" attribute. - vkd3d-shader/hlsl: Validate "numthreads" attribute values. - vkd3d-shader/ir: Use the .w component of the existing swizzle when lowering texldb. - vkd3d-shader/hlsl: Fix an incorrect error message for referring to non-struct types with "struct". - tests/hlsl: Add more tests for struct syntax. - vkd3d-shader/hlsl: Forbid referring to typedefs with "struct". +Elizabeth Figura (31): + vkd3d-shader/ir: Use add_signature_element() to add clip planes. + vkd3d-shader/ir: Split TEXCOORD into two separate vsir opcodes. + vkd3d-shader/ir: Split TEX into two separate vsir opcodes. + vkd3d-shader: Use the correct union members for raw and structured resources. + vkd3d-shader/preproc: Parse comments in #include and #line directives. + vkd3d-shader/preproc: Swap to the INITIAL state after ending a buffer. + vkd3d-shader/preproc: Store EOF state per buffer. + vkd3d-shader/hlsl: Add a register type field to struct hlsl_reg. + vkd3d-shader/ir: Introduce a stub SSA to temp allocation pass. + vkd3d-shader/ir: Track liveness in the SSA allocator. + vkd3d-shader/ir: Allocate SSA registers to temps. + vkd3d-shader/hlsl: Output SSA registers where possible. + vkd3d-shader/d3d-asm: Handle INT_MIN in shader_print_int_literal(). + vkd3d-shader/hlsl: Convert descriptor registers to pre-5.1 form in the TPF writer. + vkd3d-shader/hlsl: Output sm1 semantics with unique register_index values. + vkd3d-shader/hlsl: Set the data type in sm4_generate_vsir_reg_from_deref(). + vkd3d-shader/hlsl: Set the destination data type to UINT in sm4_generate_vsir_cast_from_bool(). + vkd3d-shader/ir: Allow bitwise operations on VKD3D_DATA_INT. + tests/shader_runner: Add support for 3D resources. + tests/hlsl: Add tests for 3D textures. + tests/shader_runner: Add support for cube resources. + tests/hlsl: Add tests for cube textures. + vkd3d-shader/spirv: Do not use OpCopyMemory for partial writemasks in spirv_compiler_emit_mov(). + vkd3d-shader/spirv: Use left-shifted writemasks for private variables for inputs. + vkd3d-shader/ir: Record the previous temp count before allocating any SSA values. + tests/hlsl: Add a regression test for packed SV_IsFrontFace. + vkd3d-shader: Add descriptors from SAMPLE instructions if necessary. + vkd3d-shader/d3dbc: Move TEXLD lowering to d3dbc_parse(). + vkd3d-shader/d3dbc: Normalize ps 1.x output. + vkd3d-shader/d3dbc: Lower 1.4 TEXLD. + vkd3d-shader/d3dbc: Lower TEXCRD. -Feifan He (3): - tests/shader_runner_metal: Introduce a helper to encode the argument buffer. - tests/shader_runner_metal: Add texture support. - vkd3d-shader/msl: Implement VKD3DSIH_LD. +Evan Tang (4): + vkd3d: Replace the resource count field of struct d3d12_heap with an internal refcount. + vkd3d: Mask colour writes on graphics pipelines without fragment shaders. + tests/d3d12: Add a colour attachment to test_draw_depth_no_ps(). + vkd3d: Get rid of the default fragment shader from d3d12_pipeline_state_init_graphics(). Francisco Casas (38): - vkd3d-shader/hlsl: Also dump preprocessed shaders. - tests/test-driver: Print the shader model for the detailed output of the hlsl backend. - tests/test-driver: Group together tags in the same line and shader model. - tests/test-driver: Merge the same consecutive tags togeter. - vkd3d-make/hlsl: Trace the number of registers allocated in allocate_temp_registers(). - vkd3d-shader/hlsl: Only use the temp copy for variables that are written. - tests: Test unused invalid samples with a static sampler. - vkd3d-shader/hlsl: Run folding passes again after lower_nonconstant_array_loads. - vkd3d-shader/hlsl: Don't cast all expressions to float. - vkd3d-shader/hlsl: Remove lower_nonfloat_exprs(). - vkd3d-shader/hlsl: Lower TRUNC expressions for SM1. - tests: Add a hard test for copy-propagation invalidation. - vkd3d-shader/hlsl: Fix invalidation of the wrong components in copy-propagation. - tests/hlsl: Test for loss of precision on integer negation in d3dbc target profiles. - tests/hlsl: Test integer modulus with big integers. - tests/hlsl: Test integer division with big integers. - vkd3d-shader/hlsl: Don't lower integer MOD and DIV on const passes for d3dbc target profiles. - vkd3d-shader/hlsl: Lower integer modulus for d3dbc target profiles. - tests/hlsl: Test vertex shader uniform indirect addressing. - tests/hlsl: Test SM1 vertex shader uniform allocation on indirect addressing. - vkd3d-shader/d3dbc: Respect "idx_count" when writing registers. - vkd3d-shader/hlsl: Implement indirect addressing for d3dbc target profiles. - vkd3d-shader/ir: Normalise MOVA and d3dbc indirect addressing. - vkd3d-shader/hlsl: Allow non-constant deref propagation on SM1. - vkd3d-shader/ir: Reset instruction pointers after shader_instruction_array_insert_at(). - tests/hlsl: Test the object .Length property. - vkd3d-shader/hlsl: Support the .Length property for Textures. - vkd3d-shader/hlsl: Make struct_declaration_without_vars return void. - vkd3d-shader/hlsl: Avoid leaking declaration_statement blocks. - vkd3d-shader/hlsl: Avoid leaking blocks on YYABORT. - vkd3d-shader/hlsl: Add parse_variable_def destructors to the parser. - vkd3d-shader/hlsl: Add switch_case destructors to the parser. - vkd3d-shader/hlsl: Remove the unnecessary "instr" field from the parser %union. - vkd3d-shader/hlsl: Parse barriers. - vkd3d-shader/hlsl: Mark stores dirty on interlocked operation in vectorize_stores(). - vkd3d-shader/hlsl: Generate vsir for HLSL_IR_SYNC operations. - tests: Add tests for DeviceMemoryBarrierWithGroupSync(). - ci: Update the DXC version used on the CI to 1.8.2502. + tests/d3d12: Avoid out-of-bounds access when evaluating ok() args (ubsan). + tests/shader_runner_d3d12: Handle the "bug" qualifier on state creation failure. + tests/hlsl: Test the allocation order of return semantics. + vkd3d-shader/hlsl: Allocate return variables before other outputs. + tests/hlsl: Fix up point-sprite.shader_test. + vkd3d-shader/hlsl: Update the enum hlsl_sampler_dim comment. + vkd3d-shader/ir: Avoid a compiler warning in vsir_block_list_init(). + tests/hlsl: Add semantic cascading tests. + vkd3d-shader/hlsl: Use the index in the hlsl_semantic when appending output copies. + vkd3d-shader/hlsl: Use the index in the hlsl_semantic when prepending input copies. + vkd3d-shader/hlsl: Don't pass the semantic index in add_semantic_var(). + vkd3d-shader/hlsl: Make output semantics on structs cascade down onto the fields. + vkd3d-shader/hlsl: Make input semantics on structs cascade down onto the fields. + tests/hlsl: Add additional semantic cascading tests. + tests: Test semantic cascading signatures. + vkd3d-shader/hlsl: Dump processed function bodies. + vkd3d-shader/ir: Validate flags in SAMPLE_INFO operations. + vkd3d-shader/ir: Validate flags in RESINFO operations. + vkd3d-shader/dxil: Use iterators in sm6_parser_globals_init(). + vkd3d-shader/hlsl: Use vsir_program_append() in sm1_generate_vsir_constant_defs(). + vkd3d-shader/hlsl: Use vsir_program_append() in sm1_generate_vsir_sampler_dcls(). + vkd3d-shader/hlsl: Use vsir_program_append() in generate_vsir_add_program_instruction(). + vkd3d-shader/ir: Use iterators in vsir_program_ensure_diffuse(). + vkd3d-shader/ir: Use iterators in vsir_program_remap_output_signature(). + vkd3d-shader/ir: Use iterators in instruction_array_normalise_hull_shader_control_point_io(). + vkd3d-shader/ir: Use iterators in vsir_program_normalise_flat_constants(). + vkd3d-shader/ir: Use iterators in vsir_program_normalise_io_registers(). + vkd3d-shader/ir: Remove the io_normaliser.instructions field. + vkd3d-shader/ir: Use iterators in vsir_program_remove_dead_code(). + vkd3d-shader/ir: Use iterators in cf_flattener_iterate_instruction_array(). + vkd3d-shader/ir: Use iterators in vsir_program_flatten_hull_shader_phases(). + vkd3d-shader/ir: Use iterators in vsir_program_materialise_phi_ssas_to_temps(). + vkd3d-shader/ir: Use iterators in vsir_program_insert_alpha_test(). + vkd3d-shader/ir: Use iterators in vsir_program_insert_clip_planes(). + vkd3d-shader/ir: Use iterators in vsir_program_insert_point_size(). + vkd3d-shader/ir: Use iterators in vsir_program_insert_point_size_clamp(). + vkd3d-shader/ir: Use iterators in vsir_program_insert_point_coord(). + vkd3d-compiler: Set a default target type even when preprocessing. -Giovanni Mascellani (104): - tests: Enable tessellation shaders in the Vulkan shader runner. - tests: Test I/O index ranges not intersecting a signature element for a given register. - vkd3d-shader/ir: Report errors in the I/O normaliser instead of asserting. - vkd3d-shader/ir: Use a structure to record range data in the I/O normaliser. - vkd3d-shader/ir: Handle index ranges that do not touch a signature element for each register. - vkd3d-shader/tpf: Allow I/O index ranges to not intersect a signature element for a given register. - vkd3d: Require extension VK_KHR_maintenance2. - vkd3d: Rename push_descriptor_set to root_descriptor_set. - vkd3d: Put all root descriptors in a single Vulkan descriptor set when using Vulkan heaps. - tests: Test embedding the root signature in shaders for graphics pipelines. - vkd3d: Take the root signature from shaders when creating graphics pipelines. - vkd3d/device: Require VK_KHR_zero_initialize_workgroup_memory when appropriate. - vkd3d: Split Vulkan debug messages. - vkd3d-shader/spirv: Emit immediate words for unhandled instructions. - tests/shader_runner: Allow selecting the executor. - tests/shader_runner: Allow selecting the compiler. - tests: Store the compiler string in the shader runner capabilities. - tests/shader_runner: Avoid creating devices for backends that won't execute. - vkd3d-shader/ir: Validate CONSTBUFFER registers. - vkd3d-shader/ir: Disallow CONSTBUFFER registers in destination parameters. - vkd3d-shader/ir: Disallow IMMCONSTBUFFER registers in destination parameters. - ci: Define VKD3D_TEST_DEBUG when running the CI scripts. - tests: Mark a few other timestamp query tests as buggy on MoltenVK. - tests: Mark two other tessellation tests as buggy on MoltenVK. - tests: Transition texture state to inherit aliased data. - tests: Mark a test about resource aliasing as todo on MoltenVK. - vkd3d-shader/spirv: Run the vsir passes before creating the SPIR-V generator. - vkd3d-shader/spirv: Immediately store a reference to the program in the SPIR-V generator. - vkd3d-shader/spirv: Do not store duplicate references to the signatures. - vkd3d-shader/spirv: Do not steal the instruction array from the vsir program. - vkd3d-shader: Represent descriptor information in the vsir program. - tests: Mark a queue synchronization test as buggy on MoltenVK. - tests: Mark an early depth stencil test as buggy on MoltenVK. - vkd3d-shader/ir: Validate register id and index for RESOURCE registers. - vkd3d-shader/ir: Validate register id and index for UAV registers. - vkd3d-shader/ir: Validate register id and index for SAMPLER registers. - vkd3d-shader/ir: Validate register id and index for CONSTBUFFER registers. - tests: Mark a number of test failures as buggy on macOS before Sequoia. - ci: Disable testing with DXC on macOS. - tests: Mark a todo as resolved on MoltenVK 1.2.12. - vkd3d-shader/msl: Set the prefix to "unknown" for unhandled shader types in msl_generator_init(). - tests/d3d12: Always set descriptor heaps. - tests/shader_runner: Always set descriptor heaps. - tests/shader_runner_metal: Handle multisampled 2D texture arrays properly. - tests/shader_runner_metal: Do not use shared buffers. - vkd3d-shader/msl: Access descriptors with a type-erased array. - tests/shader_runner_d3d11: Do not create CPU-readable multisample resolution textures. - tests: Create structured buffers with the appropriate stride. - vkd3d-shader: Represent resource data types as vkd3d_data_type in struct vkd3d_shader_descriptor_info1. - vkd3d-shader/d3d-asm: Expose the raw value if unknown in shader_dump_resource_type(). - vkd3d-shader/d3d-asm: Expose the raw value if unknown in shader_dump_data_type(). - vkd3d-shader/d3d-asm: Include the program descriptors when tracing vsir code. - vkd3d-shader/d3d-asm: Trace register names for I/O declarations. - vkd3d-shader: Describe the resource data types of samplers as NONE. - vkd3d-shader/ir: Validate descriptor types in vsir programs. - vkd3d-shader/ir: Validate descriptor resource types in vsir programs. - vkd3d-shader/ir: Validate descriptor resource data types in vsir programs. - vkd3d-shader/ir: Validate descriptor counts in vsir programs. - tests/shader_runner_d3d9: Request the adapter specified on the command line. - tests/hlsl: Do not test 16-bit out-of-bound SRV buffer reads. - tests/hlsl: Do not test 16-bit out-of-bound UAV writes. - tests/hlsl: Remove a test in which a function reads an "out" argument. - tests/hlsl: Do not test 16-bit out-of-bound varyings. - tests/hlsl: Do not test dst() on integer arguments with SM6. - tests/hlsl: Fix the precision for a 16-bit arithmetic test. - tests/hlsl: Do not test the implicit passthrough control point phase for SM6. - vkd3d-shader/ir: Validate that DEPTHOUT registers aren't used as sources. - vkd3d-shader/ir: Validate that DEPTHOUTGE registers aren't used as sources. - vkd3d-shader/ir: Validate that DEPTHOUTLE registers aren't used as sources. - tests/d3d12: Set the descriptor heap when clearing UAVs. - tests/d3d12: Check that B5G6R5_UNORM and B5G5R5A1_UNORM are supported before testing them. - tests/d3d12: Do not allow texture creation to fail when testing UAV uint clears. - tests/d3d12: Do not test out-of-bound UAV uint clears. - tests/d3d12: Do not validate the semantic of uint-clearing R11G11B10_FLOAT resources. - tests/d3d12: Skip testing NULL VBVs on NVIDIA on Windows. - vkd3d-shader/msl: Introduce msl_print_src(). - vkd3d-shader/msl: Introduce msl_print_bitcast(). - vkd3d-shader/msl: Use the standard helper to print bitcasts. - vkd3d-shader/dxil: Create vsir registers from DXIL handles when needed. - vkd3d-shader/dxil: Have sm6_parser_emit_reg_composite_construct() accept an array of registers. - vkd3d-shader/dxil: Introduce a uniform interface to synthesize a register from a SM6 value. - vkd3d-shader/dxil: Move the VSIR register in the SM6 value outside of the union. - vkd3d-shader/dxil: Generate SSA values in sm6_parser_get_value_idx_by_ref(). - vkd3d-shader/dxil: Generate SSA values in instruction_dst_param_init_ssa_vector(). - vkd3d-shader/dxil: Generate SSA values in instruction_dst_param_init_ssa_scalar(). - vkd3d-shader/dxil: Generate SSA values in sm6_parser_emit_atomicrmw(). - vkd3d-shader/dxil: Generate SSA values in sm6_parser_emit_binop(). - vkd3d-shader/dxil: Do not encode the offset twice for structured TGSM loads. - vkd3d-shader/dxil: Generate SSA values in sm6_parser_emit_dx_atomic_binop(). - vkd3d-shader/dxil: Generate SSA values in sm6_parser_emit_dx_sincos(). - vkd3d-shader/dxil: Generate SSA values in sm6_parser_emit_cmpxchg(). - vkd3d-shader/dxil: Generate SSA values in sm6_parser_emit_phi(). - vkd3d-shader/dxil: Generate UNDEFINED values in sm6_parser_constants_init(). - vkd3d-shader/dxil: Generate INVALID values in sm6_parser_constants_init(). - vkd3d-shader/dxil: Generate INVALID values in sm6_parser_emit_unhandled(). - vkd3d-shader/dxil: Rename VALUE_TYPE_ICB to VALUE_TYPE_DATA. - vkd3d-shader/dxil: Generate ICB values in sm6_parser_declare_icb(). - vkd3d-shader/dxil: Generate IDXTEMP values in sm6_parser_declare_indexable_temp(). - vkd3d-shader/dxil: Generate GROUPSHAREDMEM values in sm6_parser_declare_tgsm_raw(). - vkd3d-shader/dxil: Generate GROUPSHAREDMEM values in sm6_parser_declare_tgsm_structured(). - vkd3d-shader/dxil: Call register_get_float_value() directly in sm6_value_get_constant_float(). - tests: Expect success when creating resources in certain cases. - tests: Allow creating GPU upload heaps. - tests: Check that shader-visible descriptor heaps have a valid GPU descriptor handle start. +Giovanni Mascellani (251): + vkd3d-shader/dxil: Pass a reference to the SM6 parser to src_params_init_from_operands(). + vkd3d-shader/dxil: Pass a reference to the SM6 parser to src_param_init_from_value(). + vkd3d-shader/dxil: Pass a reference to the SM6 parser to sm6_register_from_value(). + vkd3d-shader/dxil: Reimplement aggregate indexing using specialized value types. + tests/hlsl: Test minimum precision stride in constant buffers. + tests/hlsl: Test minimum precision 16-bit unsigned integers. + tests/hlsl: Test minimum precision 16-bit signed integers. + tests/hlsl: Remove some tests from minimum-precision.shader_test. + tests/hlsl: Test casting doubles to minimum precision integers. + tests/hlsl: Test casting minimum precision integers to doubles. + tests/hlsl: Test casting 16-bit integers to doubles. + tests/hlsl: Test native 16-bit floating point numbers. + tests/hlsl: Test minimum precision floating point numbers. + tests/hlsl: Test minimum precision stride for signed integers too. + tests/hlsl: Test minimum precision stride for floating point numbers too. + tests/hlsl: Do not test for overflowing 16-bit texture sampling. + tests/hlsl: Mark a test in object-references.shader_test as todo on MoltenVK with DXIL. + tests/hlsl: Mark some tests in clip-cull-distance.shader_test as buggy on MoltenVK with d3d12. + tests/hlsl: Mark a test in gather-offset.shader_test as buggy on MoltenVK with d3d12. + tests/hlsl: Mark some tests in wave-ops-uint.shader_test as buggy on MoltenVK. + tests/hlsl: Mark some tests in wave-ops-int.shader_test as buggy on MoltenVK. + tests/hlsl: Mark some tests in uav-atomics.shader_test as working on MoltenVK. + ci: Really use DXC 1.8.2502 for macOS. + vkd3d-shader/dxil: Do not touch the parser current value in instruction_dst_param_init_temp_vector(). + vkd3d-shader/dxil: Generate CONSTANT values in sm6_parser_constants_init() for integer values. + vkd3d-shader/dxil: Generate CONSTANT values in sm6_parser_constants_init() for floating-point values. + vkd3d-shader/dxil: Generate specialized values in sm6_parser_constants_init() for casts. + vkd3d-shader/dxil: Generate CONSTANT values in sm6_parser_constants_init() for null scalars. + vkd3d-shader/dxil: Remove bitcast helpers. + tests/hlsl: Test sampling with minimum precision floating-point numbers. + tests/hlsl: Test the interstage interface for minimum precision types. + tests/hlsl: Use the appropriate RTV format in shader-interstage-interface.shader_test. + tests/hlsl: Add a test reading from a minimum precision signed integer array. + tests/hlsl: Add some more minimum precision floating-point tests. + tests/hlsl: Add a test reading from a minimum precision floating-point array. + tests/hlsl: Mark a test in sm6-uav-rwtexture.shader_test as todo on MoltenVK. + tests/hlsl: Mark a test in register-reservation-resources.shader_test as todo on MoltenVK with DXIL. + tests/hlsl: Mark a test in entry-point-semantics.shader_test as buggy on MoltenVK with DXIL. + tests/hlsl: Mark some tests in geometry.shader_test as buggy on MoltenVK. + tests/hlsl: Mark some tests in wave-ops-float.shader_test as buggy on MoltenVK. + vkd3d-shader/glsl: Accept and ignore the REFACTORING_ALLOWED global flag. + vkd3d-shader/msl: Accept and ignore the REFACTORING_ALLOWED global flag. + vkd3d-shader/glsl: Ignore the PARTIALPRECISION destination modifier. + vkd3d-shader/msl: Ignore the PARTIALPRECISION destination modifier. + tests: Add a test for the ABSNEG source modifier. + vkd3d-shader/glsl: Support the ABSNEG source modifier. + vkd3d-shader/msl: Support the ABSNEG source modifier. + vkd3d-shader/dxil: Do not use field "reg" in of sm6_value when writing bitcasts. + vkd3d-shader/dxil: Validate that floating-point truncation casts decrease bit width. + vkd3d-shader/dxil: Validate that integer extension casts increase bit width. + vkd3d-shader/dxil: Validate that floating-point extension casts increase bit width. + vkd3d-shader/dxil: Handle 16-bit values uniformly in sm6_map_cast_op(). + tests: Mark some tests in arithmetic-int-uniform.shader_test as buggy on MoltenVK < 1.2.11. + tests: Mark some tests in calculate-lod.shader_test as buggy on MoltenVK < 1.2.11. + ci: Enable testing with DXC again on macOS. + tests/hlsl: Test minimum precision IDXTEMP registers. + vkd3d-shader/hlsl: Reject programs with group shared variables. + tests/hlsl: Test some quirks of TGSMs with SM < 5.0. + tests/hlsl: Test TGSMs with minimum precision unsigned integers. + vkd3d-shader/dxil: Generate specialized values in sm6_parser_emit_cast() for trivial casts. + vkd3d-shader/dxil: Represent non uniformness in the SM6 value. + vkd3d-shader/dxil: Store a SM6 value in sm6_phi. + vkd3d-shader/dxil: Do not set the value type in sm6_parser_declare_global(). + vkd3d-shader/dxil: Do not set the value type in sm6_parser_function_init(). + tests: Skip test_graphics_compute_queue_synchronization() on paravirtualized MoltenVK. + tests: Add a test about discontiguous input swizzles in bytecode format. + tests: Fix the shader model requirements for a ps_5_0 shader. + vkd3d-shader/dxil: Rewrite sm6_value_is_constant() in terms of the value type. + vkd3d-shader/dxil: Rewrite sm6_value_is_undef() in terms of the value type. + vkd3d-shader/dxil: Rewrite sm6_value_is_ssa() in terms of the value type. + vkd3d-shader/dxil: Rewrite sm6_value_get_constant_uint() in terms of the SM6 value. + vkd3d-shader/dxil: Rewrite sm6_value_get_constant_uint64() in terms of the SM6 value. + vkd3d-shader/dxil: Rewrite sm6_value_is_constant_zero() in terms of the SM6 value. + vkd3d-shader/dxil: Rewrite sm6_parser_init_ssa_value() in terms of the SM6 value. + vkd3d-shader/dxil: Introduce sm6_value_get_constant_float(). + vkd3d-shader/dxil: Remove field "reg" from struct sm6_value. + vkd3d-shader/dxil: Emit 16-bit CONSTANT values as minimum precision registers. + vkd3d-shader/dxil: Emit 16-bit arrays as minimum precision types. + vkd3d-shader/dxil: Emit 16-bit IDXTEMP values as minimum precision registers. + vkd3d-shader/dxil: Emit 16-bit SSA values as minimum precision registers. + vkd3d-shader/dxil: Emit 16-bit ICB values as minimum precision registers. + vkd3d-shader/ir: Rename VKD3D_SHADER_ERROR_VSIR_INVALID_HANDLER to VKD3D_SHADER_ERROR_VSIR_INVALID_OPCODE. + vkd3d-shader/dxil: Allow constant zero values to be floating point. + vkd3d-shader/dxil: Emit 16-bit raw TGSMs as minimum precision. + vkd3d-shader/dxil: Emit 16-bit structured TGSMs as minimum precision. + vkd3d-shader/dxil: Emit 16-bit GROUPSHAREDMEM values as minimum precision registers. + vkd3d-shader/dxil: Emit 16-bit UNDEFINED and INVALID values as minimum precision registers. + vkd3d-shader/ir: Validate ABS instructions. + vkd3d-shader/ir: Validate ACOS instructions. + vkd3d-shader/ir: Validate ADD instructions. + vkd3d-shader/ir: Validate AND instructions. + vkd3d-shader/ir: Validate ASIN instructions. + vkd3d-shader/ir: Validate ATAN instructions. + tests: Add a test for the partial precision destination modifier. + vkd3d-shader/ir: Validate data types for NEG source modifiers. + vkd3d-shader/ir: Validate data types for BIAS source modifiers. + vkd3d-shader/ir: Validate data types for BIASNEG source modifiers. + vkd3d-shader/ir: Validate data types for SIGN source modifiers. + vkd3d-shader/ir: Validate data types for SIGNNEG source modifiers. + vkd3d-shader/ir: Introduce opcode COS. + vkd3d-shader/ir: Introduce opcode SIN. + vkd3d-shader/ir: Lower d3dbc SINCOS to the new COS and SIN instructions. + vkd3d-shader/ir: Lower tpf SINCOS to the new COS and SIN instructions. + vkd3d-shader/ir: Validate DADD instructions. + vkd3d-shader/ir: Validate DDIV instructions. + vkd3d-shader/ir: Validate DFMA instructions. + vkd3d-shader/ir: Validate DGEO instructions. + vkd3d-shader/ir: Validate DIV instructions. + vkd3d-shader/ir: Validate DLT instructions. + vkd3d-shader/ir: Validate DMAX instructions. + vkd3d-shader/ir: Validate DMIN instructions. + vkd3d-shader/ir: Validate DMOV instructions. + vkd3d-shader/ir: Validate DMUL instructions. + vkd3d-shader/ir: Validate data types for COMP source modifiers. + vkd3d-shader/ir: Validate data types for X2 source modifiers. + vkd3d-shader/ir: Validate data types for X2NEG source modifiers. + vkd3d-shader/ir: Validate data types for DZ source modifiers. + vkd3d-shader/ir: Validate data types for DW source modifiers. + vkd3d-shader/ir: Introduce VKD3DSIH_IMUL_LOW. + vkd3d-shader/ir: Lower IMUL and UMUL to IMUL_LOW. + vkd3d-shader/ir: Validate data types for ABS source modifiers. + vkd3d-shader/ir: Validate data types for ABSNEG source modifiers. + vkd3d-shader/ir: Validate data types for NOT source modifiers. + vkd3d-shader/ir: Validate data types for SATURATE destination modifiers. + vkd3d-shader/ir: Validate data types for destination shifts. + vkd3d-shader/ir: Validate DNE instructions. + vkd3d-shader/ir: Validate DRCP instructions. + vkd3d-shader/ir: Validate DSX instructions. + vkd3d-shader/ir: Validate DSX_COARSE instructions. + vkd3d-shader/ir: Validate DSX_FINE instructions. + vkd3d-shader/ir: Validate DSY instructions. + vkd3d-shader/ir: Validate DSY_COARSE instructions. + vkd3d-shader/ir: Validate DSY_FINE instructions. + vkd3d-shader/ir: Do not crash when registers cannot be resolved to signature elements. + vkd3d-shader/ir: Introduce VSIR_OP_IREM. + vkd3d-shader/ir: Repurpose IDIV to compute plain signed division. + vkd3d-shader/ir: Introduce VSIR_OP_UDIV_SIMPLE. + vkd3d-shader/ir: Introduce VSIR_OP_UREM. + vkd3d-shader/ir: Lower UDIV to UDIV_SIMPLE and UREM. + vkd3d-shader/ir: Validate EQO instructions. + vkd3d-shader/ir: Validate DEQO instructions. + vkd3d-shader/ir: Validate EQU instructions. + vkd3d-shader/ir: Validate EXP instructions. + vkd3d-shader/ir: Validate FRC instructions. + vkd3d-shader/ir: Validate FREM instructions. + vkd3d-shader/ir: Validate GEO instructions. + vkd3d-shader/ir: Validate GEU instructions. + vkd3d-shader/ir: Test the data type when validating comparison operations. + tests/hlsl: Test int64 comparisons. + tests/hlsl: Test uint64 comparisons. + vkd3d-shader/ir: Validate HCOS instructions. + vkd3d-shader/ir: Validate HSIN instructions. + vkd3d-shader/ir: Validate HTAN instructions. + vkd3d-shader/ir: Validate IADD instructions. + vkd3d-shader/ir: Validate IEQ instructions. + vkd3d-shader/ir: Validate IGE instructions. + vkd3d-shader/ir: Validate ILT instructions. + vkd3d-shader/ir: Collect the hull shader phase flattener code together. + vkd3d-shader/ir: Handle SSA registers when flattening hull shader phases. + vkd3d-shader/ir: Do not make a local copy of the instructions array in vsir_program_flatten_hull_shader_phases(). + vkd3d: Move vkd3d_vk_descriptor_set_index_from_vk_descriptor_type() to resource.c. + vkd3d/resource: Write null descriptors with their correct type when using mutable descriptor types. + vkd3d-shader/ir: Validate descriptor flags in vsir programs. + vkd3d-shader/ir: Validate UAV flags in vsir programs. + vkd3d-shader/ir: Validate IMAD operations. + vkd3d-shader/ir: Validate IMAX operations. + vkd3d-shader/ir: Validate IMIN operations. + vkd3d-shader/ir: Validate INE operations. + vkd3d-shader/ir: Validate INEG operations. + vkd3d-shader/ir: Validate IREM operations. + vkd3d-shader/ir: Validate ISHL operations. + vkd3d-shader/ir: Validate ISHR operations. + vkd3d-shader/ir: Introduce an abstraction to iterate through vsir instructions. + vkd3d-shader/ir: Use the iterator in vsir_program_lower_ifc(). + vkd3d-shader/ir: Use the iterator in vsir_program_lower_texkill(). + vkd3d-shader/ir: Use the iterator in vsir_program_lower_precise_mad(). + vkd3d-shader/ir: Sort vsir_validator_instructions[] alphabetically. + vkd3d-shader/ir: Validate ISFINITE operations. + vkd3d-shader/ir: Validate ISINF operations. + vkd3d-shader/ir: Validate ISNAN operations. + vkd3d-shader/ir: Validate ITOF operations. + vkd3d-shader/ir: Validate ITOI operations. + vkd3d-shader/ir: Validate FTOI operations. + vkd3d-shader/ir: Validate FTOU operations. + vkd3d-shader/ir: Set dimension to VEC4 when converting SSAs to TEMPs. + vkd3d-shader/ir: Do not print a message for registers that are not being allocated. + vkd3d-shader/ir: Use the iterator in vsir_program_lower_udiv(). + vkd3d-shader/ir: Use the iterator in vsir_program_lower_sm1_sincos(). + vkd3d-shader/ir: Use the iterator in vsir_program_lower_sm4_sincos(). + vkd3d-shader/ir: Use the iterator in vsir_program_lower_texldp(). + vkd3d-shader/ir: Validate LOG operations. + vkd3d-shader/ir: Validate LTO operations. + vkd3d-shader/ir: Validate LTU operations. + vkd3d-shader/ir: Validate MAD operations. + vkd3d-shader/ir: Validate MAX operations. + vkd3d-shader/ir: Validate MIN operations. + vkd3d-shader/ir: Validate MUL operations. + vkd3d-shader/ir: Check that LOCALTHREADINDEX registers have dimension VEC4. + vkd3d-shader/ir: Check that COVERAGE registers have dimension VEC4. + vkd3d-shader/ir: Check that DEPTHOUT registers have dimension SCALAR. + vkd3d-shader/ir: Check that DEPTHOUTGE registers have dimension SCALAR. + vkd3d-shader/ir: Check that DEPTHOUTLE registers have dimension SCALAR. + vkd3d-shader/ir: Check that LOCALTHREADID registers have dimension VEC4. + vkd3d-shader/ir: Check that THREADGROUPID registers have dimension VEC4. + vkd3d-shader/ir: Update the program TEMP count when allocating TEMP registers. + vkd3d-shader/ir: Split updating DCL_TEMPS instructions to a dedicated pass. + vkd3d-shader/ir: Check that THREADID registers have dimension VEC4. + vkd3d-shader/ir: Check that SAMPLEMASK registers have dimension SCALAR. + vkd3d-shader/ir: Check that GSINSTID registers have dimension SCALAR. + vkd3d-shader/ir: Check that OUTPOINTID registers have dimension SCALAR. + vkd3d-shader/ir: Check that PRIMID registers have dimension SCALAR. + vkd3d-shader/ir: Check that OUTSTENCILREF registers have dimension SCALAR. + vkd3d-shader/ir: Introduce vsir_program_append(). + vkd3d-shader/tpf: Use iterators in tpf_write_program(). + vkd3d-shader/spirv: Use iterators in spirv_compiler_generate_spirv(). + vkd3d-shader/msl: Use iterators in msl_generator_generate(). + vkd3d-shader/glsl: Use iterators in vkd3d_glsl_generator_generate(). + vkd3d-shader/d3d-asm: Use iterators in d3d_asm_compile(). + vkd3d-shader/d3dbc: Use vsir_program_append() in d3dbc_parse(). + vkd3d-shader/d3dbc: Use iterators in d3dbc_write_program_instructions(). + vkd3d-shader/ir: Validate NEO operations. + vkd3d-shader/ir: Validate NEU operations. + vkd3d-shader/ir: Validate NOT operations. + vkd3d-shader/ir: Validate OR operations. + vkd3d-shader/ir: Validate ORD instructions. + vkd3d-shader/ir: Validate RCP instructions. + vkd3d-shader/ir: Validate ROUND_NE instructions. + vkd3d-shader/ir: Validate ROUND_NI instructions. + vkd3d-shader/ir: Use size_t in the parameter allocator. + vkd3d-shader/ir: Use size_t in the instruction array. + vkd3d-shader: Use size_t in the string buffer. + vkd3d-shader/msl: Ignore the interpolation mode for output variables. + vkd3d-shader/msl: Emit indexable temps with the appropriate component count. + vkd3d-shader/msl: Use the union type for SAMPLEMASK registers. + vkd3d-shader/msl: Reject shaders with duplicate I/O target locations. + vkd3d-shader/msl: Convert the results of load and sample operations to the destination data type. + vkd3d-shader/dxil: Emit gather offsets as signed. + vkd3d-shader/d3d-asm: Emit precise flags for a number of opcodes. + vkd3d-shader/spirv: Support precise flags on RESINFO instructions. + vkd3d-shader/spirv: Support precise flags on SAMPLE_INFO instructions. + tests/hlsl: Test SV_GSInstanceID. + vkd3d-shader/ir: Check that GSINSTID registers have dimension VEC4. + vkd3d-shader/hlsl: Reject geometry shaders with instance count. + vkd3d-shader: Use iterators in vsir_program_scan(). + vkd3d-shader/ir: Use iterators in vsir_program_normalize_addr(). + vkd3d-shader/ir: Use iterators in vsir_program_ensure_ret(). + vkd3d-shader: Use the structure names when creating the parameter allocators. + vkd3d-shader: Enable converting DXIL to MSL. + vkd3d-shader/msl: Allocate SSA registers to temporaries. + tests/shader_runner_metal: Allow checking shader model 5.1 too. + tests/shader_runner_metal: Run the Metal shader runner with DXIL shaders. -Henri Verbeet (58): - vkd3d-shader/dxbc: Update the vkd3d_shader_parse_input_signature() documentation for dxbc-dxil shaders. - vkd3d-shader/dxil: Avoid using the I/O signatures from the DXBC container. - vkd3d-shader/dxbc: Do not extract I/O signatures for DXIL shaders. - tests: Add a signature reflection test for arrayed inputs and outputs. - vkd3d-shader: Handle arrayed elements in vkd3d_shader_signature_from_shader_signature(). - vkd3d: Avoid vkd3d_shader_parse_input_signature(). - vkd3d-shader/dxbc: Set the "elements_capacity" field as well in shader_parse_signature(). - vkd3d-shader/dxbc: Output messages for invalid semantic name references in shader_parse_signature(). - vkd3d-shader/dxbc: Validate component types in shader_parse_signature(). - vkd3d-shader/dxil: Generate I/O signatures with 16-bit component types for native 16-bit shaders. - tests: Add a shader model 6 signature reflection test for different types. - vkd3d-shader: Enable DXIL support in the default configuration. - vkd3d-shader/fx: Use vkd3d_string_buffer_print_f32() in parse_fx_4_numeric_value(). - ci: Install libjson-perl. - vkd3d-shader/spirv: Do not sign-extend *ptr in vkd3d_spirv_build_string(). - vkd3d-shader/fx: Output error messages for invalid sizes. - vkd3d-shader/fx: Handle parser failures in fx_parse(). - vkd3d-shader/spirv: Implement outputting instruction offsets. - vkd3d-shader/spirv: Implement outputting opcode names. - vkd3d-shader/spirv: Handle "IdRef" operands. - vkd3d-shader/spirv: Handle "IdResult" operands. - vkd3d-shader/spirv: Handle "IdResultType" operands. - vkd3d-shader/spirv: Handle "LiteralInteger" operands. - vkd3d-shader/spirv: Handle "LiteralString" operands. - vkd3d-shader/spirv: Handle "ValueEnum" operands. - vkd3d-shader/spirv: Handle "BitEnum" operands. - build: Get rid of some redundant instances of "checking" in AC_MSG_CHECKING messages. - demos: Add copyright headers to the HLSL shaders. - tests/hlsl: Add another constant folding test. - vkd3d-shader/hlsl: Do not collect expressions across different operations in hlsl_normalize_binary_exprs(). - vkd3d-shader/glsl: Implement VKD3DSIH_XOR. - build: Add @DL_LIBS@ to tests_vkd3d_shader_api_LDADD. - demos: Add basic DPI handling. - demos: Get rid of some unused includes. - demos: Move the vkd3d parts of demo_xcb.h into a separate header. - tests/shader_runner: Get rid of enum texture_data_type. - vkd3d-shader/d3d-asm: Include the I/O signatures when tracing vsir code. - vkd3d-shader/spirv: We can parse up to SPIR-V 1.6. - build: Do not add libvkd3d-shader.la to DEMOS_LDADD twice. - ci: Install mingw-w64-tools in the Linux image. - demos: Split demo_win32.h. - demos: Make the demos work in the Windows build. - vkd3d: Introduce struct vkd3d_null_event. - vkd3d: Introduce d3d12_fence_add_waiting_event(). - tests/d3d12: Test ID3D12Device1_SetEventOnMultipleFenceCompletion(). - vkd3d: Validate the fence count in d3d12_device_SetEventOnMultipleFenceCompletion(). - vkd3d: Handle single fence waits in d3d12_device_SetEventOnMultipleFenceCompletion(). - vkd3d: Handle multiple fence ALL waits in d3d12_device_SetEventOnMultipleFenceCompletion(). - vkd3d: Handle multiple fence ANY waits in d3d12_device_SetEventOnMultipleFenceCompletion(). - vkd3d: Handle multiple fence NULL event waits in d3d12_device_SetEventOnMultipleFenceCompletion(). - demos: Make the demos work in the macOS build. - demos: Avoid objc_msgSend_fpret() on ARM64 macOS. - ci: Build the demos on macOS. - demos: Build with -fno-lto. - build: Sort the $(vkd3d_shader_tests) list. - vkd3d-shader/dxil: Document the supported dxbc-dxil transformations. - build: Add the SPIR-V grammar JSON to the distribution. - build: Add the Objective-C API JSON to the distribution. +Henri Verbeet (148): + vkd3d-shader: Also output vkd3d_shader_verror() messages using WARN. + vkd3d-shader: Also output vkd3d_shader_vwarning() messages using WARN. + vkd3d-shader: Also output vkd3d_shader_vnote() messages using WARN. + vkd3d-shader: Remove some newlines from vkd3d-shader error messages. + tests/shader_runner_metal: Try harder to find a suitable device. + tests/shader_runner_d3d11: Direct3D 11 supports geometry shaders. + tests/hlsl: Require the "geometry-shader" cap for the relevant clip/cull-distance tests. + tests/hlsl: Get rid of a MSL todo in geometry.shader_test. + tests/hlsl: Slightly adjust the bias values in the sample-bias tests. + vkd3d-shader: Move vkd3d_siv_from_sysval_indexed() to hlsl_codegen.c. + vkd3d-shader/msl: Make the generated main function static. + tests/shader_runner: Introduce a "tessellation-shader" cap. + vkd3d-shader/msl: Ensure we have a non-NULL "resource_type_info" pointer in msl_ld(). + vkd3d-shader/msl: Reject cube and multi-sample texel fetches in msl_ld(). + vkd3d-shader/msl: Get rid of the "lod" field of struct msl_resource_type_info. + vkd3d-shader/msl: Slightly improve the error messages for unspecified descriptor bindings. + vkd3d-shader/msl: Continue when the SRV descriptor binding isn't specified in msl_ld(). + vkd3d-shader/msl: Implement support for indirect constant buffer addressing. + vkd3d-shader/msl: Handle SV_POSITION inputs. + vkd3d-shader/msl: Handle SV_VERTEX_ID inputs. + vkd3d-shader/msl: Simplify SV_DEPTH handling. + tests/shader_runner_metal: Implement multi-sample readback. + tests/shader_runner_metal: Set the pipeline sample count in metal_runner_draw(). + vkd3d-shader/msl: Handle SV_SAMPLE_INDEX inputs. + vkd3d-shader/msl: Implement support for VKD3DSPR_IDXTEMP registers. + vkd3d-shader/msl: Implement support for VKD3DSPR_SAMPLEMASK registers. + vkd3d-shader/msl: Implement VKD3DSIH_EQO. + vkd3d-shader/msl: Implement VKD3DSIH_IADD. + vkd3d-shader/msl: Implement VKD3DSIH_IGE. + vkd3d-shader/ir: Introduce vsir_opcode_get_name(). + vkd3d-shader/d3dbc: Use vsir_opcode_get_name() in shader_sm1_get_opcode_info_from_vsir_instruction(). + vkd3d-shader/d3dbc: Use vsir_opcode_get_name() in d3dbc_write_vsir_instruction(). + vkd3d-shader/glsl: Use vsir_opcode_get_name() in shader_glsl_unhandled(). + vkd3d-shader/ir: Use vsir_opcode_get_name() in vsir_program_lower_instructions(). + vkd3d-shader/msl: Implement VKD3DSIH_ILT. + vkd3d-shader/msl: Implement VKD3DSIH_IMUL. + vkd3d-shader/msl: Implement loops. + vkd3d-shader/msl: Implement switches. + vkd3d-shader/msl: Implement VKD3DSIH_DISCARD. + tests/shader_runner: Rename the "ri64" probe format to "i64". + tests/shader_runner: Introduce the "u64" probe format. + tests/shader_runner: Introduce the "f64" probe format. + tests/shader_runner: Introduce the "i32" probe format. + tests/shader_runner: Introduce the "u32" probe format. + tests/shader_runner: Introduce the "f32" probe format. + demos: Allow Vulkan to determine the swapchain image count. + vkd3d-shader/msl: Implement VKD3DSIH_INEG. + vkd3d-shader/msl: Implement VKD3DSIH_ULT. + vkd3d-shader/msl: Implement VKD3DSIH_XOR. + tests/shader_runner_metal: Implement resource copies. + vkd3d-shader/msl: Implement VKD3DSIH_LD2DMS. + vkd3d-shader/ir: Use vsir_opcode_get_name() in the validator. + vkd3d-shader/msl: Use vsir_opcode_get_name() in msl_unhandled(). + vkd3d-shader/spirv: Use vsir_opcode_get_name() in spirv_compiler_handle_instruction(). + vkd3d-shader/spirv: Use vsir_opcode_get_name() in spirv_compiler_emit_atomic_instruction(). + vkd3d-shader/spirv: Use vsir_opcode_get_name() in spirv_compiler_emit_sample(). + demos: Print the GPU and platform we're running on. + demos: Map the Win32 A-Z keys to a-z. + vkd3d-shader/spirv: Use vsir_opcode_get_name() in spirv_compiler_emit_deriv_instruction(). + vkd3d-shader/spirv: Use vsir_opcode_get_name() in spirv_compiler_emit_comparison_instruction(). + vkd3d-shader/spirv: Use vsir_opcode_get_name() in spirv_compiler_emit_bitfield_instruction(). + vkd3d-shader/spirv: Use vsir_opcode_get_name() in spirv_compiler_emit_ext_glsl_instruction(). + vkd3d-shader/spirv: Use vsir_opcode_get_name() in spirv_compiler_emit_alu_instruction(). + demos: Introduce a helper function to create a projection matrix. + vkd3d-shader/spirv: Emit an OpSource instruction with the source name. + vkd3d: Use the DXBC checksum to construct a shader source name. + demos/teapot: Add a tessellation demo. + vkd3d-shader/msl: Implement VKD3DSIH_SAMPLE. + vkd3d-shader/msl: Implement VKD3DSIH_SAMPLE_B. + vkd3d-shader/msl: Implement VKD3DSIH_SAMPLE_C. + vkd3d-shader/msl: Implement VKD3DSIH_SAMPLE_C_LZ + vkd3d-shader/msl: Implement VKD3DSIH_SAMPLE_GRAD. + vkd3d-shader/spirv: Do not require VKD3D_SHADER_BINDING_FLAG_IMAGE for sampler descriptors. + vkd3d-shader/d3dbc: Use TAG_CTAB in d3dbc_compile(). + demos/teapot: Add on-screen help. + vkd3d-shader/msl: Implement VKD3DSIH_SAMPLE_LOD. + vkd3d-shader/msl: Implement VKD3DSIH_GATHER4. + vkd3d-shader/msl: Implement VKD3DSIH_GATHER4_C. + vkd3d-shader/msl: Implement VKD3DSIH_GATHER4_PO. + vkd3d-shader/msl: Implement support for static texel offsets in msl_sample(). + vkd3d-shader/ir: Rename the VKD3DSIH_* enum elements to VSIR_OP_*. + vkd3d-shader/msl: Implement VSIR_OP_CONTINUE. + vkd3d-shader/msl: Implement VSIR_OP_DSX and VSIR_OP_DSY. + vkd3d-shader/msl: Implement VSIR_OP_DSX_COARSE and VSIR_OP_DSY_COARSE. + vkd3d-shader/msl: Implement VSIR_OP_DSX_FINE and VSIR_OP_DSY_FINE. + vkd3d-shader/msl: Implement VSIR_OP_IMAX. + vkd3d-shader/ir: Create SSA values with the corresponding dimension in vsir_program_lower_sm4_sincos(). + vkd3d-shader/ir: Create SSA values with the corresponding dimension in vsir_program_lower_udiv(). + demos/teapot: Add an fps counter. + vkd3d-shader/msl: Implement VSIR_OP_UMAX and VSIR_OP_UMIN. + tests/shader_runner_metal: Implement buffer textures. + vkd3d-shader/msl: Implement VSIR_OP_STORE_UAV_TYPED. + vkd3d-shader/msl: Implement VKD3DSGF_FORCE_EARLY_DEPTH_STENCIL. + tests/shader_runner_gl: Implement geometry shaders. + demos/teapot: Add diffuse lighting. + demos/teapot: Add a flat shading toggle. + vkd3d-shader/ir: Rename enum vkd3d_data_type to vsir_data_type. + vkd3d-shader/ir: Rename VKD3D_DATA_HALF to VSIR_DATA_F16. + vkd3d-shader/ir: Rename VKD3D_DATA_FLOAT to VSIR_DATA_F32. + vkd3d-shader/ir: Rename VKD3D_DATA_DOUBLE to VSIR_DATA_F64. + demos/teapot: Animate the camera. + vkd3d-shader/ir: Rename VKD3D_DATA_INT to VSIR_DATA_I32. + vkd3d-shader/ir: Rename VKD3D_DATA_UINT8 to VSIR_DATA_U8. + vkd3d-shader/ir: Rename VKD3D_DATA_UINT16 to VSIR_DATA_U16. + vkd3d-shader/ir: Rename VKD3D_DATA_UINT to VSIR_DATA_U32. + vkd3d-shader/ir: Rename VKD3D_DATA_UINT64 to VSIR_DATA_U64. + vkd3d-shader/ir: Consistently use VKD3D_DATA_UNUSED for STREAM registers. + vkd3d-shader/ir: Rename VKD3D_DATA_UNORM to VSIR_DATA_UNORM. + vkd3d-shader/ir: Rename VKD3D_DATA_SNORM to VSIR_DATA_SNORM. + vkd3d-shader/ir: Rename VKD3D_DATA_OPAQUE to VSIR_DATA_OPAQUE. + vkd3d-shader/ir: Rename VKD3D_DATA_MIXED to VSIR_DATA_MIXED. + vkd3d-shader/ir: Rename VKD3D_DATA_CONTINUED to VSIR_DATA_CONTINUED. + vkd3d-shader/ir: Rename VKD3D_DATA_UNUSED to VSIR_DATA_UNUSED. + vkd3d-shader/ir: Rename VKD3D_DATA_BOOL to VSIR_DATA_BOOL. + vkd3d-shader/ir: Explicitly initialise the "resource_data_type" field in vsir_instruction_init(). + vkd3d-shader/spirv: Use spirv_compiler_error() to report unhandled sample_info flags. + vkd3d-shader/spirv: Use spirv_compiler_error() to report unhandled resinfo flags. + vkd3d-shader/ir: Consistently use VSIR_DATA_U32 for sample_info_uint destination operands. + vkd3d-shader/ir: Consistently use VSIR_DATA_U32 for resinfo_uint destination operands. + vkd3d-shader/hlsl: Get rid of the "hlsl" argument to hlsl_compile_shader(). + vkd3d-shader/tpf: Update the comment describing the data type mapping in init_sm4_lookup_tables(). + vkd3d-shader/ir: Allow source operands of shift operations to have different data types. + vkd3d-shader/hlsl: Emit vsir from hlsl_emit_bytecode(). + vkd3d-shader: Call vsir_program_scan() for d3d-asm targets in vsir_program_compile(). + vkd3d-shader/spirv: Emit OpLine instructions. + demos/teapot: Add specular lighting. + vkd3d-shader/hlsl: Introduce hlsl_compile_effect(). + vkd3d-shader/hlsl: Initialise the vsir program in hlsl_emit_vsir(). + vkd3d-shader/hlsl: Generate vsir signatures in hlsl_emit_vsir(). + vkd3d-shader/spirv: Update the SPIR-V grammar JSON to the vulkan-sdk-1.4.313.0 release. + vkd3d-shader/ir: Free program parameters on failure in vsir_program_init() if needed. + include: Remove some redudant TAG_* definintions from vkd3d_shader_util.h. + vkd3d: Set the maximum viewport count in d3d12_pipeline_state_get_or_create_pipeline(). + vkd3d-shader/ir: Use vsir_program_append() in vsir_program_ensure_ret(). + tests/shader_runner: Parse hex blobs as a list of 32-bit integers. + tests: Strip reflection data from dxbc-tpf-hex shaders. + tests/d3d12: Check whether the d3d12 device supports geometry shaders. + tests/shader_runner_d3d12: Check whether the d3d12 device supports geometry shaders. + vkd3d-shader: Cleanup the vsir program on vsir_program_transform_early() failure in vsir_parse(). + vkd3d-shader: Introduce struct vkd3d_shader_source_list. + vkd3d-shader/hlsl: Pass a vkd3d_shader_source_list pointer to hlsl_ctx_init(). + vkd3d-shader/hlsl: Initialise the vsir program in hlsl_compile_shader(). + vkd3d-shader/hlsl: Return a vsir program from hlsl_compile_shader(). + vkd3d-shader/hlsl: Support HLSL sources in vkd3d_shader_scan(). + vkd3d-shader/spirv: Avoid emitting duplicate built-in inputs in spirv_compiler_emit_input(). + vkd3d-shader/d3d-asm: Resolve SSA values when outputting SM<6 assembly. + vkd3d-shader/glsl: Resolve SSA values. + vkd3d-shader: Document that vkd3d_shader_scan() supports HLSL sources. -Nikolay Sivov (23): - vkd3d-shader/preproc: Do not attempt to load empty included files. - vkd3d-shader/fx: Implement parsing complex value and index expressions. - vkd3d-shader/fx: Improve state object nesting for the fx -> text output. - vkd3d-shader/fx: Fix condition when printing literal constant arguments. - vkd3d-shader/fx: Parse technique and pass blocks for fx_2_0. - vkd3d-shader/fx: Add support for parsing fx_2_0 annotations. - vkd3d-shader/fx: Fix const strings array types. - vkd3d-shader/fx: Add support for parsing fx_2_0 parameters. - vkd3d-shader/fx: Add support for parsing numeric states in fx_2_0 passes. - vkd3d-shader/fx: Output object initialiser IDs for fx_2_0. - vkd3d-shader/fx: Print string object entries for fx_2_0. - vkd3d-shader/fx: Add a helper to escape printed strings. - vkd3d-shader/fx: Read fx_2_0 assignment data outside of its dumping helper. - vkd3d-shader/fx: Add support for parsing fx_2_0 sampler states. - vkd3d-shader/fx: Add support for dumping fx_2_0 shader blobs. - vkd3d-shader/fx: Dump complex state value blobs for fx_2_0. - vkd3d-shader/fx: Support dumping parameter and array selector assignments for fx_2_0. - vkd3d-shader/fx: Pad fx_2_0 object data blobs with zeroes. - vkd3d-shader/fx: Set GeometryShader state type as an object type. - vkd3d-shader/fx: Accept int(0) as well as uint(0) constant value for object-type states. - tests: Add a fx_4_1 compilation test for the BlendState states. - vkd3d-shader/fx: Use the same BlendState states description for both fx_4_1 and fx_5_0. - vkd3d-shader/fx: Use appropriate BlendState description when tracing. +Nikolay Sivov (45): + vkd3d-shader/fx: Handle nameless structure types. + vkd3d-shader/fx: Use the correct value range for bool initializers. + vkd3d-shader/fx: Use the correct field indices when writing structure default values. + vkd3d-shader/fx: Fix the total buffer size calculation in write_fx_4_buffer(). + vkd3d-shader/fx: Fix writing fx_2_0 structure parameters. + vkd3d-shader/fx: Use variable unpacked size when setting buffer sizes. + vkd3d-shader/fx: Print explicit buffer bind points in fx -> d3d-asm output. + vkd3d-shader/fx: Print packoffset() modifiers in fx -> d3d-asm output. + vkd3d-shader/fx: Fix some typos in fx_2_0 state names. + vkd3d-shader/fx: Use correct array sizes for the fx_2_0 states. + vkd3d-shader/fx: Fix reading the assignment value base type when parsing fx_2_0. + vkd3d-shader/fx: Fix a crash in fx -> d3d-asm when named values are not defined. + vkd3d-shader/fx: Handle bool types when parsing fx_2_0 assignment values. + vkd3d-shader/fx: Add a few missing fxlc opcode names. + vkd3d-shader/fx: Do not print padding bytes of fx_2_0 strings. + vkd3d-shader/fx: Use a separate table for sampler states in fx_2_0. + vkd3d-shader/fx: Give fxlvm-specific constants a version-neutral name. + vkd3d-shader/fx: Use a version-neutral name for the opcode table. + vkd3d-shader/fx: Read instruction arguments in full before printing them. + vkd3d-shader/fx: Use more generic names for the literal constant array. + vkd3d-shader/fx: Add a helper to print literals. + vkd3d-shader/fx: Rename the constant argument helper to be version-neutral. + vkd3d-shader/fx: Parse array selector expressions for fx_2_0. + vkd3d-shader/fx: Remove the unused fx_4_fxlc_argument type. + vkd3d-shader/fx: Explicitly check all known state assignment types for fx_2_0. + vkd3d-shader/fx: Output value expressions for fx_2_0. + vkd3d-shader/fx: Output indirect register access in arguments. + vkd3d-shader/fx: Add the "noise" opcode name. + vkd3d-shader/fx: Add support for tx -> text output. + vkd3d-shader/d3dbc: Use the actual instruction length in d3dbc_write_instruction(). + vkd3d-shader/hlsl: Add a stub for the noise() intrinsic. + vkd3d-shader/fx: Use a version-independent structure for states. + vkd3d-shader/fx: Use the same state data helpers for both fx_2_0 and fx_4+. + vkd3d-shader/fx: Move state decomposition to the fx_4_0-specific writing path. + vkd3d-shader/fx: Move entry count updates out of the state block writing helper. + vkd3d-shader/fx: Add a format-specific callback to write state assignments. + vkd3d-shader/fx: Fix the order of the "MaterialDiffuse" and "MaterialAmbient" state entries. + vkd3d-shader/fx: Improve register naming in the disassembly output. + vkd3d-shader/fx: Use the correct value range for bools in fx_4_0 state values. + vkd3d-shader/fx: Explicitly handle bool state values when parsing. + vkd3d-shader/ir: Handle TEXLDL instructions in vsir_program_lower_instructions(). + vkd3d-shader/hlsl: Handle HLSL_RESOURCE_SAMPLE_LOD in sm1_generate_vsir_instr_resource_load(). + vkd3d-shader/fx: Handle regular shader blobs when parsing the state data. + vkd3d-shader/fx: Do not attempt to parse expressions without code section. + vkd3d: Return success from d3d12_device_EnumerateMetaCommands(). -Petrichor Park (1): - tests/shader_runner: Allow controlling which shader models to run via command line. +Shaun Ren (19): + vkd3d-shader/tpf: Read the DCL_OUTPUT_SGV instruction. + vkd3d-shader/hlsl: Implement output semantics for geometry shaders. + tests: Test signature reflection for geometry shader outputs. + vkd3d-shader/hlsl: Fix the register string for patch arrays in debug_register(). + vkd3d-shader/hlsl: Support void pass-through hull shader control point functions. + vkd3d-shader/hlsl: Emit dcl_stream instructions for SM5 geometry shaders. + vkd3d-shader/hlsl: Generate vsir instructions for indexed output streams in geometry shaders. + vkd3d-shader/hlsl: Store stream index in struct hlsl_semantic. + vkd3d-shader/hlsl: Don't optimize semantic register allocations in SM1. + vkd3d-shader/hlsl: Remove a leftover TODO message. + vkd3d-shader/hlsl: Only dump store writemasks for single register types. + vkd3d-shader/hlsl: Handle nodes with NULL data types in hlsl_replace_node(). + vkd3d-shader/hlsl: Allow memory barriers in SM4+ target profiles. + vkd3d-shader/hlsl: Ignore the 'groupshared' modifier for non-compute shaders. + vkd3d-shader/hlsl: Allocate groupshared registers. + vkd3d-shader/hlsl: Emit dcl_tgsm_raw instructions for raw groupshared variables. + vkd3d-shader/hlsl: Support loads from groupshared variables. + vkd3d-shader/hlsl: Support stores to raw groupshared variables. + vkd3d-shader/hlsl: Support interlocked operations on non-indexed groupshared variables. -Shaun Ren (44): - vkd3d-shader/tpf: Write non-zero static offsets in relative addressing mode in sm4_write_register_index(). - vkd3d-shader/glsl: Implement support for indirect constant buffer addressing. - vkd3d-shader/hlsl: Allow uint1-typed deref path nodes. - vkd3d-shader/hlsl: Allow non-constant indices in register_deref_usage(). - vkd3d-shader/hlsl: Support patch arrays in hlsl_reg_from_deref(). - vkd3d-shader/hlsl: Support indirect addressing of uniforms in sm4_generate_vsir_reg_from_deref(). - vkd3d-shader/hlsl: Introduce simplify_exprs(). - vkd3d-shader/hlsl: Introduce component_index_from_deref_path_node(). - vkd3d-shader/hlsl: Rename init_deref() to hlsl_init_deref(). - vkd3d-shader/hlsl: Implement copy-propagation of derefs with a non-constant index. - tests/hlsl: Add dynamic addressing copy-propagation tests. - vkd3d-shader/hlsl: Parse the maxvertexcount attribute. - vkd3d-shader/hlsl: Parse primitive type modifiers in geometry shaders. - vkd3d-shader/hlsl: Validate and record input primitive types in geometry shaders. - vkd3d-shader/hlsl: Validate stream output object declarations. - vkd3d-shader/hlsl: Validate stream output parameters in geometry shaders. - vkd3d-shader/hlsl: Forbid output parameters in geometry shaders. - tests/hlsl: Add geometry shader syntax tests. - vkd3d-shader/hlsl: Remove the unused hlsl_array_type_to_string() declaration. - vkd3d-shader/hlsl: Support input primitive arrays in geometry shaders. - vkd3d-shader/hlsl: Implement input semantics for geometry shaders. - vkd3d-shader/hlsl: Store geometry shader properties in struct vsir_program. - vkd3d-shader/tpf: Emit geometry shader property declarations. - tests: Add a signature reflection test for geometry shader inputs. - vkd3d-shader/hlsl: Divert written uniform derefs to temps before copy-propagation passes. - vkd3d-shader/hlsl: Ensure that uniform objects are never written to in copy_propagation_transform_object_load(). - tests/hlsl: Add a test for copy-propagation of uniform texture object writes. - vkd3d-shader/hlsl: Use dcl_output_siv for patch constant function sysval outputs. - vkd3d-shader/hlsl: Free all allocators in allocate_semantic_registers(). - vkd3d-shader/hlsl: Prioritize smaller writemasks for all allocators in allocate_semantic_registers(). - vkd3d-shader/tpf: Support SV_RenderTargetArrayIndex/SV_ViewportArrayIndex sysvals in tessellation shaders. - tests: Add signature reflection tests for register allocation rules in tessellation shaders. - vkd3d-shader/hlsl: Add special allocation rules for patch constant data. - vkd3d-shader/hlsl: Support HLSL_CLASS_STREAM_OUTPUT in hlsl type helpers. - vkd3d-shader/hlsl: Parse the Append() method for stream outputs. - vkd3d-shader/hlsl: Parse the RestartStrip() method for stream outputs. - vkd3d-shader/hlsl: Introduce HLSL_REGSET_STREAM_OUTPUTS regset. - vkd3d-shader/hlsl: Allocate registers for stream output objects. - vkd3d-shader/hlsl: Validate and record stream output objects. - tests/hlsl: Add geometry shader stream output syntax tests. - vkd3d-shader/hlsl: Use a block in append_output_copy*(). - vkd3d-shader/hlsl: Append output copies for stream output Append() invocations. - vkd3d-shader/hlsl: Validate maximum output size in geometry shaders. - vkd3d-shader/hlsl: Generate vsir instructions for stream output operations. - -Victor Chiletto (3): - tests/shader_runner_d3d12: Pass the structure byte stride for SRVs. - tests/hlsl: Attempt to deduce the data type of unspecified type texture data. - tests/hlsl: Add tests for SRV structured buffers. +Victor Chiletto (4): + tests/hlsl: Add a few extra structured buffer matrix load + swizzle tests. + vkd3d-shader/hlsl: Parse SRV structured buffers. + vkd3d-shader/hlsl: Transform hlsl_ir_index into structured buffers into field specific hlsl_ir_resource_loads. + vkd3d-shader/hlsl: Split matrix copies from resource loads. ``` diff --git a/ChangeLog.md b/ChangeLog.md index 92edaed62..5e09d0052 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,83 @@ +# What's new in vkd3d 1.17 (21 August 2025) + +### libvkd3d + + - The EnumerateMetaCommands() method of the ID3D12Device5 interface is + implemented. + +### libvkd3d-shader + + - Several new features and improvements for the HLSL source type: + - Initial thread group shared memory support. + - Improved support for geometry shaders: shader model 5 multiple output + streams, as well as SV_IsFrontFace, SV_RenderTargetArrayIndex, and + SV_ViewportArrayIndex outputs. + - Structure variable input/output semantics are propagated to the + constituent structure fields. + - Shader entry point return values are allocated before any other outputs + in the output signature. This matches d3dcompiler/fxc more closely. + - Hull shader control point pass-through. + - Reflection information can be retrieved using vkd3d_shader_scan(). + - Improved preprocessor handling of comments inside include directives, as + well as inclusion of empty files. + - Memory barrier intrinsics are supported in shader model 4 target + profiles. Previous these were only supported in shader model 5 target + profiles. + - Parser support for the noise() intrinsic. Although the intrinsic itself + isn't implemented, parser support for the intrinsic is required to allow + compilation of any other shaders in the same source file to succeed as + well. + - Parser support for StructuredBuffer resources. + + - Various new features and improvements for the effects (FX) source type: + - Shader blob assignments and FXLVM value expressions in ‘fx_2_0’ effects. + - Nameless structure types. + - Explicit constant buffer bind points and constant packing offsets. + - The ‘d3ds_noiseswiz’, ‘ge’, ‘lt’, and ‘noise’ FXLVM operations. + + - The experimental Metal Shading Language (MSL) target supports the + following features: + - Texture sampling and gather operations. + - Loops and switches. + - Screen-space partial derivatives. + - Various integer arithmetic and comparison operations. + - Indirect addressing of constant buffers. + - Indexable temporary registers. + - Fragment shader output sample coverage masks. + - SV_Position and SV_SampleIndex fragment shader inputs. + - SV_VertexID inputs. + + - When the experimental MSL target is enabled, the ‘dxbc-dxil’ source type + can be used in combination with the ‘msl’ target type to convert DXIL + shaders to MSL. + + - The new ‘tx’ source type can be used in combination with the ‘d3d-asm’ + target type to disassemble D3DX ‘tx_1_0’ texture shaders. + + - The FX target takes alignment and padding into account in ‘fx_4_0’ buffer + size calculations. + + - The SPIR-V target is capable of outputting OpSource and OpLine debug + information. + + - The core grammar for the experimental SPIR-V disassembler has been updated + to the ‘vulkan-sdk-1.4.313.0’ release. + + - New interfaces: + - The VKD3D_SHADER_SOURCE_TX source type specifies D3DX ‘tx_1_0’ texture + shaders. + +### vkd3d-compiler + + - The new ‘tx’ source type specifies D3DX ‘tx_1_0’ texture shaders. + +### demos + + - The new vkd3d-teapot demo uses tessellation shaders to render a version of + Martin Newell's famous teapot. It should be noted that current versions of + MoltenVK unfortunately do not support all features required to execute + this demo correctly. + # What's new in vkd3d 1.16 (20 May 2025) ### libvkd3d diff --git a/Makefile.am b/Makefile.am index 4e6438d18..35035a9f6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -426,7 +426,7 @@ libvkd3d_shader_la_SOURCES = \ libs/vkd3d-shader/vkd3d_shader_main.c \ libs/vkd3d-shader/vkd3d_shader_private.h libvkd3d_shader_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_SHADER_SOURCE -I$(srcdir)/libs/vkd3d-shader @SPIRV_TOOLS_CFLAGS@ -libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 15:0:14 +libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 16:0:15 libvkd3d_shader_la_LIBADD = libvkd3d-common.la @SPIRV_TOOLS_LIBS@ -lm if HAVE_LD_VERSION_SCRIPT libvkd3d_shader_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-shader/vkd3d_shader.map @@ -461,7 +461,7 @@ libvkd3d_la_SOURCES = \ libs/vkd3d/vkd3d_shaders.h \ libs/vkd3d/vulkan_procs.h libvkd3d_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_SOURCE -libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 17:0:16 +libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 18:0:17 libvkd3d_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la @DL_LIBS@ @PTHREAD_LIBS@ if HAVE_LD_VERSION_SCRIPT libvkd3d_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d/vkd3d.map @@ -474,7 +474,7 @@ libvkd3d_utils_la_SOURCES = \ libs/vkd3d-utils/vkd3d_utils_main.c \ libs/vkd3d-utils/vkd3d_utils_private.h libvkd3d_utils_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_UTILS_SOURCE -libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 7:2:6 +libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 7:3:6 libvkd3d_utils_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la libvkd3d.la @PTHREAD_LIBS@ if HAVE_LD_VERSION_SCRIPT libvkd3d_utils_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-utils/vkd3d_utils.map diff --git a/configure.ac b/configure.ac index abf9f58d7..884d9238c 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([vkd3d],[1.16]) +AC_INIT([vkd3d],[1.17]) AC_CONFIG_AUX_DIR([bin]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/demos/demo_vkd3d.h b/demos/demo_vkd3d.h index 0418caf28..57bd0e716 100644 --- a/demos/demo_vkd3d.h +++ b/demos/demo_vkd3d.h @@ -28,7 +28,7 @@ #ifdef HAVE_XCB # define VK_USE_PLATFORM_XCB_KHR #endif -#define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_16 +#define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_17 #include #include #ifdef HAVE_XCB diff --git a/include/vkd3d.h b/include/vkd3d.h index 0b55fc18f..6ff306f20 100644 --- a/include/vkd3d.h +++ b/include/vkd3d.h @@ -101,6 +101,7 @@ enum vkd3d_api_version VKD3D_API_VERSION_1_14, VKD3D_API_VERSION_1_15, VKD3D_API_VERSION_1_16, + VKD3D_API_VERSION_1_17, VKD3D_FORCE_32_BIT_ENUM(VKD3D_API_VERSION), }; diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h index 0fd3c67b7..d82869e79 100644 --- a/include/vkd3d_shader.h +++ b/include/vkd3d_shader.h @@ -59,6 +59,7 @@ enum vkd3d_shader_api_version VKD3D_SHADER_API_VERSION_1_14, VKD3D_SHADER_API_VERSION_1_15, VKD3D_SHADER_API_VERSION_1_16, + VKD3D_SHADER_API_VERSION_1_17, VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_API_VERSION), }; diff --git a/libs/vkd3d-shader/fx.c b/libs/vkd3d-shader/fx.c index 5b776108c..676c501bb 100644 --- a/libs/vkd3d-shader/fx.c +++ b/libs/vkd3d-shader/fx.c @@ -4205,7 +4205,7 @@ static void fx_parse_shader_blob(struct fx_parser *parser, enum vkd3d_shader_sou static const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_16}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, }; info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 661d98c88..89c054f5a 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -38,7 +38,7 @@ #define VKD3D_SPIRV_VERSION_1_0 0x00010000 #define VKD3D_SPIRV_VERSION_1_3 0x00010300 #define VKD3D_SPIRV_GENERATOR_ID 18 -#define VKD3D_SPIRV_GENERATOR_VERSION 16 +#define VKD3D_SPIRV_GENERATOR_VERSION 17 #define VKD3D_SPIRV_GENERATOR_MAGIC vkd3d_make_u32(VKD3D_SPIRV_GENERATOR_VERSION, VKD3D_SPIRV_GENERATOR_ID) #ifndef VKD3D_SHADER_UNSUPPORTED_SPIRV_PARSER # define VKD3D_SHADER_UNSUPPORTED_SPIRV_PARSER 0 diff --git a/libs/vkd3d-utils/vkd3d_utils_main.c b/libs/vkd3d-utils/vkd3d_utils_main.c index 8005582fe..c65a68998 100644 --- a/libs/vkd3d-utils/vkd3d_utils_main.c +++ b/libs/vkd3d-utils/vkd3d_utils_main.c @@ -271,7 +271,7 @@ HRESULT WINAPI D3DCompile2VKD3D(const void *data, SIZE_T data_size, const char * option = &options[0]; option->name = VKD3D_SHADER_COMPILE_OPTION_API_VERSION; - option->value = VKD3D_SHADER_API_VERSION_1_16; + option->value = VKD3D_SHADER_API_VERSION_1_17; compile_info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; compile_info.next = &preprocess_info; @@ -435,7 +435,7 @@ HRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename static const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_16}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, }; TRACE("data %p, size %"PRIuPTR", filename %s, macros %p, include %p, preprocessed_blob %p, messages_blob %p.\n", @@ -981,7 +981,7 @@ HRESULT WINAPI D3DDisassemble(const void *data, SIZE_T data_size, static const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_16}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, }; TRACE("data %p, data_size %"PRIuPTR", flags %#x, comments %p, blob %p.\n", diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 413892789..6bbd6533b 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -2391,7 +2391,7 @@ static HRESULT create_shader_stage(struct d3d12_device *device, const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_16}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, {VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE, 0}, {VKD3D_SHADER_COMPILE_OPTION_FEATURE, feature_flags_compile_option(device)}, @@ -2456,7 +2456,7 @@ static int vkd3d_scan_dxbc(const struct d3d12_device *device, const D3D12_SHADER const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_16}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, }; @@ -4135,7 +4135,7 @@ static int compile_hlsl_cs(const struct vkd3d_shader_code *hlsl, struct vkd3d_sh static const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_16}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, }; info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; diff --git a/programs/vkd3d-compiler/main.c b/programs/vkd3d-compiler/main.c index 9b36adeea..15cd6ca1a 100644 --- a/programs/vkd3d-compiler/main.c +++ b/programs/vkd3d-compiler/main.c @@ -937,7 +937,7 @@ int main(int argc, char **argv) if (!options.explicit_colour && !getenv("NO_COLOUR") && !getenv("NO_COLOR") && has_colour(output)) options.formatting |= VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR; add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_FORMATTING, options.formatting); - add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_16); + add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17); if (options.target_type->type == VKD3D_SHADER_TARGET_SPIRV_BINARY || options.target_type->type == VKD3D_SHADER_TARGET_SPIRV_TEXT) add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_FEATURE, diff --git a/tests/shader_runner_gl.c b/tests/shader_runner_gl.c index 6be3aa60f..7250d6a12 100644 --- a/tests/shader_runner_gl.c +++ b/tests/shader_runner_gl.c @@ -645,7 +645,7 @@ static bool compile_shader(struct gl_runner *runner, enum shader_type shader_typ const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_16}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, {VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN, VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN_LOWER_LEFT}, {VKD3D_SHADER_COMPILE_OPTION_FEATURE, shader_runner_caps_get_feature_flags(&runner->caps)}, diff --git a/tests/shader_runner_metal.m b/tests/shader_runner_metal.m index 86b4da3f3..ceb5a1ebd 100644 --- a/tests/shader_runner_metal.m +++ b/tests/shader_runner_metal.m @@ -393,7 +393,7 @@ static bool compile_shader(struct metal_runner *runner, enum shader_type type, s const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_16}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, {VKD3D_SHADER_COMPILE_OPTION_FEATURE, shader_runner_caps_get_feature_flags(&runner->caps)}, }; diff --git a/tests/shader_runner_vulkan.c b/tests/shader_runner_vulkan.c index 8ce77661a..f42cf9903 100644 --- a/tests/shader_runner_vulkan.c +++ b/tests/shader_runner_vulkan.c @@ -371,7 +371,7 @@ static bool compile_d3d_code(struct vulkan_shader_runner *runner, int ret; options[0].name = VKD3D_SHADER_COMPILE_OPTION_API_VERSION; - options[0].value = VKD3D_SHADER_API_VERSION_1_16; + options[0].value = VKD3D_SHADER_API_VERSION_1_17; options[1].name = VKD3D_SHADER_COMPILE_OPTION_FEATURE; options[1].value = shader_runner_caps_get_feature_flags(&runner->caps);