Commit Graph

5333 Commits

Author SHA1 Message Date
Zebediah Figura
ddfa94fdca tests: Add more tests for resource and struct RDEF contents. 2024-03-27 22:36:43 +01:00
Zebediah Figura
98b90dde78 tests: Test constant and resource reflection via D3DReflect().
Ported from Wine.
2024-03-27 22:36:40 +01:00
Zebediah Figura
2247288003 vkd3d-shader/tpf: Set the user-packed flag for sm5.0 resources as well. 2024-03-27 22:36:39 +01:00
Zebediah Figura
7b87895289 vkd3d-shader/tpf: Write the component count as the column count for structs. 2024-03-27 22:36:37 +01:00
Zebediah Figura
5bf23cb2f5 vkd3d-shader/tpf: Explicitly write the class and base type for non-numeric types.
Avoid relying on that information being stored in the hlsl_type.
2024-03-27 22:36:36 +01:00
Zebediah Figura
34e9c101e8 vkd3d-shader/tpf: Do not write structs with no numeric fields into the RDEF. 2024-03-27 22:36:35 +01:00
Zebediah Figura
0b1f11dd33 vkd3d-shader/hlsl: Allocate register reservations for structs as well. 2024-03-27 22:36:34 +01:00
Zebediah Figura
622fcda9ee vkd3d-shader/tpf: Do not write non-numeric struct fields into the RDEF. 2024-03-27 22:36:33 +01:00
Zebediah Figura
8ef5ee54c9 vkd3d-utils: Implement ID3D12ShaderReflectionType::GetMemberTypeByIndex(). 2024-03-27 22:36:33 +01:00
Zebediah Figura
dfed19ccf6 vkd3d-utils: Implement ID3D12ShaderReflectionVariable::GetType(). 2024-03-27 22:36:33 +01:00
Zebediah Figura
24b047f1fe vkd3d-utils: Implement ID3D12ShaderReflectionConstantBuffer::GetVariableByIndex(). 2024-03-27 22:36:33 +01:00
Zebediah Figura
2fceebd050 vkd3d-utils: Parse the RD11 section. 2024-03-27 22:36:33 +01:00
Zebediah Figura
90cd57404b vkd3d-utils: Implement ID3D12ShaderReflection::GetConstantBufferByIndex(). 2024-03-27 22:36:31 +01:00
Henri Verbeet
166dc24b2f vkd3d: Move the vkd3d_mutex implementation to vkd3d-common. 2024-03-19 22:58:53 +01:00
Henri Verbeet
2431357fd6 vkd3d-common: Merge vkd3d_debug.h into vkd3d_common.h.
There doesn't seem much point in separating these. Pretty much all of
vkd3d (eventually) includes vkd3d_debug.h, and vkd3d_debug.h includes
vkd3d_common.h because it uses VKD3D_PRINTF_FUNC. The separation also
makes it inconvenient to use the debug macros in vkd3d_common.h.
2024-03-19 22:58:51 +01:00
Henri Verbeet
5de5f241a6 vkd3d-shader/ir: Pass a struct vsir_program to vkd3d_shader_normalise(). 2024-03-19 22:57:56 +01:00
Henri Verbeet
0715734dfb tests/shader_runner: Add GLSL support to the GL runner. 2024-03-19 22:57:50 +01:00
Henri Verbeet
164608a007 vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_dst_param(). 2024-03-18 23:08:03 +01:00
Henri Verbeet
e2d1a878a7 vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_src_param(). 2024-03-18 23:08:02 +01:00
Henri Verbeet
939a7fbe88 vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_tessellator_partitioning(). 2024-03-18 23:08:01 +01:00
Henri Verbeet
5f5145b8f8 vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_tessellator_output_primitive(). 2024-03-18 23:08:00 +01:00
Henri Verbeet
f61a92b908 vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_tessellator_domain(). 2024-03-18 23:07:58 +01:00
Henri Verbeet
b98171878f vkd3d-shader/glsl: Keep track of the current indentation level. 2024-03-18 23:07:52 +01:00
Giovanni Mascellani
e5f486edd3 vkd3d-shader/ir: Use type "unused" for labels.
The label itself is certainly an unsigned integer, but the register
has no meaningful data type. It cannot be evaluated to anything.
The goal of this is to reduce cluttering in the internal ASM dumps.
2024-03-18 23:07:45 +01:00
Giovanni Mascellani
d418f49888 vkd3d-shader/d3d-asm: Do not dump a register's type if it's unused. 2024-03-18 23:07:44 +01:00
Giovanni Mascellani
22d19aed58 vkd3d-shader/d3d-asm: Indent instructions inside a block. 2024-03-18 23:07:43 +01:00
Conor McCarthy
0c01a55c7d vkd3d-shader/dxil: Implement DX intrinsic Saturate. 2024-03-18 23:07:40 +01:00
Conor McCarthy
4599d3c1cf vkd3d-shader/dxil: Implement DX intrinsic FAbs. 2024-03-18 23:07:39 +01:00
Conor McCarthy
33694f08fc vkd3d-shader/dxil: Implement DX intrinsics FMa, FMad, IMad and UMad. 2024-03-18 23:07:38 +01:00
Conor McCarthy
421d311a49 vkd3d-shader/spirv: Use dst register data type in spirv_compiler_emit_imad(). 2024-03-18 23:07:36 +01:00
Conor McCarthy
08cc5027cf tests/hlsl: Add tests for mad() and fma(). 2024-03-18 23:07:35 +01:00
Nikolay Sivov
f55b152811 vkd3d-shader/fx: Fail effect writing on unsupported annotations.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:32 +01:00
Nikolay Sivov
206eeb0752 vkd3d-shader/fx: Remove newlines from fixme messages.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:31 +01:00
Nikolay Sivov
4fc15d4b4a vkd3d-shader/fx: Add initial support for writing fx_2_0 parameters.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:30 +01:00
Nikolay Sivov
ed06e0bbef vkd3d-shader/fx: Populate global variables list during context initialization.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:29 +01:00
Nikolay Sivov
ea686e8f5a vkd3d-shader/fx: Fix an instruction block leak.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:28 +01:00
Nikolay Sivov
9c7fe62da6 vkd3d-shader/fx: Use type writing helper only for fx_4+.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:27 +01:00
Conor McCarthy
3f99719ff2 vkd3d-shader/dxil: Implement DX intrinsic BufferUpdateCounter. 2024-03-18 23:07:23 +01:00
Conor McCarthy
52a831ba0d tests/hlsl: Add UAV counter tests. 2024-03-18 23:07:21 +01:00
Giovanni Mascellani
8c15377ffc vkd3d-shader/ir: Emit multilevel jumps in the structured program.
The new structurizer therefore reaches feature parity with the
older simple one, except for a couple of points:

 * the old structurizer accepts any CFG, without requiring reducibility;
   however, the DXIL specification requires the CFG to be reducible
   anyway, so we're not really losing anything;

 * the new structurizer additionally requires that no block has two
   incoming back arrows; AFAIK this is condition that can happen,
   but in practice it seems to be rare; also, it's not hard to add
   support for it, as soon as it is decided it is useful.

On the other hand, the new structurizer makes use of the merging
information that are reconstructed from the CFG, which is important
for downstream optimization and fundamental for correctly emitting
tangled instructions.

Taking these considerations into account, the old structurizer is
considered superseded and is therefore removed.
2024-03-18 23:07:17 +01:00
Giovanni Mascellani
c2aa01de6e vkd3d-shader/ir: Emit the reconstructed structured program.
Multilevel jumps are not supported yet, and trigger a fallback to the
simple structurizer.
2024-03-18 23:07:15 +01:00
Henri Verbeet
abf76372e0 vkd3d-shader/ir: Pass a struct vsir_program to vsir_validate(). 2024-03-14 23:24:29 +01:00
Henri Verbeet
7af3e9300f vkd3d-shader/ir: Pass a struct vsir_program to flatten_control_flow_constructs(). 2024-03-14 23:24:28 +01:00
Henri Verbeet
268989f5b9 vkd3d-shader/ir: Pass a struct vsir_program to normalise_combined_samplers(). 2024-03-14 23:24:27 +01:00
Henri Verbeet
674bebe9c9 vkd3d-shader/ir: Pass a struct vsir_program to shader_normalise_io_registers(). 2024-03-14 23:24:24 +01:00
Henri Verbeet
8a60814476 vkd3d-shader/glsl: Generate comments for unhandled instructions.
Mostly for debugging purposes; we'll fail compilation, but will still trace
the shader that would have been generated.
2024-03-14 23:24:19 +01:00
Henri Verbeet
9869fbb0ea vkd3d-shader/glsl: Trace the generated shader.
Even if compilation ultimately failed.
2024-03-14 23:24:16 +01:00
Francisco Casas
619edb4c38 vkd3d-shader/hlsl: Lower CMP instructions for vertex shaders. 2024-03-14 22:49:29 +01:00
Francisco Casas
4c40deaac1 vkd3d-shader/hlsl: Use hlsl_fixme() on missing SM1 matrix writemask lowering.
Instead of FIXME(). Otherwise we compile invalid d3dbc.
2024-03-14 22:49:29 +01:00
Francisco Casas
5c986b9cde vkd3d-shader/hlsl: Lower SLT instructions for pixel shaders.
Properly passing the inverse-trig.shader_test tests whose qualifiers
have been removed requires making spirv.c capable of handling ABS.
The same happens for the ps_3_0 equality test in
float-comparison.shader_test.
2024-03-14 22:49:29 +01:00