Henri Verbeet
47ec24ebad
vkd3d-shader/ir: Pass a struct vsir_program to shader_parser_get_dst_params().
2024-02-01 00:08:22 +01:00
Henri Verbeet
ced8543952
vkd3d-shader: Use vkd3d_atomic_increment_u32() in vkd3d_shader_dump_blob().
2024-02-01 00:08:18 +01:00
Henri Verbeet
fef30dac2c
vkd3d-shader/d3dbc: Do not fail parsing the shader when undeclared inputs are encountered.
...
These can be disassembled by D3DDisassemble() just fine, and perhaps
more importantly, shader model 1 vertex shaders do not require dcl_
instructions in Direct3D 8.
2024-01-29 22:33:46 +01:00
Henri Verbeet
8c6f5b847b
vkd3d-utils: Implement D3DDisassemble().
...
Very loosely based on Wine's d3dcompiler_43.
2024-01-29 22:33:44 +01:00
Henri Verbeet
4fd4ecc020
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_device_Release().
2024-01-29 22:33:40 +01:00
Henri Verbeet
7d7833f3c0
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_device_AddRef().
2024-01-29 22:33:40 +01:00
Henri Verbeet
f61891954e
vkd3d: Use vkd3d_atomic_decrement_u32() in vkd3d_instance_decref().
2024-01-29 22:33:40 +01:00
Henri Verbeet
042e269791
vkd3d: Use vkd3d_atomic_increment_u32() in vkd3d_instance_incref().
2024-01-29 22:33:40 +01:00
Giovanni Mascellani
edc406d297
vkd3d-shader/ir: Check that SSA registers are used with compatible data types.
...
Specifically, accesses are always 32 bit or always 64 bit.
2024-01-29 22:33:34 +01:00
Giovanni Mascellani
1f536238a8
vkd3d-shader: Use 64 bit swizzles for 64 bit data types in VSIR.
...
The handling of write masks and swizzles for 64 bit data types is
currently irregular: write masks are always 64 bit, while swizzles
are usually 32 bit, except for SSA registers with are 64 bit.
With this change we always use 64 bit swizzles, in order to make
the situation less surprising and make it easier to convert
registers between SSA and TEMP.
64 bit swizzles are always required to have X in their last two
components.
2024-01-29 22:33:33 +01:00
Giovanni Mascellani
2b93aae069
vkd3d-shader: Convert write masks between 32 and 64 bit by cases.
...
There are only three cases, and while the code is longer it is also
hopefully easier to read. Moreover, an error message is casted if
we're doing something unexpected.
2024-01-29 22:33:30 +01:00
Francisco Casas
13f713f74b
vkd3d-shader/hlsl: Turn register(cX) reservations into buffer offset for SM4.
2024-01-29 22:33:27 +01:00
Francisco Casas
c7f7636534
vkd3d-shader/hlsl: Make register(cX) reservations work for SM1.
2024-01-29 22:33:25 +01:00
Conor McCarthy
92f0b37133
vkd3d-shader/spirv: Support 64-bit source value for bitfield instructions.
2024-01-29 22:33:22 +01:00
Conor McCarthy
3bbe374ca8
vkd3d-shader/dxil: Implement DX intrinsic Tertiary.
...
IBFE and UBFE are not emitted for HLSL sources which perform bitfield
extractions, e.g. loading a value from a struct containing bitfields, or
the equivalent done with bit shifts. These instructions are probably
only emitted by the TPF -> DXIL converter, which makes them hard to test.
2024-01-29 22:33:20 +01:00
Giovanni Mascellani
026c502f31
vkd3d-shader/ir: Fixup PHI nodes when lowering switches to selection ladders.
...
A map between the blocks before and after the pass is built and then
used to fix the PHI nodes.
2024-01-29 22:33:17 +01:00
Giovanni Mascellani
378109051c
vkd3d-shader/ir: Lower monolithic switches to selection ladders.
...
PHI nodes must be fixed up after this pass, because the block references
might have become broken. For simplicitly this is not handled yet.
The goal for this pass is to make the CFG structurizer simpler, because
only conditional and unconditional branches must be supported.
Eventually this limitation might be lifted if there is advantage in
doing so.
2024-01-29 22:33:15 +01:00
Giovanni Mascellani
b97edee03d
vkd3d-shader/spirv: Emit an error if merge information is missing.
...
Instead of crashing.
2024-01-29 22:33:14 +01:00
Conor McCarthy
e08c0cfc4f
vkd3d-shader/dxil: Implement DX intrinsic RawBufferLoad.
2024-01-29 22:33:10 +01:00
Conor McCarthy
1bab93843d
vkd3d-shader/dxil: Load raw/structured buffer SRV/UAV descriptors.
2024-01-29 22:33:09 +01:00
Henri Verbeet
3295f0d16e
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_signature_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
13ba36bb43
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_signature_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
0ff20e6b8d
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_queue_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
cdb559c39d
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_queue_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
298dce541d
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_list_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
87f3a606d7
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_list_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
d891e5c2a0
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_allocator_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
315fce8ac5
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_allocator_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
78bb7b6760
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_fence_decref().
2024-01-25 22:24:55 +01:00
Henri Verbeet
c8122ff47e
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_fence_incref().
2024-01-25 22:24:55 +01:00
Henri Verbeet
1b4f1ac8a0
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_fence_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
5a2b82fbd5
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_fence_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
fee3b94563
vkd3d-shader: Start an if-block on VKD3DSIH_IFC in vkd3d_shader_scan_instruction().
2024-01-25 22:24:50 +01:00
Conor McCarthy
f954724870
vkd3d-shader/spirv: Handle the TAN instruction in spirv_compiler_emit_ext_glsl_instruction().
2024-01-25 22:24:44 +01:00
Conor McCarthy
93d7c30395
vkd3d-shader/dxil: Handle DX intrinsic Tan in sm6_parser_emit_dx_unary().
2024-01-25 22:24:43 +01:00
Conor McCarthy
2a260b8d56
vkd3d-shader/dxil: Implement DX intrinsics Cos and Sin.
2024-01-25 22:24:41 +01:00
Francisco Casas
cec45da45b
vkd3d-shader/ir: Update flatten_control_flow_constructs() comment.
2024-01-25 22:24:27 +01:00
Conor McCarthy
8ae69c745b
vkd3d-shader/spirv: Handle thread group UAV barriers.
2024-01-25 22:24:23 +01:00
Conor McCarthy
18e9148f58
vkd3d-shader/spirv: Include Uniform in the memory semantics for UAV barriers.
...
The UniformMemory semantic applies the constraints to Uniform storage
class memory, which matches how UAV variables are declared.
2024-01-25 22:24:22 +01:00
Conor McCarthy
adfbecef3c
vkd3d-shader/spirv: Handle globally coherent UAVs.
2024-01-25 22:24:20 +01:00
Henri Verbeet
766f5f039b
vkd3d: Use debugstr_hresult() in vkd3d_serialize_versioned_root_signature().
2024-01-24 22:38:42 +01:00
Henri Verbeet
30113c098d
vkd3d: Use debugstr_hresult() in vkd3d_serialize_root_signature().
2024-01-24 22:38:42 +01:00
Henri Verbeet
a86a21667c
vkd3d: Use debugstr_hresult() in vkd3d_create_device().
2024-01-24 22:38:42 +01:00
Henri Verbeet
ad08cbc390
vkd3d: Use debugstr_hresult() in vkd3d_uav_clear_state_init().
2024-01-24 22:38:42 +01:00
Henri Verbeet
1599de9a0d
vkd3d: Use debugstr_hresult() in d3d12_pipeline_state_init_compute().
2024-01-24 22:38:42 +01:00
Henri Verbeet
c5b5621e28
vkd3d: Use debugstr_hresult() in d3d12_pipeline_state_find_and_init_uav_counters().
2024-01-24 22:38:42 +01:00
Henri Verbeet
9c1e661ae3
vkd3d: Use debugstr_hresult() in vkd3d_create_compute_pipeline().
2024-01-24 22:38:42 +01:00
Henri Verbeet
eabcaf15fb
vkd3d-shader/ir: Use vsir_instruction_is_dcl() in vsir_validate_instruction().
2024-01-24 22:38:36 +01:00
Henri Verbeet
365ad56888
vkd3d-shader/ir: Get rid of shader_instruction_is_dcl().
2024-01-24 22:38:34 +01:00
Conor McCarthy
54f6e6dd67
vkd3d-shader/spirv: Check for FEATURE_FLOAT64 when double precision use is flagged.
2024-01-24 22:38:09 +01:00
Conor McCarthy
6446b6ea21
vkd3d-shader: Introduce VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64.
2024-01-24 22:38:09 +01:00
Conor McCarthy
e973271a40
vkd3d-shader/spirv: Handle the ISINF and ISNAN instructions in spirv_compiler_emit_alu_instruction().
2024-01-24 22:38:04 +01:00
Conor McCarthy
cd674d593e
vkd3d-shader/spirv: Implement the ISFINITE instruction.
2024-01-24 22:38:03 +01:00
Conor McCarthy
41cce4cbf1
vkd3d-shader/dxil: Handle floating point special value comparisons in sm6_parser_emit_dx_unary().
2024-01-24 22:37:59 +01:00
Zebediah Figura
579e262d98
vkd3d-utils: Implement input and output signature reflection.
2024-01-24 22:37:53 +01:00
Zebediah Figura
53bd1f5419
vkd3d-utils: Add D3DReflect().
2024-01-24 22:37:53 +01:00
Francisco Casas
b92f6c448a
vkd3d-shader/ir: Lower texkill instructions to discard_nz.
2024-01-24 22:37:41 +01:00
Francisco Casas
7e75ac63a1
vkd3d-shader/d3dbc: Emit fixme for HLSL_RESOURCE_SAMPLE_LOD.
...
Currently, HLSL_RESOURCE_SAMPLE_LOD is not implemented for d3dbc,
but we are incorrectly writting a texld instruction to handle it.
This causes SM1 tests with the vulkan backend (in following patches)
to fail if VKD3D_SHADER_CONFIG="force_validation" is enabled.
For now a fixme is emited in these cases.
2024-01-24 22:37:38 +01:00
Henri Verbeet
bf628f0c74
vkd3d-shader/ir: Store block names in struct vsir_program.
2024-01-23 20:27:35 +01:00
Henri Verbeet
f3c7d2d05c
vkd3d-shader/ir: Store the block count in struct vsir_program.
2024-01-23 20:27:34 +01:00
Henri Verbeet
98c6e85b33
vkd3d-shader/ir: Store control point counts in struct vsir_program.
2024-01-23 20:27:32 +01:00
Henri Verbeet
e4cc4a336e
vkd3d: Use debugstr_hresult() in vkd3d_init_null_resources().
2024-01-23 20:27:28 +01:00
Henri Verbeet
d4b329e628
vkd3d: Use debugstr_hresult() in vkd3d_join_thread().
2024-01-23 20:27:28 +01:00
Henri Verbeet
e965701776
vkd3d: Use debugstr_hresult() in d3d12_device_init().
2024-01-23 20:27:28 +01:00
Henri Verbeet
8dc1239e14
vkd3d: Use debugstr_hresult() in vkd3d_create_vk_device().
2024-01-23 20:27:28 +01:00
Henri Verbeet
af160ef0c4
vkd3d: Use debugstr_hresult() in vkd3d_instance_init().
2024-01-23 20:27:28 +01:00
Conor McCarthy
e4660fe0e6
vkd3d-shader/spirv: Emit DISCARD as a function call.
2024-01-23 20:26:59 +01:00
Conor McCarthy
367a06d748
vkd3d-shader/dxil: Use strcmp() to find the handle type.
...
We use strcmp() on the same type name elsewhere, and case-insensitive
matching does not seem necessary.
2024-01-23 20:26:53 +01:00
Conor McCarthy
1cca18a228
vkd3d-shader/dxil: Use strcmp() to find function names.
...
Function names are case-sensitive.
2024-01-23 20:26:52 +01:00
Conor McCarthy
4dec25cbde
vkd3d-shader/dxil: Use strcmp() to check the entry point name.
...
Function names are case-sensitive.
2024-01-23 20:26:50 +01:00
Zebediah Figura
a8b0c03912
vkd3d-shader/hlsl: Always cast to bool in if() statements.
...
We emit sm4 if_nz for these, but that does a bitwise comparison to zero, which is wrong for floats.
2024-01-23 20:26:46 +01:00
Zebediah Figura
183172eff4
vkd3d-shader/hlsl: Validate that condition expressions are numeric.
2024-01-23 20:26:45 +01:00
Zebediah Figura
09220edd21
vkd3d-shader/hlsl: Validate the condition data type for loops as well.
2024-01-23 20:26:44 +01:00
Zebediah Figura
c18a349a3f
vkd3d-shader/hlsl: Copy some missing fields in hlsl_type_clone().
2024-01-23 20:26:42 +01:00
Giovanni Mascellani
de9725b6ba
vkd3d-shader/ir: Remove DCL_TEMPS instructions.
...
We have to do work to keep it updated across passes and we never read it.
2024-01-23 20:26:38 +01:00
Giovanni Mascellani
4b869f73bb
vkd3d-shader/ir: Run tracing and validation for DXIL code too.
2024-01-23 20:26:36 +01:00
Conor McCarthy
6df725718a
vkd3d-shader/ir: Refactor return code checking in vkd3d_shader_normalise().
...
We started with only one or two of these but it has become excessive.
Patch originally written by Conor McCarthy and updated by Giovanni Mascellani.
2024-01-23 20:26:34 +01:00
Conor McCarthy
b3903636f7
vkd3d-shader/dxil: Implement DX intrinsic Binary.
2024-01-23 20:26:29 +01:00
Conor McCarthy
6c71cd5a72
vkd3d-shader/dxil: Add an operand type code for the return type.
2024-01-23 20:26:28 +01:00
Nikolay Sivov
0117e4fb7e
vkd3d-shader/fx: Add initial support for writing passes for fx_2_0.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:22 +01:00
Nikolay Sivov
b478f0a300
vkd3d-shader/fx: Add initial support for writing fx_2_0 binaries.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:21 +01:00
Nikolay Sivov
56100d36b1
vkd3d-shader/fx: Check technique type in global scope as well.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:20 +01:00
Nikolay Sivov
2c1905b780
vkd3d-shader/hlsl: Allow annotations on techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:19 +01:00
Nikolay Sivov
76a689d43f
vkd3d-shader/hlsl: Allow annotations on passes.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:18 +01:00
Nikolay Sivov
e72f8f9a30
vkd3d-shader/hlsl: Add passes variables to the techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:16 +01:00
Nikolay Sivov
fe8881747b
vkd3d-shader/hlsl: Add initial support for parsing annotations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:15 +01:00
Giovanni Mascellani
232b2ad360
vkd3d-shader/ir: Validate PHI instructions.
2024-01-23 20:26:08 +01:00
Giovanni Mascellani
56f9057985
vkd3d-shader/ir: Do not allow IMMCONST and IMMCONST64 as destination registers.
2024-01-23 20:26:06 +01:00
Giovanni Mascellani
21633fcc52
vkd3d-shader/ir: Refactor register-type-specific code in parameter validation.
...
To better accommodate code for other register types.
2024-01-23 20:26:05 +01:00
Giovanni Mascellani
fb6409bda1
vkd3d-shader/ir: Check that all instructions appear in a block.
2024-01-23 20:26:03 +01:00
Giovanni Mascellani
dc56320b31
vkd3d-shader/tpf: Support SV_ViewportArrayIndex in pixel and vertex shaders.
2024-01-22 22:19:14 +01:00
Giovanni Mascellani
3a90f3e29d
vkd3d-shader/tpf: Support SV_InstanceID in vertex shaders.
2024-01-22 22:19:13 +01:00
Giovanni Mascellani
b500381b5c
vkd3d-shader/tpf: Support SV_RenderTargetArrayIndex in pixel and vertex shaders.
2024-01-22 22:19:12 +01:00
Giovanni Mascellani
45495f54f2
vkd3d-shader/spirv: Use capability ShaderViewportIndexLayerEXT for decoration ViewportIndex.
2024-01-22 22:19:11 +01:00
Giovanni Mascellani
6ac525d6c3
vkd3d-shader/spirv: Use capability ShaderViewportIndexLayerEXT for decoration Layer.
...
Capability Geometry allows to use the Layer builtin in geometry and pixel
shaders. For vertex and domain shaders ShaderLayer should be used, but it's only
available starting from SPIR-V 1.5. ShaderViewportIndexLayerEXT can be used
instead with extension SPV_EXT_shader_viewport_index_layer.
2024-01-22 22:19:09 +01:00
Henri Verbeet
dd00e209ac
vkd3d: Use debugstr_hresult() in d3d12_command_queue_submit_locked().
2024-01-22 22:19:03 +01:00
Henri Verbeet
ebb2a31e50
vkd3d: Use debugstr_hresult() in d3d12_command_list_copy_incompatible_texture_region().
2024-01-22 22:19:03 +01:00
Henri Verbeet
f6ef7c3f46
vkd3d: Use debugstr_hresult() in vkd3d_wait_for_gpu_fence().
2024-01-22 22:19:03 +01:00
Henri Verbeet
adc02eada8
vkd3d-shader/ir: Store the temporary register count in struct vsir_program.
2024-01-22 22:18:53 +01:00
Henri Verbeet
94ca46916a
vkd3d-shader/ir: Store the SSA register count in struct vsir_program.
2024-01-22 22:18:52 +01:00
Henri Verbeet
7b85cd6a31
vkd3d-shader/ir: Store the "use_vocp" field in struct vsir_program.
2024-01-22 22:18:51 +01:00
Henri Verbeet
23dcd4f22b
vkd3d-shader/ir: Store the shader version in struct vsir_program.
2024-01-22 22:18:50 +01:00
Henri Verbeet
fc9043be3c
vkd3d-shader/ir: Introduce struct vsir_program.
2024-01-22 22:18:48 +01:00
Conor McCarthy
55c7cd5c22
vkd3d-shader/dxil: Handle semantic kind ISFRONTFACE.
2024-01-22 22:18:33 +01:00
Conor McCarthy
9f409b67d7
vkd3d-shader/dxil: Handle semantic kind VERTEXID.
2024-01-22 22:18:32 +01:00
Conor McCarthy
ca7487a56d
vkd3d-shader/spirv: Handle UINT32_MAX result from FIRSTBIT_HI and FIRSTBIT_SHI instructions.
2024-01-22 22:18:27 +01:00
Conor McCarthy
bfdc8b31a3
vkd3d-shader/dxil: Implement DX intrinsic BufferLoad for typed buffers.
2024-01-22 22:18:21 +01:00
Conor McCarthy
85052ba93e
vkd3d-shader/dxil: Load typed UAV descriptors.
2024-01-22 22:18:19 +01:00
Conor McCarthy
89d1ef83f4
vkd3d-shader/dxil: Load typed SRV descriptors.
2024-01-22 22:18:18 +01:00
Conor McCarthy
5ebe0cc717
vkd3d-shader/spirv: Do not assert VKD3D_DATA_UINT in spirv_compiler_emit_ld_raw_structured_srv_uav().
2024-01-22 22:18:17 +01:00
Conor McCarthy
80d7ea2924
vkd3d-shader/dxil: Pass the code block and instruction in a struct to intrinsic handlers.
...
Simplifies handling of intrinsics which need to emit more than one
instruction.
2024-01-22 22:18:16 +01:00
Henri Verbeet
14da4df99e
vkd3d-common: Use vkd3d_atomic_decrement_u32() in vkd3d_blob_Release().
2024-01-18 23:16:19 +01:00
Henri Verbeet
bb6b393c15
vkd3d-common: Use vkd3d_atomic_increment_u32() in vkd3d_blob_AddRef().
2024-01-18 23:16:19 +01:00
Henri Verbeet
5fe3c624d5
vkd3d-common: Use vkd3d_atomic_increment_u32() in get_buffer().
2024-01-18 23:16:19 +01:00
Henri Verbeet
f69c8b1cc4
vkd3d-shader/d3dbc: Store the "offset" field as an unsigned int in hlsl_sm1_register_from_semantic().
2024-01-18 23:16:06 +01:00
Giovanni Mascellani
67902d4304
vkd3d-shader/ir: Validate RET instructions.
2024-01-18 23:15:58 +01:00
Giovanni Mascellani
af96730276
vkd3d-shader/ir: Validate SWITCH_MONOLITHIC instructions.
2024-01-18 23:15:57 +01:00
Giovanni Mascellani
46ebb404d7
vkd3d-shader/ir: Validate BRANCH instructions.
2024-01-18 23:15:56 +01:00
Giovanni Mascellani
bc9db34cdc
vkd3d-shader/ir: Validate LABEL instructions.
2024-01-18 23:15:55 +01:00
Giovanni Mascellani
dd1b2feec0
vkd3d-shader/ir: Validate LABEL registers.
2024-01-18 23:15:54 +01:00
Giovanni Mascellani
17f4afc2b5
vkd3d-shader/ir: Validate that structured CF does not appear in block-based shaders.
2024-01-18 23:15:53 +01:00
Giovanni Mascellani
1d45b7a422
vkd3d-shader/spirv: Normalise the shader before allocating registers.
...
So registers are allocated after normalisation (which could require
additional registers).
2024-01-18 23:15:48 +01:00
Zebediah Figura
9ad48f16ea
vkd3d-shader/hlsl: Forbid mismatched argument types in ternaries.
2024-01-18 23:15:44 +01:00
Zebediah Figura
275901557c
vkd3d-shader/hlsl: Handle scalar values in ternaries.
2024-01-18 23:15:43 +01:00
Zebediah Figura
11112798c8
vkd3d-shader/hlsl: Handle scalar conditions in ternaries.
2024-01-18 23:15:42 +01:00
Zebediah Figura
2c8751478f
vkd3d-shader/hlsl: Forbid objects in ternary conditions.
2024-01-18 23:15:41 +01:00
Giovanni Mascellani
38fdf24002
vkd3d-shader: Make relative address sources mutable too.
...
They were forgotten in 78d95889bd
.
Fixes: 78d95889bd
2024-01-18 23:15:35 +01:00
Conor McCarthy
83851133c5
vkd3d-shader/ir: Set merged signature element interpolation mode only from used elements.
2024-01-18 23:15:27 +01:00
Conor McCarthy
b8280e4210
vkd3d-shader/ir: Revert "Do not merge signature elements which have different interpolation modes.".
...
This reverts commit b5c067b41a
.
The commit causes regressions in other shaders because unused elements
do not have an interpolation mode.
2024-01-18 23:15:25 +01:00
Conor McCarthy
efe800f7f0
vkd3d-shader/dxil: Handle the DXIL SWITCH instruction.
2024-01-18 23:15:14 +01:00
Conor McCarthy
ba1ee27b4b
vkd3d-shader/dxil: Handle the DXIL PHI instruction.
2024-01-18 23:15:12 +01:00
Conor McCarthy
8a5804eb43
vkd3d-shader/dxil: Handle the DXIL BR instruction conditional variant.
2024-01-18 23:15:10 +01:00
Conor McCarthy
c9493884ef
vkd3d-shader/dxil: Handle the DXIL BR instruction unconditional variant.
2024-01-18 23:15:03 +01:00
Conor McCarthy
9e964fa0c7
vkd3d-shader/dxil: Introduce a code block terminator struct.
2024-01-18 23:15:01 +01:00
Henri Verbeet
cd77b2a9be
vkd3d-utils: Use debugstr_hresult() in D3DStripShader().
2024-01-17 22:29:39 +01:00
Henri Verbeet
1b3aa005db
vkd3d-utils: Use debugstr_hresult() in get_blob_part().
2024-01-17 22:29:39 +01:00
Henri Verbeet
2476d6bd6c
vkd3d-utils: Use debugstr_hresult() in D3DCreateBlob().
2024-01-17 22:29:39 +01:00
Henri Verbeet
71decc927f
vkd3d-common: Introduce vkd3d_atomic_increment_u64().
2024-01-17 22:29:29 +01:00
Conor McCarthy
c40093474e
vkd3d-shader/tpf: Validate sysvals in index range declarations.
2024-01-17 22:29:01 +01:00
Conor McCarthy
4c30b23821
vkd3d-shader: Make the control point count the outer dimension of I/O arrays.
...
The relative-addressed case in shader_register_normalise_arrayed_addressing()
leaves the control point id in idx[0], while for constant register
indices it is placed in idx[1]. The latter case could be fixed instead,
but placing the control point count in the outer dimension is more
logical.
2024-01-17 22:28:59 +01:00
Conor McCarthy
418e8d8100
vkd3d-shader/ir: Expand index range write masks to cover all element masks.
...
For example, this occurred in a shader:
reg_idx write_mask
0 xyz
1 xyzw
2 xyzw
3 xyz
The dcl_indexrange instruction covered only xyz, so once merged, searching for
xyzw failed.
It is impossible to declare an input array where elements have different
component counts, but the optimiser can create this case. One way for
this to occur is to dynamically index input values via a local array
containing copies of the input values. The optimiser converts this to
dynamically indexed inputs.
2024-01-17 22:28:56 +01:00
Zebediah Figura
16962ac6f1
vkd3d-shader/hlsl: Allow non-numeric types in the ternary operator.
2024-01-17 22:28:51 +01:00
Zebediah Figura
46bd099341
vkd3d-shader/hlsl: Separate an add_ternary() helper.
2024-01-17 22:28:50 +01:00
Zebediah Figura
a5549bae38
vkd3d-shader/hlsl: Do not try to lower ternaries of types other than scalar or vector.
2024-01-17 22:28:49 +01:00
Zebediah Figura
e0b1f2e273
vkd3d-shader/hlsl: Remove a redundant definition of the "float" type.
2024-01-17 22:28:47 +01:00
Conor McCarthy
559d9d4ee0
vkd3d-shader/ir: Include an initial label instruction in the first control flow block.
2024-01-17 22:28:41 +01:00
Conor McCarthy
d402804851
vkd3d-shader/spirv: Do not emit function code before the main prolog.
2024-01-17 22:28:40 +01:00
Conor McCarthy
b4b2b0d3ac
vkd3d-shader/spirv: Declare indexable temps as Private unless function scope is specified.
2024-01-17 22:28:39 +01:00
Conor McCarthy
37d9dba512
vkd3d-shader/ir: Store code block names in struct vkd3d_shader_desc.
2024-01-17 22:28:38 +01:00
Conor McCarthy
ffc65215ba
vkd3d-shader/ir: Flatten SWITCH/CASE/DEFAULT/ENDSWITCH control flow instructions.
2024-01-17 22:28:36 +01:00
Conor McCarthy
dcb8527327
vkd3d-shader/ir: Flatten LOOP/BREAK/CONTINUE/ENDLOOP control flow instructions.
2024-01-17 22:28:35 +01:00
Conor McCarthy
e1dddc01b7
vkd3d-shader/ir: Flatten IF/ELSE/ENDIF control flow instructions.
2024-01-17 22:28:34 +01:00
Conor McCarthy
f3d464de0e
vkd3d-shader/spirv: Handle RETP in spirv_compiler_handle_instruction().
2024-01-17 22:28:33 +01:00
Conor McCarthy
bc1b5e7132
vkd3d-shader/spirv: Handle DISCARD and TEXKILL in spirv_compiler_handle_instruction().
2024-01-17 22:28:31 +01:00
Conor McCarthy
db0d51675c
vkd3d-shader/spirv: Emit descriptor offset loads in the function entry block.
...
Ensures they are loaded only once per function independent of the
control flow graph.
2024-01-17 22:28:29 +01:00
Henri Verbeet
68b898fcb6
vkd3d-shader/tpf: Store the "precise" mask as a uint32_t in shader_sm4_read_instruction().
2024-01-15 19:58:22 +01:00
Henri Verbeet
ad2af68d2a
vkd3d-shader/tpf: Store the "recognized_bits" mask as a uint32_t in shader_sm4_read_instruction_modifier().
2024-01-15 19:58:21 +01:00
Henri Verbeet
b8903f5526
vkd3d-shader/tpf: Store the current token as a uint32_t in shader_sm4_read_dst_param().
2024-01-15 19:58:20 +01:00
Henri Verbeet
fd854bc0c0
vkd3d-shader/tpf: Store the current token as a uint32_t in shader_sm4_read_src_param().
2024-01-15 19:58:19 +01:00
Henri Verbeet
c5facd4e03
vkd3d-shader/tpf: Store the "addressing" token as a uint32_t in shader_sm4_read_param().
2024-01-15 19:58:18 +01:00
Henri Verbeet
b1c538e0fe
vkd3d-shader/tpf: Store the "components" token as a uint32_t in shader_sm4_read_dcl_resource().
2024-01-15 19:58:17 +01:00
Henri Verbeet
9896394220
vkd3d-shader/tpf: Pass a uint32_t modifier token to shader_sm4_read_instruction_modifier().
2024-01-15 19:58:15 +01:00
Nikolay Sivov
1a036ddff6
vkd3d-shader/fx: Do not write the same string twice.
2024-01-15 19:57:43 +01:00
Nikolay Sivov
e7d65d39ba
vkd3d-shader/fx: Initial support for fx_5_0 output.
2024-01-15 19:57:42 +01:00
Nikolay Sivov
8014c11e88
vkd3d-shader/fx: Write empty passes blocks.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-15 19:57:41 +01:00
Nikolay Sivov
e1dca9b27a
vkd3d-shader/hlsl: Add a scope for technique variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-15 19:57:39 +01:00
Nikolay Sivov
0a6d842ed1
vkd3d-shader/hlsl: Rename the rule for an optional name.
...
Names are optional for both techniques and passes.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-15 19:57:37 +01:00
Francisco Casas
43ff28b00b
vkd3d-shader/hlsl: Emit fixmes on non-constant vector addressing.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56162
Storing to a vector component using a non-constant index is not allowed
on profiles lower than 6.0. Unless this happens inside a loop that can be
unrolled, which we are not doing yet.
For this reason, a validate_nonconstant_vector_store_derefs pass is
added to detect these cases.
Ideally we would want to emit an hlsl_error on this pass, but before
implementing loop unrolling, we could reach this point on valid HLSL.
Also, as pointed out by Nikolay in the mentioned bug, currently
new_offset_from_path_index() fails an assertion when this happens,
because it expects an hlsl_ir_constant, so a check is added.
It also felt correct to emit an hlsl_fixme there, despite the
redundancy.
2024-01-15 19:57:12 +01:00
Giovanni Mascellani
b0c8a47f9d
vkd3d-shader/ir: Check that SSA registers are used validly.
...
Specifically, they are assigned only once and only assigned components
are used.
Right now we don't check that the assignment dominates all usages.
2024-01-15 19:57:01 +01:00
Giovanni Mascellani
26bebe8f91
vkd3d-shader/ir: Check that SSA registers have consistent dimensions.
2024-01-15 19:57:00 +01:00
Giovanni Mascellani
7503429555
vkd3d-shader/ir: Check that TEMP registers have consistent dimensions.
2024-01-15 19:56:59 +01:00
Giovanni Mascellani
fbd77486de
vkd3d-shader/ir: Use vkd3d_free() instead of free().
2024-01-15 19:56:58 +01:00
Giovanni Mascellani
26c6a87268
vkd3d-shader/ir: Simplify control flow in vsir_validate_register().
2024-01-15 19:56:56 +01:00
Conor McCarthy
52902b042f
vkd3d-shader/spirv: Support vector source param for FIRSTBIT_HI and FIRSTBIT_SHI instructions.
2024-01-15 19:56:35 +01:00
Henri Verbeet
3e2ace8d33
vkd3d-shader/dxbc: Use sizeof(uint32_t) instead of sizeof(DWORD) in calls to require_space().
2024-01-11 23:05:56 +01:00
Henri Verbeet
69350e1ff0
vkd3d-shader/dxbc: Pass an unsigned int count to shader_parse_root_parameters1().
2024-01-11 23:05:54 +01:00
Henri Verbeet
04acc52496
vkd3d-shader/dxbc: Pass a size_t offset to shader_get_string().
2024-01-11 23:05:52 +01:00
Henri Verbeet
bf0fda7812
vkd3d: Trace GetLastError() results with %lu.
...
These are DWORDs, but this is all Windows code, so we can just use %lu.
2024-01-11 23:05:42 +01:00
Conor McCarthy
ac9b14599f
vkd3d-shader/dxil: Avoid null dereference on failure to find function pointer type.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55684
2024-01-11 23:05:17 +01:00
Giovanni Mascellani
78d95889bd
vkd3d-shader: Make *src and *dst mutable in vkd3d_shader_instruction.
...
They were originally made const because no optimization/normalization
pass existed. Now having to cast away const all the time is becoming
more and more burdening.
2024-01-11 23:05:11 +01:00
Henri Verbeet
fd8a0d7fb6
vkd3d-shader/spirv: Pass a uint32_t write mask to spirv_compiler_emit_neg().
2024-01-11 23:05:03 +01:00
Henri Verbeet
b4da553d28
vkd3d-shader/spirv: Pass a uint32_t write mask to spirv_compiler_emit_abs().
2024-01-11 23:05:02 +01:00
Henri Verbeet
97acca715e
vkd3d-shader/spirv: Pass a uin32_t write mask to spirv_compiler_emit_load_src().
2024-01-11 23:05:01 +01:00
Henri Verbeet
5c2d0f42b5
vkd3d-shader/spirv: Pass a uint32_t write mask to vkd3d_symbol_set_register_info().
2024-01-11 23:05:00 +01:00
Henri Verbeet
9dd5b2840f
vkd3d-shader: Recognise DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS in shader_validate_descriptor_range1().
2024-01-11 23:04:54 +01:00
Nikolay Sivov
a0207436f2
vkd3d-shader/tpf: Add initial support for writing fx_4_0/fx_4_1 binaries.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:48 +01:00
Nikolay Sivov
9494b72224
vkd3d-shader: Add separate binary target type for effects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:48 +01:00
Nikolay Sivov
e527d7c1e7
vkd3d-shader/hlsl: Handle effect group statement.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:46 +01:00
Nikolay Sivov
f7a02a5da2
vkd3d-shader/hlsl: Add variables for techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:45 +01:00
Nikolay Sivov
8494342fa0
vkd3d-shader/hlsl: Rename rule for top-level techniques.
...
Only technique10 and technique11 types could be nested in groups.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:43 +01:00
Nikolay Sivov
c3af1f9989
vkd3d-shader/hlsl: Add 'fxgroup' token.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:42 +01:00
Giovanni Mascellani
017f86aaaf
vkd3d-shader/d3d-asm: Guess a sensible data type for literals.
...
When the typing information is not reliable.
2024-01-11 23:04:34 +01:00
Giovanni Mascellani
e3fb4e7eac
vkd3d-utils: Support many different surface types when creating a device.
...
This is nice for the application, which can use our implementation of
D3D12CreateDevice() in more environments, and basically free for us,
because surface creation is still the application's business.
2024-01-09 23:00:58 +01:00
Conor McCarthy
b0d1fb7d98
vkd3d: Use mutable descriptors if available.
...
The mutable descriptor type allows six descriptor sets to be replaced
with one set for CBV/SRV/UAV heaps.
2024-01-09 22:59:46 +01:00
Henri Verbeet
bb64bfff63
vkd3d: Attempt to translate border colours to static border colours in d3d12_desc_create_sampler().
2024-01-08 21:45:39 +01:00
Henri Verbeet
9060baacec
vkd3d: Implement support for static border colours.
2024-01-08 21:45:39 +01:00
Henri Verbeet
3344c4e93d
vkd3d-shader/hlsl: Store modifier flags as a uint32_t.
2024-01-08 21:45:26 +01:00
Henri Verbeet
fafe2a1dba
vkd3d-shader/hlsl: Store swizzles as a uint32_t.
2024-01-08 21:45:24 +01:00
Fabian Maurer
49d5aecaa7
vkd3d: Unlock mutex in error case in d3d12_command_queue_CopyTileMappings.
2024-01-08 21:45:06 +01:00
Giovanni Mascellani
7f9803620f
vkd3d-shader/spirv: Specify behavior for bit field instructions.
...
Bit field instructions in SPIR-V do not specify what happens when
offset + count exceeds the type bit width. After this commit we
refine the emitted code's behavior to match TPF.
This fixes a few failures on MoltenVK.
2024-01-08 21:44:52 +01:00