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
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
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
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
1e3c1392bd
vkd3d-shader/ir: Allow controlling FFP point size clamping through vkd3d-shader parameters.
2024-10-10 22:44: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
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
Henri Verbeet
bf71b13797
vkd3d-shader/glsl: Implement support for compute shaders.
2024-10-10 20:00:45 +02:00
Henri Verbeet
fb17ba18ae
vkd3d-shader/glsl: Implement VKD3DSIH_STORE_UAV_TYPED.
2024-10-10 20:00:45 +02:00
Henri Verbeet
8e47ecbd92
vkd3d-shader/glsl: Use the semantic index for shader_out_* declarations.
...
Because that's what we use in shader_glsl_print_sysval_name(). Fragment
shaders like the ones from uav-rwtexture.shader_test that output to
sv_target1 would declare "shader_out_0", but then store to
"shader_out_1" in the epilogue.
2024-10-10 20:00:45 +02:00
Henri Verbeet
afb1a2610e
vkd3d-shader/glsl: Use VKD3D_SHADER_ERROR_GLSL_UNSUPPORTED for unsupported CBV descriptor arrays.
2024-10-10 20:00:45 +02:00
Henri Verbeet
845d6f9134
vkd3d-shader/ir: Remove VKD3DSIH_DCL_UAV_TYPED instructions.
2024-10-10 20:00:45 +02:00
Giovanni Mascellani
080f25c583
vkd3d-shader/ir: Do not search for signature elements using a scalar write mask.
...
The fallback code was added when shader_signature_find_element_for_reg()
would crash when unable to find the requested signature element.
Now it doesn't any more, and the second search is redundant.
2024-10-10 20:00:19 +02:00
Giovanni Mascellani
690c47dbf8
vkd3d-shader/ir: Validate that constant interpolation is used with integer types.
2024-10-10 19:58:00 +02:00
Giovanni Mascellani
e366fc3ad6
vkd3d-shader/ir: Validate interpolation mode in shader signatures.
2024-10-10 19:58:00 +02:00
Giovanni Mascellani
831a797837
vkd3d-shader/ir: Validate minimum precision in shader signatures.
2024-10-10 19:58:00 +02:00