Francisco Casas
28d267b7c0
vkd3d-shader/hlsl: Allocate SM1 numeric uniforms in decreasing bind count.
2024-05-13 22:26:21 +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
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
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
065ef0c5e4
vkd3d-shader/spirv: Implement the WAVE_IS_FIRST_LANE instruction.
2024-05-13 11:50:21 +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
962096f179
vkd3d-shader/dxil: Implement DX intrinsics EmitStream, CutStream and EmitThenCutStream.
2024-05-08 21:08:16 +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
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
7b3c47ba2e
vkd3d-shader/tpf: Write the field offset in bytes.
2024-05-06 22:12:48 +02:00
Conor McCarthy
cfcc789b42
vkd3d-shader/spirv: Implement the WAVE_OP_* instructions.
2024-05-06 22:12:27 +02:00
Conor McCarthy
fef5760af0
vkd3d-shader/spirv: Implement the WAVE_ACTIVE_BIT_* instructions.
2024-05-06 22:12:24 +02:00
Conor McCarthy
1c49b3a779
vkd3d-shader/spirv: Implement the WAVE_ACTIVE_BALLOT instruction.
2024-05-06 22:12:21 +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
Conor McCarthy
95489899be
vkd3d-shader/spirv: Handle the WAVE_ANY_TRUE instruction.
2024-05-02 22:19:02 +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
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
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
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
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
Henri Verbeet
2b6012df7d
tests/shader_runner: Use WIDL_C_INLINE_WRAPPERS.
2024-04-24 23:48:44 +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
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
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
Giovanni Mascellani
6b841486d4
vkd3d-shader/ir: Materialize SSAs in each function of a hull shader.
2024-04-23 22:36:17 +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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Stefan Dösinger
8653ce17cf
tests: Add tests for creating D3D12ShaderCacheSession objects.
2024-04-04 22:19:46 +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
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
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
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
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
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
90e8a541fb
tests: Add tests for LOGIC_NOT on uniforms.
2024-03-27 22:37:06 +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
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
0b1f11dd33
vkd3d-shader/hlsl: Allocate register reservations for structs as well.
2024-03-27 22:36:34 +01:00
Henri Verbeet
0715734dfb
tests/shader_runner: Add GLSL support to the GL runner.
2024-03-19 22:57:50 +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
08cc5027cf
tests/hlsl: Add tests for mad() and fma().
2024-03-18 23:07:35 +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
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
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
Conor McCarthy
b6c41d5287
tests/hlsl: Add tests for countbits() and firstbit{high|low}().
2024-03-13 21:50:39 +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
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
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
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
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
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
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
fda08de61d
tests/shader-runner: Pass uniforms to vertex shaders in d3d9 and d3d11.
2024-03-11 22:09:41 +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
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
Conor McCarthy
e65055b435
vkd3d-shader/spirv: Handle the ORD and UNO instructions.
2024-03-08 23:36:14 +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
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
6163d82485
tests: Test emitting the signature.
2024-03-07 23:08:25 +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
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
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
Henri Verbeet
f866fb95ad
Release 1.11.
2024-03-05 20:39:45 +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
Giovanni Mascellani
500b61c383
tests: Test how constant folding works on SM1.
2024-02-26 23:04:08 +01:00
Conor McCarthy
c083b1d0fc
vkd3d-shader/dxil: Implement DX intrinsic GetDimensions.
2024-02-26 23:03:48 +01:00
Conor McCarthy
2330ffdeda
vkd3d-shader/dxil: Implement DX intrinsics SampleBias and SampleLevel.
2024-02-22 22:45:34 +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
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
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
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
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
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
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
Henri Verbeet
0f3a42c34b
tests: Implement check_requirements() for the OpenGL shader runner.
2024-02-13 22:51:36 +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
Giovanni Mascellani
2359ebc976
tests: Release the code blob in test_thread_id() (Valgrind).
2024-02-09 22:47:47 +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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Zebediah Figura
57c4a13024
tests: Add tests for valid conditional types.
2024-01-23 20:26:47 +01:00
Conor McCarthy
b3903636f7
vkd3d-shader/dxil: Implement DX intrinsic Binary.
2024-01-23 20:26:29 +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
341963bbec
tests/hlsl: Add some tests for annotations.
2024-01-23 20:26:14 +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
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
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
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
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
Zebediah Figura
16962ac6f1
vkd3d-shader/hlsl: Allow non-numeric types in the ternary operator.
2024-01-17 22:28:51 +01:00
Zebediah Figura
9ac210eb1e
tests: Add many more tests for ternary expressions.
2024-01-17 22:28:50 +01:00
Nikolay Sivov
e7d65d39ba
vkd3d-shader/fx: Initial support for fx_5_0 output.
2024-01-15 19:57:42 +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
Conor McCarthy
c5bc28b454
tests/d3d12: Test vector parameter for countbits() and firstbithigh() in test_shader_instructions().
2024-01-15 19:56:36 +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
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
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
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
9c9b1fadbd
tests: Use a uint target for rendering uint data.
...
This fixes a failure in MoltenVK.
2024-01-08 21:44:50 +01:00
Zebediah Figura
1ce7e3d8b1
vkd3d-shader/d3dbc: Assign unique register indices for VKD3DSPR_RASTOUT.
2024-01-04 22:23:09 +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
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
cc43ef3bca
vkd3d: Pass int64 capability info to vkd3d-shader.
2024-01-02 23:03:00 +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
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
Giovanni Mascellani
09235d9e09
tests: Test assigning multisampled textures with different sample counts.
2023-12-13 22:32:38 +01:00