Henri Verbeet
5c00766eff
Release 1.14.
2024-11-21 12:35:55 +01:00
Henri Verbeet
1f09f4fb3a
include: Document the binary effect transformations supported by vkd3d_shader_compile().
2024-11-21 12:32:17 +01:00
Giovanni Mascellani
05c87b02f6
vkd3d-shader/ir: Return an error when the FLAT_INTERPOLATION parameter is invalid.
2024-11-20 14:53:58 +01:00
Giovanni Mascellani
36510cd0be
vkd3d-shader/ir: Move applying flat interpolation to a dedicated pass.
...
I/O normalisation is already a rather complicated pass that does a
lot of things, so it's better to keep anything not strictly
related to it somewhere else.
2024-11-20 14:53:47 +01:00
Feifan He
1efc0ac740
tests/shader_runner_metal: Implement draws.
2024-11-20 14:40:10 +01:00
Feifan He
14991f2e17
tests/shader_runner_metal: Create Metal constant buffers.
2024-11-20 14:40:10 +01:00
Feifan He
176e35b6cc
tests/shader_runner_metal: Implement render target readback.
2024-11-20 14:40:10 +01:00
Feifan He
f0a864c8a2
tests/shader_runner_metal: Create Metal vertex buffers.
2024-11-20 14:40:10 +01:00
Feifan He
6d6cd8021e
tests/shader_runner_metal: Create Metal render targets.
2024-11-20 14:40:10 +01:00
Feifan He
5a679a1af3
tests/shader_runner_metal: Create vertex descriptors.
2024-11-20 14:40:10 +01:00
Henri Verbeet
df86a2842a
vkd3d-shader/msl: Implement VKD3DSIH_DCL_OUTPUT.
2024-11-20 14:40:10 +01:00
Feifan He
9e3b8ec98a
vkd3d-shader/msl: Output the generated shader code.
2024-11-20 14:40:10 +01:00
Henri Verbeet
2669ae16ea
vkd3d-shader/msl: Implement VKD3DSIH_DCL_OUTPUT_SIV.
2024-11-20 14:40:10 +01:00
Henri Verbeet
e6acf3090d
vkd3d-shader/msl: Implement VKD3DSIH_DCL_INPUT.
2024-11-20 14:40:10 +01:00
Feifan He
40cccaccea
tests/shader_runner_metal: Implement graphics shader compilation.
2024-11-20 14:40:10 +01:00
Feifan He
7a1d36ba05
vkd3d-shader/msl: Use pointers for constant buffer descriptors.
...
[[id]] attributes can not be applied to union references.
2024-11-20 14:40:10 +01:00
Feifan He
b29f1e6cdc
vkd3d-shader/msl: Add the missing output register index in msl_generate_entrypoint_epilogue().
2024-11-20 14:40:10 +01:00
Henri Verbeet
c246c8db79
tests/shader_runner_metal: Get rid of some stray semicolons.
2024-11-20 14:40:10 +01:00
Elizabeth Figura
0dc07f5cce
vkd3d-shader: Silence a spurious -Wmaybe-uninitialized in vsir_program_insert_alpha_test().
2024-11-14 14:12:13 +01:00
Elizabeth Figura
683e11aece
vkd3d-shader/hlsl: Silence a spurious -Wmaybe-uninitialized in sm4_generate_vsir_instr_dcl_semantic().
2024-11-14 14:12:13 +01:00
Giovanni Mascellani
72394d9ae3
vkd3d: Use WARN rather than ERR in vkd3d_instance_init().
...
ERR is used to indicate internal inconsistencies in vkd3d. Here that's
not the case, we simply have to forward the error condition to the
caller.
This fixes failures on the CI with llvmpipe, because the build we use is
compiled without support for VK_KHR_surface and related extensions.
2024-11-14 14:09:04 +01:00
Giovanni Mascellani
c010fb63a1
ci: Update Mesa to version 24.2.4.
...
This fixes a number of CI failures with llvmpipe.
2024-11-13 16:23:45 +01:00
Giovanni Mascellani
4c9821e5d5
tests: Mark a conditional rendering test as buggy on llvmpipe.
...
Similarly to RADV, this is a kind of perverted situation: in
principle Vulkan doesn't allow vkCmdResolveImage() to be
executed conditionally (i.e., it is unaffected by conditional
execution), which means that vkd3d cannot implement conditional
rendering for ResolveSubresource(), hence the todo. However,
like RADV, llvmpipe apparently violates the specification and
still executes the image resolution command conditionally. So
that's a llvmpipe bug, even if one that helps us doing the right
thing.
2024-11-13 16:19:06 +01:00
Henri Verbeet
92fa68cb07
tests/shader_runner: Slightly simplify dxc handling.
2024-11-13 16:18:36 +01:00
Conor McCarthy
2996ad6bd2
vkd3d-shader/dxil: Implement DX intrinsic SampleIndex.
2024-11-13 16:18:13 +01:00
Nikolay Sivov
21681489ed
vkd3d-shader/fx: Implement parsing states objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-13 16:15:09 +01:00
Conor McCarthy
3d53d90d4b
vkd3d-shader/ir: Add a secondary sort by sysval for signature element register merges.
...
Fixes output signature normalisation failures in Silent Hill 2 caused by
failure of shader_signature_find_element_for_reg().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57359
2024-11-13 13:32:32 +01:00
Giovanni Mascellani
7412e66064
vkd3d-shader/spirv: Get rid of the "offset_component_count" field of struct vkd3d_spirv_resource_type.
...
The number of components needed for texel offsets is the number of
components needed to address a single image/layer of an array. I.e.,
"coordinate_component_count - 1" for array textures, and
"coordinate_component_count" for non-array textures.
This change will also fix sampling of cube textures with explicit
gradients. Because texel offsets are unsupported for cube textures,
"offset_component_count" is currently 0 for cube textures. However, the
SAMPLE_GRAD handler also uses "offset_component_count" to determine the
number of components needed for the explicit gradients, and SAMPLE_GRAD
is supposed to work with cube textures.
This commit fixes the compilation of shaders in Star Wars Jedi:
Survivor.
2024-11-12 19:12:47 +01:00
Giovanni Mascellani
c34dc81753
tests: Remove some todo markings on MoltenVK in interface-packing.shader_test.
...
I have to admit I'm not even sure of why most of those got marked
as todo in the first place. Running again now tests on commit
dff7c0e7b8
doesn't show all those
failures.
2024-11-11 15:55:11 +01:00
Giovanni Mascellani
a89ceb6590
tests/shader_runner_vulkan: Avoid using ok() for shader compilation failues in create_graphics_pipeline().
...
Using ok() may result in todo's succeeding when create_shader_stage()
succeeds, but vkCreateGraphicsPipelines() fails. There's not much point
in using ok() here in the first place though, because ultimately the
draw operation is going to fail when shader compilation failed.
2024-11-11 15:54:21 +01:00
Giovanni Mascellani
94900131a8
tests: Mark a couple of tests in register-reservations-numeric.shader_test as todo with MSL.
2024-11-11 15:25:02 +01:00
Henri Verbeet
756b98f093
vkd3d-shader/glsl: Implement VKD3DSIH_LD2DMS.
2024-11-06 22:57:12 +01:00
Henri Verbeet
ca42adbf6b
vkd3d-shader/glsl: Handle SV_SAMPLE_INDEX inputs.
2024-11-06 22:56:02 +01:00
Henri Verbeet
3dbaf11f8c
vkd3d-shader/glsl: Implement support for static texel offsets in shader_glsl_sample().
2024-11-06 22:55:36 +01:00
Henri Verbeet
6ae4da02c9
vkd3d-shader/glsl: Implement VKD3DSIH_GATHER4_PO.
2024-11-06 22:53:55 +01:00
Henri Verbeet
466d849c72
vkd3d-shader/glsl: Implement support for VKD3D_SHADER_COMPONENT_INT outputs.
2024-11-06 22:53:31 +01:00
Francisco Casas
5df836c513
vkd3d-shader/hlsl: Store SM4 MOD in the vsir program.
2024-11-06 22:49:12 +01:00
Francisco Casas
30bc6965a2
vkd3d-shader/hlsl: Store SM4 DOT in the vsir program.
2024-11-06 22:48:13 +01:00
Francisco Casas
e8b373e3ff
vkd3d-shader/hlsl: Store SM4 DIV in the vsir program.
2024-11-06 22:47:42 +01:00
Francisco Casas
24f4308982
vkd3d-shader/hlsl: Store SM4 MUL in the vsir program.
2024-11-06 22:45:46 +01:00
Francisco Casas
e4d36bd855
vkd3d-shader/hlsl: Store SM4 SAT in the vsir program.
2024-11-06 22:45:23 +01:00
Francisco Casas
2e3f4a01bf
vkd3d-shader/hlsl: Store SM4 RCP in the vsir program.
2024-11-06 22:40:50 +01:00
Francisco Casas
3c4889add3
vkd3d-shader/hlsl: Store SM4 SIN and COS in the vsir program.
2024-11-06 22:38:04 +01:00
Francisco Casas
befba8e813
vkd3d-shader/hlsl: Store SM4 casts in the vsir program.
2024-11-06 22:27:49 +01:00
Giovanni Mascellani
026624a266
tests: Work around a Metal bug in switch.shader_test.
...
The Metal bug was reported to Apple as FB15617433. Since we don't
care specifically about that bug, I'm just tweaking the test so that
it doesn't hit that bad path any more.
2024-11-06 22:15:09 +01:00
Giovanni Mascellani
7450c4a368
tests: Mark some tests in wave-reconvergence.shader_test as buggy on MoltenVK.
2024-11-06 22:15:09 +01:00
Giovanni Mascellani
ba5c3b576e
tests: Use the appropriate RTV format in f32tof16.shader_test.
2024-11-06 22:15:09 +01:00
Giovanni Mascellani
5639b54c1b
tests: Mark fog.shader_test as todo with MSL.
2024-11-06 22:15:09 +01:00
Nikolay Sivov
9af17d4a9d
vkd3d-shader/fx: Implement parsing the remaining fx_5_0 object types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-06 22:14:03 +01:00
Nikolay Sivov
e5ba79b4f1
vkd3d-shader/hlsl: Implement the ByteAddressBuffer.Load*() methods.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-06 22:09:23 +01:00
Nikolay Sivov
1a28e7d9c6
vkd3d-shader/hlsl: Add parser support for the ByteAddressBuffer type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-06 21:56:27 +01:00
Nikolay Sivov
8438aacc3b
vkd3d-shader/spriv: Only lookup resource symbols for UAVs in the ld_raw/ld_structured handler.
...
We don't need them for SRVs. Worse, if we're using a combined
resource/sampler pair for the SRV, a separate resource symbol may not
even exist.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-06 21:47:08 +01:00
Conor McCarthy
76fd1388d8
vkd3d: Check the IASetVertexBuffers() view count against the device limits.
...
For example, current MoltenVK only supports 31 vertex buffers.
2024-11-06 21:43:32 +01:00
Elizabeth Figura
fb8660c196
vkd3d-shader/ir: Add an is_pre_rasterization_shader() helper.
2024-11-05 20:00:27 +01:00
Elizabeth Figura
4290d85397
vkd3d-shader/hlsl: Write all writemask components for PSIZE and FOG outputs.
...
Matching fxc/d3dcompiler.
2024-11-05 19:58:49 +01:00
Elizabeth Figura
a10ee075ff
vkd3d-shader/ir: Force fog and point size to 1 component when normalizing I/O.
2024-11-05 19:57:41 +01:00
Elizabeth Figura
5a513ffcec
vkd3d-shader/hlsl: Enforce FOG component count for sm1 VS output.
2024-11-05 19:53:24 +01:00
Elizabeth Figura
f50b20ddd6
vkd3d-shader/hlsl: Enforce PSIZE component count for sm1 VS output.
2024-11-05 19:53:24 +01:00
Elizabeth Figura
aa1ce9e295
tests: Add some tests for FOG and PSIZE writemask restrictions.
2024-11-05 19:53:24 +01:00
Francisco Casas
90a07ada8e
vkd3d-shader/tpf: Use SCALAR swizzle dimension for RASTERIZER registers.
...
While we currently output instructions like this:
sampleinfo_uint r0.x, rasterizer.xxxx
> SAMPLE_INFO (111)
0 0000100[len:4] 0000000000001[1] 00001101111[opcode:111]
└─ 0 000[d3i:0] 000[d2i:0] 000[d1i:0] 01[idxs:1] 00000000[type:0] 0000[0] 0001[wmask:1] 00[swtype:0] 10[dim:2]
└─ 00000000000000000000000000000000[0|0.0]
└─ 0 000[d3i:0] 000[d2i:0] 000[d1i:0] 00[idxs:0] 00001110[type:14] 00000000[sw:0] 01[swtype:1] 10[dim:2]
FXC/d3dcompiler outputs instructions like this:
sampleinfo o0.x, rasterizer.x
> SAMPLE_INFO (111)
0 0000100[len:4] 0000000000000[0] 00001101111[opcode:111]
└─ 0 000[d3i:0] 000[d2i:0] 000[d1i:0] 01[idxs:1] 00000010[type:2] 0000[0] 0001[wmask:1] 00[swtype:0] 10[dim:2]
└─ 00000000000000000000000000000000[0|0.0]
└─ 0 000[d3i:0] 000[d2i:0] 000[d1i:0] 00[idxs:0] 00001110[type:14] 000000[0] 00[swcomp:0] 10[swtype:2] 10[dim:2]
Note the difference in swtype of the rasterizer src register.
2024-11-05 19:50:55 +01:00
Francisco Casas
950c381728
vkd3d-shader/hlsl: Store RASTERIZER_SAMPLE_COUNT in the vsir program.
...
Also, the profile check for GetRenderTargetSampleCount() is moved to
parse time.
2024-11-05 19:48:31 +01:00
Francisco Casas
ab60f4e082
vkd3d-shader/hlsl: Store simple SM4 expressions in the vsir program.
2024-11-05 19:35:52 +01:00
Francisco Casas
b4608e99e3
vkd3d-shader/tpf: Remove HLSL IR ABS handling.
2024-11-05 19:20:21 +01:00
Francisco Casas
6eda775047
vkd3d-shader/hlsl: Run sm4_generate_vsir_block() recursively.
...
This allows us to remove the HLSL IR version of an instruction when
the vsir version is properly implemented.
2024-11-05 19:20:21 +01:00
Shaun Ren
64c4a3a442
vkd3d-shader/hlsl: Store SM4 semantic declarations in the vsir program.
2024-11-05 19:19:22 +01:00
Nikolay Sivov
5ea946aa90
vkd3d-shader/hlsl: Accept multiple colon-separated attributes.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-05 18:23:31 +01:00
Giovanni Mascellani
794f4c30f4
ci: Error out on Objective-C warnings.
...
Except for the known uninteresting ones.
2024-11-04 17:02:32 +01:00
Francisco Casas
68311ef010
vkd3d-shader/hlsl: Store SM4 ABS instructions in the vsir program.
2024-11-04 17:00:54 +01:00
Francisco Casas
404644bad3
vkd3d-shader/hlsl: Introduce vsir_src_from_hlsl_node().
...
This allows constants to be inlined for sm4.
2024-11-04 16:36:28 +01:00
Francisco Casas
6f52bb6b1a
vkd3d-shader/hlsl: Store SM4 swizzles in the vsir program.
2024-11-04 16:08:38 +01:00
Francisco Casas
2083d505c7
vkd3d-shader/tpf: Use instr.extra_bits for IF.
2024-11-04 15:37:46 +01:00
Henri Verbeet
e6c84862a8
vkd3d-shader/ir: Search for SV_TARGET0 vsir_program_insert_alpha_test().
...
As opposed to any SV_TARGET with register index 0. We care about the
semantic index here, not the register index.
2024-11-04 15:32:05 +01:00
Henri Verbeet
1b0248f31b
vkd3d-shader/ir: Specifically search for SV_POSITION0 in vsir_program_insert_clip_planes().
2024-11-04 15:30:44 +01:00
Conor McCarthy
51c37735a9
tests: Use state RESOLVE_SOURCE for readback from multisampled textures.
2024-11-04 15:30:11 +01:00
Elizabeth Figura
3681b83fb4
vkd3d-shader/fx: Fix checking for a GS with stream output.
2024-11-04 15:29:39 +01:00
Elizabeth Figura
7e4ab9c7c0
vkd3d-shader: Write zeroes for uninitialized outputs in vsir_program_remap_output_signature().
2024-11-04 15:26:55 +01:00
Elizabeth Figura
e781abc3fb
vkd3d-shader: Write uninitialized components of COLOR0 as 1.
2024-11-04 15:21:09 +01:00
Elizabeth Figura
cc9fcee676
vkd3d-shader: Reduce masks to only read components in vsir_program_remap_output_signature().
2024-11-04 15:11:54 +01:00
Elizabeth Figura
61bda1c054
vkd3d-shader: Always ensure a RET at the end of a program.
2024-11-04 15:06:02 +01:00
Elizabeth Figura
568776bbf6
tests: Add a test for uninitialized varyings.
2024-11-04 15:06:02 +01:00
Feifan He
b0646cb427
tests/shader_runner: Introduce a Metal shader runner.
2024-10-31 16:47:26 +01:00
Henri Verbeet
da75582a14
tests/shader_runner: Check whether copy/dispatch/draw succeeded in parse_test_directive().
2024-10-31 16:46:59 +01:00
Henri Verbeet
b5f1979475
tests/shader_runner: Print "(none)" for an empty caps list in trace_shader_caps().
...
Like we do in trace_format_cap().
2024-10-31 16:46:59 +01:00
Nikolay Sivov
ad2208b726
vkd3d-shader/fx: Implement parsing shader resources types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-29 14:52:39 +01:00
Nikolay Sivov
1a8e9ff94e
vkd3d-shader/fx: Implement parsing shader objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-29 14:41:55 +01:00
Elizabeth Figura
96c13aeb97
tests: Silence a bogus -Wmaybe-uninitialized.
2024-10-28 18:01:06 +01:00
Elizabeth Figura
3511b54040
vkd3d-shader/hlsl: Use early return in allocate_register().
...
Partly to avoid a spurious maybe-uninitialized warning, and partly because it's a more idiomatic structure.
2024-10-28 18:01:06 +01:00
Elizabeth Figura
08253504dc
vkd3d-shader: Make an assert into an explicit check.
...
For some reason gcc without LTO thinks that component_count can overflow the
array here.
2024-10-28 18:01:06 +01:00
Elizabeth Figura
5883e01032
vkd3d-shader/fx: Remove an unnecessary hlsl_is_numeric_type().
...
Constants can only be numeric.
2024-10-28 18:01:06 +01:00
Elizabeth Figura
a595b96f62
vkd3d: Initialize vk_extensions in vk_init_device_caps().
...
Without LTO, gcc doesn't know that hresult_from_vk_result() will always return a
failure HRESULT for a failure VkResult, and so thinks that we might exit from
vkd3d_check_device_extensions() with a success HRESULT but without initializing
vk_extensions.
2024-10-28 18:01:06 +01:00
Henri Verbeet
5188883142
tests/shader_runner: Set "properties2.sType" in get_physical_device_info() in the Vulkan runner.
...
Found by the Vulkan validation layers.
2024-10-28 17:59:18 +01:00
Henri Verbeet
aeae8322da
tests: Add a test for actual multisample loads.
...
The existing test loads from a single sample texture.
2024-10-28 17:58:05 +01:00
Henri Verbeet
072b45b972
tests/shader_runner_d3d12: Introduce a helper to get the default resource state for a resource.
2024-10-28 17:58:05 +01:00
Henri Verbeet
cc340b2838
tests/shader_runner: Handle render target sizes other than 640x480.
2024-10-28 17:58:05 +01:00
Henri Verbeet
9690ffff61
vkd3d-shader/spirv: Handle oPts in spirv_compiler_get_register_name().
2024-10-28 17:54:43 +01:00
Henri Verbeet
fa6d03a4cb
vkd3d-shader/d3d-asm: Implement support for VKD3DSPR_PARAMETER registers.
2024-10-28 17:54:20 +01:00
Nikolay Sivov
89e5912fd2
vkd3d-shader/hlsl: Implement RWByteAddressBuffer.Store*() methods.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-28 17:51:04 +01:00
Nikolay Sivov
6637948ae1
tests: Add some more tests for RWByteAddressBuffer store methods.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-28 17:46:17 +01:00
Nikolay Sivov
cf27065b7d
vkd3d-shader/hlsl: Add parser support for the RWByteAddressBuffer type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-28 17:44:28 +01:00
Nikolay Sivov
4195a2f18a
vkd3d-shader/hlsl: Use a more compact way to store object method configurations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-28 17:41:46 +01:00
Giovanni Mascellani
f7bc30bad2
tests: Mark tessellation-patch-vars.shader_test as todo on MoltenVK.
2024-10-28 17:39:23 +01:00
Giovanni Mascellani
624eccbab1
ci: Update the DXC version used on the CI to 1.8.2407.
...
Unfortuantely different versions of DXC accept or fail differently
in some cases. We don't care too much about validating the DXC
behavior itself, but it's useful that all the CI jobs use the
same version so that we don't have to complicate the shader runner
language.
The macOS version is currently bound to be pretty recent because
otherwise libdxil.dylib is not provided. So I'm updating the
Linux and Windows version as well.
I don't expect it should be particularly hard for other maintainers
to keep up with the DXC updates, since it just amounts to
downloading a ZIP file and extracting two libraries.
2024-10-28 17:36:17 +01:00
Giovanni Mascellani
fd33d51b1b
tests: Mark tessellation.shader_test as todo on MoltenVK.
...
Tessellation shaders are currently not supported there.
2024-10-28 17:35:18 +01:00
Giovanni Mascellani
e83387d8b7
tests: Mark geometry.shader_test as todo on MoltenVK.
...
Geometry shaders are currently not supported there.
2024-10-28 17:33:35 +01:00
Giovanni Mascellani
d6efdeea61
tests: Dispatch just four invocations when testing for wave reconvergence.
...
I don't know why I put a 4 both in the numthreads() attribute and as
a dispatch parameter, but only care about only one thread group.
2024-10-28 17:31:24 +01:00
Giovanni Mascellani
5667da7b80
tests: Use the appropriate RTV format in bitwise.shader_test.
2024-10-28 17:31:24 +01:00
Elizabeth Figura
212333bfa6
tests: Add a test for sm1 inter-stage interface matching.
2024-10-28 17:29:25 +01:00
Elizabeth Figura
e452519dcb
tests/shader_runner: Build a varying map in the Vulkan runner.
...
This adds todos to two tests. The tests in question have mismatching masks
and previously failed Vulkan validation anyway.
2024-10-28 17:29:25 +01:00
Elizabeth Figura
d12a9738a0
tests/shader_runner: Compile HLSL for all stages before compiling SPIRV.
2024-10-28 17:29:25 +01:00
Elizabeth Figura
d287e0d8a6
tests/shader_runner: Split HLSL and SPIRV compilation in the Vulkan shader runner.
2024-10-28 17:29:23 +01:00
Elizabeth Figura
b3eee0a323
tests/shader_runner: Centralize the compile_hlsl() helper in shader_runner.c.
2024-10-28 17:23:10 +01:00
Elizabeth Figura
591ae5e18e
tests/shader_runner: Store the dxc_compiler in the shader_runner.
2024-10-28 17:23:10 +01:00
Elizabeth Figura
b492ebc374
tests/shader_runner: Store shader sources as an array.
2024-10-28 17:23:06 +01:00
Elizabeth Figura
ccdac48923
tests/shader_runner: Get rid of the "dxbc_ptr" parameter to create_shader_stage().
2024-10-28 17:13:35 +01:00
Elizabeth Figura
d39e840c14
tests/shader_runner: Store shader caps using an array.
2024-10-28 16:20:27 +01:00
Elizabeth Figura
390a330b8e
vkd3d-shader/hlsl: Avoid leaking the block in the subscript rule.
2024-10-28 15:40:41 +01:00
Elizabeth Figura
bb74180659
vkd3d-shader/hlsl: Return an error expression when an invalid subscript is used.
2024-10-28 15:40:41 +01:00
Elizabeth Figura
7905c47765
vkd3d-shader/hlsl: Handle error expressions in array sizes.
2024-10-28 15:40:41 +01:00
Elizabeth Figura
8b98e483ac
vkd3d-shader/hlsl: Handle error expressions in return statements.
2024-10-28 15:40:41 +01:00
Elizabeth Figura
94cf432035
vkd3d-shader/hlsl: Handle error expressions in conditions.
2024-10-28 15:40:41 +01:00
Giovanni Mascellani
ae1d62f6a0
tests: Consider LOD miscalculation a todo rather than a driver bug.
2024-10-28 15:32:03 +01:00
Nikolay Sivov
5eff8bf918
vkd3d-shader/hlsl: Handle SV_GroupIndex.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-24 20:54:04 +02:00
Henri Verbeet
d48f7409fe
tests/shader_runner: Print the test context in fatal_error().
...
In particular, this gets us line numbers.
2024-10-24 20:53:45 +02:00
Henri Verbeet
5e9edf25d0
vkd3d-shader/glsl: Implement VKD3DSIH_GATHER4.
2024-10-24 20:52:37 +02:00
Henri Verbeet
d477a00734
vkd3d-shader/glsl: Implement VKD3DSIH_SAMPLE_GRAD.
2024-10-24 20:52:37 +02:00
Henri Verbeet
d58282c6d1
vkd3d-shader/glsl: Implement VKD3DSIH_SAMPLE_LOD.
2024-10-24 20:52:37 +02:00
Henri Verbeet
85697d76be
vkd3d-shader/glsl: Implement VKD3DSIH_UMAX and VKD3DSIH_UMIN.
2024-10-24 20:52:37 +02:00
Henri Verbeet
6a119b6946
vkd3d-shader/glsl: Implement VKD3DSGF_FORCE_EARLY_DEPTH_STENCIL.
2024-10-24 20:52:37 +02:00
Francisco Casas
9d82915629
vkd3d-shader/hlsl: Make allocation functions static again.
2024-10-24 20:50:59 +02:00
Francisco Casas
23be6ed0dd
vkd3d-shader/hlsl: Store temp declarations in the vsir program.
...
Move the temp allocation back to hlsl_codegen.c.
Note that the DCL_TEMPS instructions wouldn't be necessary if we had the
capacity to store the temp_count for both the main program and the patch
constant program (or more generally speaking, a temp_count for all
phases).
The plan is to eventually also move the HS_CONTROL_POINT and
HS_FORK_PHASE markers to the vsir_program, making it able to contain
both functions.
2024-10-24 20:50:59 +02:00
Francisco Casas
158bf794e6
vkd3d-shader/hlsl: Introduce hlsl_ir_vsir_instruction_ref, again.
...
This node type will be deleted (again) once the hlsl->vsir->tpf
translation is complete. It serves the purpose of allowing to keep
both real hlsl_ir_nodes and vsir_instructions in the hlsl_block,
until all the former can be translated into the latter.
2024-10-24 20:50:59 +02:00
Francisco Casas
cf7fade580
vkd3d-shader/hlsl: Store the thread group size in the vsir program.
2024-10-24 20:48:20 +02:00
Giovanni Mascellani
91701f8303
vkd3d-shader: Warn instead of erroring out when failing to dump a shader.
...
It's a debug operation and shouldn't be considered fatal, even
for development workflows.
2024-10-23 16:14:33 +02:00
Giovanni Mascellani
6a03369f84
vkd3d-shader: Do not dump the target shader if compilation failed.
...
Otherwise we'd use unitialized data.
2024-10-23 16:14:33 +02:00
Giovanni Mascellani
a1f712d100
vkd3d: Incorporate mutable descriptors in the push descriptor disabling logic.
...
The computation is also written in the code now instead of in
the comments.
2024-10-23 16:12:50 +02:00
Giovanni Mascellani
bc2b137df9
vkd3d: Only put the mutable descriptor set once in the pipeline layout.
...
Currently the mutable descriptor set is repeated many times in the
pipeline layout in order to cover the indices for all the
descriptor types that would be present if mutable descriptors were
not used. This is useless and wasteful, but was necessary before
the descriptor sets backing the SRV-UAV-CBV heap were moved at the
end of the allocation table because descriptor set indices are
currently a compile-time constant in many places.
Now this is not needed any more and we can just avoid putting
many copies of the mutable descriptor set in the pipeline layout,
making it easier to meet Vulkan implementation limits.
2024-10-23 16:12:06 +02:00
Giovanni Mascellani
96b324c156
vkd3d: Move descriptor sets backing the SRV-UAV-CBV heap at the end.
...
So that when mutable descriptors are in use we can avoid putting
the other descriptor sets backing the SRV-UAV-CBV descriptor heap
in the pipeline layout altogether.
2024-10-23 16:07:54 +02:00
Giovanni Mascellani
8d030718ae
vkd3d: Introduce an enumerant for the mutable descriptor set.
...
So we avoid hardcoding that it is number zero. There are two
goals here: first making the code easier to understand and
second allow reshuffling the descriptor set allocation in a
later commit.
2024-10-23 16:07:36 +02:00
Elizabeth Figura
32e6a1bb4d
vkd3d-shader: Validate the parsed shader in vsir_parse().
2024-10-23 16:02:09 +02:00
Elizabeth Figura
3a3f95e1e7
vkd3d-shader: Factor out a vsir_parse() helper.
2024-10-23 16:02:09 +02:00
Conor McCarthy
4889c71857
vkd3d: Zero the pipeline state UAV counter view array when the state is invalidated. (Valgrind)
...
Otherwise a comparison with uninitialised data occurs in
d3d12_command_list_update_descriptor_table() if virtual heaps are used.
2024-10-22 20:42:06 +02:00
Henri Verbeet
1113d24a70
vkd3d-shader/ir: Store the global flags in struct vsir_program.
2024-10-22 20:40:31 +02:00
Henri Verbeet
21e9029177
vkd3d-shader/glsl: Implement VKD3DSIH_SAMPLE_C_LZ.
2024-10-22 20:39:31 +02:00
Henri Verbeet
5958e527e5
vkd3d-shader/glsl: Implement VKD3DSIH_SAMPLE_C.
2024-10-22 20:39:31 +02:00
Henri Verbeet
19c493722e
vkd3d-shader/glsl: Implement VKD3DSIH_SAMPLE_B.
2024-10-22 20:39:31 +02:00
Henri Verbeet
e408f1d984
vkd3d-shader/glsl: Implement support for the VKD3DSPR_THREADID register.
2024-10-22 20:39:31 +02:00
Henri Verbeet
f76dd80cba
vkd3d-shader/glsl: Implement VKD3DSIH_LD_UAV_TYPED.
2024-10-22 20:39:31 +02:00
Giovanni Mascellani
8d8e0fd55a
tests: Test mismatching RTV and pixel shader output types.
2024-10-22 20:38:18 +02:00
Giovanni Mascellani
7fbed358c9
ci: Build DXC for release.
...
Otherwise a lot of assertions trigger, even for legitimate uses.
2024-10-22 20:32:51 +02:00
Giovanni Mascellani
dff7c0e7b8
tests: Mark interface packing pipeline creation as todo on MoltenVK.
...
Most Vulkan drivers are happy to compile a pipeline with interstage
interface mismatches, even if the pipeline will be broken. Metal,
and therefore MoltenVK, instead doesn't and errors out immediately.
2024-10-22 20:32:51 +02:00
Giovanni Mascellani
b411086398
tests: Use the appropriate RTV format in minimum-precision.shader_test.
2024-10-22 20:29:25 +02:00
Giovanni Mascellani
987dbe31e3
tests: Use appropriate RTV formats in max-min.shader_test.
2024-10-22 20:29:25 +02:00
Giovanni Mascellani
bc830fa06b
tests: Compute the correct value for condition conjunctions.
...
Currently the value of the last conjunct is returned.
2024-10-22 20:29:25 +02:00
Nikolay Sivov
cf3e251a9f
vkd3d-shader/hlsl: Implement the f32tof16() intrinsic.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-22 20:28:33 +02:00
Shaun Ren
f54797bae5
vkd3d-shader/hlsl: Support discard for SM1.
2024-10-22 20:27:34 +02:00
Francisco Casas
2a8c1b2823
vkd3d-shader/hlsl: Sort signature elements by register id.
2024-10-22 20:25:40 +02:00
Francisco Casas
51d05c1844
vkd3d-shader/hlsl: Optimize interstage signatures.
2024-10-22 20:15:15 +02:00
Francisco Casas
88dd082160
vkd3d-shader/hlsl: Allow prioritizing smaller writemasks when allocating signature elements.
...
For now this doesn't have effect yet, until semantic allocation is
optimized.
2024-10-22 20:06:15 +02:00
Francisco Casas
d562b03c43
vkd3d-shader/hlsl: Allow to force alignment on some semantic vars.
...
This is required to properly optimize signatures, because these
semantics must be alligned while being packed:
- Array elements.
- The first fields of structs.
- Major vectors of a matrix.
For now this has no effect since semantics are allocated with reg_size
4, but will have effect when optimizing interstage signatures.
2024-10-22 20:04:41 +02:00
Francisco Casas
7fd6c29ee8
vkd3d-shader/hlsl: Allow accounting for interpolation mode when allocating semantics.
...
For now this has no effect since semantics are allocated with reg_size
4, but will have effect when optimizing interstage signatures.
2024-10-22 20:03:39 +02:00
Francisco Casas
b65f5fb069
vkd3d-shader/hlsl: Also pass field storage modifiers to output signature elements.
...
The generated pixel shader input signature must be consistent with the
generated vertex shader output signature for the same data type.
Since the interpolation mode affects allocation order, the allocator
needs to know the modifiers for both input and output signature elements.
2024-10-22 19:29:11 +02:00
Francisco Casas
7180a96741
vkd3d-shader/hlsl: Use a register_allocator to allocate semantic registers.
2024-10-22 19:23:33 +02:00
Francisco Casas
9ce7b7806f
vkd3d-shader/hlsl: Add mode field to register_allocator allocations.
2024-10-22 19:23:22 +02:00
Francisco Casas
d9b631182e
tests: Add signature reflection test with structs.
2024-10-22 19:15:42 +02:00
Nikolay Sivov
fb2b974466
vkd3d-shader/hlsl: Handle snorm/unorm types as resource formats.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-22 19:14:51 +02:00
Elizabeth Figura
6fd1a1ce7e
tests: Test point sprite.
2024-10-22 19:14:05 +02:00
Elizabeth Figura
a492d64fef
vkd3d-shader/ir: Allow controlling point sprite through a parameter.
2024-10-22 19:14:02 +02:00
Nikolay Sivov
8a3fe9cd1e
vkd3d-shader/fx: Implement parsing groups and techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-21 18:23:33 +02:00
Giovanni Mascellani
ae772d40cf
vkd3d: Disable push descriptors when that's helpful to stay within 8 descriptor sets.
2024-10-21 18:22:15 +02:00
Giovanni Mascellani
3bf114f3c3
vkd3d/device: Trace which descriptor heap implementation is being used.
...
The descriptor heap implementation is a rather central behavior element
in vkd3d, so it's useful to have all the relevant information logged
in a single place.
2024-10-21 18:22:15 +02:00
Giovanni Mascellani
ed4d45355a
vkd3d-shader/ir: Represent the normalisation level with an enumeration.
2024-10-21 18:21:39 +02:00
Giovanni Mascellani
9f3b21cc78
tests: Mark latching the predicated value as todo on llvmpipe.
...
Vulkan doesn't mandate whether the predicated value should be latched
when beginning the predicated section or re-read at each operation.
2024-10-21 18:20:38 +02:00
Giovanni Mascellani
1301014b28
tests: Mark creating an 8x MSAA render target as buggy on llvmpipe.
2024-10-21 18:20:38 +02:00
Giovanni Mascellani
3c86094371
tests: Mark a sampling test as buggy on llvmpipe.
...
Vulkan doesn't mandate whether sampling exactly in the middle between
two levels should resolve to one or the other, while D3D specifies
that it should result into sampling the higher level. llvmpipe
happens to choose the lower one instead, at least in some cases.
2024-10-21 18:20:38 +02:00
Shaun Ren
773e1bbeae
tests: Test signature reflection for domain shaders.
2024-10-21 18:19:33 +02:00
Shaun Ren
abed6d9cb7
vkd3d-shader/tpf: Implement semantics for domain shaders.
2024-10-21 18:18:25 +02:00
Shaun Ren
0273ff007b
vkd3d-shader/tpf: Write domain shader declarations.
2024-10-21 18:18:00 +02:00
Shaun Ren
26efba30b4
vkd3d-shader/tpf: Use vpc input registers for domain shaders.
2024-10-21 18:17:06 +02:00
Shaun Ren
2b897296a1
vkd3d-shader/tpf: Write the input signature of domain shaders as PCSG.
2024-10-21 18:16:50 +02:00
Shaun Ren
768b19d410
vkd3d-shader/ir: Validate control point counts correctly.
...
Allow zero input control points for domain shaders, and zero output
control points for hull shaders.
2024-10-21 18:10:13 +02:00
Shaun Ren
976fe27836
vkd3d-utils: Return correct use masks during reflection.
2024-10-21 18:09:39 +02:00
Shaun Ren
7408ab145a
vkd3d-utils: Implement version reflection.
2024-10-21 18:09:06 +02:00
Giovanni Mascellani
a3b8aaf679
vkd3d: Allow overriding the device capabilities.
2024-10-21 18:06:06 +02:00
Giovanni Mascellani
03ad04c890
vkd3d-shader/ir: Validate OUTCONTROLPOINT registers.
2024-10-17 17:34:55 +02:00
Giovanni Mascellani
1e86f00247
vkd3d-shader/ir: Validate INCONTROLPOINT registers.
2024-10-17 17:34:55 +02:00
Giovanni Mascellani
a4ab53ab7b
vkd3d-shader/ir: Validate PATCHCONST registers.
2024-10-17 17:34:55 +02:00
Giovanni Mascellani
62d5bc91f5
vkd3d-shader/ir: Validate OUTPUT registers.
2024-10-17 17:34:55 +02:00
Giovanni Mascellani
349fdd0843
vkd3d-shader/ir: Validate INPUT registers.
2024-10-17 17:34:55 +02:00
Giovanni Mascellani
d9508558a9
vkd3d-shader: Keep track of whether programs have normalised hull shader control point I/O.
2024-10-17 17:34:55 +02:00
Giovanni Mascellani
eba8fd4720
vkd3d-shader: Keep track of whether programs have normalised I/O.
2024-10-17 17:34:55 +02:00
Nikolay Sivov
7ae1284c16
vkd3d-compiler: Add missing 'fx' source type to the CLI output.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-17 17:32:54 +02:00
Nikolay Sivov
071130b944
vkd3d-shader/fx: Add support for tracing annotations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-17 17:32:54 +02:00
Giovanni Mascellani
ca309e439a
ci: Test DXIL shaders on macOS.
...
This unfortunately introduces a lot of failures, because it turns
out there is still work to do there. But at least we can
estimate how bad we're doing.
2024-10-17 17:31:22 +02:00
Giovanni Mascellani
19c699870b
ci: Build the DirectX shader compiler for macOS.
2024-10-17 17:31:22 +02:00
Giovanni Mascellani
7c3f424a97
ci: Stop building widl for the macOS image.
2024-10-17 17:31:22 +02:00
Giovanni Mascellani
2b84e30e26
ci: Use widl from the mingw-w64 brew package on macOS.
2024-10-17 17:31:22 +02:00
Giovanni Mascellani
51cdb74061
ci: Remove the tart username and password environment variables.
...
They're not really needed, the runner already handles login
properly.
2024-10-17 17:31:22 +02:00
Elizabeth Figura
eeb7bbe3c5
vkd3d-shader/hlsl: Handle error expressions in ternary expressions.
2024-10-17 17:28:52 +02:00
Elizabeth Figura
d95962068a
vkd3d-shader/hlsl: Handle error expressions in initializers.
2024-10-17 17:28:52 +02:00
Elizabeth Figura
dfe79cb6a9
vkd3d-shader/hlsl: Factor the component count check into initialize_var().
2024-10-17 17:28:52 +02:00
Elizabeth Figura
d8892a4ca2
vkd3d-shader/hlsl: Store the initializer location in struct parse_initializer.
2024-10-17 17:28:52 +02:00
Elizabeth Figura
44ea7b5e12
vkd3d-shader/hlsl: Factor out an initialize_var() helper.
2024-10-17 17:28:52 +02:00
Giovanni Mascellani
e411fcb60e
tests: Test discontiguous signature masks with SM<4 shaders.
2024-10-17 17:28:52 +02:00
Giovanni Mascellani
0e43dea42d
vkd3d-shader/ir: Check that signature masks are contiguous.
2024-10-17 17:28:52 +02:00
Giovanni Mascellani
083b87c712
vkd3d-shader/d3dbc: Make signature masks contiguous.
...
The goal is to make a requirement for VSIR that signature element
masks are always contiguous. The SPIR-V backend already implicitly
makes that assumption, since it just consider the LSB and popcount
of the mask.
For example, consider this HLSL pixel shader:
float4 main(float4 color : COLOR) : SV_Target
{
return float4(color.x, 10.0f, 11.0f, color.w);
}
Currently the parser describes the input signature element
corresponding to semantic COLOR as having mask .xw, which is
sensible. However, the SPIR-V parser will interpret that as
a mask starting at x and with popcount 2, and assuming it is
contiguous it will implicitly act as if it were .xy. This is
not correct, because the wrong component will be loaded from
the vertex stage.
2024-10-17 17:28:52 +02:00
Henri Verbeet
8943999bd2
vkd3d: Slightly simplify the SRV/UAV logic in vk_write_descriptor_set_from_d3d12_desc().
2024-10-17 17:28:52 +02:00
Conor McCarthy
bfaab9700d
vkd3d: Lay out virtual descriptor heap buffer and image bindings consecutively instead of interleaving them.
...
Slightly simplifies descriptor write addressing, and makes layouts
essentially the same as array layouts, differing only in the binding
details, and therefore easier to understand. This also simplifies the
addition of storage buffer bindings, which can all be added onto the end.
2024-10-17 17:28:46 +02:00
Giovanni Mascellani
0b8a53d75d
vkd3d: Create Vulkan bindings in d3d12_root_signature_append_vk_binding().
2024-10-17 17:23:04 +02:00
Conor McCarthy
74da9ed6fe
vkd3d: Create a separate Vulkan descriptor binding array for each descriptor set.
...
Allows descriptor set layouts to be created after all bindings are
mapped. This is less complex and fragile than the current scheme, and in
a future patch it will support separating descriptor types into different
sets. Descriptors on virtual heaps are currently allocated from pools
which contain an equal number of each descriptor type used by vkd3d, and
this can waste a significant amount of device memory.
2024-10-17 17:23:04 +02:00
Giovanni Mascellani
b5c56a50b5
vkd3d: Use vk_binding_array_add_binding() in d3d12_root_signature_init_root_descriptors().
2024-10-17 17:23:04 +02:00
Giovanni Mascellani
3aec841a9f
vkd3d: Use vk_binding_array_add_binding() in d3d12_root_signature_init_static_samplers().
2024-10-17 17:23:04 +02:00
Giovanni Mascellani
416ce575f6
vkd3d: Introduce a helper function to add bindings to struct vk_binding_array.
2024-10-17 17:23:04 +02:00
Conor McCarthy
eca344ff56
vkd3d: Introduce a separate structure for storing Vulkan descriptor binding arrays.
2024-10-17 17:23:04 +02:00
Conor McCarthy
3f98ca53ca
vkd3d: Access the current range via the declared pointer in d3d12_root_signature_init_root_descriptor_tables().
2024-10-17 17:23:04 +02:00
Conor McCarthy
b092fcfc46
tests/d3d12: Test buffer and texture SRVs in test_unbounded_resource_arrays().
...
On virtual heaps, SRV/UAV unbounded ranges are implemented using two
descriptor sets, one for buffers and another for textures, and this case
should be tested.
2024-10-17 17:23:04 +02:00
Giovanni Mascellani
c89e547e3e
ci: Use the macOS image from the master vkd3d repository.
...
The current URL is from my own testing repository and it's not
meant for general use.
2024-10-16 21:40:58 +02:00
Giovanni Mascellani
2b45878ff8
vkd3d-shader/ir: Validate the line density SV_TessFactor signature element for isolines domains.
2024-10-16 21:40:58 +02:00
Giovanni Mascellani
f470eb2a1a
vkd3d-shader/ir: Validate the line detail SV_TessFactor signature element for isolines domains.
2024-10-16 21:40:58 +02:00
Giovanni Mascellani
c5c3151414
vkd3d-shader/ir: Validate SV_InsideTessFactor signature elements for tri domains.
2024-10-16 21:40:58 +02:00
Giovanni Mascellani
4e8b34c075
vkd3d-shader/ir: Validate SV_TessFactor signature elements for tri domains.
2024-10-16 21:40:58 +02:00
Giovanni Mascellani
b2460a6794
vkd3d-shader/ir: Validate SV_InsideTessFactor signature elements for quad domains.
2024-10-16 21:40:58 +02:00
Giovanni Mascellani
a8b9a92c10
vkd3d-shader/ir: Validate SV_TessFactor signature elements for quad domains.
2024-10-16 21:40:58 +02:00
Shaun Ren
1ed5f1a4d0
vkd3d-shader/tpf: Write the patch constant function in hull shaders.
...
We use a single hs_fork_phase here for the patch constant function.
2024-10-16 21:40:40 +02:00
Shaun Ren
f771f081d9
tests: Test signature reflection for hull shaders.
2024-10-16 21:22:02 +02:00
Shaun Ren
ae2d86b99c
vkd3d-shader/tpf: Determine SIV from SV and index in write_sm4_dcl_semantic().
2024-10-16 21:12:29 +02:00
Shaun Ren
df3aaac7cf
vkd3d-shader/tpf: Introduce tpf_write_shader_function().
2024-10-16 21:12:13 +02:00
Shaun Ren
147f8898ca
vkd3d-shader/hlsl: Process the patch constant function in hlsl_emit_bytecode().
...
Also, support patch constant function semantics in sm4_sysval_semantic_from_semantic_name().
2024-10-16 21:10:24 +02:00
Shaun Ren
aee00ea55a
tests: Test hull shader uniform input parameters.
2024-10-16 21:07:53 +02:00
Shaun Ren
cbed70c60f
vkd3d-shader/tpf: Implement semantics for hull shaders.
2024-10-16 21:07:53 +02:00
Shaun Ren
beb342ed5f
vkd3d-shader/tpf: Write hull shader declarations.
2024-10-16 21:07:53 +02:00
Henri Verbeet
47fcbc335b
vkd3d-shader/d3dbc: Avoid D3DXSHADER_CONSTANTTABLE.
2024-10-16 21:07:53 +02:00
Shaun Ren
069b8aac64
vkd3d-shader/hlsl: Implement struct single inheritance.
...
Here, we implement single inheritance by inserting a field at the
beginning of the derived struct with name "$super".
For the following struct declarations
struct a
{
float4 aa;
float4 bb;
};
struct b : a
{
float4 cc;
};
struct c : b
{
float4 bb;
};
this commit generates the following:
struct a
{
float4 aa;
float4 bb;
};
struct b
{
struct a $super;
float4 cc;
};
struct c
{
struct b $super;
float4 bb;
};
2024-10-16 21:07:53 +02:00
Shaun Ren
013e354b46
tests: Test struct single inheritance.
2024-10-16 21:07:53 +02:00
Francisco Casas
7eee877dd4
vkd3d-shader/tpf: Make hlsl_sm4_register_from_semantic() independent of HLSL IR.
2024-10-16 21:07:51 +02:00
Francisco Casas
a243862b8c
vkd3d-shader/tpf: Make sysval_semantic_from_hlsl() independent of HLSL IR.
2024-10-16 21:05:10 +02:00
Francisco Casas
7cc8151b81
vkd3d-shader/tpf: Replace uses of ctx->profile with tpf->program->shader_version.
2024-10-16 18:50:15 +02:00
Francisco Casas
c75fbaf94e
vkd3d-shader/tpf: Use the I/O signatures from the vsir program in tpf_write_signature().
2024-10-16 17:40:26 +02:00
Francisco Casas
10442369d8
vkd3d-shader/tpf: Pass a tpf_compiler structure to tpf_compile() callees.
2024-10-16 17:26:47 +02:00
Francisco Casas
16d9a10dd5
vkd3d-shader/tpf: Rename "tpf_writer" to "tpf_compiler".
...
Analog to d3dbc_compiler.
2024-10-16 17:09:15 +02:00
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
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
Giovanni Mascellani
3285d1ad8c
tests: Only destroy the device if the context has one in vulkan_test_context_destroy().
...
If vulkan_test_context_init_device() was never called, or failed to
create a device, the context won't have a device.
2024-10-10 19:53:18 +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
Conor McCarthy
fcb09be6e3
tests/shader-runner: Move the Vulkan helper functions to vulkan_utils.h.
2024-10-08 20:34:03 +02:00
Conor McCarthy
ce83628882
tests/shader-runner: Move struct vulkan_test_context to vulkan_utils.h.
2024-10-08 20:34:03 +02:00
Conor McCarthy
fc65170521
tests/shader_runner: Introduce struct vulkan_test_context for the Vulkan runner.
2024-10-08 20:34:03 +02:00
Conor McCarthy
d76435cd21
tests: Move the dxc compilation helpers to utils.h.
2024-10-08 20:34:03 +02:00
Evan Tang
102cfdab36
tests: Add a test for writing patch constants during tessellation.
2024-10-07 17:44:29 +02:00
Evan Tang
3342d307a8
tests: Add a test for shader interstage register packing.
2024-10-07 17:39:45 +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
Giovanni Mascellani
fbd8b1a8c4
tests/shader-runner: Print the WARP driver version.
...
Since recent versions seem to have more features and possibly
fewer bugs it is useful to know what you're dealing with.
Currently the latest WARP drivers are distributed here:
https://www.nuget.org/packages/Microsoft.Direct3D.WARP
2024-10-07 17:33:50 +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
565698711b
tests: Add a test for uniform array indexing.
2024-10-07 17:30:41 +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
Henri Verbeet
4dec4e9959
vkd3d-shader/glsl: Implement VKD3DSIH_ILT.
2024-10-03 19:18:15 +02:00
Henri Verbeet
68492e704f
vkd3d-shader/glsl: Implement VKD3DSIH_IGE.
2024-10-03 19:15:48 +02:00
Henri Verbeet
cf6a3ad676
vkd3d-shader/glsl: Implement VKD3DSIH_SAMPLE.
2024-10-03 19:15:48 +02:00
Henri Verbeet
eb10f0897e
vkd3d-shader/glsl: Implement VKD3DSIH_LD.
2024-10-03 19:14:43 +02:00
Giovanni Mascellani
0e50825b83
vkd3d-shader/ir: Validate indices for UAV registers.
2024-10-03 19:08:33 +02:00
Giovanni Mascellani
3ab68c1e46
vkd3d-shader/ir: Validate indices for RESOURCE registers.
2024-10-03 19:08:33 +02:00
Giovanni Mascellani
ab23038367
vkd3d-shader/ir: Validate indices for SAMPLER registers.
2024-10-03 19:08:33 +02:00
Giovanni Mascellani
da7c9694f1
vkd3d-shader/dxil: Emit SAMPLER, UAV and RESOURCE registers with only 2 indices.
...
DXIL handles are used to represent descriptors. Currently they are
translated to registers of the appropriate type (depending on the
descriptor type) and three indices. The first two indices are used
to represent the descriptor itself (through its signature and array
index), and are filled when the handle itself is created. The last
index is used with constant buffers to address the data inside the
buffer itself, and it goes unused with other descriptor types.
As currently implemented, however, registers for descriptors other
than constant buffers are still created with three indices, even if
the last one is useless and set to -1. In the interest of creating
more sensible VSIR code, this is now removed: DXIL handles are
created with just two indices; a third one is added when accessing
constant buffers, and nothing is changed for other descriptor types.
2024-10-03 19:08:33 +02:00
Elizabeth Figura
cebe0a8b95
vkd3d-shader/hlsl: Handle error expressions in method calls.
2024-10-03 17:47:26 +02:00
Elizabeth Figura
600f90e8b0
vkd3d-shader/hlsl: Handle error expressions in assignments.
2024-10-03 17:47:26 +02:00
Elizabeth Figura
c94aa5e03c
vkd3d-shader/hlsl: Handle error expressions in binary expressions.
2024-10-03 17:47:26 +02:00
Elizabeth Figura
d6052bc31b
vkd3d-shader/hlsl: Handle error expressions in function calls.
2024-10-03 17:47:26 +02:00
Elizabeth Figura
5d52bef19d
vkd3d-shader/hlsl: Return an "error" expression when using an undeclared variable.
2024-10-03 17:47:26 +02:00
Elizabeth Figura
67093c5833
vkd3d-shader/hlsl: Free static initializers after functions.
...
We need users of a value to be freed before the value itself is.
Due to copy propagation or use of the pre-allocated error instruction,
static_initializers can contain values that will be used in function blocks.
2024-10-03 17:47:26 +02:00
Giovanni Mascellani
ae27fded1a
vkd3d-shader/spirv: Handle all possible destination modifiers.
...
Historically the SPIR-V backend was only fed by the TPF parser,
which only generates _sat destination modifiers. Now it is fed
by the D3DBC parser too (among others), so it mustn't assert on
other modifiers.
Modifier _pp can be trivially ignored. Modifier _centroid would
probably require some handling, but I'm not immediately sure of
what should happen and it doesn't look like a very urgent thing
anyway, so I'm degrading the assertion to FIXME().
2024-10-02 22:31:50 +02:00
Henri Verbeet
fc4c9b7a95
vkd3d-shader/glsl: Implement VKD3DSIH_USHR.
2024-10-02 22:30:58 +02:00
Henri Verbeet
babbf11d52
vkd3d-shader/glsl: Implement VKD3DSIH_ISHR.
2024-10-02 22:30:58 +02:00
Henri Verbeet
7f1c78f8e2
vkd3d-shader/glsl: Implement VKD3DSIH_ISHL.
2024-10-02 22:30:58 +02:00
Henri Verbeet
f501b8c661
vkd3d-shader/glsl: Implement VKD3DSIH_MAD.
2024-10-02 22:30:58 +02:00
Henri Verbeet
4103e76245
vkd3d-shader/glsl: Implement support for VKD3DSPDM_SATURATE modifiers.
2024-10-02 22:30:58 +02:00
Giovanni Mascellani
49121937cf
readme: Document some preprocessor definitions used by vkd3d.
2024-10-02 22:30:29 +02:00
Giovanni Mascellani
2129a7f09d
readme: Move the "Developing vkd3d" section upwards.
...
The idea is to keep at the beginning of the files the sections that
contain general introduction to vkd3d and how it works, which are
likely the first things a reader needs. Then the sections going into
more specific and verbose topics, which are probably to be read only
when looking some specific piece of information.
2024-10-02 22:30:23 +02:00
Nikolay Sivov
79aa75e98f
vkd3d-shader/fx: Implement writing fx_2_0 object initializer data sections.
...
Object data is used for strings, textures, and shaders. Samplers are handled separately.
The section is a contigious stream of <id><size><object-data>, size field is used
to advance to the next <id> position.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-02 22:17:41 +02:00
Giovanni Mascellani
7e9dc8da97
vkd3d-shader/ir: Validate index count for MISCTYPE registers.
2024-10-02 22:12:47 +02:00
Giovanni Mascellani
99aebb1b31
vkd3d-shader/ir: Validate index count for RASTOUT registers.
2024-10-02 22:12:47 +02:00
Giovanni Mascellani
19d35d89cd
vkd3d-shader/ir: Validate index count for DEPTHOUTLE registers.
2024-10-02 22:12:47 +02:00
Giovanni Mascellani
6259832680
vkd3d-shader/ir: Validate index count for DEPTHOUTGE registers.
2024-10-02 22:12:47 +02:00
Giovanni Mascellani
c3757e6930
vkd3d-shader/ir: Validate index count for DEPTHOUT registers.
2024-10-02 22:12:47 +02:00
Giovanni Mascellani
53e35f2d76
vkd3d-shader/d3dbc: Do not emit indices for DEPTHOUT registers.
2024-10-02 22:11:48 +02:00
Francisco Casas
caa2a9d314
vkd3d-shader/hlsl: Parse sampler_state.
2024-10-02 22:07:34 +02:00
Francisco Casas
f47d523e0b
vkd3d-shader/hlsl: Process 'texture' as a valid stateblock lhs.
2024-10-02 22:07:34 +02:00
Francisco Casas
125bf74ef3
tests: Test sampler_state keyword syntax.
2024-10-02 22:07:34 +02:00
Nikolay Sivov
994e994231
vkd3d-shader/fx: Handle assignments with array RHS indexed with a constant or a single variable.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-02 22:05:46 +02:00
Nikolay Sivov
2722346ffb
vkd3d-shader/hlsl: Do not lower index expressions for effects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-02 22:05:24 +02:00
Nikolay Sivov
849d4b3b2b
tests: Add some tests for state value assignments.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-02 22:04:44 +02:00
Elizabeth Figura
3b1760134f
tests: Test clip planes.
2024-10-02 21:49:54 +02:00
Elizabeth Figura
4400315c4b
vkd3d-shader: Allow controlling clip planes through vkd3d-shader parameters.
2024-10-02 21:49:54 +02:00
Elizabeth Figura
85b8503995
vkd3d-shader/ir: Remove newlines from some vkd3d_shader_error() calls.
2024-10-02 21:49:54 +02:00
Henri Verbeet
3452d126a8
vkd3d-shader/glsl: Implement VKD3DSIH_ELSE.
2024-10-01 17:29:48 +02:00
Henri Verbeet
01ba2ba6db
vkd3d-shader/glsl: Implement VKD3DSIH_NOT.
2024-10-01 17:29:48 +02:00
Henri Verbeet
1812258f37
vkd3d-shader/glsl: Implement VKD3DSIH_RSQ.
2024-10-01 17:29:48 +02:00
Henri Verbeet
5cf8562124
vkd3d-shader/glsl: Implement VKD3DSIH_MIN.
2024-10-01 17:29:48 +02:00
Henri Verbeet
4f054aed48
vkd3d-shader/glsl: Implement VKD3DSIH_MAX.
2024-10-01 17:29:48 +02:00
Victor Chiletto
2ea5f187f9
vkd3d-shader/hlsl: Allow cbuffer reservations to overlap if only one of them is allocated.
2024-10-01 17:28:41 +02:00
Victor Chiletto
8010ef8771
tests: Add a test for unused overlapping cbuffer reservations.
2024-10-01 17:28:41 +02:00
Nikolay Sivov
5e52ccbf3d
vkd3d-shader/hlsl: Move default values indexing fixup to the tpf writer stage.
...
The primary goal here is to move compilation profile type and version
check outside of a parsing stage. Default values for parameters were
never subjected to this fixup, and it does look tpf-specific, so moving
it where it belongs.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-10-01 17:27:12 +02:00
Andrey Gusev
f28d39b609
vkd3d-utils: Store the actual serialisation return value in D3DStripShader().
2024-09-30 20:57:15 +02:00
Andrey Gusev
c94eac2d33
vkd3d-utils: Store the actual serialisation return value in get_blob_part().
2024-09-30 20:52:24 +02:00
Giovanni Mascellani
6822f1fe6c
vkd3d-shader/dxil: Trace the program when validation fails after parsing.
2024-09-30 20:48:43 +02:00
Giovanni Mascellani
5f20103518
vkd3d-shader/d3dbc: Trace the program when validation fails after parsing.
2024-09-30 20:48:43 +02:00
Giovanni Mascellani
8acaa3a62c
vkd3d-shader/tpf: Propagate validation errors after parsing.
...
Also, trace the program when validation fails after parsing, mostly
to make debugging easier.
2024-09-30 20:48:43 +02:00
Giovanni Mascellani
0f91149260
vkd3d-shader/d3d-asm: Dump all indices when tracing VSIR code.
...
Our ASM dumper currently hides or interprets some register indices
in order to match users expectations. This can be inconvenient for
developers, though, because it makes it harder to understand what's
really going on in the VSIR code when reading logs. With this change
the whole index structure is dumped.
2024-09-30 20:22:53 +02:00
Henri Verbeet
10559fa17a
vkd3d-shader/glsl: Implement VKD3DSIH_LOG.
2024-09-30 20:21:14 +02:00
Henri Verbeet
700eba0b01
vkd3d-shader/glsl: Handle SV_IS_FRONT_FACE inputs.
2024-09-30 20:20:11 +02:00
Henri Verbeet
0cc0b68fb4
vkd3d-shader/glsl: Implement VKD3DSIH_ROUND_NE.
2024-09-30 20:08:58 +02:00
Henri Verbeet
308121ba04
vkd3d-shader/glsl: Implement VKD3DSIH_IF and VKD3DSIH_ENDIF.
2024-09-30 20:08:58 +02:00
Henri Verbeet
e911433e0c
vkd3d-shader/glsl: Implement VKD3DSIH_ROUND_NI.
2024-09-30 20:08:58 +02:00
Giovanni Mascellani
5c2b057b56
vkd3d-shader/ir: Validate UAV registers.
2024-09-30 20:05:52 +02:00
Giovanni Mascellani
b7b5b0cff8
vkd3d-shader/ir: Validate RESOURCE registers.
2024-09-30 20:05:52 +02:00
Giovanni Mascellani
a0b98c1610
vkd3d-shader/ir: Validate SAMPLER registers.
2024-09-30 20:05:52 +02:00
Giovanni Mascellani
7404fa5285
vkd3d-shader/dxil: Emit RESOURCE and UAV registers with data type UNUSED.
2024-09-30 20:05:39 +02:00
Nikolay Sivov
300e4e0d12
vkd3d-shader/fx: Add support for writing annotations for fx_2_0.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-30 20:02:51 +02:00
Nikolay Sivov
c9c537faa0
vkd3d-shader/fx: Add initial support for writing default values for fx_2_0.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-30 20:02:05 +02:00
Nikolay Sivov
da0469f190
vkd3d-shader/fx: Handle the 'half' type in fx_4+.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-30 20:01:57 +02:00
Nikolay Sivov
2626dcc55d
tests: Add some tests for initial values in effects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-30 19:59:21 +02:00
Conor McCarthy
2bf517782d
vkd3d-shader/dxil: Load forward-referenced sources as value/type pairs in sm6_parser_emit_store().
2024-09-30 19:58:06 +02:00
Conor McCarthy
6a86e1a8d9
vkd3d-shader/dxil: Load forward-referenced comparands as value/type pairs in sm6_parser_emit_cmpxchg().
2024-09-30 19:57:55 +02:00
Francisco Casas
95bd06be83
tests/shader-runner: Query for SM6 support instead of checking VKD3D_SHADER_UNSUPPORTED_DXIL.
...
This change avoids skipping the tests on a Windows build, where the
support is present but the macro is not defined.
Thanks Giovanni for pointing this out.
2024-09-30 19:29:14 +02:00
Francisco Casas
42f910e56e
tests/shader_runner: Query for GLSL target support instead of checking VKD3D_SHADER_UNSUPPORTED_GLSL.
2024-09-30 19:28:09 +02:00
Giovanni Mascellani
828e5f1249
vkd3d-shader/ir: Disallow RESOURCE registers in destination parameters.
2024-09-26 17:44:52 +02:00
Giovanni Mascellani
674ad7d655
vkd3d-shader/ir: Disallow SAMPLER registers in destination parameters.
2024-09-26 17:44:52 +02:00
Giovanni Mascellani
6de741e5e7
vkd3d-shader/ir: Do not allow NULL registers in source parameters.
2024-09-26 17:44:52 +02:00
Giovanni Mascellani
8d85ea2dc5
vkd3d-shader: Get rid of the RESOURCE data type.
2024-09-26 17:42:16 +02:00
Giovanni Mascellani
e58726310b
vkd3d-shader: Get rid of the UAV data type.
2024-09-26 17:42:16 +02:00
Giovanni Mascellani
2934f820a9
vkd3d-shader: Get rid of the SAMPLER data type.
2024-09-26 17:42:16 +02:00
Giovanni Mascellani
afa2fd527c
vkd3d-shader/dxil: Release memory on exceptional paths when parsing DXIL code. (Valgrind)
2024-09-26 17:41:21 +02:00
Henri Verbeet
466c8bfbb7
vkd3d-shader/glsl: Implement VKD3DSIH_LTO.
2024-09-26 17:40:07 +02:00
Henri Verbeet
44e96ad4d6
vkd3d-shader/glsl: Implement VKD3DSIH_EXP.
2024-09-26 17:40:07 +02:00
Henri Verbeet
d68e60a78a
vkd3d-shader/glsl: Implement VKD3DSIH_IEQ.
2024-09-26 17:40:07 +02:00
Henri Verbeet
55de9ea405
vkd3d-shader/glsl: Implement VKD3DSIH_DCL_INPUT_PS.
2024-09-26 17:40:07 +02:00
Henri Verbeet
f0c8b4a3c5
vkd3d-shader/glsl: Implement VKD3DSIH_SQRT.
2024-09-26 17:40:07 +02:00
Giovanni Mascellani
5ad83a05ff
vkd3d-shader/dxil: Release memory on exceptional paths in sm6_parser_read_signature(). (Valgrind)
2024-09-26 01:05:35 +02:00
Henri Verbeet
92a7cc3420
vkd3d-shader/glsl: Implement VKD3DSIH_DP2.
2024-09-26 01:04:32 +02:00
Henri Verbeet
b9d8b84b06
vkd3d-shader/glsl: Implement VKD3DSIH_DP4.
2024-09-26 01:04:32 +02:00
Henri Verbeet
93cd63bc93
vkd3d-shader/glsl: Implement VKD3DSIH_DP3.
2024-09-26 01:04:32 +02:00
Henri Verbeet
929010ffd7
vkd3d-shader/glsl: Implement support for the VKD3DSPR_DEPTHOUT register.
2024-09-26 01:04:32 +02:00
Henri Verbeet
459f141e81
vkd3d-shader/glsl: Implement VKD3DSIH_ROUND_Z.
2024-09-26 01:04:32 +02:00
Feifan He
e8b14d765d
vkd3d-shader/msl: Implement support for VKD3DSPR_TEMP registers.
2024-09-24 13:56:11 +02:00
Francisco Casas
ebc4f84185
tests/shader_runner: Use skip() when the d3d12 device doesn't support shader model 6.
2024-09-24 13:54:27 +02:00
Francisco Casas
a4262c3836
tests/shader_runner: Skip the DXIL tests when DXIL support is not enabled.
2024-09-24 13:51:14 +02:00
Francisco Casas
94af1754dd
tests/shader_runner: Skip the GLSL tests when GLSL support is not enabled.
2024-09-24 13:45:57 +02:00
Henri Verbeet
f37be27bdc
vkd3d-shader/ir: Properly check the register bounds in shader_signature_find_element_for_reg().
...
Perhaps the existing code is safe in practice, but doing the check
properly avoids having to make that determination.
2024-09-24 13:39:43 +02:00
Henri Verbeet
8e39783770
vkd3d-shader/glsl: Implement VKD3DSIH_ROUND_PI.
2024-09-24 13:38:26 +02:00
Henri Verbeet
58472e7404
vkd3d-shader/glsl: Implement VKD3DSIH_FTOU.
2024-09-24 13:38:26 +02:00
Atharva Nimbalkar
f441d3e112
vkd3d-shader/glsl: Implement VKD3DSIH_UTOF.
2024-09-24 13:38:26 +02:00
Henri Verbeet
a3d06c8f12
vkd3d-shader/glsl: Implement VKD3DSIH_FTOI.
2024-09-24 13:38:26 +02:00
Atharva Nimbalkar
b81cdcb488
vkd3d-shader/glsl: Implement VKD3DSIH_ITOF.
2024-09-24 13:38:26 +02:00
Conor McCarthy
91475c684f
vkd3d: Clear the output pointer on failure in vkd3d_create_versioned_root_signature_deserializer().
2024-09-24 13:34:40 +02:00
Conor McCarthy
ae4a6c7044
tests/d3d12: Test invalid bytecode in test_root_signature_byte_code().
2024-09-24 13:30:33 +02:00
Giovanni Mascellani
e2c6058734
vkd3d-shader/spirv: Do not specify depth for SPIR-V images.
...
SPIR-V images have a "depth" parameter that, as far as I understand
(the spec doesn't look terribly clear in that regard), specifies
whether the image can be used for depth-comparison operations.
In TPF (and therefore in VSIR) the same information is specified
on the sampler type instead of on the image type. This puts us in
a hard spot, because in principle an image can be used with
many different samplers, and the mapping might even be unknown
at compilation time, so it's not clear how we should define our
images.
We currently have some algorithms to deal with that, but they are
incomplete and lead to SPIR-V validation errors like:
Expected Image to have the same type as Result Type Image
%63 = OpSampledImage %62 %59 %61
The problem here is that the image has a non-depth type, but is
being sampled as a depth image. This check was added recently to
SPIRV-Tools, so we became aware of the problem.
As I said, it's not easy in general to decide whether an image is
going to be sampled with depth-comparison operators or not.
Fortunately the SPIR-V spec allow to mark the depth parameter as
unknown (using value 2), so until we come up with something better
we use that for all images to please the validator and avoid
giving misleading hints to the driver.
2024-09-24 13:19:17 +02:00
Arkadiusz Hiler
a3017fe9d5
vkd3d-shader/preproc: Support namespaces in macro identifiers.
2024-09-24 13:17:24 +02:00
Giovanni Mascellani
a2aeb3a142
vkd3d-shader/spirv: Cache numeric types without through the general declaration cache.
...
Numeric types are used very frequently, and doing a tree search
each time one is needed tends to waste a lot of time.
I ran the compilation of ~1000 DXBC-TPF shaders randomly taken from
my collection and measured the performance using callgrind and the
kcachegrind "cycle count" estimation.
BEFORE:
* 1,764,035,136 cycles
* 1,767,948,767 cycles
* 1,773,927,734 cycles
AFTER:
* 1,472,384,755 cycles
* 1,469,506,188 cycles
* 1,470,191,425 cycles
So callgrind would estimate a 16% improvement at least.
2024-09-23 15:48:35 +02:00
Giovanni Mascellani
3a21daa49e
vkd3d-shader/spirv: Rewrite vkd3d_spirv_get_type_id_for_data_type() in terms of vkd3d_spirv_get_type_id().
2024-09-23 15:48:35 +02:00
Conor McCarthy
945e8a9024
vkd3d: Sort bounded descriptor ranges after unbounded ones of equal offset.
...
Enables the bounded range to be mapped to the unbounded one, instead of
being mapped to a separate binding which will be populated from the same
d3d12 descriptors as the unbounded one.
2024-09-23 15:45:26 +02:00
Conor McCarthy
966e627733
tests/d3d12: Test a bounded range at the same offset as an unbounded one in test_unbounded_resource_arrays().
2024-09-23 15:45:26 +02:00
Elizabeth Figura
650bf4d83f
vkd3d-shader/hlsl: Fix a corner case in ternary type conversion.
...
If the condition and argument types are compatible, i.e. there is no broadcast,
the resulting shape should be the shape of the arguments, not the shape of the
condition.
2024-09-23 15:43:15 +02:00
Elizabeth Figura
b2cddecfc5
vkd3d-shader/hlsl: Use add_cast() in append_conditional_break().
...
Instead of creating a cast node directly.
This specifically handles the 1x1 matrix case, which currently the backend code does not expect.
2024-09-23 15:43:15 +02:00
Henri Verbeet
1e97e1203f
vkd3d-shader/d3dbc: Write the actual constant info offset in write_sm1_uniforms().
2024-09-23 15:42:25 +02:00
Atharva Nimbalkar
ee8e005209
vkd3d-shader/glsl: Implement VKD3DSIH_MOVC.
2024-09-23 15:41:07 +02:00
Henri Verbeet
7b99c33510
vkd3d-shader/glsl: Implement VKD3DSIH_FRC.
2024-09-23 15:41:07 +02:00
Henri Verbeet
36c08b47e9
vkd3d-shader/glsl: Implement VKD3DSIH_GEO.
2024-09-23 15:41:07 +02:00
Henri Verbeet
28ef331704
vkd3d-shader/glsl: Implement support for VKD3DSPSM_NEG modifiers.
2024-09-23 15:41:07 +02:00
Henri Verbeet
b9366def96
vkd3d-shader/glsl: Implement VKD3DSIH_DIV.
2024-09-23 15:41:07 +02:00
Elizabeth Figura
43b714d896
vkd3d-shader/hlsl: Handle error expressions in unary expressions.
2024-09-23 15:28:47 +02:00
Elizabeth Figura
7e3231c749
vkd3d-shader/hlsl: Return an "error" expression when constructing an arithmetic expression from incompatible types.
2024-09-23 15:28:47 +02:00
Elizabeth Figura
c43e5c8eb5
vkd3d-shader/hlsl: Introduce the "error" type.
...
Currently, if an expression successfully parses according to the bison grammar,
but for one reason or another cannot generate a meaningful IR instruction, we
abort parsing with YYABORT. This includes, for example, an undefined variable or
function, invalid swizzle or field reference, or a constructor with a complex or
non-numeric data type.
Aborting parsing is unfortunate, however, because it means that any further
errors in the program cannot be caught by the programmer, increasing the number
of times they will need to fix errors and recompile.
The idea of this patch is that any such expression will instead generate an IR
node whose data type is of HLSL_CLASS_ERROR. Any further expression which would
consume an "error" typed instruction will instead immediately return an
expression of type "error" (probably the same one) instead of aborting or doing
any other type-checking.
Currently these "error" instructions should not pass the parsing stage, since
hlsl_compile_shader() will immediately notice that compilation has failed and
skip any optimization, lowering, or bytecode-writing.
A further direction to take this is to pre-allocate one "error" expression
immediately when creating the HLSL parser, and return that expression when we
fail to allocate an hlsl_ir_node of any type. This means we do not need to
handle allocation errors when constructing nodes, saving us quite a lot of error
handling (which is not only tedious but currently often broken, if nothing else
by virtue of neglecting cleanup of local variables).
2024-09-23 15:28:47 +02:00
Elizabeth Figura
7daaaf6386
vkd3d-shader/hlsl: Clarify a comment.
2024-09-23 15:28:47 +02:00
Elizabeth Figura
010aa53bfa
vkd3d-shader/hlsl: Do not handle HLSL_CLASS_CONSTANT_BUFFER in copy_propagation_transform_load().
2024-09-23 15:28:47 +02:00
Elizabeth Figura
f73a23f735
vkd3d-shader/hlsl: Do not create a copy in add_assignment().
2024-09-23 15:28:47 +02:00
Elizabeth Figura
eb7f5f7f68
vkd3d-shader/hlsl: Return bool from add_assignment().
2024-09-23 15:28:47 +02:00
Elizabeth Figura
8975933aff
vkd3d-shader/hlsl: Store a pointer to the block's "value" instruction in the block.
2024-09-23 15:28:47 +02:00
Nikolay Sivov
799e6105a4
vkd3d-shader/d3dbc: Add an option to treat doubles as floats.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55448
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-23 15:26:35 +02:00
Nikolay Sivov
d7def84253
vkd3d-shader/hlsl: Remove the 'double' keyword.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-23 15:26:35 +02:00
Nikolay Sivov
968a3dfc1a
tests: Add some more tests for type name handling.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-23 15:26:28 +02:00
Nikolay Sivov
b5c5783293
vkd3d-shader: Explicitly set indices for the numeric type names array.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-23 15:25:36 +02:00
Andrey Gusev
2ac7f650a1
vkd3d: Recognise VK_QUEUE_VIDEO_ENCODE_BIT_KHR in debug_vk_queue_flags().
2024-09-20 17:21:44 +02:00
Nikolay Sivov
f64689eed8
vkd3d-shader/tpf: Set temps count in the STAT section.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-20 17:20:02 +02:00
Nikolay Sivov
478e28ea79
vkd3d-shader/tpf: Move STAT fields update to a separate helper.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-20 17:20:02 +02:00
Henri Verbeet
bec7188333
vkd3d-utils: Make D3D12CreateDevice a variadic macro, if possible.
...
Mostly to make life easier for (external) code invoking this with
IID_PPV_ARGS or similar constructions.
2024-09-20 17:17:30 +02:00
Henri Verbeet
bc70d575ae
vkd3d-shader/glsl: Implement VKD3DSIH_OR.
2024-09-20 17:16:33 +02:00
Henri Verbeet
e289c3999d
vkd3d-shader/glsl: Implement VKD3DSIH_INE.
2024-09-20 17:16:33 +02:00
Henri Verbeet
3b3fe1da2c
vkd3d-shader/glsl: Implement VKD3DSIH_MUL.
2024-09-20 17:16:33 +02:00
Atharva Nimbalkar
2fc35da940
vkd3d-shader/glsl: Implement support for VSIR_DIMENSION_VEC4 immediate constants.
2024-09-20 17:16:33 +02:00
Henri Verbeet
2409966ff2
vkd3d-shader/glsl: Implement VKD3DSIH_NEU.
2024-09-20 17:16:33 +02:00
Giovanni Mascellani
9777c8bc65
vkd3d-shader/spirv: Do not reallocate the SPIR-V program.
...
I ran the compilation of ~1000 DXBC-TPF shaders randomly taken from
my collection and measured the performance using callgrind and the
kcachegrind "cycle count" estimation.
BEFORE:
* 1,846,641,596 cycles
* 1,845,635,336 cycles
* 1,841,335,225 cycles
AFTER:
* 1,764,035,136 cycles
* 1,767,948,767 cycles
* 1,773,927,734 cycles
So callgrind would estimate a 3.6% improvement at least.
The counterpoint is that the caller might get an allocation that
is potentially bigger than necessary. I would expect that allocation
to be rather short-lived anyway, so that's probably not a problem.
2024-09-20 17:14:49 +02:00
Giovanni Mascellani
35d3161f9d
vkd3d-shader/spirv: Propagate errors from vkd3d_spirv_stream_append().
2024-09-20 17:04:31 +02:00
Giovanni Mascellani
637a3cabe7
vkd3d-shader/ir: Allow failure in shader_signature_find_element_for_reg().
...
shader_signature_find_element_for_reg() is also used in the TPF parser,
where the program has not been validated yet, so it must not crash
on errors.
The I/O normaliser can instead assume that the shader is already
validated.
This fixes a crash with a shader used by The Falconeer. The bug is still
present, because the shader will be incorrectly rejected, but at least
the vkd3d-shader will fail gracefully.
2024-09-20 17:01:29 +02:00
Nikolay Sivov
32ced3bd8f
vkd3d-shader/tpf: Set 'gather' instructions counter in the STAT.
2024-09-19 14:38:59 +02:00
Nikolay Sivov
01f6ef5e6d
vkd3d-shader/tpf: Add a 'lod' counter to the STAT.
2024-09-19 14:38:59 +02:00
Nikolay Sivov
7c9695b261
vkd3d-shader/tpf: Handle barrier instructions in STAT.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-19 14:38:59 +02:00
Henri Verbeet
d4bc51b850
vkd3d-shader/d3dbc: Introduce enum vkd3d_sm1_rastout_register.
2024-09-19 14:38:03 +02:00
Atharva Nimbalkar
f8d403f330
vkd3d-shader/glsl: Implement VKD3DSIH_AND.
2024-09-19 14:35:24 +02:00
Henri Verbeet
c8acf285cb
vkd3d-shader/glsl: Implement support for VKD3DSPSM_ABS modifiers.
2024-09-19 14:35:20 +02:00
Atharva Nimbalkar
1d485cc8a9
vkd3d-shader/glsl: Implement support for VKD3DSPR_IMMCONST registers.
2024-09-19 14:32:29 +02:00
Atharva Nimbalkar
ab07637ee1
vkd3d-shader/glsl: Implement VKD3DSIH_ADD.
2024-09-19 14:29:46 +02:00
Henri Verbeet
ae40184631
vkd3d-shader/glsl: Implement support for VKD3DSPR_CONSTBUFFER registers.
2024-09-19 14:29:46 +02:00
Henri Verbeet
e9f0c6fef3
vkd3d-shader/glsl: Handle SV_TARGET outputs.
2024-09-18 15:04:52 +02:00
Henri Verbeet
6cae2d006c
vkd3d-shader/d3dbc: Introduce enum vkd3d_sm1_misc_register.
2024-09-18 15:04:10 +02:00
Henri Verbeet
29e58a2be3
build: Use a tab to indent the "tests/hlsl/constructgswithso.shader_test" line in Makefile.am.
...
I had originally noticed this during review, and then promptly forgot about it.
2024-09-18 15:03:53 +02:00
Feifan He
9b1b7e86cf
vkd3d-shader/msl: Implement VKD3DSIH_RET.
2024-09-18 15:02:57 +02:00
Feifan He
7aa0de27e9
vkd3d-shader/msl: Implement VKD3DSIH_MOV.
2024-09-18 14:48:03 +02:00
Henri Verbeet
a1487380bb
vkd3d-shader/glsl: Implement support for VKD3DSPR_OUTPUT registers.
2024-09-17 18:05:47 +02:00
Henri Verbeet
c462c62108
vkd3d-shader/glsl: Implement support for VKD3DSPR_INPUT registers.
2024-09-17 18:05:47 +02:00
Feifan He
deda49e501
vkd3d-shader/msl: Implement VKD3DSIH_NOP.
2024-09-17 11:30:26 +02:00
Feifan He
842841907e
vkd3d-shader/msl: Add vkd3d-shader version information to the generated shader.
2024-09-17 11:30:26 +02:00
Feifan He
c278c901b5
vkd3d-shader/msl: Keep track of the current indentation level
2024-09-17 11:30:26 +02:00
Giovanni Mascellani
56ec211d04
vkd3d-shader/ir: Introduce a helper for validating Hull Shader phases.
2024-09-16 19:32:32 +02:00
Giovanni Mascellani
259273a133
vkd3d-shader/ir: Introduce a helper for validating DCL_TESSELLATOR_PARTITIONING.
2024-09-16 19:32:32 +02:00
Giovanni Mascellani
a3c7bebc18
vkd3d-shader/ir: Introduce a helper for validating DCL_TESSELLATOR_OUTPUT_PRIMITIVE.
2024-09-16 19:32:32 +02:00
Giovanni Mascellani
48f512a83a
vkd3d-shader/ir: Introduce a helper for validating DCL_TESSELLATOR_DOMAIN.
2024-09-16 19:32:32 +02:00
Giovanni Mascellani
8aa2364381
vkd3d-shader/ir: Introduce a helper for validating DCL_OUTPUT_CONTROL_POINT_COUNT.
2024-09-16 19:32:32 +02:00
Nikolay Sivov
0e9fcb1431
vkd3d-shader/tpf: Handle tessellation stage fields in STAT.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-16 14:04:46 +02:00
Nikolay Sivov
947b151ed4
vkd3d-shader/tpf: Handle atomic instructions in STAT.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-16 14:01:29 +02:00
Nikolay Sivov
7c12371298
vkd3d-shader/tpf: Handle bitwise instructions in STAT.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-16 14:01:18 +02:00
Nikolay Sivov
90fc57ff89
vkd3d-shader/tpf: Handle GS reflection fields in the STAT section.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-16 14:01:07 +02:00
Nikolay Sivov
97cc27d33f
vkd3d-shader/d3d-asm: Tweak some GS declaration names.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-16 13:58:57 +02:00
Giovanni Mascellani
c45bb5badc
vkd3d-shader/ir: Introduce a helper for validating DCL_GL_INSTANCES.
2024-09-16 13:53:52 +02:00
Giovanni Mascellani
dec7a0dbd2
vkd3d-shader/ir: Introduce a helper for validating DCL_OUTPUT_TOPOLOGY.
2024-09-16 13:53:52 +02:00
Giovanni Mascellani
22ba37c8b9
vkd3d-shader/ir: Introduce a helper for validating DCL_VERTICES_OUT.
2024-09-16 13:53:51 +02:00
Giovanni Mascellani
936adff58b
vkd3d-shader/ir: Introduce a helper for validating DCL_INPUT_PRIMITIVE.
2024-09-16 13:53:51 +02:00
Giovanni Mascellani
0f07a2c512
vkd3d-shader/ir: Introduce a helper for validating DCL_HS_MAX_TESSFACTOR.
2024-09-16 13:53:51 +02:00
Giovanni Mascellani
e1c3266793
vkd3d-shader/ir: Record entering a block in the LABEL validation handler.
2024-09-16 13:53:51 +02:00
Giovanni Mascellani
1d21588de7
vkd3d-shader/ir: Record leaving a block in the relevant validation handlers.
2024-09-16 13:53:51 +02:00
Giovanni Mascellani
3e012c355d
vkd3d-shader/ir: Validate NOP instructions.
2024-09-14 16:44:17 +02:00
Giovanni Mascellani
27b421be6a
vkd3d-shader/ir: Do not access a missing destination register when validating PHI.
2024-09-14 16:44:17 +02:00
Giovanni Mascellani
e27cf68173
vkd3d-shader/ir: Introduce a helper for validating PHI.
2024-09-14 16:44:16 +02:00
Giovanni Mascellani
9696a0cd4a
vkd3d-shader/ir: Introduce a helper for validating SWITCH_MONOLITHIC.
2024-09-14 16:44:16 +02:00
Giovanni Mascellani
ce6306c6fb
vkd3d-shader/ir: Introduce a helper for validating BRANCH.
2024-09-14 16:44:16 +02:00
Giovanni Mascellani
504f4223c2
vkd3d-shader/ir: Introduce a helper for validating LABEL.
2024-09-14 16:44:16 +02:00
Giovanni Mascellani
c447a062c4
vkd3d-shader/ir: Introduce a helper for validating RET.
2024-09-14 16:44:16 +02:00
Giovanni Mascellani
88b3d4fb3a
vkd3d-shader/ir: Introduce a helper for validating ENDSWITCH.
2024-09-14 16:44:16 +02:00
Giovanni Mascellani
4939f580a4
vkd3d-shader/ir: Introduce a helper for validating SWITCH.
2024-09-14 16:44:16 +02:00
Francisco Casas
4b85e6b1f8
vkd3d-shader/d3dbc: Remove ctx and entry_func args in d3dbc_compile().
2024-09-14 16:39:24 +02:00
Francisco Casas
b72ef6038d
vkd3d-shader/hlsl: Remove hlsl_ir_vsir_instruction_ref.
2024-09-14 16:39:17 +02:00
Francisco Casas
6bd0390498
vkd3d-shader/hlsl: Save hlsl_ir_if in the vsir_program for SM1.
2024-09-14 16:33:25 +02:00
Henri Verbeet
6b0baeb6c2
vkd3d-shader/ir: Merge vsir_program_normalise_combined_samplers() into vsir_program_lower_instructions().
2024-09-14 16:11:45 +02:00
Henri Verbeet
3b68aa5b87
vkd3d-shader/ir: Introduce vsir_src_param_init_sampler().
2024-09-14 16:11:45 +02:00
Henri Verbeet
7ea8a29036
vkd3d-shader/ir: Introduce vsir_src_param_init_resource().
2024-09-14 16:11:45 +02:00
Henri Verbeet
ca445cd832
vkd3d-shader/ir: Move the instruction helpers together.
2024-09-14 16:11:45 +02:00
Henri Verbeet
d54e2ebd7d
vkd3d-shader/ir: Move the destination parameter helpers up.
2024-09-14 16:11:45 +02:00
Henri Verbeet
4bad83c9fb
vkd3d-shader/ir: Move the source parameter helpers up.
2024-09-14 16:11:45 +02:00
Francisco Casas
ffc1449412
vkd3d-shader/hlsl: Allow effect calls on default value initializers.
2024-09-14 16:09:12 +02:00
Francisco Casas
4aa262d773
vkd3d-shader/hlsl: Parse ConstructGSWithSO().
2024-09-14 16:09:08 +02:00
Francisco Casas
1f9fc2a422
vkd3d-shader/hlsl: Process GeometryShader as a valid stateblock lhs.
2024-09-14 16:02:43 +02:00
Francisco Casas
3423d1b54b
tests: Test ConstructGSWithSO() parsing.
2024-09-14 15:59:35 +02:00
Francisco Casas
02b249d5e7
vkd3d-shader/hlsl: Introduce enum hlsl_compile_type.
2024-09-14 15:57:40 +02:00
Nikolay Sivov
4c03cda3c7
vkd3d-shader/tpf: Handle texture instructions in STAT.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-13 16:01:22 +02:00
Nikolay Sivov
9e4b2f5a1b
vkd3d-shader/tpf: Handle 'movc' in STAT.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-13 16:01:22 +02:00
Nikolay Sivov
7bd6c6b172
vkd3d-shader/tpf: Handle 'emit' and 'cut' in STAT.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-13 16:01:22 +02:00
Nikolay Sivov
908833fa6b
vkd3d-shader/tpf: Handle arithmetic instructions in STAT.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-13 16:01:22 +02:00
Nikolay Sivov
cfa8f0dccb
vkd3d-shader/tpf: Handle conversion instructions in STAT.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-13 16:01:22 +02:00
Giovanni Mascellani
44222ea739
vkd3d-shader/ir: Introduce a helper for validating ENDREP.
2024-09-13 15:59:49 +02:00
Giovanni Mascellani
e9fbbf26bb
vkd3d-shader/ir: Introduce a helper for validating REP.
2024-09-13 15:59:15 +02:00
Giovanni Mascellani
bf9022d3df
vkd3d-shader/ir: Introduce a helper for validating ENDLOOP.
2024-09-13 15:58:46 +02:00
Giovanni Mascellani
5ce10b9e68
vkd3d-shader/ir: Introduce a helper for validating LOOP.
2024-09-13 15:58:01 +02:00
Giovanni Mascellani
34c8aaad29
vkd3d-shader/ir: Introduce a helper for validating ENDIF.
2024-09-13 15:57:39 +02:00
Giovanni Mascellani
244838d344
vkd3d-shader/ir: Introduce a helper for validating ELSE.
2024-09-13 15:56:18 +02:00
Giovanni Mascellani
8af2d04dbc
vkd3d-shader/ir: Introduce a helper for validating IFC.
2024-09-13 15:54:51 +02:00
Giovanni Mascellani
af687c9522
vkd3d-shader/ir: Introduce a helper for validating IF.
2024-09-13 15:54:16 +02:00
Giovanni Mascellani
35fe5b48c8
vkd3d-shader/ir: Introduce a helper for validating DCL_TEMPS.
2024-09-13 15:52:07 +02:00
Henri Verbeet
d30160710b
vkd3d-shader/tpf: Include vkd3d_d3dcommon.h only from tpf.c.
2024-09-12 18:50:51 +02:00
Henri Verbeet
14ee3b3e4a
vkd3d-shader/d3dbc: Use VKD3D_SM1_DCL_USAGE_SHIFT and VKD3D_SM1_DCL_USAGE_INDEX_SHIFT in d3dbc_write_semantic_dcl().
2024-09-12 18:49:57 +02:00
Elizabeth Figura
1aa857735f
vkd3d-shader/hlsl: Preserve doubles in intrinsic_determinant().
2024-09-12 18:48:52 +02:00
Elizabeth Figura
e146cc4c8e
vkd3d-shader/hlsl: Preserve doubles in intrinsic_cross().
2024-09-12 18:48:52 +02:00
Elizabeth Figura
1176aaad22
vkd3d-shader/hlsl: Preserve doubles in elementwise_intrinsic_float_convert_args().
2024-09-12 18:48:52 +02:00
Elizabeth Figura
ebaf877b62
vkd3d-shader/hlsl: Preserve doubles in intrinsic_float_convert_arg().
2024-09-12 18:48:52 +02:00
Elizabeth Figura
534d546ed9
vkd3d-shader/hlsl: Use expr_common_base_type() in intrinsic_cross().
2024-09-12 18:48:52 +02:00
Elizabeth Figura
9260078300
vkd3d-shader/hlsl: Use intrinsic_float_convert_arg() in write_acos_or_asin().
2024-09-12 18:48:52 +02:00
Anna (navi) Figueiredo Gomes
e61046fb23
vkd3d-shader/hlsl: Implement the "earlydepthstencil" attribute.
2024-09-12 18:46:24 +02:00
Anna (navi) Figueiredo Gomes
fe8a2f820b
tests/shader_runner: Test the "earlydepthstencil" attribute.
2024-09-12 18:45:56 +02:00
Francisco Casas
0c621f9e4e
vkd3d-shader/hlsl: Save hlsl_ir_jump in the vsir_program for SM1.
2024-09-12 18:43:55 +02:00
Francisco Casas
08fb683784
vkd3d-shader/hlsl: Save hlsl_ir_resource_load in the vsir_program for SM1.
2024-09-12 18:42:25 +02:00
Francisco Casas
961c4f8b23
vkd3d-shader/hlsl: Save CAST hlsl_ir_exprs in the vsir_program for SM1.
2024-09-12 18:39:43 +02:00
Francisco Casas
8933620109
vkd3d-shader/hlsl: Save REINTERPRET hlsl_ir_exprs as vsir_program MOVs for SM1.
2024-09-12 18:33:19 +02:00
Giovanni Mascellani
866f138875
vkd3d-shader/ir: Record the control flow type in the program.
2024-09-12 18:31:32 +02:00
Giovanni Mascellani
dcee148b1a
vkd3d-shader/ir: Move the control flow type enumeration to vkd3d_shader_private.h.
2024-09-12 18:27:20 +02:00
Nikolay Sivov
ec644b395b
vkd3d-shader/tpf: Create a stub STAT section.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-12 18:26:08 +02:00
Feifan He
5df81049aa
vkd3d-shader/msl: Call vsir_program_transform() before generating code.
2024-09-12 18:09:00 +02:00
Feifan He
47981def0d
vkd3d-shader/msl: Generate comments for unhandled instructions.
...
Similar to commit 8a60814476
for the GLSL
target.
2024-09-12 18:04:44 +02:00
Feifan He
23ba1a5e07
vkd3d-shader: Introduce VKD3D_SHADER_TARGET_MSL.
2024-09-12 17:03:32 +02:00
Henri Verbeet
ab525f31e4
vkd3d-shader/d3dbc: Use enum vkd3d_shader_src_modifier in struct sm1_src_register.
2024-09-11 15:24:54 +02:00
Henri Verbeet
f3e6c75c89
vkd3d-shader/d3dbc: Use enum vkd3d_shader_dst_modifier in struct sm1_dst_register.
2024-09-11 15:19:29 +02:00
Giovanni Mascellani
b31c9831fa
vkd3d-shader/ir: Print results as signed numbers.
2024-09-11 15:13:14 +02:00
Giovanni Mascellani
096f133b09
vkd3d-shader/ir: Rename vsir_program_normalise() to vsir_program_transform().
2024-09-11 15:13:14 +02:00
Giovanni Mascellani
03ab0156a2
vkd3d-shader/ir: Run validation after inserting the alpha test.
2024-09-11 15:13:14 +02:00
Giovanni Mascellani
5c0d640d18
vkd3d-shader/ir: Run validation after flattening control flow constructs.
2024-09-11 15:13:14 +02:00
Giovanni Mascellani
4b06729be8
vkd3d-shader/ir: Run validation after normalising combined samplers.
2024-09-11 15:13:14 +02:00
Giovanni Mascellani
c2fd1e42fd
vkd3d-shader/ir: Run validation after removing dead code.
2024-09-11 15:13:14 +02:00
Elizabeth Figura
82773eb805
vkd3d-shader/hlsl: Use elementwise_intrinsic_float_convert_args() in refract().
2024-09-11 15:11:42 +02:00
Elizabeth Figura
2688a24bde
vkd3d-shader/hlsl: Preserve halves in intrinsic_step().
2024-09-11 15:11:42 +02:00
Elizabeth Figura
b23c172a47
vkd3d-shader/hlsl: Use elementwise_intrinsic_float_convert_args() in intrinsic_smoothstep().
2024-09-11 15:11:42 +02:00
Elizabeth Figura
e7eadb38b8
vkd3d-shader/hlsl: Use elementwise_intrinsic_float_convert_args() in intrinsic_faceforward().
2024-09-11 15:11:42 +02:00
Elizabeth Figura
24e29649c4
vkd3d-shader/hlsl: Use elementwise_intrinsic_convert_args() in intrinsic_dst().
...
This one preserves integer arguments.
2024-09-11 15:11:42 +02:00
Elizabeth Figura
7636f2a233
vkd3d-shader/hlsl: Use elementwise_intrinsic_float_convert_args() in write_atan_or_atan2().
2024-09-11 15:11:42 +02:00
Francisco Casas
6e6e2910d6
vkd3d-shader/hlsl: Save DP2ADD hlsl_ir_exprs in the vsir_program for SM1.
2024-09-11 15:10:16 +02:00
Francisco Casas
4ed16108f0
vkd3d-shader/hlsl: Save COS_REDUCED and SIN_REDUCED in the vsir_program for SM1.
2024-09-11 15:09:58 +02:00
Francisco Casas
5db2c2a949
vkd3d-shader/hlsl: Save DOT hlsl_ir_exprs in the vsir_program for SM1.
2024-09-11 15:09:17 +02:00
Francisco Casas
d70342d66d
vkd3d-shader/hlsl: Save per-component hlsl_ir_exprs in the vsir_program for SM1.
2024-09-11 15:07:35 +02:00
Francisco Casas
82dec5db46
vkd3d-shader/hlsl: Save simple hlsl_ir_exprs in the vsir_program for SM1.
2024-09-11 15:06:09 +02:00
Elizabeth Figura
f6a8cdf2bb
vkd3d-shader: Do not use \ref for parameters.
2024-09-11 14:55:48 +02:00
Elizabeth Figura
304724608a
vkd3d-shader: Escape a hash in Doxygen documentation.
2024-09-11 14:55:48 +02:00
Elizabeth Figura
4683186166
vkd3d-shader: Mention the structure name when referring to a struct field.
2024-09-11 14:55:48 +02:00
Elizabeth Figura
9fbf646748
build: Do not warn on incomplete documentation.
...
Some functions in vkd3d_utils.h are altered versions of Windows
functions, and only the vkd3d-specific parts need documentation.
2024-09-11 14:55:30 +02:00
Anna (navi) Figueiredo Gomes
127ae6cf12
vkd3d: Implement d3d12_command_list_OMSetDepthBounds().
...
Based on the design document, "The runtime will not clamp or validate
the input, but implementations may clamp to the range [0,1] if necessary.",
so we test for the EXT_depth_range_unrestricted extension, and only clamp if
it's not available (thus, necessary to do so).
NaNs are converted to zero as per "NaNs must be treated as 0, but the runtime
will convert NaNs to 0 on behalf of the implementation.", and a default bounds
are set to 0.0 and 1.0.
2024-09-11 14:53:33 +02:00
Anna (navi) Figueiredo Gomes
61a700bcdc
tests: Test depth bounds.
2024-09-11 14:53:33 +02:00
Anna (navi) Figueiredo Gomes
e761b2cad1
tests/shader_runner: Introduce a "d3d12" tag.
2024-09-11 14:53:33 +02:00
Anna (navi) Figueiredo Gomes
3eb2a3d0e4
tests/shader_runner: Introduce a 'depth-bounds' test option.
2024-09-11 14:53:21 +02:00
Anna (navi) Figueiredo Gomes
12a7cde092
tests/shader_runner: Use ID3D12Device2_CreatePipelineState() when available.
2024-09-11 14:13:59 +02:00
Anna (navi) Figueiredo Gomes
04d7ad90e5
tests/shader_runner: Extract a pipeline creation function from d3d12_runner_draw().
2024-09-11 14:08:37 +02:00
Nikolay Sivov
3b4e0ce8e9
vkd3d-shader/fx: Check modifiers when reusing types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-10 21:48:03 +02:00
Giovanni Mascellani
d71966c77e
vkd3d: Do not keep track of descriptor heaps when using virtual heaps.
...
Descriptors only need flushing when using Vulkan heaps, so let's avoid
uselessly scanning an array and taking and releasing a mutex if we're not.
2024-09-10 21:47:38 +02:00
Giovanni Mascellani
05a5bd620d
vkd3d: Directly call the function to update descriptors.
...
For better code clarity.
2024-09-10 21:46:46 +02:00
Conor McCarthy
e550901efa
vkd3d-shader/ir: Free the semantic names of deleted signature elements in shader_signature_merge(). (Valgrind)
2024-09-10 21:45:22 +02:00
Giovanni Mascellani
828dfdf1bd
vkd3d-shader/ir: Run validation after normalising flat constants.
2024-09-10 21:43:14 +02:00
Giovanni Mascellani
1c285d40bd
vkd3d-shader/ir: Run validation after normalising I/O registers.
2024-09-10 21:43:14 +02:00
Giovanni Mascellani
d8c41cc270
vkd3d-shader/ir: Run validation after normalising Hull Shader control points I/O registers.
2024-09-10 21:43:14 +02:00
Giovanni Mascellani
a3fdc447de
vkd3d-shader/ir: Run validation after flattening hull shader phases.
2024-09-10 21:43:14 +02:00
Giovanni Mascellani
5fd93c28c4
vkd3d-shader/ir: Run validation after remapping the output signature.
2024-09-10 21:43:14 +02:00
Anna (navi) Figueiredo Gomes
5ebbba6fff
vkd3d/state: Replace ERR with WARN in vkd3d_validate_descriptor_set_count().
2024-09-10 21:42:47 +02:00
Henri Verbeet
207664baca
vkd3d-shader/d3dbc: Use VKD3D_SM1_REGISTER_TYPE_SHIFT and related constants in sm1_encode_register_type().
2024-09-10 21:42:23 +02:00
Henri Verbeet
f163df787e
vkd3d-shader/d3dbc: Avoid D3DVS_VERSION and D3DPS_VERSION.
2024-09-10 21:41:33 +02:00
Nikolay Sivov
de6abd964e
vkd3d-shader/hlsl: Implement the mad() intrinsic.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-10 21:40:32 +02:00
Nikolay Sivov
75299c04fd
vkd3d-shader: Handle the SV_SampleIndex semantic.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-10 21:39:03 +02:00
Giovanni Mascellani
bfd1fc9cd6
vkd3d-shader/ir: Assume that Hull Shaders have a control point phase in vsir_program_normalise_io_registers().
...
The control point phase is always introduced, when missing, by the
earlier instruction_array_normalise_hull_shader_control_point_io()
pass.
2024-09-05 16:33:05 +02:00
Giovanni Mascellani
7b9a1bf6df
vkd3d-shader/ir: Run validation after materializing undominated SSAs to TEMPs.
2024-09-05 16:29:47 +02:00
Giovanni Mascellani
08c1f4d45e
vkd3d-shader/ir: Run validation after flattening control flow constructs.
2024-09-05 16:29:17 +02:00
Giovanni Mascellani
455c826a6a
vkd3d-shader/ir: Run validation after structurization.
2024-09-05 16:29:11 +02:00
Giovanni Mascellani
e935dcb88d
vkd3d-shader/ir: Run validation after lowering switches to selection ladders.
2024-09-05 16:29:02 +02:00
Giovanni Mascellani
4a28433ef5
vkd3d-shader/ir: Run validation after materializing PHI SSAs to TEMPs.
2024-09-05 16:26:52 +02:00
Giovanni Mascellani
fade5dd54c
vkd3d-shader/ir: Run validation after lowering instructions.
2024-09-05 16:25:33 +02:00
Giovanni Mascellani
ffb7284fb6
vkd3d-shader/ir: Do not decide the control flow type on NOPs.
2024-09-05 16:20:39 +02:00
Giovanni Mascellani
829e6f5cd0
vkd3d-shader/ir: Emit a warning instead of an error on validation failures.
2024-09-05 16:20:39 +02:00
Henri Verbeet
03d76f653b
vkd3d-shader/d3dbc: Use VKD3D_SM1_INSTRUCTION_LENGTH_SHIFT instead of D3DSI_INSTLENGTH_SHIFT.
2024-09-05 12:47:43 +02:00
Henri Verbeet
b9693393fd
vkd3d-shader/d3dbc: Store a enum vkd3d_sm1_opcode in struct sm1_instruction.
2024-09-05 12:45:43 +02:00
Nikolay Sivov
0a6bcf5da7
vkd3d-shader/tpf: Fix a typo when adding the SFI0 section.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-04 18:43:41 +02:00
Henri Verbeet
a214e96cf8
vkd3d-shader/tpf: Use enum vkd3d_sm4_data_type in sm4_resource_format().
2024-09-04 18:42:26 +02:00
Henri Verbeet
b61675d0f3
vkd3d-shader/tpf: Use enum vkd3d_shader_component_type in write_sm4_signature().
2024-09-04 18:40:56 +02:00
Shaun Ren
c1babbc8aa
vkd3d-shader/hlsl: Validate hull shader attributes.
2024-09-04 18:30:04 +02:00
Shaun Ren
6c1dc53d15
vkd3d-shader/hlsl: Parse the patchconstantfunc attribute.
2024-09-04 18:30:04 +02:00
Shaun Ren
41cb29c4c8
vkd3d-shader/hlsl: Parse the partitioning attribute.
2024-09-04 18:28:59 +02:00
Shaun Ren
615ffb823b
vkd3d-shader/hlsl: Parse the outputtopology attribute.
2024-09-04 18:28:57 +02:00
Shaun Ren
dae88bab52
vkd3d-shader/hlsl: Parse the outputcontrolpoints attribute.
2024-09-04 18:28:46 +02:00
Shaun Ren
4dfd682446
vkd3d-shader/hlsl: Parse the domain attribute.
2024-09-04 18:21:15 +02:00
Shaun Ren
51e9b05fe5
vkd3d-shader/hlsl: Introduce parse_entry_function_attributes() helper.
2024-09-04 18:18:23 +02:00
Shaun Ren
62fad1c185
tests: Test hull shader function overloads.
2024-09-04 18:18:23 +02:00
Shaun Ren
ed1e74dd62
tests: Test hull shader attributes.
2024-09-04 18:18:23 +02:00
Shaun Ren
73ee5a135a
vkd3d-shader/hlsl: Check for duplicate attributes in function declaration.
2024-09-04 18:18:23 +02:00
Petrichor Park
855b9713b8
vkd3d-shader/hlsl: Implement the sincos() intrinsic.
2024-09-04 18:16:37 +02:00
Petrichor Park
384810b4ba
vkd3d-shader/hlsl: Implement the dst() intrinsic.
2024-09-04 18:08:24 +02:00
Francisco Casas
7ec44bd70b
vkd3d-shader/hlsl: Parse the CompileShader() syntax.
2024-09-04 17:59:34 +02:00
Francisco Casas
45f18a7838
vkd3d-shader/hlsl: Parse the shader 'compile' syntax.
...
The hlsl_ir_compile node is introduced to represent the "compile"
syntax, and later the CompileShader() and ConstructGSWithSO()
constructs.
It basically represents a function call that remembers its arguments
using hlsl_srcs and keeps its own instruction block, which is discarded
when working on non-effect shaders.
For shader compilations it can be asserted that args_count is 1, and
that this argument (and the last node in hlsl_ir_effect_call.instrs)
is a regular hlsl_ir_call pointing to the declaration of the function
to be compiled.
2024-09-04 17:58:56 +02:00
Francisco Casas
379cd9b7b5
vkd3d-shader/hlsl: Save hlsl_ir_swizzles in the vsir_program for SM1.
2024-09-04 17:51:32 +02:00
Francisco Casas
b46eac35c0
vkd3d-shader/hlsl: Save hlsl_ir_stores in the vsir_program for SM1.
2024-09-04 17:51:32 +02:00
Francisco Casas
9aace1ac4e
vkd3d-shader/hlsl: Save hlsl_ir_loads in the vsir_program for SM1.
2024-09-04 17:51:32 +02:00
Francisco Casas
23e3ec84f7
vkd3d-shader/hlsl: Save hlsl_ir_constants in the vsir_program for SM1.
2024-09-04 17:51:30 +02:00
Francisco Casas
a61846c28a
vkd3d-shader/hlsl: Store SM1 sampler dcls on the vsir_program.
2024-09-04 17:47:47 +02:00
Francisco Casas
9a564872c5
vkd3d-shader/hlsl: Store SM1 constant dcls on the vsir_program.
2024-09-04 17:44:46 +02:00
Francisco Casas
7abf3c3a37
vkd3d-shader/hlsl: Introduce hlsl_ir_vsir_instruction_ref.
...
This node type will be deleted once the hlsl->vsir->d3dbc translation is
complete. For now it serves the purpose of allowing to keep both real
hlsl_ir_nodes and vsir_instructions in the hlsl_block, until all the
former can be translated into the latter.
2024-09-04 16:49:00 +02:00
Anna (navi) Figueiredo Gomes
3d8fc1a467
vkd3d-shader/spirv: Break long assembly lines.
...
Avoid overflowing the (Wine) debug log buffer when output lines are too
long, and keep spirv-text output more legible. The output is still valid
SPIR-V asm, as the assembler does not care for which kind of whitespace
is used.
2024-09-03 17:06:20 +02:00
Victor Chiletto
a39227c79c
vkd3d-shader/hlsl: Fold logic AND and logic OR identities.
2024-09-03 15:11:16 +02:00
Elizabeth Figura
d507acb5ac
vkd3d-utils: Do not emit implicit truncation warnings from D3DCompile2VKD3D() before version 42.
2024-09-03 15:07:36 +02:00
Elizabeth Figura
8515fcbc70
vkd3d-utils: Add a D3DCompile2VKD3D() that allows configuring DLL version.
...
This would allow us to use vkd3d-utils directly in Wine [with the exception of
D3D_COMPILE_STANDARD_FILE_INCLUDE, but we can simply pass the ID3DInclude object
to D3DCompile2VKD3D().]
2024-09-03 15:06:29 +02:00
Nikolay Sivov
6d28cc131b
vkd3d-shader/fx: Fix the unpacked size and stride fields of the fx_4_0 types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-02 19:14:59 +02:00
Nikolay Sivov
9673b660d4
vkd3d-shader/fx: Expand BlendState array fields for fx_4_1 as well.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-02 19:14:59 +02:00
Nikolay Sivov
1ed4543007
vkd3d-shader/fx: Only add numeric variables when writing buffers.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-02 19:14:59 +02:00
Nikolay Sivov
ee2da76e6d
vkd3d-shader/fx: Set structure field offsets in bytes.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-09-02 19:14:59 +02:00
Henri Verbeet
7a74e79f2d
vkd3d-shader/d3dbc: Return a vkd3d_decl_usage from hlsl_sm1_usage_from_semantic().
2024-09-02 19:14:01 +02:00
Henri Verbeet
1c01560321
vkd3d-shader/tpf: Return a vkd3d_shader_sysval_semantic from hlsl_sm4_usage_from_semantic().
2024-09-02 19:12:53 +02:00
Anna (navi) Figueiredo Gomes
f5205da8e9
vkd3d-shader/spirv: Pass a vkd3d_shader_descriptor_info1 structure to spirv_compiler_build_descriptor_variable().
2024-09-02 19:10:19 +02:00
Anna (navi) Figueiredo Gomes
672a8f5ce9
vkd3d-shader/spirv: Pass a vkd3d_shader_descriptor_info1 structure to spirv_compiler_emit_sampler_declaration().
2024-09-02 18:59:37 +02:00
Anna (navi) Figueiredo Gomes
22aad955ec
vkd3d-shader/spirv: Pass a vkd3d_shader_descriptor_info1 structure to spirv_compiler_emit_cbv_declaration().
2024-09-02 18:58:29 +02:00
Anna (navi) Figueiredo Gomes
2a52ccf2c6
vkd3d-shader/spirv: Pass a vkd3d_shader_descriptor_info1 structure to spirv_compiler_emit_resource_declaration().
2024-09-02 18:54:19 +02:00
Giovanni Mascellani
527966580e
vkd3d-shader: Dump the converted shader too.
2024-08-29 19:17:07 +02:00
Giovanni Mascellani
1a0d6a4db4
vkd3d-shader: Use a hash to build the filename when dumping shaders.
...
This way the same shader is always dumped to the same path and when
launching the same program over and over we avoid both creating new
copies of the same file each time and overwriting different dumped
shaders.
2024-08-29 19:14:27 +02:00
Henri Verbeet
0e72aba0bc
Release 1.13.
2024-08-29 12:08:46 +02:00
Elizabeth Figura
eb71a1722a
vkd3d-shader: Use an extended version of vkd3d_shader_immediate_constant in vkd3d_shader_parameter1.
...
This is a proposed API change in 946, which won't make it into this release.
The intent is to allow slightly larger constants to be specified in the updated
vkd3d_shader_parameter1 structure. In particular, this is large enough to pass
4-dimensional integer or float vectors inline, which the proposed clip plane
implementation will use, as well as other Direct3D FFP parameters.
We could also simply add vkd3d_shader_immediate_constant1 as a separate union
member in vkd3d_shader_parameter1, but this API is a bit cleaner and simpler.
2024-08-28 12:08:37 +02:00
Henri Verbeet
f318e565f2
vkd3d-shader/spirv: Decorate non-array descriptor variables as well.
...
Commits 343c7942e1
and
94c74d2c00
moved applying the NonReadable
and Coherent decorations from spirv_compiler_emit_resource_declaration()
to spirv_compiler_build_descriptor_variable(), but unfortunately missed
the non-array path in the latter function.
The missing NonReadable decoration causes segmentation faults in
rasteriser-ordered-views.shader_test (among others) on my Intel SKL GT2
setup in particular.
2024-08-26 11:24:01 +02:00
Conor McCarthy
80e607e3e7
vkd3d: Free descriptor range information on error paths in d3d12_root_signature_info_from_desc(). (Valgrind)
...
Fixes memory leaks in test_create_root_signature().
2024-08-26 11:20:54 +02:00
Henri Verbeet
32dc7ff43b
build: Actually run bitwise-assignment.shader_test.
...
Also fix the order of a couple of tests while we're touching this.
2024-08-22 16:32:40 +02:00
Francisco Casas
f5ed0d9efd
tests/test-driver: Avoid double space when printing details.
...
Save screen real estate.
2024-08-22 16:22:29 +02:00
Francisco Casas
b701f8d393
tests/shader_runner: Explicitly require UAV load support.
...
The used UAV formats are explicitly added in the [require] section of
every test that uses them.
Some of these tests were failing on Intel UHD graphics 770 because of
missing support for additional UAV load types, explicitly requiring
these formats allows these tests to be skipped.
2024-08-22 16:22:18 +02:00
Francisco Casas
fb153bf5d4
tests/shader_runner: Don't skip shader compilation on missing caps.
...
Currently we are skipping compilation tests ([* shader] blocks) on
missing capabilities. This is not really necessary and it is useful to
test shader compilation even on machines that can't run these tests.
So, this commit moves the checks to the [test] blocks, skipping them
entirely when caps are not met.
To make the effects of enum test_action values more explicit, these
are renamed to TEST_ACTION_SKIP_COMPILATION and
TEST_ACTION_SKIP_EXECUTION.
2024-08-22 16:01:37 +02:00
Francisco Casas
19c23ca6f2
tests/shader_runner: Replace spaces with dashes in format names.
...
Probably good if we want to allow specifying several formats in the same
line, separated by spaces.
While at it, rename "r32g32 int" to "r32g32-sint".
2024-08-22 16:01:37 +02:00
Francisco Casas
cec62c54ad
tests/shader_runner: Move parse_format() up.
2024-08-22 16:01:32 +02:00
Francisco Casas
164076d176
tests/shader_runner: Require explicit formats for UAV resources.
...
The current default is r32g32b32a32 but it requires special support
which is not available on all GPUs, so it is not a very convenient
default.
Instead of changing the default making it different from RTV resoures,
the format is required to always be explicit for UAVs.
The exceptions are counter_buffer and buffers with "stride", which don't
require a format because it is already implied.
2024-08-22 16:01:26 +02:00
Conor McCarthy
738ecc9eb1
vkd3d-shader/spirv: Free the spirv parameter info.
2024-08-20 21:27:58 +02:00
Francisco Casas
56cd64ccba
tests: Test shader compilation with default values.
2024-08-20 21:26:26 +02:00
Francisco Casas
9fa8921b50
tests: Test shader compilation within braces.
2024-08-20 21:26:26 +02:00
Francisco Casas
1d24587405
tests: Test compile syntax on effects.
2024-08-20 21:26:26 +02:00
Francisco Casas
e9260bba3a
tests: Test shader compilation within function definitions.
2024-08-20 21:26:26 +02:00
Francisco Casas
7363fd2816
tests: Add additional tests for function calls in state block rhs.
2024-08-20 21:26:26 +02:00
Francisco Casas
becdcec147
vkd3d-shader: Avoid div by zero on assert in vkd3d_calloc() (ubsan).
2024-08-20 21:26:26 +02:00
Anna (navi) Figueiredo Gomes
94c74d2c00
vkd3d-shader/spirv: Avoid decorating variables multiple times with Coherent.
2024-08-20 21:25:15 +02:00
Anna (navi) Figueiredo Gomes
a47c23fa1f
vkd3d-shader/spirv: Use unique SPIR-V variables for descriptors where visibility differs.
...
In the case two uav descriptors are mapped to the same variable, and one is
read from while the other is not, the variable would get the NonReadable
decorator, while being read from later.
2024-08-20 21:23:31 +02:00
Anna (navi) Figueiredo Gomes
343c7942e1
vkd3d-shader/spirv: Avoid decorating variables multiple times with NonReadable.
...
The existing code reuses the same SPIR-V variable for all descriptors mapped to
the same Vulkan binding, and applies the NonReadable decoration based on the
VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_READ only. This potentially causes the
decoration to be applied twice, should two non-read descriptors be mapped to
the same variable, which isn't allowed in SPIR-V, and the validator complains.
2024-08-20 21:20:33 +02:00
Nikolay Sivov
c8cc1b1a24
vkd3d-shader/fx: Fix the matrix type class for fx_2_0.
...
CTAB type correctly reflects matrix majority, unlike effects
type data that does not respond to majority modifiers at all.
It doesn't transpose default values either.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-19 14:21:59 +02:00
Nikolay Sivov
b9e894f232
include: Fix a few typos in the IDL files.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-19 14:20:28 +02:00
Nikolay Sivov
f0a2e4bc25
vkd3d-shader/glsl: Fix a typo in a few messages.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-19 14:20:21 +02:00
Nikolay Sivov
d1b8a7e745
vkd3d: Fix a few typos in the comments.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-19 14:17:41 +02:00
Petrichor Park
4467c655f0
vkd3d-shader/hlsl: Factor out add_binary_expr() and use it for assignment operators.
...
This fixes a lot of internal compiler errors with assignment operators,
especially bitwise ones. The bitwise-assignment test has the motivating
examples.
2024-08-19 14:15:43 +02:00
Nikolay Sivov
ebc039d128
vkd3d-shader/fx: Resolve NULL values for SamplerState.Texture field.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-15 17:53:46 +02:00
Nikolay Sivov
873b182021
vkd3d-shader/fx: Support NULL constants for object fields.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-15 17:53:46 +02:00
Nikolay Sivov
c3075d6fb4
vkd3d-shader/hlsl: Adjust NULL type properties to make it usable in transformations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-15 17:53:46 +02:00
Nikolay Sivov
aa0ea548e4
vkd3d-shader/fx: Handle SetPixelShader() and SetVertexShader().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-15 17:53:46 +02:00
Nikolay Sivov
2c533e494a
vkd3d-shader/fx: Handle SetBlendState().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-15 17:53:46 +02:00
Anna (navi) Figueiredo Gomes
16e9872718
vkd3d: Use D3D12_SHADER_VISIBILITY_ALL for 32-bit root constants when using vk_heaps.
...
The existing code sets "stageFlags" to VK_SHADER_STAGE_ALL when
"use_vk_heaps" is true, but doesn't adjust the visibility. This
potentially violates the "Any two elements of pPushConstantRanges must
not include the same stage in stageFlags" constraint, and causes the
validation layers to complain accordingly.
2024-08-15 17:53:46 +02:00
Anna (navi) Figueiredo Gomes
6226f533af
Add a .editorconfig file.
2024-08-14 22:05:59 +02:00
Nikolay Sivov
60ce81112b
vkd3d-shader/fx: Support string annotations for fx_4+.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-14 22:00:35 +02:00
Nikolay Sivov
d4ae844bb6
vkd3d-shader/fx: Enable writing string objects for fx_4+.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-14 22:00:35 +02:00
Nikolay Sivov
89be723ad7
vkd3d-shader/hlsl: Treat "string" type name as case-insensitive.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-14 22:00:35 +02:00
Nikolay Sivov
1ce68cee2c
vkd3d-shader/hlsl: Tokenize 'String' the same as 'string'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-14 22:00:35 +02:00
Francisco Casas
412f91a14c
vkd3d-shader/hlsl: Always work with the extern resource's component type.
...
We need to distinguish between the data type of a resource and the data
type of its components. These are usually the same except for 4.0
profiles where an array (or multi-dimensional array) of resources is
still considered a single resource, so it is possible for it to hold
more than one component.
In the latter case, we often need to access the type of a single
component (all components have the same type) instead of the type of the
whole array which often doesn't contain the required information, such
as sampler dimension.
This patch replaces the extern_resource.data_type field with the
extern_resource.component_type field, which points to the type of a
single component in the resource. Using it relieves many other code
paths from considering the possibility of the resource being an array.
This fixes runtime errors reported by UBSan, such as this:
vkd3d/libs/vkd3d-shader/tpf.c:6075:87: runtime error: load of value 7, which is not a valid value for type '_Bool'
when trying to compile shaders that contain UAV arrays on 4.0 profiles.
Before this commit, tpf.c accesses the
hlsl_type->e.resource.rasteriser_ordered
field, but on 4.0 and 4.1 profiles these code paths can also be reached
by UAV arrays which are HLSL_CLASS_ARRAY and this field is not supposed
to be accessed.
By coincidence, the value of hlsl_type->e.array.elements_count was being
read because these fields have the same offset in the hlsl_type.e union.
2024-08-14 21:57:21 +02:00
Henri Verbeet
9cf479d4bb
vkd3d: Do not include assert.h.
2024-08-13 21:20:28 +02:00
Henri Verbeet
114578fc8a
vkd3d-shader/fx: Replace assert() with VKD3D_ASSERT().
2024-08-13 21:20:28 +02:00
Henri Verbeet
cd9879f237
vkd3d-common: Replace assert() with VKD3D_ASSERT().
2024-08-13 21:20:28 +02:00
Francisco Casas
355d4c4a86
vkd3d-shader/hlsl: Skip writing string default values.
...
This causes a crash in the native compiler, but can only happen in
ps_5_0 were it is possible to declare structs that are both used in the
shader and contain strings.
struct
{
float a;
string b;
} apple = {1, "foobar"};
float4 main() : sv_target
{
return apple.a;
}
In our case, hlsl_type_get_component_offset() triggered an assertion
failure because it does not expect the string type. So this is replaced
by an hlsl_error().
2024-08-13 21:19:04 +02:00
Francisco Casas
094e298c1c
vkd3d-shader/hlsl: Parse string default values.
2024-08-13 21:19:01 +02:00
Francisco Casas
f8108a4753
tests: Add additional string tests.
2024-08-13 21:16:46 +02:00
Nikolay Sivov
e0b5fe1288
vkd3d-shader/hlsl: Add a test for assigning to DSV and RTV variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-13 21:11:48 +02:00
Nikolay Sivov
b4d957f848
vkd3d-shader/hlsl: Handle NULL constants.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-13 21:10:45 +02:00
Nikolay Sivov
d945d5e78c
vkd3d-shader/hlsl: Check MS texture declaration without sample count only for used variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-13 21:10:29 +02:00
Anna (navi) Figueiredo Gomes
80b2a2eb55
vkd3d-shader/ir: Periodically flush buffers when tracing blocks.
...
Avoids overflowing the output buffer for the trace in cases where the
output is too long, which raises an exception.
2024-08-12 14:19:13 +02:00
Nikolay Sivov
b0ca3627bf
vkd3d-shader/fx: Turn assignments to arrays to element assignments for certain states.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
25e1c3e374
vkd3d-shader/fx: Explicitly handle bool values in state entries.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
c81223d086
vkd3d-shader/fx: Handle states of a BlendState object.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
2affc8f5c5
vkd3d-shader/fx: Run full set of constants passes on state block entries values.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
f1e65ecc83
vkd3d-shader/fx: Enable writing BlendState variables.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
91e88fac2e
vkd3d-shader/hlsl: Add parser support for BlendState type.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
1be0d99b76
vkd3d-shader/fx: Check destination array index when checking for duplicate state entries.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
b23874dad6
vkd3d-shader/hlsl: Add parser support for GeometryShader type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-08 23:42:37 +02:00
Nikolay Sivov
de48960b33
vkd3d-shader/fx: Add support for the OMSetRenderTargets() state.
2024-08-08 23:42:37 +02:00
Nikolay Sivov
c565a60b9e
vkd3d-shader/fx: Add an array size field to the states description table.
2024-08-08 23:42:37 +02:00
Nikolay Sivov
d55a709992
vkd3d-shader/fx: Use more descriptive names for FX-specific types.
2024-08-08 23:42:37 +02:00
Nikolay Sivov
9fb23b9090
vkd3d-shader/fx: Handle "Texture" field of the sampler state objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-08-08 23:42:37 +02:00
Giovanni Mascellani
8b6ab9627d
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in vkd3d_shader_private.h.
2024-08-08 23:39:23 +02:00
Giovanni Mascellani
27bceec965
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in vkd3d_shader_main.c.
2024-08-08 23:39:23 +02:00
Giovanni Mascellani
0294aa62f3
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in tpf.c.
2024-08-08 23:38:02 +02:00
Giovanni Mascellani
d5126b4d98
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in spirv.c.
2024-08-08 23:36:23 +02:00
Victor Chiletto
8c3a5e5458
vkd3d-shader/hlsl: Implement f16tof32 intrinsic.
2024-08-08 23:35:02 +02:00
Victor Chiletto
693e89c74e
vkd3d-shader/hlsl: Push a new scope when compiling internal functions.
...
This allows for typedef usage without interfering with user code.
Thanks Zeb for the suggestion.
2024-08-08 23:35:02 +02:00
Francisco Casas
016be7e591
vkd3d-shader/hlsl: Lower non-constant row_major matrix loads for SM1.
2024-08-08 23:33:33 +02:00
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
e0cfd8f86a
tests: Add additional non-constant array indexing tests.
2024-08-08 23:28:31 +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
51abec8c99
tests: Introduce VKD3D_TEST_DETAILED for the test driver.
...
Useful to know which tests on which backends were skipped.
2024-08-07 15:54:36 +02:00
Francisco Casas
9dec7403d9
tests/shader-runner: Add missing trace for wave_ops caps.
2024-08-07 15:54:36 +02:00
Francisco Casas
2efc79bb81
tests: Report tests skipped because of missing capabilities.
2024-08-07 15:54:36 +02:00
Francisco Casas
84676c378f
tests: Add missing double precission require directives.
...
Otherwise these tests fail on Intel UHD Graphics 770.
2024-08-07 15:54:36 +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
Francisco Casas
4b2e847d11
tests: Test string escape sequences.
2024-08-07 15:45:24 +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
9f4a568868
tests: Mark a couple of tests as working on recent NVIDIA GPUs.
...
I don't know the exact version that fixed this todo, but on the
same hardware this test was failing a couple of years ago, so
I presume something was fixed at some point. I am writing my
current driver version, but a lower one might turn out to be
sufficient.
2024-07-31 20:50:58 +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
507cc2976f
tests: Test register conflicts in a root signature.
2024-07-29 13:19:10 +02:00
Giovanni Mascellani
51b65688e1
ci: Abort on assertions on the CI.
2024-07-29 13:17:19 +02:00
Giovanni Mascellani
fb55c2b227
vkd3d: Emit an ERR() when reaching unreachable code.
...
This way the ERR() configuration is reused for unreachable code.
2024-07-29 13:17:19 +02:00
Giovanni Mascellani
4ada72a397
vkd3d: Allow aborting on ERR().
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
Giovanni Mascellani
021a7f030a
vkd3d: Allow disabling ERR() by defining VKD3D_NO_ERROR_MESSAGES.
2024-07-29 13:17:19 +02:00
Giovanni Mascellani
60ecf8c12b
vkd3d: Disable FIXME_ONCE() when VKD3D_NO_DEBUG_MESSAGES is defined.
...
Similarly to FIXME().
2024-07-29 13:17:19 +02:00
Giovanni Mascellani
4c1cc6101f
vkd3d: Disable WARN_ON() when VKD3D_NO_DEBUG_MESSAGES is defined.
...
Similarly to WARN().
2024-07-29 13:17:19 +02:00
Elizabeth Figura
947b937a1a
tests: Test shade mode.
2024-07-24 16:08:10 +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
7eb63a7c0d
vkd3d: Document how to install "Graphics Tools" to use the Agility SDK.
...
This is a required step, otherwise the debug layer will not work.
2024-07-17 15:54:31 +02:00
Giovanni Mascellani
7e557420b1
tests: Terminate the Agility SDK path with a slash.
...
That's what the documentation recommends. It used to work for me without
the slash, but maybe they changed something in recent versions.
2024-07-17 15:54:31 +02:00
Giovanni Mascellani
e4e7368c1c
tests: Pad the constant buffer in test_update_compute_descriptor_tables() to 256 bytes.
...
The D3D12 debug layer signals an error otherwise.
2024-07-17 15:53:31 +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
3e25356abb
tests: Add a test for clearing a large buffer UAV.
...
Large buffers can exceed the maximum workgroup X count.
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
5a53b73995
tests: Test alpha test.
2024-07-11 17:02:53 +02:00
Elizabeth Figura
7e868f1f4b
tests: Factor out a set_default_target() helper.
2024-07-11 17:02:45 +02:00
Elizabeth Figura
ded0733ff8
tests: Offset the viewport by 0.5 when running d3dbc shaders.
2024-07-11 17:02:40 +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
9e59e57cb3
tests: Add a test for the vkd3d_shader_parameter APIs.
2024-07-11 16:58:56 +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
3dff608bf8
include: Document shader parameters.
2024-07-11 16:48:09 +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
Petrichor Park
3a49852075
vkd3d-shader/hlsl: Implement tests for the rcp() intrinsic.
2024-07-11 16:43:48 +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
85fe4c421b
tests: Define WIDL macros in utils.h.
...
This way other headers including utils.h, like d3d12_test_utils.h,
are self-contained.
2024-07-11 00:34:58 +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
Elizabeth Figura
a5a75d45d3
tests: Implement multisampling in the GL renderer.
2024-07-11 00:33:57 +02:00
Elizabeth Figura
737967604e
tests: Implement multisampling in the Vulkan renderer.
2024-07-11 00:33:57 +02:00
Elizabeth Figura
fe21318b5f
tests/shader_runner: Factor out a resource_desc structure.
2024-07-11 00:33:57 +02:00
Elizabeth Figura
fa570ee1f3
tests/shader_runner: Use resource->width instead of resource->size for buffer width.
2024-07-11 00:33:57 +02:00
Victor Chiletto
76ae871f5b
tests/hlsl: Test loop unrolling edge cases.
2024-07-11 00:32:53 +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
900433e371
tests/hlsl: Add a test for dynamically indexed multisampled texture loads.
2024-07-11 00:31:06 +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
af7c4010f4
tests: Test whether valid state block function names are case-sensitive.
2024-07-09 20:37:20 +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
f15d8dc9e9
tests: Separate the valid stateblock function names test from the string arg test.
...
This test is important because it checks that all the valid names for
stateblock functions with the expected amount of arguments are tested,
but, after parsing state block function calls, the only reason it is
not passing is that we don't parse strings yet.
2024-07-09 20:34:17 +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
Giovanni Mascellani
4f67675a51
tests: Support using the Agility SDK in the crosstests.
2024-07-09 16:57:03 +02:00
Giovanni Mascellani
c49daadce1
tests: Enable the d3d12 debug layer message callbacks.
2024-07-09 15:24:18 +02:00
Giovanni Mascellani
e3ddb76a3e
tests: Improve feedback when enabling d3d12 debug layers.
2024-07-09 14:55:55 +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
Nikolay Sivov
c8720f1229
tests: Add some fx profiles tests for structure types containing objects.
...
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
Giovanni Mascellani
3ff8130566
tests: Check that depth/stencil formats are supported before using them.
...
This fixes a crash with the Qualcomm proprietary driver on an Adreno 540
GPU on my OnePlus 5 phone.
2024-07-08 18:49:28 +02:00
Giovanni Mascellani
9f056f3989
tests: Transition resources to PIXEL_SHADER_RESOURCE in test_sample_c_lz().
2024-07-08 18:49:28 +02:00
Giovanni Mascellani
fe787cf77f
tests: Skip sampling cube textures on Qualcomm.
...
They seem to always crash on the Adreno 540 on my OnePlus 5 phone with the
Qualcomm proprietary driver.
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
Nikolay Sivov
0a344bd3c9
vkd3d-shader/fx: Add missing fields for structure types on fx_5_0.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:24:46 +02:00
Nikolay Sivov
8738e4662e
vkd3d-shader/fx: Preserve parsing order of initializer components.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:24:46 +02:00
Nikolay Sivov
c97c652ff0
vkd3d-shader/fx: Fix packed size for fx_4+ types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:24:46 +02:00
Nikolay Sivov
856686b2a2
vkd3d-shader/fx: Write default numeric values.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:24:46 +02:00
Nikolay Sivov
aea36be94c
vkd3d-shader/fx: Fix structure type data written for fx_4.
...
Strings and field types are written to the same unstructured area
as structure type itself, so it has to be done in two passes.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:24:46 +02:00
Nikolay Sivov
2176294df8
vkd3d-shader/hlsl: Implement tex*grad() functions.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:23:38 +02:00
Nikolay Sivov
4ff288bd32
vkd3d-shader: Implement tex*() functions variants with gradient arguments.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:23:38 +02:00
Elizabeth Figura
4cd2dd50f9
vkd3d-shader/hlsl: Separate an "array" rule.
2024-07-08 18:22:39 +02:00
Nikolay Sivov
94130c2394
vkd3d-shader/fx: Add support for writing RasterizerState objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:12:03 +02:00
Nikolay Sivov
f03cb7e911
vkd3d-shader/hlsl: Add RasterizerState type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:12:03 +02:00
Nikolay Sivov
12947aa50d
vkd3d-shader/fx: Add support for writing DepthStencilState objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:12:03 +02:00
Nikolay Sivov
1008c49ce6
vkd3d-shader/fx: Cast state block field values to target type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:12:03 +02:00
Francisco Casas
597e55691a
vkd3d-shader/hlsl: Only error out on bind_count register reservation overlaps for SM1.
...
While on SM1 a register reservation reserves the whole size in
registers of the variable's data type, overlapping conflicts are only
checked up to the bind_count (used size) for each variable.
2024-07-08 18:12:03 +02:00
Francisco Casas
2179c79c91
tests: Test register reservations on unused variables.
2024-07-08 18:12:03 +02:00
Nikolay Sivov
48ff7de8ef
vkd3d-shader/hlsl: Add support for ConstantBuffer<> type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-07-08 18:12:03 +02:00
Victor Chiletto
44725a651b
tests: Add reflection tests for register expressions.
2024-07-03 17:09:16 -03:00
Victor Chiletto
abbcf0461f
vkd3d-shader/hlsl: Reserve register slots for unused buffers.
2024-07-03 17:09:16 -03:00
Victor Chiletto
da36a447b8
vkd3d-shader/hlsl: Validate cbuffer register allocations.
2024-07-03 17:09:16 -03:00
Victor Chiletto
27414ef928
vkd3d-shader/hlsl: Do not immediately fail parsing for malformed 'b' register reservations.
...
This is a fxc quirk. In most cases, this throws an error, but for global
variables it's completely ignored.
2024-07-03 17:09:16 -03:00
Victor Chiletto
b5b3c8b9ff
vkd3d-shader/hlsl: Ignore bracket offsets for 'b' register types prior to SM 5.1.
...
This is a fxc quirk that was fixed for SM >= 5.1 only.
2024-07-03 14:34:45 -03:00
Victor Chiletto
8fb3b604bf
vkd3d-shader/hlsl: Pass a pointer to struct hlsl_reg_reservation in parse_reservation_index.
...
Instead of passing the struct components individually.
2024-07-03 14:05:58 -03:00
Victor Chiletto
e13eb64d4c
vkd3d-shader/hlsl: Support expressions as register offsets.
2024-07-03 14:05:58 -03:00
Victor Chiletto
d11c777092
tests: Add more register reservations tests.
2024-07-03 14:05:58 -03:00
Yuxuan Shui
ccb6150aab
vkd3d-shader/hlsl: Implement storing to a swizzled matrix.
2024-06-20 12:39:46 +02:00
Elizabeth Figura
acc9d79fbb
vkd3d-shader/hlsl: Only allocate the aligned size for uniforms.
2024-06-18 13:19:44 -05:00
Elizabeth Figura
7fe581203b
vkd3d-shader/hlsl: Respect the coords writemask in write_sm1_resource_load().
...
Spotted by Francisco Casas.
2024-06-18 13:19:44 -05:00
Elizabeth Figura
8d946f3c20
tests: Add another combined sampler test.
...
Shader provided by Francisco Casas.
2024-06-18 13:01:31 -05:00
Elizabeth Figura
669e85171e
tests: Run combined-samplers.shader_test on sm1 as well.
...
Now that we have if() this is easier.
2024-06-18 13:00:59 -05:00
Giovanni Mascellani
46a1b66df7
ci: Assume an Apple Silicon-based environment for the macOS CI job.
...
The previous Intel-based macOS runner was replaced with another one
running as a virtual machine on top of an Apple Silicon host.
Since the current macOS runner is not yet able to deal with
different exit codes, we temporarily allow failure unconditionally.
This will be reverted as soon as the runner issue is fixed.
2024-06-17 12:32:33 +02:00
Elizabeth Figura
d3ba810c98
tests: Stop probing all pixels when drawing a uniform colour.
...
This is simply unnecessary and wastes time.
As part of this, simply remove the "all" directive. Only for a couple of tests
is it even potentially interesting to validate all pixels (e.g.
nointerpolation.shader_test), and for those "all" is replaced with an explicit
(0, 0, 640, 480) rect.
In all other cases we just probe (0, 0).
2024-06-13 23:55:31 +02:00
Stefan Dösinger
021eb28584
include: Get rid of the RB_FOR_EACH* macros.
...
They're largely unused, and RB_FOR_EACH_ENTRY_DESTRUCTOR is broken
because it uses WINE_RB_ENTRY_VALUE which doesn't exist in vkd3d.
2024-06-13 23:44:43 +02:00
Henri Verbeet
90f26759b5
vkd3d: Always use UINT views to clear UAVs with integer formats.
...
We would previously try to use float pipelines for SINT formats.
2024-06-13 23:26:35 +02:00
Giovanni Mascellani
a54187f3c9
vkd3d: Do not synchronize with the geometry shader stage if it's not enabled.
2024-06-13 23:24:22 +02:00
Giovanni Mascellani
a1a07de8ca
vkd3d: Enable VK_KHR_portability_subset if available.
...
We don't check it, but at least the validation layer does not complain
when using MoltenVK.
2024-06-13 23:24:22 +02:00
Giovanni Mascellani
3254eff328
vkd3d: Do not request VK_EXT_debug_marker if debug is disabled.
...
Because it requires VK_EXT_debug_report.
2024-06-13 23:24:22 +02:00
Giovanni Mascellani
3ad4d984ad
tests: Mark some root signature unbounded range failures as todo on MoltenVK.
2024-06-13 23:24:22 +02:00
Yuxuan Shui
8a459f5903
tests: Pass the correct buffer size to vsnprintf() in vkd3d_test_push_context().
2024-06-12 19:04:22 +02:00
Nikolay Sivov
222c52380b
vkd3d-shader/fx: Fix variable buffer offset value.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-06-12 19:02:20 +02:00
Nikolay Sivov
402dc94259
vkd3d-shader/fx: Set EXPLICIT_BIND_POINT flag for packoffset() reservations as well.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-06-12 19:02:20 +02:00
Conor McCarthy
da1d96f708
tests/shader-runner: Create a new runner object for the shader model 6 tests.
...
If cleaning up the old runner is not completed, descriptors for
destroyed resources may remain on the heap.
2024-06-11 15:56:43 +02:00
Conor McCarthy
7534b88a15
tests/shader-runner: Set the correct flag and format for raw UAVs.
2024-06-11 15:55:48 +02:00
Elizabeth Figura
2f88442d7d
vkd3d-shader/hlsl: Always initialize $$ when parsing modifiers from an arbitrary string.
...
This avoids spurious errors like "row_major and column_major are mutually
exclusive" when an invalid modifier is used.
Fixes: cf7c05f431
2024-06-11 15:54:10 +02:00
Nikolay Sivov
72ddea6030
vkd3d-shader/fx: Use original full semantic name.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-06-11 15:53:19 +02:00
Nikolay Sivov
1124ea46ee
vkd3d-shader/hlsl: Store original semantic name.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-06-11 15:53:19 +02:00
Conor McCarthy
47d077e5ce
vkd3d: Interpret a null vertex buffer 'views' pointer as a null buffer.
2024-06-11 15:52:28 +02:00
Conor McCarthy
c3ea43b619
tests/d3d12: Test a null vertex buffer 'views' pointer on multiple slots.
2024-06-11 15:52:28 +02:00
Conor McCarthy
589ed1e358
vkd3d: Allow block compressed textures to have unaligned width and height.
2024-06-11 15:51:34 +02:00
Conor McCarthy
9244f2b536
tests/d3d12: Check for unaligned block texture support in test_create_committed_resource().
2024-06-11 15:51:33 +02:00
Nikolay Sivov
ba18035260
vkd3d-shader/d3dbc: Write load instruction for tex2Dbias().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-06-11 15:50:34 +02:00
Nikolay Sivov
a289393fe7
vkd3d-shader/asm: Output 'bias' flag for 'texld'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-06-11 15:50:34 +02:00
Nikolay Sivov
ccbe36fb8d
vkd3d-shader/hlsl: Implement tex2Dbias().
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56701
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-06-11 15:50:34 +02:00
Elizabeth Figura
f0cd35b40d
tests: Add reflection tests for register space.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
33e5553158
vkd3d-shader/hlsl: Write SM5.1 binding reflection data.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
bb41947fc6
vkd3d-shader: Write SM5.1 register spaces.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
4355e6ca69
vkd3d-shader/hlsl: Allocate register spaces for objects.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
7b61b0219e
vkd3d-shader/hlsl: Allocate register spaces for constant buffers.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
28a5e23814
vkd3d-shader: Write SM5.1 register indices.
...
Separate ID and index. Allocate IDs for all external resources (but ignore them
for shader models other than 5).
2024-06-11 15:49:30 +02:00
Elizabeth Figura
19a13740de
vkd3d-shader/hlsl: Put constant buffers into the extern_resources struct.
...
Mostly to get the same sorting logic.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
558320b52f
vkd3d-shader/hlsl: Add a hlsl_fixme() for 5.1 resource arrays.
...
These are a bit trickier to handle, and need more tests.
2024-06-11 15:49:30 +02:00
Conor McCarthy
9b070edf01
vkd3d-shader/spirv: Implement the QUAD_READ_LANE_AT instruction.
2024-06-11 15:48:21 +02:00
Conor McCarthy
0b8b5b2d0f
vkd3d-shader/dxil: Implement DX intrinsic QuadReadLaneAt.
2024-06-11 15:48:21 +02:00
Conor McCarthy
c298493e4f
vkd3d-shader/spirv: Implement the QUAD_READ_ACROSS_* instructions.
2024-06-11 15:48:21 +02:00
Conor McCarthy
8a15642f45
vkd3d-shader/dxil: Implement DX intrinsic QuadOp.
2024-06-11 15:48:21 +02:00
Francisco Casas
f5bfa728eb
vkd3d-shader/hlsl: Reorder default values for matrices for SM4.
...
Default value initializers behave differently than regular initializers
for matrices on SM4 profiles.
While regular initializers assign the rhs elements in reading-order
(completing one row at the time), default initializers assing the rhs
elements in Chinese reading-order (completing one column at the time).
So after lowering a default value to a constant, the index of the
component to which this default value is stored is computed to meet
this expectation. This can be done because the default values.
For reference, compiling this shader:
row_major int2x3 m = {1, 2, 3, 4, 5, 6};
float4 main() : sv_target
{
return float4(m[0][0], 99, 99, 99);
}
gives the following buffer definition:
// cbuffer $Globals
// {
//
// row_major int2x3 m; // Offset: 0 Size: 28
// = 0x00000001 0x00000003 0x00000005 0x00000000
// 0x00000002 0x00000004 0x00000006
//
// }
Given that the matrix is column-major, m's default value is actually
{{1, 3, 5}, {2, 4, 6}}, unlike the {{1, 2, 3}, {4, 5, 6}} one would
expect in a regular initializer.
SM1 profiles assign the elements in regular reading order.
2024-06-11 15:46:40 +02:00
Francisco Casas
ab01fedc5d
vkd3d-shader/hlsl: Fix numeric register offset for matrix components.
2024-06-11 15:46:40 +02:00
Francisco Casas
ade3daa311
tests: Test matrix default value initializers.
2024-06-11 15:46:40 +02:00
Francisco Casas
affadf319c
vkd3d-shader/d3dbc: Write default values for SM1.
2024-06-11 15:46:40 +02:00
Francisco Casas
253c994155
vkd3d-shader/tpf: Write default values for SM4.
2024-06-11 15:46:40 +02:00
Francisco Casas
b44a25ce19
tests: Test default values using reflection.
2024-06-11 15:46:40 +02:00
Francisco Casas
099a64aeb2
vkd3d-shader/hlsl: Initialize default values with braceless initializers.
...
It is hard to initialize default values on add_assignment() and calling
add_assignment() for initializers is not really necessary: the only
thing we need from it the implicit cast.
2024-06-11 15:46:40 +02:00
Francisco Casas
e8dbc36bd2
vkd3d-shader/hlsl: Record default values for uniforms and constant buffers.
2024-06-11 15:46:40 +02:00
Henri Verbeet
1fe7a6581b
vkd3d-shader/ir: Rename the "handler_idx" field of struct vkd3d_shader_instruction to "opcode".
2024-05-30 19:57:01 +02:00
Nikolay Sivov
5265fbb789
vkd3d-shader/fx: Do not write shared buffers block when not compiling as a child effect.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-30 19:56:50 +02:00
Nikolay Sivov
727aacca18
tests: Add a few tests for the NULL value.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-30 19:56:44 +02:00
Nikolay Sivov
163aaf9729
tests: Add some basic tests for ConstantBuffer type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-30 19:56:39 +02:00
Nikolay Sivov
ea177a7750
vkd3d-shader/hlsl: Handle "unsigned int" type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-30 19:56:29 +02:00
Henri Verbeet
36c123c005
Release 1.12.
2024-05-29 22:05:28 +02:00
Henri Verbeet
9693271dcf
tests: Rename VKD3D_TESTS_SKIP_DXC to VKD3D_TEST_SKIP_DXC.
...
For consistency with the other VKD3D_TEST_* environment variables.
2024-05-27 21:08:14 +02:00
Henri Verbeet
695ef722e8
build: Fix the order of a couple of shader runner tests.
2024-05-27 21:08:06 +02:00
Henri Verbeet
b363fdbb21
include: Add a \since tag for VKD3D_FALSE.
2024-05-27 21:08:00 +02:00
Henri Verbeet
007233a016
include: Document the additional HLSL transformations supported by vkd3d_shader_compile().
2024-05-27 21:08:00 +02:00
Nikolay Sivov
308d735923
vkd3d-shader/ir: Set texture register dimension as VEC4 when normalising combined samplers.
...
Thanks, Giovanni.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-27 21:07:51 +02:00
Giovanni Mascellani
9a3fa67c1f
tests: Skip a test that freezes the GPU on NVIDIA.
2024-05-27 21:07:43 +02:00
Conor McCarthy
ae25c80498
vkd3d: Check for mutable descriptor set allocation failure in d3d12_descriptor_heap_create_descriptor_set().
2024-05-27 21:07:30 +02:00
Nikolay Sivov
f090d1e80d
vkd3d-shader: Remove explicit newlines from hlsl_fixme() messages.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-23 23:12:10 +02:00
Henri Verbeet
b5ac6ac636
vkd3d-shader: Use a separate allocation for the "semantic_name" field of shader signature elements.
...
For tpf shader this would previously be a pointer into the original
shader code, and for d3dbc shaders we'd use static strings.
Unfortunately the dxil parser creates shader signatures where these
are pointers to metadata strings, and those go away when we call
sm6_parser_cleanup().
We could conceivably store a flag in the shader signature to indicate
whether shader_signature_cleanup()/vkd3d_shader_free_shader_signature()
should free the "semantic_name" field. It'd be a little ugly, and seems
unlikely to be worth it, but I'd be willing to be convinced.
2024-05-23 23:12:06 +02:00
Victor Chiletto
105ef28273
vkd3d-shader/preproc: Treat CR as whitespace.
2024-05-23 23:11:58 +02:00
Giovanni Mascellani
a64426edf9
tests: Check device support for all the 16 bit image formats.
...
Otherwise the test crash on llvmpipe.
2024-05-22 22:15:32 +02:00
Giovanni Mascellani
dfa3ee25e0
vkd3d: Move the full stops before the newline.
2024-05-22 22:15:27 +02:00
Victor Chiletto
fa5708d3b5
vkd3d-shader/hlsl: Fix XOR assign operator lexing.
2024-05-22 22:15:20 +02:00
Victor Chiletto
d8d2414132
tests/hlsl: Add a test for the XOR assign operator.
2024-05-22 22:15:19 +02:00
Conor McCarthy
7d3c286e9b
tests/d3d12: Add a separate null 'views' pointer test in test_null_vbv().
2024-05-22 22:15:14 +02:00
Conor McCarthy
fd416b492c
tests/d3d12: Use get_cpu_sampler_handle() for the sampler heap in test_unbounded_samplers().
2024-05-22 22:15:12 +02:00
Conor McCarthy
cc1877dadb
tests/d3d12: Ensure stream output BufferFilledSizeLocation is always valid.
2024-05-22 22:15:11 +02:00
Conor McCarthy
42d369d595
tests/d3d12: Check UnalignedBlockTexturesSupported when testing GetCopyableFootprints().
2024-05-22 22:15:09 +02:00
Conor McCarthy
0daba96025
tests/d3d12: Test format D32_FLOAT_S8X24_UINT in test_get_copyable_footprints().
2024-05-22 22:15:07 +02:00
Conor McCarthy
f6db3330c8
tests/d3d12: Check the correct depth/stencil plane format and alignment in test_get_copyable_footprints().
2024-05-22 22:15:05 +02:00
Conor McCarthy
23881bad7a
tests/d3d12: Set the descriptor heaps for the draw call in test_graphics_uav_counters().
2024-05-22 22:15:04 +02:00
Conor McCarthy
dcc715b4d1
tests/d3d12: Do not clear UAVs via a structured view.
2024-05-22 22:15:02 +02:00
Conor McCarthy
42eee382ec
tests/d3d12: Do not test 3D depth textures in test_get_copyable_footprints().
2024-05-22 22:15:00 +02:00
Conor McCarthy
bb2a79a8fb
tests/d3d12: Do not test a typed UAV in test_atomic_instructions().
...
A shader typed UAV declaration must not map to a root descriptor UAV. We
now have shader runner tests for typed UAV atomics, so there is no need
to modify this test to use a descriptor heap.
2024-05-22 22:14:58 +02:00
Nikolay Sivov
9c83caeda6
vkd3d-shader/fx: Use correct type name when reusing types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-16 21:49:50 +02:00
Nikolay Sivov
a913ac7844
vkd3d-shader/fx: Implement writing shared buffers.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-16 21:49:48 +02:00
Henri Verbeet
ce6f8a6a30
vkd3d-shader/dxil: Parse the shader into a vsir program in vkd3d_shader_sm6_parser_create().
2024-05-16 21:49:40 +02:00
Henri Verbeet
6474e8cc7b
vkd3d-shader/tpf: Parse the shader into a vsir program in vkd3d_shader_sm4_parser_create().
2024-05-16 21:49:39 +02:00
Henri Verbeet
402b96ef3b
vkd3d-shader/d3dbc: Parse the shader into a vsir program in vkd3d_shader_sm1_parser_create().
2024-05-16 21:49:38 +02:00
Henri Verbeet
efe9dfd73a
vkd3d-shader/ir: Do not store the vkd3d-shader configuration flags in struct vkd3d_shader_parser.
2024-05-16 21:49:37 +02:00
Henri Verbeet
19b552ce1b
vkd3d-shader/ir: Pass an initialised vsir_program structure to vkd3d_shader_parser_init().
2024-05-16 21:49:36 +02:00
Henri Verbeet
9e4a790de1
vkd3d-shader/ir: Use a separate allocation for the vsir program in struct vkd3d_shader_parser.
2024-05-16 21:49:34 +02:00
Francisco Casas
061dc39036
vkd3d-shader/hlsl: Also lower matrix swizzles and index loads in const passes.
2024-05-15 21:17:51 +02:00
Francisco Casas
dff2f746bc
tests: Test complex array size expression.
2024-05-15 21:17:51 +02:00
Francisco Casas
0d252f894a
vkd3d-shader/hlsl: Run more constant passes on static expressions eval.
2024-05-15 21:17:50 +02:00
Francisco Casas
4f60c7167e
vkd3d-shader/hlsl: Run constant passes in a separate function.
2024-05-15 21:17:49 +02:00
Francisco Casas
58a6db5589
tests: Test default values for constant buffer variables.
2024-05-15 21:17:49 +02:00
Francisco Casas
499b44a193
tests: Test default values for uniform variables.
2024-05-15 21:17:47 +02:00
Conor McCarthy
9e57039fce
vkd3d-shader/dxil: Handle SV_ClipDistance and SV_CullDistance.
2024-05-14 20:44:22 +02:00
Conor McCarthy
01af0f94bb
tests/hlsl: Add a test for SV_ClipDistance.
2024-05-14 20:44:20 +02:00
Conor McCarthy
4f50af4c83
vkd3d-shader/dxil: Handle SV_Coverage out.
2024-05-14 20:44:18 +02:00
Conor McCarthy
e4724b4635
tests/hlsl: Add a test for SV_Coverage out.
2024-05-14 20:44:16 +02:00
Conor McCarthy
e1c774bfeb
vkd3d-shader/spirv: Implement the WAVE_READ_LANE_FIRST instruction.
2024-05-14 20:44:10 +02:00
Conor McCarthy
cb9b10bf4d
tests/hlsl: Clear the RTV before the WaveReadLaneFirst() test.
2024-05-14 20:44:08 +02:00
Conor McCarthy
47f0483267
vkd3d-shader/dxil: Implement DX intrinsic WaveReadLaneFirst.
2024-05-14 20:44:06 +02:00
Conor McCarthy
936d8e4f61
vkd3d-shader/spirv: Implement the WAVE_READ_LANE_AT instruction.
2024-05-14 20:44:04 +02:00
Conor McCarthy
e41643ab8f
vkd3d-shader/dxil: Implement DX intrinsic WaveReadLaneAt.
2024-05-14 20:44:02 +02:00
Conor McCarthy
5790056c44
tests/hlsl: Add a test for WaveReadLaneAt() with a non-uniform index.
2024-05-14 20:44:00 +02:00
Victor Chiletto
c9af34ab28
vkd3d-shader/hlsl: Avoid a null pointer dereference in hlsl_block_cleanup (UBSan).
...
destroy_block() is called with a NULL block from:
* create_loop, through the loop rules for while and do-while loops.
* The selection_statement rule, in the case $6.else_block is NULL.
* free_parse_initializer.
2024-05-14 20:43:48 +02:00
Conor McCarthy
98f73ca2e5
vkd3d-shader/ir: Allow all DCL instructions to occur outside hull shader phases.
2024-05-13 22:27:13 +02:00
Conor McCarthy
def87539de
vkd3d-shader/dxil: Delete bool not-equal-to-false comparison instructions.
2024-05-13 22:27:13 +02:00
Conor McCarthy
f47ac703ab
vkd3d-shader/spirv: Emit a trace instead of a warning message for ignored alignment.
2024-05-13 22:27:13 +02:00
Conor McCarthy
e340855122
vkd3d-shader/spirv: Do not warn if no global flags are unhandled.
2024-05-13 22:27:13 +02:00
Conor McCarthy
ea5624e5e8
vkd3d-shader/dxil: Emit bool inputs and outputs as uint.
...
DXIL reads/writes uint for these.
2024-05-13 22:27:13 +02:00
Francisco Casas
5b7191280b
vkd3d-shader: Return a valid pointer when count=0 in param allocator (ubsan).
...
After compiling and linking with '-fsanitize=undefined' the following
error pops up in many tests:
vkd3d_shader_main.c:2024:12: runtime error: member access within null pointer of type 'struct vkd3d_shader_param_node'
This happens in the scenario where shader_param_allocator_get() gets
called with 'count = 0' but no allocation has been made yet, so
allocator->current is NULL.
In this case the result of the function, given by:
params = &allocator->current->param[allocator->index * allocator->stride];
is an invalid non-NULL pointer.
Functions like shader_sm4_read_instruction() may call
vsir_program_get_src_params() or vsir_program_get_dst_params() with 0
counts for various DCL_ instructions, as well as things like NOP,
ELSE, and SYNC.
We could avoid calling the functions in question with 0 counts, but it
doesn't seem worth the effort.
Alternatively, we could just return NULL on 'count == 0', but this is
also complicated because NULL is interpreted as a memory allocation
failure on the callers.
So we force allocation of the next node even if 'count = 0' when
allocator->current is NULL.
2024-05-13 22:27:13 +02:00
Francisco Casas
28d267b7c0
vkd3d-shader/hlsl: Allocate SM1 numeric uniforms in decreasing bind count.
2024-05-13 22:26:21 +02:00
Francisco Casas
e7450ce539
vkd3d-shader/d3dbc: Write used bind count for numeric uniforms.
2024-05-13 22:26:13 +02:00
Francisco Casas
f548644222
vkd3d-shader/hlsl: Only allocate numeric bind count for SM1 numeric uniforms.
...
Unless they have register reservations, in which case the whole
variable is still reserved.
2024-05-13 22:26:08 +02:00
Francisco Casas
573d511344
vkd3d-shader/hlsl: Track bind count according to usage for uniforms.
...
Where bind count means the number of registers required to include all
dereferences to the variable within the shader as in
hlsl_ir_var.bind_count[].
2024-05-13 22:26:07 +02:00
Francisco Casas
e0a801e796
vkd3d-shader/hlsl: Improve tracking of used components running DCE before.
...
track_object_components_usage() had to be improved to also
register derefs on resource stores.
It was not doing it because it assumed that for every resource store
there was a resource load already, which was true, before calling DCE.
2024-05-13 22:26:05 +02:00
Francisco Casas
657e460d11
vkd3d-shader/hlsl: Allocate unused variables with register reservations on SM1.
2024-05-13 22:26:03 +02:00
Francisco Casas
7b3644d9f2
tests: Test SM1 const register allocation with relative addressing.
2024-05-13 22:26:03 +02:00
Francisco Casas
b56ae0f1c8
tests: Test SM1 constant register allocation with reservations.
2024-05-13 22:26:03 +02:00
Nikolay Sivov
9dcb74341f
tests: Test SM1 constant register allocation with a row_major matrix.
...
Co-authored-by: Francisco Casas <fcasas@codeweavers.com >
2024-05-13 22:26:01 +02:00
Francisco Casas
7debe25a8b
tests: Test SM1 constant register allocation.
2024-05-13 22:26:01 +02:00
Giovanni Mascellani
05394b624a
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS18 in CheckFeatureSupport().
2024-05-13 11:50:37 +02:00
Giovanni Mascellani
7c7503713a
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS17 in CheckFeatureSupport().
2024-05-13 11:50:37 +02:00
Giovanni Mascellani
d528fdbebf
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS16 in CheckFeatureSupport().
2024-05-13 11:50:37 +02:00
Giovanni Mascellani
5445c4c8aa
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS15 in CheckFeatureSupport().
2024-05-13 11:50:37 +02:00
Giovanni Mascellani
761ee1e487
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS14 in CheckFeatureSupport().
2024-05-13 11:50:37 +02:00
Conor McCarthy
fb20639eb4
vkd3d: Return E_INVALIDARG if the requested shader model is unknown.
2024-05-13 11:50:33 +02:00
Conor McCarthy
d17956ced8
vkd3d: Return a shader model no higher than the requested one for D3D12_FEATURE_SHADER_MODEL.
2024-05-13 11:50:32 +02:00
Conor McCarthy
677c23f1fe
tests: Add tests for D3D12_FEATURE_SHADER_MODEL.
2024-05-13 11:50:32 +02:00
Conor McCarthy
77259da1ad
vkd3d-shader/spirv: Implement the WAVE_PREFIX_BIT_COUNT instruction.
2024-05-13 11:50:23 +02:00
Conor McCarthy
2810edf45b
vkd3d-shader/dxil: Implement DX intrinsic WavePrefixBitCount.
2024-05-13 11:50:22 +02:00
Conor McCarthy
065ef0c5e4
vkd3d-shader/spirv: Implement the WAVE_IS_FIRST_LANE instruction.
2024-05-13 11:50:21 +02:00
Conor McCarthy
c30976e5c2
vkd3d-shader/dxil: Implement DX intrinsic WaveIsFirstLane.
2024-05-13 11:50:20 +02:00
Conor McCarthy
feef2577ef
vkd3d-shader/spirv: Implement the WAVE_ALL_BIT_COUNT instruction.
2024-05-13 11:50:19 +02:00
Conor McCarthy
cb5163f9a4
vkd3d-shader/dxil: Implement DX intrinsic WaveAllBitCount.
2024-05-13 11:50:17 +02:00
Elizabeth Figura
4b3a948edc
authors: Change the full form of my name.
2024-05-08 21:08:35 +02:00
Giovanni Mascellani
ca35023ed0
vkd3d: Only request properties and features when the corresponding extension is available.
...
This fixes a number of validation errors.
2024-05-08 21:08:30 +02:00
Giovanni Mascellani
ea090a34cd
vkd3d: Init physical device information after checking available extensions.
2024-05-08 21:08:30 +02:00
Giovanni Mascellani
826b75722b
vkd3d: Do not automatically succeed if no extensions are available.
...
So error messages for missing required extensions are emitted.
2024-05-08 21:08:28 +02:00
Giovanni Mascellani
dbe3384609
vkd3d: Move checking device extensions to a dedicated function.
2024-05-08 21:08:28 +02:00
Giovanni Mascellani
29c63906bc
vkd3d: Warn about missing extensions only when meaningful.
2024-05-08 21:08:28 +02:00
Stefan Dösinger
d6b1e62ffc
vkd3d: Add a win32 version of vkd3d_get_program_name.
2024-05-08 21:08:22 +02:00
Conor McCarthy
962096f179
vkd3d-shader/dxil: Implement DX intrinsics EmitStream, CutStream and EmitThenCutStream.
2024-05-08 21:08:16 +02:00
Conor McCarthy
cc49f26af1
vkd3d-shader/ir: Validate geometry shader properties.
2024-05-08 21:08:15 +02:00
Conor McCarthy
4fd2d5aa77
vkd3d-shader/dxil: Load geometry shader properties.
2024-05-08 21:08:14 +02:00
Conor McCarthy
00b0b8d65c
tests/hlsl: Add a geometry shader test.
2024-05-08 21:08:13 +02:00
Conor McCarthy
e6c802e713
tests/shader-runner: Free the hull and domain shader source code.
2024-05-08 21:08:11 +02:00
Nikolay Sivov
0053cc52b7
vkd3d-shader/fx: Initial support for writing sample state objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-08 21:08:05 +02:00
Nikolay Sivov
3c6470e3b2
vkd3d-shader/fx: Set UAV count in the header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-08 21:08:04 +02:00
Nikolay Sivov
1a79d1e945
vkd3d-shader/fx: Filter out unsupported object types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-08 21:08:03 +02:00
Nikolay Sivov
9bbed14987
vkd3d-shader/fx: Fix shader counter in the header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-08 21:08:02 +02:00
Nikolay Sivov
cb1a271151
vkd3d-shader/fx: Set texture count in the header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-08 21:08:01 +02:00
Nikolay Sivov
162d8760be
vkd3d-shader/fx: Set RTV counter in the header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-08 21:08:00 +02:00
Nikolay Sivov
a879ac5536
vkd3d-shader/fx: Write depth stencil view object variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-08 21:07:59 +02:00
Zebediah Figura
c2eb563e50
vkd3d-shader/fx: Skip uniform copy logic for global variables.
2024-05-08 21:07:58 +02:00
Francisco Casas
68483d070f
vkd3d-shader/hlsl: Turn hlsl_state_block_entry arguments into hlsl_src.
...
This allows to apply passes that replace instructions in
hlsl_state_block_entry.instrs.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-05-08 21:07:57 +02:00
Zebediah Figura
cefd6f9de6
vkd3d-utils: Implement ID3D12ShaderReflection::GetResourceBindingDesc().
2024-05-06 22:12:50 +02:00
Zebediah Figura
694d39ffe6
tests: Test bounds checking in ID3D12ShaderReflection.
2024-05-06 22:12:50 +02:00
Zebediah Figura
35d388eedd
vkd3d-utils: Initialize the null type vtbl.
2024-05-06 22:12:50 +02:00
Zebediah Figura
7b3c47ba2e
vkd3d-shader/tpf: Write the field offset in bytes.
2024-05-06 22:12:48 +02:00
Zebediah Figura
68562d375e
vkd3d-utils: Fix bounds comparison against element counts.
2024-05-06 22:12:48 +02:00
Zebediah Figura
2480eec98b
vkd3d-shader/hlsl: Move the "base_type" member to the class-specific union.
2024-05-06 22:12:41 +02:00
Zebediah Figura
4fd3f46109
vkd3d-shader/hlsl: Use a switch in hlsl_types_are_equal().
2024-05-06 22:12:39 +02:00
Zebediah Figura
d9f7a88329
vkd3d-shader/hlsl: Make HLSL_TYPE_PIXELSHADER into a separate class.
2024-05-06 22:12:37 +02:00
Zebediah Figura
874937dab4
vkd3d-shader/hlsl: Make HLSL_TYPE_VERTEXSHADER into a separate class.
2024-05-06 22:12:34 +02:00
Zebediah Figura
e904b4596a
vkd3d-shader/hlsl: Ensure that the type is numeric before calling expr_common_base_type().
2024-05-06 22:12:33 +02:00
Conor McCarthy
cfcc789b42
vkd3d-shader/spirv: Implement the WAVE_OP_* instructions.
2024-05-06 22:12:27 +02:00
Conor McCarthy
c71751edc9
vkd3d-shader/dxil: Implement DX intrinsics WaveActiveOp and WavePrefixOp.
2024-05-06 22:12:25 +02:00
Conor McCarthy
fef5760af0
vkd3d-shader/spirv: Implement the WAVE_ACTIVE_BIT_* instructions.
2024-05-06 22:12:24 +02:00
Conor McCarthy
af208135f3
vkd3d-shader/dxil: Implement DX intrinsic WaveActiveBit.
2024-05-06 22:12:22 +02:00
Conor McCarthy
1c49b3a779
vkd3d-shader/spirv: Implement the WAVE_ACTIVE_BALLOT instruction.
2024-05-06 22:12:21 +02:00
Conor McCarthy
174a692a17
vkd3d-shader/dxil: Implement DX intrinsic WaveActiveBallot.
2024-05-06 22:12:19 +02:00
Henri Verbeet
62a512c4f8
tests/shader_runner: Get rid of some redundant "| glsl" conditions.
...
We don't run shader model 6 GLSL tests.
2024-05-02 22:19:30 +02:00
Henri Verbeet
592e902d47
vkd3d-shader: Pass a struct vsir_program to vkd3d_shader_parser_compile().
2024-05-02 22:19:18 +02:00
Henri Verbeet
fa7b623eac
vkd3d-shader: Pass a struct vsir_program to scan_with_parser().
2024-05-02 22:19:18 +02:00
Henri Verbeet
f948520504
vkd3d-shader/spirv: Pass a struct vsir_program to spirv_compile().
2024-05-02 22:19:17 +02:00
Henri Verbeet
e21215f466
vkd3d-shader/spirv: Pass a struct vsir_program to spirv_compiler_generate_spirv().
2024-05-02 22:19:16 +02:00
Giovanni Mascellani
3f43d06f5c
include: Document structure vkd3d_image_resource_create_info.
2024-05-02 22:19:08 +02:00
Giovanni Mascellani
2679b10fcb
include: Document structure vkd3d_optional_device_extensions_info.
2024-05-02 22:19:08 +02:00
Giovanni Mascellani
2b1abc5d7b
include: Document structure vkd3d_device_create_info.
2024-05-02 22:19:08 +02:00
Giovanni Mascellani
5d78eeb6d3
vkd3d: Simplify control flow for swapchain images.
2024-05-02 22:19:08 +02:00
Conor McCarthy
95489899be
vkd3d-shader/spirv: Handle the WAVE_ANY_TRUE instruction.
2024-05-02 22:19:02 +02:00
Conor McCarthy
fb5eb3159d
vkd3d-shader/dxil: Implement DX intrinsic WaveAnyTrue.
2024-05-02 22:19:00 +02:00
Conor McCarthy
77ec2a5caa
vkd3d-shader/spirv: Handle the WAVE_ALL_TRUE instruction.
2024-05-02 22:18:59 +02:00
Conor McCarthy
8e2b351538
vkd3d-shader/dxil: Implement DX intrinsic WaveAllTrue.
2024-05-02 22:18:58 +02:00
Conor McCarthy
78f2d2936d
vkd3d-shader/spirv: Handle the WAVE_ACTIVE_ALL_EQUAL instruction.
2024-05-02 22:18:57 +02:00
Conor McCarthy
9aa9b112e6
vkd3d-shader/dxil: Implement DX intrinsic WaveActiveAllEqual.
2024-05-02 22:18:55 +02:00
Conor McCarthy
c770efc530
vkd3d-shader/spirv: Handle the WAVELANEINDEX register.
2024-05-02 22:18:54 +02:00
Conor McCarthy
29786d7efb
tests/shader-runner: Add a 'require' directive for wave ops.
2024-05-02 22:18:53 +02:00
Conor McCarthy
9315bcb6a1
tests/shader-runner: Skip shader model 6.0 tests if the device does not support them.
2024-05-02 22:18:52 +02:00
Conor McCarthy
fd590c2593
vkd3d: Initialise wave ops feature options.
...
Based in part on a vkd3d-proton patch by Philip Rebohle.
2024-05-02 22:18:50 +02:00
Conor McCarthy
a130c970a6
vkd3d-shader/spirv: Handle the WAVELANECOUNT register.
2024-05-02 22:18:49 +02:00
Conor McCarthy
6a56b4e5d8
vkd3d-shader/dxil: Implement DX intrinsics WaveGetLaneCount and WaveGetLaneIndex.
2024-05-02 22:18:48 +02:00
Giovanni Mascellani
766913f911
tests: Add missing test file.
2024-04-30 22:59:47 +02:00
Giovanni Mascellani
5e6bcc4f9d
tests: Test wave reconvergence after selections and loops.
...
Tangled instructions, like wave operations, are sensitive to how the
invocations in a wave reconverge after having diverged. Here we test
for some of those scenarios.
2024-04-30 22:59:44 +02:00
Henri Verbeet
a52a91d756
configure: Build with -flto=auto when available.
2024-04-30 16:32:10 +02:00
Conor McCarthy
127bcf90e4
vkd3d-shader/dxil: Implement DX intrinsic Coverage.
2024-04-30 16:32:10 +02:00
Conor McCarthy
c2a787181f
tests/hlsl: Add SV_Coverage tests.
2024-04-30 16:32:10 +02:00
Conor McCarthy
36c76e1557
vkd3d-shader/dxil: Handle SV_PrimitiveId.
2024-04-30 16:32:10 +02:00
Conor McCarthy
eef0f7c29e
vkd3d-shader/dxil: Handle SV_InstanceId.
2024-04-30 16:32:10 +02:00
Conor McCarthy
0bd6083785
tests/hlsl: Add an SV_InstanceId test.
2024-04-30 16:32:10 +02:00
Conor McCarthy
fb730b11cf
vkd3d-shader/dxil: Handle constexpr pointer cast.
2024-04-30 16:31:44 +02:00
Conor McCarthy
2fc32c3d1d
tests/hlsl: Add a test for constexpr pointer cast.
2024-04-30 16:31:43 +02:00
Conor McCarthy
05510c118a
vkd3d-shader/dxil: Emit an error if a CMPXCHG instruction uses a forward-referenced pointer.
2024-04-30 16:31:42 +02:00
Conor McCarthy
b67a68b486
vkd3d-shader/dxil: Emit an error if a ATOMICRMW instruction uses a forward-referenced pointer.
2024-04-30 16:31:41 +02:00
Conor McCarthy
9615c38968
vkd3d-shader/dxil: Emit an error if a STORE instruction uses a forward-referenced pointer.
2024-04-30 16:31:40 +02:00
Conor McCarthy
b4b5af66ef
vkd3d-shader/dxil: Emit an error if a LOAD instruction uses a forward-referenced pointer.
2024-04-30 16:31:39 +02:00
Alexandre Julliard
91762a62c6
vkd3d-shader: Avoid non-constant initializer.
...
Fixes "initializer element is not constant" error with gcc < 8.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56508
2024-04-30 16:31:32 +02:00
Henri Verbeet
87c83e2ae2
vkd3d-shader: Get rid of struct vkd3d_shader_desc.
2024-04-30 16:31:19 +02:00
Henri Verbeet
b761f1a263
vkd3d-shader/spirv: Use location information from the current instruction.
2024-04-30 16:31:14 +02:00
Henri Verbeet
8b8ad07057
vkd3d-shader/hlsl: Use vkd3d_string_buffer_printf() in declare_predefined_types().
2024-04-30 16:31:09 +02:00
Francisco Casas
ee735e8eed
vkd3d-shader/hlsl: Fold x * 1 identities.
2024-04-30 16:31:05 +02:00
Francisco Casas
b14f935d0f
vkd3d-shader/hlsl: Fold x + 0 identities.
2024-04-30 16:31:02 +02:00
Francisco Casas
c43c900a30
tests: Test x + 0 and x * 1 indentities.
2024-04-30 16:31:01 +02:00
Stefan Dösinger
13e1491941
tests/d3d12: Add tests for storing and retrieving cache values.
2024-04-24 23:49:23 +02:00
Stefan Dösinger
cb6c868460
vkd3d: Implement cache locking.
2024-04-24 23:49:20 +02:00
Stefan Dösinger
71f1955cd6
vkd3d: Implement vkd3d_shader_cache_get.
2024-04-24 23:49:20 +02:00
Stefan Dösinger
aad76f4ed2
vkd3d: Implement vkd3d_shader_cache_put.
2024-04-24 23:49:15 +02:00
Henri Verbeet
af33caf036
vkd3d-common: Introduce vkd3d_atomic_exchange_ptr().
2024-04-24 23:49:12 +02:00
Henri Verbeet
b1c326ce56
vkd3d-common: Introduce vkd3d_atomic_exchange_u32().
2024-04-24 23:49:11 +02:00
Henri Verbeet
5c8a90a6c9
vkd3d-common: Introduce vkd3d_atomic_compare_exchange_u32().
2024-04-24 23:49:11 +02:00
Henri Verbeet
bfbd29efe6
vkd3d: Get rid of vkd3d_atomic_compare_exchange_pointer().
...
The only uses of this were remove by commit
3ca2259807
.
2024-04-24 23:49:10 +02:00
Henri Verbeet
2b6012df7d
tests/shader_runner: Use WIDL_C_INLINE_WRAPPERS.
2024-04-24 23:48:44 +02:00
Henri Verbeet
11db8c1719
vkd3d-common: Use WIDL_C_INLINE_WRAPPERS.
2024-04-24 23:48:44 +02:00
Henri Verbeet
534044181b
vkd3d-utils: Use WIDL_C_INLINE_WRAPPERS.
2024-04-24 23:48:44 +02:00
Henri Verbeet
d5717d333b
vkd3d: Use WIDL_C_INLINE_WRAPPERS.
2024-04-24 23:48:44 +02:00
Conor McCarthy
075979fa21
vkd3d-shader/ir: Always check for undominated SSA use in register relative addresses.
2024-04-24 23:48:13 +02:00
Francisco Casas
5e3515f191
vkd3d-shader/d3dbc: Support SM1 if conditionals.
...
According to the documentation, if_comp is available from 2_x pixel
and vertex shaders and, unlike "if bool" it doesn't expect a constant
boolean register (from the input signature), so:
if_neq cond -cond
seems like a convenient way to write these, for profiles above 2.0.
2024-04-24 23:48:06 +02:00
Francisco Casas
d2427ea1bd
vkd3d-shader/ir: Lower IFC instructions to IF instructions.
2024-04-24 23:48:05 +02:00
Francisco Casas
e370ce5bf2
vkd3d-shader/d3dbc: Pass hlsl_block instead of function declaration.
2024-04-24 23:48:04 +02:00
Francisco Casas
74c998a2a4
tests: Add additional conditional tests for shader model 3.0.
2024-04-24 23:48:04 +02:00
Francisco Casas
dbb9cfd958
tests/shader-runner: Report whole-block errors on the block's starting line.
...
So, if there is an error or a trace on "[pixel shader]" or similar
blocks, they get reported in the line with the tag at the beginning of
the block and no on the line where the next block starts.
2024-04-24 23:47:55 +02:00
Henri Verbeet
46fca3f9f4
vkd3d-common: Introduce VKD3D_BITMAP_SIZE.
2024-04-23 22:41:25 +02:00
Francisco Casas
aa35b2cecb
vkd3d-shader/hlsl: Cleanup parse_attribute_list structs (valgrind).
2024-04-23 22:38:03 +02:00
Conor McCarthy
e3dde09bb9
vkd3d-shader/ir: Accept undefined PHI incomings as valid.
...
An incoming can be undefined if the PHI result is not used if the
incoming's path was taken, or if the undefined value is consumed by
an instruction (dxc will compile such code without errors).
2024-04-23 22:37:33 +02:00
Nikolay Sivov
836fe05916
tests: Add some tests for string variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-04-23 22:37:19 +02:00
Zebediah Figura
d7da278693
vkd3d-shader/hlsl: Make HLSL_TYPE_RENDERTARGETVIEW into a separate class.
2024-04-23 22:37:09 +02:00
Zebediah Figura
ee2bde3aba
vkd3d-shader/hlsl: Make HLSL_TYPE_DEPTHSTENCILVIEW into a separate class.
2024-04-23 22:37:06 +02:00
Zebediah Figura
76971d811e
vkd3d-shader/hlsl: Make HLSL_TYPE_TECHNIQUE into a separate class.
2024-04-23 22:36:51 +02:00
Zebediah Figura
3c8c7426df
vkd3d-shader/hlsl: Make HLSL_TYPE_PASS into a separate class.
2024-04-23 22:36:38 +02:00
Zebediah Figura
24d3a352a6
vkd3d-shader/hlsl: Make HLSL_TYPE_EFFECT_GROUP into a separate class.
2024-04-23 22:36:32 +02:00
Giovanni Mascellani
6b841486d4
vkd3d-shader/ir: Materialize SSAs in each function of a hull shader.
2024-04-23 22:36:17 +02:00
Giovanni Mascellani
c8af142bb0
vkd3d-shader/ir: Structurize each function of a hull shader.
2024-04-23 22:36:16 +02:00
Giovanni Mascellani
d8e4b19cdc
vkd3d-shader/ir: Skip invalid blocks when materializing undominated SSAs.
2024-04-23 22:36:14 +02:00
Conor McCarthy
eae1411cdc
tests/hlsl: Add tests for texture UAV signed atomics.
2024-04-23 22:36:08 +02:00
Conor McCarthy
ee8ca0e9c2
tests/hlsl: Add tests for texture UAV atomics.
2024-04-23 22:36:06 +02:00
Conor McCarthy
1c73ac668f
tests/hlsl: Add a test for UAV InterlockedExchange().
2024-04-23 22:36:05 +02:00
Conor McCarthy
7e4fee658b
tests/hlsl: Add a test for a structured UAV scalar store.
2024-04-23 22:36:02 +02:00
Conor McCarthy
0f7095d2aa
tests/hlsl: Add tests for min() and integer max().
2024-04-23 22:35:51 +02:00
Henri Verbeet
7b4a1fdfbc
vkd3d: Move the vkd3d_cond implementation to vkd3d-common.
...
Much like the vkd3d_mutex implementation.
2024-04-22 23:15:20 +02:00
Henri Verbeet
8345b9b6f5
vkd3d-shader/glsl: Implement VKD3DSIH_NOP.
2024-04-22 23:14:30 +02:00
Henri Verbeet
037e8436c9
tests/shader_runner: Pass only valid stages to vkCreateGraphicsPipelines().
...
The first thing that's broken is that the "sType" field isn't
VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, but we're also
passing invalid "module" handles.
2024-04-22 23:14:20 +02:00
Giovanni Mascellani
7fbd753cf7
include: Document structure vkd3d_host_time_domain_info.
2024-04-22 23:14:15 +02:00
Giovanni Mascellani
d2d4ed9f63
include: Document structure vkd3d_application_info.
2024-04-22 23:14:15 +02:00
Giovanni Mascellani
d27bbce0e1
include: Document struct vkd3d_optional_instance_extensions_info.
2024-04-22 23:14:15 +02:00
Giovanni Mascellani
a1ebb3925b
include: Document struct vkd3d_structure_type.
2024-04-22 23:14:15 +02:00
Giovanni Mascellani
995a316fba
include: Document struct vkd3d_instance_create_info.
2024-04-22 23:14:15 +02:00
Giovanni Mascellani
9241e1bcd3
ci: Run crosstests with DXC too.
...
This is added as a new job because some tests currently fail. A 32 bit
job is not created, instead, because a 32 bit dxcompiler.dll is not
available.
2024-04-22 23:13:50 +02:00
Giovanni Mascellani
09630ada90
tests: Allow compiling shaders with DXC on crosstests.
...
This is currently disabled on the CI because dxcompiler.dll is not
available.
2024-04-22 23:13:48 +02:00
Giovanni Mascellani
53fd1a95fc
tests: Allow skipping DXC tests at runtime.
2024-04-22 23:13:48 +02:00
Conor McCarthy
079f8e4d52
vkd3d-shader/dxil: Implement DX intrinsic OutputControlPointID.
2024-04-22 23:13:31 +02:00
Conor McCarthy
3976738baf
vkd3d-shader/dxil: Implement DX intrinsic DomainLocation.
2024-04-22 23:13:30 +02:00
Conor McCarthy
e165f9cefc
vkd3d-shader/dxil: Implement DX intrinsic StorePatchConstant.
2024-04-22 23:13:29 +02:00
Conor McCarthy
3479962983
vkd3d-shader/dxil: Implement DX intrinsics LoadOutputControlPoint and LoadPatchConstant.
2024-04-22 23:13:28 +02:00
Conor McCarthy
4457181b2a
vkd3d-shader/dxil: Support patch constant functions and signatures.
2024-04-22 23:13:26 +02:00
Conor McCarthy
d5c6e12dd3
tests/hlsl: Add wave op tests.
2024-04-22 23:13:20 +02:00
Zebediah Figura
6cf065e7fd
tests: Add tests for register space reservation syntax.
2024-04-22 23:13:16 +02:00
Zebediah Figura
f7a79517ae
tests: Add tests for profile syntax in register reservations.
2024-04-22 23:13:16 +02:00
Zebediah Figura
e3e93b76d2
tests: Do not run the d3d11 backend with shader model 5.1.
2024-04-22 23:13:16 +02:00
Zebediah Figura
833c897aac
vkd3d-shader/hlsl: Parse register space reservations.
2024-04-22 23:13:15 +02:00
Zebediah Figura
29f6a7e5f7
vkd3d-shader/hlsl: Rename register_opt and packoffset_opt to register_reservation and packoffset_reservation.
...
"opt" seems to imply "optional", but the optional aspect of these reservations
is not (and never has been) encoded into these rules.
2024-04-22 23:13:13 +02:00
Henri Verbeet
4a209efb62
vkd3d-shader/hlsl: Support spirv-binary and spirv-text as target formats.
2024-04-19 22:24:07 +02:00
Henri Verbeet
0116e49d9b
vkd3d-shader/hlsl: Support d3d-asm as target format.
2024-04-19 22:24:06 +02:00
Henri Verbeet
414bb99542
vkd3d-shader/glsl: Add vkd3d-shader version information to the generated shader.
2024-04-19 22:23:55 +02:00
Conor McCarthy
3205e08fb1
vkd3d-shader/dxil: Support SV_Depth, SV_DepthGreaterEqual and SV_DepthLessEqual.
2024-04-19 22:23:43 +02:00
Conor McCarthy
7eeca3fa39
tests/hlsl: Add tests for SV_DepthLessEqual and SV_DepthGreaterEqual.
2024-04-19 22:23:42 +02:00
Conor McCarthy
b68a9ae3ec
tests/hlsl: Add tests for SV_Depth.
2024-04-19 22:23:40 +02:00
Giovanni Mascellani
dbe3c00a77
tests/shader-runner: Use OpDemoteToHelperInvocationEXT when available.
2024-04-19 22:23:35 +02:00
Giovanni Mascellani
7196484e59
tests: Check that derivatives are still computed after discarding.
2024-04-19 22:23:35 +02:00
Giovanni Mascellani
12c457b43f
tests: Avoid using a different UAV for SM<6 and SM>=6.
2024-04-19 22:23:35 +02:00
Giovanni Mascellani
296edf0d68
vkd3d-utils: Make all extensions optional in D3D12CreateDeviceVKD3D().
...
A D3D12 device can be useful even without a surface and swapchain.
On the other hand, just having the surface and swapchain extensions
doesn't give any feature (the client still has to manage them), so
there is no point in making them a requirement.
2024-04-19 22:23:28 +02:00
Zebediah Figura
171e097268
vkd3d-shader/hlsl: Make HLSL_TYPE_UAV into a separate class.
2024-04-19 22:23:20 +02:00
Zebediah Figura
93d7cd1785
vkd3d-shader/hlsl: Make HLSL_TYPE_TEXTURE into a separate class.
2024-04-19 22:23:19 +02:00
Zebediah Figura
220362cbad
vkd3d-shader/hlsl: Make HLSL_TYPE_SAMPLER into a separate class.
2024-04-19 22:23:18 +02:00
Zebediah Figura
f57db442b0
vkd3d-shader/hlsl: Make HLSL_TYPE_STRING into a separate class.
2024-04-19 22:23:16 +02:00
Zebediah Figura
cdcf2da2eb
vkd3d-shader/hlsl: Make HLSL_TYPE_VOID into a separate class.
2024-04-19 22:23:14 +02:00
Henri Verbeet
e17e481130
vkd3d-shader/glsl: Call vkd3d_shader_normalise().
2024-04-17 22:52:20 +02:00
Henri Verbeet
c7fc60a237
vkd3d: Avoid leaking "messages" when "error_blob" is NULL in vkd3d_serialize_versioned_root_signature(). (Valgrind).
2024-04-17 22:52:07 +02:00
Henri Verbeet
8a7cb0295a
vkd3d: Avoid leaking "messages" when "error_blob" is NULL in vkd3d_serialize_root_signature(). (Valgrind).
2024-04-17 22:52:05 +02:00
Conor McCarthy
742288127f
vkd3d: Support DXGI_FORMAT_B4G4R4A4_UNORM.
2024-04-17 22:51:57 +02:00
Conor McCarthy
8879521679
vkd3d: Support DXGI_FORMAT_B5G5R5A1_UNORM.
2024-04-17 22:51:57 +02:00
Conor McCarthy
4cdf38d392
vkd3d: Support DXGI_FORMAT_B5G6R5_UNORM.
2024-04-17 22:51:57 +02:00
Conor McCarthy
6205d96c3b
tests: Add UNORM formats B5G6R5, B5G5R5A1 and B4G4R4A4 to the UAV image clear tests.
2024-04-17 22:51:56 +02:00
Conor McCarthy
b0145ad96e
vkd3d-shader: Introduce a wave ops feature flag.
2024-04-17 22:51:52 +02:00
Conor McCarthy
270aa22d0b
vkd3d: Use Vulkan 1.1 if available.
2024-04-17 22:51:51 +02:00
Conor McCarthy
6975a8d726
vkd3d-shader: Introduce SPIRV_ENVIRONMENT_VULKAN_1_1.
...
The SPIR-V backend may emit SPIR-V 1.3 if Vulkan 1.1 is available.
Some extensions which provide wave op instructions are available in
SPIR-V 1.0, but these are not sufficient to implement all Shader Model 6
wave op intrinsics. SPIR-V 1.3 has all of the required instructions, but
does not support reading from a quad at a non-constant (but uniform) lane
index, so it may later prove necessary to introduce a Vulkan 1.2
environment.
2024-04-17 22:51:49 +02:00
Conor McCarthy
a7870e1793
vkd3d-shader/spirv: Emit a compiler warning if an atomic op is flagged volatile.
2024-04-17 22:51:43 +02:00
Conor McCarthy
d9f42b2c51
vkd3d-shader/dxil: Implement the DXIL CMPXCHG instruction.
2024-04-17 22:51:41 +02:00
Conor McCarthy
f13c65abb0
tests/hlsl: Add an InterlockedCompareExchange() TGSM test.
2024-04-17 22:51:40 +02:00
Conor McCarthy
99996ed5b5
vkd3d-shader/dxil: Implement DX intrinsic RenderTargetGetSampleCount.
2024-04-17 22:51:34 +02:00
Conor McCarthy
fe5e821cca
vkd3d-shader/dxil: Implement DX intrinsics Texture2DMSGetSamplePosition and RenderTargetGetSamplePosition.
2024-04-17 22:51:32 +02:00
Conor McCarthy
696fc12061
tests/hlsl: Add tests for GetSamplePosition() and GetSampleCount().
2024-04-17 22:51:30 +02:00
Henri Verbeet
1d6c3eae78
vkd3d-shader/ir: Remove VKD3DSIH_DCL_CONSTANT_BUFFER instructions.
2024-04-16 22:18:52 +02:00
Henri Verbeet
8a9364c124
vkd3d-shader/d3d-asm: Get rid of shader_addline().
2024-04-16 22:18:44 +02:00
Giovanni Mascellani
a359c42795
vkd3d-shader/ir: Only emit launchers when needed.
2024-04-16 22:18:33 +02:00
Giovanni Mascellani
df4731dc17
vkd3d-shader/ir: Only emit trampolines when needed.
2024-04-16 22:18:26 +02:00
Giovanni Mascellani
d6ba8b88fa
vkd3d-shader/ir: Swap selection branches if the if branch is empty.
2024-04-16 22:18:25 +02:00
Conor McCarthy
0515482e82
vkd3d-shader/ir: Validate tessellation declarations.
2024-04-16 22:18:18 +02:00
Conor McCarthy
e1abf1e48a
vkd3d-shader/dxil: Implement DX intrinsic PrimitiveID.
2024-04-16 22:18:17 +02:00
Conor McCarthy
54016b3ced
vkd3d-shader/dxil: Load hull shader properties.
2024-04-16 22:18:15 +02:00
Conor McCarthy
02cbc511bb
vkd3d-shader/dxil: Load domain shader properties.
2024-04-16 22:18:14 +02:00
Conor McCarthy
2379bda36f
tests/hlsl: Add a tessellation test.
2024-04-16 22:18:12 +02:00
Henri Verbeet
7d6f0f2592
vkd3d: Implement creating compute pipeline states from shaders with embedded root signatures.
2024-04-15 21:34:09 +02:00
Henri Verbeet
18986ddb50
tests: Test creating compute pipeline states from shaders with embedded root signatures.
2024-04-15 21:34:09 +02:00
Henri Verbeet
b8eadf4bab
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_interpolation_mode().
2024-04-15 21:33:58 +02:00
Henri Verbeet
1ad524072d
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_primitive_type().
2024-04-15 21:33:57 +02:00
Henri Verbeet
7d72accce2
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_decl_usage().
2024-04-15 21:33:56 +02:00
Henri Verbeet
4d8c966ff4
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_shader_input_sysval_semantic().
2024-04-15 21:33:55 +02:00
Henri Verbeet
37401fa11c
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_reg_type().
2024-04-15 21:33:54 +02:00
Henri Verbeet
7c66c9122d
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_register().
2024-04-15 21:33:52 +02:00
Conor McCarthy
425e0aa6c3
tests/hlsl: Supply data for all mip levels in calculate-lod.shader_test.
...
Fixes invalid read in the GL runner.
2024-04-15 21:33:40 +02:00
Conor McCarthy
23db066922
vkd3d-shader/ir: Implement MAD in two operations if flagged as precise.
...
With some changes by Giovanni Mascellani.
2024-04-15 21:33:35 +02:00
Giovanni Mascellani
9112a5be58
vkd3d-shader/ir: Move DCL_TEMPS removal to the generic instruction lowering pass.
2024-04-15 21:33:34 +02:00
Giovanni Mascellani
8a17a5a08b
vkd3d-shader/ir: Introduce vsir_program_lower_instructions().
...
It is meant as generic pass to host all program changes to single
instructions that do not require keeping a global state, intstead
of having to loop through the whole program many times.
2024-04-15 21:33:32 +02:00
Giovanni Mascellani
a7dc6dcce2
vkd3d-shader/ir: Split handling jumps when emitting a structured program.
2024-04-15 21:33:28 +02:00
Giovanni Mascellani
1a8a4c7787
vkd3d-shader/ir: Split handling selections when emitting a structured program.
2024-04-15 21:33:26 +02:00
Giovanni Mascellani
052df4d693
vkd3d-shader/ir: Split handling loops when emitting a structured program.
2024-04-15 21:33:16 +02:00
Giovanni Mascellani
5e42f6779a
vkd3d-shader/ir: Split handling blocks when emitting a structured program.
2024-04-15 21:33:15 +02:00
Giovanni Mascellani
b4cfc24f67
vkd3d-shader/ir: Refactor declaration emission outside of the CFG structure.
...
This is in preparation of handling more than one function (as
it happens for Hull Shaders), which will require having a single
row of declarations, but handling more than one CFG.
2024-04-15 21:33:14 +02:00
Giovanni Mascellani
27801e5612
vkd3d-shader/ir: Split undominated SSA materialization.
2024-04-15 21:33:13 +02:00
Giovanni Mascellani
d891ac5017
vkd3d-shader/ir: Split program structurization.
2024-04-15 21:33:12 +02:00
Giovanni Mascellani
eb15f97083
vkd3d-shader/ir: Move breaks out of selections again after having optimized loops.
2024-04-15 21:33:08 +02:00
Giovanni Mascellani
be7eec75dc
vkd3d-shader/ir: Append code to the non-breaking branch if there is breaking one.
2024-04-15 21:33:07 +02:00
Giovanni Mascellani
a2c6b5450b
vkd3d-shader/ir: Prepare for changing the destination list in vsir_cfg_optimize_recurse().
2024-04-15 21:33:05 +02:00
Petrichor Park
1fb9e7526b
vkd3d-shader/hlsl: Implement tanh.
2024-04-15 21:32:59 +02:00
Petrichor Park
c4182cc272
vkd3d-shader/hlsl: Implement hyperbolic sin and cos.
2024-04-15 21:32:56 +02:00
Henri Verbeet
2b7d9790d6
configure: Use AC_CHECK_TOOL to check for widl.
...
In particular, this will automatically pick up
x86_64-w64-mingw32-widl/i686-w64-mingw32-widl (provided by mingw-w64-tools on
Debian) when present and building for the corresponding hosts.
2024-04-11 16:12:22 -05:00
Giovanni Mascellani
aad040af05
vkd3d-shader/ir: Remove loops that terminate with a `break'.
2024-04-11 09:22:14 -05:00
Giovanni Mascellani
105ccc4769
vkd3d-shader/ir: Count how many jumps target each loop.
2024-04-11 09:22:13 -05:00
Giovanni Mascellani
f5d1b5d263
vkd3d-shader/ir: Move `break's out of selection constructs when possible.
2024-04-11 09:22:11 -05:00
Giovanni Mascellani
e29706d366
tests: Check that side effects do not happen after discard.
2024-04-10 08:55:33 -05:00
Nikolay Sivov
8d78e3a821
vkd3d-shader/hlsl: Support refract() intrinsic.
...
With some changes by Giovanni Mascellani.
2024-04-10 08:55:27 -05:00
Nikolay Sivov
fd9e1a87ff
vkd3d-shader/hlsl: Test refract() intrinsic.
...
With some changes by Giovanni Mascellani.
2024-04-10 08:55:26 -05:00
Giovanni Mascellani
ecad299ba4
vkd3d-shader/hlsl: Emit half results when operating on half arguments.
2024-04-10 08:55:24 -05:00
Zebediah Figura
280bea9033
vkd3d-shader/fx: Use a switch in write_fx_2_initial_value().
2024-04-10 08:55:20 -05:00
Zebediah Figura
6c6106f780
vkd3d-shader/fx: Move unimplemented type checks into is_type_supported_fx_2().
2024-04-10 08:55:19 -05:00
Zebediah Figura
047040fc63
vkd3d-shader/fx: Don't use an array to write the type class.
2024-04-10 08:55:18 -05:00
Zebediah Figura
285059ef11
vkd3d-shader/d3dbc: Consider the class in sm1_base_type().
...
We want the base type to stop being a property of all types, and to stop using
the same enumeration for objects and numeric types. The backend should do the
work of translation; we want a more sensible and convenient representation for
the compiler itself.
2024-04-10 08:55:17 -05:00
Zebediah Figura
a882d60534
vkd3d-shader/hlsl: Map HLSL_TYPE_DOUBLE to D3DXPT_FLOAT.
2024-04-10 08:55:15 -05:00
Conor McCarthy
9d7f63dc26
vkd3d: Validate that a resource with initial state RENDER_TARGET is a render target.
2024-04-10 08:55:11 -05:00
Conor McCarthy
78301d7202
vkd3d: Validate presence of flag ALLOW_RENDER_TARGET or ALLOW_DEPTH_STENCIL for multisampled resources.
2024-04-10 08:55:11 -05:00
Conor McCarthy
e46de1daa2
tests/d3d12: Test resource flags for multisampled resources.
2024-04-10 08:55:09 -05:00
Stefan Dösinger
a7860ae752
vkd3d: Implement reopening existing caches.
2024-04-10 08:54:58 -05:00
Stefan Dösinger
f24005507c
vkd3d: Implement opening and closing shader caches.
2024-04-10 08:54:58 -05:00
Stefan Dösinger
26387e1d4b
tests: Add CreateShaderCacheSession pointer clearing tests.
...
Native's behavior is inconsistent. It sets the pointer to NULL when it
fails to open an existing cache due to a version mismatch, but leaves
the pointer untouched when the description fails validation.
2024-04-10 08:54:56 -05:00
Giovanni Mascellani
42f07352a0
ci: Build Mesa for release.
...
Otherwise it trips on a few failed assertions in d3d12.c.
2024-04-10 08:54:51 -05:00
Giovanni Mascellani
0be29f78c0
tests: Pop the test context when leaving its scope.
2024-04-10 08:54:51 -05:00
Giovanni Mascellani
59a5d8f852
tests: Add llvmpipe among the Mesa drivers.
2024-04-10 08:54:50 -05:00
Giovanni Mascellani
ecd38f3d1b
tests: Print the device name.
2024-04-10 08:54:50 -05:00
Giovanni Mascellani
7cfb02cfd3
tests: Skip some tests that crash on llvmpipe.
2024-04-10 08:54:50 -05:00
Giovanni Mascellani
0b2ce5c13a
tests: Mark some test failures as todo on llvmpipe.
2024-04-10 08:54:50 -05:00
Giovanni Mascellani
a2bb4ef301
vkd3d-shader/d3d-asm: Reset indent level on HS phases.
2024-04-10 08:54:29 -05:00
Conor McCarthy
cb5411408a
vkd3d-shader/dxil: Implement DX intrinsic CalculateLOD.
2024-04-10 08:54:23 -05:00
Conor McCarthy
bdfa14d219
tests/hlsl: Add tests for CalculateLevelOfDetail().
...
Includes improvements made by Giovanni Mascellani.
2024-04-10 08:54:23 -05:00
Francisco Casas
e9559c394b
vkd3d-shader/hlsl: Allow KW_PIXELSHADER and KW_VERTEXSHADER as stateblock lhs.
2024-04-10 08:54:23 -05:00
Francisco Casas
ef9ae22ed0
vkd3d-shader/hlsl: Store state block on pass variables.
2024-04-10 08:54:23 -05:00
Francisco Casas
a99bcb1196
vkd3d-shader/hlsl: Parse list of state blocks.
2024-04-10 08:54:23 -05:00
Francisco Casas
80320f6129
vkd3d-shader/hlsl: Introduce hlsl_ir_stateblock_constant.
2024-04-10 08:54:23 -05:00
Francisco Casas
ee0d439a1b
vkd3d-shader/hlsl: Parse and store state blocks on variables.
2024-04-10 08:54:23 -05:00
Francisco Casas
73ef6907bc
tests: Add tests for "compile" and CompileShader() syntax.
2024-04-10 08:54:23 -05:00
Francisco Casas
83f4b46fb1
tests: Add tests for fxgroup syntax.
2024-04-10 08:54:23 -05:00
Francisco Casas
00c8cf1bcc
tests: Test function call syntax for state blocks.
2024-04-10 08:54:23 -05:00
Francisco Casas
9ede222714
tests: Add more state block syntax tests.
2024-04-10 08:54:23 -05:00
Francisco Casas
4dedcc5885
vkd3d-shader/hlsl: Also call dce before lowering deref paths.
2024-04-10 08:54:23 -05:00
Henri Verbeet
d1e16514d0
tests/test-driver: Avoid "head" with negative line count.
...
It's not supported on macOS, and not needed here.
2024-04-09 12:28:51 -05:00
Giovanni Mascellani
ca2f54e729
ci: Delimit building each commit with a collapsible section.
2024-04-09 12:28:10 -05:00
Francisco Casas
5ab1ef1cad
vkd3d-shader/hlsl: Properly release string buffer on write_atan_or_atan2().
...
vkd3d_string_buffer_cleanup() doesn't do the same as
hlsl_release_string_buffer(). The former only frees the char array
inside the string buffer and not the string buffer itself.
2024-04-09 12:28:03 -05:00
Zebediah Figura
0e3377a1be
vkd3d-shader/hlsl: Avoid using HLSL_CLASS_OBJECT without checking the base type.
...
As the diffstat shows, HLSL_CLASS_OBJECT does not really have much in common.
Resource types (TEXTURE, SAMPLER, UAV) sometimes behave similarly to each other,
but do not generally behave similarly to effect-specific types (string, shader,
state, view). Most consumers of HLSL_CLASS_OBJECT subsequently check the base
type anyway.
Hence we want to replace HLSL_TYPE_* with individual classes for object types.
As a first step, change the last few places that only check HLSL_CLASS_OBJECT.
2024-04-09 12:27:55 -05:00
Zebediah Figura
269cdad7b9
vkd3d-shader/hlsl: Consider any valid register reservation to invoke manual packing.
...
Regardless of the type of the variable.
2024-04-09 12:27:53 -05:00
Zebediah Figura
bdbf5e7d74
tests: Add more tests for manual packing.
2024-04-09 12:27:53 -05:00
Zebediah Figura
ce50c3a186
vkd3d-shader/hlsl: Use hlsl_type_is_resource() for unbounded array checks.
...
Not all objects can be unbounded descriptors.
2024-04-09 12:27:51 -05:00
Zebediah Figura
083a58767a
tests: Test HLSL unbounded array syntax.
...
Change the shader in test_unbounded_samplers() to also test a nested array.
Note that the changed shader compiles to the same bytecode.
2024-04-09 12:27:49 -05:00
Zebediah Figura
c5f507ac38
vkd3d-shader/hlsl: Add SM5.1 shader target strings.
2024-04-09 12:27:47 -05:00
Zebediah Figura
843968cd63
vkd3d-shader/hlsl: Use hlsl_version_ge() when checking for unbounded arrays.
...
6.x also allows them.
2024-04-09 12:27:45 -05:00
Zebediah Figura
5fbd2708c0
vkd3d-shader/hlsl: Move shader version helpers to hlsl.h.
2024-04-09 12:27:43 -05:00
Conor McCarthy
e72c3bab71
vkd3d-shader/spirv: Ensure the data register is UINT in spirv_compiler_emit_store_tgsm().
2024-04-09 12:27:30 -05:00
Conor McCarthy
dc99159dd8
vkd3d-shader/spirv: Bitcast if necessary in spirv_compiler_emit_store_dst_components().
2024-04-09 12:27:29 -05:00
Conor McCarthy
85c8c6be4d
vkd3d-shader/dxil: Support constexpr GEP.
2024-04-09 12:27:26 -05:00
Conor McCarthy
7d5e3713f9
vkd3d-shader/ir: Materialise SSAs to temps before lowering switch instructions.
2024-04-09 12:27:20 -05:00
Conor McCarthy
cfcd57209b
vkd3d-shader/ir: Convert SSAs to temps only if the block of origin does not dominate all uses.
2024-04-09 12:27:19 -05:00
Conor McCarthy
1c61776c18
vkd3d-shader/spirv: Handle uint2 to double bitcast in spirv_compiler_emit_mov().
...
Necessary for MakeDouble if the dst is SSA.
2024-04-09 12:27:18 -05:00
Conor McCarthy
c8eb7e1c81
vkd3d-shader/spirv: Emit a uint result for RESINFO_UINT if the dst register is SSA.
2024-04-09 12:27:16 -05:00
Conor McCarthy
7bfc7410f2
vkd3d-shader/ir: Materialise phis to temps in the incoming blocks.
...
RADV converts temps to phi instructions, so converting phis to MOVC in
VSIR just translates back to phis feeding into a MOVC. This commit
eliminates the MOVC.
2024-04-09 12:27:15 -05:00
Francisco Casas
62bb12f322
vkd3d-shader/hlsl: Use LOGIC_AND instead of MUL in all().
2024-04-09 12:27:09 -05:00
Francisco Casas
53e4d6eedb
vkd3d-shader/hlsl: Use LOGIC_OR instead of BIT_OR in any().
...
Note that BIT_OR is not available for SM1 bools, so we must prefer
LOGIC_OR when possible.
2024-04-09 12:27:07 -05:00
Francisco Casas
2621fc9572
vkd3d-shader/ir: Add missing src swizzle in vsir_program_lower_texkills().
2024-04-09 12:27:06 -05:00
Francisco Casas
808ec288cf
tests: Add failing test for clip.shader_test in SM1.
...
We are not properly translating texkill to spir-v since it is only
considering the first component.
2024-04-09 12:27:04 -05:00
Francisco Casas
8fca801591
vkd3d-shader/tpf: Use the extra_bits field for _nz on discard.
2024-04-09 12:27:03 -05:00
Francisco Casas
3503145ced
tests: Report missing signature element in openGL runner.
2024-04-09 12:27:03 -05:00
Francisco Casas
3a0a4b625f
vkd3d-shader/hlsl: Merge HLSL_OP3_MOVC into HLSL_OP3_TERNARY.
2024-04-09 12:27:02 -05:00
Francisco Casas
8f6f875a59
vkd3d-shader/hlsl: Move lower of non-float expressions with the other SM1 passes.
2024-04-09 12:27:01 -05:00
Francisco Casas
19fd43214b
vkd3d-shader/hlsl: Ensure that TERNARY condition is always bool.
...
Also, properly casting it to float in lower_ternary() for SM1
avoids creating ABS and NEG on bool types.
2024-04-09 12:26:59 -05:00
Giovanni Mascellani
9c0d04c862
ci: Build the macOS image each time the Linux image is built.
2024-04-04 22:22:06 +02:00
Henri Verbeet
4f589356f1
tests: Free the shader blobs once we're done with them in test_create_pipeline_state(). (Valgrind).
2024-04-04 22:20:35 +02:00
Henri Verbeet
73996c9941
vkd3d-dxbc: Allow the section to extract to be specified by tag.
2024-04-04 22:20:30 +02:00
Henri Verbeet
6c3b87bed0
vkd3d-dxbc: Implement extracting section data.
2024-04-04 22:20:30 +02:00
Henri Verbeet
806afd7b50
vkd3d-dxbc: Free the blob if parsing it failed.
2024-04-04 22:20:30 +02:00
Henri Verbeet
8f529cd0ae
vkd3d-dxbc: Introduce a helper function to apply actions.
2024-04-04 22:20:30 +02:00
Henri Verbeet
143b15fc47
vkd3d-dxbc: Introduce a helper function to handle ACTION_TYPE_EMIT.
2024-04-04 22:20:30 +02:00
Henri Verbeet
2712a79c55
vkd3d-dxbc: Close output files after writing them.
2024-04-04 22:20:30 +02:00
Stefan Dösinger
8653ce17cf
tests: Add tests for creating D3D12ShaderCacheSession objects.
2024-04-04 22:19:46 +02:00
Stefan Dösinger
7c93b5070f
vkd3d: Validate and store shader cache session descriptors.
2024-04-04 22:19:46 +02:00
Stefan Dösinger
fb87a72497
vkd3d: Add an ID3D12ShaderCacheSession stub.
2024-04-04 22:19:46 +02:00
Stefan Dösinger
d5c89051dd
vkd3d: Add ID3D12Device9 interface stubs.
2024-04-04 22:19:46 +02:00
Giovanni Mascellani
a278f32d3f
vkd3d-shader/ir: Synthesize selection constructs from conditional jumps.
2024-04-04 22:19:19 +02:00
Giovanni Mascellani
0d13b6afe9
vkd3d-shader/ir: Remove trailing `continue's.
2024-04-04 22:19:18 +02:00
Giovanni Mascellani
d8414302e8
vkd3d-shader/ir: Move `continue's to the false branch when possible.
2024-04-04 22:19:16 +02:00
Nikolay Sivov
4b0a328a2b
vkd3d-shader/hlsl: Allow 'export' modifier on functions.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-04-03 22:24:15 +02:00
Giovanni Mascellani
636d8d3850
ci: Run tests on llvmpipe from Mesa 24.0.3.
2024-04-03 22:24:13 +02:00
Giovanni Mascellani
b3ce73984d
ci: Make llvmpipe from Mesa 24.0.3 available in the CI image.
2024-04-03 22:24:13 +02:00
Giovanni Mascellani
e6c20361ea
vkd3d-shader/ir: Drop a useless helper.
2024-04-03 22:23:08 +02:00
Giovanni Mascellani
9aff65c6d2
vkd3d-shader/ir: Open a loop when visiting the loop header.
...
Not when making the loop header available, which is too early and
might lead to open too many loops at once.
2024-04-03 22:23:06 +02:00
Nikolay Sivov
e1e6367210
vkd3d-shader/fx: Add an option to include empty buffers in the effect binary.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-04-02 23:10:42 +02:00
Nikolay Sivov
c509c85f63
vkd3d-shader/hlsl: Allow annotations on constant buffers.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-04-02 23:10:40 +02:00
Henri Verbeet
64418dd290
tests/shader_runner: Cleanup on insufficient GLSL support in gl_runner_init() (Valgrind).
2024-04-02 23:10:28 +02:00
Henri Verbeet
46bd3b1545
tests: Initialise resource_desc1.Layout in test_get_copyable_footprints() (Valgrind).
2024-04-02 23:10:18 +02:00
Giovanni Mascellani
d10031911d
vkd3d-shader/ir: Move vsir_program_normalise() to the end of the file.
...
vsir_program_normalise() has function calls to basically everything in
ir.c, so it's useful to have it in an easily reachable place to
quickly jump to wherever you need using your favorite code editor's
features.
2024-04-02 23:10:07 +02:00
Giovanni Mascellani
9047dad4bc
vkd3d-compiler: Clean up the shader code in all failure paths (Valgrind).
2024-04-02 23:10:02 +02:00
Giovanni Mascellani
2a101cf697
tests: Include vkd3d_d3d12.h in utils.h.
...
RECT and D3D12_BOX are used from there.
2024-04-02 23:09:53 +02:00
Giovanni Mascellani
5f2f126b70
include: Include stddef.h in vkd3d_shader.h.
...
Type size_t is used in the file without importing any header which
defines it. This only works when the translation unit includes one of
the appropriate headers anyway or when the appropriate header is included
internally by other standard C headers; none of those strategies should
be relied upon.
2024-04-02 23:09:51 +02:00
Zebediah Figura
106cbc02de
vkd3d-shader/hlsl: Use hlsl_is_numeric_type() in type_has_object_components().
2024-04-02 23:09:38 +02:00
Zebediah Figura
54f2dfe403
vkd3d-shader/hlsl: Simplify type_has_object_components().
...
The extra argument is not very easy to intuit. Since all we're trying to do here is check whether the type is a struct with object components in it, write that out explicitly.
2024-04-02 23:09:36 +02:00
Zebediah Figura
1e7d82798c
vkd3d-shader/hlsl: Move a hlsl_fixme() to a more relevant place.
2024-04-02 23:09:35 +02:00
Zebediah Figura
675d7b8cb6
vkd3d-shader/hlsl: Remove a redundant type check.
...
We already perform an implicit cast per component in initialize_var_components().
2024-04-02 23:09:33 +02:00
Conor McCarthy
d72d5c35d1
vkd3d-shader/dxil: Implement DX intrinsics Dot2, Dot3 and Dot4.
2024-04-02 23:09:28 +02:00
Conor McCarthy
2909a5aacc
vkd3d-shader/dxil: Implement DX intrinsic MakeDouble.
2024-04-02 23:09:23 +02:00
Conor McCarthy
cf6e518f1e
tests/hlsl: Add tests for asdouble().
2024-04-02 23:09:20 +02:00
Francisco Casas
b1eaf8327b
tests/test-driver: Print line where vkd3d_unreachable() was hit.
...
With this, a test that fails because vkd3d_unreacheable() was hit, will
now display the error line.
FAIL: tests/hlsl/some-test.shader_test
(SM4.0-SM5.1)OpenGL/SPIR-V 43[XF] 79[XF] 126[XF] 149[XF] 159[XF]
[AF] vkd3d/libs/vkd3d-shader/hlsl.c:246: Aborting, reached unreachable code.
[SIGABRT] Aborted (core dumped)
2024-03-27 22:37:52 +01:00
Francisco Casas
9a90b9591c
tests/test-driver: Display [SIGABRT] and [SIGSEGV] tags.
...
Some times the test can be aborted for reasons others than failed
assertions, such as segmentation faults or reaching unreacheable code.
This commit adds purple tags to the test driver for visual clarity.
2024-03-27 22:37:48 +01:00
Conor McCarthy
11ee92ed7e
vkd3d-shader/dxil: Implement DX intrinsic Discard.
2024-03-27 22:37:42 +01:00
Conor McCarthy
8d947ce868
vkd3d-shader/spirv: Support bool source in spirv_compiler_emit_discard().
2024-03-27 22:37:40 +01:00
Zebediah Figura
6b6e4bc212
vkd3d-shader: Add a compile option to control whether implicit truncation warnings are printed.
...
d3dcompiler and d3dx9 versions before 42 don't emit this error; this will be
necessary to emulate that behaviour.
Other warnings exist that are introduced in different d3dcompiler versions,
although there are not very many distinct HLSL warnings to begin with.
We could of course group all these together under a single compiler option, but
I find that using separate top-level options is unilaterally friendlier to an
API consumer, and simpler to implement as well. It also in some sense maps
conceptually to e.g. "-Wno-implicit-conversion".
2024-03-27 22:37:34 +01:00
Nikolay Sivov
b382d1843d
vkd3d-shader/fx: Accept texture types when writing fx_2_0 effects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-27 22:37:29 +01:00
Nikolay Sivov
b09f919673
vkd3d-shader/hlsl: Treat "texture" type name as case-insensitive.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-27 22:37:28 +01:00
Nikolay Sivov
17dc23269e
vkd3d-shader/fx: Handle "uint" type for fx_2_0 parameters.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-27 22:37:27 +01:00
Nikolay Sivov
9117629e35
vkd3d-shader/fx: Handle "half" type for fx_2_0 parameters.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-27 22:37:25 +01:00
Nikolay Sivov
3fdf674a4d
tests: Rename effect test files to make them easier to find.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-27 22:37:25 +01:00
Nikolay Sivov
88d9cff407
vkd3d-shader/fx: Set initial object count to 1 for fx_2_0.
...
This is used for the object table at runtime. Object variable index is 1-based.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-27 22:37:24 +01:00
Nikolay Sivov
501aed43f3
vkd3d-shader/fx: Zero-pad strings when aligning them for fx_2_0.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-27 22:37:23 +01:00
Nikolay Sivov
228d54efff
vkd3d-shader/fx: Mark shared variables as such for fx_2_0 effects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-27 22:37:21 +01:00
Nikolay Sivov
cfa63da3f1
vkd3d-shader: Adjust "child-effect" option documentation.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-27 22:37:21 +01:00
Francisco Casas
11e7265815
vkd3d-shader/spirv: Throw compiler error on unrecognized register.
...
This codepath path is currently triggered when transpiling d3dbc shaders
that use vPos (or other of these special registers).
While vPos gets added to the input signature and gets assigned an INPUT
register, the registers in the shader instructions are still of
VKD3DSPR_MISCTYPE type and are not propperly mapped yet. This gives
invalid results.
Some SM1 tests must be set back to "todo" but they only work because, by
coincidence, we are assigning vPos the input register with index 0.
Propper mapping of these registers is still required.
2024-03-27 22:37:15 +01:00
Zebediah Figura
172cb75872
vkd3d-shader/spirv: Implement VKD3DSIH_ABS.
2024-03-27 22:37:10 +01:00
Francisco Casas
9a222d2be1
vkd3d-shader/d3dbc: Implement HLSL_OP2_LOGIC_AND for SM1.
2024-03-27 22:37:09 +01:00
Francisco Casas
777bf772bf
vkd3d-shader/d3dbc: Implement HLSL_OP2_LOGIC_OR for SM1.
2024-03-27 22:37:08 +01:00
Francisco Casas
a838f97e3f
vkd3d-shader/hlsl: Cast to bool before applying LOGIC_NOT.
...
Before this commit, it is possible for one of the tests of
cf-cond-types.shader_test to pass a non-bool to LOGIC_NOT, which should
not be allowed.
2024-03-27 22:37:07 +01:00
Francisco Casas
ee5fc7e968
vkd3d-shader/hlsl: Support LOGIC_NOT for SM1.
2024-03-27 22:37:06 +01:00
Francisco Casas
90e8a541fb
tests: Add tests for LOGIC_NOT on uniforms.
2024-03-27 22:37:06 +01:00
Conor McCarthy
68b31b7396
vkd3d-shader/spirv: Handle the sequentially consistent ordering flag for atomic instructions.
2024-03-27 22:37:01 +01:00
Conor McCarthy
a8dd788f41
vkd3d-shader/spirv: Emit a warning if the atomic instruction volatile flag is unhandled.
2024-03-27 22:37:00 +01:00
Conor McCarthy
9e0b9c3a7a
vkd3d-shader/dxil: Implement the DXIL ATOMICRMW instruction.
2024-03-27 22:36:59 +01:00
Conor McCarthy
b708a9b3b5
vkd3d-shader/dxil: Implement DX instructions ThreadId, GroupId, ThreadIdInGroup and FlattenedThreadIdInGroup.
2024-03-27 22:36:58 +01:00
Conor McCarthy
c7dcfc2a04
tests/shader-runner: Add TGSM tests.
2024-03-27 22:36:57 +01:00
Conor McCarthy
0f332eb939
vkd3d-shader/dxil: Emit an error if a constant code is unhandled.
2024-03-27 22:36:56 +01:00
Conor McCarthy
47e56cdfed
vkd3d-shader/spirv: Support 64-bit register info component type in spirv_compiler_emit_load_reg().
...
For 64-bit indexable temps (and any other 64-bit declarations) the write
mask must not be converted.
2024-03-27 22:36:55 +01:00
Conor McCarthy
83a67366da
vkd3d-shader/spirv: Do not assert if a TGSM store data register is not UINT.
2024-03-27 22:36:54 +01:00
Conor McCarthy
9da375414e
vkd3d-shader/spirv: Do not assert if a TGSM load dst register is not UINT.
2024-03-27 22:36:52 +01:00
Giovanni Mascellani
24460728f2
Add a changelog for all the released versions of vkd3d.
2024-03-27 22:36:47 +01:00
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
Francisco Casas
4133c4d801
tests: Test equality between tiny and between large numbers on ps_2_0.
2024-03-14 22:49:29 +01:00
Francisco Casas
e9a4758648
vkd3d-shader/hlsl: Implement SM1 comparison operators.
2024-03-14 22:49:29 +01:00
Francisco Casas
7b883eef53
vkd3d-shader/d3dbc: Check profiles before writing SLT and CMP.
2024-03-14 22:48:56 +01:00
Giovanni Mascellani
d75dc76011
vkd3d-shader/ir: Dump the reconstructed structured program.
2024-03-14 22:48:53 +01:00
Giovanni Mascellani
2b3e21caeb
vkd3d-shader/ir: Add jumps to the structured programs.
2024-03-14 22:48:52 +01:00
Giovanni Mascellani
c25e4c47c3
vkd3d-shader/ir: Reconstruct a structured program.
...
For simplicity jumps are not currently processed.
2024-03-14 22:48:50 +01:00
Conor McCarthy
f08976be33
vkd3d-shader/dxil: Implement DX instruction Barrier.
2024-03-14 22:48:46 +01:00
Conor McCarthy
b22632ff1a
vkd3d-shader/spirv: Emit a trace message if TGSM alignment is ignored.
...
This would cause a lot of warning spam if it was a warning.
2024-03-14 22:48:45 +01:00
Conor McCarthy
5e63164d01
vkd3d-shader/dxil: Implement structured groupshared address space global variables.
2024-03-14 22:48:44 +01:00
Conor McCarthy
0965a3608a
vkd3d-shader/dxil: Implement raw groupshared address space global variables.
2024-03-14 22:48:43 +01:00
Conor McCarthy
6dd54eeb09
vkd3d-shader/spirv: Support zero-initialisation for workgroup memory.
2024-03-14 22:48:41 +01:00
Henri Verbeet
374c5fcbdd
vkd3d-shader/glsl: Store a pointer to the vsir program in struct vkd3d_glsl_generator.
2024-03-13 22:00:48 +01:00
Henri Verbeet
5f1f7ababb
vkd3d-shader/ir: Pass a struct vsir_program to remap_output_signature().
2024-03-13 22:00:42 +01:00
Henri Verbeet
0edf6d25f3
vkd3d-shader/ir: Pass a struct vsir_program to simple_structurizer_run().
2024-03-13 22:00:41 +01:00
Henri Verbeet
c3f3cb5ef9
vkd3d-shader/ir: Pass a struct vsir_program to materialize_ssas_to_temps().
2024-03-13 22:00:40 +01:00
Henri Verbeet
76791913d0
vkd3d-shader/ir: Pass a struct vsir_program to materialize_ssas_to_temps_process_reg().
2024-03-13 22:00:39 +01:00
Henri Verbeet
343a365c97
vkd3d-shader/ir: Pass a struct vsir_program to instruction_array_lower_texkills().
2024-03-13 22:00:37 +01:00
Conor McCarthy
b6c41d5287
tests/hlsl: Add tests for countbits() and firstbit{high|low}().
2024-03-13 21:50:39 +01:00
Conor McCarthy
0dc174ebd7
vkd3d-shader/spirv: Emit an error if a FIRSTBIT instruction has a 64-bit source.
2024-03-13 21:50:37 +01:00
Conor McCarthy
a64eb75c1d
vkd3d-shader/spirv: Emit an error if COUNTBITS has a 64-bit source.
2024-03-13 21:50:36 +01:00
Zebediah Figura
a686fa7750
tests: Use a UAV barrier between ClearUnorderedAccessViewFloat() and a compute shader.
...
In an attempt to fix test failures on radv.
2024-03-13 21:50:31 +01:00
Henri Verbeet
9b0d304f8f
vkd3d-shader/glsl: Introduce glsl_compile().
2024-03-12 22:15:41 +01:00
Henri Verbeet
bdc096d437
vkd3d-shader/d3d-asm: Get rid of the (now) redundant "shader_desc" parameter to vkd3d_dxbc_binary_to_text().
...
And rename the function to d3d_asm_compile() while we're touching it.
2024-03-12 22:15:34 +01:00
Francisco Casas
b831ffe96c
tests: Avoid creating a file named "0" when calling "make check".
...
We use "printf" instead of "print" in awk in order to avoid a newline in
the value of $xfcount, and use "-gt" instead of ">", which creates the
spurious file, in the comparison.
2024-03-12 22:15:00 +01:00
Nikolay Sivov
948cd2154a
vkd3d-shader/fx: Handle 'single' modifier for buffers.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-12 22:14:50 +01:00
Nikolay Sivov
e0ef45c0a3
vkd3d-shader: Parse a 'single' modifier.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-12 22:14:50 +01:00
Nikolay Sivov
cf7c05f431
vkd3d-shader: Remove a token for 'precise' modifier.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-12 22:14:50 +01:00
Giovanni Mascellani
f2b2040ff6
vkd3d-shader/ir: Sort loop intervals.
2024-03-12 22:14:47 +01:00
Giovanni Mascellani
070c4af8b3
vkd3d-shader/ir: Generate synthetic intervals for forward edges.
2024-03-12 22:14:46 +01:00
Giovanni Mascellani
1d60612340
vkd3d-shader/ir: Compute loop as intervals of the block order.
2024-03-12 22:14:45 +01:00
Nikolay Sivov
30cc6ceb44
vkd3d-shader/fx: Add support for writing shared object descriptions for fx_4_x.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-12 22:14:41 +01:00
Nikolay Sivov
13227f3852
vkd3d-shader: Add an option to enable child effects compilation.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-12 22:14:41 +01:00
Nikolay Sivov
7f1fdd447c
vkd3d-shader/fx: Add initial support for writing uninitialized vertex/pixel shader objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-12 22:14:40 +01:00
Evan Tang
03a80cde2e
vkd3d: Enable VK_EXT_fragment_shader_interlock if available.
2024-03-11 22:10:25 +01:00
Henri Verbeet
038764985a
vkd3d-shader/glsl: Use location information from the current instruction.
2024-03-11 22:10:21 +01:00
Giovanni Mascellani
dff22c9ed7
tests: Clear the UAV before testing.
...
There is no guarantee that a resource is cleared upon creation. This
fixes the test on NVIDIA and llvmpipe.
2024-03-11 22:10:15 +01:00
Giovanni Mascellani
5e43f99809
tests: Relax precision a bit for an interpolation test.
...
Otherwise the test fails on Intel, NVIDIA and llvmpipe.
2024-03-11 22:10:14 +01:00
Giovanni Mascellani
0c63824d9f
tests: Mark the coverage test as buggy on MoltenVK.
...
Apparently MoltenVK doesn't set the SampleMask built-in to the
fragment coverage mask.
2024-03-11 22:10:13 +01:00
Giovanni Mascellani
cf816a255c
tests: Pop the test context when leaving its scope.
2024-03-11 22:10:13 +01:00
Giovanni Mascellani
f6fe9a39db
tests: Mark the HS punned array test as buggy on MoltenVK.
...
MoltenVK doesn't support the Component decoration on tessellation
shaders.
2024-03-11 22:10:10 +01:00
Conor McCarthy
4f0e5b9069
vkd3d-shader/dxil: Support 16-bit types.
2024-03-11 22:10:06 +01:00
Conor McCarthy
066ea75945
vkd3d-shader/spirv: Introduce HALF and UINT16 types for minimum precision.
...
Minimum precision types must always be implemented as 32-bit to match how
reduced precision works in SPIR-V.
2024-03-11 22:10:05 +01:00
Conor McCarthy
58123c2e10
vkd3d-shader/spirv: Introduce a data_type_is_floating_point() helper function.
2024-03-11 22:10:03 +01:00
Conor McCarthy
581939f1ef
tests/shader-runner: Add tests for minimum-precision constants.
...
Values in DXIL have no signedness, so it is ambiguous whether 16-bit
constants should or should not be sign-extended when 16-bit execution
is not supported.
2024-03-11 22:10:01 +01:00
Nikolay Sivov
25d353db91
vkd3d-shader/d3dbc: Do not write semantic declarations for unused variables.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55829
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56402
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-11 22:09:55 +01:00
Zebediah Figura
ad495970e0
vkd3d-shader/spirv: Implement SLT and SGE.
2024-03-11 22:09:48 +01:00
Zebediah Figura
27196d8b0f
vkd3d-shader/spirv: Implement CMP.
2024-03-11 22:09:44 +01:00
Francisco Casas
2b06bcc615
tests: Check that -0.0f is not less than 0.0f.
2024-03-11 22:09:44 +01:00
Francisco Casas
308c7941d4
tests: Test comparison and logic operators on SM1 vertex shaders.
...
Currently these are failing for SM1 because VKD3DSIH_SLT is not being
handled by spirv.c.
2024-03-11 22:09:43 +01:00
Francisco Casas
cfac67ccc2
vkd3d-shader/hlsl: Cast slt before multiplying on ternary operator.
...
Otherwise we may get a failing
"hlsl_types_are_equal(arg1->data_type, arg2->data_type)"
assertion on hlsl_new_binary_expr() when creating the MUL.
This happens in the test introducing in the following patch:
int a, b, c;
void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
{
out_pos = pos;
res = a ? b/1000.0 : c/1000.0;
}
2024-03-11 22:09:42 +01:00
Francisco Casas
fda08de61d
tests/shader-runner: Pass uniforms to vertex shaders in d3d9 and d3d11.
2024-03-11 22:09:41 +01:00
Giovanni Mascellani
1690b0b554
vkd3d-shader: Remove the bytecode fields from vkd3d_shader_desc.
2024-03-11 22:09:32 +01:00
Giovanni Mascellani
204c8afb9c
vkd3d-shader/dxbc: Remove flag is_dxil.
...
The full shader profile is already available in vsir_program.
2024-03-11 22:09:31 +01:00
Giovanni Mascellani
470d83a9da
vkd3d-shader: Move shader signatures to vsir_program.
2024-03-11 22:09:31 +01:00
Giovanni Mascellani
56dc0c9842
vkd3d-shader/dxbc: Decouple vkd3d_shader_desc from DXBC parsing.
2024-03-11 22:09:30 +01:00
Giovanni Mascellani
5204b92fa0
vkd3d-shader/tpf: Remove a useless parameter to shader_sm4_init().
2024-03-11 22:09:28 +01:00
Conor McCarthy
7b4b0143bd
vkd3d-shader/dxil: Implement DX intrinsic TextureGatherCmp.
2024-03-11 22:09:20 +01:00
Conor McCarthy
5a6fd010ac
vkd3d-shader/dxil: Implement DX intrinsic TextureGather.
2024-03-11 22:09:18 +01:00
Conor McCarthy
8337b99a2c
tests/shader-runner: Add a Gather test with non-constant offset.
2024-03-11 22:09:16 +01:00
Conor McCarthy
7fcf1b6ca2
tests/shader-runner: Add sampler comparison tests.
2024-03-11 22:09:08 +01:00
Giovanni Mascellani
7273d7f54f
vkd3d-dxbc: Add an option to choose the output filename.
2024-03-11 22:08:56 +01:00
Giovanni Mascellani
b72ad78af6
vkd3d-dxbc: Add an option to re-emit the shader with the correct checksum.
2024-03-11 22:08:56 +01:00
Giovanni Mascellani
4b80b06f28
vkd3d-dxbc: Add an option to ignore checksum.
2024-03-11 22:08:56 +01:00
Giovanni Mascellani
75bc68962d
vkd3d-shader/dxbc: Add flag to ignore the DXBC checksum.
2024-03-11 22:08:55 +01:00
Giovanni Mascellani
23259263cf
vkd3d-shader/d3d-asm: Only emit signatures for SM4-6.
2024-03-08 23:36:44 +01:00
Henri Verbeet
1fc55d80cd
vkd3d-shader: Enable GLSL target support when VKD3D_SHADER_UNSUPPORTED_GLSL is defined.
2024-03-08 23:36:40 +01:00
Evan Tang
4553b2a0dc
vkd3d-shader/spirv: Implement support for rasteriser-ordered views.
...
Using SPV_EXT_fragment_shader_interlock.
2024-03-08 23:36:35 +01:00
Giovanni Mascellani
21f76257b0
vkd3d-shader/d3d-asm: Print labels in red.
...
They are substantially different from any other register type, so
it makes sense to have them stand out. Also, they help segmenting
visually the code into blocks, because labels are usually found
either at the beginning or at the end of a block.
2024-03-08 23:36:25 +01:00
Conor McCarthy
e65055b435
vkd3d-shader/spirv: Handle the ORD and UNO instructions.
2024-03-08 23:36:14 +01:00
Conor McCarthy
f212aad0ff
vkd3d-shader/dxil: Support FCMP_ORD and FCMP_UNO for CMP2.
2024-03-08 23:36:13 +01:00
Conor McCarthy
94583815bc
tests/shader-runner: Add a test for FCMP_ORD (is ordered).
2024-03-08 23:36:12 +01:00
Conor McCarthy
4dafd6bedf
vkd3d: Implement GetCopyableFootprints1().
2024-03-08 23:36:08 +01:00
Conor McCarthy
197f16efa9
vkd3d: Implement CreatePlacedResource1().
2024-03-08 23:36:08 +01:00
Conor McCarthy
e5ae6bd3c2
vkd3d: Implement CreateCommittedResource2().
2024-03-08 23:36:08 +01:00
Conor McCarthy
6edba86a26
vkd3d: Implement GetResourceAllocationInfo2().
2024-03-08 23:36:08 +01:00
Conor McCarthy
2ed36efcb5
tests/d3d12: Add tests for GetCopyableFootprints1().
2024-03-08 23:36:06 +01:00
Conor McCarthy
9987b519a2
tests/d3d12: Add tests for CreatePlacedResource1().
2024-03-08 23:36:05 +01:00
Conor McCarthy
c09ae2c93f
tests/d3d12: Add tests for CreateCommittedResource2().
2024-03-08 23:36:04 +01:00
Conor McCarthy
81a4dbe52d
tests/d3d12: Add tests for GetResourceAllocationInfo2().
2024-03-08 23:36:02 +01:00
Conor McCarthy
7d2c274b9b
vkd3d: Add ID3D12Device8 interface stubs.
2024-03-08 23:36:02 +01:00
Giovanni Mascellani
172e7edf2d
vkd3d-shader: Refactor common code for vkd3d_shader_compile().
2024-03-08 23:35:54 +01:00
Giovanni Mascellani
0e5d6a97cc
vkd3d-shader: Refactor common code for vkd3d_shader_scan().
2024-03-08 23:35:54 +01:00
Giovanni Mascellani
bbd37a76fc
vkd3d-shader: Treat the HLSL case specially in vkd3d_shader_compile().
2024-03-08 23:35:54 +01:00
Giovanni Mascellani
3a1c32acd4
vkd3d-shader: Treat the HLSL case specially in vkd3d_shader_scan().
...
The other cases are similar and common code can be refactored.
Ideally the HLSL parser will eventually fit the same model, but that
will require more extensive work.
2024-03-08 23:35:53 +01:00
Giovanni Mascellani
b940d79aa8
vkd3d-shader/ir: Keep loops contiguous in the topological sort.
2024-03-08 23:35:48 +01:00
Giovanni Mascellani
cf9a023566
vkd3d-shader/ir: Dump the topological order of the control flow graph.
2024-03-08 23:35:47 +01:00
Giovanni Mascellani
ed40646c8a
vkd3d-shader/ir: Topologically sort the control flow graph.
2024-03-08 23:35:46 +01:00
Giovanni Mascellani
880d781b57
vkd3d-shader/ir: Allow adding to a block list without checking for duplicates.
2024-03-08 23:35:45 +01:00
Nikolay Sivov
75c019074a
vkd3d-shader/hlsl: Allow modifiers on buffer declarations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-08 23:35:40 +01:00
Francisco Casas
9e9b3d263f
tests: Get detailed information on failing tests.
2024-03-08 23:35:36 +01:00
Francisco Casas
faea8cd7c8
tests: Copy autotool's testsuite driver script.
...
For the driver script to run properly it is necessary to run
"autoreconf" in the source directory and call the configure script again
in the build directory.
2024-03-08 23:35:28 +01:00
Nikolay Sivov
b13d60d805
vkd3d-shader/hlsl: Add determinant() function.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-08 23:35:23 +01:00
Giovanni Mascellani
8723b5d266
vkd3d-shader/ir: Sort each loop by block label.
2024-03-07 23:08:36 +01:00
Giovanni Mascellani
3d4092d9dc
vkd3d-shader/ir: Dump the loops in the control flow graph.
2024-03-07 23:08:35 +01:00
Giovanni Mascellani
8241ca2b67
vkd3d-shader/ir: Keep track of loops by header block.
2024-03-07 23:08:34 +01:00
Giovanni Mascellani
088a6c49a2
vkd3d-shader/ir: Keep a reference to the message context inside struct vsir_cfg.
2024-03-07 23:08:33 +01:00
Giovanni Mascellani
9ac842b36b
vkd3d-shader/ir: Compute the loops in the control flow graph.
2024-03-07 23:08:32 +01:00
Giovanni Mascellani
de15f55477
vkd3d-shader/ir: Introduce a helper to express block domination.
2024-03-07 23:08:31 +01:00
Giovanni Mascellani
c3657c4799
vkd3d-shader/ir: Add a debug buffer to struct vsir_cfg.
2024-03-07 23:08:30 +01:00
Giovanni Mascellani
c5893288d9
vkd3d-shader/ir: Properly handle function-local indexable temps when flattening control flow.
...
They have to be considered code rather than declarations, as required
for instance by the SPIR-V backend.
2024-03-07 23:08:28 +01:00
Giovanni Mascellani
6163d82485
tests: Test emitting the signature.
2024-03-07 23:08:25 +01:00
Giovanni Mascellani
9b0a9f63f7
vkd3d-compiler: Add an option to emit the signature when disassembling.
2024-03-07 23:08:25 +01:00
Giovanni Mascellani
9aa86901e3
vkd3d-shader/d3d-asm: Support emitting the shader signature.
2024-03-07 23:08:24 +01:00
Giovanni Mascellani
01a687a7fc
vkd3d-shader/d3d-asm: Refactor dumping a write mask to a dedicated function.
2024-03-07 23:08:23 +01:00
Giovanni Mascellani
9d99389663
vkd3d-shader/d3d-asm: Describe the ASM dialect with a bunch of flags instead of a plain enum.
2024-03-07 23:08:22 +01:00
Giovanni Mascellani
94d641783b
vkd3d-shader/d3d-asm: Do not make a copy of the buffer before returning it.
2024-03-07 23:08:20 +01:00
Nikolay Sivov
a0d52dc385
vkd3d-shader/hlsl: Improve VertexShader/PixelShader types handling.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-06 23:04:25 +01:00
Nikolay Sivov
4dd1bbae40
tests: Add some tests for shader object type names.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-06 23:04:25 +01:00
Nikolay Sivov
437ef0896f
vkd3d-shader/fx: Make sure to set error message for unimplemented cases.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-06 23:04:22 +01:00
Nikolay Sivov
8c5db57ea7
vkd3d-shader/fx: Reject fx_2_0 output without techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-06 23:04:19 +01:00
Nikolay Sivov
dd5e42d347
vkd3d-shader/hlsl: Allow technique10 {} blocks for fx_2_0.
...
Such techniques are ignored later, but do not cause compilation errors.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-06 23:04:18 +01:00
Nikolay Sivov
5edbccd33b
vkd3d-shader/hlsl: Add keyword tokens for fx_5_0 shader object types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-06 23:04:16 +01:00
Conor McCarthy
5082893e5d
vkd3d-shader/spirv: Always use a 64-bit write mask for IMMCONST64 src params.
...
There is no way to tell in spirv_compiler_emit_load_reg() if the write
mask is 64-bit. All loads are 32-bit except for IMMCONST64 and SSA, and
the latter ignores the mask, so the only issue lies with IMMCONST64.
2024-03-06 23:04:12 +01:00
Conor McCarthy
13143700b7
tests/shader-runner: Add raw UAV tests.
2024-03-06 23:04:11 +01:00
Francisco Casas
58c456ff2b
vkd3d-shader/d3dbc: Implement bool to float cast as MOV.
...
In SM1, bools are always represented as either 0.0f or 1.0f at runtime.
2024-03-06 23:04:07 +01:00
Francisco Casas
747511131d
vkd3d-shader/hlsl: Lower non-float operators for SM1.
2024-03-06 23:04:05 +01:00
Francisco Casas
a3319339e4
vkd3d-shader/hlsl: Lower casts to int using REINTERPRET instead.
...
I realized that it is better to lower casts to int to FLOOR+REINTERPET
instead of appending a FLOOR to all casts to int and assuming that this
is the case for all of them in d3dbc.c.
This in case we introduce new passes in the future that add casts that
we forget to lower, after the lower_casts_to_bool pass.
2024-03-06 23:04:04 +01:00
Nikolay Sivov
937d76507d
vkd3d-shader/hlsl: Implement ternary operator for older vertex profiles.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56333
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-03-06 23:03:59 +01:00
Henri Verbeet
f866fb95ad
Release 1.11.
2024-03-05 20:39:45 +01:00
Henri Verbeet
22d5e24bad
vkd3d-shader: Update the chained structure list for vkd3d_shader_compile().
2024-03-05 20:39:45 +01:00
Henri Verbeet
f80ae7aef1
vkd3d-shader: Document the newly supported transformations for d3dbc and HLSL sources.
2024-03-05 20:39:45 +01:00
Henri Verbeet
0885bf3082
vkd3d-utils: Restore the \since 1.11 command on D3DReflect().
...
This was effectively dropped by 8c6f5b847b
.
2024-03-05 20:39:40 +01:00
Zebediah Figura
9177df883e
vkd3d-shader/hlsl: Write the SFI0 section and "REQUIRES_ROVS" flag when ROVs are used.
2024-03-04 22:34:46 +01:00
Henri Verbeet
5c637d68da
tests/shader_runner: Set the SPIR-V feature flags based on the runner caps.
2024-03-04 22:34:38 +01:00
Henri Verbeet
015fde5e23
tests/shader_runner: Set the vkd3d-shader API version in the Vulkan runner.
2024-03-04 22:34:37 +01:00
Henri Verbeet
5552be552b
vkd3d-compiler: Compile SPIR-V shaders with the int64 and float64 features.
2024-03-04 22:34:30 +01:00
Henri Verbeet
6acca1f85e
vkd3d-shader: Add documentation for the INT64 and FLOAT64 feature flags.
2024-03-04 22:34:24 +01:00
Giovanni Mascellani
500b61c383
tests: Test how constant folding works on SM1.
2024-02-26 23:04:08 +01:00
Henri Verbeet
0914561f85
vkd3d: Store a D3D12_RESOURCE_DESC structure in struct vkd3d_image_resource_create_info.
...
Like we did before commit 6d4782ed7f
. That
commit somehow managed to change the "desc" field from
D3D12_RESOURCE_DESC to D3D12_RESOURCE_DESC1, but that breaks the ABI.
2024-02-26 23:04:05 +01:00
Victor Chiletto
7e27ae73af
vkd3d-shader/hlsl: Fix hlsl_ir_resource_store::resource cleanup.
2024-02-26 23:03:51 +01:00
Conor McCarthy
c083b1d0fc
vkd3d-shader/dxil: Implement DX intrinsic GetDimensions.
2024-02-26 23:03:48 +01:00
Conor McCarthy
292bbdefbf
vkd3d-shader/dxil: Move the resource kind helper functions up.
2024-02-26 23:03:46 +01:00
Henri Verbeet
d65f331efc
configure: Build with -Wwrite-strings.
...
libs/vkd3d-shader/hlsl.c: In function ‘declare_predefined_types’:
libs/vkd3d-shader/hlsl.c:3408:10: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
{"technique", 9},
^~~~~~~~~~~
...
programs/vkd3d-compiler/main.c: In function ‘parse_formatting’:
programs/vkd3d-compiler/main.c:303:10: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
{"colour", VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR},
^~~~~~~~
...
macOS tigetstr() takes a non-const char *, so account for that as well.
2024-02-22 22:46:29 +01:00
Henri Verbeet
7029d821be
configure: Build with -Wtype-limits.
...
libs/vkd3d-shader/tpf.c: In function ‘write_sm4_unary_op_with_two_destinations’:
libs/vkd3d-shader/tpf.c:4489:24: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]
assert(1 - dst_idx >= 0);
^~
libs/vkd3d-shader/tpf.c: In function ‘write_sm4_binary_op_with_two_destinations’:
libs/vkd3d-shader/tpf.c:4549:24: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]
assert(1 - dst_idx >= 0);
^~
2024-02-22 22:46:22 +01:00
Henri Verbeet
d155071f22
configure: Build with -Wshift-overflow=2.
2024-02-22 22:46:16 +01:00
Henri Verbeet
1ed4767765
configure: Build with -Wempty-body.
2024-02-22 22:46:11 +01:00
Henri Verbeet
773f02d82f
vkd3d: Disable "robustBufferAccess2" as well when we disable "robustBufferAccess".
...
From the validation layers: "If robustBufferAccess2 is enabled then
robustBufferAccess must also be enabled
(https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkPhysicalDeviceRobustness2FeaturesEXT-robustBufferAccess2-04000 )"
2024-02-22 22:45:46 +01:00
Conor McCarthy
ba4bd651e5
vkd3d-shader/dxil: Implement DX intrinsics SampleCmp and SampleCmpLevelZero.
2024-02-22 22:45:36 +01:00
Conor McCarthy
2330ffdeda
vkd3d-shader/dxil: Implement DX intrinsics SampleBias and SampleLevel.
2024-02-22 22:45:34 +01:00
Zebediah Figura
87b1de94da
vkd3d-shader/hlsl: Check the resource format for UAVs also in hlsl_types_are_equal().
...
Spotted by Henri Verbeet.
2024-02-22 22:45:31 +01:00
Nikolay Sivov
5474d91804
vkd3d-shader/fx: Write DepthStencilView types.
2024-02-22 22:45:27 +01:00
Nikolay Sivov
371be3b60a
vkd3d-shader/hlsl: Add DepthStencilView object type.
2024-02-22 22:45:26 +01:00
Nikolay Sivov
9632adaaec
vkd3d-shader/fx: Handle fx_4+ UAV types.
2024-02-22 22:45:24 +01:00
Nikolay Sivov
e5f4f60214
vkd3d-shader/fx: Handle fx_4+ texture types.
2024-02-22 22:45:23 +01:00
Nikolay Sivov
a6057a1365
vkd3d-shader/fx: Add initial support for writing object variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-02-22 22:45:22 +01:00
Nikolay Sivov
c2b1714c5c
vkd3d-shader/hlsl: Add RenderTargetView object type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-02-22 22:45:21 +01:00
Giovanni Mascellani
9c678532a7
vkd3d-shader/ir: Dump the domination relationship.
2024-02-22 22:45:16 +01:00
Giovanni Mascellani
04c2852c1a
vkd3d-shader/ir: Compute the domination relationship.
2024-02-22 22:45:15 +01:00
Giovanni Mascellani
2573d86ccf
vkd3d-shader/ir: Dump the control flow graph in the GraphViz format.
2024-02-22 22:45:14 +01:00
Giovanni Mascellani
da037b61ba
vkd3d-shader/ir: Build a representation of the control flow graph.
2024-02-22 22:45:13 +01:00
Conor McCarthy
1dffc281c9
vkd3d-shader/dxil: Implement DX intrinsic RawBufferStore.
2024-02-22 22:45:08 +01:00
Conor McCarthy
cab8b781ab
vkd3d-shader/dxil: Handle raw and structured buffers in sm6_parser_emit_dx_buffer_store().
2024-02-22 22:45:07 +01:00
Conor McCarthy
ce1875c435
vkd3d-shader/dxil: Implement DX intrinsic BufferStore.
2024-02-22 22:45:06 +01:00
Conor McCarthy
b447a725ec
tests/shader-runner: Add a test for a signed int structured buffer UAV.
...
Check for backend type mismatches resulting from the absence of
signedness in SM 6.
2024-02-22 22:45:05 +01:00
Conor McCarthy
9180ea6591
tests/shader-runner: Add a test for a signed int typed buffer UAV.
...
Check for backend type mismatches resulting from the absence of
signedness in SM 6.
2024-02-22 22:45:04 +01:00
Conor McCarthy
081c9dbc96
tests/shader-runner: Support structured buffer UAVs.
2024-02-22 22:45:02 +01:00
Henri Verbeet
edc8e38bd9
ci: Enable colour output for the tests.
...
Autodetection doesn't work, but gitlab does in fact support colour
output. Perhaps more importantly, the "Scroll to next failure" feature
essentially scans the output for red text.
2024-02-21 23:23:34 +01:00
Petrichor Park
02a3667822
vkd3d-shader/hlsl: Implement atan and atan2.
...
Also narrows some more todos on the tests.
2024-02-21 23:23:13 +01:00
Petrichor Park
69294c290b
vkd3d-shader/hlsl: Implement acos and asin trig intrinsics.
...
Tests have already been implemented in 92044d5e; this commit also reduces
the scope of some of the todos (because now they're implemented!).
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55154
2024-02-21 23:23:11 +01:00
Henri Verbeet
d4223a03c8
vkd3d-shader/hlsl: Replace HLSL_MODIFIER_RASTERIZER_ORDERED with a hlsl_type.e.resource flag.
2024-02-21 23:23:08 +01:00
Henri Verbeet
49d14613a5
vkd3d-shader/hlsl: Introduce hlsl_type.e.resource.
2024-02-21 23:23:06 +01:00
Conor McCarthy
d9c68ee481
vkd3d-shader/dxil: Handle resource descriptor additional tag/value pairs.
...
These are tag/value pairs, and the current code only works if an element
type or element stride pair is present at index zero.
2024-02-20 22:50:19 +01:00
Conor McCarthy
96a0685ba6
vkd3d-shader/dxil: Implement DX intrinsic AtomicCompareExchange.
2024-02-20 22:50:16 +01:00
Conor McCarthy
560c9413c3
vkd3d-shader/dxil: Implement DX intrinsic AtomicBinOp.
2024-02-20 22:50:15 +01:00
Conor McCarthy
3906c12476
tests/shader-runner: Add tests for UAV atomic ops.
2024-02-20 22:50:13 +01:00
Conor McCarthy
a04f16918f
tests/shader-runner: Support scalar signed int probe values.
2024-02-20 22:50:12 +01:00
Henri Verbeet
54142eb0bd
tests/shader_runner: Print information about the run configuration in run_shader_tests().
2024-02-19 21:12:33 +01:00
Henri Verbeet
f15a0ace3e
tests/shader_runner: Print a summary of the runner capabilities in run_shader_tests().
2024-02-19 21:12:32 +01:00
Henri Verbeet
930fbcbb26
tests/shader_runner: Pass the runner capabilities to run_shader_tests().
...
Allowing these to be checked by run_shader_tests() itself, instead of
reimplementing those checks in each individual runner.
2024-02-19 21:12:30 +01:00
Evan Tang
7b41abaa1b
vkd3d-shader/hlsl: Support SV_PrimitiveID in pixel shaders.
2024-02-19 21:12:23 +01:00
Francisco Casas
8df34fce62
vkd3d-shader/hlsl: Emit fixme on non-direct resource stores.
...
Co-authored-by: Giovanni Mascellani <gmascellani@codeweavers.com >
These may happen when storing to structured buffers, and we are not
handling them properly yet. The included test reaches unreacheable code
before this patch.
Storing to buffers is complicated since we need to split the index
chain in two paths:
- The path within the variable where the resource is.
- The subpath to the part of the resource element that is being stored
to.
For now, we will emit a fixme when the index chain in the lhs is not a
direct resource access.
2024-02-19 21:12:14 +01:00
Nikolay Sivov
315b7c5a42
vkd3d-shader/fx: Do not align structured data section.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-02-19 21:12:09 +01:00
Nikolay Sivov
c107ec03b8
vkd3d-shader/fx: Add initial support for writing buffers descriptions.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-02-19 21:12:08 +01:00
Nikolay Sivov
656c068b32
vkd3d-shader/fx: Do not align strings for fx_4/fx_5 profiles.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-02-19 21:12:07 +01:00
Nikolay Sivov
d5f562d994
vkd3d-shader/fx: Use variable pointer in write_group().
...
The helper will need to access group annotations later, and these are
available for variables.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-02-19 21:12:05 +01:00
Francisco Casas
c249461e97
vkd3d-shader/hlsl: Parse Buffer types.
2024-02-19 21:11:55 +01:00
Francisco Casas
4fe9ab0a90
tests/shader-runner: Change probe directive syntax on shader_test files.
...
For consistency with the previous commit.
2024-02-19 21:11:53 +01:00
Francisco Casas
b08be04465
tests/shader-runner: Change resource declaration syntax on shader_test files.
...
On shader_test files, now resources should be declared this way:
[texture n] -> [srv n]
[srv buffer n] -> [srv n]
[uav n] -> [uav n]
[uav buffer n] -> [uav n]
[vertex buffer n] -> [vb n]
[render target n] -> [rtv n]
The dimension (buffer or 2D) is now specified as an additional parameter
in the "size" directive:
For 2D resources:
size (n, m) -> size (2d, n, m)
For buffers:
size (n, 1) -> size (buffer, n)
2024-02-19 21:11:52 +01:00
Francisco Casas
4d855611b7
tests/shader-runner: Support SRV buffers.
2024-02-19 21:11:51 +01:00
Francisco Casas
22a0f14a2f
tests/shader-runner: Separate resource_type into type and dimension.
...
If in the same shader_test file we have both a [buffer uav n] and a
[uav n] with the same slot "n", we want the last one to override the
first one instead of passing both resources to the backends.
Same for [buffer srv n] and [texture n] after we introduce SRV buffers.
2024-02-19 21:11:49 +01:00
Francisco Casas
e1c759e1c9
vkd3d-shader/hlsl: Record valid methods in object_methods[].
...
Also, call hlsl_sampler_dim_count() and hlsl_offset_dim_count() after
type checking, to avoid reaching unreacheable cases.
2024-02-19 21:11:46 +01:00
Henri Verbeet
4735ff48d1
tests: Disable buffering of stdout.
...
Both to avoid it getting lost in case of crashes, and to properly interleave
test output and debug output in the log files.
2024-02-15 23:29:52 +01:00
Evan Tang
ee867bd470
vkd3d-shader/hlsl: Parse rasteriser-ordered view types.
2024-02-15 23:29:46 +01:00
Francisco Casas
e3ed5ac77e
vkd3d-shader/hlsl: Lower casts to int for SM1.
2024-02-15 23:29:39 +01:00
Francisco Casas
e62bd1927e
tests: Add simple test for implicit cast to int.
2024-02-15 23:29:39 +01:00
Francisco Casas
4b5c7e3721
vkd3d-shader/d3dbc: Implement casts from ints to floats as a MOV.
...
For temporary registers, SM1-SM3 integer types are internally
represented as floating point, so, in order to perform a cast
from ints to floats we need a mere MOV.
For constant integer registers "iN" there is no operation for casting
from a floating point register to them. For address registers "aN", and
the loop counting register "aL", vertex shaders have the "mova" operation
but we haven't used these registers in any way yet.
We probably would want to introduce these as synthetic variables
allocated in a special register set. In that case we have to remember to
use MOVA instead of MOV in the store operations, but they shouldn't be src
or dst of CAST operations.
Regarding constant integer registers, in some shaders, constants are
expected to be received formatted as an integer, such as:
int m;
float4 main() : sv_target
{
float4 res = {0, 0, 0, 0};
for (int k = 0; k < m; ++k)
res += k;
return res;
}
which compiles as:
// Registers:
//
// Name Reg Size
// ------------ ----- ----
// m i0 1
//
ps_3_0
def c0, 0, 1, 0, 0
mov r0, c0.x
mov r1.x, c0.x
rep i0
add r0, r0, r1.x
add r1.x, r1.x, c0.y
endrep
mov oC0, r0
but this only happens if the integer constant is used directly in an
instruction that needs it, and as I said there is no instruction that
allows converting them to a float representation.
Notice how a more complex shader, that performs operations with this
integer variable "m":
int m;
float4 main() : sv_target
{
float4 res = {0, 0, 0, 0};
for (int k = 0; k < m * m; ++k)
res += k;
return res;
}
gives the following output:
// Registers:
//
// Name Reg Size
// ------------ ----- ----
// m c0 1
//
ps_3_0
def c1, 0, 0, 1, 0
defi i0, 255, 0, 0, 0
mul r0.x, c0.x, c0.x
mov r1, c1.y
mov r0.y, c1.y
rep i0
mov r0.z, r0.x
break_ge r0.y, r0.z
add r1, r0.y, r1
add r0.y, r0.y, c1.z
endrep
mov oC0, r1
Meaning that the uniform "m" is just stored as a floating point in
"c0", the constant integer register "i0" is just set to 255 (hoping
it is a high enough value) using "defi", and the "break_ge"
involving c0 is used to break from the loop.
We could potentially use this approach to implement loops from SM3
without expecting the variables being received as constant integer
registers.
According to the D3D documentation, for SM1-SM3 constant integer
registers are only used by the 'loop' and 'rep' instructions.
2024-02-15 23:29:37 +01:00
Conor McCarthy
6d4782ed7f
vkd3d: Implement ID3D12Resource2.
2024-02-15 23:29:33 +01:00
Conor McCarthy
99947deeb7
tests/d3d12: Add a test for zero description count in test_resource_allocation_info().
2024-02-15 23:29:32 +01:00
Conor McCarthy
4668271872
vkd3d: Return DXGI_ERROR_NOT_FOUND from GetProtectedResourceSession().
2024-02-15 23:29:32 +01:00
Conor McCarthy
e38f3995fd
tests/d3d12: Add tests for GetProtectedResourceSession().
2024-02-15 23:29:30 +01:00
Evan Tang
628acb6b96
tests: Add some tests for rasteriser-ordered views.
2024-02-14 21:48:53 +01:00
Henri Verbeet
f614d98759
tests/shader_runner: Allow UAV resources to be created without initial data.
...
We can e.g. initialise these with a shader.
2024-02-14 21:48:51 +01:00
Conor McCarthy
7d51a7d99c
tests/shader-runner: Add a 64-bit switch test.
2024-02-14 21:48:44 +01:00
Conor McCarthy
6e634ad690
vkd3d-shader: Raise the instruction parameter allocation size if necessary.
...
Monolithic switch instructions have no definite case count limit.
2024-02-14 21:48:38 +01:00
Conor McCarthy
55c28e94f8
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_vselect().
2024-02-14 21:48:32 +01:00
Conor McCarthy
c89627ec73
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_store().
2024-02-14 21:48:31 +01:00
Conor McCarthy
4c7d956bdb
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_load().
2024-02-14 21:48:30 +01:00
Conor McCarthy
04a9340164
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_extractval().
2024-02-14 21:48:28 +01:00
Conor McCarthy
3c1ad054f0
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_cmp2().
2024-02-14 21:48:26 +01:00
Conor McCarthy
cddb696499
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_cast().
2024-02-14 21:48:25 +01:00
Conor McCarthy
76455580e2
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_texture_load().
2024-02-14 21:48:24 +01:00
Conor McCarthy
d04a8ea893
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_split_double().
2024-02-14 21:48:23 +01:00
Conor McCarthy
8c3512bd10
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_sincos().
2024-02-14 21:48:22 +01:00
Conor McCarthy
cc5293bb4f
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_buffer_load().
2024-02-14 21:48:21 +01:00
Conor McCarthy
6e3e200e96
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_load_input().
2024-02-14 21:48:20 +01:00
Conor McCarthy
eb1bfaa821
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_tertiary().
2024-02-14 21:48:19 +01:00
Conor McCarthy
1a2de25273
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_cbuffer_load().
2024-02-14 21:48:18 +01:00
Conor McCarthy
0a23c81196
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_binary().
2024-02-14 21:48:17 +01:00
Conor McCarthy
83e6ee4b3d
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_unary().
2024-02-14 21:48:14 +01:00
Conor McCarthy
217eb06f37
vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_binop().
2024-02-14 21:48:13 +01:00
Conor McCarthy
5a76cedf87
vkd3d-shader/dxil: Implement DX intrinsic SampleGrad.
2024-02-14 21:48:08 +01:00
Conor McCarthy
5178fb7364
vkd3d-shader/dxil: Implement DX intrinsic Sample.
2024-02-14 21:48:06 +01:00
Conor McCarthy
0a3eb61170
vkd3d-shader/dxil: Load sampler descriptors.
2024-02-14 21:48:03 +01:00
Henri Verbeet
0f3a42c34b
tests: Implement check_requirements() for the OpenGL shader runner.
2024-02-13 22:51:36 +01:00
Conor McCarthy
aac3916fcf
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS13 in CheckFeatureSupport().
2024-02-13 22:51:28 +01:00
Conor McCarthy
7b4e731aa5
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS12 in CheckFeatureSupport().
2024-02-13 22:51:28 +01:00
Conor McCarthy
68663b4fef
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS11 in CheckFeatureSupport().
2024-02-13 22:51:28 +01:00
Conor McCarthy
a0bb055ad2
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS10 in CheckFeatureSupport().
2024-02-13 22:51:28 +01:00
Francisco Casas
6a8939e19f
tests: Remove [require] directives for tests that use int and bool uniforms.
...
These tests should actually compile and run in SM1, which is possible
if we pass the int and uint uniforms in the expected IEEE 754 float
format for SM1 shaders.
Also, bools should be passed as 1.0f or 0.0f to SM1.
2024-02-13 22:51:23 +01:00
Francisco Casas
22c47e57f5
tests/shader-runner: Introduce "if" qualifier.
...
When the "if" qualifier is added to a directive, the directive is
skipped if the shader->minimum_shader_model is not included in the
range.
This can be used on the "probe" directives for tests that have different
expected results on different shader models, without having to resort to
[require] blocks.
2024-02-13 22:51:22 +01:00
Francisco Casas
faec42e8a1
tests: Don't ignore SM1 on a non-const-indexing.shader_test test.
...
The previous [require] block makes us skip the test for SM4.
2024-02-13 22:51:20 +01:00
Francisco Casas
0f9f5269e9
tests/vkd3d-shader: Set uninitialized uniforms to a value.
...
Avoids a potential source of non-determinism because the padding bytes
between uniforms could be left uninitialized.
2024-02-13 22:51:19 +01:00
Henri Verbeet
5eba031fa1
vkd3d: Cast DWORD flags to uint32_t in debug traces.
2024-02-09 22:47:51 +01:00
Giovanni Mascellani
2359ebc976
tests: Release the code blob in test_thread_id() (Valgrind).
2024-02-09 22:47:47 +01:00
Giovanni Mascellani
5905489b7f
vkd3d-shader/hlsl: Free the selector in postfix_expr (Valgrind).
2024-02-09 22:47:46 +01:00
Giovanni Mascellani
a10de1b239
vkd3d-shader/hlsl: Free the individual attributes in func_prototype (Valgrind).
2024-02-09 22:47:45 +01:00
Giovanni Mascellani
049327a270
vkd3d-shader/hlsl: Free the parse initializer in attribute (Valgrind).
2024-02-09 22:47:44 +01:00
Giovanni Mascellani
521082afbe
vkd3d-shader/hlsl: Free variable identifiers in primary_expr (Valgrind).
2024-02-09 22:47:42 +01:00
Henri Verbeet
5c917552c9
vkd3d: Use PRIuPTR for SIZE_T variables in debug traces.
2024-02-07 22:59:45 +01:00
Henri Verbeet
8ddca1ebaf
vkd3d: Get rid of vkd3d_atomic_decrement().
2024-02-07 22:59:37 +01:00
Henri Verbeet
6e439045e8
vkd3d: Get rid of vkd3d_atomic_increment().
2024-02-07 22:59:37 +01:00
Conor McCarthy
18f73c1c4d
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS9 in CheckFeatureSupport().
2024-02-07 22:59:32 +01:00
Conor McCarthy
8ea67b0ac6
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS8 in CheckFeatureSupport().
2024-02-07 22:59:32 +01:00
Conor McCarthy
5fd3076c67
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS7 in CheckFeatureSupport().
2024-02-07 22:59:31 +01:00
Conor McCarthy
db4a98c0d2
vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS6 in CheckFeatureSupport().
2024-02-07 22:59:31 +01:00
Giovanni Mascellani
4ba324d37c
tests: Work around a Metal bug.
...
This test currently hit a Metal bug when run on Apple Silicon with
MoltenVK and fails. We don't have an easy way to mark shader runner
tests as buggy and we're not interested in tracking that bug anyway,
so I'm just working around it.
2024-02-07 22:59:27 +01:00
Conor McCarthy
625e289574
vkd3d-shader/dxil: Handle hyperbolic trigonometric functions in sm6_parser_emit_dx_unary().
2024-02-07 22:59:23 +01:00
Conor McCarthy
c2f6985454
tests/shader-runner: Add hyperbolic trigonometry tests.
2024-02-07 22:59:22 +01:00
Conor McCarthy
c35ec4f820
vkd3d-shader/dxil: Implement DX intrinsic TextureStore.
2024-02-07 22:59:18 +01:00
Conor McCarthy
cf4ed988d0
tests/shader-runner: Add shader model 6 texture UAV tests.
...
The UAV default register allocation rules changed with SM 5.1.
2024-02-07 22:59:16 +01:00
Conor McCarthy
805a4bc1e8
tests/shader-runner: Emit descriptor ranges for consecutive resources.
...
Shader models >= 5.1 support descriptor indexing, and emit arrayed
resource declarations.
2024-02-07 22:59:15 +01:00
Conor McCarthy
efddcc9a99
vkd3d-shader/dxil: Support forward-referenced value ids.
2024-02-07 22:59:10 +01:00
Conor McCarthy
7f87a3e5fc
vkd3d-shader/spirv: Handle the ACOS, ASIN and ATAN instructions in spirv_compiler_emit_ext_glsl_instruction().
2024-02-06 23:09:55 +01:00
Conor McCarthy
19d23fa696
vkd3d-shader/dxil: Handle inverse trigonometric functions in sm6_parser_emit_dx_unary().
2024-02-06 23:09:53 +01:00
Petrichor Park
e6746cbbdc
tests/shader-runner: Add tests for atan and atan2 trig intrinsics.
...
Extracted by Conor McCarthy from an HLSL patch, with ulp values
doubled in some cases to cover SM 6 results.
2024-02-06 23:09:48 +01:00
Petrichor Park
92044d5e41
tests/shader-runner: Add tests for acos and asin trig intrinsics.
...
Extracted by Conor McCarthy from an HLSL patch, and modified to include
SM 6 variations.
2024-02-06 23:09:46 +01:00
Henri Verbeet
2f9906ee90
vkd3d-utils: Use PRIuPTR for SIZE_T variables in debug traces.
2024-02-06 23:09:41 +01:00
Henri Verbeet
51cdddb961
vkd3d: Introduce a debug helper for GPU descriptor handles.
2024-02-06 23:07:43 +01:00
Henri Verbeet
532e902a56
vkd3d-common: Get rid of InterlockedDecrement().
2024-02-06 23:07:36 +01:00
Henri Verbeet
c64921e79b
vkd3d-common: Get rid of InterlockedIncrement().
2024-02-06 23:07:36 +01:00
Giovanni Mascellani
51f13391e6
vkd3d-shader/ir: Introduce a simple control flow graph structurizer.
...
The structurizer is implemented along the lines of what is usually called
the "structured program theorem": the control flow is completely
virtualized by mean of an additional TEMP register which stores the
block index which is currently running. The whole program is then
converted to a huge switch construction enclosed in a loop, executing
at each iteration the appropriate block and updating the register
depending on block jump instruction.
The algorithm's generality is also its major weakness: it accepts any
input program, even if its CFG is not reducible, but the output
program lacks any useful convergence information. It satisfies the
letter of the SPIR-V requirements, but it is expected that it will
be very inefficient to run on a GPU (unless a downstream compiler is
able to devirtualize the control flow and do a proper convergence
analysis pass). The algorithm is however very simple, and good enough
to at least pass tests, enabling further development. A better
alternative is expected to be upstreamed incrementally.
Side note: the structured program theorem is often called the
Böhm-Jacopini theorem; Böhm and Jacopini did indeed prove a variation
of it, but their algorithm is different from what is commontly attributed
to them and implemented here, so I opted for not using their name.
2024-02-06 23:07:07 +01:00
Giovanni Mascellani
19aef21369
vkd3d-shader/ir: Handle PHI nodes when materializing SSA registers.
...
PHI nodes cannot be used with TEMP registers, so they have to be
converted to MOV/MOVC nodes and moved before the BRANCH node.
2024-02-06 23:07:03 +01:00
Giovanni Mascellani
e0d3e9c376
vkd3d-shader/ir: Materialize SSA registers to temporaries.
...
For simplicity PHI nodes are not currently handled.
The goal for this pass is to make the CFG structurizer simpler, because
it doesn't have to care about the more rigid rules SSA registers have
to satisfy than TEMP registers.
It is likely that the generated code will be harder for downstream
compilers to optimize and execute efficiently, so once a complete
structurizer is in place this pass should be removed, or at least
greatly reduced in scope.
2024-02-06 23:07:00 +01:00
Giovanni Mascellani
eb723a8d2b
vkd3d-shader/spirv: Support bool TEMP registers.
2024-02-06 23:06:58 +01:00
Giovanni Mascellani
49f0fd42b8
vkd3d-shader/spirv: Move bool casting helpers above register loading helpers.
2024-02-06 23:06:55 +01:00
Giovanni Mascellani
ee994e95dd
vkd3d-shader/spirv: Convert the swizzle according to the source bit width.
...
Fixes: 1f536238a8
2024-02-06 23:06:53 +01:00
Giovanni Mascellani
674f86042d
vkd3d-shader/dxil: Set the register before calling src_param_init_scalar().
...
Which uses the register to compute the appropriate swizzle.
Fixes: 1f536238a8
2024-02-06 23:06:49 +01:00
Henri Verbeet
06ddb10c40
vkd3d: Introduce a debug helper for CPU descriptor handles.
2024-02-01 22:25:36 +01:00
Henri Verbeet
feca006d6a
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_versioned_root_signature_deserializer_Release().
2024-02-01 22:25:27 +01:00
Henri Verbeet
f42411fe4a
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_versioned_root_signature_deserializer_AddRef().
2024-02-01 22:25:27 +01:00
Henri Verbeet
afd0e45cd6
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_root_signature_deserializer_Release().
2024-02-01 22:25:27 +01:00
Henri Verbeet
c2e82cf06a
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_root_signature_deserializer_AddRef().
2024-02-01 22:25:27 +01:00
Henri Verbeet
9434687c5b
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_pipeline_state_Release().
2024-02-01 22:25:27 +01:00
Henri Verbeet
c71fa87522
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_pipeline_state_AddRef().
2024-02-01 22:25:27 +01:00
Henri Verbeet
9e135f6143
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_root_signature_Release().
2024-02-01 22:25:27 +01:00
Henri Verbeet
37e8826301
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_root_signature_AddRef().
2024-02-01 22:25:27 +01:00
Jacek Caban
2ae9f18a3a
vkd3d: Use uint64_t for the size in vkd3d_gpu_va_allocator_allocate.
...
Avoids value truncation in 32-bit builds.
2024-02-01 22:25:20 +01:00
Conor McCarthy
eae4b7b4a2
vkd3d: Implement GetResourceAllocationInfo1().
2024-02-01 22:25:13 +01:00
Conor McCarthy
67b4ae658a
tests/d3d12: Add tests for GetResourceAllocationInfo1().
2024-02-01 22:25:12 +01:00
Conor McCarthy
7e84421b9c
vkd3d: Support multiple descriptions in GetResourceAllocationInfo().
2024-02-01 22:25:11 +01:00
Conor McCarthy
8d0331df6c
tests/d3d12: Test multiple descriptions in test_resource_allocation_info().
2024-02-01 22:25:10 +01:00
Conor McCarthy
92e19a7da3
vkd3d: Add ID3D12Device7 interface stubs.
2024-02-01 22:25:10 +01:00
Conor McCarthy
76fbbe980a
vkd3d: Add ID3D12Device6 interface stub.
2024-02-01 22:25:10 +01:00
Conor McCarthy
95e4222cc6
vkd3d-shader/spirv: Emit a vector bitcast if necessary in spirv_compiler_emit_load_ssa_reg().
2024-02-01 22:25:04 +01:00
Conor McCarthy
ebec0aa434
vkd3d-shader/dxil: Implement DX intrinsic TextureLoad.
2024-02-01 22:25:02 +01:00
Conor McCarthy
e6d52861e9
vkd3d-shader/dxil: Implement DX intrinsic SplitDouble.
2024-02-01 22:24:58 +01:00
Conor McCarthy
254e812b12
tests/shader-runner: Add an asuint() test to the 64-bit cast tests.
2024-02-01 22:24:57 +01:00
Evan Tang
13ac795061
tests/shader-runner: Support testing for integer pixel data.
...
Modified by Conor McCarthy to use read_uint() and read_uint4().
2024-02-01 22:24:54 +01:00
Henri Verbeet
6dea3d08b1
vkd3d: Use debugstr_hresult() in d3d12_device_mark_as_removed().
2024-02-01 00:08:39 +01:00
Henri Verbeet
920f5293e9
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_query_heap_Release().
2024-02-01 00:08:35 +01:00
Henri Verbeet
d66f61cd5f
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_query_heap_AddRef().
2024-02-01 00:08:35 +01:00
Henri Verbeet
334f60c281
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_descriptor_heap_Release().
2024-02-01 00:08:35 +01:00
Henri Verbeet
db37be2a70
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_descriptor_heap_AddRef().
2024-02-01 00:08:35 +01:00
Henri Verbeet
886c1fdcc4
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_resource_Release().
2024-02-01 00:08:35 +01:00
Henri Verbeet
84234a8875
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_resource_AddRef().
2024-02-01 00:08:35 +01:00
Henri Verbeet
201fab7d5d
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_resource_decref().
2024-02-01 00:08:35 +01:00
Henri Verbeet
a9582a7355
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_resource_incref().
2024-02-01 00:08:35 +01:00
Henri Verbeet
6f7aec58ea
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_heap_resource_destroyed().
2024-02-01 00:08:35 +01:00
Henri Verbeet
30a00160e2
vkd3d: Use vkd3d_atomic_increment_u32() in vkd3d_bind_heap_memory().
2024-02-01 00:08:35 +01:00
Henri Verbeet
06eb8e5f8c
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_heap_Release().
2024-02-01 00:08:35 +01:00
Henri Verbeet
fd385ab994
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_heap_AddRef().
2024-02-01 00:08:35 +01:00
Giovanni Mascellani
cc72a8d311
vkd3d-shader/spirv: Free binary SPIR-V code (Valgrind).
2024-02-01 00:08:28 +01:00
Giovanni Mascellani
8b11b4b37a
vkd3d-compiler: Free compilation options (Valgrind).
2024-02-01 00:08:28 +01:00
Giovanni Mascellani
896fc0c2ce
vkd3d-compiler: Exit the main function through a common code path.
2024-02-01 00:08:28 +01:00
Henri Verbeet
d38221bd68
vkd3d-shader/ir: Pass a struct vsir_program to shader_parser_get_src_params().
2024-02-01 00:08:23 +01:00
Henri Verbeet
47ec24ebad
vkd3d-shader/ir: Pass a struct vsir_program to shader_parser_get_dst_params().
2024-02-01 00:08:22 +01:00
Henri Verbeet
ced8543952
vkd3d-shader: Use vkd3d_atomic_increment_u32() in vkd3d_shader_dump_blob().
2024-02-01 00:08:18 +01:00
Henri Verbeet
fef30dac2c
vkd3d-shader/d3dbc: Do not fail parsing the shader when undeclared inputs are encountered.
...
These can be disassembled by D3DDisassemble() just fine, and perhaps
more importantly, shader model 1 vertex shaders do not require dcl_
instructions in Direct3D 8.
2024-01-29 22:33:46 +01:00
Henri Verbeet
8c6f5b847b
vkd3d-utils: Implement D3DDisassemble().
...
Very loosely based on Wine's d3dcompiler_43.
2024-01-29 22:33:44 +01:00
Henri Verbeet
4fd4ecc020
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_device_Release().
2024-01-29 22:33:40 +01:00
Henri Verbeet
7d7833f3c0
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_device_AddRef().
2024-01-29 22:33:40 +01:00
Henri Verbeet
f61891954e
vkd3d: Use vkd3d_atomic_decrement_u32() in vkd3d_instance_decref().
2024-01-29 22:33:40 +01:00
Henri Verbeet
042e269791
vkd3d: Use vkd3d_atomic_increment_u32() in vkd3d_instance_incref().
2024-01-29 22:33:40 +01:00
Giovanni Mascellani
edc406d297
vkd3d-shader/ir: Check that SSA registers are used with compatible data types.
...
Specifically, accesses are always 32 bit or always 64 bit.
2024-01-29 22:33:34 +01:00
Giovanni Mascellani
1f536238a8
vkd3d-shader: Use 64 bit swizzles for 64 bit data types in VSIR.
...
The handling of write masks and swizzles for 64 bit data types is
currently irregular: write masks are always 64 bit, while swizzles
are usually 32 bit, except for SSA registers with are 64 bit.
With this change we always use 64 bit swizzles, in order to make
the situation less surprising and make it easier to convert
registers between SSA and TEMP.
64 bit swizzles are always required to have X in their last two
components.
2024-01-29 22:33:33 +01:00
Giovanni Mascellani
5ec1825eb3
include/vkd3d-shader: Generate swizzles without a function call.
...
So they can be used when a constant expression is expected, for instance
on case labels.
2024-01-29 22:33:31 +01:00
Giovanni Mascellani
2b93aae069
vkd3d-shader: Convert write masks between 32 and 64 bit by cases.
...
There are only three cases, and while the code is longer it is also
hopefully easier to read. Moreover, an error message is casted if
we're doing something unexpected.
2024-01-29 22:33:30 +01:00
Francisco Casas
13f713f74b
vkd3d-shader/hlsl: Turn register(cX) reservations into buffer offset for SM4.
2024-01-29 22:33:27 +01:00
Francisco Casas
c7f7636534
vkd3d-shader/hlsl: Make register(cX) reservations work for SM1.
2024-01-29 22:33:25 +01:00
Francisco Casas
4791c7c23b
tests: Test register(cX) reservations.
2024-01-29 22:33:25 +01:00
Francisco Casas
d7d4c9bc90
tests: Rename register-reservations.shader_test to register-reservations-resources.shader_test.
2024-01-29 22:33:25 +01:00
Conor McCarthy
92f0b37133
vkd3d-shader/spirv: Support 64-bit source value for bitfield instructions.
2024-01-29 22:33:22 +01:00
Conor McCarthy
3bbe374ca8
vkd3d-shader/dxil: Implement DX intrinsic Tertiary.
...
IBFE and UBFE are not emitted for HLSL sources which perform bitfield
extractions, e.g. loading a value from a struct containing bitfields, or
the equivalent done with bit shifts. These instructions are probably
only emitted by the TPF -> DXIL converter, which makes them hard to test.
2024-01-29 22:33:20 +01:00
Giovanni Mascellani
026c502f31
vkd3d-shader/ir: Fixup PHI nodes when lowering switches to selection ladders.
...
A map between the blocks before and after the pass is built and then
used to fix the PHI nodes.
2024-01-29 22:33:17 +01:00
Giovanni Mascellani
378109051c
vkd3d-shader/ir: Lower monolithic switches to selection ladders.
...
PHI nodes must be fixed up after this pass, because the block references
might have become broken. For simplicitly this is not handled yet.
The goal for this pass is to make the CFG structurizer simpler, because
only conditional and unconditional branches must be supported.
Eventually this limitation might be lifted if there is advantage in
doing so.
2024-01-29 22:33:15 +01:00
Giovanni Mascellani
b97edee03d
vkd3d-shader/spirv: Emit an error if merge information is missing.
...
Instead of crashing.
2024-01-29 22:33:14 +01:00
Conor McCarthy
e08c0cfc4f
vkd3d-shader/dxil: Implement DX intrinsic RawBufferLoad.
2024-01-29 22:33:10 +01:00
Conor McCarthy
1bab93843d
vkd3d-shader/dxil: Load raw/structured buffer SRV/UAV descriptors.
2024-01-29 22:33:09 +01:00
Giovanni Mascellani
fd7d23f64b
tests: Mark a strip cut test as buggy in MoltenVK.
...
Metal, and therefore MoltenVK, doesn't support disabling primitive
restart.
2024-01-25 22:25:05 +01:00
Giovanni Mascellani
c5469c85e8
tests: Mark a depth sampling test as buggy on MoltenVK.
...
MoltenVK seems to be unable to handle tight inequalities (i.e.,
0.5 <= 0.5) properly on 16 bit depth resources.
2024-01-25 22:25:03 +01:00
Giovanni Mascellani
b6c1e6dcdf
tests: Mark the tessellation pipeline as buggy on MoltenVK.
2024-01-25 22:25:03 +01:00
Giovanni Mascellani
74a14dad28
tests: Mark geometry shaders as buggy on MoltenVK.
2024-01-25 22:25:03 +01:00
Giovanni Mascellani
586ebeafec
tests: Mark ReadFromSubresource() and WriteToSubresource() as todo on MoltenVK.
2024-01-25 22:25:03 +01:00
Giovanni Mascellani
17f3f2914e
tests: Mark a test related to instanced draws as buggy on MoltenVK.
...
I haven't been able to understand what's happening here exactly,
but it doesn't look like we're generating bad Vulkan calls.
2024-01-25 22:25:01 +01:00
Henri Verbeet
3295f0d16e
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_signature_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
13ba36bb43
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_signature_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
0ff20e6b8d
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_queue_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
cdb559c39d
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_queue_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
298dce541d
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_list_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
87f3a606d7
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_list_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
d891e5c2a0
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_allocator_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
315fce8ac5
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_allocator_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
78bb7b6760
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_fence_decref().
2024-01-25 22:24:55 +01:00
Henri Verbeet
c8122ff47e
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_fence_incref().
2024-01-25 22:24:55 +01:00
Henri Verbeet
1b4f1ac8a0
vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_fence_Release().
2024-01-25 22:24:55 +01:00
Henri Verbeet
5a2b82fbd5
vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_fence_AddRef().
2024-01-25 22:24:55 +01:00
Henri Verbeet
fee3b94563
vkd3d-shader: Start an if-block on VKD3DSIH_IFC in vkd3d_shader_scan_instruction().
2024-01-25 22:24:50 +01:00
Conor McCarthy
f954724870
vkd3d-shader/spirv: Handle the TAN instruction in spirv_compiler_emit_ext_glsl_instruction().
2024-01-25 22:24:44 +01:00
Conor McCarthy
93d7c30395
vkd3d-shader/dxil: Handle DX intrinsic Tan in sm6_parser_emit_dx_unary().
2024-01-25 22:24:43 +01:00
Conor McCarthy
2a260b8d56
vkd3d-shader/dxil: Implement DX intrinsics Cos and Sin.
2024-01-25 22:24:41 +01:00
Francisco Casas
d7ffdd7340
tests/shader_runner: Free runner->cs_source and runner->fx_source (valgrind).
2024-01-25 22:24:34 +01:00
Francisco Casas
70e1924e6e
tests/shader_runner: Free runner->input_elements in parse_test_directive() (valgrind).
2024-01-25 22:24:33 +01:00
Francisco Casas
8379e5337c
tests/shader_runner: Free extensions pointer on vulkan runner (valgrind).
2024-01-25 22:24:32 +01:00
Francisco Casas
48e61fa323
tests/shader_runner: Free runner->uniforms (valgrind).
2024-01-25 22:24:31 +01:00
Francisco Casas
969350a280
tests/shader_runner: Free params.data on test directives (valgrind).
2024-01-25 22:24:30 +01:00
Francisco Casas
8f9b48c455
tests/shader_runner: Pass a pointer to the data when creating uav buffers in d3d12.
...
The implementation of upload_buffer_data_with_states(), unlike the
implementation of upload_texture_data_with_states(), does not expect a
pointer to a D3D12_SUBRESOURCE_DATA, but rather, a direct pointer to the
data.
2024-01-25 22:24:29 +01:00
Francisco Casas
cec45da45b
vkd3d-shader/ir: Update flatten_control_flow_constructs() comment.
2024-01-25 22:24:27 +01:00
Conor McCarthy
8ae69c745b
vkd3d-shader/spirv: Handle thread group UAV barriers.
2024-01-25 22:24:23 +01:00
Conor McCarthy
18e9148f58
vkd3d-shader/spirv: Include Uniform in the memory semantics for UAV barriers.
...
The UniformMemory semantic applies the constraints to Uniform storage
class memory, which matches how UAV variables are declared.
2024-01-25 22:24:22 +01:00
Conor McCarthy
adfbecef3c
vkd3d-shader/spirv: Handle globally coherent UAVs.
2024-01-25 22:24:20 +01:00
Henri Verbeet
766f5f039b
vkd3d: Use debugstr_hresult() in vkd3d_serialize_versioned_root_signature().
2024-01-24 22:38:42 +01:00
Henri Verbeet
30113c098d
vkd3d: Use debugstr_hresult() in vkd3d_serialize_root_signature().
2024-01-24 22:38:42 +01:00
Henri Verbeet
a86a21667c
vkd3d: Use debugstr_hresult() in vkd3d_create_device().
2024-01-24 22:38:42 +01:00
Henri Verbeet
ad08cbc390
vkd3d: Use debugstr_hresult() in vkd3d_uav_clear_state_init().
2024-01-24 22:38:42 +01:00
Henri Verbeet
1599de9a0d
vkd3d: Use debugstr_hresult() in d3d12_pipeline_state_init_compute().
2024-01-24 22:38:42 +01:00
Henri Verbeet
c5b5621e28
vkd3d: Use debugstr_hresult() in d3d12_pipeline_state_find_and_init_uav_counters().
2024-01-24 22:38:42 +01:00
Henri Verbeet
9c1e661ae3
vkd3d: Use debugstr_hresult() in vkd3d_create_compute_pipeline().
2024-01-24 22:38:42 +01:00
Henri Verbeet
eabcaf15fb
vkd3d-shader/ir: Use vsir_instruction_is_dcl() in vsir_validate_instruction().
2024-01-24 22:38:36 +01:00
Henri Verbeet
365ad56888
vkd3d-shader/ir: Get rid of shader_instruction_is_dcl().
2024-01-24 22:38:34 +01:00
Giovanni Mascellani
d304422a34
tests: Mark count buffers as buggy on MoltenVK.
...
They require Vulkan indirect draw count extension.
2024-01-24 22:38:28 +01:00
Giovanni Mascellani
5d4edba925
tests: Mark a timestamp query test as buggy on MoltenVK.
...
The generated Vulkan calls look right and do not trigger any
validation error, but the returned timestamp is 0. A valid
timestamp is returned if the CopyResource() call is commented,
or the second EndQuery() call is moved before CopyResource(),
or the first EndQuery() call is commented. I am not seeing any
sensible pattern here, so I guess there is just a bug in
MoltenVK.
2024-01-24 22:38:26 +01:00
Giovanni Mascellani
66cd2af188
tests: Mark clip distance as unsupported on MoltenVK.
...
At least for tessellation and geometry shaders.
2024-01-24 22:38:23 +01:00
Giovanni Mascellani
9a83e568b4
tests: Mark cull distance as buggy on MoltenVK.
...
The generated MSL code is not accepted by the Metal runtime, and
it looks wrong anyway.
2024-01-24 22:38:19 +01:00
Giovanni Mascellani
60e0246436
tests: Skip unbounded descriptor ranges tests when they're unsupported.
...
They are unsupported if the Vulkan descriptor indexing extension
is not available; on MoltenVK it is known to be buggy, so it is
disabled.
2024-01-24 22:38:18 +01:00
Giovanni Mascellani
711ce4e65d
tests: Mark loading from stencil as buggy on MoltenVK.
...
Specifically, MoltenVK seems to be able to load from stencil, but
the specific replicating swizzle (repeating the stencil value on
all the channels) is not honored. The stencil value is read only
on the red channel.
2024-01-24 22:38:15 +01:00
Conor McCarthy
54f6e6dd67
vkd3d-shader/spirv: Check for FEATURE_FLOAT64 when double precision use is flagged.
2024-01-24 22:38:09 +01:00
Conor McCarthy
6446b6ea21
vkd3d-shader: Introduce VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64.
2024-01-24 22:38:09 +01:00
Conor McCarthy
e973271a40
vkd3d-shader/spirv: Handle the ISINF and ISNAN instructions in spirv_compiler_emit_alu_instruction().
2024-01-24 22:38:04 +01:00
Conor McCarthy
cd674d593e
vkd3d-shader/spirv: Implement the ISFINITE instruction.
2024-01-24 22:38:03 +01:00
Conor McCarthy
35d46cf3d9
tests/shader-runner: Add tests for floating point special values.
2024-01-24 22:38:00 +01:00
Conor McCarthy
41cce4cbf1
vkd3d-shader/dxil: Handle floating point special value comparisons in sm6_parser_emit_dx_unary().
2024-01-24 22:37:59 +01:00
Zebediah Figura
0f46e7bbad
tests: Test signature reflection via D3DReflect().
...
Ported from Wine.
2024-01-24 22:37:53 +01:00
Zebediah Figura
d1be80e08d
tests: Test VKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_MAP_SEMANTIC_NAMES.
2024-01-24 22:37:53 +01:00
Zebediah Figura
579e262d98
vkd3d-utils: Implement input and output signature reflection.
2024-01-24 22:37:53 +01:00
Zebediah Figura
53bd1f5419
vkd3d-utils: Add D3DReflect().
2024-01-24 22:37:53 +01:00
Zebediah Figura
e73ba2a4c3
include: Add vkd3d_d3d12shader.idl.
2024-01-24 22:37:53 +01:00
Francisco Casas
1c73513425
tests: Use the vulkan runner to run SM1 compilation tests.
...
At the current moment this is a little odd because for SM1 [test]
directives are skipped, and the [shader] directives are not executed by
the shader_runner_vulkan.c:compile_shader() but by the general
shader_runner.c:compile_shader(). So in principle it is a little weird
that we go through the vulkan runner.
But fret not, because in the future we plan to make the parser agnostic
to the language of the tests, so we will get rid of the general
shader_runner.c:compile_shader() function and instead call a
runner->compile_shader() function, defined for each runner. Granted,
most of these may call a generic implementation that uses native
compiler in Windows, and vkd3d-shader on Linux, but it would be more
conceptually correct.
2024-01-24 22:37:44 +01:00
Francisco Casas
b92f6c448a
vkd3d-shader/ir: Lower texkill instructions to discard_nz.
2024-01-24 22:37:41 +01:00
Francisco Casas
7e75ac63a1
vkd3d-shader/d3dbc: Emit fixme for HLSL_RESOURCE_SAMPLE_LOD.
...
Currently, HLSL_RESOURCE_SAMPLE_LOD is not implemented for d3dbc,
but we are incorrectly writting a texld instruction to handle it.
This causes SM1 tests with the vulkan backend (in following patches)
to fail if VKD3D_SHADER_CONFIG="force_validation" is enabled.
For now a fixme is emited in these cases.
2024-01-24 22:37:38 +01:00
Francisco Casas
671f4ec2b2
tests/shader-runner: Call each runner only once.
...
If the runners require multiple calls to run_shader_tests() for
different shader model ranges, these are moved inside the sole runner
call.
For the same reason, the trace() messages are also moved inside the
runner calls.
2024-01-24 22:37:34 +01:00
Francisco Casas
79de3ec766
tests/shader-runner: Support reading multiple model range args for qualifiers.
...
We can now pass (sm<4) and (sm>=4) to "fail" and "todo" qualifiers, and
we can use multiple of these qualifier arguments using "&" for AND and
"|" for OR.
examples:
todo(sm>=4 & sm<6)
todo(sm<4 | sm>6)
parenthesis are not supported.
Adding additional model ranges for the tests, if we need them, should be
easier now, since they only have to be added to the "valid_args" array.
2024-01-24 22:37:30 +01:00
Henri Verbeet
bf628f0c74
vkd3d-shader/ir: Store block names in struct vsir_program.
2024-01-23 20:27:35 +01:00
Henri Verbeet
f3c7d2d05c
vkd3d-shader/ir: Store the block count in struct vsir_program.
2024-01-23 20:27:34 +01:00
Henri Verbeet
98c6e85b33
vkd3d-shader/ir: Store control point counts in struct vsir_program.
2024-01-23 20:27:32 +01:00
Henri Verbeet
e4cc4a336e
vkd3d: Use debugstr_hresult() in vkd3d_init_null_resources().
2024-01-23 20:27:28 +01:00
Henri Verbeet
d4b329e628
vkd3d: Use debugstr_hresult() in vkd3d_join_thread().
2024-01-23 20:27:28 +01:00
Henri Verbeet
e965701776
vkd3d: Use debugstr_hresult() in d3d12_device_init().
2024-01-23 20:27:28 +01:00
Henri Verbeet
8dc1239e14
vkd3d: Use debugstr_hresult() in vkd3d_create_vk_device().
2024-01-23 20:27:28 +01:00
Henri Verbeet
af160ef0c4
vkd3d: Use debugstr_hresult() in vkd3d_instance_init().
2024-01-23 20:27:28 +01:00
Conor McCarthy
e4660fe0e6
vkd3d-shader/spirv: Emit DISCARD as a function call.
2024-01-23 20:26:59 +01:00
Conor McCarthy
367a06d748
vkd3d-shader/dxil: Use strcmp() to find the handle type.
...
We use strcmp() on the same type name elsewhere, and case-insensitive
matching does not seem necessary.
2024-01-23 20:26:53 +01:00
Conor McCarthy
1cca18a228
vkd3d-shader/dxil: Use strcmp() to find function names.
...
Function names are case-sensitive.
2024-01-23 20:26:52 +01:00
Conor McCarthy
4dec25cbde
vkd3d-shader/dxil: Use strcmp() to check the entry point name.
...
Function names are case-sensitive.
2024-01-23 20:26:50 +01:00
Zebediah Figura
57c4a13024
tests: Add tests for valid conditional types.
2024-01-23 20:26:47 +01:00
Zebediah Figura
a8b0c03912
vkd3d-shader/hlsl: Always cast to bool in if() statements.
...
We emit sm4 if_nz for these, but that does a bitwise comparison to zero, which is wrong for floats.
2024-01-23 20:26:46 +01:00
Zebediah Figura
183172eff4
vkd3d-shader/hlsl: Validate that condition expressions are numeric.
2024-01-23 20:26:45 +01:00
Zebediah Figura
09220edd21
vkd3d-shader/hlsl: Validate the condition data type for loops as well.
2024-01-23 20:26:44 +01:00
Zebediah Figura
c18a349a3f
vkd3d-shader/hlsl: Copy some missing fields in hlsl_type_clone().
2024-01-23 20:26:42 +01:00
Giovanni Mascellani
de9725b6ba
vkd3d-shader/ir: Remove DCL_TEMPS instructions.
...
We have to do work to keep it updated across passes and we never read it.
2024-01-23 20:26:38 +01:00
Giovanni Mascellani
4b869f73bb
vkd3d-shader/ir: Run tracing and validation for DXIL code too.
2024-01-23 20:26:36 +01:00
Conor McCarthy
6df725718a
vkd3d-shader/ir: Refactor return code checking in vkd3d_shader_normalise().
...
We started with only one or two of these but it has become excessive.
Patch originally written by Conor McCarthy and updated by Giovanni Mascellani.
2024-01-23 20:26:34 +01:00
Conor McCarthy
b3903636f7
vkd3d-shader/dxil: Implement DX intrinsic Binary.
2024-01-23 20:26:29 +01:00
Conor McCarthy
6c71cd5a72
vkd3d-shader/dxil: Add an operand type code for the return type.
2024-01-23 20:26:28 +01:00
Nikolay Sivov
0117e4fb7e
vkd3d-shader/fx: Add initial support for writing passes for fx_2_0.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-23 20:26:22 +01:00
Nikolay Sivov
b478f0a300
vkd3d-shader/fx: Add initial support for writing fx_2_0 binaries.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-23 20:26:21 +01:00
Nikolay Sivov
56100d36b1
vkd3d-shader/fx: Check technique type in global scope as well.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-23 20:26:20 +01:00
Nikolay Sivov
2c1905b780
vkd3d-shader/hlsl: Allow annotations on techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-23 20:26:19 +01:00
Nikolay Sivov
76a689d43f
vkd3d-shader/hlsl: Allow annotations on passes.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-23 20:26:18 +01:00
Nikolay Sivov
e72f8f9a30
vkd3d-shader/hlsl: Add passes variables to the techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-23 20:26:16 +01:00
Nikolay Sivov
fe8881747b
vkd3d-shader/hlsl: Add initial support for parsing annotations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-23 20:26:15 +01:00
Nikolay Sivov
341963bbec
tests/hlsl: Add some tests for annotations.
2024-01-23 20:26:14 +01:00
Giovanni Mascellani
232b2ad360
vkd3d-shader/ir: Validate PHI instructions.
2024-01-23 20:26:08 +01:00
Giovanni Mascellani
56f9057985
vkd3d-shader/ir: Do not allow IMMCONST and IMMCONST64 as destination registers.
2024-01-23 20:26:06 +01:00
Giovanni Mascellani
21633fcc52
vkd3d-shader/ir: Refactor register-type-specific code in parameter validation.
...
To better accommodate code for other register types.
2024-01-23 20:26:05 +01:00
Giovanni Mascellani
fb6409bda1
vkd3d-shader/ir: Check that all instructions appear in a block.
2024-01-23 20:26:03 +01:00
Giovanni Mascellani
72e2eeaf14
tests: Add a test for SV_ViewportArrayIndex.
2024-01-22 22:19:16 +01:00
Giovanni Mascellani
bd84b96e9f
tests: Use test utils to create the pipeline state in test_ps_layer().
2024-01-22 22:19:16 +01:00
Giovanni Mascellani
245cce02bd
tests: Test using SV_RenderTargetArrayIndex in the vertex shader.
2024-01-22 22:19:16 +01:00
Giovanni Mascellani
5ddf745d95
tests: Compile HLSL shaders at runtime in test_ps_layer().
2024-01-22 22:19:15 +01:00
Giovanni Mascellani
dc56320b31
vkd3d-shader/tpf: Support SV_ViewportArrayIndex in pixel and vertex shaders.
2024-01-22 22:19:14 +01:00
Giovanni Mascellani
3a90f3e29d
vkd3d-shader/tpf: Support SV_InstanceID in vertex shaders.
2024-01-22 22:19:13 +01:00
Giovanni Mascellani
b500381b5c
vkd3d-shader/tpf: Support SV_RenderTargetArrayIndex in pixel and vertex shaders.
2024-01-22 22:19:12 +01:00
Giovanni Mascellani
45495f54f2
vkd3d-shader/spirv: Use capability ShaderViewportIndexLayerEXT for decoration ViewportIndex.
2024-01-22 22:19:11 +01:00
Giovanni Mascellani
6ac525d6c3
vkd3d-shader/spirv: Use capability ShaderViewportIndexLayerEXT for decoration Layer.
...
Capability Geometry allows to use the Layer builtin in geometry and pixel
shaders. For vertex and domain shaders ShaderLayer should be used, but it's only
available starting from SPIR-V 1.5. ShaderViewportIndexLayerEXT can be used
instead with extension SPV_EXT_shader_viewport_index_layer.
2024-01-22 22:19:09 +01:00
Henri Verbeet
dd00e209ac
vkd3d: Use debugstr_hresult() in d3d12_command_queue_submit_locked().
2024-01-22 22:19:03 +01:00
Henri Verbeet
ebb2a31e50
vkd3d: Use debugstr_hresult() in d3d12_command_list_copy_incompatible_texture_region().
2024-01-22 22:19:03 +01:00
Henri Verbeet
f6ef7c3f46
vkd3d: Use debugstr_hresult() in vkd3d_wait_for_gpu_fence().
2024-01-22 22:19:03 +01:00
Henri Verbeet
adc02eada8
vkd3d-shader/ir: Store the temporary register count in struct vsir_program.
2024-01-22 22:18:53 +01:00
Henri Verbeet
94ca46916a
vkd3d-shader/ir: Store the SSA register count in struct vsir_program.
2024-01-22 22:18:52 +01:00
Henri Verbeet
7b85cd6a31
vkd3d-shader/ir: Store the "use_vocp" field in struct vsir_program.
2024-01-22 22:18:51 +01:00
Henri Verbeet
23dcd4f22b
vkd3d-shader/ir: Store the shader version in struct vsir_program.
2024-01-22 22:18:50 +01:00
Henri Verbeet
fc9043be3c
vkd3d-shader/ir: Introduce struct vsir_program.
2024-01-22 22:18:48 +01:00
Conor McCarthy
55c7cd5c22
vkd3d-shader/dxil: Handle semantic kind ISFRONTFACE.
2024-01-22 22:18:33 +01:00
Conor McCarthy
9f409b67d7
vkd3d-shader/dxil: Handle semantic kind VERTEXID.
2024-01-22 22:18:32 +01:00
Conor McCarthy
ca7487a56d
vkd3d-shader/spirv: Handle UINT32_MAX result from FIRSTBIT_HI and FIRSTBIT_SHI instructions.
2024-01-22 22:18:27 +01:00
Conor McCarthy
62e15dac8d
tests/d3d12: Add a raw firstbit test to test_shader_instructions().
2024-01-22 22:18:25 +01:00
Conor McCarthy
bfdc8b31a3
vkd3d-shader/dxil: Implement DX intrinsic BufferLoad for typed buffers.
2024-01-22 22:18:21 +01:00
Conor McCarthy
85052ba93e
vkd3d-shader/dxil: Load typed UAV descriptors.
2024-01-22 22:18:19 +01:00
Conor McCarthy
89d1ef83f4
vkd3d-shader/dxil: Load typed SRV descriptors.
2024-01-22 22:18:18 +01:00
Conor McCarthy
5ebe0cc717
vkd3d-shader/spirv: Do not assert VKD3D_DATA_UINT in spirv_compiler_emit_ld_raw_structured_srv_uav().
2024-01-22 22:18:17 +01:00
Conor McCarthy
80d7ea2924
vkd3d-shader/dxil: Pass the code block and instruction in a struct to intrinsic handlers.
...
Simplifies handling of intrinsics which need to emit more than one
instruction.
2024-01-22 22:18:16 +01:00
Henri Verbeet
14da4df99e
vkd3d-common: Use vkd3d_atomic_decrement_u32() in vkd3d_blob_Release().
2024-01-18 23:16:19 +01:00
Henri Verbeet
9228e13155
vkd3d-common: Introduce vkd3d_atomic_decrement_u32().
2024-01-18 23:16:19 +01:00
Henri Verbeet
bb6b393c15
vkd3d-common: Use vkd3d_atomic_increment_u32() in vkd3d_blob_AddRef().
2024-01-18 23:16:19 +01:00
Henri Verbeet
5fe3c624d5
vkd3d-common: Use vkd3d_atomic_increment_u32() in get_buffer().
2024-01-18 23:16:19 +01:00
Henri Verbeet
03fbf4a3dc
vkd3d-common: Introduce vkd3d_atomic_increment_u32().
2024-01-18 23:16:19 +01:00
Henri Verbeet
f69c8b1cc4
vkd3d-shader/d3dbc: Store the "offset" field as an unsigned int in hlsl_sm1_register_from_semantic().
2024-01-18 23:16:06 +01:00
Giovanni Mascellani
67902d4304
vkd3d-shader/ir: Validate RET instructions.
2024-01-18 23:15:58 +01:00
Giovanni Mascellani
af96730276
vkd3d-shader/ir: Validate SWITCH_MONOLITHIC instructions.
2024-01-18 23:15:57 +01:00
Giovanni Mascellani
46ebb404d7
vkd3d-shader/ir: Validate BRANCH instructions.
2024-01-18 23:15:56 +01:00
Giovanni Mascellani
bc9db34cdc
vkd3d-shader/ir: Validate LABEL instructions.
2024-01-18 23:15:55 +01:00
Giovanni Mascellani
dd1b2feec0
vkd3d-shader/ir: Validate LABEL registers.
2024-01-18 23:15:54 +01:00
Giovanni Mascellani
17f4afc2b5
vkd3d-shader/ir: Validate that structured CF does not appear in block-based shaders.
2024-01-18 23:15:53 +01:00
Giovanni Mascellani
1d45b7a422
vkd3d-shader/spirv: Normalise the shader before allocating registers.
...
So registers are allocated after normalisation (which could require
additional registers).
2024-01-18 23:15:48 +01:00
Zebediah Figura
9ad48f16ea
vkd3d-shader/hlsl: Forbid mismatched argument types in ternaries.
2024-01-18 23:15:44 +01:00
Zebediah Figura
275901557c
vkd3d-shader/hlsl: Handle scalar values in ternaries.
2024-01-18 23:15:43 +01:00
Zebediah Figura
11112798c8
vkd3d-shader/hlsl: Handle scalar conditions in ternaries.
2024-01-18 23:15:42 +01:00
Zebediah Figura
2c8751478f
vkd3d-shader/hlsl: Forbid objects in ternary conditions.
2024-01-18 23:15:41 +01:00
Giovanni Mascellani
38fdf24002
vkd3d-shader: Make relative address sources mutable too.
...
They were forgotten in 78d95889bd
.
Fixes: 78d95889bd
2024-01-18 23:15:35 +01:00
Giovanni Mascellani
93100edb4b
tests: Test a couple of degenerate switch instances.
2024-01-18 23:15:35 +01:00
Giovanni Mascellani
6cb7487fb0
tests: Add a test with non-trivial control flow.
2024-01-18 23:15:35 +01:00
Conor McCarthy
83851133c5
vkd3d-shader/ir: Set merged signature element interpolation mode only from used elements.
2024-01-18 23:15:27 +01:00
Conor McCarthy
759362b527
tests: Test an interpolated PS input where component x is unused.
...
FXC does not emit an interpolation mode for unused elements.
2024-01-18 23:15:26 +01:00
Conor McCarthy
b8280e4210
vkd3d-shader/ir: Revert "Do not merge signature elements which have different interpolation modes.".
...
This reverts commit b5c067b41a
.
The commit causes regressions in other shaders because unused elements
do not have an interpolation mode.
2024-01-18 23:15:25 +01:00
Conor McCarthy
efe800f7f0
vkd3d-shader/dxil: Handle the DXIL SWITCH instruction.
2024-01-18 23:15:14 +01:00
Conor McCarthy
ba1ee27b4b
vkd3d-shader/dxil: Handle the DXIL PHI instruction.
2024-01-18 23:15:12 +01:00
Conor McCarthy
8a5804eb43
vkd3d-shader/dxil: Handle the DXIL BR instruction conditional variant.
2024-01-18 23:15:10 +01:00
Conor McCarthy
c9493884ef
vkd3d-shader/dxil: Handle the DXIL BR instruction unconditional variant.
2024-01-18 23:15:03 +01:00
Conor McCarthy
9e964fa0c7
vkd3d-shader/dxil: Introduce a code block terminator struct.
2024-01-18 23:15:01 +01:00
Giovanni Mascellani
866e5de95b
ci: Prepare the macOS build environment in a dedicated CI job.
2024-01-18 23:13:05 +01:00
Giovanni Mascellani
847930d5e0
ci: Rename CI target build-image to image-linux.
2024-01-18 23:13:03 +01:00
Henri Verbeet
cd77b2a9be
vkd3d-utils: Use debugstr_hresult() in D3DStripShader().
2024-01-17 22:29:39 +01:00
Henri Verbeet
1b3aa005db
vkd3d-utils: Use debugstr_hresult() in get_blob_part().
2024-01-17 22:29:39 +01:00
Henri Verbeet
2476d6bd6c
vkd3d-utils: Use debugstr_hresult() in D3DCreateBlob().
2024-01-17 22:29:39 +01:00
Henri Verbeet
cd9610bbe0
include: Introduce a debug helper for HRESULTs.
2024-01-17 22:29:39 +01:00
Henri Verbeet
71decc927f
vkd3d-common: Introduce vkd3d_atomic_increment_u64().
2024-01-17 22:29:29 +01:00
Conor McCarthy
c40093474e
vkd3d-shader/tpf: Validate sysvals in index range declarations.
2024-01-17 22:29:01 +01:00
Conor McCarthy
4c30b23821
vkd3d-shader: Make the control point count the outer dimension of I/O arrays.
...
The relative-addressed case in shader_register_normalise_arrayed_addressing()
leaves the control point id in idx[0], while for constant register
indices it is placed in idx[1]. The latter case could be fixed instead,
but placing the control point count in the outer dimension is more
logical.
2024-01-17 22:28:59 +01:00
Conor McCarthy
b8561d6fd2
tests: Test punned array access in patch constant functions.
...
The FXC optimiser sometimes converts a local array of input values into
direct array addressing of the inputs, which can result in a
dcl_indexrange instruction spanning input elements with different masks.
2024-01-17 22:28:58 +01:00
Conor McCarthy
418e8d8100
vkd3d-shader/ir: Expand index range write masks to cover all element masks.
...
For example, this occurred in a shader:
reg_idx write_mask
0 xyz
1 xyzw
2 xyzw
3 xyz
The dcl_indexrange instruction covered only xyz, so once merged, searching for
xyzw failed.
It is impossible to declare an input array where elements have different
component counts, but the optimiser can create this case. One way for
this to occur is to dynamically index input values via a local array
containing copies of the input values. The optimiser converts this to
dynamically indexed inputs.
2024-01-17 22:28:56 +01:00
Zebediah Figura
16962ac6f1
vkd3d-shader/hlsl: Allow non-numeric types in the ternary operator.
2024-01-17 22:28:51 +01:00
Zebediah Figura
46bd099341
vkd3d-shader/hlsl: Separate an add_ternary() helper.
2024-01-17 22:28:50 +01:00
Zebediah Figura
9ac210eb1e
tests: Add many more tests for ternary expressions.
2024-01-17 22:28:50 +01:00
Zebediah Figura
a5549bae38
vkd3d-shader/hlsl: Do not try to lower ternaries of types other than scalar or vector.
2024-01-17 22:28:49 +01:00
Zebediah Figura
e0b1f2e273
vkd3d-shader/hlsl: Remove a redundant definition of the "float" type.
2024-01-17 22:28:47 +01:00
Conor McCarthy
559d9d4ee0
vkd3d-shader/ir: Include an initial label instruction in the first control flow block.
2024-01-17 22:28:41 +01:00
Conor McCarthy
d402804851
vkd3d-shader/spirv: Do not emit function code before the main prolog.
2024-01-17 22:28:40 +01:00
Conor McCarthy
b4b2b0d3ac
vkd3d-shader/spirv: Declare indexable temps as Private unless function scope is specified.
2024-01-17 22:28:39 +01:00
Conor McCarthy
37d9dba512
vkd3d-shader/ir: Store code block names in struct vkd3d_shader_desc.
2024-01-17 22:28:38 +01:00
Conor McCarthy
ffc65215ba
vkd3d-shader/ir: Flatten SWITCH/CASE/DEFAULT/ENDSWITCH control flow instructions.
2024-01-17 22:28:36 +01:00
Conor McCarthy
dcb8527327
vkd3d-shader/ir: Flatten LOOP/BREAK/CONTINUE/ENDLOOP control flow instructions.
2024-01-17 22:28:35 +01:00
Conor McCarthy
e1dddc01b7
vkd3d-shader/ir: Flatten IF/ELSE/ENDIF control flow instructions.
2024-01-17 22:28:34 +01:00
Conor McCarthy
f3d464de0e
vkd3d-shader/spirv: Handle RETP in spirv_compiler_handle_instruction().
2024-01-17 22:28:33 +01:00
Conor McCarthy
bc1b5e7132
vkd3d-shader/spirv: Handle DISCARD and TEXKILL in spirv_compiler_handle_instruction().
2024-01-17 22:28:31 +01:00
Conor McCarthy
db0d51675c
vkd3d-shader/spirv: Emit descriptor offset loads in the function entry block.
...
Ensures they are loaded only once per function independent of the
control flow graph.
2024-01-17 22:28:29 +01:00
Henri Verbeet
68b898fcb6
vkd3d-shader/tpf: Store the "precise" mask as a uint32_t in shader_sm4_read_instruction().
2024-01-15 19:58:22 +01:00
Henri Verbeet
ad2af68d2a
vkd3d-shader/tpf: Store the "recognized_bits" mask as a uint32_t in shader_sm4_read_instruction_modifier().
2024-01-15 19:58:21 +01:00
Henri Verbeet
b8903f5526
vkd3d-shader/tpf: Store the current token as a uint32_t in shader_sm4_read_dst_param().
2024-01-15 19:58:20 +01:00
Henri Verbeet
fd854bc0c0
vkd3d-shader/tpf: Store the current token as a uint32_t in shader_sm4_read_src_param().
2024-01-15 19:58:19 +01:00
Henri Verbeet
c5facd4e03
vkd3d-shader/tpf: Store the "addressing" token as a uint32_t in shader_sm4_read_param().
2024-01-15 19:58:18 +01:00
Henri Verbeet
b1c538e0fe
vkd3d-shader/tpf: Store the "components" token as a uint32_t in shader_sm4_read_dcl_resource().
2024-01-15 19:58:17 +01:00
Henri Verbeet
9896394220
vkd3d-shader/tpf: Pass a uint32_t modifier token to shader_sm4_read_instruction_modifier().
2024-01-15 19:58:15 +01:00
Henri Verbeet
4db7b40ca8
vkd3d-common: Get rid of InterlockedAdd().
...
This was once used by libvkd3d's fence worker thread, but currently this is
unused.
2024-01-15 19:57:59 +01:00
Nikolay Sivov
1a036ddff6
vkd3d-shader/fx: Do not write the same string twice.
2024-01-15 19:57:43 +01:00
Nikolay Sivov
e7d65d39ba
vkd3d-shader/fx: Initial support for fx_5_0 output.
2024-01-15 19:57:42 +01:00
Nikolay Sivov
8014c11e88
vkd3d-shader/fx: Write empty passes blocks.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-15 19:57:41 +01:00
Nikolay Sivov
e1dca9b27a
vkd3d-shader/hlsl: Add a scope for technique variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-15 19:57:39 +01:00
Nikolay Sivov
0a6d842ed1
vkd3d-shader/hlsl: Rename the rule for an optional name.
...
Names are optional for both techniques and passes.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-15 19:57:37 +01:00
Francisco Casas
43ff28b00b
vkd3d-shader/hlsl: Emit fixmes on non-constant vector addressing.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56162
Storing to a vector component using a non-constant index is not allowed
on profiles lower than 6.0. Unless this happens inside a loop that can be
unrolled, which we are not doing yet.
For this reason, a validate_nonconstant_vector_store_derefs pass is
added to detect these cases.
Ideally we would want to emit an hlsl_error on this pass, but before
implementing loop unrolling, we could reach this point on valid HLSL.
Also, as pointed out by Nikolay in the mentioned bug, currently
new_offset_from_path_index() fails an assertion when this happens,
because it expects an hlsl_ir_constant, so a check is added.
It also felt correct to emit an hlsl_fixme there, despite the
redundancy.
2024-01-15 19:57:12 +01:00
Giovanni Mascellani
b0c8a47f9d
vkd3d-shader/ir: Check that SSA registers are used validly.
...
Specifically, they are assigned only once and only assigned components
are used.
Right now we don't check that the assignment dominates all usages.
2024-01-15 19:57:01 +01:00
Giovanni Mascellani
26bebe8f91
vkd3d-shader/ir: Check that SSA registers have consistent dimensions.
2024-01-15 19:57:00 +01:00
Giovanni Mascellani
7503429555
vkd3d-shader/ir: Check that TEMP registers have consistent dimensions.
2024-01-15 19:56:59 +01:00
Giovanni Mascellani
fbd77486de
vkd3d-shader/ir: Use vkd3d_free() instead of free().
2024-01-15 19:56:58 +01:00
Giovanni Mascellani
26c6a87268
vkd3d-shader/ir: Simplify control flow in vsir_validate_register().
2024-01-15 19:56:56 +01:00
Conor McCarthy
c5bc28b454
tests/d3d12: Test vector parameter for countbits() and firstbithigh() in test_shader_instructions().
2024-01-15 19:56:36 +01:00
Conor McCarthy
52902b042f
vkd3d-shader/spirv: Support vector source param for FIRSTBIT_HI and FIRSTBIT_SHI instructions.
2024-01-15 19:56:35 +01:00
Henri Verbeet
3e2ace8d33
vkd3d-shader/dxbc: Use sizeof(uint32_t) instead of sizeof(DWORD) in calls to require_space().
2024-01-11 23:05:56 +01:00
Henri Verbeet
69350e1ff0
vkd3d-shader/dxbc: Pass an unsigned int count to shader_parse_root_parameters1().
2024-01-11 23:05:54 +01:00
Henri Verbeet
04acc52496
vkd3d-shader/dxbc: Pass a size_t offset to shader_get_string().
2024-01-11 23:05:52 +01:00
Henri Verbeet
bf0fda7812
vkd3d: Trace GetLastError() results with %lu.
...
These are DWORDs, but this is all Windows code, so we can just use %lu.
2024-01-11 23:05:42 +01:00
Conor McCarthy
ac9b14599f
vkd3d-shader/dxil: Avoid null dereference on failure to find function pointer type.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55684
2024-01-11 23:05:17 +01:00
Giovanni Mascellani
78d95889bd
vkd3d-shader: Make *src and *dst mutable in vkd3d_shader_instruction.
...
They were originally made const because no optimization/normalization
pass existed. Now having to cast away const all the time is becoming
more and more burdening.
2024-01-11 23:05:11 +01:00
Henri Verbeet
fd8a0d7fb6
vkd3d-shader/spirv: Pass a uint32_t write mask to spirv_compiler_emit_neg().
2024-01-11 23:05:03 +01:00
Henri Verbeet
b4da553d28
vkd3d-shader/spirv: Pass a uint32_t write mask to spirv_compiler_emit_abs().
2024-01-11 23:05:02 +01:00
Henri Verbeet
97acca715e
vkd3d-shader/spirv: Pass a uin32_t write mask to spirv_compiler_emit_load_src().
2024-01-11 23:05:01 +01:00
Henri Verbeet
5c2d0f42b5
vkd3d-shader/spirv: Pass a uint32_t write mask to vkd3d_symbol_set_register_info().
2024-01-11 23:05:00 +01:00
Henri Verbeet
9dd5b2840f
vkd3d-shader: Recognise DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS in shader_validate_descriptor_range1().
2024-01-11 23:04:54 +01:00
Nikolay Sivov
a0207436f2
vkd3d-shader/tpf: Add initial support for writing fx_4_0/fx_4_1 binaries.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-11 23:04:48 +01:00
Nikolay Sivov
9494b72224
vkd3d-shader: Add separate binary target type for effects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-11 23:04:48 +01:00
Nikolay Sivov
e527d7c1e7
vkd3d-shader/hlsl: Handle effect group statement.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-11 23:04:46 +01:00
Nikolay Sivov
f7a02a5da2
vkd3d-shader/hlsl: Add variables for techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-11 23:04:45 +01:00
Nikolay Sivov
8494342fa0
vkd3d-shader/hlsl: Rename rule for top-level techniques.
...
Only technique10 and technique11 types could be nested in groups.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-11 23:04:43 +01:00
Nikolay Sivov
c3af1f9989
vkd3d-shader/hlsl: Add 'fxgroup' token.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-11 23:04:42 +01:00
Nikolay Sivov
ffae369748
tests: Add some tests for effects groups syntax.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-01-11 23:04:42 +01:00
Giovanni Mascellani
017f86aaaf
vkd3d-shader/d3d-asm: Guess a sensible data type for literals.
...
When the typing information is not reliable.
2024-01-11 23:04:34 +01:00
Giovanni Mascellani
e3fb4e7eac
vkd3d-utils: Support many different surface types when creating a device.
...
This is nice for the application, which can use our implementation of
D3D12CreateDevice() in more environments, and basically free for us,
because surface creation is still the application's business.
2024-01-09 23:00:58 +01:00
Giovanni Mascellani
0752e545e4
configure: Detect pthread support using -pthread instead of -lpthread.
...
The latter links the pthread library, but doesn't set the preprocessor
state that some toolchains require. The former is the supported way
to use pthread.
This allows vkd3d to be compiled with the Android NDK.
2024-01-09 23:00:56 +01:00
Conor McCarthy
b0d1fb7d98
vkd3d: Use mutable descriptors if available.
...
The mutable descriptor type allows six descriptor sets to be replaced
with one set for CBV/SRV/UAV heaps.
2024-01-09 22:59:46 +01:00
Henri Verbeet
bb64bfff63
vkd3d: Attempt to translate border colours to static border colours in d3d12_desc_create_sampler().
2024-01-08 21:45:39 +01:00
Henri Verbeet
9060baacec
vkd3d: Implement support for static border colours.
2024-01-08 21:45:39 +01:00
Henri Verbeet
3344c4e93d
vkd3d-shader/hlsl: Store modifier flags as a uint32_t.
2024-01-08 21:45:26 +01:00
Henri Verbeet
fafe2a1dba
vkd3d-shader/hlsl: Store swizzles as a uint32_t.
2024-01-08 21:45:24 +01:00
Fabian Maurer
49d5aecaa7
vkd3d: Unlock mutex in error case in d3d12_command_queue_CopyTileMappings.
2024-01-08 21:45:06 +01:00
Giovanni Mascellani
90bcc6691d
tests: Mark resource arrays as buggy on MoltenVK.
...
They require Vulkan descriptor indexing extension, which is
exposed by MoltenVK but known to be buggy, so we assume it is
disabled.
2024-01-08 21:44:58 +01:00
Giovanni Mascellani
a610ccaed9
tests: Mark predicated rendering as buggy on MoltenVK.
...
It requires Vulkan conditional rendering extension.
2024-01-08 21:44:56 +01:00
Giovanni Mascellani
54514ba7dd
tests: Mark streaming output as buggy on MoltenVK.
...
It requires Vulkan transform feedback extension.
2024-01-08 21:44:55 +01:00
Giovanni Mascellani
1cc2ccaf98
tests: Mark some sampling tests as buggy on MoltenVK.
...
Apparently Metal doesn't support specifying a bias directly in the
sampler, and, with "nearest" mip filtering, it doesn't switch
precisely at LOD 0.5 (though still between 0.5 and 0.6).
2024-01-08 21:44:53 +01:00
Giovanni Mascellani
7f9803620f
vkd3d-shader/spirv: Specify behavior for bit field instructions.
...
Bit field instructions in SPIR-V do not specify what happens when
offset + count exceeds the type bit width. After this commit we
refine the emitted code's behavior to match TPF.
This fixes a few failures on MoltenVK.
2024-01-08 21:44:52 +01:00
Giovanni Mascellani
9c9b1fadbd
tests: Use a uint target for rendering uint data.
...
This fixes a failure in MoltenVK.
2024-01-08 21:44:50 +01:00
Giovanni Mascellani
5e7f9d4d0d
vkd3d: Specify the aspect when creating NULL UAVs.
...
This fixes a crash on MoltenVK.
2024-01-08 21:44:49 +01:00
Giovanni Mascellani
2fe76f3b60
ci: Dump the d3d12 summary line in the CI log.
...
d3d12 lumps many tests together, so it's useful to have the summary
line in the CI log.
2024-01-08 21:44:46 +01:00
Henri Verbeet
50cebc7278
vkd3d: Slightly simplify debug_vk_memory_property_flags().
...
VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD and
VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD were introduced by
Vulkan-Headers 1.1.121; we currently require version 1.2.148.
2024-01-04 22:24:10 +01:00
Henri Verbeet
0fb1ef1e63
vkd3d: Recognise VK_QUEUE_VIDEO_DECODE_BIT_KHR in debug_vk_queue_flags().
...
This was introduced by Vulkan-Headers 1.3.238, which is a bit newer than
we currently require.
2024-01-04 22:24:07 +01:00
Henri Verbeet
659c870edc
vkd3d: Recognise VK_QUEUE_PROTECTED_BIT in debug_vk_queue_flags().
2024-01-04 22:24:07 +01:00
Henri Verbeet
5b9a0dfaea
vkd3d-shader/ir: Store destination parameter shifts as an unsigned int.
2024-01-04 22:23:54 +01:00
Henri Verbeet
4b5d3a078b
vkd3d-shader/ir: Store destination parameter modifier flags as a uint32_t.
2024-01-04 22:23:52 +01:00
Henri Verbeet
60842b7181
vkd3d-shader/ir: Store source parameter swizzles as a uint32_t.
2024-01-04 22:23:51 +01:00
Henri Verbeet
9f4ca3bc9c
vkd3d-shader/ir: Store instruction flags as a uint32_t.
2024-01-04 22:23:49 +01:00
Giovanni Mascellani
bd9118cac4
vkd3d-shader/ir: Validate destination write masks depending on the dimension.
2024-01-04 22:23:25 +01:00
Giovanni Mascellani
15e7711786
vkd3d-shader/ir: Validate source swizzles depending on the dimension.
2024-01-04 22:23:24 +01:00
Giovanni Mascellani
e91da41dea
vkd3d-shader/ir: Validate SSA registers.
2024-01-04 22:23:23 +01:00
Giovanni Mascellani
e29ae1550c
vkd3d-shader/dxil: Create constant buffer registers with dimension vec4.
2024-01-04 22:23:21 +01:00
Giovanni Mascellani
df2ae56de8
vkd3d-shader/d3dbc: Override the write mask when the destination is not vec4.
2024-01-04 22:23:20 +01:00
Zebediah Figura
1ce7e3d8b1
vkd3d-shader/d3dbc: Assign unique register indices for VKD3DSPR_RASTOUT.
2024-01-04 22:23:09 +01:00
Zebediah Figura
3f52fda8ad
vkd3d-shader: Lower shader model 1/2 inter-stage I/O to a flat array.
...
An alternative is that we stash the reg_type in the signature, but this seems
far simpler for the backend to deal with.
2024-01-04 22:23:07 +01:00
Giovanni Mascellani
3bafee344d
vkd3d-shader/dxil: Use vkd3d_shader_parser_error() for error reporting when available.
2024-01-03 22:38:26 +01:00
Giovanni Mascellani
a02cd1cf64
vkd3d-shader/dxil: Do not use the parser before it is initialized.
2024-01-03 22:38:24 +01:00
Conor McCarthy
111818eabb
vkd3d-shader/dxil: Pre-allocate instruction space for globals in sm6_parser_globals_init().
...
For simplicity, declaration handlers assume instruction allocation will
not fail.
2024-01-03 22:38:21 +01:00
Conor McCarthy
8aa6e2228e
vkd3d-shader/dxil: Count global variables in dxil_block_compute_module_decl_count().
2024-01-03 22:38:19 +01:00
Henri Verbeet
4ec7f360d9
vkd3d: Add D3D_FEATURE_LEVEL_1_0_CORE as a valid feature level.
2024-01-03 22:38:10 +01:00
Henri Verbeet
6abcc27c97
vkd3d: Add D3D_FEATURE_LEVEL_12_2 as a valid feature level.
2024-01-03 22:38:10 +01:00
Henri Verbeet
ed4f3f3272
vkd3d-shader/ir: Rename the "immconst_double" field of struct vkd3d_shader_register to "immconst_f64".
2024-01-03 22:37:49 +01:00
Henri Verbeet
7f94fda05c
vkd3d-shader/ir: Rename the "immconst_uint64" field of struct vkd3d_shader_register to "immconst_u64".
2024-01-03 22:37:43 +01:00
Henri Verbeet
05a542ba00
vkd3d-shader/ir: Rename the "immconst_float" field of struct vkd3d_shader_register to "immconst_f32".
2024-01-03 22:37:41 +01:00
Henri Verbeet
e33d3b3954
vkd3d-shader/ir: Rename the "immconst_uint" field of struct vkd3d_shader_register to "immconst_u32".
...
For consistency with the rest of vkd3d-shader; e.g. put_u32() and
read_u32().
2024-01-03 22:37:39 +01:00
Conor McCarthy
78343dcf87
vkd3d-shader/spirv: Decorate non-float32 non-built-in pixel shader inputs as Flat.
...
As per VUID-StandaloneSpirv-Flat-04744. Not strictly a regression, but
revealed by 66cb2815f
because it declares unused inputs.
2024-01-02 23:03:59 +01:00
Florian Weimer
cca03d1c0e
configure: Use AC_CHECK_FUNCS to define HAVE_GETTID.
...
VKD3D_CHECK_FUNC does not use a fake prototype (char gettid(void);)
and does not include <unistd.h>. It always fails with Clang 16 and
GCC 14 and other compilers which do not support implicit function
declarations.
2024-01-02 23:03:46 +01:00
Henri Verbeet
62f18f749b
tests: Print the failing line numbers when a test fails.
...
Currently, if a probe fails, it will print the line number of the [test]
block the probe is in, not the line number of the probe itself. This
makes it somewhat difficult to debug.
This commit makes it print the line number that a test fails at.
2024-01-02 23:03:25 +01:00
Conor McCarthy
812f01c2e2
vkd3d-shader/spirv: Handle ITOI and UTOU in spirv_compiler_map_alu_instruction().
...
These instructions perform integer casts to/from 64 bits.
2024-01-02 23:03:07 +01:00
Conor McCarthy
1eaa7d1dbe
vkd3d-shader/spirv: Support UINT64 source in spirv_compiler_emit_bool_cast().
2024-01-02 23:03:06 +01:00
Conor McCarthy
99924d913b
vkd3d-shader/spirv: Support 64-bit sources in spirv_compiler_emit_int_div().
2024-01-02 23:03:05 +01:00
Conor McCarthy
13459a55f1
vkd3d-shader/spirv: Introduce a UINT64 component type.
2024-01-02 23:03:04 +01:00
Conor McCarthy
fe44873979
vkd3d-shader/spirv: Introduce a data_type_is_64_bit() helper function.
2024-01-02 23:03:03 +01:00
Conor McCarthy
511c66d595
vkd3d-shader/spirv: Use data_type_is_integer() in spirv_compiler_emit_neg().
2024-01-02 23:03:02 +01:00
Conor McCarthy
cc43ef3bca
vkd3d: Pass int64 capability info to vkd3d-shader.
2024-01-02 23:03:00 +01:00
Henri Verbeet
f96a791807
vkd3d-shader/ir: Pass a uint32_t swizzle to vkd3d_swizzle_get_component64().
2023-12-14 23:19:51 +01:00
Henri Verbeet
8a1de71fb1
vkd3d-shader/ir: Pass a uint32_t swizzle to vkd3d_swizzle_get_component().
2023-12-14 23:19:49 +01:00
Zebediah Figura
4ff389854c
vkd3d-shader: Allow compiling d3d bytecode to SPIR-V.
2023-12-14 23:19:31 +01:00
Zebediah Figura
6a514ebe8e
tests: Avoid using "SV_Position" as a name for the vertex shader input.
...
We use vkd3d_shader_find_signature_element() in the Vulkan runner, and
vkd3d-shader translates SM1 position to "POSITION".
2023-12-14 23:19:30 +01:00
Zebediah Figura
aa44f9b390
tests: Use struct vkd3d_shader_scan_signature_info to retrieve the VS input signature.
...
In order to allow retrieving it from d3dbc shaders.
2023-12-14 23:19:28 +01:00
Zebediah Figura
2bc40385d9
vkd3d-shader: Do not scan DCL instructions which do not declare resources.
2023-12-14 23:19:28 +01:00
Zebediah Figura
8af47a96ea
vkd3d-shader: Do not scan the shader in vkd3d_shader_parser_compile() for assembly targets.
2023-12-14 23:19:28 +01:00
Conor McCarthy
f23426ec32
tests/shader-runner: Check for int64 support in the Vulkan runner.
2023-12-14 21:00:41 +01:00
Conor McCarthy
a80ea8168f
tests/shader-runner: Check for float64 support in the Vulkan runner.
2023-12-14 21:00:39 +01:00
Conor McCarthy
cd43cb3752
tests/shader-runner: Check for float64 support in the d3d11 runner.
2023-12-14 21:00:38 +01:00
Conor McCarthy
b8694fd879
vkd3d: Co-locate all descriptor-related members.
...
To optimise cache coherence, because decriptor updates use the most
performance-critical code paths.
2023-12-14 21:00:34 +01:00
Conor McCarthy
a2741babd9
vkd3d: Rename the device mutex to pipeline_cache_mutex.
...
It is used only for pipeline and render pass caching, and renaming it
helps prevent inappropriate or erroneous use.
2023-12-14 21:00:30 +01:00
Conor McCarthy
37e76618ca
vkd3d: Write Vulkan descriptors in a worker thread.
...
Raises framerate by 5-10% in games which write thousands of descriptors
per frame, e.g. Horizon Zero Dawn.
The worker thread is a generic device worker which can also be used for
other purposes if the need arises.
2023-12-14 21:00:28 +01:00
Conor McCarthy
70962ae7d8
vkd3d: Update the descriptor next
index before getting a reference for writing.
...
Fixes a race condition where the descriptor is modified between getting
its object and resetting the `next` index. The new object would never be
written. While it is invalid for the app to write descriptors used by a
command list which has been submitted to a queue, unused descriptors may
be written. This change also supports writing descriptors in a worker
thread.
2023-12-14 21:00:26 +01:00
Henri Verbeet
21491d1bbb
vkd3d-shader/ir: Pass a uint32_t write mask to vkd3d_write_mask_32_from_64().
2023-12-13 22:33:07 +01:00
Henri Verbeet
3759186193
vkd3d-shader/ir: Pass a uint32_t write mask to vkd3d_write_mask_64_from_32().
2023-12-13 22:33:06 +01:00
Henri Verbeet
713adaa56a
vkd3d-shader/ir: Pass a uint32_t write mask to vkd3d_write_mask_component_count().
2023-12-13 22:33:04 +01:00
Henri Verbeet
e1aa12f94b
vkd3d-shader/ir: Pass a uint32_t write mask to vkd3d_write_mask_get_component_idx().
2023-12-13 22:33:03 +01:00
Giovanni Mascellani
09235d9e09
tests: Test assigning multisampled textures with different sample counts.
2023-12-13 22:32:38 +01:00
Conor McCarthy
af731024d7
tests/shader-runner: Fix the arithmetic-int-uniform int64 abs expected results.
2023-12-13 22:32:31 +01:00
Giovanni Mascellani
f087aa752d
ci: Build vkd3d with SPIRV-Tools.
2023-12-13 22:32:26 +01:00
Giovanni Mascellani
ec4986e9e2
vkd3d-shader/spirv: Honor force_validation after emitting SPIR-V code.
2023-12-13 22:32:25 +01:00
Giovanni Mascellani
a6317e5f3b
vkd3d: Pad push constant ranges to 16 bytes.
...
Because that's the granularity of Constant Buffer accesses in SM4.
This commit requires using more push constants, but without it the
generated SPIR-V can be invalid.
2023-12-13 22:32:23 +01:00
Giovanni Mascellani
1015cc952e
vkd3d-shader/d3d-asm: Add an "internal" mode for the ASM dumper.
...
The new mode exposes more details about what's going on inside the VSIR
code and it's meant to ease development and debugging.
2023-12-12 23:16:26 +01:00
Giovanni Mascellani
e7fdf2e97f
vkd3d-shader/d3d-asm: Dump unknown types as "<unknown>".
...
In analogy with "<continued>" and "<unused>".
2023-12-12 23:16:24 +01:00
Giovanni Mascellani
1caaf90ee2
vkd3d-shader/d3d-asm: Dump recently added types.
2023-12-12 23:16:23 +01:00
Giovanni Mascellani
4b6e596740
vkd3d-shader/d3d-asm: Write a single type in shader_dump_data_type().
2023-12-12 23:16:22 +01:00
Giovanni Mascellani
bd50f15d31
vkd3d-shader/d3d-asm: Indent on IFC.
2023-12-12 23:16:21 +01:00
Conor McCarthy
cdb9eecfd1
vkd3d-shader/spirv: Introduce a compiler feature flag for int64 capability.
2023-12-12 22:50:53 +01:00
Conor McCarthy
108941fce0
tests/shader-runner: Add 64-bit bitwise tests.
2023-12-12 22:50:52 +01:00
Conor McCarthy
27d4ccf225
tests/shader-runner: Add 64-bit arithmetic tests.
2023-12-12 22:50:51 +01:00
Conor McCarthy
8a1eb306e8
tests/shader-runner: Introduce a 'float64' requirement directive.
2023-12-12 22:50:50 +01:00
Conor McCarthy
95c48eb98e
tests/shader-runner: Introduce an 'int64' requirement directive.
2023-12-12 22:50:49 +01:00
Conor McCarthy
0610867334
vkd3d-shader/spirv: Emit an error if 64-bit integers are used.
2023-12-12 22:50:48 +01:00
Conor McCarthy
1929432559
vkd3d-shader: Introduce an instruction flag to suppress masking of bitwise shift counts.
...
DXIL does not use implicit masking of shift counts.
2023-12-12 22:50:46 +01:00
Fabian Maurer
9cb4372378
vkd3d-shader/dxil: Check null pointer before it is dereferenced (Coverity).
2023-12-11 23:18:58 +01:00
Conor McCarthy
af86cdf713
tests/shader-runner: Add a non-const-indexing test for asfloat() result storage.
2023-12-11 23:18:54 +01:00
Conor McCarthy
2037daae32
vkd3d-shader/spirv: Bitcast if necessary in the spirv_compiler_emit_mov() general implementation.
...
In SM 6, this is needed when storing an asfloat() or asuint() result in
an indexable temp, because dxc performs the bitcast by casting the
destination pointer.
2023-12-11 23:18:52 +01:00
Conor McCarthy
3db7c2a62d
vkd3d-shader/dxil: Implement the DXIL STORE instruction.
2023-12-11 23:18:51 +01:00
Conor McCarthy
2d5f2bf7a4
vkd3d-shader/dxil: Implement the DXIL ALLOCA instruction.
2023-12-11 23:18:50 +01:00
Conor McCarthy
df82c61482
tests/shader-runner: Test an uninitialised indexable temp.
2023-12-11 23:18:49 +01:00
Zebediah Figura
d49bccea9a
vkd3d-shader/dxil: No longer synthesize DCL instructions.
2023-12-11 23:18:45 +01:00
Zebediah Figura
66cb2815f0
vkd3d-shader/spirv: Declare I/O registers from the signature.
...
Instead of parsing DCL instructions.
This allows sm1 to work without further effort, and simplifies sm6 code.
2023-12-11 23:18:44 +01:00
Zebediah Figura
75348dff12
vkd3d-shader/dxil: Map SEMANTIC_KIND_TARGET to VKD3D_SHADER_SV_TARGET.
2023-12-11 23:18:43 +01:00
Zebediah Figura
cabf9996f9
vkd3d-shader/tpf: Do not uninvert used masks for domain shader patch constants.
2023-12-11 23:18:42 +01:00
Zebediah Figura
8876030590
vkd3d-shader/spirv: Do not use the output_info array for patch constants.
2023-12-11 23:18:40 +01:00
Conor McCarthy
45679a966c
vkd3d-shader/ir: Pass a local copy of location to control_point_normaliser_emit_hs_input().
2023-12-07 21:57:49 +01:00
Stefan Dösinger
b0d1fb0bd7
tests: Show that CreatePipelineState also doesn't reuse duplicate objects.
2023-12-07 21:57:45 +01:00
Stefan Dösinger
1eaf7fa37b
tests: Show that compute pipeline state objects are not reused.
2023-12-07 21:57:45 +01:00
Stefan Dösinger
82a3209ee2
tests: Show that graphics pipeline state objects are not reused.
2023-12-07 21:57:45 +01:00
Stefan Dösinger
705cf10626
tests: Show that creating identical root signatures returns the same pointer.
2023-12-07 21:57:45 +01:00
Zebediah Figura
26a30b8539
configure: Enable -Wshadow.
2023-12-07 21:57:36 +01:00
Zebediah Figura
28f32349f4
vkd3d-shader: Add a helper to search the scan descriptor info.
...
Avoid shadowing "info" in vkd3d_shader_scan_combined_sampler_declaration().
2023-12-07 21:57:34 +01:00
Zebediah Figura
dfea1abbd8
vkd3d-shader/hlsl: Avoid shadowing "jump" in normalize_switch_cases().
2023-12-07 21:57:33 +01:00
Zebediah Figura
98a02ceffb
vkd3d-shader/hlsl: Avoid shadowing "load" in intrinsic_tex().
2023-12-07 21:57:31 +01:00
Zebediah Figura
a102e99897
vkd3d-shader/hlsl: Avoid shadowing "block" in resolve_loop_continue().
2023-12-07 21:57:30 +01:00
Zebediah Figura
ca8492c855
vkd3d-shader/d3dbc: Avoid shadowing "instr" in write_sm1_jump().
2023-12-07 21:57:28 +01:00
Zebediah Figura
fcd6ec33bd
tests: Avoid shadowing "l" in test_get_copyable_footprints().
...
Found with -Wshadow.
2023-12-07 21:57:18 +01:00
Zebediah Figura
46e135f6a7
vkd3d-shader/hlsl: Avoid shadowing "load" in lower_index_loads().
...
Found with -Wshadow.
2023-12-07 21:57:16 +01:00
Conor McCarthy
a4a1b4c557
vkd3d-shader/dxil: Set the result register data type for nop casts.
...
Casts from minimum precision types are emitted as nop, but the result
value type must be set to the cast result type.
2023-12-07 21:57:08 +01:00
Conor McCarthy
1630fd9a3c
vkd3d-shader/dxil: Apply metadata attachments to instructions.
...
These are apparently only used for 'dx.op' intrinsics, because the
instructions based on native LLVM ones have their own way to apply
attributes.
2023-12-07 21:57:00 +01:00
Conor McCarthy
a33a9127ca
vkd3d-shader/dxil: Implement DX intrinsic Unary.
2023-12-07 21:56:53 +01:00
Conor McCarthy
cc5e703802
vkd3d-shader/dxil: Emit constant global arrays as immediate constant buffers.
2023-12-07 21:56:47 +01:00
Conor McCarthy
cb88844a3d
vkd3d-shader: Add a register index to struct vkd3d_shader_immediate_constant_buffer.
2023-12-07 21:56:47 +01:00
Conor McCarthy
ef940cb778
vkd3d-shader/spirv: Support declared component type and count in immediate constant buffers.
2023-12-07 21:56:45 +01:00
Conor McCarthy
16cb6fdbad
vkd3d-shader/spirv: Support constant initialisers in indexable temps.
2023-12-07 21:56:44 +01:00
Conor McCarthy
ffae57eb8d
vkd3d-shader/dxil: Support null constant arrays.
2023-12-07 21:56:43 +01:00
Conor McCarthy
69c3946c85
vkd3d-shader/spirv: Support declared component type and count in indexable temps.
2023-12-07 21:56:41 +01:00
Henri Verbeet
0c33f82f72
Release 1.10.
2023-12-06 15:31:21 +01:00
Henri Verbeet
ff674b5db5
build: Add tests/driver.c to the distribution.
2023-12-06 15:31:21 +01:00
Conor McCarthy
9fcc904834
vkd3d-shader/spirv: Always emit clip/cull builtins as an array.
...
Clip/cull distance can appear as input in pixel shaders, and the
array size must not be forced to zero.
2023-12-06 15:31:20 +01:00
Conor McCarthy
b5c067b41a
vkd3d-shader/ir: Do not merge signature elements which have different interpolation modes.
...
Regression in signature normalisation, however the old code was not
correct either because it would apply the interpolation mode to all
components. Found in an Assassin's Creed: Valhalla shader.
2023-12-06 15:31:18 +01:00
Alexandre Julliard
8d83b2eaec
ci: Add script to create the gitlab release.
...
Copied from the corresponding Wine script.
2023-12-06 15:31:12 +01:00
Henri Verbeet
803dfc1246
vkd3d-shader: Update the vkd3d_shader_scan() documentation.
...
Scanning d3dbc sources is supported now, and
vkd3d_shader_scan_combined_resource_sampler_info is supported as a chained
structure.
2023-12-04 22:23:14 +01:00
Henri Verbeet
ac5a583b11
readme: Document VKD3D_SHADER_CONFIG.
2023-12-04 22:23:10 +01:00
Henri Verbeet
ee1c6bd488
vkd3d-shader: Add a VKD3D_FORCE_32_BIT_ENUM element to enum vkd3d_shader_compile_option_fragment_coordinate_origin.
2023-12-04 22:23:04 +01:00
Conor McCarthy
b4d03c0221
vkd3d-shader/spirv: Do not emit a fixme for SV_TARGET in vkd3d_get_spirv_builtin().
2023-12-04 22:22:55 +01:00
Conor McCarthy
f11e1461aa
vkd3d-shader/spirv: Do not emit a fixme for SV_TARGET in get_spirv_builtin_for_sysval().
2023-12-04 22:22:54 +01:00
Francisco Casas
736f3ae2df
vkd3d-shader/hlsl: Use values at the time of the swizzle's load in copy-propagation.
...
This preempts us from replacing a swizzle incorrectly, as in the
following example:
1: A.x = 1.0
2: A
3: A.x = 2.0
4: @2.x
were @4 ends up being 2.0 instead of 1.0, because that's the value stored in
A.x at time 4, and we should be querying it at time 2.
This also helps us to avoid replacing a swizzle with itself in copy-prop
which can result in infinite loops, as with the included tests this commit.
Consider the following sequence of instructions:
1 : A
2 : B = @1
3 : B
4 : A = @3
5 : @1.x
Current copy-prop would replace 5 so it points to @3 now:
1 : A
2 : B = @1
3 : B
4 : A = @3
5 : @3.x
But in the next iteration it would make it point back to @1, keeping it
spinning infinitively.
The solution is to index the instructions and don't replace the swizzle
if the new load happens after the current load.
2023-11-29 22:53:24 +01:00
Francisco Casas
d877b877b3
vkd3d-shader/hlsl: Record trace of stored values in copy-propagation.
...
Instead of only storing the value that each variable's component has at
the moment of the instruction currently handled by copy-prop, we store
the trace of all the historic values with their timestamps, i.e. the
instruction index on which the value was stored.
This would allow us to query the value that the variable had at the time
of execution of previous instructions.
2023-11-29 22:53:21 +01:00
Francisco Casas
539294daea
vkd3d-shader/hlsl: Move index_instructions() up.
2023-11-29 22:53:19 +01:00
Francisco Casas
e6b7b38a29
tests: Test current failure when propagating swizzles.
...
The included test fails because copy_propagation_transform_swizzle()
is using the value recorded for the variable when the swizzle is being
read, and not the swizzle's load.
2023-11-29 22:53:16 +01:00
Giovanni Mascellani
a52604da8c
vkd3d-shader/dxil: Declare IO registers as VEC4.
...
Otherwise, for instance, their write masks and swizzles are not written
in the D3D ASM dump.
2023-11-28 21:49:18 +01:00
Biswapriyo Nath
c64909988f
include: Add ID3D12InfoQueue1 definition in vkd3d_d3d12sdklayers.idl.
2023-11-28 21:49:11 +01:00
Nikolay Sivov
6a4a9a4518
vkd3d-shader/hlsl: Handle 'linear centroid' modifier.
2023-11-28 00:10:12 +01:00
Zebediah Figura
10957bebbf
vkd3d-shader/tpf: Remove an unnecessary local variable declaration.
...
Found with -Wshadow.
2023-11-28 00:09:56 +01:00
Zebediah Figura
2d1825bb89
vkd3d-shader/hlsl: Remove an unnecessary local variable in copy_propagation_get_value().
...
Found with -Wshadow.
2023-11-28 00:09:53 +01:00
Zebediah Figura
d1ce069ea6
tests/shader_runner: Remove an unnecessary local variable declaration.
...
Found with -Wshadow.
2023-11-28 00:09:51 +01:00
Jacek Caban
d7b20d7c01
configure: Enable -Wenum-conversion warnings.
2023-11-28 00:09:29 +01:00
Jacek Caban
b47ac10b5c
gitlab: Remove no longer needed -Wno-enum-conversion from build-mac.
2023-11-28 00:09:29 +01:00
Jacek Caban
85f21f197c
vkd3d-shader: Avoid implicit enum pointer casts in allocate_semantic_register.
2023-11-28 00:09:29 +01:00
Jacek Caban
1edbc05745
vkd3d-shader: Use unsigned int type for tags passed to sm6_metadata_get_uint_value.
2023-11-28 00:09:29 +01:00
Jacek Caban
72bb5e8b02
vkd3d: Use VkPipelineStageFlags type for VkSubmitInfo.pWaitDstStageMask flags.
2023-11-28 00:09:28 +01:00
Alistair Leslie-Hughes
5c134d44d6
include: D3D12_RT_FORMAT_ARRAY remove typedef to make header compatible with windows.
...
windows d3d12.idl doesn't have this as a typedef.
2023-11-28 00:09:20 +01:00
Stefan Dösinger
2935ac5c7e
vkd3d: Forward MakeResident to EnqueueMakeResident.
2023-11-28 00:09:09 +01:00
Stefan Dösinger
bd35c91227
vkd3d: Improve the EnqueueMakeResident stub.
2023-11-28 00:09:06 +01:00
Giovanni Mascellani
f0a16d84ce
ci: Execute the shader runner on the correct test data on Windows.
2023-11-23 22:37:21 +01:00
Giovanni Mascellani
50a56f6aeb
ci: Deduplicate the CI configuration for Windows.
2023-11-23 22:37:19 +01:00
Henri Verbeet
beb3f6e0c2
tests: Introduce an OpenGL shader runner.
2023-11-22 22:08:11 +01:00
Francisco Casas
4e1bf5e163
vkd3d-shader/hlsl: Discern between signed and unsigned ints when parsing.
2023-11-22 22:08:05 +01:00
Francisco Casas
1ee9e23e00
tests: Test overloads with signed and unsigned numeric values.
2023-11-22 22:08:05 +01:00
Francisco Casas
9a8f6e0edb
vkd3d-shader/hlsl: Parse integers with the 'u' postfix.
2023-11-22 22:08:04 +01:00
Francisco Casas
3f09cdcaa1
tests: Test integers with the 'u' postfix.
2023-11-22 22:08:04 +01:00
Conor McCarthy
eb05e434ff
vkd3d-shader/dxil: Implement the DXIL LOAD instruction.
2023-11-22 22:07:59 +01:00
Conor McCarthy
59730ecfd8
vkd3d-shader/dxil: Implement the DXIL GEP instruction.
2023-11-22 22:07:58 +01:00
Conor McCarthy
a0f5d70792
vkd3d-shader/dxil: Support global variable initialisers.
2023-11-22 22:07:57 +01:00
Conor McCarthy
f2a656b876
vkd3d-shader/dxil: Introduce a value type for immediate constant buffers.
2023-11-22 22:07:56 +01:00
Conor McCarthy
85d5f83fb7
vkd3d-shader/dxil: Implement default address space global variables.
2023-11-22 22:07:54 +01:00
Conor McCarthy
920657e7ee
vkd3d-shader: Delete unused struct list from struct vkd3d_shader_indexable_temp.
2023-11-22 22:07:52 +01:00
Henri Verbeet
ae4341b565
vkd3d-shader/ir: Use location information from the instruction in vkd3d_shader_scan_instruction().
2023-11-21 22:41:58 +01:00
Henri Verbeet
01dad41862
vkd3d-shader/ir: Skip recording combined resource/sampler information for dynamically indexed descriptor arrays.
...
And output a warning instead.
2023-11-21 22:41:57 +01:00
Henri Verbeet
5b82afb83f
vkd3d-shader/ir: Decorate vkd3d_shader_scan_error() with VKD3D_PRINTF_FUNC.
2023-11-21 22:41:55 +01:00
Jacek Caban
616bf93931
include: Use GCC-style attributes and builtins on Clang MSVC target.
2023-11-20 22:07:54 +01:00
Jacek Caban
078cf6a240
vkd3d-shader/dxbc: Use return type to return result from read_u32 and read_float.
...
Avoid implicit casts from enum pointers.
2023-11-20 22:07:45 +01:00
Giovanni Mascellani
b1123ed35f
vkd3d-shader/ir: Correctly compute the TEMP count after hull shader flattening.
...
The previous computation was incorrect because the count was taken
after resetting it to zero (as part of setting the instruction to NOP).
2023-11-20 22:07:41 +01:00
Giovanni Mascellani
5cb17cfd1c
vkd3d-shader/ir: Validate IFC instructions.
2023-11-20 22:07:36 +01:00
Giovanni Mascellani
849a8f3add
vkd3d-shader/ir: Expect two sources for LOOP in SM1-3.
2023-11-20 22:07:35 +01:00
Henri Verbeet
73c563ffb7
vkd3d-shader/d3dbc: Adjust the token count for DEF and DEFI instructions in shader_sm1_skip_opcode().
...
This was broken by commit e390bc35e2c9b0a2110370f916033eea2366317e; that
commit fixed the source count for these instructions, but didn't adjust
shader_sm1_skip_opcode(). Note that this only affects shader model 1;
later versions have a token count embedded in the initial opcode token.
2023-11-20 22:07:29 +01:00
Nikolay Sivov
e55b6a7fa1
vkd3d-shader/hlsl: Add constants to the block for log()/log10() builtins.
2023-11-20 22:07:24 +01:00
Akihiro Sagawa
aed2d142cf
vkd3d-shader/hlsl: Add degrees() function.
2023-11-20 22:07:19 +01:00
Akihiro Sagawa
e493627130
vkd3d-shader/hlsl: Add radians() function.
2023-11-20 22:07:17 +01:00
Nikolay Sivov
88caf87789
vkd3d-shader/hlsl: Add a helper to check for a numeric type.
2023-11-15 21:48:49 +01:00
Conor McCarthy
76eb0adf03
vkd3d: Support depth bounds test.
2023-11-15 21:48:45 +01:00
Conor McCarthy
63b8972b0e
tests: Test CreatePipelineState().
...
Based on vkd3d-proton patches by Hans-Kristian Arntzen and Philip
Rebohle.
2023-11-15 21:48:44 +01:00
Conor McCarthy
d8ba0d2a11
vkd3d: Implement ID3D12Device2::CreatePipelineState().
2023-11-15 21:48:44 +01:00
Conor McCarthy
6196199a89
vkd3d: Use struct d3d12_pipeline_state_desc for compute pipelines.
2023-11-15 21:48:44 +01:00
Conor McCarthy
39afbb8e32
vkd3d: Introduce struct d3d12_pipeline_state_desc for graphics pipelines.
...
A generic container for both compute and graphics pipeline descriptions
to facilitate reading the description from a stream.
2023-11-15 21:48:42 +01:00
Conor McCarthy
529c0f46b0
include: Add a D3D12_RT_FORMAT_ARRAY typedef.
...
For consistency with how other D3D12_* structs are declared.
2023-11-15 21:48:41 +01:00
Conor McCarthy
fb588b8d1a
vkd3d-shader/spirv: Avoid invalid bool-to-bool conversion in spirv_compiler_emit_movc().
...
Shaders parsed from DXIL contain a bool condition register, so calling
spirv_compiler_emit_int_to_bool() results in an invalid bool/uint
comparison.
2023-11-15 21:48:36 +01:00
Conor McCarthy
3c4631a4d4
vkd3d-shader/dxil: Implement the DXIL VSELECT instruction.
2023-11-15 21:48:35 +01:00
Conor McCarthy
130e7bdf0f
tests/shader-runner: Add tests for 64-bit casts.
2023-11-15 21:48:33 +01:00
Conor McCarthy
08b8730866
vkd3d-shader/spirv: Return an error if an invalid handler is encountered.
...
Prevents return of an invalid SPIR-V module.
2023-11-15 21:48:31 +01:00
Conor McCarthy
38e85079aa
tests/shader-runner: Add a test for float comparisons.
2023-11-15 21:48:30 +01:00
Conor McCarthy
d957247c67
tests/shader-runner: Run d3d11 tests with a mimimum shader model of 4.0.
...
Passing less than 4.0 breaks the use of [require] with
'shader model < 4.0'.
2023-11-15 21:48:28 +01:00
Henri Verbeet
b7480911a8
build: Make doxygen output slightly less verbose.
...
There is perhaps a bit of a trade-off involved here, but with the
current state of things it's fairly hard to notice unexpected issues in
the output.
2023-11-14 23:06:49 +01:00
Conor McCarthy
408f67c69c
vkd3d-shader/dxil: Handle missing flags as zero for CMP2.
...
The flag operand is omitted if IEEE strictness is specified.
2023-11-14 23:06:43 +01:00
Conor McCarthy
f1e9f40061
vkd3d-shader/dxil: Handle missing flags as zero for BINOP.
...
The flag operand is omitted if IEEE strictness is specified.
2023-11-14 23:06:41 +01:00
Henri Verbeet
9de793f180
vkd3d-shader: Implement scanning combined resource/sampler information.
2023-11-13 23:19:23 +01:00
Nikolay Sivov
d190fdf8c5
vkd3d-shader/dxil: Fully initialize instruction data in sm6_parser_emit_extractval().
...
Noticed after test runner started crashing when tracing is enabled.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-13 23:19:18 +01:00
Nikolay Sivov
e7422fdefb
vkd3d: Fix some spelling mistakes.
2023-11-13 23:19:15 +01:00
Nikolay Sivov
3203485a7c
vkd3d-shader: Fix some spelling mistakes.
2023-11-13 23:19:15 +01:00
Nikolay Sivov
41a72a4eae
tests: Fix some spelling mistakes.
2023-11-13 23:19:14 +01:00
Henri Verbeet
215a2c4ede
vkd3d-shader/ir: Introduce vsir_register_is_descriptor().
2023-11-13 23:19:10 +01:00
Conor McCarthy
22960753e9
vkd3d-shader/spirv: Introduce orderedness to comparison instructions.
2023-11-10 20:23:51 +01:00
Conor McCarthy
d3b90cc877
vkd3d-shader/dxil: Implement the DXIL CMP2 instruction.
2023-11-10 20:23:50 +01:00
Conor McCarthy
1dd141535c
vkd3d-shader/spirv: Support bool dst register in spirv_compiler_emit_comparison_instruction().
2023-11-10 20:23:48 +01:00
Nikolay Sivov
418c177a1b
vkd3d-shader/hlsl: Implement texCUBEproj().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-10 20:23:44 +01:00
Nikolay Sivov
81ff57e07c
vkd3d-shader/hlsl: Implement tex3Dproj().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-10 20:23:43 +01:00
Nikolay Sivov
dd6a9135f4
vkd3d-shader/hlsl: Implement tex2Dproj().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-10 20:23:41 +01:00
Giovanni Mascellani
0c5c18bdce
vkd3d-shader/ir: Validate index count for IMMCONST64 registers.
2023-11-09 21:15:51 +01:00
Giovanni Mascellani
b74470b9d2
vkd3d-shader/ir: Validate index count for IMMCONST registers.
2023-11-09 21:15:49 +01:00
Giovanni Mascellani
c867682982
vkd3d-shader/ir: Validate index count for NULL registers.
2023-11-09 21:15:47 +01:00
Giovanni Mascellani
12fcb8dcc6
vkd3d-shader/ir: Validate register indices.
2023-11-09 21:15:44 +01:00
Giovanni Mascellani
b7aeb5dd70
vkd3d-shader/ir: Use vsir_register_init() to initialize a register.
2023-11-09 21:15:42 +01:00
Giovanni Mascellani
a869069a48
vkd3d-shader/ir: Validate the TEMP register indices in each HS phase.
2023-11-09 21:15:40 +01:00
Giovanni Mascellani
0f4bda9c9d
vkd3d-shader/ir: Keep track of hull shader phases.
2023-11-09 21:15:38 +01:00
Conor McCarthy
5768c019c1
vkd3d-shader/ir: Check the handler before changing it to NOP in remove_dead_code().
2023-11-09 21:15:29 +01:00
Zebediah Figura
ade8899456
vkd3d-shader/hlsl: Use hlsl_types_are_equal() in func_decl_matches().
...
Besides reusing code, this now handles UAV types correctly.
2023-11-09 21:15:21 +01:00
Zebediah Figura
8f041fbe6f
vkd3d-shader/hlsl: Return bool from compare_function_decl().
2023-11-09 21:15:19 +01:00
Zebediah Figura
fef118555c
vkd3d-shader/hlsl: Do not prioritize an exact match when looking up functions.
...
Native does not always do this. For example, functions whose parameters are
float and float1 always result in an "ambiguous function call" error.
This does not fix any tests, because the relevant tests previously (incorrectly)
succeeded, and now fail with:
E5017: Aborting due to not yet implemented feature: Prioritize between multiple compatible function overloads.
when they should simply fail.
2023-11-09 21:15:17 +01:00
Zebediah Figura
514d179b70
vkd3d-shader/hlsl: Do not consider scalars and 1-dimensional vectors to be equivalent in function parameters.
2023-11-09 21:15:14 +01:00
Zebediah Figura
b1c2852cd7
vkd3d-shader/hlsl: Store function overloads in a list.
...
The choice to store them in an rbtree was made early on. It does not seem likely
that HLSL programs would define many overloads for any of their functions, but I
suspect the idea was rather that intrinsics would be defined as plain
hlsl_ir_function_decl structures [cf. 447463e590
]
and that some intrinsics that could operate on any type would therefore need
many overrides.
This is not how we deal with intrinsics, however. When the first intrinsics were
implemented I made the choice disregard this intended design, and instead match
and convert their types manually, in C. Nothing that has happened in the time
since has led me to question that choice, and in fact, the flexibility with
which we must accommodate functions has led me to believe that matching in this
way was definitely the right choice. The main other designs I see would have
been:
* define each intrinsic variant separately using existing HLSL types. Besides
efficiency concerns (i.e. this would take more space in memory, and would take
longer to generate each variant), the normal type-matching rules don't really
apply to intrinsics.
[For example: elementwise intrinsics like abs() return the same type as the
input, including preserving the distinction between float and float1. It is
legal to define separate HLSL overloads taking float and float1, but trying to
invoke these functions yields an "ambiguous function call" error.]
* introduce new (semi-)generic types. This is far more code and ends up acting
like our current scheme (with helpers) in a slightly more complex form.
So I think we can go ahead and rip out this vestige of the original design for
intrinsics.
As for why to change it: rbtrees are simply more complex to deal with, and it
seems unlikely to me that the difference is going to matter. I do not expect any
program to define large quantities of intrinsics; linked list search should be
good enough.
2023-11-09 21:15:11 +01:00
Zebediah Figura
2b59a759d5
vkd3d-shader/hlsl: Rename hlsl_get_func_decl() to hlsl_get_first_func_decl().
2023-11-09 21:15:09 +01:00
Zebediah Figura
3e35570221
tests: Add some more tests for function overloads.
2023-11-09 21:15:08 +01:00
Zebediah Figura
011e31f624
vkd3d-shader/spirv: Remove no longer used private_output_variable_array_idx array.
2023-11-09 21:15:01 +01:00
Zebediah Figura
8513f567fa
vkd3d-shader/spirv: Look up builtins by vkd3d_shader_sysval_semantic.
...
Instead of by vkd3d_shader_input_sysval_semantic.
2023-11-09 21:14:57 +01:00
Zebediah Figura
87cb66dd43
vkd3d-shader/spirv: Simplify spirv_compiler_emit_dcl_input().
2023-11-09 21:14:55 +01:00
Zebediah Figura
c7a7d9a18c
vkd3d-shader/ir: Normalize all I/O registers to INPUT/OUTPUT/PATCHCONST.
...
Specifically, map COLOROUT to OUTPUT, and map INCONTROLPOINT to INPUT for domain
shaders as well as hull shaders.
Obscure the non-existent differences from the view of the backend.
2023-11-09 21:14:52 +01:00
Zebediah Figura
133e313800
vkd3d-shader/dxil: Do not use COLOROUT for PS outputs.
...
sm4 does not use this; only sm1 does. In following patches we will normalize it
to OUTPUT.
2023-11-09 21:14:49 +01:00
Conor McCarthy
90d178bf12
vkd3d-shader/dxil: Implement the DXIL CAST instruction.
2023-11-09 21:14:42 +01:00
Conor McCarthy
bd77cbb33f
vkd3d-shader/spirv: Support double in spirv_compiler_emit_ftou().
2023-11-09 21:14:40 +01:00
Conor McCarthy
92d546f3a2
vkd3d-shader/spirv: Support double in spirv_compiler_emit_ftoi().
2023-11-09 21:14:37 +01:00
Conor McCarthy
169210558d
vkd3d-shader/spirv: Handle unsigned result in spirv_compiler_emit_ftoi().
2023-11-09 21:14:35 +01:00
Conor McCarthy
58ffb5d181
vkd3d-shader/spirv: Introduce integer width cast instructions.
...
ITOI and UTOU may cast from a bool to a 32-bit integer. Cast to a 64-bit
integer from a smaller type will be added later.
2023-11-09 21:14:32 +01:00
Conor McCarthy
7de4ac2e48
vkd3d-shader/spirv: Support bool cast in spirv_compiler_emit_alu_instruction().
2023-11-09 21:14:30 +01:00
Conor McCarthy
5b87d6419a
vkd3d-shader/spirv: Support bool logic ops in spirv_compiler_emit_alu_instruction().
2023-11-09 21:14:27 +01:00
Conor McCarthy
b43dab50c1
vkd3d-shader/spirv: Support bitcast in spirv_compiler_emit_load_ssa_reg().
2023-11-09 21:14:25 +01:00
Henri Verbeet
2252f012ea
vkd3d: Add support for the ID3D12Resource1 interface.
2023-11-09 21:14:20 +01:00
Henri Verbeet
557b32a504
vkd3d-compiler: Introduce an option to specify the origin of fragment coordinates.
2023-11-09 21:14:14 +01:00
Henri Verbeet
e7eec3e023
vkd3d-shader/spirv: Allow the origin of fragment coordinates to be specified.
...
We typically want to use lower-left in OpenGL environments when rendering to
FBOs.
2023-11-09 21:14:12 +01:00
Zebediah Figura
0805ce121e
tests: Add more semantics to test_nop_tessellation_shaders().
...
To act as a regression test for 852eefc01d
.
2023-11-08 22:49:51 +01:00
Henri Verbeet
375b3e0db3
vkd3d-compiler: Sort the options in the usage text.
2023-11-08 22:49:47 +01:00
Henri Verbeet
4c4843126e
vkd3d-compiler: Slightly reword the --semantic-compat-map usage text.
2023-11-08 22:49:47 +01:00
Henri Verbeet
c5cc467394
vkd3d: Report D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE for UAV formats.
2023-11-08 22:49:43 +01:00
Henri Verbeet
000843b7c8
vkd3d: Report D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD for UAV formats when we have "uav_read_without_format".
2023-11-08 22:49:43 +01:00
Nikolay Sivov
4778d051df
vkd3d-shader: Add constant folding for 'floor'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:40 +01:00
Nikolay Sivov
634ec96b52
vkd3d-shader: Add a missing entry to instruction debug print helper.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:40 +01:00
Nikolay Sivov
955932fb55
vkd3d-shader: Add constant folding for 'ceil'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:40 +01:00
Nikolay Sivov
9a70ae5b6a
vkd3d-shader: Add support for floor() on SM1-3.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:40 +01:00
Nikolay Sivov
aaef82e680
vkd3d-shader: Add support for ceil() on SM1-3.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:40 +01:00
Nikolay Sivov
494f681bf6
vkd3d-shader/tpf: Add support for ceil().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:38 +01:00
Nikolay Sivov
4284b7c522
vkd3d-shader/hlsl: Parse ceil() function.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:37 +01:00
Nikolay Sivov
e57bf3db0b
tests: Add some tests for ceil().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:37 +01:00
Nikolay Sivov
76e42fbd21
vkd3d-shader/hlsl: Implement ternary operator for SM1.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:31 +01:00
Nikolay Sivov
522a0dfb56
vkd3d-shader/hlsl: Add tex2Dlod() function.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-08 22:49:26 +01:00
Zebediah Figura
852eefc01d
vkd3d-shader/ir: Synthesize HS inputs with the register index and write mask of the signature element.
...
This pass was written as if to output normalized I/O, but it runs before the I/O
normalization pass.
Fixes: 98b5e2c6e0
2023-11-07 22:26:53 +01:00
Zebediah Figura
12240efa79
vkd3d-shader/spirv: Use register counts from the signature and shader desc.
2023-11-07 22:26:49 +01:00
Zebediah Figura
0058764f01
vkd3d-shader: Store the control point counts in struct vkd3d_shader_desc.
2023-11-07 22:26:49 +01:00
Zebediah Figura
3ff22ac5af
vkd3d-shader/spirv: Use the array sizes for shader phase builtins as well.
2023-11-07 22:26:47 +01:00
Giovanni Mascellani
f8fcfc52d8
ci: Expect builds to always succeed, even when tests are allowed to fail.
2023-11-07 22:26:36 +01:00
Zebediah Figura
f0a6c7de1d
vkd3d-shader/hlsl: Record partial allocations in allocate_range().
2023-11-07 22:26:11 +01:00
Zebediah Figura
c683fc9402
vkd3d-shader/hlsl: Check that a partial register's mask is also available in is_range_available().
2023-11-07 22:26:10 +01:00
Giovanni Mascellani
7d49f9637a
vkd3d-shader/ir: Check that SWITCH blocks are correctly nested.
2023-11-07 22:26:05 +01:00
Giovanni Mascellani
93632fb407
vkd3d-shader/ir: Check that REP blocks are correctly nested.
2023-11-07 22:26:04 +01:00
Giovanni Mascellani
92c36615ed
vkd3d-shader/ir: Check that LOOP blocks are correctly nested.
2023-11-07 22:26:03 +01:00
Giovanni Mascellani
2f7d52dba4
vkd3d-shader/ir: Check that IF blocks are correctly nested.
2023-11-07 22:26:01 +01:00
Giovanni Mascellani
0a7e200f89
vkd3d-shader/ir: Do not enfore DCL_TEMPS count for hull shaders.
...
Hull shaders have a different temps count for each phase, and the
parser only reports the count for the patch constant phase.
In order to properly check for temps count on hull shaders, we first
need to decode its phases.
2023-11-07 22:26:00 +01:00
Giovanni Mascellani
ca3f594ae3
vkd3d-shader/ir: Emit an ERR() on validation errors.
2023-11-07 22:25:58 +01:00
Francisco Casas
0ef25ad137
vkd3d-shader/tpf: Support relative addressing for indexable temps in SM4.
...
For relative addressing, the vkd3d_shader_registers must point to
another vkd3d_shader_src_param. For now, use the sm4_instruction to save
them, since the only purpose of this struct is to be used as paramter
for write_sm4_instruction.
2023-11-07 22:25:49 +01:00
Francisco Casas
281796c526
vkd3d-shader/tpf: Move sm4_register_from_node() up.
2023-11-07 22:25:48 +01:00
Francisco Casas
e10d41d799
vkd3d-shader/tpf: Support writing relative addressing indexes.
2023-11-07 22:25:47 +01:00
Francisco Casas
617a20bffc
vkd3d-shader/tpf: Write register index addressing.
2023-11-07 22:25:45 +01:00
Francisco Casas
043526a9f7
vkd3d-shader/tpf: Encode dst and src registers using the same function.
...
This function will also be required to encode rel_addr registers.
2023-11-07 22:25:44 +01:00
Francisco Casas
915f9f1373
tests: Add aditional relative addressing tests.
2023-11-07 22:25:44 +01:00
Francisco Casas
3deb3b5a21
tests: Rename array-index-expr.shader_test as non-const-indexing.shader_test.
2023-11-07 22:25:42 +01:00
Henri Verbeet
a03e78bf62
vkd3d: Compile the UAV clear shaders at runtime.
2023-11-06 23:09:49 +01:00
Henri Verbeet
aa5380f32a
vkd3d-shader/tpf: Do not write RDEF constant buffer entries for HLSL_CLASS_OBJECT variables.
...
RWBuffer objects would trigger a vkd3d_unreachable() in sm4_base_type().
It would be easy enough to add the required case there, but (manual,
unfortunately) tests show that we aren't supposed to write constant
buffer entries for objects in the first place, as you'd expect.
This particular path ends up being exercised by vkd3d's internal UAV
clear shaders, but unfortunately it looks like our RDEF data may have
more issues; the ability to write tests for it would seem helpful.
2023-11-06 23:09:47 +01:00
Zebediah Figura
a9f33e8657
vkd3d-shader/hlsl: Consistently use HLSL allocation functions.
2023-11-06 23:09:22 +01:00
Zebediah Figura
b9c164c1c4
vkd3d-shader/hlsl: Sort keywords.
...
Done with `LC_ALL=C sort -f`.
2023-11-06 23:09:20 +01:00
Zebediah Figura
7632365e60
vkd3d-shader/hlsl: Remove C++ comment lexing.
...
This is already handled by the preprocessor.
2023-11-06 23:09:19 +01:00
Zebediah Figura
4cfc7d44ab
vkd3d-shader/hlsl: Remove some tokens from the lexer.
...
None of these currently have any meaning, and none of these can currently be
parsed as distinct tokens either (i.e. they will generate a syntax error
anyway).
2023-11-06 23:09:18 +01:00
Francisco Casas
98b5eb474a
vkd3d-shader/tpf: Don't pass 0x4 as mask for vec4 constant src registers.
...
Co-authored-by: Evan Tang <etang@codeweavers.com >
Evan Tang reported that new fixmes appeared on the shader_runner when
running some of his tests after
f50d0ae2cb
.
vkd3d:652593:fixme:shader_sm4_read_src_param Unhandled mask 0x4.
The change to blame seems to be this added line in
sm4_src_from_constant_value().
+ src->swizzle = VKD3D_SHADER_NO_SWIZZLE;
On tpf binaries the last 12 bits of each src register in an instruction
specify the swizzle, and there are 5 possible combinations:
Dimension NONE
-------- 00
Dimension SCALAR
-------- 01
Dimension VEC4, with a 4 bit writemask:
---- xxxx 00 01
Dimension VEC4, with an 8 bit swizzle:
xx xx xx xx 01 01
Dimension VEC4, with a 2bit scalar dimension number:
------ xx 10 01
So far, we have only seen src registers use 4 bit writemasks in a
single case: for vec4 constants, and it is always zero.
So we expect this:
---- 0000 00 01
Now, I probably wanted to initialize src->swizzle to zero when writing
constants, but VKD3D_SHADER_NO_SWIZZLE is not zero, it is actually the
default swizzle:
11 10 01 00
And the last 4 bits (0x4) get written in the mask part, which causes
the reader to complain.
2023-11-06 23:09:10 +01:00
Conor McCarthy
749df8dec2
vkd3d-shader/dxil: Implement the DXIL BINOP instruction.
2023-11-06 23:09:03 +01:00
Conor McCarthy
3e0638148a
vkd3d-shader/spirv: Support VKD3D_DATA_UINT in spirv_compiler_emit_neg().
...
The DXIL parser uses unsigned types even if the source code uses signed,
so unsigned values may be negated.
2023-11-06 23:09:02 +01:00
Conor McCarthy
4905d047bd
vkd3d-shader/spirv: Handle the UMUL instruction.
2023-11-06 23:09:01 +01:00
Conor McCarthy
acbc80cba2
vkd3d-shader/spirv: Introduce an IDIV instruction.
2023-11-06 23:09:00 +01:00
Conor McCarthy
c8d3515d8b
vkd3d-shader/spirv: Introduce an FREM instruction.
2023-11-06 23:08:58 +01:00
Giovanni Mascellani
bae6079047
include: Move D3D_BLOB_PART to a new header file.
...
According to a clang diagnostic, redefining a typedef is C11, and
we want to stick with C99.
2023-11-06 23:08:42 +01:00
Giovanni Mascellani
4e1f4cc428
ci: Make the MoltenVK logging less verbose.
2023-11-06 23:08:42 +01:00
Giovanni Mascellani
0d4aebd2e7
vkd3d-shader: Explicitly cast vkd3d_shader_global_flags to uint64_t.
...
On macOS vkd3d_shader_global_flags has underlying type unsigned long,
while uint64_t is defined as unsigned long long. This difference
causes a few warnings to be raised.
2023-11-06 23:08:37 +01:00
Giovanni Mascellani
2955232656
ci: Allow the artifact copy to fail.
...
If the build fails some artifact files might not exist, and we
don't want the script to fail just because of that.
2023-11-06 23:08:32 +01:00
Nikolay Sivov
31346e2cba
vkd3d-shader/tpf: Fix used temp registers accounting for dcl_temps.
...
Otherwise we always output "dcl_temps 1" even when no temp registers were used.
2023-11-06 23:08:10 +01:00
Zebediah Figura
f05be8ff12
vkd3d-shader/spirv: No longer handle builtin array size mismatch in spirv_compiler_emit_input().
...
This is taken care of by prior I/O lowering. We no longer need to deal with this here.
2023-11-06 23:07:59 +01:00
Zebediah Figura
fa23165cc0
vkd3d-shader/spirv: Remove handling of VKD3DSPR_OUTCONTROLPOINT.
...
I/O normalization removes this register type.
2023-11-06 23:07:58 +01:00
Zebediah Figura
b73d2c978d
vkd3d-shader/ir: Check for vocp usage during IR normalization.
...
The hull shader barrier used for this was broken by I/O normalization, since
vocp is no longer exposed to the spirv backend.
Restore this barrier by checking for vocp during normalization instead.
2023-11-06 23:07:56 +01:00
Zebediah Figura
8b42f523f2
vkd3d-shader/ir: Pass a vkd3d_shader_parser to instruction_array_normalise_io_registers().
2023-11-06 23:07:54 +01:00
Conor McCarthy
7419f4e31d
vkd3d-shader/dxil: Allow empty struct types.
2023-11-02 18:23:12 +01:00
Nikolay Sivov
dbcc4c4e40
vkd3d-shader/hlsl: Parse empty technique declarations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-02 18:23:07 +01:00
Nikolay Sivov
53b0101a53
vkd3d-shader/hlsl: Use case-insensitive match for the "technique" keyword.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-02 18:23:06 +01:00
Nikolay Sivov
ea8ff5394c
vkd3d-shader/hlsl: Add a keyword for fx_5_0 techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-02 18:23:05 +01:00
Nikolay Sivov
c588f33822
tests: Add some tests for using technique blocks when compiling for pixel/vertex profiles.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-02 18:23:04 +01:00
Conor McCarthy
7ca6a5452a
vkd3d-shader/dxil: Always apply the signature element start column to used_mask.
...
The used_mask value loaded from an additional tag/value pair is relative
to the start column.
2023-11-02 18:22:59 +01:00
Giovanni Mascellani
af72466db1
vkd3d-shader/ir: Validate the index of a TEMP register.
2023-11-02 18:22:52 +01:00
Giovanni Mascellani
4140b87499
vkd3d-shader/ir: Validate the DCL_TEMPS instruction.
2023-11-02 18:22:50 +01:00
Giovanni Mascellani
79fa5fd8bb
vkd3d-shader/ir: Validate the register index count.
2023-11-02 18:22:49 +01:00
Giovanni Mascellani
26e4191d4b
vkd3d-shader/ir: Validate the register dimension.
2023-11-02 18:22:47 +01:00
Giovanni Mascellani
f3a20be35a
vkd3d-shader/ir: Validate the register data type.
2023-11-02 18:22:38 +01:00
Giovanni Mascellani
72d0f765f2
vkd3d-shader/ir: Validate the register precision.
2023-11-02 18:22:37 +01:00
Giovanni Mascellani
f3c1a15a6f
vkd3d-shader/dxil: Use vsir_register_init() to initialize registers.
2023-11-02 18:22:35 +01:00
Giovanni Mascellani
2ba8c5771c
vkd3d-shader: Deduplicate profile version comparison functions.
2023-11-02 18:22:35 +01:00
Giovanni Mascellani
dd96fe50e2
vkd3d-shader: Dump shaders as soon as possible.
...
So that they are dumped even if parsing fails, which is a circumstance
in which one likely wants to see the problematic shader.
The downside of that is that for shader types other than HLSL
the profile is not written any more in the filename. This should
not be a big problem, because in those cases the shader describes
its own type.
When dumping an HLSL shader, the id is brought in front of the profile
in the file name, in order to make it more tab-friendly: when dealing
with a directory full of shaders it's likely that the id determines
the profile, but the other way around.
2023-11-02 18:22:26 +01:00
Giovanni Mascellani
ab09c0b45b
vkd3d-shader: Expose the whole profile when dumping an HLSL shader.
...
The profile cannot be reliably devised by analyzing the HLSL code,
so it's useful to have it included in the file name.
2023-11-02 18:22:24 +01:00
Nikolay Sivov
ecdc3f39d4
vkd3d-shader: Accept 'loop' attribute, on loops.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-01 21:47:49 +01:00
Nikolay Sivov
26784672d8
vkd3d-shader: Check loop [unroll] attribute for conflict with other attributes.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-01 21:47:49 +01:00
Nikolay Sivov
b8047fd650
tests: Add some tests for loop attributes.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-11-01 21:47:49 +01:00
Giovanni Mascellani
c691ad8869
tests: Immediately transition buffers after creation in the shader runner.
...
The resource could be destructed before the command list left open
is executed; instead, we immediately perform the transition.
2023-11-01 21:47:44 +01:00
Giovanni Mascellani
46b7fccfd7
tests: Immediately transition textures after creation in the shader runner.
...
The resource could be destructed before the command list left open
is executed; instead, we immediately perform the transition.
2023-11-01 21:47:43 +01:00
Giovanni Mascellani
ca7fa0c015
tests: Immediately transition resources after readback in the shader runner.
...
The resource could be destructed before the command list left open
is executed; instead, we immediately perform the transition.
2023-11-01 21:47:41 +01:00
Conor McCarthy
589670180a
vkd3d-shader/dxil: Implement the DXIL EXTRACTVAL instruction.
2023-11-01 21:47:34 +01:00
Conor McCarthy
e899b67bbf
vkd3d-shader/spirv: Support scalar swizzle of vector SSA registers.
2023-11-01 21:47:33 +01:00
Conor McCarthy
43b5d73870
vkd3d-shader/dxil: Implement DX instruction CBufferLoadLegacy.
2023-11-01 21:47:32 +01:00
Conor McCarthy
3b1bbe2b0a
vkd3d-shader/dxil: Implement DX instruction CreateHandle.
2023-11-01 21:47:30 +01:00
Conor McCarthy
f57d65361a
vkd3d-shader/dxil: Replace register_address_init() with register_index_address_init().
...
Makes it much clearer which register index is being written.
2023-11-01 21:47:29 +01:00
Nikolay Sivov
8e5c8c1725
tests: Add some tests for 'technique' token behaviour.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:59:45 +01:00
Nikolay Sivov
214d44fb11
tests: Add [effect] section support.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:59:45 +01:00
Zebediah Figura
a66acea1b5
vkd3d-shader/spirv: Always use the sysval from the signature.
2023-10-31 21:59:40 +01:00
Zebediah Figura
eef62b95c1
vkd3d-shader/spirv: Use the interpolation mode from the signature.
2023-10-31 21:59:39 +01:00
Zebediah Figura
15b69721de
vkd3d-shader/tpf: Set the interpolation mode for signature elements.
2023-10-31 21:59:38 +01:00
Zebediah Figura
6b7834d635
vkd3d-shader/d3dbc: Set the interpolation mode for signature elements.
2023-10-31 21:59:36 +01:00
Zebediah Figura
a668f1ce1c
vkd3d-shader: Handle a NULL descriptor info in vkd3d_shader_scan_add_descriptor().
2023-10-31 21:59:33 +01:00
Nikolay Sivov
ea554b91d7
tests: Remove unused parameter from mul() tests functions.
2023-10-31 21:59:29 +01:00
Francisco Casas
eef2163375
vkd3d-shader/tpf: Declare indexable temps.
...
If var->indexable, then the variable is given a unique register number,
regardless of its lifetime.
2023-10-31 21:59:22 +01:00
Francisco Casas
83c313ecc6
vkd3d-shader/hlsl: Mark vars that require non-constant dereferences.
2023-10-31 21:59:21 +01:00
Francisco Casas
313df300ad
vkd3d-shader/hlsl: Rename hlsl_deref.offset to hlsl_deref.rel_offset.
...
This field is now analogous to vkd3d_shader_register_index.rel_addr.
Also, it makes sense to rename it now because all the constant part of
the offset is now handled to hlsl_deref.const_offset. Consequently, it
may also be NULL now.
2023-10-31 21:59:19 +01:00
Francisco Casas
74767beaf6
vkd3d-shader/hlsl: Absorb hlsl_ir_constant deref offsets into const_offset.
2023-10-31 21:59:18 +01:00
Francisco Casas
1520f327e5
vkd3d-shader/hlsl: Express deref->offset in whole registers.
...
This is required to use SM4 relative addressing, because it is limited
to whole-register granularity.
2023-10-31 21:59:16 +01:00
Francisco Casas
61a17643a2
vkd3d-shader/hlsl: Split deref-offset into a node and a constant uint.
...
This uint will be used for the following:
- Since SM4's relative addressing (the capability of passing a register
as an index to another register) only has whole-register granularity,
we will need to make the offset node express the offset in
whole-registers and specify the register component in this uint,
otherwise we would have to add additional / and % operations in the
output binary.
- If, after we apply constant folding and copy propagation, we determine
that the offset is a single constant node, we can store all the offset
in this uint constant, and remove the offset src.
This allows DCE to remove a good bunch of the nodes previously required
only for the offset constants, which makes the output more liteweight
and readable, and simplifies the implementation of relative addressing
when writing tpf in the following patches.
In dump_deref(), we use "c" to indicate components instead of whole
registers. Since now both the offset node and the offset uint are in
components a lowered deref would look like:
var[@42c + 2c]
But, once we express the offset node in whole registers we will remove
the "c" from the node part:
var[@22 + 3c]
2023-10-31 21:59:14 +01:00
Francisco Casas
81be47c00b
vkd3d-shader/hlsl: Introduce hlsl_deref_is_lowered() helper.
...
Some functions work with dereferences and need to know if they are
lowered yet.
This can be known checking if deref->offset.node is NULL or
deref->data_type is NULL. I am using the latter since it keeps working
even after the following patches that split deref->offset into
constant and variable parts.
2023-10-31 21:59:12 +01:00
Francisco Casas
e93568f290
vkd3d-shader/hlsl: Clean-up instruction block for offset node creation.
2023-10-31 21:59:11 +01:00
Francisco Casas
ab463f74bd
tests: Test array indexing with multiple swizzles.
2023-10-31 21:59:11 +01:00
Nikolay Sivov
bc2a4ee66a
vkd3d-shader/tpf: Write out 'switch' statements.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:59:05 +01:00
Nikolay Sivov
68c14079a6
vkd3d-shader/hlsl: Add a pass to normalize switch cases blocks.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:59:04 +01:00
Nikolay Sivov
c84d4e3571
vkd3d-shader/hlsl: Add a pass to remove unreachable code.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:59:03 +01:00
Nikolay Sivov
a4fa323e6c
vkd3d-shader/hlsl: Add copy propagation logic for switches.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:59:02 +01:00
Nikolay Sivov
72623031a2
vkd3d-shader/hlsl: Validate break/continue context.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:59:01 +01:00
Nikolay Sivov
9a6e4a0c58
vkd3d-shader/hlsl: Check for duplicate case statements.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:58:59 +01:00
Nikolay Sivov
ec8dfa467f
vkd3d-shader/hlsl: Add initial support for parsing 'switch' statements.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:58:57 +01:00
Nikolay Sivov
ebb5aacabf
tests: Add some tests for the 'switch' statements.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-31 21:58:57 +01:00
Giovanni Mascellani
f462d237c1
ci: Run shader tests on Windows.
2023-10-31 21:58:53 +01:00
Giovanni Mascellani
dbc5e7d07c
ci: Run cross tests on Windows.
...
A driver program is introduced to coordinate test running on Windows,
similarly to what "make test" does on Linux and macOS.
2023-10-31 21:58:51 +01:00
Henri Verbeet
f75bdd6e21
vkd3d-utils: Implement D3DStripShader().
2023-10-19 23:07:50 +02:00
Conor McCarthy
b7b128595e
vkd3d-shader/dxil: Read CBV descriptors.
2023-10-19 23:07:45 +02:00
Conor McCarthy
1e5f91b371
vkd3d-shader: Emit IR CBV declaration sizes in bytes.
...
DXIL declares CBV sizes in bytes and they are not aligned to 16 bytes.
2023-10-19 23:07:43 +02:00
Conor McCarthy
f7525bf0c6
vkd3d-shader/dxil: Validate the descriptor list metadata nodes.
2023-10-19 23:07:42 +02:00
Conor McCarthy
9b64d04ed3
vkd3d-shader/spirv: Align constant buffer sizes to 16 bytes.
...
DXIL constant buffer sizes are not aligned to 16 bytes.
2023-10-19 23:07:40 +02:00
Henri Verbeet
96556a8834
vkd3d-shader/hlsl: Add support for RWTexture2DArray.
2023-10-19 23:07:31 +02:00
Henri Verbeet
6fe781ff50
tests: Add basic RWTexture2DArray tests.
2023-10-19 23:07:31 +02:00
Henri Verbeet
2c71c18879
vkd3d-shader/hlsl: Add support for RWTexture1DArray.
2023-10-19 23:07:30 +02:00
Henri Verbeet
ae9d29a377
tests: Add basic RWTexture1DArray tests.
2023-10-19 23:07:29 +02:00
Nikolay Sivov
c837f007e2
vkd3d-compiler: Dynamically allocate options array.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-19 23:03:25 +02:00
Nikolay Sivov
e242b46922
vkd3d-shader/tpf: Convert some of the semantic names to system values names when in compatibility mode.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-19 23:03:23 +02:00
Conor McCarthy
a4ed06bc5b
vkd3d-shader/d3d-asm: Recognise the 'rasteriser ordered view' UAV flag.
2023-10-18 20:58:27 +02:00
Henri Verbeet
9ce98f9be5
vkd3d-utils: Implement D3DGetOutputSignatureBlob().
2023-10-18 20:58:24 +02:00
Henri Verbeet
9d9f762ede
vkd3d-utils: Implement D3DGetInputSignatureBlob().
2023-10-18 20:58:24 +02:00
Henri Verbeet
be8efb9c9c
vkd3d-utils: Implement D3DGetInputAndOutputSignatureBlob().
2023-10-18 20:58:24 +02:00
Henri Verbeet
247eaa6b7d
vkd3d-utils: Implement D3DGetDebugInfo().
2023-10-18 20:58:24 +02:00
Henri Verbeet
b63c853688
vkd3d-utils: Implement D3DGetBlobPart().
...
This was largely adapted from Wine's d3dcompiler_43, with some style
adjustments.
2023-10-18 20:58:22 +02:00
Giovanni Mascellani
0dc40d7c1e
tests: Skip processing resources according to [require] directives.
2023-10-18 20:58:19 +02:00
Giovanni Mascellani
d69c04471e
tests: Do not test matrix majority on SM1-3.
...
I'm not sure of what's happening here, but it seems that this change
fixes a crash when running on Windows in the CI. Since most of the
test excludes SM1-3 anyway, this shouldn't be a big loss.
2023-10-18 20:58:18 +02:00
Giovanni Mascellani
ca51c359ec
tests: Fix the usage of require directives.
...
They are reset each time "[require]" is encountered.
2023-10-18 20:58:17 +02:00
Giovanni Mascellani
ead98ef329
tests: Remove an irrelevant input from a test.
...
The irrelevant input caused the test to fail on D3D12 for reasons
unrelated to the test's goal.
2023-10-18 20:58:16 +02:00
Giovanni Mascellani
671548494f
tests: Do not test integral types for SM1-3.
2023-10-18 20:58:16 +02:00
Giovanni Mascellani
90f9407b80
tests: Do not use global half values.
...
They are not allowed by the native compiler, except in compatibility
mode.
2023-10-18 20:58:14 +02:00
Giovanni Mascellani
54239da200
ci: Properly pass -W flags for cross tests building.
2023-10-18 20:58:12 +02:00
Henri Verbeet
4e8ba62481
vkd3d-shader/spirv: Initialise "symbol.descriptor_array" in spirv_compiler_emit_combined_sampler_declarations().
...
Besides simply avoiding carrying around some uninitialised data, we
check "symbol->descriptor_array" in spirv_compiler_prepare_image(), both
for separate resources and for combined resource/sampler symbols.
2023-10-17 22:18:44 +02:00
Henri Verbeet
803e5183cc
tests: Specify argument types for dxcompiler_create().
2023-10-17 22:18:36 +02:00
Conor McCarthy
85c165ff39
vkd3d-shader/dxil: Read DXIL compute shader thread group dimensions.
2023-10-17 22:18:26 +02:00
Conor McCarthy
4b7ca0c294
vkd3d-shader/dxil: Read DXIL global flags.
2023-10-17 22:18:25 +02:00
Conor McCarthy
06f8a88466
vkd3d-shader: Define more global flags.
2023-10-17 22:18:23 +02:00
Henri Verbeet
47d4097efa
vkd3d-utils: Check for a NULL 'blob' pointer in D3DCreateBlob().
2023-10-16 22:36:58 +02:00
Giovanni Mascellani
eaf35c394d
tests: Skip test_atomic_instructions() on WARP.
...
Pipeline creation fails with E_INVALIDARG, atomics are likely not
supported on WARP.
2023-10-16 22:36:52 +02:00
Giovanni Mascellani
0d4a5f1860
tests: Skip test_unbounded_resource_arrays() on WARP.
...
Most reads on WARP are off by a few units. I haven't investigated
the reason.
2023-10-16 22:36:50 +02:00
Giovanni Mascellani
fe88dafdbd
tests: Skip test_execute_indirect() on WARP.
...
The device is eventually lost, indirect commands are likely not
supported on WARP.
2023-10-16 22:36:49 +02:00
Giovanni Mascellani
ee3c4b6555
tests: Skip test_get_copyable_footprints() on WARP.
...
There are 12025 failures with WARP. I haven't investigated them.
2023-10-16 22:36:47 +02:00
Giovanni Mascellani
d72e30f1d1
tests: Skip test_null_vbv() on WARP.
...
On WARP 0xffffffff is read instead of zero.
2023-10-16 22:36:45 +02:00
Giovanni Mascellani
14c9be697f
tests: Acknowledge some double operations being broken on WARP.
2023-10-16 22:36:45 +02:00
Giovanni Mascellani
3f87cf9d7f
tests: Acknowledge WARP giving a GPU handle to a non-shader-visible descriptor heap.
...
WARP has no GPU, so it probably treats GPU handles just like CPU handles.
2023-10-16 22:36:43 +02:00
Giovanni Mascellani
862dcf27a6
tests: Acknowledge WARP accepting some unusual CreateCommittedResource() configuration.
...
A software implementation can conceivably satisfy some requests that
cannot work on real hardware.
2023-10-16 22:36:41 +02:00
Conor McCarthy
e0d0a04b79
vkd3d-shader/dxil: Handle multi-row signature elements.
2023-10-16 22:36:38 +02:00
Conor McCarthy
7113064a19
vkd3d-shader/dxil: Handle signature element additional tag/value pairs.
2023-10-16 22:36:36 +02:00
Conor McCarthy
8648ca0e77
vkd3d-shader/dxil: Read the DXIL input and output signatures.
...
These can differ from the DXBC signatures by having multiple rows, and
load/store instructions reference them by id instead of register index.
2023-10-16 22:36:29 +02:00
Conor McCarthy
62badbff7a
vkd3d-shader/dxil: Validate the entry point info.
2023-10-16 22:36:28 +02:00
Henri Verbeet
e53178f395
tests: Use the same viewport origin and front-face orientation in the Vulkan and D3D runners.
...
I.e., top-left origin, and clockwise front-facing. These end up cancelling
each other out when drawing full-screen quads, but that's not necessarily true
for other geometry.
2023-10-16 22:36:22 +02:00
Giovanni Mascellani
1bd8baf420
ci: Run tests using dxcompiler.
...
The dxcompiler is only used for 64 bit builds, because no official
32 bit implementation is distributed. This might change in the future
building the compiler ourselves and using vkd3d-shader to sign the
generated shaders.
2023-10-16 22:36:17 +02:00
Giovanni Mascellani
680a5aaa78
ci: Build the DXIL parser.
2023-10-16 22:36:17 +02:00
Giovanni Mascellani
c1de65a99b
tests: Fail if dxcompiler is not available at runtime.
2023-10-16 22:36:17 +02:00
Giovanni Mascellani
1ee0cbb627
ci: Build widl for 64 bit.
2023-10-16 22:36:15 +02:00
Francisco Casas
38a7309758
vkd3d-shader/d3dbc: Use D3DSIO_TEXKILL instead of VKD3D_SM1_OP_TEXKILL (clangd).
2023-10-12 23:27:24 +02:00
Francisco Casas
7960836551
vkd3d-shader/hlsl: Remove enum hlsl_error_level (clangd).
...
It is only used once for calling hlsl_note(), and it expects an enum
vkd3d_shader_log_level values instead.
2023-10-12 23:27:22 +02:00
Francisco Casas
432fa8fa8f
vkd3d-shader/tpf: Avoid translations to D3DDECLUSAGE and back (clangd).
2023-10-12 23:27:19 +02:00
Francisco Casas
f0da419a8c
vkd3d-shader: Remove unnecessary fallthroughs (clangd).
2023-10-12 23:27:19 +02:00
Conor McCarthy
6034f4a976
vkd3d-shader/dxil: Read DXIL metadata named nodes.
2023-10-12 18:23:33 +02:00
Conor McCarthy
4ac201788d
vkd3d-shader/dxil: Read DXIL metadata kinds.
2023-10-12 18:23:32 +02:00
Conor McCarthy
cba3e18c45
vkd3d-shader/dxil: Read DXIL metadata values.
2023-10-12 18:23:31 +02:00
Conor McCarthy
5817fabc30
vkd3d-shader/dxil: Read DXIL metadata nodes.
2023-10-12 18:23:30 +02:00
Conor McCarthy
a62343f544
vkd3d-shader/dxil: Read DXIL metadata strings.
2023-10-12 18:23:29 +02:00
Conor McCarthy
05d516bb00
vkd3d-shader/dxil: Emit an error on allocation failure in dxil_record_to_string().
2023-10-11 22:21:22 +02:00
Conor McCarthy
52dc6f252c
vkd3d-shader/dxil: Read global constants in sm6_parser_globals_init().
...
These are needed for reading metadata.
2023-10-11 22:21:20 +02:00
Conor McCarthy
df4e1b7393
vkd3d-shader/dxil: Read immediate constant arrays.
2023-10-11 22:21:19 +02:00
Conor McCarthy
57280673e5
tests/shader-runner: Test shaders with dxcompiler.
...
The location of dxcompiler should be set during configuration with
'DXCOMPILER_LIBS=-L/path/to/dxcompiler', and then at runtime with
LD_LIBRARY_PATH, WINEPATH or PATH as applicable.
A new 'fail(sm<6)' decoration is needed on many shader declarations
because dxcompiler succeeds on many shaders which fail with fxc. The
opposite case is less common and is flagged with 'fail(sm>=6)'. A few
tests cause dxcompiler to crash or hang, so these are avoided using
[require], which now skips tests until reset instead of exiting. Also,
'todo(sm<6)' and 'todo(sm>=6)' are used to separate checking of results.
2023-10-11 22:21:14 +02:00
Conor McCarthy
d211160b89
tests/shader-runner: Replace immediate shader type strings with an enum.
2023-10-11 22:21:14 +02:00
Conor McCarthy
0ef0735999
tests/shader-runner: Do not exit if a 'require' directive is not met.
...
Tests are skipped until the next 'require' directive, which restores
the defaults before the new requirements are read.
2023-10-11 22:21:14 +02:00
Conor McCarthy
192f4dcb2b
tests/shader-runner: Handle individual keywords in shader directives.
...
Matching all possible combinations of keywords becomes too complex
if more keywords are added.
2023-10-11 22:21:14 +02:00
Nikolay Sivov
9c6c7cb78f
vkd3d: Add partial implementation for CreateCommittedResource1().
2023-10-10 22:11:46 +02:00
Zebediah Figura
72e8b6e0dc
include: Fix some confusingly structured documentation.
...
Fixes: 7a4ae434df
.
2023-10-10 22:11:37 +02:00
Zebediah Figura
6a942581db
vkd3d-shader/ir: Translate TEX instructions to SAMPLE.
2023-10-09 21:58:40 +02:00
Zebediah Figura
bd9eae6c22
vkd3d-shader: Scan combined sampler declarations.
...
This does not handle 1.x samplers yet.
2023-10-09 21:58:38 +02:00
Zebediah Figura
7a4ae434df
include: Define an API for mapping sm1 samplers to the target environment.
2023-10-09 21:58:38 +02:00
Zebediah Figura
2bcd6ea893
vkd3d-shader: Introduce a separate register type for combined samplers.
2023-10-09 21:58:38 +02:00
Nikolay Sivov
3af629cf8c
vkd3d-shader/tpf: Output interpolation modifiers for input declarations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:31 +02:00
Nikolay Sivov
8479ceedfc
vkd3d-shader/hlsl: Propagate structure fields modifiers when copying shader inputs.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:29 +02:00
Nikolay Sivov
1930b51d97
vkd3d-shader/hlsl: Allow interpolation modifiers on structure fields.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:27 +02:00
Nikolay Sivov
de860c3cbf
vkd3d-shader/hlsl: Parse 'centroid' and 'noperspective' modifiers.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:24 +02:00
Nikolay Sivov
4b8a4809d1
tests: Add a test for interpolation modifiers specified on structure fields.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:24 +02:00
Nikolay Sivov
c5414fa92f
vkd3d-shader/tpf: Write 'continue' instruction.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:17 +02:00
Nikolay Sivov
e4b423d6b5
vkd3d-shader/hlsl: Handle 'continue' statements.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:14 +02:00
Nikolay Sivov
0e5749e78e
vkd3d-shader/hlsl: Allow 'break' instructions in loops.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:12 +02:00
Nikolay Sivov
89f493b900
tests: Add some tests for 'break'/'continue' in loops.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:12 +02:00
Nikolay Sivov
6ba75fd92f
vkd3d: Add partial implementation for CreateHeap1().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-09 21:58:07 +02:00
Conor McCarthy
75c2af3640
vkd3d-shader/spirv: When declaring a CBV initialise the register with the register index range.
...
The declaration instruction register contains id, range first, and range
last. The backend includes range first in the variable name. After commit
e8b3561252
it was always zero, and since commit 67f0196c33
it is
UINT_MAX, so constant buffers are named, e.g., "%cb0_4294967295".
2023-10-09 21:58:01 +02:00
Zebediah Figura
a4c5f3a798
vkd3d-shader/spirv: Add a debug name for the push constant buffer.
2023-10-09 21:57:53 +02:00
Henri Verbeet
98d158d004
vkd3d-shader/tpf: Get rid of the output map.
...
Map output registers in the backend instead, as needed.
2023-10-09 21:57:46 +02:00
Henri Verbeet
31ce7c3a38
vkd3d-shader/hlsl: Get rid of the vkd3d_sm4_* forward declarations in hlsl.h.
...
These are no longer needed outside of tpf.c.
2023-10-09 21:57:38 +02:00
Francisco Casas
014960b64b
vkd3d-shader/tpf: Use lookup table for opcode_info_from_sm4().
...
Makes get_opcode_info() and thus, tpf reading a little faster.
2023-10-05 16:16:27 +02:00
Francisco Casas
88b644a11d
vkd3d-shader/tpf: Don't store sm4 instruction extra bits in the opcode.
...
Adding extra bits to instr->opcode doesn't seem correct, given that it
is an enum.
For instance, get_opcode_info() would return NULL if additional bits are
added to instr->opcode. This is not a problem now because that function
is called when reading and not writing.
2023-10-05 16:16:24 +02:00
Francisco Casas
0a5fa80f02
vkd3d-shader/tpf: Apply mask to swizzle when swizzle type is scalar.
...
In native's output, for scalar swizzles only the first component of the
swizzle is written, the others are left as zero.
2023-10-05 16:16:21 +02:00
Francisco Casas
f06169afc5
vkd3d-shader/tpf: Don't calculate instruction size in advance.
...
Co-authored-by: Henri Verbeet <hverbeet@codeweavers.com >
2023-10-05 16:16:19 +02:00
Nikolay Sivov
7c378cc6f9
vkd3d-shader/hlsl: Remove conditional branching when condition is a compile time constant.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-05 16:16:09 +02:00
Nikolay Sivov
f3389789b2
vkd3d-shader: Add constant folding for 'rsq'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-05 16:16:03 +02:00
Nikolay Sivov
a58c659b10
vkd3d-shader/hlsl: Add constant folding for binary complement operator.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-05 16:15:56 +02:00
Nikolay Sivov
8ebccad3c9
vkd3d-shader/hlsl: Add constant folding for rshift.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-05 16:15:54 +02:00
Nikolay Sivov
6e74819eb7
vkd3d-shader/hlsl: Add constant folding for lshift.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-05 16:15:52 +02:00
Nikolay Sivov
8c9d65d6b3
vkd3d-shader/hlsl: Add constant folding for logical 'not', for bools.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-05 16:15:50 +02:00
Francisco Casas
4ab6572be7
vkd3d-shader/hlsl: Replace hlsl_type_get_regset() uses with hlsl_deref_get_regset().
2023-10-05 16:15:37 +02:00
Francisco Casas
a214b7374b
vkd3d-shader/hlsl: Avoid hlsl_type_get_regset() in allocate_register_reservations().
2023-10-05 16:15:34 +02:00
Francisco Casas
e64e08b2b7
tests: Test register reservations on structs for SM5.
2023-10-05 16:15:30 +02:00
Francisco Casas
cd0e3786c3
vkd3d-shader/hlsl: Avoid hlsl_type_get_regset() in sm4_get_extern_resources().
2023-10-05 16:15:28 +02:00
Francisco Casas
dfce1e7f4a
vkd3d-shader/hlsl: Make regset an output argument in hlsl_type_get_component_offset().
...
Components only span across a single regset, so instead of expecting the
regset as input for the offset, hlsl_type_get_component_offset() can
actually retrieve it.
2023-10-05 16:15:26 +02:00
Nikolay Sivov
b5c0c9c22f
vkd3d-shader/hlsl: Add fwidth() function.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-10-05 16:15:10 +02:00
Andrey Gusev
8087cc01f7
vkd3d: Add ID3D12GraphicsCommandList5 interface stub.
2023-10-05 16:15:02 +02:00
Alistair Leslie-Hughes
71715cc434
vkd3d-shader: Fix compiler warning.
...
vkd3d-shader/tpf.c:3810:39: warning: passing argument 2 of ‘sm4_register_from_node’ from incompatible pointer type [-Wincompatible-pointer-types]
vkd3d-shader/tpf.c:4750:59: warning: passing argument 3 of ‘sm4_register_from_deref’ from incompatible pointer type [-Wincompatible-pointer-types]
Change to use uint32_t as requested.
2023-10-05 16:14:44 +02:00
Francisco Casas
c92772657f
vkd3d-shader/tpf: Replace sm4_src_register with vkd3d_shader_src_param.
2023-10-03 21:27:48 +02:00
Francisco Casas
13f62e60e1
vkd3d-shader/tpf: Remove sm4_src_register.swizzle_type.
2023-10-03 21:27:47 +02:00
Francisco Casas
32f03468fc
vkd3d-shader/tpf: Make sm4_src_register.mod a vkd3d_shader_src_modifier enum.
2023-10-03 21:27:45 +02:00
Andrey Gusev
679203f717
vkd3d: Add ID3D12GraphicsCommandList4 interface stub.
2023-10-03 21:27:34 +02:00
Giovanni Mascellani
d10e94d8d5
ci: Update the README with some recent changes.
2023-10-02 22:25:16 +02:00
Giovanni Mascellani
ede1ff6951
demos: Do not trigger -Wmissing-prototypes for wmain().
...
For some reason wmain() is not exempted from -Wmissing-prototypes
in the same way as main() is. So we just declare a prototype for it.
2023-10-02 22:25:14 +02:00
Giovanni Mascellani
627cf50320
vkd3d: Use CONST_VTABLE.
2023-10-02 22:25:14 +02:00
Giovanni Mascellani
ef77d78a39
ci: Store config.log as a build artifact.
2023-10-02 22:25:14 +02:00
Giovanni Mascellani
fd6c6895d6
ci: Compile with -Werror.
...
Manually disable some warnings that are currently emitted. Eventually
the warnings should be solved and -Werror should remain alone.
2023-10-02 22:25:13 +02:00
Conor McCarthy
39be40ce94
tests: Destroy the test context in test_readback_map_stability().
2023-10-02 22:25:10 +02:00
Giovanni Mascellani
6743439e97
vkd3d-dxbc: Print section offsets.
2023-10-02 22:25:06 +02:00
Andrey Gusev
1006e8cbd4
vkd3d: Add ID3D12Device5 interface stub.
2023-09-28 23:13:29 +02:00
Francisco Casas
f50d0ae2cb
vkd3d-shader/tpf: Store vkd3d-shader swizzles in sm4_src_register.swizzle.
2023-09-28 23:13:16 +02:00
Francisco Casas
ef9ec28eb0
vkd3d-shader/tpf: Replace sm4_dst_register with vkd3d_shader_dst_param.
2023-09-28 23:13:14 +02:00
Francisco Casas
d41d8f8771
vkd3d-shader/tpf: Rename sm4_dst_register.writemask to write_mask.
2023-09-28 23:13:12 +02:00
Henri Verbeet
5503a025d9
tests: Add some missing vkd3d_test_pop_context() calls to test_shader_instructions().
2023-09-28 23:13:04 +02:00
Andrey Gusev
acd3ed97dc
vkd3d: Add ID3D12Device4 interface stub.
2023-09-27 22:34:52 +02:00
Francisco Casas
123e399b89
vkd3d-shader/d3d-asm: Don't print offset for DEPTHOUT registers.
...
This register is unique and thus is not accompanied with an offset in
the native disassembler output.
2023-09-27 22:34:48 +02:00
Francisco Casas
ef1567c17b
vkd3d-shader/d3d-asm: Use vkd3d_shader_register.dimension to know when to dump writemask.
...
This change ensures that we don't dump the writemask for registers that
have a scalar dimension.
For instance, for this shader:
float r;
float4 main(out float d : DEPTH) : sv_target
{
d = r;
return 0;
}
we now correctly dump
dcl_output oDepth
instead of
dcl_output oDepth.x
2023-09-27 22:34:47 +02:00
Francisco Casas
a358722f71
vkd3d-shader/d3d-asm: Use vkd3d_shader_register.dimension to know when to dump swizzle.
...
The assumption that sampler registers never have a swizzle is not
totally correct.
For instance, for the following shader:
Texture2D tex;
sampler sam;
float4 main() : sv_target
{
return tex.GatherGreen(sam, float2(0, 0));
}
the gather instruction is being disassembled as
gather4_indexable(texture2d) o0.xyzw, l(0.0, 0.0, 0.0, 0.0), t0.xyzw, s0
instead of
gather4_indexable(texture2d)(float,float,float,float) o0.xyzw, l(0.0, 0.0, 0.0, 0.0), t0.xyzw, s0.y
(notice the missing swizzle in the last parameter s0).
This is because the Gather instructions give the sampler register a vec4
dimension (and scalar swizzle type) to indicate the channel for the
gather operation.
The solution is using the new vkd3d_shader_register.dimension instead of
checking the swizzle type.
2023-09-27 22:34:46 +02:00
Martin Storsjö
e44a1927e5
include: Add an #include of d3d12sdklayers.h in vkd3d_d3d12.idl.
...
This matches what is done in the upstream headers; end users
including d3d12.h don't need to explicitly include d3d12sdklayers.h.
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-27 22:34:34 +02:00
Francisco Casas
8e0fe29bfc
vkd3d-shader/tpf: Replace sm4_register with vkd3d_shader_register.
2023-09-27 22:34:31 +02:00
Francisco Casas
10bbc7eda5
vkd3d-shader/tpf: Move sm4_register.mod to sm4_src_register.
2023-09-27 22:34:30 +02:00
Francisco Casas
8124ba3a54
vkd3d-shader/tpf: Put sm4_register.immconst_uint inside a union.
2023-09-27 22:34:28 +02:00
Francisco Casas
0c8b74cb39
vkd3d-shader/tpf: Turn sm4_register.dim into an enum vkd3d_shader_dimension.
2023-09-27 22:34:26 +02:00
Giovanni Mascellani
7366b5fd38
ci: Prepend an ordinal number to commits in artifacts.
2023-09-27 22:34:24 +02:00
Giovanni Mascellani
e85e2417d5
ci: Build vkd3d with MinGW too.
...
Nowadays vkd3d is probably most commonly used compiled as PE rather then
ELF, so it makes sense to at least ensure that compilation succeeds.
In the future it would be nice to somehow test these binaries as well.
2023-09-27 22:34:18 +02:00
Conor McCarthy
f61c853f61
vkd3d-shader/dxil: Convert into an error the warning for an unhandled instrinsic.
2023-09-26 22:07:51 +02:00
Conor McCarthy
b30b95e824
vkd3d-shader/dxil: Do not access null code blocks on failure.
2023-09-26 22:07:50 +02:00
Andrey Gusev
56cd609308
vkd3d: Add ID3D12Device3 interface stub.
2023-09-26 22:07:45 +02:00
Giovanni Mascellani
4374d45655
tests: Work around a MoltenVK bug in test_tgsm().
2023-09-26 22:07:43 +02:00
Giovanni Mascellani
83ddfb9e8d
vkd3d: Expose the image view usage to Vulkan.
...
This prevents a failure with MoltenVK, which is not able to
create 2D-array view for any usage other than color attachment.
2023-09-26 22:07:41 +02:00
Giovanni Mascellani
2dd4211b77
ci: Wrap complex commands in CI scripts.
2023-09-26 22:07:36 +02:00
Giovanni Mascellani
335f9fb31e
ci: Build crosstests with -Wno-array-bounds.
2023-09-26 22:07:36 +02:00
Giovanni Mascellani
81da13b9e2
ci: Build crosstests in a dedicated CI job.
...
Mostly to avoid polluting other logs and artifacts, and also to avoid
recompiling crosstests over and over. Eventually the artifacts produced
at this stage should be run on native Windows.
2023-09-26 22:07:35 +02:00
Francisco Casas
74d79c7e45
vkd3d-shader/d3dbc: Initialize register dimension for all register types.
2023-09-26 22:07:06 +02:00
Francisco Casas
33f47c5ae9
vkd3d-shader/tpf: Parse register dimension for all register types.
2023-09-26 22:07:04 +02:00
Francisco Casas
e904660497
vkd3d-shader: Turn vkd3d_shader_register.immconst_type into vkd3d_shader_register.dimension.
2023-09-26 22:07:04 +02:00
Francisco Casas
dc35125d73
vkd3d-shader/tpf: Use vsir_register_init() in shader_sm1_parse_dst_param().
2023-09-26 22:07:03 +02:00
Francisco Casas
51aa5a45e9
vkd3d-shader/tpf: Use vsir_register_init() in shader_sm1_parse_src_param().
2023-09-26 22:07:02 +02:00
Francisco Casas
c1d9e776e2
vkd3d-shader/tpf: Use vsir_register_init() in shader_sm4_read_param().
2023-09-26 22:07:01 +02:00
Francisco Casas
6f5cb219f4
vkd3d-shader/spirv: Use vsir_register_init() in spirv_compiler_emit_default_control_point_phase().
2023-09-26 22:07:00 +02:00
Francisco Casas
81802e27d0
vkd3d-shader/spirv: Use vsir_register_init() in spirv_compiler_emit_resource_declaration().
2023-09-26 22:06:59 +02:00
Francisco Casas
314c6e4808
vkd3d-shader/spirv: Use vsir_register_init() in spirv_compiler_emit_sampler_declaration().
2023-09-26 22:06:58 +02:00
Francisco Casas
b2f262467f
vkd3d-shader/spirv: Use vsir_register_init() in spirv_compiler_emit_dcl_immediate_constant_buffer().
2023-09-26 22:06:56 +02:00
Francisco Casas
67f0196c33
vkd3d-shader/spirv: Use vsir_register_init() in spirv_compiler_emit_cbv_declaration().
2023-09-26 22:06:55 +02:00
Francisco Casas
04529bc0b7
vkd3d-shader/spirv: Use vsir_register_init() in spirv_compiler_emit_dcl_indexable_temp().
2023-09-26 22:06:54 +02:00
Francisco Casas
e174f6b413
vkd3d-shader/spirv: Use vsir_register_init() in spirv_compiler_emit_hull_shader_builtins().
2023-09-26 22:06:53 +02:00
Francisco Casas
89d7bd7a81
vkd3d-shader/spirv: Use vsir_register_init() in spirv_compiler_get_invocation_id().
2023-09-26 22:06:52 +02:00
Francisco Casas
5d6899888d
vkd3d-shader: Rename shader_register_init() to vsir_register_init().
2023-09-26 22:06:50 +02:00
Giovanni Mascellani
d9c8b49ea0
vkd3d-shader/ir: Remove dead code during normalisation.
...
The SPIR-V backend generates invalid SPIR-V code when
VSIR has dead code (except for NOPs).
2023-09-25 22:07:27 +02:00
Zebediah Figura
fcda20a8c3
vkd3d-shader/hlsl: Use lower_ir() for lower_sqrt().
2023-09-25 22:07:23 +02:00
Zebediah Figura
496a3a2093
vkd3d-shader/hlsl: Use lower_ir() for lower_division().
2023-09-25 22:07:22 +02:00
Zebediah Figura
ecd781e809
vkd3d-shader/hlsl: Use lower_ir() for lower_int_abs().
2023-09-25 22:07:21 +02:00
Zebediah Figura
7944ee9bed
vkd3d-shader/hlsl: Use lower_ir() for lower_casts_to_bool().
2023-09-25 22:07:20 +02:00
Zebediah Figura
65bf6e997c
vkd3d-shader/hlsl: Use lower_ir() for more passes.
2023-09-25 22:07:18 +02:00
Petrichor Park
976fd67f51
vkd3d-shader/hlsl: Implement intrinsic tan.
...
This commit also extends the trigonometry tests a little bit to make
sure that tan works right.
2023-09-25 22:07:13 +02:00
Conor McCarthy
6ec5e5bf54
vkd3d-shader/dxil: Implement DX instruction LoadInput.
2023-09-25 22:07:09 +02:00
Conor McCarthy
644a06dcca
vkd3d-shader/dxil: Declare shader inputs.
2023-09-25 22:07:08 +02:00
Conor McCarthy
5984b4e455
vkd3d-shader/dxbc: Load input signatures also from ISG1 chunks.
...
When DXBC contains DXIL code it uses ISG1 signatures.
2023-09-25 22:07:06 +02:00
Conor McCarthy
575135a9ce
vkd3d-shader/spirv: Build undefined values once.
2023-09-25 22:07:05 +02:00
Conor McCarthy
3249723972
vkd3d-shader/spirv: Introduce a Static Single Assignment register type.
2023-09-25 22:07:04 +02:00
Conor McCarthy
a67a85989f
vkd3d-shader/d3d-asm: Trace undefined registers.
2023-09-25 22:07:02 +02:00
Conor McCarthy
b765f3c770
vkd3d-shader: Make the paramater allocator slab size at least MAX_REG_OUTPUT.
...
The allocator is used for DXIL input/output parameter arrays.
2023-09-25 22:07:01 +02:00
Zebediah Figura
257a351f37
vkd3d-shader/spirv: Flush NaN to zero in ftoi.
2023-09-25 22:06:45 +02:00
Zebediah Figura
a5b6162d25
vkd3d-shader/spirv: Clamp ftoi upper bound to INT_MAX.
2023-09-25 22:06:44 +02:00
Zebediah Figura
9dee15da5b
vkd3d-shader/spirv: Clamp ftoi lower bound to INT_MIN.
2023-09-25 22:06:43 +02:00
Zebediah Figura
cc893a3368
vkd3d-shader/spirv: Clamp ftou upper bound to UINT_MAX.
2023-09-25 22:06:41 +02:00
Zebediah Figura
491146fa94
vkd3d-shader/spirv: Clamp ftou lower bound to zero.
2023-09-25 22:06:39 +02:00
Giovanni Mascellani
ca05e57e67
tests: Mark a bug as resolved on Mesa.
2023-09-22 11:06:57 +02:00
Giovanni Mascellani
b9fa8cfaa6
vkd3d: Set the image aspect when clearing UAVs.
...
This fixes a number of tests on Mesa on Intel.
2023-09-22 11:06:55 +02:00
Giovanni Mascellani
d640b213b2
tests: Do not crash if the render target doesn't support MSAA 8.
...
This currently happens on MoltenVK.
2023-09-22 11:06:50 +02:00
Giovanni Mascellani
6dfdbb5c26
tests: Do not crash if a pipeline statistics query heap cannot be created.
...
This currently happens on MoltenVK.
2023-09-22 11:06:44 +02:00
Giovanni Mascellani
d742770499
tests: Compile HLSL shaders at runtime in test_draw_depth_only().
2023-09-22 11:06:41 +02:00
Giovanni Mascellani
4557ad36b0
tests: Compile HLSL shaders at runtime in test_draw_depth_no_ps().
2023-09-22 11:06:41 +02:00
Giovanni Mascellani
b7c951ba78
tests: Compile HLSL shaders at runtime in test_scissor().
2023-09-22 11:06:41 +02:00
Giovanni Mascellani
15c5ef5bb5
tests: Compile HLSL shaders at runtime in test_fractional_viewports().
2023-09-22 11:06:40 +02:00
Nikolay Sivov
485cbe8cb7
vkd3d-shader/hlsl: Add constant folding for 'sat'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-22 11:06:35 +02:00
Nikolay Sivov
89c99cccce
vkd3d-shader/hlsl: Add constant folding for 'exp2'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-22 11:06:34 +02:00
Nikolay Sivov
c16c5caad8
vkd3d-shader/hlsl: Add constant folding for 'fract'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-22 11:06:33 +02:00
Giovanni Mascellani
c69562128a
vkd3d-shader/hlsl: Correctly fold casts from double.
2023-09-22 11:06:29 +02:00
Giovanni Mascellani
49bbd98a04
vkd3d-shader/hlsl: Correctly fold casts from float.
...
I.e., without invoking undefined behavior in the compiler. The rules
are desumed from the the MSDN documentation for ftoi and ftou.
2023-09-22 11:06:28 +02:00
Nikolay Sivov
d9c984c11a
vkd3d-shader/hlsl: Add constant folding for the ternary operator.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-22 11:06:23 +02:00
Nikolay Sivov
6d1ba83856
vkd3d-shader/hlsl: Use conditional moves for arithmetic operators instead of branching.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-22 11:06:22 +02:00
Giovanni Mascellani
34b1c0fe5d
vkd3d-shader/ir: Validate source parameters.
2023-09-22 11:06:18 +02:00
Giovanni Mascellani
603170106c
vkd3d-shader/ir: Validate destination parameters.
2023-09-22 11:06:17 +02:00
Giovanni Mascellani
585e60ad3b
vkd3d-shader/ir: Validate register types.
2023-09-22 11:06:16 +02:00
Giovanni Mascellani
b09cfbda90
vkd3d-shader/ir: Validate instruction handlers.
2023-09-22 11:06:15 +02:00
Giovanni Mascellani
c052cd8998
vkd3d-shader/ir: Introduce a boilerplate to validate the generated IR.
...
For the moment the validator is trivial, it never fails. Checks will
be added incrementally.
2023-09-22 11:06:13 +02:00
Giovanni Mascellani
cf871d2cb2
vkd3d-shader: Embed the parsing location in vkd3d_shader_instruction.
...
So that it can be used for printing meaningful error locations by
downstream processors.
2023-09-22 11:06:12 +02:00
Giovanni Mascellani
531c41306d
vkd3d-shader/dxil: Destroy the SM6 parser on parsing errors.
2023-09-22 11:06:11 +02:00
Giovanni Mascellani
78220ed07e
vkd3d-shader/tpf: Destroy the SM4 parser on parsing errors.
2023-09-22 11:06:10 +02:00
Giovanni Mascellani
a2fb9588c7
vkd3d-shader/d3dbc: Destroy the SM1 parser on parsing errors.
2023-09-22 11:06:09 +02:00
Giovanni Mascellani
d1cb6b41b1
vkd3d-shader/d3dbc: Skip DCL semantic tokens properly.
2023-09-22 11:06:08 +02:00
Giovanni Mascellani
9487cc6ab5
vkd3d-shader/ir: Simplify the control flow in shader_instruction_normalise_io_params().
2023-09-22 11:06:06 +02:00
Giovanni Mascellani
5220125c9f
vkd3d-shader/ir: Fully reinitialize an instruction when making it a NOP.
2023-09-22 11:06:05 +02:00
Giovanni Mascellani
05af25eecb
vkd3d-shader: Rename shader_instruction_init().
2023-09-22 11:06:05 +02:00
Andrey Gusev
78ff0f3df4
vkd3d: Add ID3D12Device2 interface.
2023-09-22 11:05:59 +02:00
Henri Verbeet
90d4529f27
Release 1.9.
2023-09-21 19:16:32 +02:00
Zebediah Figura
9417c7cfb7
vkd3d-shader/d3dbc: Translate sm1 fragment outputs to system values.
2023-09-21 19:16:31 +02:00
Zebediah Figura
1615e5a76b
vkd3d-shader/dxbc: Map sm4 fragment outputs to system values based on their name.
2023-09-21 19:16:29 +02:00
Zebediah Figura
8c11270940
vkd3d-shader: Add definitions for more fragment output system values.
2023-09-21 19:16:29 +02:00
Zebediah Figura
fd120d8f2d
vkd3d-shader: Rename vkd3d_shader_next_stage_info to vkd3d_shader_varying_map_info.
...
It was originally intended that this structure could hold other information
about the next stage which compilation might depend on. For example, compilation
to GLSL needs to know the type of the next shader in some circumstances.
That was never actualized, and since the API is fixed at this point for 1.9, it
makes the most sense to rename the structure to match its actual scope.
The documentation was written and arranged to imply that the structure would
hold other information about the next shader than the varying map; this is
changed accordingly as well.
2023-09-21 19:16:27 +02:00
Henri Verbeet
46c7f65be8
build: Add vkd3d_shader_utils.h to libvkd3d_la_SOURCES.
2023-09-19 21:30:43 +02:00
Henri Verbeet
054ae10693
vkd3d-shader: Slightly tweak the documentation for VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ORDER.
2023-09-19 21:30:40 +02:00
Henri Verbeet
0f2dd5f9be
vkd3d-shader: Add a \since 1.9 for VKD3D_SHADER_SV_TARGET.
2023-09-19 21:30:40 +02:00
Henri Verbeet
419c6364db
tests: Add a small test for vkd3d_shader_build_varying_map().
...
There's probably room for improvement, but this at least verifies the
function can be called.
2023-09-19 21:30:37 +02:00
Henri Verbeet
74517de783
include: Add a corresponding function pointer type for vkd3d_shader_build_varying_map().
2023-09-19 21:30:37 +02:00
Henri Verbeet
f796d8668e
vkd3d-shader: Export vkd3d_shader_build_varying_map.
2023-09-19 21:30:35 +02:00
Martin Storsjö
e597b0d80f
include: Add UUIDs for use with D3D12EnableExperimentalFeatures.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-18 21:04:59 +02:00
Martin Storsjö
b484a9e1f6
include: Add the ID3D12GraphicsCommandList{5,6,7} interfaces.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-18 21:04:59 +02:00
Martin Storsjö
5d13a90e37
include: Add DirectX 12 Agility SDK definitions.
...
This ports parts of commit 83625459c8227b0bd7b86c18946a35d3a806c80d
from wine.git into vkd3d.
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-18 21:04:56 +02:00
Henri Verbeet
da89da2bf3
vkd3d-shader: Hide support for DXIL sources.
...
Unfortunately this is not sufficiently ready to release.
2023-09-18 21:04:19 +02:00
Giovanni Mascellani
b8f2c3e1f4
tests: Relax the precision of some tests so that they pass on MoltenVK.
2023-09-18 21:04:06 +02:00
Giovanni Mascellani
ee28861837
vkd3d-shader/hlsl: Document some possibly obscure HLSL opcodes.
2023-09-14 20:28:55 +02:00
Giovanni Mascellani
f251da574c
vkd3d-shader/hlsl: Remove HLSL_OP3_LERP.
...
It is unused, and it's not clear whether it would be of any help to
have it.
2023-09-14 20:28:54 +02:00
Giovanni Mascellani
3113f167ba
ci: Do not drop artifacts after 1 day.
...
There is no point in using such a short timeout. We trust the GitLab
instance to already have a sensible default.
2023-09-14 20:28:49 +02:00
Giovanni Mascellani
d72c91ef97
ci: Run the tests on macOS.
2023-09-14 20:28:47 +02:00
Nikolay Sivov
45541dd9b2
vkd3d-shader/asm: Tweak TEXCOORD declaration name.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-13 23:11:16 +02:00
Nikolay Sivov
ee6c66eb1b
vkd3d-shader/d3dbc: Disallow 1D sampler types when writing sampler declaration.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-13 23:11:14 +02:00
Nikolay Sivov
177ea3bcbd
vkd3d-shader/hlsl: Produce 2D resource declarations and loads for tex1D().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-13 23:11:11 +02:00
Giovanni Mascellani
61b403a032
tests: Compile HLSL shaders at runtime in test_unknown_dsv_format().
2023-09-13 23:11:04 +02:00
Giovanni Mascellani
264ff9e2da
tests: Compile HLSL shaders at runtime in test_unknown_rtv_format().
2023-09-13 23:11:04 +02:00
Giovanni Mascellani
b1cae0dd1e
tests: Compile HLSL shaders at runtime in test_multiple_render_targets().
2023-09-13 23:11:04 +02:00
Giovanni Mascellani
f7354ff9e3
tests: Compile HLSL shaders at runtime in test_create_compute_pipeline_state().
2023-09-13 23:11:04 +02:00
Martin Storsjö
06399d128a
include: Add some misc D3D12 structs/enums/macros.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
b67279394b
include: Add some D3D12 raytracing specific structs.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
55c6e17fca
include: Add the D3D12_BARRIER_GROUP struct.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
f1c19e34d8
include: Add the ID3D12Tools interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
e9e9fdbd5e
include: Add the ID3D12VirtualizationGuestDevice interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
602d2f90d7
include: Add the ID3D12Device10 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
891c6d2743
include: Add the ID3D12Device9 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
77819d8d04
include: Add the ID3D12ShaderCacheSession interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
275644d34a
include: Add the ID3D12GraphicsCommandList4 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
f31efc1afc
include: Add the ID3D12MetaCommand interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
fccf9f7ac5
include: Add the ID3D12Heap1 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
88b3776436
include: Add the ID3D12Resource{1,2} interfaces.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
cca052da29
include: Add the ID3D12Device8 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:58 +02:00
Martin Storsjö
dd93b31e48
include: Add the structs D3D12_FEATURE_DATA_D3D12_OPTIONS{6,7}.
...
D3D12MemAlloc.cpp uses these if ID3D12Device8 is available.
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
442a8347bf
include: Add the ID3D12Device7 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
a7bb5b6ba3
include: Add the ID3D12ProtectedResourceSession1 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
aad1c3e35c
include: Add the ID3D12Device6 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
edaf7fbd88
include: Add the ID3D12DeviceRemovedExtendedData{,1,2} interfaces.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
4f4afab3d5
include: Add the ID3D12DeviceRemovedExtendedDataSettings{,1} interfaces.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
1302b897ed
include: Add the ID3D12Device5 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
16daf0423d
include: Add the ID3D12StateObjectProperties interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
8e3f863341
include: Add the ID3D12StateObject interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
02fc1ba9c3
include: Add the ID3D12LifetimeTracker interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
8076c9a591
include: Add the ID3D12SwapChainAssistant interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
06388a2c9b
include: Add the ID3D12LifetimeOwner interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:54 +02:00
Martin Storsjö
b005390a36
include: Add the ID3D12Device4 interface.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:53 +02:00
Martin Storsjö
fffdb76b33
include: Add the ID3D12PipelineLibrary{,1} interfaces.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-13 23:10:53 +02:00
Zebediah Figura
e847df9528
tests: Check the result of vkCreateGraphicsPipelines().
2023-09-13 23:10:46 +02:00
Francisco Casas
39563aa5b3
vkd3d-shader/hlsl: Lower matrix swizzles.
2023-09-13 23:10:38 +02:00
Francisco Casas
60a3279318
tests: Test matrix swizzles.
2023-09-13 23:10:37 +02:00
Nikolay Sivov
cab1f57e01
tests: Add a test for fmod() with vector arguments.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-07 19:15:26 +02:00
Nikolay Sivov
fc2aaee224
vkd3d-shader: Use ternary operator in fmod() implementation.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-07 19:15:26 +02:00
Nikolay Sivov
1002a6b357
vkd3d-shader/tpf: Use 'movc' to implement ternary operator.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-07 19:15:25 +02:00
Martin Storsjö
2fb0c2d187
include: Fill in missing enum values in vkd3d_d3d12.idl.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:21 +02:00
Martin Storsjö
8e6b08d685
include: Add some more struct/enum definitions to vkd3d_d3d12.idl.
...
This is enough for compiling QtBase's Direct3D 12 backend,
if this is imported into mingw-w64.
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:19 +02:00
Martin Storsjö
1b45052c92
include: Add missing miscellaneous D3D12 constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
61c402405a
include: Add missing D3D12 vertex shader constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
44a669a644
include: Add missing D3D12 minimum resource limit constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
7efba29853
include: Add missing D3D12 raytracing constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
b32b060518
include: Add missing D3D12 pixel shader constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
ef8dd51c7a
include: Add missing D3D12 input assembler constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
f8c848f563
include: Add missing D3D12 hull shader constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
1d74dc7903
include: Add missing D3D12 geometry shader constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
af4403147a
include: Add missing D3D12 domain shader constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
cf61d217a9
include: Add missing D3D12 compute shader constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
71dd917091
include: Add missing D3D12 common shader constants.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:15 +02:00
Martin Storsjö
8febea5a9c
include: Sort vkd3d_d3d12.idl constants alphabetically.
...
This makes it easier to consistently add more constants.
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:13 +02:00
Martin Storsjö
dff79973e0
include: Fix the type of D3D12_VIEWPORT_BOUNDS_MIN.
...
As this is a negative constant, it shouldn't have an unsigned type.
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-07 19:15:10 +02:00
Nikolay Sivov
c5d680d141
vkd3d-shader/hlsl: Add tex1D() function.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-09-07 19:15:06 +02:00
Giovanni Mascellani
f525e9e93a
ci: Run the tests on a 32 bit Linux system.
2023-09-04 20:26:05 +02:00
Martin Storsjö
fdaacb158e
include: Add the D3D_PRIMITIVE enum and the D3D12_PRIMITIVE typedef.
...
Signed-off-by: Martin Storsjö <martin@martin.st >
2023-09-04 20:25:47 +02:00
Conor McCarthy
3badab2086
vkd3d-shader: Handle size in bytes in spirv_compiler_emit_cbv_declaration().
...
The caller passes a byte size now.
2023-09-04 20:25:33 +02:00
Conor McCarthy
bad4c74002
vkd3d-shader: Match only UAV descriptors in vkd3d_shader_scan_add_uav_flag().
...
Fixes compilation failures in Cyberpunk 2077 due to missing UAV counter
flag.
2023-09-04 20:25:31 +02:00
Giovanni Mascellani
367cf10cdc
ci: Briefly document the CI setup.
2023-08-31 22:07:21 +02:00
Giovanni Mascellani
229a34b93c
ci: Execute the tests.
2023-08-31 22:07:21 +02:00
Giovanni Mascellani
52d52ad1b9
ci: Execute CI also an a runner with an AMD GPU.
...
In order for this to work it is expected that the Docker host exposes
the devices in /dev/dri to the guest system, and that the render nodes
have GID 800 (usually that would be the "render" group, but the GID
for that group is dynamically assigned, so we explicitly agree on a
fixed number).
2023-08-31 22:07:16 +02:00
Zebediah Figura
a597dc8755
vkd3d-shader/hlsl: Define lit() in HLSL.
2023-08-30 22:49:03 +02:00
Zebediah Figura
9ab77658f2
vkd3d-shader/hlsl: Define smoothstep() in HLSL.
2023-08-30 22:49:01 +02:00
Zebediah Figura
d396c4ce27
vkd3d-shader/hlsl: Store the internal name counter in struct hlsl_ctx.
...
This is minutely more efficient than using a global variable and atomic instructions.
2023-08-30 22:48:59 +02:00
Zebediah Figura
f22e52f358
vkd3d-shader/hlsl: Separate an add_user_call() helper.
2023-08-30 22:48:57 +02:00
Zebediah Figura
63e056512d
vkd3d-shader/hlsl: Introduce an hlsl_sprintf_alloc() helper.
2023-08-30 22:48:55 +02:00
Conor McCarthy
d27b8eb2c0
vkd3d-shader/dxil: Implement DX instruction StoreOutput.
2023-08-30 22:48:52 +02:00
Conor McCarthy
bf49a1a95b
vkd3d-shader/dxil: Declare shader outputs.
2023-08-30 22:48:50 +02:00
Conor McCarthy
e54f770669
vkd3d-shader/dxil: Implement the DXIL CALL instruction.
2023-08-30 22:48:48 +02:00
Conor McCarthy
720a087c28
vkd3d-shader/dxil: Replace the result type enum with a bool.
...
Changes to failure handling make the enum unnecessary.
2023-08-30 22:48:47 +02:00
Conor McCarthy
58d6e44501
vkd3d-shader/dxil: Validate the function block count.
2023-08-30 22:48:45 +02:00
Conor McCarthy
61a550017f
vkd3d-shader/spirv: Handle signature element mask left shift in spirv_compiler_emit_output().
...
Element masks can have a left shift in DXIL, but these must start at
bit 0 in the register info. The SPIR-V declaration will either be a
builtin or have SpvDecorationComponent.
2023-08-30 22:48:43 +02:00
Conor McCarthy
ebc461f795
vkd3d-shader/spirv: Handle signature element mask left shift in calculate_clip_or_cull_distance_mask().
...
In DXIL these masks can have a left shift.
2023-08-30 22:48:41 +02:00
Giovanni Mascellani
4a3ad750e0
ci: Introduce a CI pipeline for GitLab.
2023-08-29 22:07:56 +02:00
Nikolay Sivov
c39c5b3907
vkd3d-shader/hlsl: Add texCUBE() function.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-29 22:07:56 +02:00
Nikolay Sivov
269747dbf3
tests: Enable compiler backwards compatibility mode only for shaders that require it.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-28 20:40:06 +02:00
Zebediah Figura
9624e2f904
vkd3d-shader/spirv: Declare SRVs and UAVs from the descriptor info.
2023-08-28 20:40:02 +02:00
Zebediah Figura
e8b3561252
vkd3d-shader/spirv: Declare constant buffers from the descriptor info.
2023-08-28 20:40:01 +02:00
Zebediah Figura
547768bcdd
vkd3d-shader/spirv: Declare samplers from the descriptor info.
2023-08-28 20:39:59 +02:00
Zebediah Figura
a1e10e5c90
vkd3d-shader/spirv: Split spirv_compiler_has_combined_sampler() into two functions.
...
These functions do not really share any code in common.
2023-08-28 20:39:57 +02:00
Nikolay Sivov
18c1477464
vkd3d-shader/hlsl: Ignore 'inline' modifier for functions.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-28 20:39:53 +02:00
Nikolay Sivov
30be83f911
tests: Add some 'inline' function modifier tests.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-28 20:39:53 +02:00
Conor McCarthy
61841e9423
vkd3d-shader/tpf: Handle the swizzle type bitfield in dst param tokens.
2023-08-28 20:39:49 +02:00
Conor McCarthy
eddae47062
vkd3d-shader/tpf: Handle the dimension bitfield in dst param tokens.
...
A zero mask is still emitted for some scalar registers. This has no
effect on current tests, but keeping the correction is probably a good
idea.
2023-08-28 20:39:48 +02:00
Conor McCarthy
92021b7a3c
vkd3d-shader/tpf: Use the default vec4 swizzle if a src param contains a mask.
2023-08-28 20:39:46 +02:00
Conor McCarthy
7e5d9e3b6f
vkd3d-shader/tpf: Handle the dimension bitfield in src param tokens.
2023-08-28 20:39:45 +02:00
Conor McCarthy
5c706152fa
vkd3d-shader/tpf: Validate the src register of case conditions.
...
Case values are constants in TPF.
2023-08-28 20:39:43 +02:00
Conor McCarthy
5c09752194
vkd3d: Do not flush descriptor heaps stored in the command list when the array size is exceeded.
...
An earlier patch introduced a bug which overflows the descriptor heap
array. The array should not be emptied here in case the list is
resubmitted, so just flush the new heap.
2023-08-24 21:44:03 +02:00
Evan Tang
f374934281
tests: Test CopyResource depth to color.
2023-08-24 21:43:59 +02:00
Francisco Casas
ed9e236b01
vkd3d-shader/tpf: Avoid reading constant value components beyond type's width (Valgrind).
...
We are passing map writemasks that may have more components than the
constant's data type, so a (j < width) check is added to avoid reading
components from the constant that are not intended to be used.
Remaining values in the register are initialized to zero.
2023-08-24 21:43:55 +02:00
Nikolay Sivov
89eda51855
vkd3d-shader/hlsl: Change warning code for unknown loop attributes.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-24 21:43:50 +02:00
Nikolay Sivov
1153f6bb34
vkd3d-shader/hlsl: Parse "if" statement attributes.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-24 21:43:49 +02:00
Nikolay Sivov
9605993af3
tests: Add some tests for "if" statement attributes.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-24 21:43:49 +02:00
Zebediah Figura
926575a6f3
vkd3d-shader/hlsl: Force sm1 inputs to be 4-component only for vertex shaders.
...
Pixel shaders still have an appropriate writemask.
2023-08-24 21:43:44 +02:00
Giovanni Mascellani
39e62ed2be
configure: Require widl >= 3.21.
...
Commit b7402ddbbecdfaa81daa657fbb5d37661f401434 from wine is required,
which was first released with 3.21, not 3.20.
2023-08-24 21:43:34 +02:00
Zebediah Figura
622311da8e
vkd3d-shader: Add a flag marking raw buffers to struct vkd3d_shader_descriptor_info.
2023-08-23 22:45:04 +02:00
Zebediah Figura
c1ebba9515
vkd3d-shader: Add structure stride to struct vkd3d_shader_descriptor_info1.
2023-08-23 22:45:04 +02:00
Zebediah Figura
88f85ffb50
vkd3d-shader: Add constant buffer size to struct vkd3d_shader_descriptor_info1.
2023-08-23 22:45:04 +02:00
Zebediah Figura
8c465c81cf
vkd3d-shader: Add sample count to struct vkd3d_shader_descriptor_info1.
2023-08-23 22:45:04 +02:00
Zebediah Figura
ccedb7f711
vkd3d-shader: Set descriptor flags in the caller to vkd3d_shader_scan_add_descriptor().
...
Return the vkd3d_shader_descriptor_info1 from that function.
2023-08-23 22:45:02 +02:00
Conor McCarthy
f3baf55d97
vkd3d: Implement ID3D12Device1 with stubs.
2023-08-23 22:44:58 +02:00
Giovanni Mascellani
8f8c89fb87
vkd3d: Update a warning so that it aligns with the check that triggers it.
2023-08-23 22:44:52 +02:00
Conor McCarthy
3ca2259807
vkd3d: Fix invalid atomic behaviour in the view cache linked list.
...
The list suffers from the ABA problem, where comparison with the head
succeeds but the head's `next` pointer has changed. Occurs in Cyberpunk
2077, on NVIDIA at least.
2023-08-23 22:44:45 +02:00
Nikolay Sivov
4f2e07a45d
vkd3d-shader/hlsl: Allow 'const' modifier without initializer in the global scope.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-15 21:51:50 +02:00
Nikolay Sivov
7fd10bb6bc
tests: Add some tests for a 'const' modifier.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-15 21:51:50 +02:00
Zebediah Figura
240b9424fb
vkd3d-shader/hlsl: Pass an hlsl_block pointer to append_output_copy().
2023-08-15 21:51:47 +02:00
Zebediah Figura
a04e3a51dd
vkd3d-shader/hlsl: Pass an hlsl_block pointer to prepend_input_copy().
2023-08-15 21:51:39 +02:00
Zebediah Figura
7a4ac1afb1
vkd3d-shader/hlsl: Pass an hlsl_block pointer to prepend_uniform_copy().
2023-08-15 21:51:37 +02:00
Francisco Casas
96f66aa4f8
vkd3d-shader/d3dbc: Use the bind count instead of the allocation size in d3dbc.c.
...
This should have no effect, since in SM1 the allocation size is the
same as the bind count because there are no texture registers.
It is just done for consistency.
2023-08-15 21:51:33 +02:00
Francisco Casas
d4a49d788a
vkd3d-shader/hlsl: Simplify computation of allocation size.
2023-08-15 21:51:32 +02:00
Francisco Casas
37cfbe47d7
vkd3d-shader/hlsl: Sort synthetic separated samplers first for SM4.
2023-08-15 21:51:31 +02:00
Francisco Casas
81afe43569
vkd3d-shader/tpf: Put the actual bind count in the RDEF table.
2023-08-15 21:51:29 +02:00
Francisco Casas
7eba063136
vkd3d-shader/hlsl: Rename hlsl_reg.bind_count to hlsl_reg.allocation_size.
...
We have to distinguish between the "bind count" and the "allocation size"
of variables.
The "allocation size" affects the starting register id for the resource to
be allocated next, while the "bind count" is determined by the last field
actually used. The former may be larger than the latter.
What we are currently calling hlsl_reg.bind_count is actually the
"allocation size", so a rename is in order.
The real "bind count", which will be introduced in following patches,
is important because it is what should be shown in the RDEF table and
some resource allocation rules depend on it.
For instance, for this shader:
texture2D texs[3];
texture2D tex;
float4 main() : sv_target
{
return texs[0].Load(int3(0, 0, 0)) + tex.Load(int3(0, 0, 0));
}
the variable "texs" has a "bind count" of 1, but an "allocation size" of
3:
// Resource Bindings:
//
// Name Type Format Dim HLSL Bind Count
// ------------------------------ ---------- ------- ----------- -------------- ------
// texs texture float4 2d t0 1
// tex texture float4 2d t3 1
2023-08-15 21:51:27 +02:00
Francisco Casas
948c4145f5
tests: Test texture allocation ordering in complex scenarios.
2023-08-15 21:51:26 +02:00
Nikolay Sivov
98f63c46f8
vkd3d-shader/hlsl: Use type width in fold_rcp().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-14 18:38:21 +02:00
Nikolay Sivov
932c5e36dc
vkd3d-shader/hlsl: Add constant folding for 'log2'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-14 18:38:20 +02:00
Nikolay Sivov
58bc61e48d
vkd3d-shader/hlsl: Add constant folding for 'sqrt'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-14 18:38:18 +02:00
Nikolay Sivov
7e99188dc7
vkd3d-shader: Add constant folding for 'dp2add' operation.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-14 18:38:15 +02:00
Nikolay Sivov
25ff56769b
vkd3d-shader: Add constant folding for the 'dot' operation.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-08-14 18:38:15 +02:00
Zebediah Figura
983d01df8c
vkd3d-shader: Get rid of the uav_ranges array.
...
This is now redundant; the register ID is encoded into the scan descriptors.
2023-08-14 18:38:11 +02:00
Zebediah Figura
7d02922541
vkd3d-shader: Add register ID to struct vkd3d_shader_descriptor_info1.
2023-08-14 18:38:11 +02:00
Zebediah Figura
4e9798f6f7
vkd3d-shader: Introduce struct vkd3d_shader_scan_descriptor_info1.
2023-08-14 18:38:11 +02:00
Zebediah Figura
fd4a820c4b
vkd3d-shader: Centralize cleanup on error in scan_with_parser().
2023-08-14 18:38:11 +02:00
Zebediah Figura
9c5cb2de18
vkd3d-shader: Factor more code into vkd3d_shader_scan_get_uav_descriptor_info().
2023-08-14 18:38:11 +02:00
Francisco Casas
8484bd59a6
vkd3d-shader/tpf: Separate dst register write function.
2023-08-14 18:38:08 +02:00
Francisco Casas
d1c45fe2f0
vkd3d-shader/tpf: Separate src register write function.
2023-08-14 18:38:07 +02:00
Francisco Casas
2258e9d0f3
vkd3d-shader/tpf: Make register_type_table an array of structs with lookup tables.
2023-08-14 18:38:06 +02:00
Francisco Casas
c77e5f1c1f
vkd3d-shader/tpf: Introduce struct tpf_writer to group sm4 write arguments.
...
We will add register information lookup tables on this struct later.
They will be used by sm4_encode_register(), and thus, they will be
required by write_sm4_instruction().
2023-08-14 18:38:05 +02:00
Francisco Casas
a584499c8a
vkd3d-shader/tpf: Use struct vkd3d_shader_register_index in sm4_register.idx[].
2023-08-14 18:38:04 +02:00
Francisco Casas
fc589add49
vkd3d-shader/tpf: Allow passing NULL register type on hlsl_sm4_register_from_semantic().
2023-08-14 18:38:03 +02:00
Francisco Casas
8a6a620ee2
vkd3d-shader/tpf: Use enum vkd3d_shader_register_type in sm4_register.type.
2023-08-14 18:38:01 +02:00
Henri Verbeet
5d75731d97
vkd3d-dxbc: Implement listing section data.
2023-08-08 21:15:28 +09:00
Henri Verbeet
fbb5e59a03
vkd3d-dxbc: Implement listing DXBC contents.
2023-08-08 21:15:28 +09:00
Henri Verbeet
6bfb94c440
vkd3d-dxbc: Introduce a program to inspect and modify DXBC blobs.
2023-08-08 21:15:28 +09:00
Zebediah Figura
cf6bc95a3d
vkd3d-shader/hlsl: Use hlsl_block_add_instr() in clone_block().
2023-08-08 21:15:16 +09:00
Zebediah Figura
4ae00cea43
vkd3d-shader/hlsl: Clean up the static_initializers block when the context is destroyed (Valgrind).
...
This is currently leaked if we fail parsing before reaching codegen.
2023-08-08 21:15:13 +09:00
Zebediah Figura
b22e2113a6
vkd3d-shader/hlsl: Pass a hlsl_block pointer to dump_instr_list().
2023-08-08 21:15:10 +09:00
Zebediah Figura
0652bb1950
vkd3d-shader/hlsl: Store the "instrs" field of struct hlsl_attribute as a hlsl_block.
2023-08-08 21:15:08 +09:00
Zebediah Figura
372ddd1f29
vkd3d-shader/hlsl: Pass an hlsl_block pointer to add_load_component().
2023-08-08 21:15:05 +09:00
Zebediah Figura
f649db23a5
vkd3d-shader: Introduce a function to build a varying map between sm1 stages.
2023-08-03 21:20:44 +09:00
Zebediah Figura
d932fba7c3
vkd3d-shader/spirv: Make output varyings not consumed by the next stage private variables.
2023-08-03 21:20:42 +09:00
Zebediah Figura
11475ef62a
vkd3d-shader: Implement remapping shader output registers to match the next shader's semantics.
2023-08-03 21:20:42 +09:00
Zebediah Figura
cb96482500
vkd3d-shader: Add a separate field for the target location of a signature element.
...
We want to be able to remap input signatures based on the signature index, but
signature normalization both reorders the signature, and requires the old
register index, so add a new field for this.
2023-08-03 21:20:39 +09:00
Zebediah Figura
bad72d1874
vkd3d-shader/d3dbc: Make sure all inter-stage varyings have a unique register index.
...
spirv will need this.
2023-08-03 21:20:22 +09:00
Zebediah Figura
b4bb3931c5
vkd3d-shader/preproc: Append spaces between tokens in macro invocations.
2023-08-02 20:19:21 +09:00
Zebediah Figura
250a24bd3f
vkd3d-shader/preproc: Strip whitespace when stringifying.
2023-08-02 20:19:20 +09:00
Zebediah Figura
6fc3ae2b5c
vkd3d-shader/preproc: Stringify text immediately in macro invocations.
2023-08-02 20:19:19 +09:00
Zebediah Figura
cbb1d84069
vkd3d-shader/preproc: Separate a preproc_stringify() helper.
2023-08-02 20:19:18 +09:00
Zebediah Figura
3a235b57f6
vkd3d-shader/preproc: Expand macro arguments in macro invocations.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55361
2023-08-02 20:19:17 +09:00
Zebediah Figura
9b98489155
vkd3d-shader/preproc: Parse hash marks as two separate tokens when not in stringification contexts.
2023-08-02 20:19:15 +09:00
Zebediah Figura
9a80ff28e4
vkd3d-shader/tpf: Check buffer->status in add_section().
2023-08-02 20:19:00 +09:00
Zebediah Figura
71afb78126
vkd3d-shader/d3dbc: Return ctx->result from hlsl_sm1_write().
2023-08-02 20:18:59 +09:00
Zebediah Figura
6e370777b4
vkd3d-shader/d3dbc: Free vkd3d_bytecode_buffer data on failure.
2023-08-02 20:18:58 +09:00
Zebediah Figura
1bd873fb2b
vkd3d-shader/d3dbc: Skip generic sampler declarations.
...
Instead of asserting.
2023-08-02 20:18:56 +09:00
Conor McCarthy
c2e09e4c4f
vkd3d: Implement ID3D12Fence1.
2023-08-02 20:18:37 +09:00
Conor McCarthy
0d1bc77b2a
vkd3d: Implement ID3D12GraphicsCommandList3 with a stub.
2023-07-31 21:08:02 +09:00
Conor McCarthy
4433dacb4f
vkd3d: Implement ID3D12Device::GetResourceTiling() for textures.
2023-07-31 21:07:58 +09:00
Conor McCarthy
71a9feac8e
vkd3d: Implement ID3D12Device::GetResourceTiling() for buffers.
2023-07-31 21:07:57 +09:00
Conor McCarthy
1e178efa01
tests/d3d12: Add tests for GetResourceTiling().
...
Based on vkd3d-proton patches by Philip Rebohle and
Hans-Kristian Arntzen.
2023-07-31 21:07:56 +09:00
Nikolay Sivov
bfdd5c142d
vkd3d-shader/tpf: Add support for writing 'resinfo' instruction.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-31 21:07:50 +09:00
Nikolay Sivov
78719dc814
vkd3d-shader/tpf: Add support for writing 'sampleinfo' instruction.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-31 21:07:49 +09:00
Nikolay Sivov
d50b5fe767
vkd3d-shader/hlsl: Parse GetDimensions() method.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-31 21:07:48 +09:00
Nikolay Sivov
18731d71a6
tests: Add some tests for GetDimensions().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-31 21:07:46 +09:00
Conor McCarthy
3d49b59a68
vkd3d: Handle the case where a descriptor is null and is concurrently written non-null.
...
If view is null and the comparison (view == src->s.u.object) is false,
vkd3d_view_decref will be called on null.
2023-07-27 17:17:55 +09:00
Zebediah Figura
819c5f1943
vkd3d-shader/hlsl: Pass an hlsl_block pointer to add_expr().
2023-07-27 17:17:48 +09:00
Zebediah Figura
9d94506313
vkd3d-shader/hlsl: Pass an hlsl_block pointer to add_cast().
2023-07-27 17:17:47 +09:00
Zebediah Figura
fe70ee2158
vkd3d-shader/hlsl: Pass an hlsl_block pointer to add_implicit_conversion().
2023-07-27 17:17:46 +09:00
Zebediah Figura
21d5ee4df2
vkd3d-shader/hlsl: Pass an hlsl_block pointer to add_array_access().
2023-07-27 17:17:41 +09:00
Zebediah Figura
c861a937e8
vkd3d-shader/hlsl: Pass an hlsl_block pointer to add_method_call().
2023-07-27 17:17:37 +09:00
Zebediah Figura
f95ab2a5e8
vkd3d-shader/hlsl: Pass an hlsl_block pointer to add_assignment().
2023-07-24 22:41:16 +02:00
Zebediah Figura
7e7a6d3691
vkd3d-shader/hlsl: Pass a hlsl_block pointer to hlsl_add_conditional().
2023-07-24 22:41:15 +02:00
Zebediah Figura
80b9f52010
vkd3d-shader/hlsl: Use a hlsl_block to build replacement instructions in lower_discard_neg().
2023-07-24 22:41:14 +02:00
Zebediah Figura
3a07df8476
vkd3d-shader/hlsl: Use a hlsl_block to build replacement instructions in lower_float_modulus().
2023-07-24 22:41:13 +02:00
Zebediah Figura
0dee96ead6
vkd3d-shader/hlsl: Use a hlsl_block to build replacement instructions in lower_int_modulus().
2023-07-24 22:41:12 +02:00
Nikolay Sivov
e71b2c0911
vkd3d-compiler: Add CLI option to specify default matrix packing order.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-24 22:41:10 +02:00
Nikolay Sivov
0b77b5f99e
tests: Add some tests for matrix packing compiler options.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-24 22:41:10 +02:00
Nikolay Sivov
01faf6ad9e
tests: Add test file syntax to specify compiler options.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-24 22:41:09 +02:00
Nikolay Sivov
bd3d4a6c06
vkd3d-shader: Add compiler option to specify matrix majority.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-24 22:41:09 +02:00
Conor McCarthy
acc68aef94
vkd3d: Add a pending execution count to struct d3d12_command_signature.
...
Buffering of command list commands will depend upon command signatures
persisting until the buffer is flushed.
2023-07-24 22:41:07 +02:00
Conor McCarthy
31ff1fa9b6
tests: Test releasing the command signature immediately after use.
...
D3D12 docs are silent on a required lifetime and immediate release
works in Windows.
2023-07-24 22:40:54 +02:00
Conor McCarthy
95bad60281
vkd3d: Store the command buffer in the allocator upon creation.
...
For correct function it cannot be freed until the command allocator
is reset, and d3d12_command_allocator_free_command_buffer() normally
does not free it.
2023-07-24 22:40:53 +02:00
Conor McCarthy
9187a41733
vkd3d: Move descriptor heap tracking to d3d12_command_list_set_descriptor_table().
...
This is the simplest way to gather this information when command lists
are executed later.
2023-07-24 22:40:52 +02:00
Conor McCarthy
42d46d2513
vkd3d: Do not create Vulkan descriptor sets for non-shader-visible heaps.
2023-07-20 22:33:17 +02:00
Conor McCarthy
9014183100
vkd3d: Return a null handle from GetGPUDescriptorHandleForHeapStart() for non-shader-visible heaps.
2023-07-20 22:33:17 +02:00
Conor McCarthy
981034e6e4
tests: Test GetGPUDescriptorHandleForHeapStart() on a non-shader-visible heap.
2023-07-20 22:33:07 +02:00
Conor McCarthy
0a98d09145
vkd3d: Enable Vulkan-backed heaps for each heap instead of per device.
...
Provides a simple way to disable Vulkan writes for non-shader-visible
heaps. Also there is a chance of avoiding access to the d3d12_device
object which helps memory cache performance.
2023-07-20 22:33:05 +02:00
Zebediah Figura
d52eb8595f
vkd3d-shader/hlsl: Use a hlsl_block to build replacement instructions in lower_int_division().
2023-07-20 22:33:01 +02:00
Zebediah Figura
cdabe172cb
vkd3d-shader/hlsl: Return a hlsl_block from the "declaration" and "struct_declaration" rules.
2023-07-20 22:33:00 +02:00
Zebediah Figura
54bd6f7b4b
vkd3d-shader/hlsl: Return a hlsl_block from the "declaration_statement" rule.
2023-07-20 22:32:59 +02:00
Zebediah Figura
77e1c5893e
vkd3d-shader/hlsl: Return a hlsl_block from the "primary_expr" rule.
2023-07-20 22:32:57 +02:00
Conor McCarthy
c0a2bb1095
vkd3d-shader/dxil: Emit undefined constants.
2023-07-20 22:32:53 +02:00
Conor McCarthy
402c93fa68
vkd3d-shader/spirv: Introduce an undefined register type.
2023-07-20 22:32:52 +02:00
Conor McCarthy
3e553aaaa7
vkd3d-shader/dxil: Emit the shader instructions.
...
Sufficient for compiling a no-op pixel shader.
2023-07-20 22:32:51 +02:00
Conor McCarthy
f26d47585f
vkd3d-shader/spirv: Do not normalise Shader Model 6 shaders.
2023-07-20 22:32:50 +02:00
Conor McCarthy
8fe6d2eeac
vkd3d-shader/dxil: Return an error from sm6_parser_globals_init() on invalid operand count.
2023-07-20 22:32:48 +02:00
Zebediah Figura
e0e261eac3
vkd3d-shader/spirv: Emit variables for flat constant buffers.
2023-07-17 22:56:47 +02:00
Zebediah Figura
25cf6a720b
vkd3d-shader/ir: Normalise sm1-style constants.
2023-07-17 22:56:45 +02:00
Zebediah Figura
e9fb067d4c
vkd3d-shader/ir: Move normalization code from spirv.c to ir.c.
...
It is not spirv-specific and will (presumably) be used for GLSL as well.
2023-07-17 22:56:43 +02:00
Zebediah Figura
d077562f79
vkd3d-shader/d3dbc: Scan descriptors for constant register sets.
2023-07-17 22:56:39 +02:00
Zebediah Figura
55c5129ad9
include: Define an API for d3dbc constants.
2023-07-17 22:56:39 +02:00
Nikolay Sivov
a18ace731d
tests: Add a test for side effects of ternary operator.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-17 22:56:32 +02:00
Zebediah Figura
44bf5556ae
vkd3d-shader/hlsl: Free the constant defs array in hlsl_ctx_cleanup().
...
Spotted by Francisco Casas.
2023-07-17 22:56:19 +02:00
Nikolay Sivov
63631a8fd4
vkd3d-shader/tpf: Support some of the UAV types when writing RDEF records.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-17 22:56:05 +02:00
Francisco Casas
3bafd036bb
vkd3d-shader/hlsl: Don't allocate all texture registers for synthetic separated samplers.
2023-07-17 22:55:53 +02:00
Zebediah Figura
a55973d695
vkd3d-shader/hlsl: Lower combined samplers to separate sampler and texture objects for SM4.
...
Co-authored-by: Francisco Casas <fcasas@codeweavers.com >
2023-07-17 22:55:51 +02:00
Francisco Casas
15ea5ff9db
vkd3d-shader/hlsl: Separate tracking of sampler_dim and usage for object components.
2023-07-17 22:55:48 +02:00
Francisco Casas
c4f074d25d
vkd3d-shader/hlsl: Introduce hlsl_new_synthetic_var_named().
2023-07-17 22:55:46 +02:00
Francisco Casas
866c5d9531
vkd3d-shader/hlsl: Check is_uniform instead of HLSL_STORAGE_UNIFORM when validating object refs.
...
We are using the hlsl_ir_var.is_uniform flag to indicate when an object
is a uniform copy created from a variable with the HLSL_STORAGE_UNIFORM
modifier.
We should be checking for this instead of the HLSL_STORAGE_UNIFORM flag
which is also set to 1 for the original variables, and there should be
no reason to use this flag instead of "is_uniform" after the uniform
copies and combined/separated samplers are created.
2023-07-17 22:55:43 +02:00
Francisco Casas
b8a85c6ad5
tests: Add lowering combined samplers tests.
2023-07-17 22:55:43 +02:00
Francisco Casas
ab37b27a7d
tests: Pass D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY when compiling with the shader-runner.
2023-07-17 22:55:43 +02:00
Francisco Casas
c58d666d1b
vkd3d-shader/hlsl: Handle resource components individually for SM 5.0.
2023-07-17 22:55:40 +02:00
Francisco Casas
8f8c7a02ee
vkd3d-shader/tpf: Introduce struct extern_resource.
...
This struct is required for handling both whole-variable resources for
SM < 5 and single-component resources for SM 5 in the same way, when
writting the RDEF block and resource declarations within the shader.
2023-07-17 22:55:39 +02:00
Francisco Casas
ae6bc398d6
vkd3d-shader/hlsl: Allow derefs to provide the data_type.
...
After lowering the derefs path to a single offset node, there was no way
of knowing the type of the referenced part of the variable. This little
modification allows to avoid having to pass the data type everywhere and
it is required for supporting instructions that reference objects
components within struct types.
Since deref->data_type allows us to retrieve the type of the deref,
deref->offset_regset is no longer necessary.
2023-07-17 22:55:36 +02:00
Zebediah Figura
d4b5e79c8b
vkd3d-shader/hlsl: Skip unallocated variables when looking for reservation conflicts.
2023-07-13 23:00:03 +02:00
Zebediah Figura
aec9ea085e
vkd3d-shader/hlsl: Return a hlsl_block from the "postfix_expr" rule.
2023-07-11 22:44:15 +02:00
Zebediah Figura
e222a786a1
vkd3d-shader/hlsl: Return a hlsl_block from binary and ternary expression rules.
2023-07-11 22:44:12 +02:00
Zebediah Figura
3079c874e3
vkd3d-shader/hlsl: Return a hlsl_block from the "unary_expr" rule.
2023-07-11 22:44:10 +02:00
Zebediah Figura
28dff58fb5
vkd3d-shader/hlsl: Return a hlsl_block from the "initializer_expr" rule.
2023-07-11 22:44:09 +02:00
Zebediah Figura
53d5ea639c
vkd3d-shader/hlsl: Return a hlsl_block from the "assignment_expr" rule.
2023-07-11 22:44:06 +02:00
Conor McCarthy
1ec112e3d7
vkd3d-shader/dxil: Read function bodies.
2023-07-11 22:43:58 +02:00
Conor McCarthy
5d33fb4633
vkd3d-shader/dxil: Read numeric constants.
2023-07-11 22:43:57 +02:00
Conor McCarthy
c96143abdc
vkd3d-shader/dxil: Read global function declarations.
2023-07-11 22:43:55 +02:00
Conor McCarthy
22157c3da3
vkd3d-shader/dxil: Validate the module format version.
2023-07-11 22:43:53 +02:00
Conor McCarthy
eca4b62c7e
vkd3d-shader/dxil: Read the value symbol table.
2023-07-11 22:43:49 +02:00
Conor McCarthy
571d807dd8
vkd3d-shader/dxil: Read the type table.
2023-07-11 22:43:48 +02:00
Conor McCarthy
41a5d37935
vkd3d-shader/dxil: Use size_t where applicable.
2023-07-11 22:43:46 +02:00
Andrey Gusev
d4d960cb8b
vkd3d-shader/spirv: Add support for VKD3DSIM_LINEAR_NOPERSPECTIVE_SAMPLE interpolation qualifier.
...
Used by F1 2018.
2023-07-10 23:17:59 +02:00
Giovanni Mascellani
2a3413e0f0
demos: Use a fence to synchronize D3D12 and Vulkan work.
2023-07-06 20:09:53 +02:00
Giovanni Mascellani
b2a1f6b5e4
include: Document vkd3d_acquire_vk_queue() and vkd3d_release_vk_queue().
2023-07-06 20:09:53 +02:00
Evan Tang
574239e3e3
vkd3d: Make CopyResource use a temp buffer for depth <-> color copies.
...
depth <-> color copies aren't allowed in Vulkan
2023-07-06 20:09:50 +02:00
Zebediah Figura
6e303af519
vkd3d-shader/hlsl: Free the "iter" block pointer on success in create_loop().
...
Spotted by Giovanni Mascellani.
2023-07-05 22:32:48 +02:00
Zebediah Figura
b0ac77b44d
vkd3d-shader/hlsl: Return a hlsl_block from the "expr_statement" and "expr" rules.
2023-07-05 22:32:47 +02:00
Zebediah Figura
07ce711583
vkd3d-shader/hlsl: Return a hlsl_block from the "jump_statement" rule.
2023-07-05 22:32:46 +02:00
Zebediah Figura
e4bf5933b9
vkd3d-shader/hlsl: Return a hlsl_block from the "selection_statement" rule.
2023-07-05 22:32:45 +02:00
Zebediah Figura
79dd9544b7
vkd3d-shader/hlsl: Return a hlsl_block from the "loop_statement" rule.
2023-07-05 22:32:43 +02:00
Zebediah Figura
23ff83e8a0
vkd3d-shader/hlsl: Return a hlsl_block from the "statement" rule.
...
As well as from the "statement_list" and "compound_statement" rules, which
trivially pass through from "statement".
2023-07-05 22:32:41 +02:00
Zebediah Figura
53e9ad3e4c
vkd3d-shader/hlsl: Do not emit DEF instructions for uniform constants.
2023-07-04 22:40:20 +02:00
Zebediah Figura
e5afbda34a
vkd3d-shader/hlsl: Simplify allocate_const_registers_recurse() to stop accounting for constants larger than a vector.
...
That cannot happen with the current code.
2023-07-04 22:40:16 +02:00
Zebediah Figura
8a2b357855
vkd3d-shader/hlsl: Allocate anonymous constants after uniforms.
2023-07-04 22:40:13 +02:00
Zebediah Figura
717cd3f5bb
vkd3d-shader/hlsl: Consistently use the destination width in constant folding instructions (Valgrind).
2023-07-04 22:40:06 +02:00
Zebediah Figura
e390bc35e2
vkd3d-shader/d3dbc: Set the source count for DEF instructions to 1 (Valgrind).
...
We emit one source with multiple components.
2023-07-04 22:40:04 +02:00
Nikolay Sivov
06040d2a30
vkd3d-shader/hlsl: Disallow certain instruction types from constant expressions.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-04 22:39:57 +02:00
Nikolay Sivov
a65c0b0e22
vkd3d-shader/hlsl: Support evaluated expressions for sample count in multisampled textures declarations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-07-04 22:39:55 +02:00
Zebediah Figura
73d422a0e0
vkd3d-shader/d3dbc: Scan for the maximum temporary register index.
2023-07-04 22:39:48 +02:00
Zebediah Figura
e489098878
vkd3d-shader: Record a global temporary count per sm4 shader.
...
Store it in the shader_desc, and declare temps from that when compiling SPIR-V,
instead of parsing dcl_instructions.
As part of this change, we declare a single, global temps array (with Private
scope instead of Function) which is as large as the maximum of all dcl_temps
instructions. It is not clear to me whether this will improve, hurt, or have no
significant effect on the lower-level compiler. An alternative is to still
redeclare a new temps array every time (although still with a smaller size).
2023-07-04 22:39:45 +02:00
Zebediah Figura
dfb2a316e6
vkd3d-shader/dxbc: Remove redundant zero-initialization of the vkd3d_shader_desc structure.
2023-07-04 22:39:43 +02:00
Nikolay Sivov
300f3462a4
vkd3d-shader/hlsl: Add constant folding for 'rcp'.
2023-07-04 22:39:36 +02:00
Giovanni Mascellani
68764b74a1
vkd3d: Release op data when destroying the queue.
2023-07-04 22:39:31 +02:00
Giovanni Mascellani
dcac2646e4
vkd3d: Always emit an error when failing to reserve for the op array.
2023-07-04 22:39:31 +02:00
Giovanni Mascellani
52d5cb749f
vkd3d: Release the op mutex on allocation failure.
2023-07-04 22:39:31 +02:00
Francisco Casas
01800942a9
vkd3d-shader/hlsl: Declare vars individually when parsing struct declarations.
...
A struct declaration with variables is now absorbed into the 'declaration'
rule, like any other variable declaration.
A struct declaration without variables is now reduced to the
'struct_declaration_without_vars' rule.
They both are reduced to a 'declaration_statement' in the end.
2023-07-04 22:39:24 +02:00
Francisco Casas
62c891b796
vkd3d-shader/hlsl: Declare vars individually when parsing regular declarations.
...
In a declaration with multiple variables, the variables must be created
before the initializer of the next variable is parsed. This is required
for initializers such as:
float a = 1, b = a, c = b + 1;
A requisite for this is that the type information is parsed in the same
rule as the first variable (as a variable_def_typed) so it is
immediately available to declare the first variable. Then, the next
untyped variable declaration is parsed, and the type from the first
variable can be used to declare the second, before the third is parsed,
and so on.
2023-07-04 22:39:21 +02:00
Francisco Casas
a34cf2e64e
vkd3d-shader/hlsl: Split declare_vars().
...
Basically, declare_vars() is separated in three functions:
1. check_invalid_in_out_modifiers(), which is to be called once per
declaration and emits an error when in or out modifiers are used for
these non-parameter variables.
2. declare_var(), which now handles one variable at the time and doesn't
free any memory.
3. initialize_vars(), which takes care of preparing the initialization
instructions of several variables and frees their struct
parse_variable_def, using exclusively free_parse_variable_def().
This allows to declare variables individually before the initializer of
the next variable in the same declaration is parsed, which is used in
the following patches.
Also, simplifies memory management.
2023-07-04 22:39:18 +02:00
Francisco Casas
396edae281
tests: Test multiple variable initializers.
2023-07-04 22:39:18 +02:00
Francisco Casas
d8e6a1066d
tests: Test semantics in uniform variables.
2023-07-04 22:39:18 +02:00
Francisco Casas
e4d94d955c
vkd3d-shader/hlsl: Support fine derivates.
2023-07-04 22:39:12 +02:00
Francisco Casas
ff31284f8d
vkd3d-shader/hlsl: Support coarse derivates.
2023-07-04 22:39:10 +02:00
Francisco Casas
dc84afe73a
tests: Quantize regular and coarse derivate test results.
...
Co-authored-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2023-07-04 22:39:07 +02:00
Francisco Casas
f0584cad62
tests: Make ddx() and ddy() test behave correctly for shader models < 4.
2023-07-04 22:39:07 +02:00
Francisco Casas
62e9b86697
tests: Test coarse and fine derivates.
...
Co-authored-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2023-07-04 22:39:04 +02:00
Alistair Leslie-Hughes
d5a0b3afc4
include: Avoid including unnecessary Windows headers.
...
We only require a few types and declarations.
2023-06-28 21:41:14 +02:00
Conor McCarthy
08cece3a92
vkd3d: Print the thread id in trace messages.
2023-06-28 21:40:40 +02:00
Conor McCarthy
de25e88901
vkd3d-shader/dxil: Read and validate global abbreviated operands.
2023-06-28 21:40:37 +02:00
Conor McCarthy
e9a8bfb2c4
vkd3d-shader/dxil: Read and validate local abbreviated operands.
2023-06-28 21:40:36 +02:00
Conor McCarthy
8c7704bb78
vkd3d-compiler: Introduce a dxbc-dxil source type.
2023-06-28 21:40:36 +02:00
Conor McCarthy
d3e6a3a78f
include: Introduce a function to detect the DXBC source type.
2023-06-28 21:40:36 +02:00
Conor McCarthy
6775f7ba66
vkd3d-shader/dxil: Read and validate DXIL bitcode unabbreviated blocks.
2023-06-28 21:40:34 +02:00
Zebediah Figura
0d2f2e1860
tests: Move HLSL tests to a subdirectory.
2023-06-28 21:40:32 +02:00
Nikolay Sivov
69f32796b0
vkd3d-shader: Unify static string arrays initialization pattern.
2023-06-28 21:40:21 +02:00
Zebediah Figura
9ccba35dde
vkd3d-shader/hlsl: Store the fields of struct parse_if_body as hlsl_block pointers.
2023-06-28 21:40:18 +02:00
Zebediah Figura
8fa1750206
vkd3d-shader/hlsl: Store the "instrs" field of struct parse_initializer as a hlsl_block pointer.
2023-06-28 21:40:16 +02:00
Zebediah Figura
7d521db3db
vkd3d-shader/hlsl: Merge the "discard_statement" rule into "jump_statement".
2023-06-28 21:40:15 +02:00
Zebediah Figura
588784e4dc
vkd3d-shader/hlsl: Use add_unary_arithmetic_expr() in the subtraction rule.
2023-06-28 21:40:14 +02:00
Zebediah Figura
b4bf5af475
vkd3d-shader/hlsl: Factor out add_binary_expr_merge().
2023-06-28 21:40:12 +02:00
Nikolay Sivov
3aee386e2f
tests: Add another test for register reservation.
2023-06-27 22:34:42 +02:00
Zebediah Figura
69ecfdfb0b
tests: Use compare_uint() in compare_float().
...
Comparing the result of abs() is broken in the case that x - y == INT_MIN.
2023-06-27 22:34:37 +02:00
Giovanni Mascellani
bdfec4886d
vkd3d-shader/hlsl: Fold logical expressions.
2023-06-27 22:34:33 +02:00
Giovanni Mascellani
5a05fabe62
vkd3d-shader/hlsl: Fold floating point minimum expressions.
2023-06-27 22:34:30 +02:00
Giovanni Mascellani
2a2943c2cf
vkd3d-shader/hlsl: Fold floating point maximum expressions.
2023-06-27 22:34:29 +02:00
Giovanni Mascellani
358d656262
vkd3d-shader/hlsl: Fold greater-than-or-equal comparisons.
2023-06-27 22:34:28 +02:00
Giovanni Mascellani
bf452b5907
vkd3d-shader/hlsl: Fold less-than comparisons.
2023-06-27 22:34:27 +02:00
Giovanni Mascellani
488af14144
vkd3d-shader/hlsl: Fold equality comparisons.
2023-06-27 22:34:25 +02:00
Giovanni Mascellani
6c9f6d0fcf
vkd3d-shader/hlsl: Sort constant folding helpers alphabetically.
2023-06-27 22:34:24 +02:00
Nikolay Sivov
4ed60cda13
vkd3d-shader: Remove extra newlines from compiler messages.
2023-06-27 22:34:19 +02:00
Conor McCarthy
c4a8e06abf
configure: Pass the correct number of parameters for the __atomic_exchange_n() check.
2023-06-27 22:34:10 +02:00
Nikolay Sivov
9ccf291971
vkd3d-shader/hlsl: Use profile version testing helpers in more places.
2023-06-27 22:34:05 +02:00
Nikolay Sivov
5c02e12187
vkd3d-shader/hlsl: Make sample count optional for SM4.1+.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-06-27 22:34:03 +02:00
Conor McCarthy
3aa83e877d
vkd3d: Append CopyTileMappings() commands to the command queue op array.
2023-06-27 22:33:58 +02:00
Conor McCarthy
3935e8647f
vkd3d: Append UpdateTileMappings() commands to the command queue op array.
2023-06-27 22:33:58 +02:00
Conor McCarthy
e98e6c9b53
vkd3d: Add missing const attributes to ID3D12CommandQueue::UpdateTileMappings() parameters.
2023-06-27 22:33:58 +02:00
Conor McCarthy
5ccadd07f1
vkd3d: Validate plane count for tiled textures.
2023-06-27 22:33:58 +02:00
Conor McCarthy
0b67481496
vkd3d: Validate tiled resources tier for 3D textures.
2023-06-27 22:33:58 +02:00
Conor McCarthy
1a0d85b8d6
vkd3d: Validate tiled resources support during reserved resource creation.
...
Check directly for Vulkan support because the D3D12 tiled resources
tier may in future be modified by a config option.
2023-06-27 22:33:57 +02:00
Conor McCarthy
e93f2e7746
vkd3d: Always pass null heap properties to vkd3d_create_image() for sparse images.
2023-06-27 22:33:57 +02:00
Conor McCarthy
9532ac5f84
vkd3d: Check sparse image format is supported.
...
Based on code by Jan Sikorski.
2023-06-27 22:33:55 +02:00
Nikolay Sivov
861078d63a
vkd3d-shader/hlsl: Handle 'texkill' discard type for sm4+.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-06-27 22:33:50 +02:00
Nikolay Sivov
8d84e206ab
vkd3d-shader/hlsl: Parse clip() function.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-06-27 22:33:48 +02:00
Nikolay Sivov
6ef0213135
tests: Add some tests for clip().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-06-27 22:33:48 +02:00
Nikolay Sivov
b40179da3a
vkd3d-shader/hlsl: Add a parameter for jump nodes and use it for 'discard'.
2023-06-27 22:33:47 +02:00
Zebediah Figura
7e1fcdca89
vkd3d-shader: Synthesize signatures for d3dbc shaders.
2023-06-27 22:33:41 +02:00
Zebediah Figura
20190a1388
vkd3d-shader: Introduce an API to retrieve all signatures from DXBC shaders.
2023-06-27 22:33:41 +02:00
Zebediah Figura
7b9eb8d189
vkd3d-shader: Introduce documented semantics for the target type and other data passed to vkd3d_shader_scan().
...
Passing VKD3D_SHADER_TARGET_NONE was actually already allowed.
2023-06-27 22:33:39 +02:00
Stefan Dösinger
5e88ab22aa
vkd3d-shader/hlsl: Make sure variants is initialized in declare_predefined_types().
...
MSVC is too stupid to see it is unused when n_variants=0.
2023-06-27 22:33:31 +02:00
Henri Verbeet
771e442af1
Release 1.8.
2023-06-22 22:00:20 +02:00
Henri Verbeet
e17ee34b92
build: List tests/object-parameters.shader_test before tests/object-references.shader_test.
2023-06-22 22:00:20 +02:00
Nikolay Sivov
c8ffe8e1a8
vkd3d-shader/hlsl: Don't report a register type mismatch for unused reserved variables.
2023-06-22 22:00:19 +02:00
Zebediah Figura
d6ac823dd6
vkd3d-shader/hlsl: Don't set "allocated" for unused reserved variables.
2023-06-22 22:00:17 +02:00
Zebediah Figura
1c1f1094a5
vkd3d-shader/hlsl: Handle reserved vars specially in get_allocated_object().
2023-06-22 22:00:16 +02:00
Nikolay Sivov
883ab880e3
tests: Add more tests for unused registers with a reservation.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-06-22 22:00:16 +02:00
Francisco Casas
c1ca0dafe8
vkd3d-shader/d3dbc: Avoid hlsl_type_get_regset() in d3dbc.c.
...
In SM1 we can expect all variables to always belong to a single regset.
structs in particular, should always be allocated to HLSL_REGSET_NUM,
since they are only allowed if all their components are numeric.
We are not covering the structs case because of the use of
hlsl_type_get_regset(), which is currently not defined for structs.
So the current shader
struct
{
float4 a;
float4 b;
} apple;
float4 main() : sv_target
{
return apple.a + apple.b;
}
fails with
vkd3d/libs/vkd3d-shader/hlsl.c:224: Aborting, reached unreachable code.
The solution is to iterate over all regsets to find the one where the
variable is allocated (if any), and ignore all others.
2023-06-22 22:00:14 +02:00
Conor McCarthy
bce2a898b3
vkd3d-shader/spirv: Take ownership of the shader signatures in spirv_compiler_create().
...
Fixes leakage of the replacement elements in shader_signature_merge().
2023-06-19 22:44:07 +02:00
Zebediah Figura
df0a031ad8
vkd3d-shader/spirv: Retrieve input sysvals from the signature for geometry shaders as well.
...
This only affects clip and cull distances. The HLSL compiler emits these using
dcl_input, but the previous shader (vertex or TES) will write them as a SPIRV
builtin, and hence we want to read this as a SPIRV builtin as well.
This fixes validation errors in Wine's test_clip_distance().
2023-06-12 22:50:19 +02:00
Nikolay Sivov
d856be0519
vkd3d-shader/hlsl: Handle static constants in array size expressions.
2023-06-12 22:50:12 +02:00
Nikolay Sivov
38c89442ac
tests: Add a test for array size expressions using static constants.
2023-06-12 22:50:12 +02:00
Nikolay Sivov
99314b6340
vkd3d-shader/hlsl: Store static initialization instructions in a block.
2023-06-12 22:50:11 +02:00
Francisco Casas
5dee6561c2
vkd3d-shader/hlsl: Fold redundant casts again after lower narrowing casts.
...
lower_narrowing_casts() currently creates a new cast calling
hlsl_new_cast(). This cast may be redundant, but it is not folded, which
is making SM1 emit an unnecessary fixme in some shaders:
Aborting due to not yet implemented feature: SM1 "cast" expression.
Other passes that call hlsl_new_cast() are lower_int_division() and
lower_int_modulus(), so the new fold_redundant_casts() pass is called
after these as well.
2023-06-08 23:21:40 +02:00
Zebediah Figura
f34b107faf
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_constant().
2023-06-08 18:50:35 +02:00
Zebediah Figura
740b0ad807
vkd3d-shader/hlsl: Pass a hlsl_constant_value pointer to hlsl_new_constant().
2023-06-08 18:50:34 +02:00
Zebediah Figura
79f443d131
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_bit_or().
2023-06-08 18:50:32 +02:00
Zebediah Figura
1049f489bb
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_bit_and().
2023-06-08 18:50:31 +02:00
Zebediah Figura
a7a09ac5ef
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_bit_xor().
2023-06-08 18:50:30 +02:00
Zebediah Figura
974528cbe3
vkd3d-shader/hlsl: Only read used coordinates in encode_texel_offset_as_aoffimmi().
...
The V and W offsets may be uninitialized, which may spuriously trigger "out of range" errors.
2023-06-08 18:50:28 +02:00
Zebediah Figura
7b476573ff
vkd3d-shader/hlsl: Use the writemask to map the coords swizzle for load instructions.
...
Instead of modifying the swizzle after calling sm4_src_from_node().
This fixes the case where sm4_src_from_node() returns an immediate constant.
Fixes: a471c5567a
2023-06-08 18:50:26 +02:00
Francisco Casas
ebf7573571
vkd3d-shader/hlsl: Support non-constant vector indexing.
...
Non-constant vector indexing is not solved with relative addressing
in the register indexes because this indexation cannot be at the level
of register-components.
Mathematical operations must be used instead.
2023-06-07 20:48:59 +02:00
Francisco Casas
6cfa8cf859
vkd3d-shader/hlsl: Lower dot for non-float types.
2023-06-07 20:48:58 +02:00
Francisco Casas
441902bb85
vkd3d-shader/hlsl: Introduce transform_derefs().
2023-06-07 20:48:57 +02:00
Francisco Casas
f24598c9a0
tests: Test indexing temps.
2023-06-07 20:48:57 +02:00
Francisco Casas
8d7cc8c84e
tests: Test non-constant vector indexing.
2023-06-07 20:48:55 +02:00
Nikolay Sivov
82ddc6b417
vkd3d-shader/hlsl: Fix sampler type used for samplerCUBE.
2023-06-05 22:27:36 +02:00
Nikolay Sivov
ccad49d486
vkd3d-shader/d3d-asm: Fix 3D sampler declaration instruction name.
2023-06-05 22:27:33 +02:00
Giovanni Mascellani
7c360330d7
vkd3d-shader/tpf: Do not emit HLSL_IR_CONSTANT instructions.
...
Since constants are now inlined.
2023-05-29 20:21:29 +02:00
Giovanni Mascellani
a471c5567a
vkd3d-shader/tpf: Emit constant values inline.
2023-05-29 20:21:27 +02:00
Giovanni Mascellani
a7de09d418
vkd3d-shader/tpf: Move sm4_src_from_constant_value() above.
...
So that it can be used by sm4_src_from_node() in later commits.
2023-05-29 20:21:25 +02:00
Giovanni Mascellani
4ecd3af2af
vkd3d-shader/tpf: Use a semicolon to separate statements.
2023-05-29 20:21:23 +02:00
Nikolay Sivov
a2e85a8a76
vkd3d-shader/hlsl: Parse SampleCmpLevelZero() method.
2023-05-29 20:21:17 +02:00
Nikolay Sivov
c33219c97b
vkd3d-shader/tpf: Write out comparison mode sampler declarations and corresponding sampling instruction.
2023-05-29 20:21:16 +02:00
Nikolay Sivov
2fd3550ba6
vkd3d-shader/hlsl: Parse SampleCmp() method.
2023-05-29 20:21:14 +02:00
Nikolay Sivov
7c94705c54
vkd3d-shader/hlsl: Parse SamplerComparisonState objects.
2023-05-29 20:21:11 +02:00
Nikolay Sivov
efe107d231
vkd3d-shader/hlsl: Use a function table for object methods handlers.
2023-05-29 20:21:10 +02:00
Nikolay Sivov
87cd3f872b
vkd3d-shader/hlsl: Move object type checks to methods handlers.
2023-05-29 20:21:07 +02:00
Ethan Lee
aa17d139be
tests: Add a test for arrays with an expression as the index.
...
Currently, the compiler requires that dereferences be HLSL_IR_CONSTANT, so that
it can compute the offset at compile time. However, scenarios such as this test
will produce a dereference with HLSL_IR_EXPR, which will generate an error.
Passing this test in particular will require adding support for SM4 relative
addressing, as well as support for non-constant indexing in general.
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-05-29 20:21:01 +02:00
Jan Sikorski
bb680e73de
vkd3d-shader/spirv: Ensure that the OpLabel emitted vkd3d_spirv_builder_begin_main_function() gets terminated.
2023-05-26 19:11:55 +02:00
Zebediah Figura
b453a0acd6
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_abs().
2023-05-26 19:11:46 +02:00
Zebediah Figura
c805eb1191
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_min().
2023-05-26 19:11:44 +02:00
Zebediah Figura
aa82f61ef3
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_max().
2023-05-26 19:11:42 +02:00
Zebediah Figura
ad0ab664d2
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_mod().
2023-05-26 19:11:39 +02:00
Zebediah Figura
c8b7dbebe4
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_div().
2023-05-26 19:11:36 +02:00
Henri Verbeet
133421a38c
vkd3d: Avoid redundantly initialising "descriptors" in d3d12_desc_flush_vk_heap_updates_locked().
...
As pointed out by Andrey Gusev.
2023-05-26 19:11:26 +02:00
Conor McCarthy
f4778b727d
vkd3d-shader/spirv: Use the register index count in shader_register_clone_relative_addresses().
2023-05-26 19:11:15 +02:00
Conor McCarthy
4a64cf74c3
vkd3d-shader/spirv: Use the register index count in I/O relative address assertions.
2023-05-26 19:11:07 +02:00
Conor McCarthy
06dd0ccd4c
vkd3d-shader/spirv: Use the register index count in I/O register assertions.
2023-05-26 19:11:03 +02:00
Conor McCarthy
178a7677e2
vkd3d-shader/spirv: Use the register index count in shader_register_get_io_indices().
2023-05-26 19:11:02 +02:00
Conor McCarthy
d46250a59b
vkd3d-shader/spirv: Use the register index count in default register dereferences.
2023-05-26 19:11:00 +02:00
Conor McCarthy
a2b3f70d8e
vkd3d-shader/spirv: Use the register index count in aggregate register dereferences.
2023-05-26 19:10:58 +02:00
Conor McCarthy
ad08864134
vkd3d-shader/spirv: Use the register index count in spirv_compiler_get_register_name().
2023-05-26 19:10:56 +02:00
Conor McCarthy
b3927726cc
vkd3d-shader/spirv: Use the register index count in non-I/O variable registers in vkd3d_symbol_make_register().
2023-05-26 19:10:54 +02:00
Conor McCarthy
ec5f195b6b
vkd3d-shader/spirv: Use the register index count in I/O registers in vkd3d_symbol_make_register().
2023-05-26 19:10:52 +02:00
Conor McCarthy
532fe01818
vkd3d-shader/spirv: Set the register index count in spirv_compiler_emit_default_control_point_phase().
2023-05-26 19:10:49 +02:00
Conor McCarthy
9c6040df02
vkd3d-shader/spirv: Set the register index count in spirv_compiler_emit_dcl_indexable_temp().
2023-05-26 19:10:47 +02:00
Conor McCarthy
bf1ecc0f60
vkd3d-shader/spirv: Set the register index count in spirv_compiler_emit_hull_shader_builtins().
2023-05-26 19:10:33 +02:00
Conor McCarthy
7e58511b76
vkd3d-shader/spirv: Set the register index count in spirv_compiler_get_invocation_id().
2023-05-26 19:10:30 +02:00
Ethan Lee
ea7d8c65bd
vkd3d-shader/tpf: Add support for emitting sample_l instructions.
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-05-24 22:00:41 +02:00
Conor McCarthy
6835e8176f
vkd3d-shader/ir: Normalise signatures and input/output registers to the Shader Model 6 pattern.
...
In Shader Model 6 each signature element can span a range of register
indices, or 'rows', and system values do not share a register index with
non-system values. Inputs and outputs are referenced by element index
instead of register index. This patch merges multiple signature elements
into a single element under the following conditions:
- The register index in a load or store is specified dynamically by
including a relative address parameter with a base register index. The
dcl_index_range instruction is used to identify these.
- A register declaration is split across multiple elements which declare
different components of the register.
- A patch constant function writes tessellation factors. These are an
array in SPIR-V, but in SM 5.x each factor is declared as a separate
register, and these are dynamically indexed by the fork/join instance
id. Elimination of multiple fork/join phases converts the indices to
constants, but merging the signature elements into a single arrayed
element matches the SPIR-V output.
All references to input/output register indices are converted to element
indices. If a relative address is present, the element index is moved up
a slot so it cannot be confused with a constant offset. Existing code
only handles register index relative addressing for tessellation factors.
This patch adds generic support for it.
2023-05-24 22:00:29 +02:00
Conor McCarthy
110e48e54d
vkd3d-shader/ir: Eliminate struct vkd3d_shader_normaliser.
2023-05-24 22:00:28 +02:00
Conor McCarthy
31682c52c7
vkd3d-shader/spirv: Support emitting multi-dimensional array variables.
2023-05-24 22:00:27 +02:00
Francisco Casas
e060773c19
vkd3d-shader/hlsl: Extend the liveness of nodes produced outside loops.
...
Otherwise, it is possible that the register used by the temp is
overridden by a subsequent instruction within the same loop.
2023-05-24 22:00:21 +02:00
Francisco Casas
fbd2df2ad5
tests: Add minimal tests for temp lifetimes within a loop.
2023-05-24 22:00:19 +02:00
Zebediah Figura
855bb71f6d
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_nequal().
2023-05-23 21:08:22 +02:00
Zebediah Figura
d565caafb5
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_mul().
2023-05-23 21:08:21 +02:00
Zebediah Figura
623cd94997
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_add().
2023-05-23 21:08:20 +02:00
Zebediah Figura
7d9b24fe11
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_neg().
2023-05-23 21:08:19 +02:00
Zebediah Figura
eb04829e66
vkd3d-shader/hlsl: Pass hlsl_constant_value and hlsl_type pointers to fold_cast().
2023-05-23 21:08:17 +02:00
Ethan Lee
24d4ab7fb3
vkd3d-shader/hlsl: Add support for SampleGrad() method.
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-05-23 21:07:49 +02:00
Ethan Lee
c3f10fe271
tests: Add a test for SampleGrad() method.
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-05-23 21:07:47 +02:00
Nikolay Sivov
1af662ae50
tests: Add RWBuffer writing test.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-22 22:03:36 +02:00
Zebediah Figura
66dab357eb
tests: Add support for UAV buffers in the d3d11 runner.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-22 22:03:36 +02:00
Nikolay Sivov
f470c00453
tests: Add support for UAV buffers to d3d12 runner.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-22 22:03:36 +02:00
Nikolay Sivov
74c0ad0a7a
tests: Rename readback helper to be more generic.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-22 22:03:28 +02:00
Nikolay Sivov
a4ebde202a
tests: Add support for UAV buffers in Vulkan runner.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-22 22:03:28 +02:00
Nikolay Sivov
cf8cacd336
vkd3d-shader/hlsl: Improve UAV format type checking for buffer types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-22 22:03:27 +02:00
Nikolay Sivov
cff22ecde8
vkd3d-shader/hlsl: Add support for writing RWStructuredBuffer declarations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-22 22:03:26 +02:00
Nikolay Sivov
3de824bfd8
vkd3d-shader/hlsl: Add support for RWBuffer object.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-22 22:03:24 +02:00
Nikolay Sivov
44a90f5d41
vkd3d-shader: Fix dcl_uav_typed_* formatting.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-22 22:03:24 +02:00
Ethan Lee
fb9328d030
vkd3d-shader/hlsl: Fold constant integral abs().
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-05-22 22:03:18 +02:00
Nikolay Sivov
dfa0076473
vkd3d-shader/hlsl: Add support for sample index argument in Load().
2023-05-22 22:03:12 +02:00
Nikolay Sivov
dc41444941
vkd3d-shader/hlsl: Convert ternary operator true/false values to a common type.
2023-05-09 21:51:46 +02:00
Nikolay Sivov
a064009d3b
tests: Simplify conditional test.
2023-05-09 21:51:46 +02:00
Conor McCarthy
be4a71da7d
vkd3d-shader/tpf: Validate input and output index ranges for default control point phases.
2023-05-09 21:51:33 +02:00
Conor McCarthy
3e50c4d13b
vkd3d-shader/tpf: Remove an unnecessary carriage return from a parser error message.
2023-05-09 21:51:32 +02:00
Conor McCarthy
6dd1b01284
vkd3d-shader/tpf: Validate index range declarations.
2023-05-09 21:51:31 +02:00
Conor McCarthy
d565fbdcd6
vkd3d-shader/tpf: Validate input/output registers.
2023-05-09 21:51:29 +02:00
Conor McCarthy
2166088b0b
vkd3d-shader/tpf: Validate signature element masks.
2023-05-09 21:51:28 +02:00
Conor McCarthy
b8e6482365
vkd3d-shader/tpf: Validate signature element register indices.
2023-05-09 21:51:19 +02:00
Conor McCarthy
adf7db021c
vkd3d-shader/tpf: Validate input/output register index counts.
2023-05-09 21:51:17 +02:00
Zebediah Figura
b1bc4044ae
vkd3d-shader/hlsl: Use %option nodefault in the lexer.
2023-05-09 21:51:09 +02:00
Zebediah Figura
600fdcd112
vkd3d-shader/hlsl: Lex invalid characters in #line directives.
...
Avoid letting them fall through to the default rule.
2023-05-09 21:51:08 +02:00
Zebediah Figura
7b8845474d
vkd3d-shader/preproc: Use %option nodefault in the lexer.
2023-05-09 21:51:06 +02:00
Zebediah Figura
871cf0b4b5
vkd3d-shader/preproc: Ignore newlines in C comments.
...
Avoid letting them fall through to the default rule.
2023-05-09 21:51:05 +02:00
Zebediah Figura
ddbfd88e74
vkd3d-shader/preproc: Lex whitespace and invalid characters in #include and #line directives.
...
Avoid letting them fall through to the default rule.
A syntax error will be emitted by the parser.
2023-05-09 21:51:01 +02:00
Zebediah Figura
da7670f7c8
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from add_conditional().
2023-05-09 21:50:37 +02:00
Zebediah Figura
39bbac3cca
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_uint_constant().
2023-05-09 21:50:36 +02:00
Zebediah Figura
b991f98e2f
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_swizzle().
2023-05-09 21:50:35 +02:00
Zebediah Figura
306ae40696
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_store_index().
2023-05-09 21:50:34 +02:00
Zebediah Figura
29a2b87f54
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_simple_store().
2023-05-09 21:50:33 +02:00
Zebediah Figura
145a2dfd2d
vkd3d-shader/hlsl: Return bool from hlsl_new_store_component().
2023-05-09 21:50:31 +02:00
Zebediah Figura
6129399b4f
tests: Add a test for SampleBias() with multiple mipmap levels.
2023-05-08 20:24:15 +02:00
Zebediah Figura
4ec60707e2
tests: Add a test for sampling from nonzero mipmap levels.
2023-05-08 20:24:15 +02:00
Zebediah Figura
e3eb4fc5eb
tests: Add a test for loading from nonzero mipmap levels.
2023-05-08 20:24:15 +02:00
Zebediah Figura
c940486a89
tests/shader_runner: Add support for creating mipmapped textures.
2023-05-08 20:24:15 +02:00
Francisco Casas
fd38c58112
vkd3d-shader/hlsl: Introduce hlsl_calloc().
...
This is just a wrapper of vkd3d_calloc(), that has the advantage of
checking for multiplication overflow.
2023-05-08 20:24:15 +02:00
Francisco Casas
ef7cf9b1ad
vkd3d-shader/hlsl: Support resource arrays when writting SM4.
...
The new fixmes can be triggered in presence of object components within
structs (for SM5).
In shaders such as this one:
struct apple
{
Texture2D tex : TEX;
float4 color : COLOR;
};
float4 main(struct apple input) : sv_target
{
return input.tex.Load(int3(1, 2, 3));
}
Or this one:
struct
{
Texture2D tex;
float4 color;
} s;
float4 main() : sv_target
{
return s.tex.Load(int3(1, 2, 3));
}
2023-05-08 20:24:15 +02:00
Francisco Casas
a91e6d4563
vkd3d-shader/hlsl: Write resource loads in SM1.
2023-05-08 20:24:15 +02:00
Francisco Casas
96c844ffb8
vkd3d-shader/hlsl: Write sampler declarations in SM1.
2023-05-08 20:24:15 +02:00
Francisco Casas
3e9a9c5051
vkd3d-shader/hlsl: Track objects sampling dimension.
2023-05-08 20:24:15 +02:00
Francisco Casas
4dba38e6c8
vkd3d-shader/hlsl: Track object components usage and allocate registers accordingly.
2023-05-08 20:24:14 +02:00
Francisco Casas
7c2ac5b098
tests: Test objects as parameters.
2023-05-08 20:24:14 +02:00
Francisco Casas
6f71077e3e
vkd3d-shader/hlsl: Skip object components when creating input/output copies.
2023-05-08 20:22:19 +02:00
Francisco Casas
4413f6b64b
vkd3d-shader/hlsl: Add fixme for uniform copies for objects within structs.
2023-05-08 20:22:17 +02:00
Francisco Casas
69ff249ef4
vkd3d-shader/hlsl: Support multiple-register variables in object regsets.
...
Variables that contain more than one object (arrays or structs) require
the allocation of contiguous registers in the respective object
register spaces.
2023-05-08 20:22:14 +02:00
Francisco Casas
9a8a440b9b
tests: Add additional texture array register reservation tests.
2023-05-08 20:22:14 +02:00
Conor McCarthy
f039c86aac
vkd3d: Create smaller UAV-only descriptor pools in the allocator if Vulkan-backed heaps are enabled.
...
In this case d3d12_command_allocator_allocate_descriptor_set() is
only called for clearing UAVs. This helps on platforms with limited
descriptor maximum counts.
2023-05-08 20:22:02 +02:00
Nikolay Sivov
7516adeeae
vkd3d-shader/hlsl: Add support for fmod() intrinsic.
2023-05-08 20:21:52 +02:00
Zebediah Figura
8b57a612d7
vkd3d-shader/hlsl: Map the colour output for ps_1_* to r0.
2023-05-03 21:12:39 +02:00
Zebediah Figura
b2959739ed
vkd3d-shader/hlsl: Rewrite the register allocator to allow allocating in multiple passes.
...
We will need this in order to allocate some "special" registers: ps_1_* output, sincos output, etc.
2023-05-03 21:12:38 +02:00
Zebediah Figura
71d8ff85c6
vkd3d-shader/hlsl: Avoid leaking the allocator register map in allocate_const_registers().
2023-05-03 21:12:37 +02:00
Zebediah Figura
c57ac0b207
vkd3d-shader/hlsl: Rename struct liveness to struct register_allocator.
2023-05-03 21:12:34 +02:00
Conor McCarthy
7917a68241
tests/d3d12: Test register relative addressing in vertex and pixel shaders.
2023-05-03 21:12:09 +02:00
Conor McCarthy
a0a18b1620
vkd3d-shader: Introduce an internal shader signature structure.
...
A register count is required for Shader Model 6 signatures, including
those normalised from earlier models.
2023-05-03 21:12:07 +02:00
Conor McCarthy
5ae068168c
vkd3d-shader/tpf: Return an error from vkd3d_shader_sm4_parser_create() if the parser failed.
2023-05-03 21:12:06 +02:00
Conor McCarthy
85eb231492
vkd3d-shader/d3dbc: Return an error from vkd3d_shader_sm1_parser_create() if the parser failed.
2023-05-03 21:12:03 +02:00
Francisco Casas
34ddc13390
vkd3d-shader/hlsl: Don't keep the implicit mipmap level on hlsl_ir_index.
2023-05-03 21:11:59 +02:00
Francisco Casas
4aaf6b8895
vkd3d-shader/hlsl: Use hlsl_ir_index for resource access.
...
This patch makes index expressions on resources hlsl_ir_index nodes
instead of hlsl_ir_resource_load nodes, because it is not known if they
will be used later as the lhs of an hlsl_ir_resource_store.
For now, the only benefit is consistency.
2023-05-03 21:11:56 +02:00
Conor McCarthy
e2dac061e2
vkd3d: Do not reset the descriptor heap count unless full or the command list is reset.
...
The same heaps must be flushed again if the command list is executed again
without a reset.
2023-05-02 20:46:23 +02:00
Nikolay Sivov
87037d3748
vkd3d-shader/hlsl: Implement asfloat().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-05-02 20:46:16 +02:00
Nikolay Sivov
3f90a0e671
tests: Fix a typo in asuint() test shader.
2023-05-02 20:46:16 +02:00
Nikolay Sivov
7d41cf4440
vkd3d-shader/hlsl: Partially implement static expressions evaluation.
2023-05-02 20:46:08 +02:00
Zebediah Figura
6de904b448
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_resource_store().
2023-05-02 20:46:03 +02:00
Zebediah Figura
3cc18f1e9f
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_resource_load().
2023-05-02 20:46:02 +02:00
Zebediah Figura
8485b2ee95
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_loop().
2023-05-02 20:46:00 +02:00
Zebediah Figura
3ca9656e84
vkd3d-shader/hlsl: Pass an hlsl_block pointer to hlsl_new_loop().
2023-05-02 20:45:59 +02:00
Zebediah Figura
e848c57b46
vkd3d-shader/hlsl: Reuse the "init" instruction list if possible in create_loop().
2023-05-02 20:45:57 +02:00
Henri Verbeet
3f8aa0e272
vkd3d-shader/d3d-asm: Rename trace.c to d3d_asm.c.
2023-05-02 20:45:33 +02:00
Henri Verbeet
73dc62aebf
vkd3d-shader: Get rid of the unused vkd3d_shader_src_param_entry structure.
2023-05-02 20:45:27 +02:00
Francisco Casas
abb207fab0
vkd3d-shader/hlsl: Always specify resource on intrinsic_tex().
...
Otherwise, in the added test, we get:
vkd3d-compiler: vkd3d-shader/hlsl.c:452: hlsl_init_deref_from_index_chain: Assertion `chain' failed.
because on the path that triggers the following error:
E5002: Wrong type for argument 1 of 'tex3D': expected 'sampler' or 'sampler3D', but got 'sampler2D'.
a NULL params.resource is passed to hlsl_new_resource_load() and
then to hlsl_init_deref_from_index_chain().
2023-05-01 22:18:46 +02:00
Ethan Lee
5d735f3b0e
vkd3d-shader/hlsl: Add support for sign() intrinsic.
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-05-01 22:18:41 +02:00
Ethan Lee
109f7094bc
tests: Add tests for sign() intrinsic.
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-05-01 22:18:41 +02:00
Zebediah Figura
6e677def71
vkd3d-shader/hlsl: Normalize bools when loading from uniforms or vertex input.
2023-05-01 22:18:36 +02:00
Zebediah Figura
834497d5ac
vkd3d-shader/hlsl: Introduce an sm4_src_from_constant_value() helper.
2023-05-01 22:18:35 +02:00
Zebediah Figura
0a44e6043e
vkd3d-shader/hlsl: Put the hlsl_ir_constant value in a structure.
2023-05-01 22:18:33 +02:00
Zebediah Figura
3cce4e70e9
tests: Test bool semantics.
2023-05-01 22:18:33 +02:00
Zebediah Figura
8b4e70dfee
tests: Test casting from a bool uniform.
2023-05-01 22:18:33 +02:00
Francisco Casas
dcd991deda
vkd3d-shader/hlsl: Consider duplicated input semantic types equivalent in SM1.
2023-05-01 22:18:27 +02:00
Francisco Casas
34431239a5
vkd3d-shader/hlsl: Handle possibly different types in input semantic var load.
...
Since in SM1 all vector types use 4 register components, and since SM1
doesn't consider vectors of different dimx incompatible, it is necessary
to ensure that the semantic var is created with dimx=4, and to add a
cast node.
2023-05-01 22:18:26 +02:00
Francisco Casas
537d7c27a2
vkd3d-shader/hlsl: Error out when a semantic is used with incompatible types.
...
Considering row vectors from row_major matrices as having a different
layout as regular vectors, and error out in that case, is left as todo.
2023-05-01 22:18:24 +02:00
Francisco Casas
d96e9665b1
vkd3d-shader/hlsl: Error out when an output semantic is used more than once.
...
The use of the hlsl_semantic.reported_duplicated_output_next_index field
allows reporting multiple overlapping indexes, such as in the following
vertex shader:
void main(out float1x3 x : OVERLAP0, out float1x3 y : OVERLAP1)
{
x = float3(1.0, 2.0, 3.2);
y = float3(5.0, 6.0, 5.0);
}
apple.hlsl:1:41: E5013: Output semantic "OVERLAP1" is used multiple times.
apple.hlsl:1:13: First use of "OVERLAP1" is here.
apple.hlsl:1:41: E5013: Output semantic "OVERLAP2" is used multiple times.
apple.hlsl:1:13: First use of "OVERLAP2" is here.
While at the same time avoiding reporting overlaps more than once for
large arrays:
struct apple
{
float2 p : sv_position;
};
void main(out apple aps[4])
{
}
apple.hlsl:3:8: E5013: Output semantic "sv_position0" is used multiple times.
apple.hlsl:3:8: First use of "sv_position0" is here.
2023-05-01 22:18:22 +02:00
Francisco Casas
edc72fdefc
vkd3d-shader/hlsl: Support semantics for array types.
2023-05-01 22:18:21 +02:00
Francisco Casas
a488889494
vkd3d-shader/hlsl: Don't create semantic vars more than once.
2023-05-01 22:18:20 +02:00
Francisco Casas
b589c2b32d
vkd3d-shader/hlsl: Move get_array_size() and get_array_type() to hlsl.c.
2023-05-01 22:18:19 +02:00
Francisco Casas
d5068fd3ff
tests: Test duplicated semantics.
2023-05-01 22:18:19 +02:00
Francisco Casas
f1276f9fb9
tests: Test array types with semantics.
2023-05-01 22:18:19 +02:00
Francisco Casas
61c72a4fd1
vkd3d-shader/hlsl: Avoid invalid input/output copies for non-numeric types.
2023-05-01 22:18:17 +02:00
Francisco Casas
627678a632
tests: Map unindentified hrs on compilation.
2023-05-01 22:18:17 +02:00
Francisco Casas
9cc1c7fe9d
tests: Allow invalid vertex shader tests.
2023-05-01 22:18:17 +02:00
Francisco Casas
877fd3f0b4
tests: Expect S_OK result on [vertex shader].
2023-05-01 22:18:16 +02:00
Nikolay Sivov
7ba373946b
vkd3d-shader/hlsl: Implement D3DCOLORtoUBYTE4() function.
2023-04-28 21:04:13 +02:00
Nikolay Sivov
4b3707aeb4
vkd3d-shader/hlsl: Partially implement trunc().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-28 21:04:11 +02:00
Conor McCarthy
5366ca7001
vkd3d: Synchronise concurrent descriptor heap binding by multiple command lists.
...
It is possible for multiple command lists to use the same heap, and
submit it simultaneously to multiple d3d12 queues.
2023-04-28 21:04:02 +02:00
Conor McCarthy
fa63da6030
vkd3d: Track all descriptor heaps bound during command list recording and flush their writes.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54895
2023-04-28 21:04:02 +02:00
Ethan Lee
d3876e49bc
tests: Add tests for ddx(), ddy() intrinsics.
...
Thanks to Giovanni for the second set of tests! Note that the
tolerance for the final pixel was set much higher than the others;
this test seems to be an issue for some devices (in my case, a 7900
XTX running RADV).
Co-authored-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-04-28 21:03:43 +02:00
Ethan Lee
138c32ce88
vkd3d-shader/hlsl: Add support for ddx(), ddy() intrinsics.
...
SPIR-V already handled DSX/DSY, so only D3DBC/TPF needed new case blocks.
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-04-28 21:03:40 +02:00
Nikolay Sivov
af4bb03795
vkd3d-shader/hlsl: Implement SampleBias() method.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-26 22:46:55 +02:00
Nikolay Sivov
c166ab9727
vkd3d-shader/hlsl: Add separate helpers to generate object methods.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-26 22:46:53 +02:00
Nikolay Sivov
4fe4784e8a
tests: Add a simple test for "discard".
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-26 22:46:52 +02:00
Ethan Lee
e541e71532
tests: Remove rtv clears in Vulkan runner.
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-26 22:46:52 +02:00
Nikolay Sivov
c74d148cbe
tests: Remove rtv clears in d3d12 runner.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-26 22:46:52 +02:00
Nikolay Sivov
59c63ec584
vkd3d-shader/hlsl: Handle discard statement.
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-26 22:46:50 +02:00
Nikolay Sivov
6da7d16d4c
vkd3d-shader/trace: Add separate id for discard.
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-04-26 22:46:49 +02:00
Conor McCarthy
06cc2e1aee
vkd3d: Collect multiple descriptor writes in a buffer and update in one call.
...
Reduces the cost of calling vkUpdateDescriptorSets() via winevulkan
and its thunks. The performance gain can be as high as 20%.
2023-04-25 22:20:17 +02:00
Conor McCarthy
f50e53e7c9
vkd3d: Use atomic exchange for descriptor writes.
...
The descriptor component of struct d3d12_desc is replaced with a union
containing a pointer which can be swapped out using
InterlockedExchangePointer(). To make it safe to increment the refcount
of such an object it is necessary to cache freed objects. Elimination
of the descriptor mutexes on games which use multithreaded descriptor
writes nearly doubles framerate on recent hardware.
2023-04-25 22:20:15 +02:00
Conor McCarthy
e63201a7a3
vkd3d: Delay writing Vulkan descriptors until submitted to a queue.
...
Eliminates vk_sets_mutex. Performance on average may be lower until
the descriptor mutexes are replaced and Vulkan writes are buffered
to reduce thunk calls.
2023-04-25 22:20:09 +02:00
Conor McCarthy
505c8c5a2f
vkd3d: Ensure descriptors are pointer aligned.
...
The descriptor structure contains pointer and size types.
2023-04-25 22:20:06 +02:00
Zebediah Figura
b46df551eb
vkd3d-shader/tpf: Return unsigned int from hlsl_sm4_register_from_semantic().
...
Fix a compile warning:
../vkd3d/libs/vkd3d-shader/hlsl_codegen.c: In function 'allocate_semantic_register':
../vkd3d/libs/vkd3d-shader/hlsl_codegen.c:2947:85: error: passing argument 4 of 'hlsl_sm4_register_from_semantic' from incompatible pointer type [-Werror=incompatible-pointer-types]
2947 | if ((builtin = hlsl_sm4_register_from_semantic(ctx, &var->semantic, output, &type, NULL, &has_idx)))
| ^~~~~
| |
| unsigned int *
In file included from ../vkd3d/libs/vkd3d-shader/hlsl_codegen.c:21:
../vkd3d/libs/vkd3d-shader/hlsl.h:1171:52: note: expected 'enum vkd3d_sm4_register_type *' but argument is of type 'unsigned int *'
1171 | bool output, enum vkd3d_sm4_register_type *type, enum vkd3d_sm4_swizzle_type *swizzle_type, bool *has_idx);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
2023-04-21 20:55:56 +02:00
Nikolay Sivov
317b8aa039
vkd3d-shader/hlsl: Ignore "unroll" attribute for loops.
2023-04-21 20:55:48 +02:00
Henri Verbeet
8e0df3f720
vkd3d-shader/sm1: Merge hlsl_sm1.c into d3dbc.c.
2023-04-20 22:54:32 +02:00
Henri Verbeet
99bc07ccf5
vkd3d-shader/sm4: Merge sm4.h into tpf.c.
2023-04-20 22:54:31 +02:00
Henri Verbeet
7800c7b40f
vkd3d-shader/sm4: Rename hlsl_sm4.c to tpf.c.
2023-04-20 22:54:30 +02:00
Henri Verbeet
804e315b68
vkd3d-shader/sm4: Move the TPF parser from dxbc.c to hlsl_sm4.c.
2023-04-20 22:54:28 +02:00
Zebediah Figura
e34bdcab3a
tests/shader_runner: Remove a redundant vkd3d_test_pop_context().
...
We already popped the context here.
Move the break inside the previous if to make control flow a little clearer.
2023-04-20 22:54:23 +02:00
Zebediah Figura
0959c6663f
vkd3d-shader/hlsl: Remove an unused local variable from create_loop().
2023-04-20 22:54:13 +02:00
Zebediah Figura
39a03cfd22
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_load_component().
2023-04-20 22:54:12 +02:00
Zebediah Figura
a98686ed78
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from add_load_component().
2023-04-20 22:54:11 +02:00
Zebediah Figura
e5ec431784
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_jump().
2023-04-20 22:54:10 +02:00
Zebediah Figura
dfe056596a
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_int_constant().
2023-04-20 22:54:09 +02:00
Conor McCarthy
a4a95aa950
vkd3d: Treat negative viewport widths as invalid.
...
Negative widths are not supported in Vulkan.
2023-04-20 22:53:48 +02:00
Conor McCarthy
5d724abc96
vkd3d: Do not skip all viewports if one is invalid.
...
Fixes blank screen in Assassin's Creed: Valhalla.
2023-04-20 22:53:46 +02:00
Ethan Lee
81cc077b53
tests: Add tests for any() intrinsic.
...
Currently only tests float and bool, scalar and vector.
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-04-19 20:46:53 +02:00
Ethan Lee
0668d32631
vkd3d-shader/hlsl: Add support for any() intrinsic.
...
For now, this is limited to float and bool, scalar and vector. All other types are unsupported.
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com >
2023-04-19 20:46:53 +02:00
Francisco Casas
3f9cd58f5b
vkd3d-shader/hlsl: Fix missing extern resource names.
2023-04-19 20:46:53 +02:00
Giovanni Mascellani
625155bd3c
tests: Pop the shader runner context after processing the current section.
...
This way failures produced while compiling or preprocessing a shader
are shown with the appropriate context.
2023-04-19 20:46:53 +02:00
Conor McCarthy
db7359f36a
tests: Test index buffer location zero in test_draw_indexed_instanced().
...
Only verify it doesn't crash.
2023-04-19 20:46:53 +02:00
Conor McCarthy
333fdf7c74
vkd3d: Check for index buffer location zero.
...
VK_EXT_robustness2 does not support null index buffers so we only
warn and return immediately.
2023-04-19 20:46:53 +02:00
Conor McCarthy
5244fa572f
tests: Test null addresses in test_update_root_descriptors().
2023-04-19 20:46:00 +02:00
Conor McCarthy
0526f232cd
vkd3d: Support null address for SRV/UAV root descriptors.
2023-04-19 20:46:00 +02:00
Conor McCarthy
963e5e26dc
vkd3d: Support null address for CBV root descriptors.
2023-04-19 20:46:00 +02:00
Nikolay Sivov
827a359b45
vkd3d-shader/hlsl: Handle uppercase regset names in packoffset().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-19 20:45:50 +02:00
Nikolay Sivov
0cea4d352e
vkd3d-shader/hlsl: Handle uppercase regset names in register().
2023-04-19 20:45:48 +02:00
Zebediah Figura
d8ef0c69a8
vkd3d-shader/spirv: Do not declare resources as multisampled if the sample count is 1.
...
It is illegal to match a SPIR-V multisampled resource to a Vulkan resource which
is not multisampled. Vulkan considers a resource to be multisampled if its
sample count is greater than 1 (and SPIR-V does not care about the sample count).
This fixes validation errors in the case where the sample count does actually
match the resource. In order to provide correct behaviour when there is a
mismatch, or when the sample count is missing, we will need yet another
additional interface. In the absence of that it seems best to provide a best
guess.
This fixes a validation error with the not-yet-committed merge request 135, when
the d3d11 runner is run through Wine with the Vulkan backend.
2023-04-19 20:45:39 +02:00
Nikolay Sivov
dfe923ea1d
vkd3d-shader: Consistently pass location structure by pointer.
2023-04-19 20:45:31 +02:00
Conor McCarthy
0ce55e8b8e
vkd3d: Support 1D SRV.
2023-04-18 22:00:17 +02:00
Conor McCarthy
6db9ed14dc
vkd3d: Support 1D UAV.
2023-04-18 22:00:17 +02:00
Conor McCarthy
7d0aaea4f8
tests: Test 1D UAV clear.
2023-04-18 22:00:01 +02:00
Zebediah Figura
7ee66351c8
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_if().
2023-04-18 21:59:49 +02:00
Zebediah Figura
50f0ae1b21
vkd3d-shader/hlsl: Pass hlsl_block pointers to hlsl_new_if().
2023-04-18 21:59:45 +02:00
Zebediah Figura
5a3fe1609b
vkd3d-shader/hlsl: Initialize the block in clone_block().
2023-04-18 21:59:44 +02:00
Zebediah Figura
733141720a
vkd3d-shader/hlsl: Introduce a hlsl_block_cleanup() helper.
2023-04-18 21:59:42 +02:00
Zebediah Figura
dc7514afc9
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_float_constant().
2023-04-18 21:59:39 +02:00
Zebediah Figura
b23ef3ca3b
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_cast() and hlsl_new_copy().
2023-04-18 21:59:37 +02:00
Zebediah Figura
1bf3aa9275
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_bool_constant().
2023-04-18 21:59:34 +02:00
Zebediah Figura
0654d88edd
vkd3d-shader/hlsl: Allow VPOS and VFACE to be specified in sm3 pixel shaders.
...
We were previously (accidentally) rejecting them because they didn't have a
usage.
2023-04-18 21:59:22 +02:00
Zebediah Figura
b19105eaeb
vkd3d-shader/hlsl: Do not write DCL instructions for ps_1_* shaders.
2023-04-18 21:59:17 +02:00
Zebediah Figura
99d413206b
vkd3d-shader/hlsl: Map ps_1_* color and texcoord semantics to registers.
2023-04-18 21:59:15 +02:00
Zebediah Figura
98e2461392
vkd3d-shader/hlsl: Sort only uniforms by name in the sm1 backend.
2023-04-18 21:59:13 +02:00
Zebediah Figura
8ed7437708
vkd3d-shader/hlsl: Evaluate index before array.
...
Co-authored-by: Francisco Casas <fcasas@codeweavers.com >
2023-04-13 23:05:43 +02:00
Francisco Casas
af1aa63ace
vkd3d-shader/hlsl: Support column-major matrix indexing in the lhs.
2023-04-13 23:05:41 +02:00
Francisco Casas
dc2a34824d
vkd3d-shader/hlsl: Always load from a synthetic copy in add_load_component().
2023-04-13 23:05:39 +02:00
Francisco Casas
82ff408451
vkd3d-shader/hlsl: Remove add_load_index().
2023-04-13 23:05:34 +02:00
Francisco Casas
5c285adc6b
vkd3d-shader/hlsl: Use hlsl_ir_index for array and record access.
...
From this point on, it is no longer true that only hlsl_ir_loads can
return objects, because an object can also come from chain of
hlsl_ir_indexes that ends in an hlsl_ir_load.
The lower_index_loads pass takes care of lowering all hlsl_ir_indexes
into hlsl_ir_loads.
For this reason, hlsl_resource_load_params now expects both the resource
as the sampler to be just an hlsl_ir_node pointer instead of a pointer
to a more specific hlsl_ir_load.
2023-04-13 23:05:32 +02:00
Francisco Casas
741c9e5893
vkd3d-shader/hlsl: Introduce hlsl_ir_index.
...
This node type is intended for use during parse-time.
While we parse an indexing expression such as "a[3]", we don't know if
it will end up as part of an expression (in which case it must be folded
into a load) or it is for the lhs of a store (in which case it must be
folded into the store's deref).
2023-04-13 23:05:25 +02:00
Francisco Casas
8cd3defe0d
tests: Test indexing of non-loads.
2023-04-13 23:05:25 +02:00
Zebediah Figura
526b025c88
tests: Test side effects on indexes.
...
Co-authored-by: Francisco Casas <fcasas@codeweavers.com >
2023-04-13 23:05:21 +02:00
Francisco Casas
1b1978f684
tests: Test matrix indexing on the lhs.
2023-04-13 23:05:21 +02:00
Francisco Casas
9dd99a084d
tests: Test multiple calls to the same function in initializers.
2023-04-13 23:05:21 +02:00
Francisco Casas
0ceecd1225
vkd3d-shader/hlsl: Fix numeric offset of object fields.
2023-04-13 23:05:07 +02:00
Francisco Casas
86893bc7f4
tests: Test numeric offsets with object fields.
2023-04-13 23:05:07 +02:00
Nikolay Sivov
e4503ad80f
tests: Add a test for SV_IsFrontFace.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-13 23:05:00 +02:00
Nikolay Sivov
a496e3a8ba
tests: Disable culling in shader runners.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-13 23:05:00 +02:00
Nikolay Sivov
ca59a3c35b
vkd3d-shader/hlsl: Handle SV_IsFrontFace semantic.
2023-04-13 23:04:58 +02:00
Nikolay Sivov
a1bd4e080e
vkd3d-shader/hlsl: Support log() intrinsic.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-13 23:04:44 +02:00
Nikolay Sivov
210caa931d
vkd3d-shader/hlsl: Support log10() intrinsic.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-13 23:04:42 +02:00
Nikolay Sivov
49b63fbeba
vkd3d-shader/hlsl: Support log2() intrinsic.
2023-04-13 23:04:40 +02:00
Nikolay Sivov
c93dac3620
vkd3d-shader/hlsl: Write 'log' instruction for SM1.
2023-04-13 23:04:37 +02:00
Henri Verbeet
0c05f2409c
vkd3d-shader/sm4: Get rid of shader_sm4_is_end().
2023-04-12 21:54:57 +02:00
Henri Verbeet
1e448b0b71
vkd3d-shader/sm4: Pass a vkd3d_shader_sm4_parser structure to shader_sm4_read_instruction().
2023-04-12 21:54:56 +02:00
Henri Verbeet
1b7b694190
vkd3d-shader/sm1: Pass a vkd3d_shader_sm1_parser structure to shader_sm1_is_end().
2023-04-12 21:54:55 +02:00
Henri Verbeet
df6a34e1bd
vkd3d-shader/sm1: Pass a vkd3d_shader_sm1_parser structure to shader_sm1_read_instruction().
2023-04-12 21:54:54 +02:00
Henri Verbeet
09566e2c25
vkd3d-shader: Get rid of the "ptr" field from struct vkd3d_shader_parser.
...
This is an implementation detail.
2023-04-12 21:54:53 +02:00
Henri Verbeet
c4d307a08d
vkd3d-shader: Get rid of the "instruction_idx" field from struct vkd3d_shader_parser.
...
This is unused now.
2023-04-12 21:54:51 +02:00
Conor McCarthy
98b5e2c6e0
vkd3d-shader/ir: Insert hull shader control point input declarations if no control point phase is defined.
...
The SPIR-V backend will emit a default control point phase. Inserting
inputs into the IR allows handling of declarations via the usual path
instead of an ad hoc implementation which may not match later changes
to input handling.
2023-04-12 21:54:28 +02:00
Conor McCarthy
14295a224d
vkd3d-shader/ir: Normalise control point phase output registers to include the control point id.
...
In SPIR-V the address must include the invocation id, but in TPF it
is implicit. Move the register index up one slot and insert an
OUTPOINTID relative address.
2023-04-12 21:54:27 +02:00
Zebediah Figura
94ff9ba5e7
tests: Add a test for readback map stability.
...
Resident Evil 2 accesses a resource immediately after unmapping it.
2023-04-10 21:00:26 +02:00
Philip Rebohle
c8a33431e3
vkd3d: Persistently map host-visible heaps on creation.
2023-04-10 21:00:17 +02:00
Zebediah Figura
616c4bf51f
vkd3d-shader/hlsl: Always align section sizes.
...
This fixes disassembly using native D3DDisassemble() of shaders generated with vkd3d-shader.
Fixes: d6d9aab31c
2023-04-06 17:52:16 +02:00
Zebediah Figura
a60c47ff39
vkd3d-shader: Explicitly align the size in bytecode_get_next_offset() and rename it accordingly.
2023-04-06 17:52:16 +02:00
Zebediah Figura
6783524613
vkd3d-common: Make some global string variables const.
2023-04-06 17:52:08 +02:00
Zebediah Figura
1514755043
vkd3d-shader/hlsl: Make a string array const.
2023-04-06 17:52:07 +02:00
Zebediah Figura
09cda98deb
vkd3d-shader: Factor out vkd3d_shader_parser_compile().
2023-04-06 17:52:02 +02:00
Zebediah Figura
507e8644ae
vkd3d-shader: Reuse the existing parser for scanning in compile_dxbc_tpf().
2023-04-06 17:52:02 +02:00
Zebediah Figura
28774b3649
vkd3d-shader/spirv: Move spirv_compiler_destroy() to avoid forward declarations.
2023-04-06 17:52:01 +02:00
Zebediah Figura
70cfd58be6
vkd3d-shader/spirv: Introduce a spirv_compile() helper.
2023-04-06 17:51:59 +02:00
Nikolay Sivov
24c1eb562f
vkd3d-shader/hlsl: Treat half as float for casts.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-06 17:51:55 +02:00
Nikolay Sivov
c190c184ce
vkd3d-shader/hlsl: Add support for ternary operator.
2023-04-06 17:51:46 +02:00
Zebediah Figura
725d408974
vkd3d-shader/hlsl: Introduce an hlsl_block_init() helper.
2023-04-06 17:51:40 +02:00
Zebediah Figura
1da5a9a490
vkd3d-shader/hlsl: Introduce an hlsl_block_add_block() helper.
2023-04-06 17:51:38 +02:00
Zebediah Figura
ceac81b816
vkd3d-shader/hlsl: Introduce an hlsl_block_add_instr() helper.
2023-04-06 17:51:36 +02:00
Conor McCarthy
e27ceddfb4
vkd3d: Leave the command queue op mutex locked after a partial flush.
...
All return paths in d3d12_command_queue_flush_ops_locked() must
leave the op mutex locked.
2023-04-05 21:38:39 +02:00
Henri Verbeet
d6d9aab31c
vkd3d-shader: Align the start offset instead of the size in bytecode_put_bytes().
...
The practical effect this has is that we avoid potential trailing padding at
the end of DXBC blobs. Unfortunately this also means we need to be more
careful about using bytecode_get_size() to find the offset where subsequent
data would get written, although in many cases this follows a put_u32() call.
2023-04-04 22:01:36 +02:00
Henri Verbeet
a0a3fb0e5f
tests/shader_runner: Return from run_shader_tests_d3d12() if we're unable to create a test context.
...
A test environment may legitimately be unable to support running d3d12 tests.
2023-04-04 22:01:15 +02:00
Henri Verbeet
4e32adb8c1
vkd3d-utils: Export D3D12CreateDevice() once again.
...
Commit d27fee64ab
inadvertently stopped
exporting D3D12CreateDevice().
2023-04-04 22:01:04 +02:00
Zebediah Figura
dfa4bfdd03
include: Make test context information nestable.
...
Based on Wine.
2023-04-04 21:59:58 +02:00
Zebediah Figura
1bf5050d3d
tests: Factor out vkd3d_test_printf().
2023-04-04 21:59:58 +02:00
Francisco Casas
f3e81327dc
vkd3d-shader/hlsl: Consider register() as manual packing for resource fields.
2023-04-04 21:59:49 +02:00
Francisco Casas
70ff7aaddd
tests: Test packoffset() with resources inside cbuffers.
2023-04-04 21:59:49 +02:00
Francisco Casas
bf4a125087
vkd3d-shader/hlsl: Ignore packoffset() contents for SM1.
2023-04-04 21:59:47 +02:00
Francisco Casas
60237cb773
vkd3d-shader/hlsl: Don't allow manual and automatic cbuffer offset packing.
2023-04-04 21:59:45 +02:00
Francisco Casas
4448d114ad
vkd3d-shader/hlsl: Detect overlaps in cbuffer offsets.
2023-04-04 21:59:43 +02:00
Francisco Casas
7777c32cac
vkd3d-shader/hlsl: Support packoffset().
2023-04-04 21:59:42 +02:00
Francisco Casas
4aca335f42
vkd3d-shader/hlsl: Parse packoffset().
2023-04-04 21:59:40 +02:00
Francisco Casas
9b70971696
vkd3d-shader/hlsl: Rename struct hlsl_reg_reservation fields.
2023-04-04 21:59:39 +02:00
Francisco Casas
496f9b42cb
tests: Test packoffset().
2023-04-04 21:59:39 +02:00
Francisco Casas
cf59ad9c9f
tests: Test cbuffer element offsets.
2023-04-04 21:59:37 +02:00
Zebediah Figura
8186b75228
tests: Use a pixel shader that consumes SV_Position in test_query_pipeline_statistics().
...
Some drivers (AMD Radeon RX 6700 XT, with radeonsi from Mesa 22.2.0-rc3) emit
less than one invocation per pixel, presumably because they detect that the
shader control flow is uniform for all pixels. Having the control flow depend on
SV_Position avoids this test failure.
Cf. 34bd0dd0704c613abef8a9aa3ba2a2507ed02843 in wine.
2023-04-03 18:00:37 +02:00
Giovanni Mascellani
9a27df3a8c
tests: Read integer uniforms with strtol() and strtoul().
...
Because %i sscanf() converters are deprecated, and in practice
clamp to [-2^31, 2^31) on 32 bit.
2023-04-03 18:00:14 +02:00
Nikolay Sivov
eb71c5f20d
vkd3d-shader/hlsl: Handle round() for SM1.
2023-04-03 18:00:03 +02:00
Conor McCarthy
c87a292f98
tests: Release and then use a heap which contains resources.
...
The expected use case where a heap is freed before its contained
resources is not reasonably testable, so the ability to place a new
resource is tested instead.
2023-04-03 17:59:43 +02:00
Conor McCarthy
88667098eb
vkd3d: Do not destroy a heap until its resource count is zero.
...
Fixes a crash on exit in Horizon Zero Dawn (which requres added SM 6.0 support).
Placed resources should hold a reference to their heap:
https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12device-createheap
2023-04-03 17:59:41 +02:00
Zebediah Figura
7a9e393ea0
vkd3d-shader/hlsl: Rename the "type" field of struct hlsl_type to "class".
...
To be consistent with enum hlsl_type_class and HLSL_CLASS_*.
2023-04-03 17:59:24 +02:00
Nikolay Sivov
b172f4c257
vkd3d-shader/hlsl: Improve handling of builtin alias type "vector".
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-04-03 17:59:08 +02:00
Nikolay Sivov
5b5c020ade
vkd3d-shader/hlsl: Improve handling of builtin alias type "matrix".
2023-04-03 17:59:06 +02:00
Conor McCarthy
c61f9f477c
vkd3d-shader/spirv: Declare the phase SPIR-V function in spirv_compiler_enter_shader_phase().
...
The convoluted code path is no longer needed.
2023-04-03 17:58:26 +02:00
Conor McCarthy
b8472d2270
vkd3d-shader/spirv: Remove the hull shader phase array.
...
With no more than one phase each of control point and fork/join type,
an array is not required.
2023-04-03 17:58:24 +02:00
Conor McCarthy
16a7de4b38
vkd3d-shader/trace: Trace the normalised instruction array after tracing the input.
2023-04-03 17:58:23 +02:00
Conor McCarthy
eabdccb117
vkd3d-shader/ir: Merge all shader IR fork and join phases into a single phase.
...
Normalise the incoming vkd3d_shader_instruction IR to the shader model 6
pattern. This allows generation of a single patch constant function in
SPIR-V.
2023-04-03 17:58:21 +02:00
Henri Verbeet
57d92a15cf
Release 1.7.
2023-03-24 11:22:28 +01:00
Henri Verbeet
54b0165e32
vkd3d-shader: VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE was introduced in vkd3d 1.7.
2023-03-20 21:28:13 +01:00
Nikolay Sivov
4110f1e547
vkd3d-shader: Fix a few typos in the comments.
2023-03-15 20:13:27 +01:00
Henri Verbeet
8509ec1e72
vkd3d-shader/spirv: Update the current source location in spirv_compiler_generate_spirv().
2023-03-13 22:10:00 +01:00
Henri Verbeet
0a73c75db8
vkd3d-shader/glsl: Update the current source location in vkd3d_glsl_generator_generate().
...
Since the introduction of instruction arrays, the parser location no
longer matches the location of the current instruction. Ultimately we'll
likely want to add some kind of explicit location information to struct
vkd3d_shader_instruction_array, because we might do transformations that
change the order of the original instructions.
2023-03-13 22:09:58 +01:00
Henri Verbeet
685abf9c2d
vkd3d-shader/sm4: Do not specify a destination register for VKD3D_SM4_OP_DCL_RESOURCE in opcode_table[].
...
We do not set one in shader_sm4_read_dcl_resource(), and
shader_sm4_read_instruction() explicitly sets this to 0.
2023-03-13 22:09:54 +01:00
Henri Verbeet
65b7154a22
vkd3d-shader/sm4: Set "dst_count" to 0 when we clear "dst" in shader_sm4_read_instruction().
...
VKD3D_SM4_OP_DCL_RESOURCE currently has 1 for "dst_count", but NULL for
"dst". This is largely harmless because we never attempt to access the
destination register of VKD3DSIH_DCL instructions, but nevertheless not
quite proper.
2023-03-13 22:09:49 +01:00
Zebediah Figura
9ea84ae8c9
tests/shader_runner: Use the global test_options structure.
...
Inspired by a patch by Giovanni Mascellani.
2023-03-10 21:13:05 +01:00
Giovanni Mascellani
c8a05a8b10
tests: Collect D3D12 test options in a dedicated structure.
2023-03-10 21:12:46 +01:00
Giovanni Mascellani
8d7159b4be
tests: Initialize shader_runner fields after having zeroed the struct.
2023-03-10 21:12:44 +01:00
Zebediah Figura
da2435707b
vkd3d-shader/hlsl: Fix some memory leaks in the function call rule.
2023-03-09 22:11:06 +01:00
Henri Verbeet
d405295bc7
build: Fix the order of some .shader_test files.
2023-03-09 22:10:53 +01:00
Henri Verbeet
0c833056f6
build: Actually run asuint.shader_test.
2023-03-09 22:10:53 +01:00
Nikolay Sivov
193692bbcb
vkd3d-shader/hlsl: Use array element type for array's regset.
...
Currently this affects SM1 compilation only, with a minimal example like this:
float4 var[3];
float4 main() : sv_target
{
return var[1];
}
2023-03-09 22:10:39 +01:00
Nikolay Sivov
2880be647e
vkd3d-shader/sm4: Write sample count field for multisampled texture declaration.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-03-08 20:15:11 +01:00
Nikolay Sivov
ae2f777a4d
vkd3d-shader/hlsl: Parse multisample texture type names.
2023-03-08 20:15:09 +01:00
Nikolay Sivov
ee52ad8106
vkd3d-shader/trace: Output sample count for multisampled resources.
2023-03-08 20:15:06 +01:00
Conor McCarthy
9f6e6d3fcd
vkd3d-shader/dxbc: Validate and skip the signature section header size.
...
Silences a very common warning.
2023-03-08 20:14:59 +01:00
Conor McCarthy
3b5316be82
vkd3d-shader/dxbc: Emit a shader error for an invalid signature data size.
2023-03-08 20:14:57 +01:00
Conor McCarthy
83e39e2650
vkd3d-shader/dxbc: Pass a message context to for_each_dxbc_section().
2023-03-08 20:14:55 +01:00
Zebediah Figura
98624f2e8f
include: Document that vkd3d_shader_signature may contain pointers into the input shader blob.
2023-03-08 20:14:49 +01:00
Giovanni Mascellani
bb2fa97c33
vkd3d: Do not keep the CS queue locked while processing it.
...
d3d12_command_queue_flush_ops() can renter itself while processing signal
events. Since we don't use recursive mutexes, we currently have to check
some of the queue variables without holding the mutex, which is not safe.
This is solved by allowing the queue to release its mutex while it is
processing entries: when flushing, the queue is briefly locked, the
is_flushing flag is set, the queue content is copied away and the
queue is unlocked again. After having processed the entries, the
queue is locked again to check is something else was added in the
meantime. This is repeated until the queue is empty (or a wait operation
is blocking it).
This should also remove some latency when a thread pushes to the queue
while another one is processing it, but I didn't try to measure any
impact. While it is expected that with this patch the queue mutex
will be locked and unlocked more frequently, it should also remain
locked for less time, hopefully creating little contention.
2023-03-08 20:14:39 +01:00
Giovanni Mascellani
09d2c8d190
vkd3d: Always enqueue wait operations, even when they can be executed right away.
2023-03-08 20:14:39 +01:00
Giovanni Mascellani
9eba44396a
vkd3d: Always enqueue signal operations, even when they can be executed right away.
2023-03-08 20:14:39 +01:00
Giovanni Mascellani
0d329ba168
vkd3d: Always enqueue execute operations, even when they can be executed right away.
...
The goal is to simplify the CS queue handling: with this and the following
changes operations are always started by d3d12_command_queue_flush_ops(),
in order to make further refactoring easier.
Notice that while with this change executing an operation on an empty CS
queue is a bit less efficient, it doesn't require more locking. On the other
hand, this change paves the road for executing CS operations without holding
the queue lock.
2023-03-08 20:14:35 +01:00
Giovanni Mascellani
0c6df49560
vkd3d: Hold the queue mutex when adding the queue to a blocked list.
...
Otherwise it could be added more than once.
Note that the deleted comment is wrong: between when d3d12_command_queue_flush_ops()
returns and when the queue is added back to the blocked list, the queue
might have been pushed to and flushed an arbitrary number of times.
2023-03-08 20:14:31 +01:00
Giovanni Mascellani
ef8d272507
vkd3d: Mention the correct mutex in a comment.
2023-03-08 20:14:31 +01:00
Nikolay Sivov
a18f3d4dd5
vkd3d-shader/hlsl: Support distance() intrinsic.
2023-03-08 20:14:22 +01:00
Nikolay Sivov
d6b656641c
vkd3d-shader/hlsl: Support rsqrt() intrinsic.
2023-03-08 20:14:20 +01:00
Giovanni Mascellani
6ccde9e82c
vkd3d-shader: Make documentation for "messages" parameters self contained.
...
Otherwise it's not clear which clauses in vkd3d_shader_compile() really
apply to other functions. For example, many of the functions currently
refering to vkd3d_shader_compile() don't even take a vkd3d_shader_compile_info
parameter.
2023-02-28 22:07:12 +01:00
Zebediah Figura
a28ecaa135
vkd3d-shader/hlsl: Get rid of the check_invalid_matrix_modifiers() helper.
2023-02-28 22:07:01 +01:00
Zebediah Figura
5838364886
vkd3d-shader/hlsl: Apply latent majority modifiers to typedefs as well.
2023-02-28 22:07:00 +01:00
Zebediah Figura
322963add8
vkd3d-shader/hlsl: Do not set an initial latent matrix majority.
...
This change does nothing by itself.
2023-02-28 22:06:59 +01:00
Zebediah Figura
75ab9d31ef
vkd3d-shader/hlsl: Store the matrix majority as a type modifiers bitmask.
2023-02-28 22:06:58 +01:00
Zebediah Figura
b3c620954b
vkd3d-shader/hlsl: Apply latent type modifiers to matrix array typedefs.
2023-02-28 22:06:56 +01:00
Zebediah Figura
2a412670ee
tests: Add more tests for pack_matrix pragmas.
2023-02-28 22:06:54 +01:00
Francisco Casas
af25d5bf96
vkd3d-shader/hlsl: Don't map src swizzles for SM1 dp3 and dp4 ops.
...
Without this patch, dp3 and dp4 map src swizzles to the dst writemask,
which is not correct.
Before b84f560bdf
, these ops worked
despite this, because the dst register had, incorrectly, the full
writemask.
To solve this problem, write_sm1_binary_op_dot() is introduced,
similarly to write_sm4_binary_op_dot().
2023-02-27 22:12:38 +01:00
Giovanni Mascellani
a1c6bb85ad
vkd3d-shader: Do not pass client-given strings as printf()-style format strings.
2023-02-27 22:12:26 +01:00
Henri Verbeet
b1e13d6e33
vkd3d-shader/dxbc: Introduce API for serialising DXBC blobs.
2023-02-23 21:47:27 +01:00
Henri Verbeet
c87492ed21
vkd3d-shader/dxbc: Introduce API for parsing DXBC blobs.
2023-02-23 21:47:26 +01:00
Henri Verbeet
d0d2130f74
vkd3d-shader/dxbc: Rename parse_dxbc() to for_each_dxbc_section().
2023-02-23 21:47:23 +01:00
Henri Verbeet
a06320c1fc
vkd3d-shader/dxbc: Pass a vkd3d_shader_code structure to parse_dxbc().
2023-02-23 21:47:22 +01:00
Henri Verbeet
2f762465a6
vkd3d-shader/dxbc: Pass a vkd3d_shader_code structure to shader_extract_from_dxbc().
2023-02-23 21:47:21 +01:00
Henri Verbeet
3a3acb5b7d
vkd3d-shader/dxbc: Pass a vkd3d_shader_code structure to shader_parse_input_signature().
2023-02-23 21:47:20 +01:00
Henri Verbeet
e2825f7658
vkd3d-shader/dxbc: Pass a vkd3d_shader_dxbc_section_desc structure to the parse_dxbc() section handler.
2023-02-23 21:47:19 +01:00
Henri Verbeet
5020781f76
vkd3d-shader/dxbc: Pass a vkd3d_shader_dxbc_section_desc structure to shader_parse_root_signature().
2023-02-23 21:47:18 +01:00
Henri Verbeet
6c64f8a217
vkd3d-shader/dxbc: Pass a vkd3d_shader_dxbc_section_desc structure to shader_parse_signature().
2023-02-23 21:47:16 +01:00
Henri Verbeet
bf3c012834
vkd3d-shader/dxbc: Rename the dxbc_writer_section structure to vkd3d_shader_dxbc_section_desc.
...
In preparation of exposing it in the public API.
2023-02-23 21:47:15 +01:00
Henri Verbeet
b59de4de5c
vkd3d-shader/dxbc: Store DXBC section data as a vkd3d_shader_code structure.
2023-02-23 21:47:13 +01:00
Zebediah Figura
dea212688a
vkd3d: Remove a double space in a trace message.
2023-02-23 21:46:49 +01:00
Nikolay Sivov
dd36215a00
vkd3d-shader/hlsl: Support case-insensitive lookup for builtin 'float' type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-02-23 21:46:42 +01:00
Nikolay Sivov
df2d6d35e2
vkd3d-shader/hlsl: Use unsigned type for the 'dword' alias.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-02-23 21:46:40 +01:00
Nikolay Sivov
891217664a
vkd3d-shader/hlsl: Support case-insensitive lookup for builtin 'dword' type.
2023-02-23 21:46:38 +01:00
Giovanni Mascellani
5f904e5022
vkd3d-utils: Generate Doxygen documentation for vkd3d_utils.h.
2023-02-22 21:38:46 +01:00
Giovanni Mascellani
e5bbd05c98
vkd3d: Generate Doxygen documentation for vkd3d.h.
2023-02-22 21:38:46 +01:00
Giovanni Mascellani
6bdb0abf68
vkd3d-shader: Fix the Doxygen documentation for vkd3d_shader.h.
...
The \since field was too early, and prevented Doxygen from really
parsing the synopsis for vkd3d_shader.h.
2023-02-22 21:38:43 +01:00
Zebediah Figura
e10e12a10c
vkd3d-shader: Avoid underflowing the indentation level.
...
Any shader that would underflow is invalid, but it is helpful to allow tracing even invalid shaders.
2023-02-22 18:28:19 +01:00
Francisco Casas
f8338ef089
vkd3d-shader/hlsl: Allocate register reservations in a separate pass.
...
This refactoring is required for improving the allocation strategy so it
works with multiple-register variables.
2023-02-22 18:28:19 +01:00
Francisco Casas
75359e6dbd
vkd3d-shader/hlsl: Respect object reservations even if the object is unused.
2023-02-22 18:28:19 +01:00
Francisco Casas
7a7116eaab
tests: Test allocation of unused objects.
2023-02-22 18:28:19 +01:00
Francisco Casas
c5384b38ee
vkd3d-shader/hlsl: Allocate objects according to register set.
2023-02-22 18:28:19 +01:00
Francisco Casas
e0031d2a1f
vkd3d-shader/hlsl: Keep an hlsl_reg for each register set in hlsl_ir_var.
2023-02-22 18:28:19 +01:00
Francisco Casas
5272c5f86a
vkd3d-shader/hlsl: Obtain extern resources as a separate array in SM4.
2023-02-22 18:28:19 +01:00
Francisco Casas
d07247249a
vkd3d-shader/hlsl: Store the type's register size for each register set.
2023-02-22 18:28:19 +01:00
Francisco Casas
315966dc21
vkd3d-shader/hlsl: Leave offset empty for array and struct derefs.
2023-02-22 18:28:19 +01:00
Zebediah Figura
7c1c2e6cc4
vkd3d-shader/hlsl: Parse the tex3D() intrinsic.
2023-02-22 18:28:19 +01:00
Zebediah Figura
645ec0167a
vkd3d-shader/hlsl: Parse the tex2D() intrinsic.
2023-02-22 18:28:19 +01:00
Francisco Casas
9fdff25a3b
vkd3d-shader/hlsl: Avoid segfault on missing sampler.
2023-02-22 18:28:19 +01:00
Nikolay Sivov
d86db8bcbe
vkd3d-shader/hlsl: Support lit() intrinsic.
2023-02-21 21:09:52 +01:00
Zebediah Figura
02e3be811b
configure: Declare LFLAGS and YFLAGS as precious.
...
Normally AC_PROG_LEX and AC_PROG_YACC do this, but we demand flex and bison specifically.
2023-02-20 22:00:00 +01:00
Francisco Casas
7f009f59ce
vkd3d-shader/hlsl: Add a more specific error for missing compatible fn. definitions.
2023-02-20 21:59:54 +01:00
Francisco Casas
f08c0a7c03
vkd3d-shader/hlsl: Find compatible function overloads.
...
But still throw hlsl_fixme() when there is more than one.
Prioritizing among multiple compatible function overloads in the same way
as the native compiler would require systematic testing.
2023-02-20 21:59:53 +01:00
Francisco Casas
d279d34801
vkd3d-shader/hlsl: Parse array types in function parameters.
2023-02-20 21:59:51 +01:00
Francisco Casas
9df54851c9
tests: Test array parameters on functions.
2023-02-20 21:59:51 +01:00
Francisco Casas
1b951c87f6
tests: Add more tests for broadcasts in function call args.
2023-02-20 21:59:51 +01:00
Francisco Casas
2a9b9f7530
vkd3d-shader/hlsl: Rename compatible_data_types() to be more specific.
2023-02-20 21:59:50 +01:00
Zebediah Figura
6767b7abbf
vkd3d-shader/hlsl: Avoid warning for each variable when in/out modifiers are specified on non-parameters.
2023-02-20 21:59:45 +01:00
Zebediah Figura
72ec5563f8
vkd3d-shader/hlsl: Remove a redundant warning for mutually exclusive majority modifiers.
...
We will warn subsequently in apply_type_modifiers() or add_typedef().
2023-02-20 21:59:43 +01:00
Zebediah Figura
af65287423
vkd3d-shader/hlsl: Check for majority modifiers on non-matrices in apply_type_modifiers().
2023-02-20 21:59:42 +01:00
Zebediah Figura
1ee7a4e82a
tests: Add more tests for majority modifier syntax.
2023-02-20 21:59:42 +01:00
Zebediah Figura
1c29b45c1f
tests: Test macro expansion in pack_matrix pragmas.
2023-02-20 21:59:42 +01:00
Nikolay Sivov
e5b40092c2
vkd3d-shader/hlsl: Support all() intrinsic.
2023-02-20 21:59:37 +01:00
Francisco Casas
2142d31f13
vkd3d-shader/hlsl: Fix number of components when creating a swizzle in copy-prop.
...
Otherwise we may create nodes of different dimensions than the ones we
are replacing.
"count" is the number of components of the source deref (without
considering the swizzle), while "instr_component_count" is the actual
number of components of the instruction to be replaced.
2023-02-20 21:59:31 +01:00
Nikolay Sivov
e7bc634307
vkd3d-shader/hlsl: Support reflect() intrinsic.
...
Tests authored by Giovanni.
2023-02-20 21:59:23 +01:00
Giovanni Mascellani
7c3dadce6b
vkd3d-shader/hlsl: Write SM4 break instructions.
2023-02-15 21:53:21 +01:00
Nikolay Sivov
99acf5038e
vkd3d-shader/hlsl: Use mul only for two scalars for dot().
2023-02-15 21:53:15 +01:00
Zebediah Figura
0e60f4cc69
vkd3d-shader/hlsl: Always set ctx->cur_function in the func_prototype_no_attrs rule.
...
Fixes: 4c46075d86
2023-02-14 21:52:59 +01:00
Zebediah Figura
cd6e8b5540
vkd3d-shader/hlsl: Allow empty parameter lists to be specified as "(void)".
2023-02-14 21:52:57 +01:00
Zebediah Figura
58445da64b
vkd3d-shader/hlsl: Allow the final expression in a for loop initializer to be omitted.
2023-02-13 22:16:56 +01:00
Zebediah Figura
38964214cd
vkd3d-shader/hlsl: Handle early return after a CF block only if there was actually a return somewhere in the CF block.
2023-02-13 22:16:55 +01:00
Zebediah Figura
4b944517b7
vkd3d-shader/hlsl: Inline function calls.
2023-02-13 22:16:53 +01:00
Zebediah Figura
6177cea31f
vkd3d-shader/hlsl: Emit a hlsl_fixme() for unhandled instruction types when writing bytecode.
...
This was originally left alone in order to allow functions without early return
to succeed, since in that case we would already emit the correct bytecode
despite not handling the HLSL_IR_JUMP_RETURN instruction.
Now that we lower return statements, however, any unhandled instructions are
either definitely going to result in invalid bytecode, or rare enough that it's
not worth returning success anyway.
2023-02-13 22:16:52 +01:00
Zebediah Figura
8bdee6681b
vkd3d-shader/hlsl: Lower return statements.
2023-02-13 22:16:51 +01:00
Zebediah Figura
0cf39f3c63
vkd3d-shader/hlsl: Emit a hlsl_fixme() if multiple valid entry point definitions are given.
2023-02-13 22:16:49 +01:00
Zebediah Figura
bb41c3b5fe
vkd3d-shader/hlsl: Skip functions that don't have a body when looking for the entry point.
2023-02-13 22:16:48 +01:00
Zebediah Figura
09c5ed27fe
tests: Avoid performing a multi-component UAV load in uav-out-param.shader_test.
...
It requires caps beyond shader model 5.0.
2023-02-13 22:16:46 +01:00
Giovanni Mascellani
8e087b0f17
vkd3d: Use a dedicated mutex to protect the blocked queues.
2023-02-13 22:16:44 +01:00
Giovanni Mascellani
df36026633
vkd3d: Do not read max_pending_value without holding the fence's mutex.
2023-02-13 22:16:44 +01:00
Giovanni Mascellani
e076fd9c77
vkd3d: Do not read blocked_queue_count without holding the device mutex.
2023-02-13 22:16:42 +01:00
Nikolay Sivov
240b2f966f
vkd3d-shader/hlsl: Support abs() for SM1.
2023-02-09 18:03:19 +01:00
Francisco Casas
902ddee557
vkd3d-shader/hlsl: Fix SM1 dp2add swizzles.
...
SM1 dp2add doesn't map src swizzles to the dst writemask, also it
expects the last argument to have a replicate swizzle.
Before this patch we were writing the operation as:
```
dp2add r0.x, r1.x, r0.x, r2.x
```
and now it is:
```
dp2add r0.x, r1.xyxx, r0.xyxx, r2.x
```
dp2add now has its own function, write_sm1_dp2add(), since it seems to
be the only instruction with this structure.
Ideally we would be using the default swizzles for the first two src
arguments:
```
dp2add r0.x, r1, r0, r2.x
```
since, according to native's documentation, these are supported for all
sm < 4.
But this change -- along with following the convention of repeating the
last component of the swizzle when fewer than 4 components are to be
specified -- would require more global changes, probably in
hlsl_swizzle_from_writemask() and hlsl_map_swizzle().
2023-02-08 22:09:42 +01:00
Francisco Casas
d01729921c
vkd3d-shader/hlsl: Map SM1 src swizzles outside write_sm1_instruction().
...
Not every instruction expects src swizzles to be mapped according to the
dst writemasks, so this logic must be outside this function.
2023-02-08 22:09:41 +01:00
Francisco Casas
b84f560bdf
vkd3d-shader/hlsl: Set writemasks correctly for SM1 scalar and vector types.
...
Because of the change introduced in
f21693b2
vkd3d-shader/hlsl: Use reg_size as component count when allocating a single register.
SM1 scalars and vectors were not longer getting the correct writemask
when they are allocated.
This happened because they have to reserve the whole register even if
they only use some of its components, so their reg_size may differ from
the number of components.
This commit fixes that.
2023-02-08 22:09:39 +01:00
Francisco Casas
6b4a4c4c6d
vkd3d-shader/hlsl: Expect component count in allocate_register().
...
This in order to set the correct writemasks for SM1 registers.
2023-02-08 22:09:38 +01:00
Francisco Casas
0ecac994d0
vkd3d-shader/hlsl: Rename 'component_count' arguments to 'reg_size'.
...
component_count will be used in the next patch for the actual number of
components of the type and not its register size.
2023-02-08 22:09:36 +01:00
Zebediah Figura
ab601d65cd
vkd3d-shader: Initialize the parameter allocator head.
...
This fixes a memory leak.
Fixes: 007f894b94
2023-02-07 22:15:08 +01:00
Nikolay Sivov
91a70c7dda
vkd3d-shader/hlsl: Handle saturate() for SM1.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-02-07 22:15:06 +01:00
Zebediah Figura
77d716c811
vkd3d-shader/hlsl: Add functions to the global list inside the func_prototype rule.
2023-02-07 22:15:06 +01:00
Zebediah Figura
4c46075d86
vkd3d-shader/hlsl: Use the original hlsl_ir_function_decl struct rather than allocating a new one for each definition.
...
We need to make sure every invocation points to the same hlsl_ir_function_decl
and the same parameters.
This fixes some invalid memory accesses.
2023-02-07 22:15:06 +01:00
Zebediah Figura
25d49b518d
vkd3d-shader/hlsl: Put synthetic variables into a dummy scope.
...
Prevent them from being ever looked up.
Our naming scheme for synthetic variables already effectively prevents this, but
this is better for clarity. We also will need to be able to move some named
variables into a dummy scope to account for complexities around function
definition and declarations.
2023-02-07 22:15:06 +01:00
Zebediah Figura
8755a92196
vkd3d-shader/hlsl: Add a hlsl_cleanup_semantic() helper.
2023-02-07 22:15:06 +01:00
Zebediah Figura
cb2c89a589
vkd3d-shader/hlsl: Store function parameters in an array.
2023-02-07 22:15:06 +01:00
Zebediah Figura
721c7aa22c
tests: Add more tests for function definitions.
2023-02-07 22:15:06 +01:00
Zebediah Figura
898fc9e198
vkd3d: Fix checking for failure from SleepConditionVariableCS().
...
Fixes: 552926cfca
2023-02-07 22:15:06 +01:00
Matteo Bruni
2e074ebce7
vkd3d: Initialize image aspect for NULL SRVs.
2023-02-07 22:08:00 +01:00
Giovanni Mascellani
552926cfca
vkd3d: Do not allow synchronization primitives to fail.
...
In practice they never fail. If they fail, it means that there
is some underlying platform problem and there is little we can do
anyway. Under pthreads function prototypes allow returning failure,
but that's only used for "error checking" mutexes, which we
don't use.
On the other hand, error handling in vkd3d is rather inconsistent:
sometimes the errors are ignored, sometimes logged, sometimes
passed to the caller. It's hard to handle failures appropriately
if you can't even keep your state consistent, so I think it's
better to avoid trying, assume that synchronization primitives do
not fail and at least have consistent logging if something goes
wrong.
2023-02-02 20:51:27 +01:00
Zebediah Figura
a66fe31fe5
vkd3d: Do not write the point size for SPIR-V shaders.
...
We disable shaderTessellationAndGeometryPointSize.
2023-02-02 20:51:19 +01:00
Zebediah Figura
8fc8d34ea0
vkd3d-shader/spirv: Introduce an option to control whether point size is written.
2023-02-02 20:51:18 +01:00
Nikolay Sivov
06f300ec59
vkd3d-shader/hlsl: Support dot() for SM1.
2023-02-02 20:51:12 +01:00
Zebediah Figura
68c232cfab
tests: Test entry point semantics on function declarations.
2023-01-31 22:27:02 +01:00
Zebediah Figura
4954c36347
tests: Add more tests for early return from the entry point.
2023-01-31 22:27:02 +01:00
Zebediah Figura
7460d7adc2
tests: Add some tests for early return from user-defined functions.
2023-01-31 22:27:02 +01:00
Zebediah Figura
aa3badbd9d
vkd3d-shader/hlsl: Emit a hlsl_fixme() for HLSL_IR_CALL instructions.
...
Avoid outputting invalid shaders.
2023-01-31 22:27:00 +01:00
Philip Rebohle
f9e7cb6345
include: Fix incorrect UpdateTileMappings declaration.
...
Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de >
2023-01-26 21:52:39 +01:00
Nikolay Sivov
ec00782eae
vkd3d-shader/tests: Add some exp()/exp2() tests.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-01-26 21:52:29 +01:00
Nikolay Sivov
8bb023e5af
vkd3d-shader/hlsl: Support exp() intrinsic.
2023-01-26 21:52:28 +01:00
Nikolay Sivov
8ca2f65bc1
vkd3d-shader/hlsl: Support exp2() intrinsic.
2023-01-26 21:52:26 +01:00
Nikolay Sivov
fa971f32bc
vkd3d-shader/hlsl: Write 'exp' instructions for SM1.
2023-01-26 21:52:25 +01:00
Nikolay Sivov
335f741630
vkd3d-shader/hlsl: Add a helper to write per-component unary instructions.
2023-01-26 21:52:24 +01:00
Francisco Casas
f33ca836d7
vkd3d-shader/hlsl: Make single-component swizzles retrieve a scalar.
2023-01-26 21:52:18 +01:00
Francisco Casas
edf86b2248
tests: Add tests for assignments to self with swizzles.
2023-01-26 21:52:18 +01:00
Francisco Casas
9d7ef64dc0
tests: Test swizzles on scalar values.
2023-01-26 21:52:18 +01:00
Francisco Casas
524029a062
tests: Test using single-component swizzles as indexes.
...
Vectors cannot be used as array indexes, however, single-component
swizzles (such as vec.x) can be used.
This suggests that single-component swizzles should actually be
scalars and not vectors of dimx = 1.
It is worth noting that the use of single-component swizzles on scalars
should still be allowed.
2023-01-26 21:52:16 +01:00
Francisco Casas
dd2168754d
tests: Combine all the swizzle tests in a single file.
2023-01-26 21:52:16 +01:00
Giovanni Mascellani
d2f8a576a8
vkd3d-shader/hlsl: Avoid infinite loop and invalid derefs in copy-prop.
...
Co-authored-by: Francisco Casas <fcasas@codeweavers.com >
Co-authored-by: Zebediah Figura <zfigura@codeweavers.com >
Because copy_propagation_transform_object_load() replaces a deref
instead of an instruction, it is currently prone to two problems:
1- It can replace a deref with the same deref, returning true every
time and getting the compilation stuck in an endless loop of
copy-propagation iterations.
2- When performed multiple times in the same deref, the second time it
can replace the deref with a deref from a temp that is only valid in
another point of the program execution, resulting in an incorrect value.
This patch preempts this by avoiding replacing derefs when the new deref
doesn't point to a uniform variable. Because, uniform variables cannot
be written to.
2023-01-26 21:52:07 +01:00
Francisco Casas
17888f6493
tests: Test correct copy-prop object replacement.
2023-01-26 21:52:05 +01:00
Zebediah Figura
653cc02f4c
vkd3d-shader/hlsl: Write SM4 thread ID registers.
2023-01-25 22:47:46 +01:00
Zebediah Figura
809a43f06b
tests: Add a test for compute thread IDs.
2023-01-25 22:10:30 +01:00
Francisco Casas
404a2d6a3d
vkd3d-shader/hlsl: Reinterpret minimum precision types as their regular counterparts.
...
Reinterpret min16float, min10float, min16int, min12int, and min16uint
as their regular counterparts: float, float, int, int, uint,
respectively.
A proper implementation would require adding minimum precision
indicators to all the dxbc-tpf instructions that use these types.
Consider the output of fxc 10.1 with the following shader:
uniform int i;
float4 main() : sv_target
{
min16float4 a = {0, 1, 2, i};
min16int2 b = {4, i};
min10float3 c = {6.4, 7, i};
min12int d = 9.4;
min16uint4x2 e = {14.4, 15, 16, 17, 18, 19, 20, i};
return mul(e, b) + a + c.xyzx + d;
}
However, if the graphics driver doesn't have minimum precision support,
it ignores the minimum precision indicators and runs at 32-bit
precision, which is equivalent as working with regular types.
2023-01-25 22:10:23 +01:00
Francisco Casas
4ce6a17053
tests: Test minimum-precision numeric types.
2023-01-25 22:10:23 +01:00
Nikolay Sivov
3c23e1713c
vkd3d-shader/hlsl: Implement sqrt() for SM1.
2023-01-25 22:10:15 +01:00
Nikolay Sivov
b84b9349bf
vkd3d-shader/hlsl: Handle RSQ output for SM1.
2023-01-25 22:10:13 +01:00
Nikolay Sivov
3e6fccdbf9
vkd3d-shader/hlsl: Support frac() intrinsic.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=34242
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2023-01-25 22:10:05 +01:00
Conor McCarthy
3db509383b
vkd3d: Store a heap array index in each CBV/SRV/UAV descriptor.
...
A pointer to the containing descriptor heap can be derived from this
information.
PE build of vkd3d uses Windows critical sections for synchronisation,
and these slow down on the very high lock/unlock rate during multithreaded
descriptor copying in Shadow of the Tomb Raider. This patch speeds up the
demo by about 8%. By comparison, using SRW locks in the allocators and
locking them for read only where applicable is about 4% faster.
2023-01-25 22:10:01 +01:00
Conor McCarthy
d14f42be9d
vkd3d-shader/spirv: Pass a parser pointer to spirv_compiler_generate_spirv().
2023-01-24 18:11:16 +01:00
Conor McCarthy
2a5ae0a8c6
vkd3d-shader/sm4: Use the instruction array interface in compile_dxbc_tpf().
2023-01-24 18:11:14 +01:00
Conor McCarthy
2d3f05184f
vkd3d-shader/glsl: Use the instruction array interface in vkd3d_glsl_generator_generate().
2023-01-24 18:11:13 +01:00
Conor McCarthy
2559d622de
vkd3d-shader: Use the instruction array interface in scan_with_parser().
2023-01-24 18:11:12 +01:00
Conor McCarthy
e9a2642d6a
vkd3d-shader/trace: Use the instruction array interface in vkd3d_dxbc_binary_to_text().
2023-01-24 18:11:10 +01:00
Conor McCarthy
e8cb90608d
vkd3d-shader: Initialise the instruction array in vkd3d_shader_parser_init().
2023-01-24 18:11:10 +01:00
Conor McCarthy
a9aaa59df0
vkd3d-shader/sm4: Store parsed instructions in an array.
2023-01-24 18:11:08 +01:00
Conor McCarthy
007f894b94
vkd3d-shader/sm1: Store parsed instructions in an array.
2023-01-24 18:11:06 +01:00
Francisco Casas
6b82ba9488
vkd3d-shader/hlsl: Fold swizzle chains.
2023-01-24 18:10:53 +01:00
Zebediah Figura
b7d34e8307
vkd3d-shader/hlsl: Apply copy propagation to swizzled loads.
2023-01-24 18:10:50 +01:00
Francisco Casas
18adf0d726
vkd3d-shader/hlsl: Use aoffimmis when writing gather resource loads.
...
If the offset of a gather resource load can be represented as an
aoffimmi (vectori of ints from -8 to 7), use one.
This is of particular importance for 4.0 profiles, where this is the only
valid way of representing offsets for this operation.
2023-01-24 18:10:49 +01:00
Francisco Casas
c2a7a40d3a
vkd3d-shader/hlsl: Replace loads with constants in copy prop.
...
If a hlsl_ir_load loads a variable whose components are stored from different
instructions, copy propagation doesn't replace it.
But if all these instructions are constants (which currently is the case
for value constructors), the load could be replaced with a constant value.
Which is expected in some other instructions, e.g. texel_offsets when
using aoffimmi modifiers.
For instance, this shader:
```
sampler s;
Texture2D t;
float4 main() : sv_target
{
return t.Gather(s, float2(0.6, 0.6), int2(0, 0));
}
```
results in the following IR before applying the patch:
```
float | 6.00000024e-01
float | 6.00000024e-01
uint | 0
| = (<constructor-2>[@4].x @2)
uint | 1
| = (<constructor-2>[@6].x @3)
float2 | <constructor-2>
int | 0
int | 0
uint | 0
| = (<constructor-5>[@11].x @9)
uint | 1
| = (<constructor-5>[@13].x @10)
int2 | <constructor-5>
float4 | gather_red(resource = t, sampler = s, coords = @8, offset = @15)
| return
| = (<output-sv_target0> @16)
```
and this IR afterwards:
```
float2 | {6.00000024e-01 6.00000024e-01 }
int2 | {0 0 }
float4 | gather_red(resource = t, sampler = s, coords = @2, offset = @3)
| return
| = (<output-sv_target0> @4)
```
2023-01-24 18:10:45 +01:00
Zebediah Figura
8c2b8ff245
vkd3d-shader/hlsl: Synthesize the swizzle and replace the instruction inside of copy_propagation_compute_replacement().
...
Rename it to copy_propagation_replace_with_single_instr() accordingly.
The idea is to introduce a constant vector replacement pass which will do the
same thing.
2023-01-24 18:10:41 +01:00
Zebediah Figura
5d34790402
vkd3d-shader/hlsl: Call copy_propagation_get_value() directly in copy_propagation_transform_object_load().
...
copy_propagation_compute_replacement() is not doing very much for us, and
conceptually is a bit of an odd fit anyway, since it's meant to deal with
multi-component types.
2023-01-24 18:10:40 +01:00
Zebediah Figura
8fd30aa87d
vkd3d-shader/hlsl: Add some swizzle manipulation definitions.
2023-01-24 18:10:39 +01:00
Francisco Casas
337b4c5db0
tests: Test constant propagation through swizzles.
...
The Load() method offsets are used for these tests since these must
solve to constants in order to pass.
2023-01-24 18:10:38 +01:00
Francisco Casas
cf17882189
vkd3d-shader/hlsl: Support offset argument for the texture Load() method.
2023-01-24 18:10:36 +01:00
Francisco Casas
7a7b17d0e1
tests: Test offset argument for the texture Load() method.
2023-01-24 18:10:36 +01:00
Giovanni Mascellani
1717dc0516
tests: Print DLL versions when running tests on Windows.
2023-01-24 18:10:22 +01:00
Giovanni Mascellani
2445743002
tests: Run d3d9 and d3d12 tests on non-cross builds too.
...
On cross builds, shaders are compiled with d3dcompiler_47.dll and
run with d3dN.dll. On non-cross builds, shaders are compiled with
vkd3d-shader and run with d3dN.dll (on Windows) or Vulkan and vkd3d
(on Linux).
2023-01-24 18:10:17 +01:00
Giovanni Mascellani
44d9e2d728
tests: Distinguish between cross and non-cross Win32 builds.
...
Now the tests compile correctly on non-cross Win32 builds.
2023-01-24 18:10:15 +01:00
Zebediah Figura
9c817e5e6d
vkd3d-shader/hlsl: Forbid recursive calls.
2023-01-19 19:16:27 +01:00
Zebediah Figura
503be4243c
tests/shader_runner: Explicitly track the expected shader compilation HRESULT instead of using a boolean flag.
2023-01-19 19:16:26 +01:00
Zebediah Figura
521f22e57a
vkd3d-shader/hlsl: Store a non-constant hlsl_ir_function_decl pointer in struct hlsl_ir_call.
2023-01-19 19:16:25 +01:00
Zebediah Figura
447463e590
vkd3d-shader/hlsl: Remove the unused "intrinsic" argument from hlsl_add_function().
2023-01-19 19:16:24 +01:00
Zebediah Figura
6c2472ce16
vkd3d-shader/hlsl: Remove some unnecessary YYABORTs from the func_prototype_no_attrs rule.
2023-01-19 19:16:22 +01:00
Francisco Casas
13c8e8b856
vkd3d-shader/hlsl: Parse step() intrinsic.
2023-01-19 19:16:17 +01:00
Francisco Casas
4e1a4a76d9
tests: Test step() intrinsic.
2023-01-19 19:16:17 +01:00
Francisco Casas
6fbf2b3e75
vkd3d-shader/hlsl: Parse sqrt() intrinsic.
2023-01-19 19:16:16 +01:00
Francisco Casas
7dbc879e2d
tests: Test sqrt() intrinsic.
2023-01-19 19:16:16 +01:00
Francisco Casas
8d5f16d803
vkd3d-shader/hlsl: Support cos() intrinsic.
2023-01-19 19:16:15 +01:00
Francisco Casas
3239ea5ff1
vkd3d-shader/hlsl: Support sin() intrinsic.
2023-01-19 19:16:14 +01:00
Francisco Casas
b65c450101
vkd3d-shader/hlsl: Add additional tests for sin() and cos().
2023-01-19 19:16:13 +01:00
Francisco Casas
2b1ec0cfe5
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_scope.
2023-01-19 19:16:08 +01:00
Francisco Casas
eabd742f3e
vkd3d-shader/hlsl: Add field-level documentation to function structs.
2023-01-19 19:16:07 +01:00
Francisco Casas
c68d0ecfe0
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_buffer.
2023-01-19 19:16:06 +01:00
Francisco Casas
ba56833bb5
vkd3d-shader/hlsl: Add documentation to small hlsl.h structs.
2023-01-19 19:16:04 +01:00
Francisco Casas
06b52c0343
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_deref.
2023-01-19 19:15:59 +01:00
Francisco Casas
f33d433621
vkd3d-shader/hlsl: Add documentation to struct hlsl_reg.
2023-01-19 19:15:57 +01:00
Francisco Casas
aab9886021
vkd3d-shader/hlsl: Allow uninitialized static objects.
...
validate_static_object_references() validates that uninitialized static
objects are not referenced in the shader.
In case a static variable contains both numeric and object types, the
"Static variables cannot have both numeric and resource components."
error should preempt uninitialized numeric values to reach further
compilation steps.
2023-01-19 12:29:41 +01:00
Francisco Casas
17d6a4411e
vkd3d-shader/hlsl: Validate that non-uniform objects are not referenced.
...
Note that in the future we should call
validate_static_object_references() after DCE and pruning branches,
because shaders such as these compile (at least in more modern versions
of the native compiler):
Branch pruning:
```
static RWTexture2D<float> tex;
float4 main() : sv_target
{
if (0)
{
tex[int2(0, 0)] = 2;
}
return 0;
}
```
DCE:
```
static Texture2D tex;
uniform uint i;
float4 main() : sv_target
{
float4 unused = tex.Load(int3(0, 1, 2));
return 0;
}
```
These are "todo" tests in hlsl-static-initializer.shader_test
that depend on this.
2023-01-19 12:29:39 +01:00
Francisco Casas
97c9669544
tests: Add additional object references tests.
2023-01-19 12:29:39 +01:00
Giovanni Mascellani
207643b8e8
tests: Test proper initialization of static structs to zero.
2023-01-19 12:29:39 +01:00
Francisco Casas
5cfc8d378f
vkd3d-shader/hlsl: Initialize static variables to 0 by default.
...
We are currently not initializing static values to zero by default.
Consider the following shader:
```hlsl
static float4 va;
float4 main() : sv_target
{
return va;
}
```
we get the following output:
```
ps_5_0
dcl_output o0.xyzw
dcl_temps 2
mov r0.xyzw, r1.xyzw
mov o0.xyzw, r0.xyzw
ret
```
where r1.xyzw is not initialized.
This patch solves this by assigning the static variable the value of an
uint 0, and thus, relying on complex broadcasts.
This seems to be the behaviour of the 9.29.952.3111 version of the native
compiler, since it retrieves the following error on a shader that lacks
an initializer on a data type with object components:
```
error X3017: cannot convert from 'uint' to 'struct <unnamed>'
```
2023-01-19 12:29:36 +01:00
Zebediah Figura
61f0d6d151
vkd3d-shader/hlsl: Get rid of the "intrinsic" field of struct hlsl_ir_function.
...
We have a different system of generating intrinsics, which makes it easier to
deal with "polymorphic" arithmetic functions.
Defining and storing intrinsics as hlsl_ir_function_decls would also require
more space in memory (and more optimization passes to get rid of the parameter
variables), and doesn't really save us any effort in terms of source code.
2023-01-13 17:32:44 +01:00
Zebediah Figura
9cc7aaf5a1
vkd3d-shader/hlsl: Forbid returning void expressions from void functions.
2023-01-13 17:32:43 +01:00
Zebediah Figura
b29d3489de
vkd3d-shader/hlsl: Generate IR for user-defined function calls.
2023-01-13 17:32:42 +01:00
Zebediah Figura
30550c0831
vkd3d-shader/hlsl: Avoid assuming that expressions have at least one argument.
2023-01-13 17:32:40 +01:00
Zebediah Figura
22a1a478ea
tests: Test specifying a UAV address as an in/out parameter to a function.
2023-01-13 17:32:39 +01:00
Francisco Casas
3fbe272659
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_src.
2023-01-11 16:03:55 +01:00
Francisco Casas
04108c0e21
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_ir_node.
2023-01-11 16:03:54 +01:00
Francisco Casas
9157a5e73f
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_ctx.
2023-01-11 16:03:52 +01:00
Francisco Casas
8ff3698699
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_ir_var.
2023-01-11 16:03:51 +01:00
Francisco Casas
0a2732428c
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_struct_field.
2023-01-11 16:03:49 +01:00
Francisco Casas
3a53da7f5b
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_type.
2023-01-11 16:03:48 +01:00
Francisco Casas
cc811dc3c2
vkd3d-shader/hlsl: Rename hlsl_struct_field.modifiers to "storage_modifiers".
2023-01-11 16:03:47 +01:00
Francisco Casas
4dbbb8beb4
vkd3d-shader/hlsl: Rename hlsl_ir_var.modifiers to "storage_modifiers".
2023-01-11 16:03:45 +01:00
Francisco Casas
23bd2d9ad8
vkd3d-shader/hlsl: Rename HLSL_STORAGE_VOLATILE to HLSL_MODIFIER_VOLATILE.
2023-01-11 16:03:43 +01:00
Fabian Maurer
9519fcb562
vkd3d-shader/hlsl: Fix typo (Coverity).
...
I assume this is a typo, right now it doesn't make sense.
Signed-off-by: Fabian Maurer <dark.shadow4@web.de >
2023-01-11 16:03:16 +01:00
Francisco Casas
5b1030e0cb
vkd3d-shader/hlsl: Use add_unary_arithmetic_expr() in intrinsic_pow().
...
Using add_unary_arithmetic_expr() instead of hlsl_new_unary_expr()
allows the intrinsic to work with matrices.
Otherwise we get:
E5017: Aborting due to not yet implemented feature: Copying from unsupported node type.
because an HLSL_IR_EXPR reaches split_matrix_copies().
2023-01-11 16:02:59 +01:00
Francisco Casas
6770ecbdf4
vkd3d-shader/hlsl: Introduce elementwise_intrinsic_float_convert_args().
2023-01-11 16:02:57 +01:00
Francisco Casas
9ceed76a9c
vkd3d-shader/hlsl: Convert elementwise intrinsics args to the proper common type.
2023-01-11 16:02:56 +01:00
Francisco Casas
86c35fc79d
tests: Test for common type conversion for element-wise intrinsics.
...
Some intrinsics have different rules for the allowed data types than
expressions:
- Vectors and matrices at the same time are not allowed, regardless of
their dimensions. Even if they have the same number of components.
- Any combination of matrices is always allowed, even those when no
matrix fits inside another, e.g.:
float2x3 is compatible with float3x2, resulting in float 2x2.
The common data type is the min on each dimension.
This is the case for max, pow, ldexp, clamp and smoothstep; which suggest that
it is the case for all intrinsics where the operation is applied element-wise.
Tests for mul() are also added as a counter-example where the operation
is not element-wise.
2023-01-11 16:02:53 +01:00
Francisco Casas
a7bb5a0835
vkd3d-shader/hlsl: Support smoothstep() intrinsic.
2023-01-11 16:02:52 +01:00
Francisco Casas
09e7218539
vkd3d-shader/hlsl: Support transpose() intrinsic.
2023-01-11 16:02:50 +01:00
Henri Verbeet
1eaf73147c
Release 1.6.
2022-12-07 16:08:16 +01:00
Henri Verbeet
d5f810068b
build: Add the demo shaders to the distribution.
2022-12-07 16:08:16 +01:00
Henri Verbeet
21302c09eb
build: Remove $(vkd3d_demos_shaders) from the distribution.
...
These were removed in commits 3d85d77ced
and 763f7dfa61
.
2022-12-07 16:08:11 +01:00
Conor McCarthy
1b11b57652
vkd3d-shader: Introduce DESCRIPTOR_INFO_FLAG_UAV_ATOMICS and always declare UAV images with known type for atomic ops.
...
Atomic ops on images with Unknown type will cause SPIR-V validation failure,
and assertion failure in Mesa debug builds. D3D12 allows atomics on typed
buffers, and this requires a distinction to be made between UAV reads and
atomic ops.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53874
2022-11-21 18:28:54 +01:00
Conor McCarthy
fc652d2b27
tests: Test a typed UAV buffer in test_atomic_instructions().
...
Until vkd3d-shader is patched, an atomic op on a typed buffer where
StorageImageReadWithoutFormat is available will cause SPIR-V validation
failure, and assertion in Mesa debug builds, because the image will be
declared with Unknown format.
2022-11-21 18:28:42 +01:00
Francisco Casas
43631bde4d
vkd3d-shader/hlsl: Revert expr_compatible_data_types() args names to "t1" and "t2".
...
Unlike compatible_data_types() and implicit_compatible_data_types(),
this function is intended to be symmetrical. So it makes sense to
preserve the names "t1" and "t2" for the arguments.
2022-11-18 22:29:07 +01:00
Francisco Casas
bd501ce336
vkd3d-shader/hlsl: Don't produce a parse error on empty buffer_body.
2022-11-18 22:29:06 +01:00
Francisco Casas
f100f5b726
vkd3d-shader/hlsl: Check for non-static object references on resource stores.
2022-11-18 22:29:04 +01:00
Francisco Casas
dd1008867e
tests: Add missing entry for max.shader_test in Makefile.am.
2022-11-18 22:29:02 +01:00
Francisco Casas
f21693b284
vkd3d-shader/hlsl: Use reg_size as component count when allocating a single register.
...
Otherwise, for instance, the added test results in:
debug_hlsl_writemask: Assertion `!(writemask & ~VKD3DSP_WRITEMASK_ALL)' failed.
Which happens in allocate_variable_temp_register() when the variable's
type reg_size is <= 4 but its component count is larger, which may
happen if it contains objects.
2022-11-10 22:48:26 +01:00
Francisco Casas
90e6e418a3
vkd3d-shader/hlsl: Use the base type of the array elements in write_sm1_type().
2022-11-10 22:48:23 +01:00
Francisco Casas
6873b71304
vkd3d-shader/hlsl: Validate that statics don't contain both resources and numerics.
2022-11-10 22:48:21 +01:00
Francisco Casas
2fa913ccaa
vkd3d-shader/hlsl: Validate that extern structs don't contain objects SM < 5.
...
It is worth noting that these checks should also be included for
declarations inside cbuffers, once they are implemented.
2022-11-10 22:48:19 +01:00
Francisco Casas
3153ce3145
vkd3d-shader/hlsl: Don't allocate object types as constant registers.
2022-11-10 22:48:16 +01:00
Francisco Casas
6f6ba8aa56
vkd3d-shader/hlsl: Properly free new store node memory if init_deref() fails.
2022-11-10 22:48:11 +01:00
Zebediah Figura
3857ca06fa
vkd3d-shader/hlsl: Write SM4 dcl_thread_group instructions.
2022-11-08 20:53:08 +01:00
Zebediah Figura
718c79b823
vkd3d-shader/hlsl: Parse the numthreads attribute.
2022-11-08 20:53:04 +01:00
Zebediah Figura
d6799bd5d3
vkd3d-shader/hlsl: Parse function attributes.
2022-11-08 20:53:03 +01:00
Zebediah Figura
da56f41ceb
vkd3d-shader/hlsl: Use hlsl_new_synthetic_var() in hlsl_new_func_decl().
2022-11-08 20:53:01 +01:00
Zebediah Figura
1019bbead6
vkd3d-shader/hlsl: Add a hlsl_fixme() for compute shader thread counts.
...
In particular so that we don't cause test crashes by outputting invalid compute
shaders.
2022-11-08 20:52:59 +01:00
Zebediah Figura
c0782a9029
tests: Add some tests for HLSL attribute syntax.
2022-11-08 20:52:59 +01:00
Zebediah Figura
4d17758657
tests: Always compile HLSL shaders.
...
Do not rely on a draw or dispatch command to do this.
This allows more efficiently testing syntax, in cases where testing the actual
shader functionality is not interesting.
2022-11-08 20:52:57 +01:00
Zebediah Figura
520c7457a9
vkd3d-shader/sm4: Use a flat array to store destination types.
...
This cuts about 12 kB off of the 64-bit build.
2022-11-08 20:52:36 +01:00
Zebediah Figura
4173158c8b
vkd3d-shader/sm4: Use a flat array to store source types.
2022-11-08 20:52:34 +01:00
Zebediah Figura
e2aed38509
vkd3d-shader/spirv: Avoid using DXBC-specific definitions.
2022-11-08 20:52:32 +01:00
Zebediah Figura
ba08825ccd
vkd3d-shader/sm4: Use the VKD3D_DXBC_MAX_SOURCE_COUNT macro where possible.
2022-11-08 20:52:31 +01:00
Zebediah Figura
35b48a8b04
vkd3d-shader/spirv: Rename struct vkd3d_dxbc_compiler to struct spirv_compiler.
...
We would like to generate SPIR-V for input formats other than DXBC.
The "vkd3d_" prefix is dropped, partly to make names shorter, and partly to help
clarify what is an internal function.
I prefer avoiding the vkd3d_* prefix on all internal functions, for these
reasons. However, I'm open to restoring it.
2022-11-08 20:52:29 +01:00
Zebediah Figura
58c7c4b806
vkd3d-common: Always prefix debug output with "vkd3d".
...
Make it clear which library the debug output is coming from, without relying on
the function name including "vkd3d".
2022-11-08 20:52:27 +01:00
Zebediah Figura
c416627e64
vkd3d-shader/hlsl: Propagate copies for resource store instructions.
2022-10-31 22:07:47 +01:00
Zebediah Figura
9bdae4dfaa
vkd3d-shader/hlsl: Write SM4 UAV store instructions.
2022-10-31 22:07:45 +01:00
Zebediah Figura
03f9d16047
vkd3d-shader/hlsl: Parse UAV stores.
2022-10-31 22:07:44 +01:00
Zebediah Figura
0a2aaa690e
vkd3d-shader/hlsl: Implement typed UAV loads.
2022-10-31 22:07:43 +01:00
Zebediah Figura
12e397de9a
vkd3d-shader/hlsl: Write SM4 UAV declarations.
2022-10-31 22:07:41 +01:00
Zebediah Figura
2ec67e0f10
vkd3d-shader/hlsl: Allocate UAVs.
2022-10-31 22:07:40 +01:00
Francisco Casas
4096d453c4
tests: Add a test for storing to a UAV array.
2022-10-31 22:07:40 +01:00
Zebediah Figura
8044fce040
tests: Add more tests for UAV allocation.
2022-10-31 22:07:40 +01:00
Zebediah Figura
52069386c4
tests: Fix constructor declaration in the partial UAV write test.
...
Make sure the test fails for the right reason. Spotted by Francisco Casas.
2022-10-31 22:07:37 +01:00
Francisco Casas
b711b2d66b
tests: Add additional tests for explicit casts with flat matrices and vectors.
2022-10-26 23:53:12 +02:00
Francisco Casas
fcef269347
tests: Add additional tests for explicit casts with matrices.
2022-10-26 23:53:12 +02:00
Francisco Casas
588645a79a
tests: Add additional tests for explicit casts with vectors.
2022-10-26 23:53:10 +02:00
Francisco Casas
5af7316a12
vkd3d-shader/hlsl: Support explicit cast between component-wise compatible types.
2022-10-25 21:25:58 +02:00
Francisco Casas
d21fd584b1
vkd3d-shader/hlsl: Support implicit casts between component-wise equal types.
2022-10-25 21:25:57 +02:00
Francisco Casas
1c77811648
vkd3d-shader/hlsl: Remove incorrect criteria for accepting implicit casts.
2022-10-25 21:25:55 +02:00
Francisco Casas
d93ce28995
vkd3d-shader/hlsl: Handle complex types in add_cast().
...
This extends the support of this function, whether doing broadcasts or
component-wise casts, to struct and array types.
2022-10-25 21:25:51 +02:00
Francisco Casas
fb751b48c5
tests: Add additional tests for implicit casts that should fail.
2022-10-25 21:25:51 +02:00
Francisco Casas
0a345a2b73
vkd3d-shader/hlsl: Rename "t1" and "t2" arguments as "src" and "dst".
2022-10-25 21:25:49 +02:00
Brendan Shanks
963ea98a52
vkd3d-common: Add a Windows implementation of vkd3d_set_thread_name().
2022-10-25 21:25:38 +02:00
Zebediah Figura
0ef04659c7
vkd3d-shader/hlsl: Parse UAV types.
2022-10-19 21:59:55 +02:00
Zebediah Figura
fea50d243c
vkd3d-shader/hlsl: Parse texture index expressions.
2022-10-19 21:59:55 +02:00
Zebediah Figura
7115a94063
vkd3d-shader/hlsl: Cast array indices inside of add_array_load().
...
Mostly in the interest of keeping the yacc code as simple as possible.
2022-10-19 21:59:55 +02:00
Zebediah Figura
62fd13059b
tests: Add a basic shader test for typed UAV loads.
2022-10-19 21:59:55 +02:00
Zebediah Figura
75494a4ae6
tests: Add a basic shader test for compute shaders.
2022-10-19 21:59:29 +02:00
Biswapriyo Nath
6f1f14d97a
include: Add the PFN_D3D12_SERIALIZE_ROOT_SIGNATURE typedef.
2022-10-19 21:59:22 +02:00
Biswapriyo Nath
c9198735fd
include: Add the PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER typedef.
2022-10-19 21:59:22 +02:00
Giovanni Mascellani
c644244bcd
tests: Test float operations with uniform inputs.
...
The point of the "uniform" variants is to avoid hiding code generation
bugs because of the constant folding optimization.
2022-10-19 21:59:18 +02:00
Giovanni Mascellani
b6a6a927a7
tests: Test sign rules for float modulus.
2022-10-19 21:59:18 +02:00
Giovanni Mascellani
d1da5436f4
tests: Test sign rules for integer division and modulus.
2022-10-19 21:59:18 +02:00
Giovanni Mascellani
0a07ac6f88
vkd3d-shader/hlsl: Lower float modulus.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-10-19 21:59:17 +02:00
Giovanni Mascellani
eb119878f7
vkd3d-shader/hlsl: Lower int modulus.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-10-19 21:59:15 +02:00
Giovanni Mascellani
85856473f6
vkd3d-shader/hlsl: Write SM4 fractional part instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-10-19 21:59:13 +02:00
Francisco Casas
09d7442cb1
tests: Test explicit casts between types that are component-wise compatible.
2022-10-17 17:59:04 +02:00
Francisco Casas
653b109d8f
tests: Test implicit casts between types that are equal component-wise.
2022-10-17 17:59:01 +02:00
Francisco Casas
5a1b0dbf44
vkd3d-shader/hlsl: Always go through implicit conversion in assignments.
...
Otherwise we silently skip some type checks.
2022-10-17 17:58:56 +02:00
Francisco Casas
e56db9bda5
tests: Test for invalid complex broadcasts.
2022-10-17 17:58:56 +02:00
Francisco Casas
791f8a8faa
tests: Rename structs for readability in broadcast test.
2022-10-17 17:58:53 +02:00
Francisco Casas
3bae0c92c7
tests: Set ULPs to 2 in normalize() test.
...
Otherwise the test fails on a NVIDIA GeForce GTX 1050 Ti GPU.
The error being:
shader_runner:535:Section [test], line 9: Test failed: Got {2.72165507e-01, 4.08248246e-01, 5.44331014e-01, 6.80413783e-01}, expected {2.72165537e-01, 4.08248305e-01, 5.44331074e-01, 6.80413842e-01} at (0, 0).
2022-10-17 17:58:50 +02:00
Francisco Casas
ab8f418207
tests: Add missing backslash to restore skipped tests.
...
Tests after this missing backslash are not being executed since
e9829fdc65
.
2022-10-17 17:58:35 +02:00
Giovanni Mascellani
eb7b594002
vkd3d-shader/hlsl: Lower int division.
2022-10-17 17:58:17 +02:00
Giovanni Mascellani
4c13ae5764
vkd3d-shader/hlsl: Lower int absolute value.
2022-10-17 17:58:14 +02:00
Giovanni Mascellani
ef4990d996
tests: Test int absolute value.
2022-10-17 17:58:14 +02:00
Giovanni Mascellani
5442f4236c
vkd3d-shader/hlsl: Write SM4 square root instructions.
2022-10-17 17:58:12 +02:00
Giovanni Mascellani
8e5aefb309
vkd3d-shader/hlsl: Parse length() intrinsic.
2022-10-17 17:58:09 +02:00
Giovanni Mascellani
a43242a3e6
tests: Test length() intrinsic.
2022-10-17 17:58:09 +02:00
Zebediah Figura
303ce66cef
include: Use __MINGW_PRINTF_FORMAT when compiling with MinGW.
...
The default for MinGW is always ms_printf rather than gnu_printf, but if we are
using ucrtbase or ANSI stdio, we want gnu_printf.
2022-10-17 17:57:56 +02:00
Zebediah Figura
6b45f290f7
vkd3d-shader/hlsl: Pass a location pointer to init_node().
...
Instead of a flat location structure.
2022-10-12 21:58:03 +02:00
Zebediah Figura
20fc4375ad
vkd3d-shader/hlsl: Introduce a hlsl_new_expr() helper.
2022-10-12 21:58:01 +02:00
Zebediah Figura
1e10b5e616
vkd3d-shader/hlsl: Write SM4 reinterpret instructions.
2022-10-12 21:57:59 +02:00
Zebediah Figura
2d4d2e1244
vkd3d-shader/hlsl: Parse the asuint() intrinsic.
2022-10-12 21:57:57 +02:00
Zebediah Figura
eb70f1aeb5
tests: Add a test for asuint().
2022-10-12 21:57:55 +02:00
Giovanni Mascellani
3d85d77ced
demos/gears: Recompile shaders with our compiler.
2022-10-10 21:13:50 +02:00
Giovanni Mascellani
763f7dfa61
demos/triangle: Recompile shaders with our compiler.
2022-10-10 21:13:06 +02:00
Giovanni Mascellani
1655d309bd
vkd3d-shader/hlsl: Write SM4 rsq instructions.
2022-10-10 21:13:04 +02:00
Giovanni Mascellani
d600f0488e
vkd3d-shader/hlsl: Parse normalize intrinsic.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-10-10 21:13:03 +02:00
Giovanni Mascellani
4ab1a4cef5
tests: Test normalize() intrinsic.
2022-10-10 21:13:01 +02:00
Giovanni Mascellani
73cf9dee8a
include: Add missing vkd3d_shader_compile() transformations and chained structures.
2022-09-28 19:11:13 +02:00
Zebediah Figura
b74a546034
vkd3d-shader/hlsl: Use hlsl_new_constant() in more places.
2022-09-28 19:11:08 +02:00
Zebediah Figura
f8da100052
vkd3d-shader/hlsl: Use hlsl_new_int_constant() in the "primary_expr" rule.
2022-09-28 19:11:05 +02:00
Zebediah Figura
3fc2fdc37f
vkd3d-shader/hlsl: Introduce a hlsl_new_bool_constant() helper.
2022-09-28 19:11:02 +02:00
Zebediah Figura
4c5fd9c7b9
vkd3d-shader/hlsl: Introduce a hlsl_new_float_constant() helper.
2022-09-28 19:10:58 +02:00
Zebediah Figura
15a0b44ada
vkd3d-shader/hlsl: Pass the arguments to hlsl_new_resource_load() as an indirect structure.
...
The function has far too many arguments, including multiple different arguments
with the same type. Use a structure for clarity and to avoid errors.
Merge hlsl_new_sample_lod() into hlsl_new_resource_load() accordingly.
2022-09-27 20:14:54 +02:00
Zebediah Figura
fb724d60e3
vkd3d-shader/hlsl: Make the source parameter to hlsl_copy_deref() const.
2022-09-27 20:14:53 +02:00
Zebediah Figura
e3123f5bd0
vkd3d-shader/hlsl: Pass only a template string to hlsl_new_synthetic_var().
...
Synthesize the internal name from the template inside of this function.
2022-09-27 20:14:51 +02:00
Zebediah Figura
991cddd139
vkd3d-shader/hlsl: Handle failure from hlsl_copy_deref().
2022-09-27 20:14:49 +02:00
Zebediah Figura
32999fc12b
vkd3d-common: Tweak the WARN for VKD3D_ERROR_INVALID_SHADER.
...
vkd3d-shader does not consume only bytecode anymore.
2022-09-27 20:14:42 +02:00
Zebediah Figura
27a6963d6a
vkd3d: Avoid an unused variable warning when building for Win32.
2022-09-27 20:14:35 +02:00
Giovanni Mascellani
d5fd309ef8
vkd3d: Add a macro to mark unreachable code.
...
This should silence warnings about some branches non returning any value
without requiring additional "return 0" statement or similar.
Also, in theory this might enable to compiler to optimize the program
a little bit more, though that's unlikely to have any measurable effect.
2022-09-27 20:14:27 +02:00
Henri Verbeet
56b2f56b86
Release 1.5.
2022-09-21 16:47:49 +02:00
Henri Verbeet
d484a08d10
vkd3d-shader: Add version information to enum vkd3d_shader_compile_option_typed_uav.
2022-09-21 16:47:49 +02:00
Henri Verbeet
6381bc4857
vkd3d-shader: Add a VKD3D_FORCE_32_BIT_ENUM element to enum vkd3d_shader_api_version.
2022-09-21 16:47:49 +02:00
Henri Verbeet
1e559cd51d
vkd3d: Add a VKD3D_FORCE_32_BIT_ENUM element to enum vkd3d_api_version.
2022-09-21 16:47:47 +02:00
Zebediah Figura
b7c94b0213
tests: Check for failure from init_test_context() in the d3d11 runner.
2022-09-19 21:51:30 +02:00
Zebediah Figura
53d6966a5d
tests: Mark test_hull_shader_relative_addressing() as broken on radv.
...
Broken for me with "AMD Radeon RX 560 Series (RADV POLARIS11)" (1002:67ef) but works with llvmpipe; Mesa 22.2.0-rc3.
2022-09-19 21:51:30 +02:00
Zebediah Figura
7393e6ed13
tests: Transition back to D3D12_RESOURCE_STATE_RENDER_TARGET in test_bufinfo_instruction().
2022-09-19 20:13:57 +02:00
Francisco Casas
8e07423ba1
vkd3d-shader/hlsl: Add offset parameter to 'Load' method.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
609632279f
vkd3d-shader/hlsl: Properly check argument count in gather methods.
2022-08-23 15:57:54 -05:00
Francisco Casas
32e6f594f2
vkd3d-shader/hlsl: Properly check argument count in SampleLevel method.
...
Also, TextureCube and TextureCubeArray don't support the offset
argument, so this check is updated here too.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
15b19b15c0
vkd3d-shader/hlsl: Use proper dimensions on SampleLevel method offset parameter.
2022-08-23 15:57:54 -05:00
Francisco Casas
c4be4a4ebf
vkd3d-shader/hlsl: Properly check argument count in Sample method.
...
Also, TextureCube and TextureCubeArray don't support the offset
argument, so this check is updated.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
562f647c2a
vkd3d-shader/hlsl: Use proper dimensions on gather methods offset parameter.
2022-08-23 15:57:54 -05:00
Francisco Casas
652906aea7
vkd3d-shader/hlsl: Use proper dimensions on Sample method offset parameter.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Zebediah Figura
d6f45b730f
vkd3d-shader/hlsl: Parse the SampleLevel method.
2022-08-23 15:57:54 -05:00
Francisco Casas
3d9baef321
vkd3d-shader/hlsl: Support initialization of implicit size arrays.
...
HLSL_ARRAY_ELEMENTS_COUNT_IMPLICIT (zero) is used as a temporal value
for elements_count for implicit size arrays.
This value is replaced by the correct one after parsing the initializer.
In case the implicit array is not initialized correctly, hlsl_error()
is called but the array size is kept at 0. So the rest of the code
must handle these cases.
In shader model 5.1, unlike in 5.0, declaring a multi-dimensional
object-type array with the last dimension implicit results in
an error. This happens even in presence of an initializer.
So, both gen_struct_fields() and declare_vars() first check if the
shader model is 5.1, the array elements are objects, and if there is
at least one implicit array size to handle the whole type as an
unbounded resource array.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
96a7236700
vkd3d-shader/hlsl: Set objects' register size back to 0.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
6989266e76
vkd3d-shader/hlsl: Check for non-static object references.
...
It is responsibility of the shader's programmer to ensure that
object references can be solved statically.
Resource arrays for ps_5_1 and vs_5_1 are an exception which is not
properly handled yet. They probably deserve a different object type.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
1bba18aa75
vkd3d-shader/hlsl: Invalidate components more precisely in copy propagation.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
b5b08bd8a0
vkd3d-shader/hlsl: Replace register offsets with index paths in copy propagation.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
10bd0c48f8
vkd3d-shader/hlsl: Print halfs in dump_ir_constant().
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
a8b77b85ca
vkd3d-shader/hlsl: Skip implicit conversion if types are equal.
...
Otherwise we get false in implicit_compatible_data_types() when passing
types that are equal but not convertible according to
convertible_data_type(); e.g. getting:
"Can't implicitly convert from Texture2D<float4> to Texture2D<float4>."
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
732f1737f4
vkd3d-shader/hlsl: Set component count for objects to 1.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
e9829fdc65
tests: Test object references.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
f3432966da
vkd3d-shader/hlsl: Emit a fixme on complex resource load object derefs.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Francisco Casas
f843a7babb
vkd3d-shader/hlsl: Rename 'inner_type' to 'element_type' in function name.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
2022-08-23 15:57:54 -05:00
Martin Storsjö
1c61b20616
vkd3d-shader/spirv: Fix the signature of vkd3d_spirv_build_op_type_image.
...
Don't assume that enums and uint32_t parameters are identical. Clang
16 changes the diagonstic for incompatible function pointer types
from a warning into an error by default.
This fixes the following error, when built (for aarch64, but probably
also for other architectures) in MSVC mode:
../src/libs/vkd3d/libs/vkd3d-shader/spirv.c:1083:13: error: incompatible function pointer types passing 'uint32_t (struct vkd3d_spirv_builder *, uint32_t, SpvDim, uint32_t, uint32_t, uint32_t, uint32_t, SpvImageFormat)' (aka 'unsigned int (struct vkd3d_spirv_builder *, unsigned int, enum SpvDim_, unsigned int, unsigned int, unsigned int, unsigned int, enum SpvImageFormat_)') to parameter of type 'vkd3d_spirv_build7_pfn' (aka 'unsigned int (*)(struct vkd3d_spirv_builder *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)') [-Wincompatible-function-pointer-types]
vkd3d_spirv_build_op_type_image);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/libs/vkd3d/libs/vkd3d-shader/spirv.c:612:68: note: passing argument to parameter 'build_pfn' here
SpvOp op, const uint32_t *operands, vkd3d_spirv_build7_pfn build_pfn)
^
Signed-off-by: Martin Storsjö <martin@martin.st >
2022-08-15 21:59:38 +02:00
Francisco Casas
577014c017
vkd3d-shader/hlsl: Replace register offsets with index paths in split copies.
...
hlsl_new_store() and hlsl_new_load() are deleted, so now there are no more
direct ways to create derefs with offsets in hlsl.c and hlsl.h.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:34:19 +02:00
Francisco Casas
d7d2fe145f
vkd3d-shader/hlsl: Replace register offsets with index paths in input/output copies.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:34:08 +02:00
Francisco Casas
1b69adbd13
vkd3d-shader/hlsl: Add input and output variables using the same function.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:34:05 +02:00
Francisco Casas
c572adbf2a
vkd3d-shader/hlsl: Move register offset functions to hlsl_codegen.c.
...
This can be done now, to ensure that register offsets are no longer used
in hlsl.c and hlsl.h.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:34:01 +02:00
Francisco Casas
349aab2a6a
vkd3d-shader/hlsl: Replace register offsets with index paths in resource loads initialization.
...
At this point, the parse code is free of offsets; it only uses index
paths.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:33:58 +02:00
Francisco Casas
5b664c7a5c
vkd3d-shader/hlsl: Introduce hlsl_new_store_index().
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:33:55 +02:00
Francisco Casas
f3289e1661
vkd3d-shader/hlsl: Introduce hlsl_new_store_component().
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:33:51 +02:00
Francisco Casas
7515b8255b
vkd3d-shader/hlsl: Print index paths in dump_deref().
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:33:46 +02:00
Francisco Casas
4fede46c9a
vkd3d-shader/hlsl: Replace register offsets with index paths in load initializations.
...
The transform_deref_paths_into_offsets pass turns these index paths back
into register offsets.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:33:37 +02:00
Zebediah Figura
a2996c2d59
include: Add list_move_after() and list_move_before().
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:33:33 +02:00
Francisco Casas
2dcfc888fb
vkd3d-shader/hlsl: Unify type minor/major size functions.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:33:29 +02:00
Francisco Casas
039b69ace9
vkd3d-shader/hlsl: Introduce add_load_index().
...
At this point add_load() is split into add_load_component() and
add_load_index(); register offsets are hidden for these functions.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:33:25 +02:00
Francisco Casas
a32157f586
vkd3d-shader/hlsl: Introduce add_load_component().
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
2022-08-10 21:33:19 +02:00
Giovanni Mascellani
4112c36076
vkd3d: Do not store the latch bit in an object that could be overwritten.
...
Once a event is signaled, the corresponding struct vkd3d_waiting_event
entry is considered dead and could be overwritten, so it's not safe to
keep a pointer to it in d3d12_fence_SetEventOnCompletion(). Instead,
keep the latch bit in d3d12_fence_SetEventOnCompletion() and put a
pointer to it in struct vkd3d_waiting_event.
2022-08-09 22:14:30 +02:00
Conor McCarthy
4afe69d04a
vkd3d: Send typed UAV unknown format read support info to vkd3d-shader.
...
Fixes reflections in Control appearing with only their red component.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52146
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
2022-08-09 22:14:28 +02:00
Conor McCarthy
971ab01add
vkd3d: Check specific formats for typed UAV load feature support.
...
Vulkan's shaderStorageImageExtendedFormats includes more formats than are
required by D3D12.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
2022-08-09 22:14:28 +02:00
Conor McCarthy
3dbd2ceca6
vkd3d-shader: Introduce a compile option to use Unknown format for typed UAV loads.
...
Specifying R32 for UAVs created with a vector format, e.g. R32G32B32A32_FLOAT,
results in only the red being loaded/stored, potentially causing images to
contain only the red component.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
2022-08-09 22:14:28 +02:00
Conor McCarthy
d7554accbc
tests: Test float4 UAV buffer load/store.
...
This currently fails if the shader loads from the UAV, because it causes
vkd3d-shader to specify the R32f format instead of Unknown.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
2022-08-09 22:14:08 +02:00
Giovanni Mascellani
5168929edc
vkd3d: Remove unused field fence_destruction_cond.
2022-08-08 18:55:22 +02:00
Giovanni Mascellani
5749ae4700
vkd3d: Unlock fence worker mutex before exiting.
...
Pthread mandates that a mutex must be unlocked before being destroyed.
In pratice I doubt this make a difference on any platform (certainly
it doesn't on Linux), but let's comply to standards.
2022-08-08 18:55:19 +02:00
Stefan Dösinger
aae4e31ba8
vkd3d-shader: Initialize counter_var_info unconditionally.
2022-07-25 21:09:30 +02:00
Conor McCarthy
3b579f6fe7
vkd3d: Delay unlocking the fence until after the blocked command queue op is written.
...
An unblocking Signal() on the CPU must be handled after the blocked op
is written, or the op will not be flushed until the next signal.
The device is locked while the fence is already locked, so the fence must
never be locked after locking the device. Currently this never occurs.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-20 22:28:53 +02:00
Conor McCarthy
c1071fda52
vkd3d: Delay adding a command queue to the blocked list until after the op is written.
...
Otherwise the following sequence can occur:
1. A command queue is added to the blocked list during a Wait() call.
2. An unblocking Signal() occurs on the CPU in another thread, flushing the
blocked ops, but as no op has been written, the queue is removed from the
blocked list.
3. The blocked op is written.
3. Another op is queued and the queue is not re-added to the blocked
list because this only happens for the first op.
World of Warcraft triggers this issue.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-20 22:28:49 +02:00
Francisco Casas
a7a4eb95e5
vkd3d-shader/hlsl: Introduce function to clean up hlsl_derefs.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-18 22:07:42 +02:00
Francisco Casas
b9435fb1ff
vkd3d-shader/hlsl: Pass field to add_record_load() via index.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-18 22:07:33 +02:00
Francisco Casas
300a6c8fc3
vkd3d-shader/hlsl: Handle errors in recursive calls in hlsl_type_clone().
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-18 22:07:30 +02:00
Zebediah Figura
e5905bbf0f
vkd3d-shader/hlsl: Store the struct fields as an array.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-18 22:07:26 +02:00
Giovanni Mascellani
2ec6d4d3ff
tests: Test arithmetic int operations without constant operands.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-05 22:43:30 +02:00
Giovanni Mascellani
448f856c09
vkd3d-shader/hlsl: Write SM4 logic or instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-05 22:43:28 +02:00
Giovanni Mascellani
15e4b9bafb
vkd3d-shader/hlsl: Write SM4 logic and instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-05 22:43:25 +02:00
Giovanni Mascellani
02d92c9af6
vkd3d-shader/hlsl: Write SM4 logic not instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-05 22:43:22 +02:00
Giovanni Mascellani
3e88a46d4c
vkd3d-shader/hlsl: Write SM4 casts from bool.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-07-05 22:43:18 +02:00
Giovanni Mascellani
98ebe9b69c
vkd3d-shader/hlsl: Fold constant integral bitwise or.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-28 22:20:27 +02:00
Giovanni Mascellani
06c22b6a65
vkd3d-shader/hlsl: Fold constant integral bitwise and.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-28 22:20:24 +02:00
Giovanni Mascellani
4016ddff77
vkd3d-shader/hlsl: Fold constant integral bitwise xor.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-28 22:20:22 +02:00
Giovanni Mascellani
4a692dca4e
vkd3d-shader/hlsl: Fold constant integral min().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-28 22:20:17 +02:00
Giovanni Mascellani
8cb865d65a
vkd3d-shader/hlsl: Fold constant integral max().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-28 22:20:11 +02:00
Zebediah Figura
0ddaa80616
vkd3d-shader/hlsl: Fold constant swizzles.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-28 22:20:08 +02:00
Giovanni Mascellani
7682da58a8
vkd3d-shader/hlsl: Parse lerp() intrinsic.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-27 21:23:33 +02:00
Zebediah Figura
bb32ffad18
vkd3d-shader/hlsl: Parse the ldexp() intrinsic.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-27 21:23:31 +02:00
Giovanni Mascellani
c7198bc964
vkd3d-shader/hlsl: Write SM4 dot product instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-27 21:23:28 +02:00
Giovanni Mascellani
58d017ccc1
vkd3d-shader/hlsl: Parse dot() intrinsic.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-27 21:23:26 +02:00
Giovanni Mascellani
80586bf7a9
tests: Test lerp() intrinsic.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-27 21:23:24 +02:00
Giovanni Mascellani
0462d81484
tests: Test ldexp() intrinsic.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-27 21:23:22 +02:00
Giovanni Mascellani
7b6e782139
tests: Test dot() intrinsic.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-27 21:23:19 +02:00
Henri Verbeet
9d4df5e704
Release 1.4.
...
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-22 18:31:51 +02:00
Henri Verbeet
2cad32d7fa
build: Add tests/vulkan_procs.h to the distribution.
...
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-22 17:28:38 +02:00
Henri Verbeet
780da51b65
build: Add the d3d9 and d3d11 shader runners to the distribution.
...
We don't want to add these to tests_shader_runner_SOURCES, because
they're only supposed to get built for the "crosstest" target.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-22 17:28:35 +02:00
Henri Verbeet
4093fe49bf
vkd3d-compiler: Default to VKD3D_SHADER_SOURCE_HLSL when the source size is smaller than a uint32_t.
...
For example, when the input is an empty file. Leaving the source type as
VKD3D_SHADER_SOURCE_NONE would cause (potential) subsequent
get_source_type_info() calls to return NULL, resulting in a segmentation
fault.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-22 17:28:33 +02:00
Biswapriyo Nath
a021b0a7d3
include: Add ID3D12Device3 declaration in vkd3d_d3d12.idl.
...
Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-21 20:16:35 +02:00
Biswapriyo Nath
f9921fc691
include: Add more D3D12_HEAP_FLAGS in vkd3d_d3d12.idl.
...
Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-21 20:16:30 +02:00
Biswapriyo Nath
b7fbac1c09
include: Add ID3D12Device2 declaration in vkd3d_d3d12.idl.
...
Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-10 11:59:57 +02:00
Biswapriyo Nath
694e5c865b
include: Add ID3D12SharingContract interface declarations in vkd3d_d3d12sdklayers.idl.
...
Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-10 11:59:52 +02:00
Biswapriyo Nath
abd82c9e6d
include: Add ID3D12DebugDevice interface declarations in vkd3d_d3d12sdklayers.idl.
...
Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-10 11:59:47 +02:00
Giovanni Mascellani
10917a7f47
vkd3d-shader/hlsl: Parse the mul() intrinsic.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-09 19:13:29 +02:00
Giovanni Mascellani
62fa53f9b6
vkd3d-shader/hlsl: Split matrix operations.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-09 19:13:27 +02:00
Giovanni Mascellani
3a755cb0e2
vkd3d-shader/hlsl: Lower matrix casts.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-09 19:13:22 +02:00
Giovanni Mascellani
41df40b4ed
tests: Test how matrix types interact with semantics.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-09 19:13:18 +02:00
Zebediah Figura
f821a1b29a
tests: Add a test for multiple render targets.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-09 19:13:12 +02:00
Zebediah Figura
08e2a8e9bb
tests: Add a basic shader test for UAVs.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-09 19:13:09 +02:00
Zebediah Figura
2b69ee67bd
tests/shader_runner: Make the render target into a resource.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-09 19:13:06 +02:00
Zebediah Figura
d2d29d1b88
tests/shader_runner: Create the render pass and framebuffer in vulkan_runner_draw().
...
Prepare to allow for dynamically changing the bound attachments in consecutive
draw calls.
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-09 19:13:03 +02:00
Zebediah Figura
ac404afe93
tests/shader_runner: Allow creating UAV resources.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-09 19:12:59 +02:00
Giovanni Mascellani
76bb1b7439
vkd3d-shader/hlsl: Have add_expr() return hlsl_ir_node*.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-08 18:51:38 +02:00
Giovanni Mascellani
e37ac63813
vkd3d-shader/hlsl: Introduce add_cast() helper.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-08 18:51:32 +02:00
Giovanni Mascellani
8cd4995958
vkd3d-shader/hlsl: Allocate enough space for temporary matrices.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-08 18:51:28 +02:00
Zebediah Figura
ea38ecc4ff
vkd3d-shader/hlsl: Split matrices into multiple variables in prepend_input_copy().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-08 18:51:03 +02:00
Zebediah Figura
d2d4bc24e9
vkd3d-shader/hlsl: Split matrices into multiple variables in append_output_copy().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-08 18:50:52 +02:00
Biswapriyo Nath
4647209f27
include: Add ID3D12Debug interface declarations in vkd3d_d3d12sdklayers.idl.
...
Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-08 18:50:40 +02:00
Zebediah Figura
14f77294b1
vkd3d-shader/spirv: Do not print a warning for VKD3D_SHADER_COMPILE_OPTION_API_VERSION.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-07 19:39:52 +02:00
Zebediah Figura
64b784dbb9
vkd3d-utils: Allow writing log output via a custom callback.
...
When using PE vkd3d through Wine, debug output may be swallowed by writing to
Win32 stderr. Avoid this by providing a way to hook up vkd3d log output to Wine
output.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-07 19:39:01 +02:00
Zebediah Figura
46b1266809
vkd3d: Allow writing log output via a custom callback.
...
When using PE vkd3d through Wine, debug output may be swallowed by writing to
Win32 stderr. Avoid this by providing a way to hook up vkd3d log output to Wine
output.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-07 19:38:57 +02:00
Zebediah Figura
174172887b
vkd3d-shader: Allow writing log output via a custom callback.
...
When using PE vkd3d through Wine, debug output may be swallowed by writing to
Win32 stderr. Avoid this by providing a way to hook up vkd3d log output to Wine
output.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-06-07 19:38:49 +02:00
Giovanni Mascellani
6ff6cb4ed2
tests/shader_runner: Allow probing a single component.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-31 21:53:26 +02:00
Zebediah Figura
4a9d675c49
tests/shader_runner: Move the check_readback_data_vec4() call to shader_runner.c.
...
Split the probe_vec4() directive into get_rt_readback() and release_readback().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-31 21:53:21 +02:00
Zebediah Figura
e6ea409bbf
tests: Move check_readback_data_vec4() to utils.h.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-31 21:53:16 +02:00
Zebediah Figura
1e8e0650c9
tests/shader_runner: Use the resource_readback structure in the Vulkan shader runner.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-31 21:53:11 +02:00
Zebediah Figura
ccdb702d53
tests/shader_runner: Use the common resource_readback structure in d3d9 and d3d11 readback structures.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-31 21:53:08 +02:00
Zebediah Figura
b5e773058c
tests: Separate generic and d3d12-specific readback fields.
...
Move the "resource" field to a new "d3d12_resource_readback" structure
encapsulating struct resource_readback.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-31 21:52:49 +02:00
Giovanni Mascellani
bb49bdba6a
vkd3d-shader/hlsl: Allow majority modifiers on function declarations.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-13 18:21:15 +02:00
Giovanni Mascellani
e39559690b
vkd3d-shader/hlsl: Offset register id for input/ouput variables.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-13 18:21:12 +02:00
Francisco Casas
1fc44e7be4
tests: Test textures in initializers.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-13 18:20:45 +02:00
Francisco Casas
719e1bad1d
tests: Add additional subtests to implicit array initialization.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-13 18:20:43 +02:00
Conor McCarthy
8cae046803
vkd3d: Map timeline semaphore values to fence virtual values and buffer out-of-order waits.
...
Strictly increasing timeline values must be mapped to fence virtual values
to avoid invalid use of Vulkan timeline semaphores. In particular, non-
increasing values and value jumps of >= 4G are permitted in d3d12.
Different virtual D3D12 command queues may map to the same Vulkan queue.
If a wait of value N is submitted on one command queue, and then a signal
for >= N is submitted on another, but they are sent to the same Vk queue,
the wait will never complete. The solution is to buffer out-of-order waits
and any subsequent queue commands until an unblocking signal value is
submitted to a different D3D12 queue, or signaled on the CPU.
Buffering out-of-order waits also fixes the old fence implementation so it
is fully functional, though a bit less efficient than timeline semaphores.
Based in part on vkd3d-proton patches by Hans-Kristian Arntzen. Unlike the
vkd3d-proton implementation, this patch does not use worker threads for
submissions to the Vulkan queue.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-13 18:20:10 +02:00
Conor McCarthy
a5c63dc4b9
vkd3d: Always destroy created objects on d3d12_fence_init() failure.
...
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-13 18:20:08 +02:00
Matteo Bruni
228f7ab5cd
vkd3d-shader/hlsl: Handle over/underflow when parsing integer literals.
...
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-12 19:33:56 +02:00
Andrey Gusev
a9dc39dd92
include: Add more D3D12_ROOT_SIGNATURE_FLAGS enums.
...
Signed-off-by: Andrey Gusev <andrey.goosev@gmail.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-12 19:33:01 +02:00
Giovanni Mascellani
e6ce077ad4
vkd3d-shader/hlsl: Handle loops in copy propagation.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-04 18:32:35 +02:00
Giovanni Mascellani
ec85eb538b
vkd3d-shader/hlsl: Remove the location parameter from initialize_var_components().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-04 18:32:26 +02:00
Giovanni Mascellani
9ad6ad7065
vkd3d-shader/hlsl: Use a more sensible source location in add_constructor().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-04 18:32:22 +02:00
Conor McCarthy
07e38212ec
vkd3d: Replace the signaled semaphore list with a resizable array.
...
Order does not need to be preserved here, and another function will add
to this array when mapped timeline semaphores are implemented.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-02 20:19:35 +02:00
Conor McCarthy
488722b9b5
vkd3d: Create one fence worker thread per command queue.
...
Simplifies the handling of GPU waits, and in vkd3d-proton is reported
to increase performance when support for multiple Vulkan queues is
enabled, because it avoids the problem of fences being signaled while
they sit in the pending buffer waiting to be moved to the wait buffer.
Based on a vkd3d-proton patch by Philip Rebohle.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-02 20:19:32 +02:00
Conor McCarthy
34e7b87966
vkd3d: Introduce an internal refcount to d3d12_fence to replace the thread waiting mechanism.
...
Simplifies the preservation of fence objects until worker threads are
done with them, and will be needed when threaded queue submission is
added.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-02 20:19:29 +02:00
Giovanni Mascellani
6167b3a4e2
vkd3d-shader/hlsl: Handle branches in copy propagation.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-02 11:30:21 +02:00
Giovanni Mascellani
38d7913f5f
vkd3d-shader/hlsl: Allow storing to matrices.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-02 11:30:18 +02:00
Francisco Casas
1240a947d2
tests: Test initialization of implicit size arrays.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-02 11:30:04 +02:00
Francisco Casas
4b4537b874
tests: Test complex broadcasts.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-02 11:30:00 +02:00
Francisco Casas
a58c0e7c9d
vkd3d-shader/hlsl: Detect missing loads on rhs when splitting copies of non-numeric types.
...
Otherwise we can get failed assertions:
assert(node->type == HLSL_IR_LOAD);
because broadcasts to these types are not implemented yet.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-05-02 11:29:54 +02:00
Zebediah Figura
f34db84c62
configure: Allow specifying the Vulkan library path with VULKAN_LIBS.
...
Do not define it for the vkd3d build, but restore support for overriding it as a
configure argument.
This partially reverts 99a3adcc19
.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52915
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-27 21:46:18 +02:00
Giovanni Mascellani
cf7cf05cb7
vkd3d-shader/hlsl: Parse matrix constructors.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-27 21:45:45 +02:00
Giovanni Mascellani
ff3ec5d4a5
vkd3d-shader/hlsl: Support matrix indexing.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-27 21:45:43 +02:00
Francisco Casas
246ff14511
vkd3d-shader/hlsl: Support all complex initalizers.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-27 21:45:41 +02:00
Giovanni Mascellani
e2b4f01a9f
vkd3d-shader/hlsl: Simplify flow in add_array_load().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-27 21:45:39 +02:00
Giovanni Mascellani
c5c50a8b9b
vkd3d-shader/hlsl: Do not generate useless swizzles.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-27 21:45:37 +02:00
Giovanni Mascellani
6b6ff48ece
vkd3d-shader/hlsl: Test the INT_MIN / -1 constant folding special case.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-27 21:45:35 +02:00
Giovanni Mascellani
4d181bc622
vkd3d-shader/hlsl: Do not allow NaNs in SM1.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-27 21:45:32 +02:00
Zebediah Figura
eb2c3b0b90
tests: Test depth comparison sampling with cubemap array textures.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-26 16:02:13 +02:00
Zebediah Figura
9839850b87
vkd3d-shader: Remove the workaround for sample_c.
...
The current workaround is broken for texture cube arrays, which already have 4
components.
Sampling with the components not packed together apparently succeeds with newer
NVidia drivers, so just remove the workaround. Tested with 470.103.01 on a GTX
1060.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52886
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-26 16:02:09 +02:00
Francisco Casas
535bbfa6f8
tests: Test matrix initialization.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:12:59 +02:00
Giovanni Mascellani
74273ccadd
vkd3d-shader/hlsl: Do not handle vector types in major_size() and minor_size().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:12:55 +02:00
Giovanni Mascellani
3bbb90a3cb
tests: Test matrix copying with a non-square matrix.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:12:49 +02:00
Giovanni Mascellani
d2ba10a696
vkd3d-shader/hlsl: Update split_copy()'s introductory comment.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:12:39 +02:00
Giovanni Mascellani
0e8098ccfe
vkd3d-shader/hlsl: Add trailing dots to warning messages.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:12:23 +02:00
Giovanni Mascellani
c680b674d6
vkd3d-shader/hlsl: Do not generate infinities in SM1.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:12:17 +02:00
Conor McCarthy
6b893b597b
vkd3d: Prevent a null pointer dereference when a descriptor is not a UAV.
...
Fixes crashes in Shadow of the Tomb Raider, GRID 2019 and probably others.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:12:04 +02:00
Zebediah Figura
cab16fe903
configure: Allow specifying the shared object name of the Vulkan library at configure time.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:11:55 +02:00
Zebediah Figura
99a3adcc19
configure: Remove the no longer used check for VULKAN_LIBS.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:11:47 +02:00
Zebediah Figura
f9c7b123d8
demos: Load libvulkan dynamically.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-25 22:11:43 +02:00
Giovanni Mascellani
e38ee49e99
vkd3d-shader/hlsl: Split matrix copies.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 23:02:14 +02:00
Giovanni Mascellani
d1fac2660c
vkd3d-shader/hlsl: Support vector indexing.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 23:02:11 +02:00
Zebediah Figura
aaa743033a
vkd3d-shader/hlsl: Return bool from add_record_load() and add_array_load().
...
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 23:02:00 +02:00
Zebediah Figura
367bd15ec5
tests: Simplify "probe" directive syntax and parsing a bit.
...
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 23:01:04 +02:00
Zebediah Figura
f187b48792
tests: Mark individual invalid shaders as todo.
...
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 23:00:57 +02:00
Zebediah Figura
0929ec7462
tests: Load libvulkan dynamically in d3d12_crosstest.h.
...
We would like to allow overriding the soname of libvulkan, in which case the
tests and demos should respect that override.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 16:41:46 +02:00
Zebediah Figura
beffe5f367
tests: Load libvulkan dynamically in shader_runner_vulkan.c.
...
We would like to allow overriding the soname of libvulkan, in which case the
tests and demos should respect that override.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 16:41:44 +02:00
Zebediah Figura
bcad6d6997
tests: Load libvulkan dynamically in vkd3d_api.c.
...
We would like to allow overriding the soname of libvulkan, in which case the
tests and demos should respect that override.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 16:41:42 +02:00
Zebediah Figura
d087b9ea5b
include: Implement vkd3d_dl*() wrappers for Win32 platforms.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 16:41:39 +02:00
Zebediah Figura
a58e713314
include: Move vkd3d_dl*() helpers to vkd3d_common.h.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-20 16:41:37 +02:00
Giovanni Mascellani
16da0b3300
tests: Add another vector indexing test.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:24 +02:00
Giovanni Mascellani
564883a201
tests: Test matrix indexing.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:22 +02:00
Giovanni Mascellani
2b23b7329c
vkd3d-shader/hlsl: Fold constant modulus.
...
This commit includes work by Francisco Casas.
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:20 +02:00
Giovanni Mascellani
40b299c727
vkd3d-shader/hlsl: Fold constant division.
...
This commit includes work by Francisco Casas.
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:17 +02:00
Francisco Casas
aefadb87b6
vkd3d-shader/hlsl: Support complex numeric initializers.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:15 +02:00
Francisco Casas
9c518b45d1
vkd3d-shader/hlsl: Handle static struct initializer instructions.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:13 +02:00
Francisco Casas
7cee81cf3e
vkd3d-shader/hlsl: Remove instruction list parameter in struct_var_initializer().
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:11 +02:00
Zebediah Figura
c3a5cd7c13
tests: Do not abort when an invalid shader test fails.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:09 +02:00
Zebediah Figura
98a36dfa41
tests: Mark individual test directives as todo.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:06 +02:00
Zebediah Figura
c0562e2a1e
tests: Introduce support for marking individual test directives as todo.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:04 +02:00
Zebediah Figura
26b89cc338
tests: Skip probe directives if the last render failed.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-15 21:18:01 +02:00
Zebediah Figura
e3f78706ec
tests: Introduce a Vulkan shader runner.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-12 19:00:19 +02:00
Zebediah Figura
3e8b5a9fc3
tests: Store samplers in a fixed-size array.
...
We will need to allocate some structures in the Vulkan backend; this is easier
if we don't need to worry about allocating them dynamically.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-12 19:00:16 +02:00
Zebediah Figura
e208d87847
tests: Store resources in a fixed-size array.
...
We will need to allocate some structures in the Vulkan backend; this is easier
if we don't need to worry about allocating them dynamically.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-12 19:00:14 +02:00
Zebediah Figura
02182ce4f7
tests: Transition back to D3D12_RESOURCE_STATE_RENDER_TARGET in d3d12_runner_probe_vec4().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-12 19:00:11 +02:00
Francisco Casas
7d31fd1788
vkd3d-shader/hlsl: Ensure that SM4 endif has 0 source registers.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-11 22:45:59 +02:00
Zebediah Figura
93c6fd0eb0
tests: Introduce a D3D9 shader runner.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-08 11:49:33 +02:00
Zebediah Figura
90b4cbc1f2
tests: Try to avoid using SV_Position from shaders which can be tested with SM1.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-08 11:49:31 +02:00
Zebediah Figura
d2872fa33a
tests: Specify the arguments to "probe rect" as right and bottom, instead of width and height.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-08 11:49:27 +02:00
Zebediah Figura
83a3de8529
tests: Allow skipping shader tests if requirements are not met.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-08 11:49:27 +02:00
Zebediah Figura
c7a7cf498d
tests: Use a vertex buffer to draw quads for shader tests.
...
For compatibility with shader models before 4.0.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-08 11:49:16 +02:00
Zebediah Figura
94fcd52031
tests: Mark some more tests as requiring shader model 4.0.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:32:21 +02:00
Giovanni Mascellani
53d7433054
vkd3d-shader/hlsl: Write SM4 right shift instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:32:13 +02:00
Giovanni Mascellani
95df144c69
vkd3d-shader/hlsl: Assert that bool values are not bit-shifted.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:32:10 +02:00
Giovanni Mascellani
ed921151b0
vkd3d-shader/hlsl: Write SM4 uint modulus instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:32:07 +02:00
Giovanni Mascellani
e37f1ed26d
vkd3d-shader/hlsl: Write SM4 uint division instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:32:04 +02:00
Giovanni Mascellani
f3e81645be
vkd3d-shader/hlsl: Write SM4 uint negation instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:32:00 +02:00
Giovanni Mascellani
c92897ffd2
vkd3d-shader/hlsl: Write SM4 int multiplication instructions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:31:55 +02:00
Giovanni Mascellani
8c086b5c91
vkd3d-shader/hlsl: Lower casts to bool to comparisons.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:31:52 +02:00
Matteo Bruni
8fa196cf51
vkd3d-shader/hlsl: Handle HLSL_TYPE_DOUBLE in sm4_base_type().
...
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:31:46 +02:00
Matteo Bruni
233157649c
vkd3d-shader/hlsl: Drop extra '\n' from hlsl_error() messages.
...
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:31:44 +02:00
Matteo Bruni
4ab4d42468
vkd3d-shader/hlsl: Drop extra '\n' from hlsl_fixme() messages.
...
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-07 18:31:42 +02:00
Zebediah Figura
2e4367a470
build: Do not cross-compile tests if tests are not enabled.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:52:21 +02:00
Zebediah Figura
2f082de904
build: Do not make cross-compiled import libs an explicit dependency of the "crosstest" targets.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:52:19 +02:00
Zebediah Figura
113303c730
build: Do not cross-compile demos if demos are not enabled.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:52:12 +02:00
Zebediah Figura
d3347554a2
configure: Check for xcb-event and xcb-icccm.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:52:03 +02:00
Giovanni Mascellani
1ec00d8eba
vkd3d-shader/hlsl: Fold constant not-equal expressions.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:51:07 +02:00
Giovanni Mascellani
d9dc79de66
vkd3d-shader/hlsl: Store boolean constants as unsigned.
...
With this change it is possible to store booleans as 0xffffffff,
similarly as what happens at runtime.
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:51:07 +02:00
Giovanni Mascellani
5b24f7a06c
vkd3d-shader/hlsl: Add a helper to create constants of arbitrary type.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:51:07 +02:00
Giovanni Mascellani
39bd9b0943
vkd3d-shader/hlsl: Pass a pointer to the location to hlsl_new_*_constant().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:51:07 +02:00
Giovanni Mascellani
58956922df
vkd3d-shader/hlsl: Abort on inconsistent types in fold_cast().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:51:07 +02:00
Giovanni Mascellani
c63fbbda06
vkd3d-shader/hlsl: Abort on inconsistent types in write_sm4_cast().
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:51:07 +02:00
Giovanni Mascellani
4739cf1d33
vkd3d-shader/hlsl: Check types when folding constants.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:51:07 +02:00
Giovanni Mascellani
bc7c89bc1f
vkd3d-shader/hlsl: Use an unsigned variable for iteration.
...
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:51:07 +02:00
Zebediah Figura
08d198ba6f
tests: Make test_shader_interstage_interface() into a shader test.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:50:22 +02:00
Zebediah Figura
6e966bcf23
vkd3d-shader/hlsl: Allow "nointerpolation" to be specified on struct fields.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:50:19 +02:00
Matteo Bruni
428a6b4033
vkd3d-shader/hlsl: Report failure when encountering matrix instructions.
...
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-05 17:50:17 +02:00
Zebediah Figura
ea93c5c767
vkd3d-shader/hlsl: Write SM4 integer addition instructions.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-04 21:12:57 +02:00
Zebediah Figura
c9b7669240
vkd3d-shader/hlsl: Declare integer semantics as having constant interpolation.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-04 21:12:52 +02:00
Zebediah Figura
e6dabf22bf
vkd3d-shader/hlsl: Respect the 'nointerpolation' modifier.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-04 21:12:47 +02:00
Zebediah Figura
8e07f65595
vkd3d-shader/hlsl: Allow mixing "in" and "out" with other modifiers.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-04 21:12:41 +02:00
Giovanni Mascellani
8e6c526779
vkd3d-shader/hlsl: Write SM4 bitwise NOT instructions.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-04 21:12:38 +02:00
Giovanni Mascellani
2959ad74f7
vkd3d-shader/hlsl: Write SM4 bitwise XOR instructions.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-04 21:12:34 +02:00
Giovanni Mascellani
f22d866cee
vkd3d-shader/hlsl: Write SM4 bitwise OR instructions.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-04-04 21:12:30 +02:00
Matteo Bruni
d2104522fe
vkd3d-shader/preproc: Don't add additional spaces after whitespace tokens.
...
This is especially a problem when e.g. it introduces a whitespace
before a #pragma directive, breaking shader compilation.
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-31 21:24:56 +02:00
Francisco Casas
a75560af3d
vkd3d-shader/hlsl: Treat all braceless initializers as assignments.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-31 21:24:53 +02:00
Francisco Casas
6284cf7d57
vkd3d-shader/hlsl: Don't check exact number of components for braceless initialization of numeric types.
...
The implicit conversion in add_assignment() takes responsability now.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-31 21:24:49 +02:00
Francisco Casas
22f0b1df77
vkd3d-shader/hlsl: Properly free parse_variable_def memory.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-31 21:24:46 +02:00
Francisco Casas
426c08eba4
vkd3d-shader/hlsl: Add 'braces' flag to parse initializers.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-31 21:24:43 +02:00
Francisco Casas
d9dc1a4554
vkd3d-shader/hlsl: Concatenate nested initializers.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-31 21:24:39 +02:00
Francisco Casas
bed085cf9a
vkd3d-shader/hlsl: Avoid leaks on memory allocation failures when parsing initializers.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-31 21:24:35 +02:00
Conor McCarthy
889e5af5dd
tests: Test signalling a fence to a lower value after a GPU wait.
...
Ensures the new fence implementation using timeline semaphores handles
this correctly.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-24 23:23:15 +01:00
Conor McCarthy
22d8665300
vkd3d: Use Vulkan timeline semaphores for D3D12 fences.
...
D3D12 supports signalling a fence to a lower value, while Vulkan timeline
semaphores do not. On the GPU side this is handled by simply submitting
the signal anyway, if a test for this passes on device creation, because
working around this is impractical. For CPU signals the Vulkan semaphore
is replaced with a new one at the lower value only if no waits and/or
signals are pending on the GPU. Otherwise, a fixme is emitted.
Partly based on a vkd3d-proton patch by Hans-Kristian Arntzen (not
including the handling of lower fence values).
The old implementation is used if KHR_timeline_semaphore is not
available or GPU signals do not work for a lower value.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-24 19:47:24 +01:00
Conor McCarthy
e3045090a8
vkd3d: Write a resource null descriptor to all applicable sets when one set is written.
...
Binding a shader with the wrong null descriptor type works in Windows. The
introduction of Vulkan-backed heaps may cause a regression in clients which
do this, because the written index will remain unpopulated in all other sets,
but a shader may access it in one of them.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-24 19:46:20 +01:00
Conor McCarthy
0627462192
vkd3d: Use Vulkan null descriptors if EXT_robustness2 is available.
...
This implements all remaining unsupported image view dimensions and saves
a small amount of resources because null buffers and images are no longer
needed. It matches the D3D12 requirement that all reads return zero,
which is not strictly true of the existing implementation using resources
of small but non-zero size. Warnings on null view creation are silenced
because there should no longer be a difference from D3D12 behaviour.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-24 19:46:13 +01:00
Conor McCarthy
f34168481d
vkd3d: Remove an invalid NULL check.
...
The pointer is never NULL.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-23 18:40:58 +01:00
Conor McCarthy
ae2219a7f7
vkd3d: Do not enable Vulkan-backed descriptor heaps if required update-after-bind features are missing.
...
descriptorBindingUniformBufferUpdateAfterBind is false for Intel Skylake
(and maybe others).
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-23 18:40:56 +01:00
Zebediah Figura
24a27daf98
tests: Add a test for the "nointerpolation" modifier.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-22 18:41:43 +01:00
Zebediah Figura
c7623262cc
tests: Specify the primitive type from the shader runner frontend.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-22 18:41:41 +01:00
Zebediah Figura
492cd135e3
tests: Specify the vertex count from the shader runner frontend.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-22 18:41:39 +01:00
Zebediah Figura
84c73f82f7
tests: Allow specifying a custom vertex buffer.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-22 18:41:37 +01:00
Zebediah Figura
f11f7032cd
tests: Make the "texture" structure more generic.
...
Use it to hold any type of resource, regardless of type and binding.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-22 18:41:35 +01:00
Zebediah Figura
3ed4c6fe23
tests: Allow specifying a custom input layout.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-22 18:41:32 +01:00
Zebediah Figura
16b383aef5
tests: Specify the default vertex shader in the shader runner frontend.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-22 18:41:29 +01:00
Zebediah Figura
52223250d7
tests: Add support for running shader tests with a custom vertex shader.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-22 18:41:26 +01:00
Zebediah Figura
71db328d38
tests: Remove NULL rect handling from d3d11_runner_probe_vec4().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-21 22:35:05 +01:00
Zebediah Figura
099df706f0
tests: Use a macro to define the render target size.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-21 22:35:03 +01:00
Zebediah Figura
e5be178fe2
tests: Rename struct d3d11_shader_context to struct d3d11_shader_runner.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-21 22:35:01 +01:00
Zebediah Figura
39459d6c3e
tests: Rename struct d3d12_shader_context to struct d3d12_shader_runner.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-21 22:34:59 +01:00
Zebediah Figura
5841e79102
tests: Rename struct shader_context to struct shader_runner.
...
This is a bit clearer, and avoids colliding with other things named "context",
e.g. struct test_context, or d3d11 device contexts.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-21 22:34:57 +01:00
Zebediah Figura
ead5cc3113
tests: Use SV_VertexID to draw a triangle in d3d11_runner_draw_quad().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 22:20:36 +01:00
Zebediah Figura
41d75fde22
vkd3d-shader/hlsl: Write SM4 left shift instructions.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 22:20:36 +01:00
Zebediah Figura
ccb3326516
vkd3d-shader/hlsl: Write SM4 bitwise AND instructions.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 22:20:36 +01:00
Zebediah Figura
5251ecff89
vkd3d-shader/hlsl: Parse the sv_vertexid semantic.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 22:20:36 +01:00
Zebediah Figura
6569b37e97
vkd3d-shader/hlsl: Reverse the switch order in write_sm4_expr().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 22:20:36 +01:00
Zebediah Figura
8fe4d7d37e
vkd3d-shader/hlsl: Cast pow() input to float.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 22:20:36 +01:00
Francisco Casas
a7e6d6b9d2
vkd3d-shader/hlsl: Remove redundant type check in declare_vars().
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 22:20:36 +01:00
Giovanni Mascellani
84059d61c3
vkd3d-shader/hlsl: Allow offsets for scalar and vector variables.
...
Signed-off-by: Francisco Casas <fcasas@codeweavers.com >
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 22:20:36 +01:00
Zebediah Figura
ee764359d0
vkd3d-shader/hlsl: Correctly calculate offsets for array elements.
...
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com >
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 22:20:32 +01:00
Conor McCarthy
2b0fd2a055
vkd3d: Do not copy descriptors having identical views.
...
Improves performance in Control, which copies large numbers of descriptors
per frame where often only ~10% are not identical.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 12:40:02 +01:00
Conor McCarthy
5e4f1e1ead
vkd3d: Optimise descriptor copying for Vulkan-backed heaps.
...
Source descriptors are copied to separate arrays to facilitate use of
pre-initialised Vulkan structures, and allow arrayed writes where
possible.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 12:40:02 +01:00
Conor McCarthy
2b71ea406f
vkd3d: Back descriptor heaps with Vulkan descriptor sets if descriptor indexing is available.
...
The existing implementation using virtual descriptor heaps, where Vk
descriptor sets are created for the bindings in the root descriptor tables,
is inefficient when multiple command lists are used with large descriptor
heaps. It also cannot support updating a descriptor set after it is bound.
This patch creates Vk sets for each D3D12 heap. Because D3D12 heaps
can contain CBV, SRV and UAV descriptors in the same heap, multiple Vk sets
are needed for each heap, however the total number of populated descriptors
is never more than (heap size + UAV counter count).
A new 'virtual_heaps' config option is introduced to make the old
implementation available when needed. It's not always possible to determine
if this is necessary when the device is created.
Up to nine Vk descriptor sets may be used. It's theoretically possible to
reduce this to eight by placing immutable samplers in the push descriptor
set layout, but contradictions in earlier versions of the Vulkan spec made
driver support inconsistent. The documentation was corrected in version
1.2.203.
This patch also adds support for UAV counter descriptor arrays. It's not
practical to add this in a separate patch due to complications with
combining the old UAV counter implementation with the new descriptor heap
implementation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47713
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47154
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-18 12:38:53 +01:00
Giovanni Mascellani
500ce146c3
tests: Mark atomic operations as done on AMD.
...
They seem to work with mesa 21.3.7. Since some developers are
using older releases where the bug is not yet fixed, I am leaving
it marked as a bug.
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-17 20:52:30 +01:00
Giovanni Mascellani
90827313f5
tests: Mark NaN conversion as todo on NVIDIA.
...
D3D mandates that NaN becomes zero when converted to unsigned[1],
while it doesn't look like that SPIR-V's OpConvertFToU has a similar
provision[2]. In practice, this seems to work on AMD and fails on
NVIDIA, where 0x80000000 is produced instead.
[1] https://microsoft.github.io/DirectX-Specs/d3d/archive/D3D11_3_FunctionalSpec.htm#22.17.4%20dtou
[2] https://www.khronos.org/registry/SPIR-V/specs/unified1/SPIRV.html#Conversion
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-17 20:52:30 +01:00
Giovanni Mascellani
8efbd4de51
tests: Work around a rounding difference between NVIDIA and AMD.
...
NVIDIA and AMD round differently the assignment of 0.5f to a UAV
of type R16G16_UNORM. NVIDIA rounds to 0x7fff and AMD to 0x8000.
According to both Vulkan and D3D12 specifications, both values
are acceptable, but the discrepancy currently appears as a
failure on NVIDIA cards.
Work around the issue by using 0.25f instead of 0.5f, which is
rounded as 0x4000 on both implementations.
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-17 20:52:30 +01:00
Zebediah Figura
fa17a170b1
vkd3d-shader/sm4: Recognise the msad opcode.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-14 18:31:08 +01:00
Zebediah Figura
0ca2444e9b
tests: Use only one heap for textures in the d3d12 shader runner.
...
The d3d12 specification forbids simultaneously binding more than one heap of a
given type.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-14 18:26:50 +01:00
David Gow
13ca6322c7
vkd3d: Handle D3D12_APPEND_ALIGNED_ELEMENT for <4 byte wide elements.
...
In d3d12, input element alignment needs to be the _minimum_ of 4 and the size of
the type. See the D3D11 spec, section 4.4.6, which behaves similarly:
https://microsoft.github.io/DirectX-Specs/d3d/archive/D3D11_3_FunctionalSpec.htm#4.4.6%20Element%20Alignment
This is correctly taken into account when generating, e.g., the
vertex_buffer_stride_align_mask used for validation, but is not taken
into account when D3D12_APPEND_ALIGNED_ELEMENT is used to automatically
place input elements. Currently, vkd3d always assumes the alignment is
4.
This means that, for example, bytes or shorts should be packed tightly
together when D3D12_APPEND_ALIGNED_ELEMENT is used, but are instead
padded to 4 bytes.
Fixing this makes units appear in Age of Empires IV.
Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-09 20:53:15 +01:00
Zebediah Figura
721ea8fa60
tests: Mark some tests as requiring shader model 4.0.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-08 17:45:21 +01:00
Zebediah Figura
1f4056125d
tests: Avoid using non-float uniforms where possible.
...
SM1 encodes these differently.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-08 17:45:18 +01:00
Zebediah Figura
efd9e9e990
tests: Use SM1-compatible uniform layouts in shader tests.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-08 17:45:16 +01:00
Zebediah Figura
9bbce56dad
tests: Avoid depending on float accuracy in the round() test.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-08 17:45:14 +01:00
Zebediah Figura
e9ff88469e
tests: Split hlsl-operations into individual test units.
...
Partly to make the tests easier to navigate, and partly to allow marking some
tests as SM4+.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-08 17:45:11 +01:00
Francois Gouget
b64482e7c7
vkd3d-shader/spirv: Fix the spelling of some comments.
...
Signed-off-by: Francois Gouget <fgouget@free.fr >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-07 16:39:09 +01:00
Francois Gouget
ab3855133d
announce: Fix a typo in the libvkd3d-shader new interfaces section.
...
Signed-off-by: Francois Gouget <fgouget@free.fr >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-07 16:31:31 +01:00
Francois Gouget
419c746806
vkd3d: Fix the spelling of a couple of trace message.
...
Signed-off-by: Francois Gouget <fgouget@free.fr >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-07 16:31:28 +01:00
Francois Gouget
c1e376911e
vkd3d: Add a trailing linefeed to a couple of WARN() messages.
...
Signed-off-by: Francois Gouget <fgouget@free.fr >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-07 16:31:25 +01:00
Zebediah Figura
fc5df4d330
vkd3d-utils: Simplify handling of shader messages a bit.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-07 16:30:44 +01:00
Zebediah Figura
e9fd9a79a1
vkd3d-utils: Avoid leaking "messages" when vkd3d_blob_create() fails.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com >
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com >
Signed-off-by: Alexandre Julliard <julliard@winehq.org >
2022-03-07 16:30:37 +01:00