Commit Graph

6625 Commits

Author SHA1 Message Date
Francisco Casas
5b21cc67f1 vkd3d-shader/hlsl: Split hlsl_sm4_write().
Similarly to the already done split from

    HLSL IR -> d3dbc

to

    HLSL IR -> vsir -> d3bc

we now start splitting the

    HLSL IR -> tpf

translation into

    HLSL IR -> vsir -> tpf

So hlsl_sm4_write is split into two functions, sm4_generate_vsir() and
tpf_compile().

This translation should be completed once tpf_compile() no longer needs
the hlsl_ctx and entry_func parameters.
2024-10-16 17:08:50 +02:00
Francisco Casas
3601397703 vkd3d-shader/d3dbc: Remove the "hlsl_" prefix from external functions.
They no longer rely on HLSL IR.

Also, rename them from "_from_semantic" to "from_semantic_name".
2024-10-16 16:52:45 +02:00
Francisco Casas
0ab5e1cb03 tests: Test interstage signature with arrays. 2024-10-16 16:49:55 +02:00
Francisco Casas
d3c464212d tests: Test interstage signature optimizations. 2024-10-16 16:47:41 +02:00
Giovanni Mascellani
bc351f4b70 tests/shader-runner: Make geometry shaders optional.
This allows the Vulkan runner to execute in environments which do
not support geometry shaders, most notably MoltenVK. In particular,
that enables SM<4 shaders to run in such environments
2024-10-15 16:55:15 +02:00
Giovanni Mascellani
7f834f57e5 vkd3d-shader/ir: Validate that signatures are sensible for shader type. 2024-10-15 16:47:04 +02:00
Giovanni Mascellani
859b911b3a vkd3d-shader/ir: Validate the output control point count. 2024-10-15 16:47:04 +02:00
Giovanni Mascellani
bd3ba87747 vkd3d-shader/ir: Validate the input control point count. 2024-10-15 16:47:04 +02:00
Henri Verbeet
90616be301 vkd3d-shader/dxil: Shift register write masks by the component index in sm6_parser_emit_dx_store_output().
To account for the change we made in commit
c571a45e65 on the SPIR-V side.
2024-10-15 16:45:28 +02:00
Henri Verbeet
2d848cf001 tests: Add a basic shader model 6 interface packing test as well. 2024-10-15 16:45:28 +02:00
Francisco Casas
104435df5f vkd3d-shader/tpf: Use dcl_input_ps_sgv for sv_isfrontface.
As the native compiler does.
2024-10-15 16:44:38 +02:00
Francisco Casas
ad2f821ff5 vkd3d-shader/tpf: Write sysval semantic consistently.
Specifically we should write the sysval semantic as an instruction idx
for the following instructions:

    VKD3D_SM4_OP_DCL_INPUT_SGV
    VKD3D_SM4_OP_DCL_INPUT_PS_SGV
    VKD3D_SM4_OP_DCL_INPUT_SIV
    VKD3D_SM4_OP_DCL_INPUT_PS_SIV
    VKD3D_SM4_OP_DCL_OUTPUT_SIV

and not the following ones:

    VKD3D_SM4_OP_DCL_INPUT
    VKD3D_SM4_OP_DCL_PS_INPUT
    VKD3D_SM4_OP_DCL_OUTPUT

Which is consistent with what we do when reading these instructions in
the following functions:

    shader_sm4_read_declaration_register_semantic()
    shader_sm4_read_dcl_input_ps_siv()

and

    shader_sm4_read_dcl_input_ps()
    shader_sm4_read_declaration_dst()

for the non-SGV and non-SIV cases.

Note that the non-SGV and non-SIV instructions don't need/use this
extra information because they rely on the dst register type and index.

I suggest to introduce this change because the here replaced check is
brittle, and we might be omitting the sysval semantic in some cases.
2024-10-15 16:44:38 +02:00
Nikolay Sivov
5fb3a91276 vkd3d-shader/hlsl: Implement the modf() intrinsic.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-10-15 16:43:33 +02:00
Shaun Ren
cb55ba5b9b vkd3d-shader/hlsl: Invoke prepend_uniform_copy() only once for global uniforms.
We store the copy instructions in a separate block that is cloned for
each function processed.
2024-10-15 16:42:47 +02:00
Shaun Ren
0c5dc53fd2 vkd3d-shader/hlsl: Allocate temporary registers separately for each entry function. 2024-10-15 16:39:50 +02:00
Shaun Ren
5f8570b933 vkd3d-shader/hlsl: Track whether a variable is read in any entry function. 2024-10-15 16:18:36 +02:00
Shaun Ren
f15a1c0b23 vkd3d-shader/hlsl: Record semantic extern vars separately for each entry function.
This is required in order to process the entry point function and the
patch constant function in hull shaders.
2024-10-15 16:18:27 +02:00
Shaun Ren
bbc6b56ab0 vkd3d-shader/hlsl: Clone static_initializers for each entry function. 2024-10-15 16:13:31 +02:00
Shaun Ren
5571522efe vkd3d-shader/hlsl: Introduce process_entry_function() helper.
This will be used in order to process both the entry point function
and the patch constant function in hull shaders.
2024-10-15 16:10:56 +02:00
Henri Verbeet
9dd42d15dd build: Actually run interface-packing.shader_test and tessellation-patch-vars.shader_test. 2024-10-14 19:40:13 +02:00
Giovanni Mascellani
5dfaa26990 vkd3d-shader/ir: Validate the allowed data type and component count for SV_CullDistance. 2024-10-14 19:39:12 +02:00
Giovanni Mascellani
cd5718f59d vkd3d-shader/ir: Validate the allowed signatures and stages for SV_CullDistance. 2024-10-14 19:39:12 +02:00
Giovanni Mascellani
33972998a9 vkd3d-shader/ir: Validate the allowed data type and component count for SV_ClipDistance. 2024-10-14 19:39:12 +02:00
Giovanni Mascellani
0465549c9d vkd3d-shader/ir: Validate the allowed signatures and stages for SV_ClipDistance. 2024-10-14 19:39:12 +02:00
Giovanni Mascellani
20b3a4c362 vkd3d-shader/ir: Validate the allowed data type and component count for SV_Position. 2024-10-14 19:39:12 +02:00
Giovanni Mascellani
962ce961d4 vkd3d-shader/ir: Validate the allowed signatures and stages for SV_Position. 2024-10-14 19:39:12 +02:00
Giovanni Mascellani
2d452842ed vkd3d-shader/ir: Introduce a helper for validating MISCTYPE registers. 2024-10-14 15:42:00 +02:00
Giovanni Mascellani
15d8591a26 vkd3d-shader/ir: Introduce a helper for validating RASTOUT registers. 2024-10-14 15:42:00 +02:00
Giovanni Mascellani
7021a57193 vkd3d-shader/ir: Introduce a helper for validating UAV registers. 2024-10-14 15:42:00 +02:00
Giovanni Mascellani
c60eecbac8 vkd3d-shader/ir: Introduce a helper for validating RESOURCE registers. 2024-10-14 15:42:00 +02:00
Giovanni Mascellani
edbf7349bd vkd3d-shader/ir: Introduce a helper for validating SAMPLER registers. 2024-10-14 15:42:00 +02:00
Giovanni Mascellani
52761e689b vkd3d-shader/ir: Introduce a helper for validating registers without indices. 2024-10-14 15:42:00 +02:00
Giovanni Mascellani
ce638b9cca vkd3d-shader/ir: Introduce a helper for validating LABEL registers. 2024-10-14 15:42:00 +02:00
Giovanni Mascellani
92d1ba9188 vkd3d-shader/ir: Introduce a helper for validating SSA registers. 2024-10-14 15:42:00 +02:00
Giovanni Mascellani
1c43b2e55f vkd3d-shader/ir: Introduce a helper for validating TEMP registers. 2024-10-14 15:42:00 +02:00
Nikolay Sivov
35d2df14d8 vkd3d-shader/fx: Add support for tracing string variables.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-10-14 15:40:46 +02:00
Nikolay Sivov
907b6705fe vkd3d-shader/fx: Add support for parsing constant buffer elements.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-10-14 15:40:14 +02:00
Nikolay Sivov
6801ad9b7a vkd3d-shader/fx: Introduce a parser/disassembler.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-10-14 15:20:41 +02:00
Elizabeth Figura
cd249a47b8 tests: Test FFP point size clamping. 2024-10-10 22:44:33 +02:00
Elizabeth Figura
1e3c1392bd vkd3d-shader/ir: Allow controlling FFP point size clamping through vkd3d-shader parameters. 2024-10-10 22:44:26 +02:00
Elizabeth Figura
ec53e325b6 tests: Test FFP point size. 2024-10-10 22:30:35 +02:00
Henri Verbeet
3ddf46649b tests/shader_runner: Trace the "clip-planes" cap. 2024-10-10 22:28:26 +02:00
Elizabeth Figura
54092286be vkd3d-shader/ir: Allow controlling FFP point size through a vkd3d-shader parameter. 2024-10-10 22:25:09 +02:00
Elizabeth Figura
6ee17cf77e vkd3d-shader/spirv: Implement shader point size. 2024-10-10 22:14:45 +02:00
Elizabeth Figura
a29a4288d2 tests: Add a test for shader point size output. 2024-10-10 21:50:30 +02:00
Elizabeth Figura
56e5fca501 vkd3d-shader/spirv: Always write the point size in vertex shaders.
Vulkan requires that point size be written.

There should be no backwards compatibility concern here, since the vertex shader
supplies point size with the lowest priority.
2024-10-10 21:50:30 +02:00
Giovanni Mascellani
f0e31dd6b3 vkd3d-shader/ir: Only allow PATCHCONST registers as destination parameteres in Hull Shaders. 2024-10-10 20:04:13 +02:00
Giovanni Mascellani
f2d181e65c vkd3d-shader/ir: Only allow PATCHCONST registers as source parameteres in Hull and Domain Shaders. 2024-10-10 20:04:13 +02:00
Giovanni Mascellani
6cbe5ffa15 vkd3d-shader/ir: Disallow OUTPUT registers in source parameters. 2024-10-10 20:04:13 +02:00
Giovanni Mascellani
5b5a27dccb vkd3d-shader/ir: Disallow INPUT registers in destination parameters. 2024-10-10 20:04:13 +02:00