Commit Graph

4770 Commits

Author SHA1 Message Date
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
Giovanni Mascellani
7b1bc5ca74 vkd3d-shader/ir: Validate component types in shader signatures. 2024-10-10 19:58:00 +02:00
Giovanni Mascellani
5034e1eeb5 vkd3d-shader/ir: Validate system value semantics in shader signatures. 2024-10-10 19:58:00 +02:00
Giovanni Mascellani
6e14d7ab90 vkd3d-shader/ir: Validate usage masks in shader signatures. 2024-10-10 19:58:00 +02:00
Giovanni Mascellani
71dccc0132 vkd3d-shader/ir: Do not emit an instruction number before starting validating instructions. 2024-10-10 19:58:00 +02:00
Feifan He
ccc48291b3 vkd3d-shader/msl: Implement support for VKD3DSPR_OUTPUT registers. 2024-10-10 19:45:34 +02:00
Feifan He
48a2207511 vkd3d-shader/msl: Implement support for VKD3DSPR_INPUT registers. 2024-10-10 19:43:12 +02:00
Feifan He
75e0cde045 vkd3d-shader/msl: Implement support for VKD3DSPR_CONSTBUFFER registers. 2024-10-10 19:41:31 +02:00
Feifan He
2d7832e738 vkd3d-shader/msl: Generate shader descriptor structure declarations. 2024-10-10 19:40:34 +02:00
Giovanni Mascellani
9cb4207c92 vkd3d-shader/spirv: Write spirv_compiler_emit_variable() in terms of spirv_compiler_emit_array_variable().
Essentially for code clarity, so that it's more obvious that a
non-array variable is indeed an array variable with no indices.
2024-10-09 13:15:25 +02:00
Henri Verbeet
aba45d0386 vkd3d-shader/glsl: Implement VKD3DSIH_CONTINUE. 2024-10-09 13:14:31 +02:00
Henri Verbeet
bc4aacd21e vkd3d-shader/glsl: Implement VKD3DSIH_ULT. 2024-10-09 13:14:31 +02:00
Henri Verbeet
27eb3c07ad vkd3d-shader/glsl: Implement switches. 2024-10-09 13:14:31 +02:00
Henri Verbeet
93f1af721f vkd3d-shader/glsl: Implement loops. 2024-10-09 13:14:31 +02:00
Henri Verbeet
790f35533b vkd3d-shader/glsl: vkd3d-shader/glsl: Implement support for VKD3D_SHADER_COMPONENT_INT inputs. 2024-10-09 13:14:31 +02:00
Giovanni Mascellani
bb0e4506a6 vkd3d-shader/ir: Validate masks in shader signatures. 2024-10-09 13:13:00 +02:00
Giovanni Mascellani
c3b31b96e1 vkd3d-shader/ir: Validate register counts in patch constant signatures. 2024-10-09 13:13:00 +02:00
Giovanni Mascellani
a29270fa64 vkd3d-shader/ir: Validate register counts in output signatures. 2024-10-09 13:13:00 +02:00
Giovanni Mascellani
118f494de3 vkd3d-shader/ir: Validate register counts in input signatures. 2024-10-09 13:13:00 +02:00
Giovanni Mascellani
7202e6e2f3 vkd3d-shader/ir: Allow a patch constant signature only for Hull and Domain Shaders. 2024-10-09 13:13:00 +02:00
Giovanni Mascellani
16efb7c0c6 vkd3d-shader: Ignore the patch constant signature when it doesn't make sense. 2024-10-09 13:13:00 +02:00
Giovanni Mascellani
cd74461d6d vkd3d-shader/ir: Set the signature sort indices in shader_signature_merge().
Since the sort index is just a convenience field it is more
appropriate to only set it where it is required, instead of
requiring all frontends and passes to retain sensible values for
it.
2024-10-08 22:05:38 +02:00
Giovanni Mascellani
c332adaa68 vkd3d-shader/d3d-asm: Dump signatures when tracing a VSIR program. 2024-10-08 22:04:59 +02:00
Giovanni Mascellani
c7d09bba97 vkd3d-shader/d3d-asm: Rename dump_signatures() to dump_dxbc_signatures(). 2024-10-08 22:04:59 +02:00
Giovanni Mascellani
b21ae8d9c2 vkd3d-shader/d3d-asm: Rename dump_signature() to dump_dxbc_signature().
To stress the fact that only the fields that appear in the DXBC
signature sections are considered.
2024-10-08 22:04:59 +02:00
Giovanni Mascellani
1256b4f862 vkd3d-shader/d3d-asm: Rename vkd3d_shader_trace() to vsir_program_trace(). 2024-10-08 22:04:59 +02:00
Giovanni Mascellani
3428ed7a64 vkd3d-shader/dxil: Emit double arithmetic operations when appropriate. 2024-10-08 22:04:32 +02:00
Henri Verbeet
cf92d9f398 vkd3d-shader/ir: Store the thread group size in struct vsir_program. 2024-10-08 22:03:05 +02:00
Henri Verbeet
fc8384462f vkd3d-shader/glsl: Implement VKD3DSIH_IMAX. 2024-10-08 22:01:56 +02:00
Henri Verbeet
c2a42214ff vkd3d-shader/glsl: Implement VKD3DSIH_INEG. 2024-10-08 22:01:56 +02:00
Henri Verbeet
e55bc76fd2 vkd3d-shader/glsl: Implement support for VKD3D_SHADER_COMPONENT_UINT inputs. 2024-10-08 22:01:56 +02:00
Henri Verbeet
0acebd6e09 vkd3d-shader/glsl: Implement support for VKD3D_SHADER_COMPONENT_UINT outputs. 2024-10-08 22:01:56 +02:00
Henri Verbeet
95a46fb0f0 vkd3d-shader/glsl: Handle SV_POSITION inputs in fragment shaders. 2024-10-08 22:01:56 +02:00
Evan Tang
c571a45e65 vkd3d-shader/ir: Don't shift register write masks by the component index in shader_dst_param_io_normalise().
This loses information about which source elements they want, making
"o.yzw = reg.xxyz" compile to "o = reg.xxy" instead of "o = reg.xyz".
2024-10-07 17:36:11 +02:00
Evan Tang
b5ccc0e705 vkd3d-shader/ir: Remove an unnecessary typecast in shader_instruction_eliminate_phase_instance_id(). 2024-10-07 17:34:54 +02:00
Elizabeth Figura
34fdb304bb vkd3d-shader/hlsl: Handle error expressions in increments. 2024-10-07 17:33:07 +02:00
Elizabeth Figura
84685fb56d vkd3d-shader/hlsl: Handle error expressions in subscripts. 2024-10-07 17:33:07 +02:00
Elizabeth Figura
c66f25016b vkd3d-shader/hlsl: Handle error expressions in array indexes. 2024-10-07 17:33:07 +02:00
Elizabeth Figura
41ff4343e1 vkd3d-shader/hlsl: Handle error expressions in explicit casts. 2024-10-07 17:33:07 +02:00
Elizabeth Figura
10efdd3f63 vkd3d-shader/hlsl: Introduce an add_explicit_conversion() helper. 2024-10-07 17:33:07 +02:00
Elizabeth Figura
aa79bfa681 vkd3d-shader/preproc: Store argument values per expansion, not per macro. 2024-10-07 17:32:27 +02:00
Henri Verbeet
e7c4867359 vkd3d-shader/glsl: Implement support for VKD3DSPR_IDXTEMP registers. 2024-10-07 17:31:20 +02:00
Henri Verbeet
944929d0da vkd3d-shader/glsl: Implement VKD3DSIH_IADD. 2024-10-07 17:31:20 +02:00
Henri Verbeet
4eed6b8887 vkd3d-shader/glsl: Add interpolation modifiers to interstage inputs and outputs. 2024-10-07 17:31:20 +02:00
Henri Verbeet
7b47528e4b vkd3d-shader/glsl: Handle SV_VERTEX_ID inputs. 2024-10-07 17:31:20 +02:00
Henri Verbeet
79455041f0 vkd3d-shader/glsl: Implement VKD3DSIH_EQO. 2024-10-07 17:31:19 +02:00
Nikolay Sivov
d1c2ae3f0e vkd3d-shader/hlsl: Remove the type equality assertion for binary expression arguments. 2024-10-07 17:29:40 +02:00
Francisco Casas
0b989c9f37 vkd3d-shader/hlsl: Fix the conditions to discard default values.
Otherwise default_values for strings are lost.

Thanks to Nikolay Sivov for pointing this out.
2024-10-07 17:28:07 +02:00
Feifan He
b7314e2438 vkd3d-shader/msl: Handle signature element masks in the prologue and epilogue. 2024-10-07 17:21:52 +02:00
Feifan He
7c42da465a vkd3d-shader/msl: Generate the shader entry point prologue. 2024-10-07 17:21:52 +02:00
Feifan He
cd070f9995 vkd3d-shader/msl: Generate the shader entry point epilogue. 2024-10-07 17:21:52 +02:00
Feifan He
a88f3168e5 vkd3d-shader/msl: Generate the shader entry point. 2024-10-07 17:21:52 +02:00
Feifan He
577cc47740 vkd3d-shader/msl: Generate shader input structure declarations. 2024-10-07 17:21:52 +02:00
Feifan He
cd5917c648 vkd3d-shader/msl: Generate shader output structure declarations. 2024-10-07 17:21:27 +02:00
Henri Verbeet
25232f2b2b vkd3d-shader/glsl: Implement VKD3DSIH_IMUL. 2024-10-03 19:20:14 +02:00