Francisco Casas
87f01f5205
vkd3d-shader/hlsl: Remove SM1 fixme for matrix writemasks.
...
hlsl_ir_store instructions don't use writemasks for whole matrices.
2024-08-08 23:32:03 +02:00
Francisco Casas
9f515a9daa
vkd3d-shader/hlsl: Lower non-constant array loads for SM1.
...
This is achieved by means of creating a variable storing zero,
loading every array element, comparing if the non-constant index
matches the index of that element at runtime, and in that case
store the corresponding element in the variable.
This seems to be the same strategy that the native compiler uses.
2024-08-08 23:30:39 +02:00
Francisco Casas
eb2d320596
vkd3d-shader/hlsl: Avoid dereferencing rel_offset if it is NULL.
...
We are currently using &offset_node->loc when offset_node is NULL.
A NULL dereference of rel_offset can also happen if
hlsl_offset_from_deref() fails because the dereference is out of
bounds.
2024-08-08 23:28:31 +02:00
Francisco Casas
e8354ac499
vkd3d-shader/hlsl: Parse string type.
2024-08-07 15:53:07 +02:00
Francisco Casas
652db433e1
vkd3d-shader/hlsl: Parse string escape sequences.
2024-08-07 15:51:43 +02:00
Francisco Casas
090df488ba
vkd3d-shader/hlsl: Parse string constants.
2024-08-07 15:48:59 +02:00
Nikolay Sivov
c44a18b3d1
vkd3d-shader/fx: Add support for SetDomainShader(), SetComputeShader(), and SetHullShader() states.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-06 16:54:19 +02:00
Nikolay Sivov
1559237780
vkd3d-shader/fx: Fix state block entry array shifting when decomposing.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-06 16:54:19 +02:00
Nikolay Sivov
7c3677b114
vkd3d-shader/hlsl: Add parser support for ComputeShader, DomainShader, and HullShader types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-06 16:54:19 +02:00
Nikolay Sivov
2cbad81b55
vkd3d-shader/fx: Handle SetRasterizerState().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-06 16:54:19 +02:00
Giovanni Mascellani
784e69a366
vkd3d: Check the entire root signature for register conflicts.
...
Not just each descriptor table individually.
2024-08-06 16:53:06 +02:00
Nikolay Sivov
a3f4785720
vkd3d-shader/fx: Decompose function-style state assignments to individual states.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-05 16:01:33 +02:00
Stefan Dösinger
d4c2a7f22b
vkd3d: Pass a proper struct shader_cache_key * to rb_put() in vkd3d_shader_cache_add_entry().
2024-08-05 15:59:53 +02:00
Giovanni Mascellani
46aec9fba8
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in preproc.y.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
625327653b
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in preproc.l.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
351220f182
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in preproc.h.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
4a04324ecc
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in ir.c.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
5e1ae5aaa3
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl.y.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
97a7ec8914
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl.h.
2024-08-05 15:57:56 +02:00
Conor McCarthy
969cae8b67
vkd3d: Add support for the ID3D12CommandList6 interface.
2024-08-05 15:56:09 +02:00
Giovanni Mascellani
9ff5b2ce7a
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl.c.
2024-08-01 15:18:15 +02:00
Giovanni Mascellani
4e7d0faaf0
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl_constant_ops.c.
2024-08-01 15:18:15 +02:00
Giovanni Mascellani
eff30577af
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl_codegen.c.
2024-08-01 15:18:15 +02:00
Giovanni Mascellani
02ef731b9a
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in fx.c.
2024-08-01 15:18:15 +02:00
Giovanni Mascellani
7d3e8f49e4
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in dxil.c.
2024-08-01 15:18:15 +02:00
Francisco Casas
e6e82ad3f6
vkd3d-shader/hlsl: Add missing src1 and src2 constants to sincos on SM2.
...
The sincos instruction expects two specific constants on 2.0 and 2.1 profiles.
Consider the following shader:
uniform float u;
float4 main() : sv_target
{
return sin(u);
}
On native, with ps_2_0, this compiles as:
ps_2_0
def c3, 0.159154937, 0.5, 6.28318548, -3.14159274
def c1, -1.55009923e-006, -2.17013894e-005, 0.00260416674, 0.00026041668
def c2, -0.020833334, -0.125, 1, 0.5
mov r0.xy, c3
mad r0.x, c0.x, r0.x, r0.y
frc r0.x, r0.x
mad r0.x, r0.x, c3.z, c3.w
sincos r1.y, r0.x, c1, c2
mov r0, r1.y
mov oC0, r0
We are not emitting the src1 and src2 constant arguments before this
patch.
2024-07-31 22:22:38 +02:00
Giovanni Mascellani
4094e5dbeb
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in dxbc.c.
2024-07-30 16:32:59 +02:00
Giovanni Mascellani
bcffcb4a29
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in d3dbc.c
2024-07-30 16:32:59 +02:00
Giovanni Mascellani
8e08fa6bf2
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in d3d_asm.c.
2024-07-30 16:32:59 +02:00
Giovanni Mascellani
5af138b247
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in checksum.c.
2024-07-30 16:32:59 +02:00
Giovanni Mascellani
ba381497cc
vkd3d-common: Remove an assertion in vkd3d_dbg_printf().
...
We want to get rid of assertions and only use the new VKD3D_ASSERT(),
but this cannot be done here, because a failing VKD3D_ASSERT() would
call back again to vkd3d_dbg_printf().
At the same time the asserted condition should be simple enough to
debug even without the assertion, since logging with a bad level
will likely result in either a crash or writing garbage to the log.
2024-07-30 16:32:59 +02:00
Atharva Nimbalkar
2170fdc633
vkd3d-shader/glsl: Implement support for VKD3DSPR_TEMP registers.
2024-07-30 16:31:59 +02:00
Atharva Nimbalkar
337a030908
vkd3d-shader/glsl: Implement VKD3DSIH_MOV.
2024-07-30 16:31:59 +02:00
Henri Verbeet
c7589d8f19
vkd3d-shader/ir: Remove VKD3DSIH_DCL_SAMPLER instructions.
2024-07-30 16:31:44 +02:00
Henri Verbeet
fffe521b80
vkd3d-shader/ir: Remove VKD3DSIH_DCL instructions.
2024-07-30 16:31:44 +02:00
Giovanni Mascellani
240d31c793
vkd3d: Replace assert() with VKD3D_ASSERT() in vkd3d_private.h.
2024-07-29 19:12:13 +02:00
Giovanni Mascellani
529647142c
vkd3d: Replace assert() with VKD3D_ASSERT() in utils.c.
2024-07-29 19:12:13 +02:00
Giovanni Mascellani
bd75396b38
vkd3d: Replace assert() with VKD3D_ASSERT() in state.c.
2024-07-29 19:12:13 +02:00
Giovanni Mascellani
02b898bec0
vkd3d: Replace assert() with VKD3D_ASSERT() in resource.c.
2024-07-29 19:12:13 +02:00
Giovanni Mascellani
150bf69da9
vkd3d: Replace assert() with VKD3D_ASSERT() in command.c.
2024-07-29 19:12:13 +02:00
Giovanni Mascellani
51b65688e1
ci: Abort on assertions on the CI.
2024-07-29 13:17:19 +02:00
Giovanni Mascellani
d7fc2693c4
vkd3d: Introduce a softer form of assertion.
...
Triggering an ERR() instead of aborting the program.
2024-07-29 13:17:19 +02:00
Giovanni Mascellani
a484063cd2
vkd3d: Introduce debug severity MESSAGE.
...
That's intended for messages that it's pretty important that the
user receives, but that are not proper error messages.
2024-07-29 13:17:19 +02:00
Elizabeth Figura
ae5cd6573f
vkd3d-shader: Allow controlling d3d color shade mode through vkd3d-shader parameters.
2024-07-24 16:08:10 +02:00
Elizabeth Figura
d20d0fc69f
vkd3d-shader: Use the program parameters in spirv_compiler_alloc_spec_constant_id().
2024-07-24 16:07:13 +02:00
Victor Chiletto
a0de05f0b4
vkd3d-shader/hlsl: Implement the asint() intrinsic.
2024-07-24 16:06:03 +02:00
Nikolay Sivov
91dce79227
vkd3d-shader/fx: Correct one of the object counters in the fx_2_0 header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-24 16:04:21 +02:00
Elizabeth Figura
97cd941710
vkd3d-shader: Do not make the alpha test ref parameter VSIR_DIMENSION_VEC4.
2024-07-23 21:12:28 +02:00
Elizabeth Figura
1db7c03185
vkd3d-shader/spirv: Pass a vkd3d_data_type to spirv_compiler_emit_shader_parameter().
2024-07-23 21:11:15 +02:00
Elizabeth Figura
f6dd6d52b3
vkd3d-shader: Factor out a vsir_program_get_parameter() helper.
2024-07-23 21:10:00 +02:00
Elizabeth Figura
6b58b6f261
vkd3d-shader/spirv: Allocate output_info after normalization.
...
Normalization may change the signatures.
2024-07-23 21:09:00 +02:00
Shaun Ren
49caeee1fd
vkd3d-shader/hlsl: Support default values for function parameters.
2024-07-23 15:36:32 +02:00
Nikolay Sivov
29699d3d22
vkd3d-shader/fx: Set total pass count for fx_2_0.
...
Binaries with that field set incorrectly fail to load on Windows.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-23 15:23:54 +02:00
Nikolay Sivov
dcf4ce753b
vkd3d-shader/fx: Correct empty pass check.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-23 15:23:54 +02:00
Nikolay Sivov
958117df2f
vkd3d-shader/hlsl: Allow annotations on global variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-23 15:23:54 +02:00
Giovanni Mascellani
ba0fec4c51
vkd3d: Propagate errors out of d3d12_root_signature_append_vk_binding().
2024-07-22 16:01:37 +02:00
Giovanni Mascellani
4b7fe26b33
vkd3d: Remove the temporary pointers in vkd3d_physical_device_info_init().
...
They were rather pointless now.
2024-07-22 16:00:28 +02:00
Giovanni Mascellani
75c64e55cd
vkd3d: Rebuild the vkd3d_physical_device_info chain before creating the device.
...
vkd3d might decide to disable some extensions after the chain is created,
so the chain must be recreated with only the structures corresponding to
enabled extensions.
2024-07-22 16:00:28 +02:00
Giovanni Mascellani
a876e0b192
vkd3d: Allocate temporary arrays on the stack in d3d12_command_list_update_push_descriptors().
2024-07-17 15:52:37 +02:00
Conor McCarthy
ae0faf4500
vkd3d: Limit the workgroup X count for buffer UAV clears to the supported max.
2024-07-17 15:51:39 +02:00
Conor McCarthy
15f8657d74
vkd3d: Create a descriptor pool for static samplers when Vulkan-backed heaps are used.
...
Static samplers may be allocated from these pools.
2024-07-17 15:50:24 +02:00
Shaun Ren
0202393d41
vkd3d-shader/d3dbc: Implement HLSL_OP1_{COS,SIN}_REDUCED for SM1.
...
Also enable SM1 trigonometry function tests.
2024-07-16 19:03:52 +02:00
Shaun Ren
ea2ffc0b6c
vkd3d-shader/hlsl: Allocate registers for HLSL_OP1_{COS,SIN}_REDUCED with the required writemasks.
2024-07-16 19:02:01 +02:00
Shaun Ren
8724cbe5d5
vkd3d-shader/d3dbc: Implement HLSL_OP3_MAD for SM1.
2024-07-16 18:56:44 +02:00
Shaun Ren
b4845b9dca
vkd3d-shader/hlsl: Implement sin/cos for SM1.
...
Also introduce HLSL_OP3_MAD.
2024-07-16 18:55:22 +02:00
Shaun Ren
b3a11a9ec4
vkd3d-shader/ir: Lower SM1 SINCOS to SM4 SINCOS.
2024-07-16 15:24:58 +02:00
Elizabeth Figura
806363b765
vkd3d-shader: Allow controlling alpha test through vkd3d-shader parameters.
2024-07-11 17:02:11 +02:00
Elizabeth Figura
c2ce15b623
vkd3d-shader/spirv: Respect VKD3D_SHADER_CONDITIONAL_OP_Z when discard has a bool argument.
2024-07-11 16:59:06 +02:00
Elizabeth Figura
e8bdac8147
vkd3d-shader/spirv: Support passing shader parameters through uniform buffers.
2024-07-11 16:58:52 +02:00
Elizabeth Figura
98def3214b
vkd3d-shader: Introduce struct vkd3d_shader_parameter_info and struct vkd3d_shader_parameter1.
...
As the newly added documentation describes, this reroll serves two purposes:
* to allow shader parameters to be used for any target type (which allows using
parameters for things like Direct3D 8-9 alpha test),
* to allow the union in struct vkd3d_shader_parameter to contain types larger
than 32 bits (by specifying them indirectly through a pointer).
2024-07-11 16:48:09 +02:00
Petrichor Park
bec4f413dc
vkd3d-shader/tpf: Implmenent HLSL_OP1_RCP.
...
SM5 comes with a RCP opcode; for SM4, implement it as `DIV dst, 1, x`.
2024-07-11 16:44:16 +02:00
Petrichor Park
b3f0cd5788
vkd3d-shader/hlsl: Implement the rcp() intrinisic.
...
SM1 already has the RCP opcode implemented; SM4 implementation is in the
next commit.
2024-07-11 16:44:02 +02:00
Nikolay Sivov
c792114a6a
vkd3d-shader/fx: Do not output empty strings for missing semantics for fx_2_0.
...
This is directly visible in parameter description. For a parameter without semantic
it should return null, instead of a pointer to an empty string.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-11 00:36:05 +02:00
Giovanni Mascellani
9ebf779ef0
vkd3d: Propagate a failure in d3d12_descriptor_heap_init().
2024-07-11 00:34:58 +02:00
Elizabeth Figura
59f770214a
vkd3d-shader/hlsl: Implement output SV_Coverage.
2024-07-11 00:33:57 +02:00
Elizabeth Figura
71a3d55e8c
vkd3d-shader/hlsl: Implement the GetRenderTargetSampleCount() intrinsic.
2024-07-11 00:33:57 +02:00
Victor Chiletto
2034a8bab9
vkd3d-shader/hlsl: Implement loop unrolling.
...
Based on a patch by Nikolay Sivov.
Co-authored-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-11 00:32:53 +02:00
Victor Chiletto
7edd7dcf79
vkd3d-shader/hlsl: Allow cloned blocks to contain external references.
2024-07-11 00:32:53 +02:00
Victor Chiletto
5bc56d43bb
vkd3d-shader/hlsl: Parse loop and unroll loop attributes.
...
Based on a patch by Nikolay Sivov.
Co-authored-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-11 00:32:53 +02:00
Victor Chiletto
323f53bd7d
vkd3d-shader/hlsl: Pull evaluate_static_expression_as_uint() upwards.
2024-07-11 00:32:53 +02:00
Victor Chiletto
50e28f70ed
vkd3d-shader/hlsl: Defer bounds checks to after copy propagation.
...
We potentially generate OOB accesses during loop unrolling that are later deleted.
2024-07-11 00:32:53 +02:00
Victor Chiletto
317bd46efd
vkd3d-shader/hlsl: Use a switch in validate_static_object_references().
2024-07-11 00:32:49 +02:00
Victor Chiletto
67c690aa07
vkd3d-shader/d3dbc: Fix implicit enum conversion warning.
...
This slipped through and broke CI.
2024-07-10 00:06:14 +02:00
Petrichor Park
746222b349
vkd3d-shader/hlsl: Implement the faceforward() intrinsic.
2024-07-09 20:43:41 +02:00
Francisco Casas
60c8a813a3
vkd3d-shader/hlsl: Validate state block function calls.
2024-07-09 20:38:08 +02:00
Francisco Casas
b5f2e7daeb
vkd3d-shader/hlsl: Parse function call syntax on state blocks.
2024-07-09 20:36:28 +02:00
Francisco Casas
7bd53cf6d9
vkd3d-shader/hlsl: Free array sizes on function parameters (Valgrind).
2024-07-09 20:32:25 +02:00
Francisco Casas
b92baa40ec
vkd3d-shader/d3dbc: Don't write inconsequential MOVs.
...
CASTs from floats to integers are implemented as mere MOVs. These often,
but not always, end up moving the value from one register to the same
register.
This patch avoids writing the MOV instructions if they have no effect.
2024-07-09 20:32:25 +02:00
Francisco Casas
daa13934a4
vkd3d-shader/d3dbc: Use vsir_program I/O signatures to write dcls.
...
Instead of relying on ctx->extern vars, semantics are now stored in the
vsir_program signatures, and then read to write the declarations.
2024-07-09 20:31:14 +02:00
Francisco Casas
704ce03561
vkd3d-shader/d3dbc: Don't require a hlsl_semantic to get register and usage.
2024-07-09 20:12:47 +02:00
Francisco Casas
003f4c7600
vkd3d-shader/d3dbc: Use program->shader_version instead of ctx->profile.
2024-07-09 20:06:23 +02:00
Francisco Casas
a333090288
vkd3d-shader/d3dbc: Introduce struct d3dbc_compiler.
2024-07-09 19:44:03 +02:00
Francisco Casas
dd8aa2ec91
vkd3d-shader/hlsl: Generate CTAB outside d3dbc_compile().
...
There is no way to store this information from the vsir_program alone,
so we make d3dbc_compile() expect the CTAB blob.
2024-07-09 18:59:54 +02:00
Francisco Casas
130b3335cb
vkd3d-shader/d3dbc: Split hlsl_sm1_write().
...
The idea is to start splitting the
HLSL IR -> d3dbc
translation into
HLSL IR -> vsir -> d3dbc
So hlsl_sm1_write is split into two functions, sm1_generate_vsir()
which should handle the first part and d3dbc_compile() which should
handle the second part.
This translation should be completed once the hlsl_ctx and entry_func
are no longer used in d3dbc_compile().
2024-07-09 18:38:00 +02:00
Zebediah Figura
6db2bc3eff
vkd3d-shader/d3dbc: Use enum vkd3d_shader_register_type in struct sm1_instruction.
2024-07-09 16:59:02 +02:00
Nikolay Sivov
3dc43e8945
vkd3d-shader: Disallow object structure fields for fx profiles.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:49:28 +02:00
Giovanni Mascellani
7958babb39
vkd3d: Do not synchronize with the tessellation shader stages if they're not enabled.
...
Similarly to a54187f3c9
, this fixes some validation
errors on devices that do not support tessellation; the Adreno 540 on my OnePlus 5
phone in my specific case.
2024-07-08 18:49:28 +02:00
Nikolay Sivov
937a80ead6
vkd3d-shader/fx: Write annotations for fx_4+ profiles.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:49:28 +02:00
Nikolay Sivov
0f7ac0a054
vkd3d-shader/hlsl: Set default values for annotations variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:49:06 +02:00
Nikolay Sivov
4d2ce385a7
vkd3d-shader/hlsl: Do not crash on initialization of a redefined variable.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:24:46 +02:00