Henri Verbeet
985d317e0e
Release 1.15.
2025-02-19 12:00:00 +01:00
Henri Verbeet
872a96e599
vkd3d-shader/ir: Remove vForkInstanceId and vJoinInstanceId declarations in vsir_program_flatten_hull_shader_phases().
...
Commit 4717775abb
removed the code turning
the corresponding DCL_INPUT instructions into NOPs, presumably because
vsir_program_remove_io_decls() now already removes them. That function
only removes the instructions though, not the declarations as such; we
now need to remove these from the "io_dcls" bitmap instead.
2025-02-19 10:44:18 +01:00
Henri Verbeet
e0df4cdc6d
include: Add missing VKD3D_FORCE_32_BIT_ENUM enum elements.
2025-02-19 10:43:39 +01:00
Henri Verbeet
86462db9ed
include: Add vkd3d_shader_scan_hull_shader_tessellation_info to the list of chained compilation structures.
2025-02-18 17:48:47 +01:00
Henri Verbeet
751f8b313c
vkd3d-compiler: Introduce "dxbc-fx" as a source type.
...
Commit 949708450b
introduced support for
effect binaries embedded in DXBC containers, but only when using
auto-detection to determine the source type. That's undesirable;
although auto-detection is convenient for interactive use, it's not
necessarily suitable for use in e.g. scripts. It also meant this wasn't
listed through --print-source-types.
2025-02-18 17:47:22 +01:00
Henri Verbeet
a169ae05e8
vkd3d-compiler: Store the source type as a struct source_type_info pointer.
2025-02-18 17:47:22 +01:00
Henri Verbeet
1cf6e8a85d
vkd3d-compiler: Store the target type as a struct target_type_info pointer.
2025-02-18 17:47:22 +01:00
Conor McCarthy
c3555a34dc
tests/hlsl: Add structured buffer UAV 16-bit tests.
2025-02-12 20:03:50 +01:00
Conor McCarthy
504bdcc8bb
tests/hlsl: Add a raw buffer UAV 16-bit test.
2025-02-12 20:00:33 +01:00
Conor McCarthy
163801507c
tests/hlsl: Add typed buffer UAV 16-bit tests.
2025-02-12 19:59:19 +01:00
Conor McCarthy
7ee6101291
tests/hlsl: Add GetDimensions() 16-bit tests.
2025-02-12 19:56:21 +01:00
Conor McCarthy
498e86fb86
tests/hlsl: Add constant buffer 16-bit tests.
2025-02-12 19:49:28 +01:00
Henri Verbeet
940c67f521
vkd3d: Avoid freeing the input signature twice on error paths in d3d12_pipeline_state_init_graphics().
...
This used to be safe enough before commit
b5ac6ac636
, although that was never guaranteed
by the API.
2025-02-12 19:44:10 +01:00
Conor McCarthy
1b7340a6ed
tests/hlsl: Add a numeric types 16-bit test.
2025-02-10 13:19:16 +01:00
Conor McCarthy
49a683f260
tests/hlsl: Add arithmetic float16 tests.
2025-02-10 13:19:16 +01:00
Conor McCarthy
becb749792
tests/hlsl: Add arithmetic int16 tests.
2025-02-10 13:19:16 +01:00
Conor McCarthy
2a0d49bb58
tests/hlsl: Add more arithmetic uint16 tests.
2025-02-10 13:19:16 +01:00
Elizabeth Figura
fe52e69662
vkd3d-shader/hlsl: Use a block in hlsl_normalize_binary_exprs().
2025-02-05 13:53:53 +01:00
Elizabeth Figura
d7cd33fd88
vkd3d-shader/hlsl: Use a block in prepend_input_var_copy().
2025-02-05 13:53:53 +01:00
Elizabeth Figura
b7d7deb983
vkd3d-shader/hlsl: Pass the block to add_zero_mipmap_level().
2025-02-05 13:18:42 +01:00
Elizabeth Figura
602103dcf0
vkd3d-shader/hlsl: Handle error instructions in add_switch().
2025-02-05 13:18:42 +01:00
Elizabeth Figura
fb290f3847
vkd3d-shader/hlsl: Add an add_switch() helper.
2025-02-05 13:18:42 +01:00
Shaun Ren
2f77d56b77
tests: Test signature reflection for patch inputs in hull/domain shaders.
2025-02-03 16:36:21 +01:00
Shaun Ren
ec6b4ed4ff
vkd3d-shader/hlsl: Generate vsir registers from patch variable derefs.
2025-02-03 16:36:16 +01:00
Shaun Ren
3fb241d4d6
tests/shader_runner: Support the negation of tag matches.
2025-02-03 16:15:11 +01:00
Shaun Ren
2a1e3b100b
vkd3d-shader/hlsl: Allocate semantic registers for patch variables.
2025-02-03 16:15:11 +01:00
Shaun Ren
2ddbc69f1a
vkd3d-shader/hlsl: Declare semantics for patch variables in vsir.
2025-02-03 16:15:03 +01:00
Shaun Ren
f127f0849e
vkd3d-shader/hlsl: Generate vsir signature entries for patch variables.
2025-02-03 16:04:21 +01:00
Shaun Ren
aa29d0a2e5
vkd3d-shader/tpf: Improve readability of compat mapping in sm4_sysval_semantic_from_semantic_name().
2025-02-03 16:04:21 +01:00
Shaun Ren
29abe73918
vkd3d-shader/hlsl: Implement input semantic variable copies for patch variables.
...
The semantic variables from a patch parameter are split as usual, with
the difference being that the semantic variable being added is a patch
variable itself, with the type being the split variable type, and its
number of control points being equal to the original patch variable's
number of control points. It is then stored in the original patch
variable as follows:
for (i = 0; i < n; ++i)
patch[i][f] := <inputpatch-sem-var>[i]
where n is the number of control points of "patch", and f is the field
index in patch corresponding to "<inputpatch-sem-var>".
We use special prefixes, "inputpatch-" or "outputpatch-", when adding
the semantic patch variables, in order to distinguish them from
non-patch semantic variables of the same name.
2025-02-03 16:04:11 +01:00
Shaun Ren
f5d216835a
vkd3d-shader/hlsl: Add an "is_patch_constant_func" field to struct hlsl_ctx.
...
In anticipation of the need for is_patch_constant_func in
sm4_generate_vsir_reg_from_deref(), in order to generate vsir
registers from InputPatch/OutputPatch dereferences.
2025-02-03 16:00:38 +01:00
Shaun Ren
0c8414c13f
tests/hlsl: Test OutputPatch usage in patch constant functions.
2025-02-03 15:59:07 +01:00
Francisco Casas
0f7bb922ba
tests/shader_runner: Pass the correct buffer size to swprintf() in dxc_compiler_compile_shader().
...
swprintf() expects the length of the buffer in WCHARs instead of bytes,
so ARRAY_SIZE() is used instead of sizeof().
This caused almost all tests to terminate abruptly with the following
message, in my machine:
*** buffer overflow detected ***: terminated
2025-02-03 15:58:19 +01:00
Elizabeth Figura
f1412e422c
vkd3d-shader/hlsl: Handle error instructions in add_shader_compilation().
2025-01-29 17:58:00 +01:00
Elizabeth Figura
fbd17266cf
vkd3d-shader/hlsl: Do not abort on variable redefinition.
...
There is no harm in defining two variables with the same name.
2025-01-29 17:58:00 +01:00
Elizabeth Figura
e40d4a0e12
vkd3d-shader/hlsl: Factor out the error message into hlsl_add_var().
2025-01-29 17:58:00 +01:00
Elizabeth Figura
2863d86bcc
vkd3d-shader/hlsl: Do not define a separate scope for function parameters.
...
Remove the no longer needed code to detect redefinition in this case.
2025-01-29 17:58:00 +01:00
Elizabeth Figura
75ef230fbe
tests: Add some stress tests for scope and variable definition.
2025-01-29 17:58:00 +01:00
Shaun Ren
7d1e4a40b1
tests/hlsl: Test hull shader control point function output parameters.
2025-01-29 17:53:26 +01:00
Shaun Ren
73183d33c5
tests/hlsl: Test passthrough hull shader control point function.
2025-01-29 17:52:49 +01:00
Shaun Ren
8a5559ab17
tests/hlsl: Test the syntax of InputPatch/OutputPatch variables.
2025-01-29 17:51:18 +01:00
Shaun Ren
f064a4022a
vkd3d-shader/hlsl: Validate and record InputPatch/OutputPatch types.
2025-01-29 17:45:46 +01:00
Shaun Ren
f4d5e05d96
vkd3d-shader/hlsl: Parse InputPatch and OutputPatch objects.
2025-01-29 17:41:51 +01:00
Shaun Ren
32c081ba8c
tests/hlsl: Test invalid const variables with no initializer.
2025-01-29 17:36:58 +01:00
Shaun Ren
a77dca528a
vkd3d-shader/hlsl: Forbid declaring const variables with no initializer.
2025-01-29 17:36:58 +01:00
Elizabeth Figura
25c6d16b45
vkd3d-shader/hlsl: Use the casted value in exp().
2025-01-28 13:14:50 +01:00
Conor McCarthy
033a0d29c5
tests/hlsl: Add some arithmetic uint16 shader tests.
2025-01-28 13:13:44 +01:00
Conor McCarthy
a5d4cbddac
tests/hlsl: Pass a profile string instead of a shader type to dxc_compiler_compile_shader().
2025-01-28 12:07:43 +01:00
Elizabeth Figura
40c225095f
vkd3d-utils: Fix matrix packing precedence in D3DCompile2VKD3D().
...
D3DCOMPILE_PACK_MATRIX_ROW_MAJOR takes precedence over
D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR.
2025-01-27 15:00:26 +01:00
Conor McCarthy
f63254d905
vkd3d-shader/dxil: Handle SV_RenderTargetArrayIndex.
2025-01-27 14:52:28 +01:00
Conor McCarthy
a557ad0aea
tests/hlsl: Add a test for SV_RenderTargetArrayIndex.
2025-01-27 14:52:28 +01:00
Elizabeth Figura
d049ea640f
vkd3d-shader/hlsl: Implement broadcasts in constant folding.
...
Normally lower_broadcasts() takes care of this, but loop unrolling executes before other constant passes.
2025-01-27 14:48:03 +01:00
Elizabeth Figura
9065a1ee23
tests: Add another unrolling test.
2025-01-27 14:47:12 +01:00
Giovanni Mascellani
5bfcd81182
ci: Explicitly install SPIRV-Tools in the macOS CI environment.
2025-01-22 14:56:43 +01:00
Giovanni Mascellani
d36864500f
vkd3d-common: Write a thread id in the log on macOS too.
2025-01-22 14:54:52 +01:00
Giovanni Mascellani
343022cdc1
vkd3d-shader/spirv: Interpret the write mask as a destination swizzle for double comparison operations.
...
This fixes a failure on a shader in Wild hearts.
2025-01-22 14:51:16 +01:00
Francisco Casas
4d18fb39b6
vkd3d-shader/hlsl: Don't forbid first base type cast on var assignments.
2025-01-22 14:46:02 +01:00
Francisco Casas
0a15ab702f
vkd3d-shader/hlsl: Don't count cast to param type on IN as part of OUT var's lhs.
...
If the parameter is HLSL_STORAGE_IN, we add a cast from the arg to the
param type so that it can enter the function, however this cast should
not be considered part of the lhs on the implicit assignment that happens
if the var is also HLSL_STORAGE_OUT.
2025-01-22 14:39:20 +01:00
Francisco Casas
b55fe1950e
vkd3d-shader/hlsl: Support non-size-changing lhs casts.
2025-01-22 14:38:10 +01:00
Francisco Casas
c2e224c5fb
vkd3d-shader/hlsl: Delay lowering complex casts until after parse time.
...
While so far it has been posible to do this at parse time, this must
happen after knowing if the complex cast is on the lhs or not.
The modified tests show that before this patch we are currently
miscompiling when this happens, because a complex lhs cast is transformed
into a load, and add_assigment() just stores to the generated "cast"
temp.
2025-01-22 14:34:19 +01:00
Francisco Casas
dc37d90190
tests/hlsl: Add more function cast tests.
2025-01-22 14:29:54 +01:00
Francisco Casas
60f75cc542
tests/hlsl: Test partial assignments due to lhs casts.
2025-01-22 14:27:57 +01:00
Francisco Casas
51db232368
tests/hlsl: Add lhs cast tests.
2025-01-22 14:23:29 +01:00
Anna (navi) Figueiredo Gomes
c7b209124b
vkd3d-shader/hlsl: Consider conversions across all parameters in function_compare().
...
For example, given two arguments, half3 and float, and two functions,
func(float, float) and func(float3, float3), fxc/d3dcompiler prefers to
widen both arguments to float3.
2025-01-22 14:18:54 +01:00
Anna (navi) Figueiredo Gomes
de57afd672
tests/hlsl: Add mixed argument size tests.
2025-01-22 14:17:17 +01:00
Elizabeth Figura
004a381d9c
tests: Adjust abs.shader_test to pass with 1.x.
...
Pixel shader 1.x constants must be between -1 and 1, or they will be clamped,
even constants defined in the shader.
Also mark 1.x-specific features if any.
2025-01-22 13:43:38 +01:00
Elizabeth Figura
e805fe3e36
tests: Adjust array-size-expr.shader_test to pass with 1.x.
...
Pixel shader 1.x constants must be between -1 and 1, or they will be clamped,
even constants defined in the shader.
Also mark 1.x-specific features if any.
2025-01-22 13:43:38 +01:00
Elizabeth Figura
e5ec52d63b
tests: Adjust array-parameters.shader_test to pass with 1.x.
...
Pixel shader 1.x constants must be between -1 and 1, or they will be clamped,
even constants defined in the shader.
Also mark 1.x-specific features if any.
2025-01-22 13:43:38 +01:00
Elizabeth Figura
e40b191943
tests: Adjust arithmetic-int.shader_test to pass with 1.x.
...
Pixel shader 1.x constants must be between -1 and 1, or they will be clamped,
even constants defined in the shader.
Also mark 1.x-specific features if any.
2025-01-22 13:43:38 +01:00
Elizabeth Figura
fb75c0530a
tests: Adjust arithmetic-float-uniform.shader_test to pass with 1.x.
...
Pixel shader 1.x constants must be between -1 and 1, or they will be clamped,
even constants defined in the shader.
Also mark 1.x-specific features if any.
2025-01-22 13:43:38 +01:00
Elizabeth Figura
8b4f0f348a
tests: Adjust arithmetic-float.shader_test to pass with 1.x.
...
Pixel shader 1.x constants must be between -1 and 1, or they will be clamped,
even constants defined in the shader.
Also mark 1.x-specific features if any.
2025-01-22 13:43:38 +01:00
Elizabeth Figura
5f55f5adc7
tests: Adjust angle-unit.shader_test to pass with 1.x.
...
Pixel shader 1.x constants must be between -1 and 1, or they will be clamped,
even constants defined in the shader.
Also mark 1.x-specific features if any.
2025-01-22 13:43:38 +01:00
Giovanni Mascellani
5b2d62e59a
vkd3d: Explicitly call the appropriate waiting function in the fence worker.
...
Avoid using an indirect call that makes the code less clear for no
real advantage.
2025-01-21 14:09:29 +01:00
Shaun Ren
f3f2880261
vkd3d-shader/d3d-asm: Print vocp registers with subscript.
2025-01-21 14:05:21 +01:00
Shaun Ren
f0070cd595
tests: Test invalid out const parameters.
2025-01-21 14:03:44 +01:00
Shaun Ren
a9d7c65eb8
vkd3d-shader/hlsl: Forbid declaring parameters as both out and const.
...
Note that inout const parameters are allowed.
2025-01-21 14:03:44 +01:00
Giovanni Mascellani
22d0841412
vkd3d: Support signalling a fence once all outstanding work is submitted to Vulkan.
...
When the client acquires the Vulkan queue it has to ensure that
it is not submitting work before other work it depends on already
submitted through the Direct3D 12 API but currently in the internal
vkd3d queue. Currently we suggest to enqueue signalling a fence and
than wait for it before acquiring the Vulkan queue, which is
correct but excessive: it will wait not just for the work currently
in the queue to be submitted, but for it to be executed too,
introducing useless dependencies.
By adding a way to enqueue signalling a fence on the CPU side we
allow the client to wait for the currently outstanding work to
be submitted to Vulkan, but nothing more.
2025-01-21 14:02:22 +01:00
Giovanni Mascellani
bdb8291f6c
vkd3d: Release queued fences when stopping the fence worker.
2025-01-21 13:45:33 +01:00
Giovanni Mascellani
ed7a846e2e
vkd3d: Only call d3d12_fence_garbage_collect_vk_semaphores_locked() when using binary semaphores.
...
The function is specific to binary semaphores, and will unconditionally
access the "u.binary" field of struct vkd3d_signaled_semaphore.
2025-01-21 13:45:27 +01:00
Shaun Ren
4fbfb44681
vkd3d-shader/spirv: Emit the tessellator domain for domain shaders.
...
Commit 1ed8d907b3
inadvertently dropped
emitting the tessellator domain for domain shaders. Although Vulkan
environments allow us to write the tessellator domain from the hull
shader, the domain shader, or both, that's not generally true for OpenGL
environments.
2025-01-20 15:50:04 +01:00
Shaun Ren
802d7317cb
vkd3d-shader/hlsl: Implement the InterlockedXor() intrinsic.
2025-01-20 15:42:45 +01:00
Shaun Ren
cbd504e888
vkd3d-shader/hlsl: Implement the InterlockedOr() intrinsic.
2025-01-20 15:42:45 +01:00
Shaun Ren
5b9634a7b7
vkd3d-shader/hlsl: Implement the InterlockedMin() intrinsic.
2025-01-20 15:42:43 +01:00
Shaun Ren
63fbe161f2
vkd3d-shader/hlsl: Implement the InterlockedMax() intrinsic.
2025-01-20 15:42:07 +01:00
Shaun Ren
b447fdce51
vkd3d-shader/hlsl: Implement the InterlockedExchange() intrinsic.
2025-01-20 15:41:07 +01:00
Shaun Ren
3fb47373a1
vkd3d-shader/hlsl: Implement the InterlockedCompareStore() intrinsic.
2025-01-20 15:41:07 +01:00
Shaun Ren
22ab08f4d8
vkd3d-shader/hlsl: Implement the InterlockedCompareExchange() intrinsic.
2025-01-20 15:41:07 +01:00
Shaun Ren
3b19a4aaf3
vkd3d-shader/hlsl: Implement the InterlockedAnd() intrinsic.
2025-01-20 15:41:07 +01:00
Shaun Ren
660a71ef22
vkd3d-shader/hlsl: Implement the InterlockedAdd() intrinsic.
2025-01-20 15:40:34 +01:00
Shaun Ren
5f943e9110
tests/hlsl: Add tests for valid destination types of atomic operations.
2025-01-20 15:30:54 +01:00
Shaun Ren
b3c13b443f
tests/hlsl: Add tests to check the void return type of atomic ops.
2025-01-20 15:26:10 +01:00
Shaun Ren
728cf1dcfe
tests/hlsl: Add tests to check the types of the value arguments of atomic ops.
2025-01-20 15:26:10 +01:00
Shaun Ren
c8b87f9bd9
tests/hlsl: Add a test for UAV InterlockedCompareExchange().
2025-01-20 15:26:10 +01:00
Shaun Ren
24653b88f3
tests/shader_runner_gl: Bind buffer UAVs for compute shaders.
2025-01-20 15:25:56 +01:00
Shaun Ren
9fab6e4383
tests/shader_runner_gl: Add "opengl" tag.
2025-01-20 15:23:09 +01:00
Shaun Ren
31c3d46925
tests/shader_runner_vulkan: Check if create_shader_stage() fails in create_compute_pipeline().
2025-01-20 14:59:12 +01:00
Conor McCarthy
10edcec030
vkd3d: Do not require the ALLOW_DEPTH_STENCIL flag for depth/stencil formats in GetCopyableFootprints().
2025-01-20 14:37:13 +01:00
Conor McCarthy
e99906f05d
vkd3d: Return correctly aligned depth/stencil sizes from GetCopyableFootprints().
2025-01-20 13:59:46 +01:00
Conor McCarthy
1a4dedbc8d
vkd3d: Return the correct depth/stencil plane format from GetCopyableFootprints().
2025-01-20 13:45:16 +01:00
Giovanni Mascellani
17adde7f73
vkd3d: Describe DXGI_UNKNOWN as having one plane.
...
We're explicitly replacing zero with one in the only place where the
plane count being zero or one makes a difference. It also make sense:
UNKNOWN is used for buffers, which for all intents and purposes have one
plane.
2025-01-20 13:43:36 +01:00
Nikolay Sivov
a082daeb56
vkd3d-shader/hlsl: Implement the isinf() intrinsic.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2025-01-16 19:25:02 +01:00
Henri Verbeet
ce4f2728ba
vkd3d-shader/msl: Get rid of a stray vkd3d_string_buffer_printf() in the VEC4 UINT immediate constant handling.
...
Uncovered by the ininf() test in the next commit. This is why we insist
on test coverage; unfortunately this one slipped through in
fd1beedc07
.
2025-01-16 19:18:08 +01:00
Francisco Casas
cf19b4da49
vkd3d-shader/hlsl: Specialize lowering SM1 casts to int for vertex shaders.
...
Vertex shaders do not have CMP, so we use SLT and MAD.
For example, this vertex shader:
uniform float4 f;
void main(inout float4 pos : position, out float4 t1 : TEXCOORD1)
{
t1 = (int4)f;
}
results in:
vs_2_0
dcl_position v0
slt r0, c0, -c0
frc r1, c0
add r2, -r1, c0
slt r1, -r1, r1
mad oT1, r0, r1, r2
mov oPos, v0
while we have the lower_cmp() pass, each time it is applied many
instructions are generated, so this patch introduces a specialized
version of the cast-to-int lowering for efficiency.
2025-01-16 18:48:35 +01:00
Francisco Casas
2d91bd9200
vkd3d-shader/hlsl: Properly lower casts to int for negative numbers.
...
While it looks complicated, it is what fxc/d3dcompiler does.
A shader as simple as:
float4 f;
float4 main() : sv_target
{
return (int4)f;
}
results in the following instructions:
ps_2_0
def c1, 0, 1, 0, 0
frc r0, c0
cmp r1, -r0, c1.x, c1.y
add r0, -r0, c0
mov r2, c0
cmp r1, r2, c1.x, r1
add r0, r0, r1
mov oC0, r0
2025-01-16 18:46:49 +01:00
Francisco Casas
4f7c117296
tests: Test casting negative floats to int.
...
Turns out we are not doing this correctly in SM1, because the rounding
should be to the number that is closer to zero and lower_casts_to_int()
doesn't do that.
A vertex shader test is added since in SM1 they must rely on the SLT
operation instead of the CMP operation.
2025-01-16 18:43:12 +01:00
Francisco Casas
efd7f2e014
vkd3d-shader/hlsl: Don't lower separate samples with texel offsets.
2025-01-14 17:59:50 +01:00
Francisco Casas
0a5955372a
vkd3d-shader/hlsl: Lower separate SampleGrad() for SM1.
2025-01-14 17:59:50 +01:00
Francisco Casas
00b79cd781
tests: Test SampleGrad() on ps_3_0.
...
fxc compiles this method even without the backcompat option.
Furthermore, it even does it on ps_2_0 despite the fact that it maps to
a texldd instruction, which is not available on plain ps_2_0, nor ps_2_b,
only on ps_2_a and ps_3_0 according to documentation.
It is worth mentioning that the additional offset parameter is not
supported when lowering.
2025-01-14 17:59:50 +01:00
Giovanni Mascellani
c7e173a1ff
vkd3d: Log the requested feature levels for D3D12_FEATURE_FEATURE_LEVELS.
2025-01-13 16:41:53 +01:00
Henri Verbeet
fb4b150f27
demos: Use the assembler to embed HLSL sources.
2025-01-13 16:39:35 +01:00
Henri Verbeet
4227858cfe
vkd3d-shader/hlsl: Move RDEF generation to hlsl_codegen.c.
2025-01-10 20:03:14 +01:00
Francisco Casas
9b3b47b1b8
vkd3d-shader: Avoid left shifting signed integers. (ubsan)
...
Otherwise ubsan reports these errors on the bitwise.shader_test:
libs/vkd3d-shader/hlsl_constant_ops.c:970:50: runtime error: left shift of 1 by 31 places cannot be represented in type 'int'
libs/vkd3d-shader/hlsl_constant_ops.c:970:50: runtime error: left shift of negative value -12
2025-01-10 19:51:55 +01:00
Francisco Casas
8056058aa1
vkd3d-shader: Avoid passing NULL to memset(). (ubsan)
...
Otherwise ubsan reports errors such as:
libs/vkd3d-shader/spirv.c:7266:5: runtime error: null pointer passed as argument 1, which is declared to never be null
2025-01-10 19:51:55 +01:00
Francisco Casas
7b23cd4d3c
vkd3d-shader: Avoid passing NULL to qsort(). (ubsan)
...
Otherwise ubsan reports runtime errors such as:
libs/vkd3d-shader/ir.c:4731:5: runtime error: null pointer passed as argument 1, which is declared to never be null
2025-01-10 19:51:55 +01:00
Francisco Casas
eaf4d0bfbf
vkd3d-shader: Avoid passing NULL to memcpy(). (ubsan)
...
Otherwise when passing "-fsanitize=undefined" to the compiler, ubsan
reports such as:
libs/vkd3d-shader/ir.c:3794:5: runtime error: null pointer passed as argument 1, which is declared to never be null
2025-01-10 19:51:43 +01:00
Elizabeth Figura
29bac62ba2
vkd3d-shader/hlsl: Move the "dimx" and "dimy" fields to the type-specific union.
2025-01-10 19:38:13 +01:00
Elizabeth Figura
392398794f
vkd3d-shader/d3dbc: Do not access the type dimensions for non-numeric types.
2025-01-10 19:24:21 +01:00
Elizabeth Figura
1ff1a51e4b
vkd3d-shader/hlsl: Avoid some uses of the default case when switching over hlsl_base_type.
...
Since we have -Wswitch, this forces the developer to update all relevant
switches when an enum case is added.
Places where the default is just a FIXME are left alone.
2025-01-10 19:24:10 +01:00
Shaun Ren
646087d54c
vkd3d-shader/hlsl: Collect together terms with constant coefficients.
...
We apply distributivity to applicable expressions, specifically with
the following rewrite rules:
(x OPL a) OPR (x OPL b) -> x OPL (a OPR b)
(y OPR (x OPL a)) OPR (x OPL b) -> y OPR (x OPL (a OPR b))
((x OPL a) OPR y) OPR (x OPL b) -> (x OPL (a OPR b)) OPR y
(x OPL a) OPR ((x OPL b) OPR y) -> (x OPL (a OPR b)) OPR y
(x OPL a) OPR (y OPR (x OPL b)) -> (x OPL (a OPR b)) OPR y
where a, b are constants.
2025-01-10 19:17:43 +01:00
Henri Verbeet
b60995b106
tests/shader_runner: Do not use skip() for shader model requirements.
...
Like we did before commit 067e6deee4
.
These skips aren't all that interesting; it's entirely intentional that
e.g. a 2.0-3.0 run wouldn't run 4.0 shaders.
2024-12-19 21:17:05 +01:00
Henri Verbeet
45d9a097e6
vkd3d-shader/hlsl: Move sm4_free_extern_resources() to hlsl_codegen.c.
2024-12-19 21:09:32 +01:00
Henri Verbeet
b143754360
vkd3d-shader/hlsl: Move sm4_get_extern_resources() to hlsl_codegen.c.
2024-12-19 21:09:32 +01:00
Henri Verbeet
0236c480e3
vkd3d-shader/hlsl: Make sm4_get_interpolation_mode() static.
2024-12-19 21:09:32 +01:00
Giovanni Mascellani
4f7eb890ef
vkd3d-shader/ir: Validate OUTCONTROLPOINT source parameters.
2024-12-19 21:06:13 +01:00
Giovanni Mascellani
495e10e93b
vkd3d-shader/ir: Validate INCONTROLPOINT source parameters.
2024-12-19 21:06:13 +01:00
Giovanni Mascellani
513609ef0e
vkd3d-shader/ir: Validate INPUT source parameters.
2024-12-19 21:06:13 +01:00
Giovanni Mascellani
23d4bd1dae
vkd3d-shader/ir: Validate PATCHCONST source parameters using a uniform helper.
2024-12-19 21:06:13 +01:00
Giovanni Mascellani
67420aa8b6
vkd3d-shader/ir: Validate OUTPUT source parameters using a uniform helper.
2024-12-19 21:06:13 +01:00
Giovanni Mascellani
7de7025750
vkd3d-shader/ir: Disallow array signature elements for normalisation levels < SM6.
2024-12-19 21:06:13 +01:00
Giovanni Mascellani
922af42aca
tests/hlsl: Add some clip/cull distance tests.
2024-12-19 20:54:56 +01:00
Anna (navi) Figueiredo Gomes
d5ed4df254
tests/shader_runner: Add a "mesa<23.3" tag.
2024-12-19 20:34:55 +01:00
Henri Verbeet
31ea11fb0e
tests/shader_runner: Ignore the "backcompat" option for shader model 5.1+.
2024-12-19 12:24:02 +01:00
Elizabeth Figura
d164752efc
vkd3d-shader/d3dbc: Introduce d3dbc_parse_register().
2024-12-18 17:30:16 +01:00
Elizabeth Figura
3c53293028
vkd3d-shader/ir: Separate VKD3DSPR_OUTPUT and VKD3DSPR_TEXCRDOUT.
...
This simplifies the IR.
2024-12-18 17:30:16 +01:00
Elizabeth Figura
8132239ed2
vkd3d-shader/ir: Separate VKD3DSPR_ADDR and VKD3DSPR_TEXTURE.
...
This simplifies the IR.
2024-12-18 17:30:16 +01:00
Elizabeth Figura
0df5dea653
vkd3d-shader/d3d-asm: Define register names in a table.
2024-12-18 17:30:16 +01:00
Elizabeth Figura
65f3f56f63
vkd3d-shader/d3dbc: Normalize to a single VKD3DSPR_CONST register set when reading.
...
We don't need VKD3DSPR_CONST2 et al in the IR, even for disassembly.
2024-12-18 17:30:16 +01:00
Elizabeth Figura
118617916a
vkd3d-shader: Explicitly translate between d3dbc and vsir register types.
2024-12-18 17:30:16 +01:00
Elizabeth Figura
dd450c526f
tests/d3d12: Make the dtof test a bit more interesting.
2024-12-18 17:30:16 +01:00
Elizabeth Figura
efe686105d
vkd3d-shader/spirv: Correctly implement DTOU.
2024-12-18 17:30:16 +01:00
Elizabeth Figura
4130ce5bb9
vkd3d-shader/spirv: Correctly implement DTOI.
2024-12-18 17:30:16 +01:00
Elizabeth Figura
f416713608
vkd3d-shader/spirv: Correctly implement DTOF.
2024-12-18 17:30:16 +01:00
Francisco Casas
825784322d
vkd3d-shader/ir: Properly lower texldp.
2024-12-18 17:30:15 +01:00
Francisco Casas
02fc26507b
tests/hlsl: Test tex2Dproj().
2024-12-18 17:29:10 +01:00
Francisco Casas
7cc802afd7
vkd3d-shader/ir: Properly lower texldb.
2024-12-18 17:27:43 +01:00
Francisco Casas
59df26af79
vkd3d-shader/hlsl: Lower sample lods for SM1.
...
For SM1 the lod bias should be in src0.w.
2024-12-18 17:27:43 +01:00
Anna (navi) Figueiredo Gomes
f09ac4959e
vkd3d-shader/hlsl: Implement the GatherCmp() methods.
2024-12-18 17:27:43 +01:00
Anna (navi) Figueiredo Gomes
fd8bcc188f
tests/hlsl: Add GatherCmp() tests.
2024-12-18 17:27:43 +01:00
Conor McCarthy
8d479d2ea6
vkd3d-shader/dxil: Implement DX intrinsic EvalCentroid.
2024-12-18 17:27:43 +01:00
Conor McCarthy
1bb3b13c0a
vkd3d-shader/dxil: Implement DX intrinsic EvalSampleIndex.
2024-12-18 17:27:43 +01:00
Giovanni Mascellani
ed552e4519
tests/hlsl: Add tests for the EvaluateAttribute*() intrinsics.
...
Based on earlier tests by Conor McCarthy.
2024-12-18 17:27:31 +01:00
Giovanni Mascellani
a68fd1b0de
vkd3d-shader/ir: Simplify shader_register_normalise_arrayed_addressing().
...
The two branches do essentially the same thing, but in different
ways and each one omitting different details. In particular there
is no need to discriminate on whether the register is a relative
address, we can just copy the NULL pointer.
2024-12-17 16:44:00 +01:00
Giovanni Mascellani
3db458697e
vkd3d-shader/ir: Remove a redundant assignment.
...
The hull shader control point normalisation pass already ensures
that output registers in the control point phase have two
indices (the control point index and the register index).
2024-12-17 16:44:00 +01:00
Henri Verbeet
e8cc288426
vkd3d-shader/hlsl: Move CTAB generation to hlsl_codegen.c.
2024-12-17 16:42:53 +01:00
Henri Verbeet
c681673993
vkd3d-shader/d3dbc: Separate writing the comment bytecode from write_sm1_uniforms().
...
Consistent with how D3DXFindShaderComment() allows looking up comments
by tag. This also makes it a little easier to move CTAB generation out
of d3dbc.c.
2024-12-17 16:42:53 +01:00
Giovanni Mascellani
00538c377e
vkd3d-shader/ir: Validate OUTCONTROLPOINT destination parameters.
2024-12-17 16:39:32 +01:00
Giovanni Mascellani
3dc7f322cc
vkd3d-shader/ir: Validate INCONTROLPOINT destination parameters.
2024-12-17 16:39:32 +01:00
Giovanni Mascellani
7d87b4e869
vkd3d-shader/ir: Validate OUTPUT destination parameters.
2024-12-17 16:39:32 +01:00
Giovanni Mascellani
b194e5dc4e
vkd3d-shader/ir: Validate PATCHCONST destination parameters using a uniform helper.
2024-12-17 16:39:32 +01:00
Giovanni Mascellani
38a5c905db
vkd3d-shader/ir: Validate INPUT destination parameters using a uniform helper.
2024-12-17 16:39:32 +01:00
Giovanni Mascellani
8d4b790eb2
vkd3d-shader/ir: Represent information about I/O registers with a table.
...
It makes the code quite longer, but also easier to read and extend
with further properties.
A (desirable) side effect of this commit is that it is checked
whether I/O register types are legal depending on the shader type
and phase, while before that was assumed.
This commit introduces enum vsir_io_reg_type and enum vsir_phase
which shadow enum vkd3d_shader_register_type and enum
vkd3d_shader_opcode, with the goal of making the data tables
smaller.
2024-12-17 16:39:32 +01:00
Elizabeth Figura
27c7776947
tests: Use fail(sm<5) instead of [require] for uav-atomics.
2024-12-17 16:37:41 +01:00
Elizabeth Figura
8fcbbfb8b1
tests/shader_runner: Test versions where the compilation result changes.
...
Adjust the algorithm for deciding for which profiles to test compilation.
We first ensure that if the compilation result changes (most often as the result
of a feature introduced in a specific version), we test the versions immediately
on either side of the change, to validate that vkd3d-shader is emulating the
same version behaviour.
We then ensure that we are testing at least one version from each set of sm1,
sm4, and sm6.
2024-12-17 16:35:09 +01:00
Elizabeth Figura
067e6deee4
tests/shader_runner: Test HLSL compilation in a separate pass.
...
Mainly in order to not waste time compile-testing the same version
more than once [as we do with e.g. the d3d11 and d3d12 runners, or
d3d12, GL, and Vulkan].
2024-12-17 16:24:00 +01:00
Elizabeth Figura
e91c07e1de
tests/shader_runner: Record HLSL todo/fail state for each shader model.
...
When a shader fails to compile for a range of versions, we want to validate that
we are correctly implementing that behaviour. E.g. if a feature requires shader
model 5.0, we should validate that it compiles correctly with 5.0 (which we do),
but also that it *fails* to compile with 4.1 (which we do not).
The obvious and simple solution is to simply run compile tests for each version.
There are, however, at least 12 versions of HLSL up to and including 6.0, at
least 10 of which are known to introduce new features. Shader compilation takes
about 10-15% of the time that draw and dispatch does, both for native and
(currently) vkd3d. Testing every version for every shader would add a
noticeable amount of time to the tests.
In practice, the interesting versions to test for most shaders are:
* At least one from each range 1-3, 4-5, and 6. It's common enough for the
semantics of the HLSL to differ between bytecode formats, or for features to
be added or removed across those boundaries.
* If the shader requires a given feature, we want to test both sides of the cusp
to ensure we're requiring the same version for the feature.
In practice this is 3 or 4 versions, which is measurably less than the 12 we'd
otherwise be running.
In order to achieve this goal of testing only the 3 or 4 interesting versions
for a shader, we need to know what version is actually required for a feature.
This is encoded in the shader itself using e.g. [pixel shader fail(sm<5)].
This patch therefore implements the first step towards this goal, namely,
determining which versions succeed and fail, so we can figure out which ones are
interesting.
We could require the test writer to specify which versions are interesting ahead
of time (e.g. "for version in 2.0 4.1 5.0 6.0") but this is both redundant (and
there are a *lot* of tests that need some feature gate) and easy for a test
writer to get wrong by missing interesting versions.
2024-12-17 16:18:21 +01:00
Elizabeth Figura
de615609dc
vkd3d-shader/d3dbc: Use struct vkd3d_shader_instruction instead of struct sm1_instruction.
2024-12-16 17:11:57 +01:00
Elizabeth Figura
77ac13e6b9
vkd3d-shader/d3dbc: Use struct vkd3d_shader_src_param instead of struct sm1_src_register.
2024-12-16 17:11:57 +01:00
Elizabeth Figura
1e43088662
vkd3d-shader/d3dbc: Use struct vkd3d_shader_dst_param instead of struct sm1_dst_register.
2024-12-16 17:11:57 +01:00
Henri Verbeet
c4f69f4d3d
vkd3d-shader/hlsl: Prefer overload candidates without component count widening.
2024-12-16 17:09:40 +01:00
Henri Verbeet
64bb4150f0
vkd3d-shader/hlsl: Prefer overload candidates without component type narrowing.
2024-12-16 17:09:40 +01:00
Henri Verbeet
32d432ab5e
vkd3d-shader/hlsl: Prefer overload candidates with matching component types.
2024-12-16 17:09:40 +01:00
Henri Verbeet
6b8878377f
vkd3d-shader/hlsl: Prefer overload candidates with matching component type classes.
2024-12-16 17:09:40 +01:00
Henri Verbeet
63fce3062e
vkd3d-shader/hlsl: Prefer overload candidates without component count narrowing.
2024-12-16 17:09:40 +01:00
Henri Verbeet
cdf6100fe5
tests: Add yet more overload resolution tests.
2024-12-16 17:09:40 +01:00
Elizabeth Figura
5827197246
tests/shader_runner: Don't bother distinguishing directive substrings.
...
Consider ']' a terminator for any string.
2024-12-12 17:28:45 +01:00
Elizabeth Figura
830bdd0037
tests/shader_runner: Use a separate variable for shader type.
2024-12-12 17:26:49 +01:00
Elizabeth Figura
edb36c078f
tests/shader_runner: Use is_todo instead of separate shader states.
2024-12-12 17:26:37 +01:00
Giovanni Mascellani
dd0ed989a1
vkd3d-shader/d3dbc: Normalise I/O register write masks when not disassembling.
...
Sometimes SM1-3 shaders contain write masks that exceed the
signature element masks. That happens because SM1-3 shaders do not
have a concept of signature and signature masks, and OTOH aren't
always able to express any given write mask.
In VSIR we don't want to deal with I/O register masks exceeding the
corresponding signature element mask or usage mask, because, for
instance, for higher shader models it can complicate dealing with
DCL_INDEX_RANGE. In order to have uniform rules for all shader
models we normalise masks coming from SM1-3 shaders.
We don't do that normalisation when disassembling, in order to
preserve the expected output.
2024-12-12 17:21:49 +01:00
Giovanni Mascellani
64126a00c3
vkd3d-shader/ir: Give more meaningful names to I/O normalisation levels.
...
The previous names "not normalised" and "fully normalised" have meanings
which are likely to change with time. OTOH including a description of the
normalisation level in the enumerant seems excessive. Relating
normalisation levels to shader model versions might be a reasonable
compromise.
2024-12-12 17:21:49 +01:00
Elizabeth Figura
09095403ac
vkd3d-shader/hlsl: Store swizzles in vsir format.
...
The previous format matched sm1 and sm4, but if we're going to be feeding
everything through vsir, we want vsir's format.
2024-12-12 17:20:23 +01:00
Elizabeth Figura
474a0ac4e2
vkd3d-shader/hlsl: Use swizzle helpers in more places.
2024-12-12 17:11:53 +01:00
Elizabeth Figura
a905a78a96
vkd3d-shader/hlsl: Use a structure for matrix swizzles.
2024-12-12 17:11:27 +01:00
Elizabeth Figura
70e2148fcb
vkd3d-shader/hlsl: Document matrix swizzles.
2024-12-12 16:56:52 +01:00
Victor Chiletto
ed6061dfae
vkd3d-shader/hlsl: Drop the _ir_ infix from enum hlsl_loop_unroll_type.
2024-12-12 16:54:07 +01:00
Victor Chiletto
a1d995e740
vkd3d-shader/hlsl: Unroll loops with conditional jumps.
2024-12-12 16:54:04 +01:00
Victor Chiletto
351d58a95b
vkd3d-shader/hlsl: Partially defer continue resolution.
...
We need 'for' iter blocks to be separate for loop unrolling.
2024-12-12 16:41:34 +01:00
Victor Chiletto
5d8448a44e
vkd3d-shader/hlsl: Remove loop_unrolling_find_unrollable_loop().
...
Since loop unrolling doesn't clone the entire program anymore, we can
express it as a hlsl_transform_ir() transform.
2024-12-12 16:41:34 +01:00
Victor Chiletto
de3a365fea
vkd3d-shader/hlsl: Do not clone the entire program for loop unrolling.
2024-12-12 16:41:34 +01:00
Victor Chiletto
0a8c4a6fa2
vkd3d-shader/hlsl: Run copy propagation incrementally during loop unrolling.
2024-12-12 16:41:34 +01:00
Victor Chiletto
6c3a60cc54
vkd3d-shader/hlsl: Constant fold casts to boolean.
2024-12-12 16:41:34 +01:00
Victor Chiletto
7bee33f948
vkd3d-shader/hlsl: Allow copy propagation to be stopped early.
2024-12-12 16:41:34 +01:00
Victor Chiletto
3cb9e8dc3b
vkd3d-shader/hlsl: Explicitly track the copy propagation state stack.
2024-12-12 16:41:18 +01:00
Elizabeth Figura
77843aa837
vkd3d-shader/ir: Always initialise "*control_point_count" in vsir_signature_from_register_type().
...
Avoid a spurious -Wmaybe-uninitialized warning.
2024-12-11 15:33:06 +01:00
Shaun Ren
2c9cf7c78b
vkd3d-shader/hlsl: Implement normalization of binary expressions.
...
We normalize binary expressions by attempting to group constants
together, in order to facilitate further simplification of the
expressions.
For any binary operator OP, non-constants x, y, and constants a, b, we
apply the following rewrite rules:
a OP x -> x OP a, if OP is commutative.
(x OP a) OP b -> x OP (a OP b), if OP is associative.
(x OP a) OP y -> (x OP y) OP a, if OP is associative and commutative.
x OP (y OP a) -> (x OP y) OP a, if OP is associative.
Note that we consider floating point operations to be
non-associative.
2024-12-11 15:32:22 +01:00
Francisco Casas
65b67e84a8
vkd3d-shader/tpf: Remove hlsl_ctx from tpf_compiler.
...
This completes the hlsl->vsir->tpf translation.
2024-12-10 15:52:52 +01:00
Francisco Casas
f22729461e
vkd3d-shader/hlsl: Store hull and domain shader properties in vsir_program.
...
The alternative to adding the vsir_program->tess_output_primitive and
vsir_program->tess_partitioning fields would be to emit the vsir
DCL_TESSELLATOR_OUTPUT_PRIMITIVE and DCL_TESSELLATOR_PARTITIONING
instructions, like DXIL does, but I think that the preference is to store
these kind of data directly in the vsir_program.
2024-12-10 15:52:52 +01:00
Francisco Casas
347e7a396d
vkd3d-shader/hlsl: Generate CTAB outside sm1_generate_vsir().
...
For consistency with the sm4_generate_rdef() and sm4_generate_vsir()
functions.
2024-12-10 15:52:52 +01:00
Francisco Casas
ca9bb2e089
vkd3d-shader/hlsl: Generate RDEF outside tpf_compile().
2024-12-10 15:52:52 +01:00
Francisco Casas
ecddc39b31
vkd3d-shader/hlsl: Store SM4 constant buffer declarations in vsir program.
2024-12-10 15:52:52 +01:00
Francisco Casas
aa3a716249
vkd3d-shader/hlsl: Allow lowering separate sampler arrays on deref offset 0.
2024-12-10 15:52:52 +01:00
Francisco Casas
2c9269ac3a
vkd3d-shader/hlsl: Allocate samplers by decreasing bind count in SM1.
2024-12-10 15:52:50 +01:00
Francisco Casas
455846a305
vkd3d-shader/hlsl: Support combined samplers from texture arrays.
2024-12-10 15:51:43 +01:00
Francisco Casas
3a6bf3be24
vkd3d-shader/hlsl: Lower separated samplers for SM1.
...
The combined sampler is created as a SAMPLER instead of a TEXTURE
because that fits all our current infrastructure. The only problem is
that in the CTAB it must appear as a Texture, so the new field
hlsl_type.is_combined_sampler is added.
Co-authored-by: Elizabeth Figura <zfigura@codeweavers.com >
2024-12-10 15:51:43 +01:00
Francisco Casas
58d318719c
tests: Test sampler array allocation.
2024-12-10 15:51:34 +01:00
Francisco Casas
a0a555878f
tests: Add additional sampler allocation tests for SM1.
2024-12-10 14:02:00 +01:00
Giovanni Mascellani
c1df64b3a6
vkd3d-shader/ir: Check that signature elements do not conflict with each other.
2024-12-09 16:11:34 +01:00
Giovanni Mascellani
b6a00579a2
vkd3d-shader/ir: Validate the signature element register index, for some sysvals.
2024-12-09 16:11:34 +01:00
Giovanni Mascellani
59a3a8e2d6
vkd3d-shader/ir: Validate the signature element stream index.
2024-12-09 16:11:34 +01:00
Giovanni Mascellani
db5a3197b7
vkd3d-shader/ir: Validate the register index and count for signature elements.
2024-12-09 16:11:34 +01:00
Giovanni Mascellani
267c70fa55
vkd3d-shader/ir: Check that signature element masks are left-aligned with in a DCL_INDEX_RANGE.
2024-12-09 16:10:47 +01:00
Giovanni Mascellani
703da18955
vkd3d-shader/ir: Check that the DCL_INDEX_RANGE effective mask stabilizes after one iteration.
2024-12-09 16:10:47 +01:00
Henri Verbeet
bbeecfc835
vkd3d: Drop smaller pools in d3d12_command_allocator_reset_descriptor_pool_array().
...
Effectively consolidating them.
2024-12-09 16:10:22 +01:00
Francisco Casas
d2feb33b47
vkd3d-shader/hlsl: Store SM4 texture declarations in the vsir program.
2024-12-09 16:09:16 +01:00
Francisco Casas
1d290bf5db
vkd3d-shader/hlsl: Store SM4 sampler declarations in the vsir program.
...
Looking at the implementation of shader_sm4_read_dcl_sampler(), vsir
stores the resource index range both in
vkd3d_shader_instruction.declaration.sampler.range
and in the
vkd3d_shader_instruction.declaration.sampler.src.reg.idx[1-2]
indexes, so we do the same.
It is also worth noting that for shader models lower than 5.1, vsir
has a normalization on the ins->declaration src register indexes.
Refer to the following comment:
/* SM5.1 places a symbol identifier in idx[0] and moves
* other values up one slot. Normalize to SM5.1. */
on shader_sm4_read_param().
This normalization is also added to the generated vsir instructions.
2024-12-09 16:09:16 +01:00
Francisco Casas
37a61bf41a
vkd3d-shader/hlsl: Store the global flags in the vsir program.
2024-12-09 16:09:16 +01:00
Francisco Casas
d3108de72a
vkd3d-shader/hlsl: Store ROV feature requirement in the vsir_program.
2024-12-09 16:09:16 +01:00
Francisco Casas
d9c4a257c2
vkd3d-shader/dxbc: Parse the SFI0 ROV requirement.
2024-12-09 16:09:16 +01:00
Henri Verbeet
b484288a82
vkd3d-shader/spirv: Parse SPIR-V instructions.
2024-12-09 16:09:16 +01:00
Giovanni Mascellani
ac2901d2cb
vkd3d-shader/spirv: Parse the SPIR-V instruction schema.
2024-12-09 16:09:16 +01:00
Giovanni Mascellani
9b4f5dab77
vkd3d-shader/spirv: Parse the SPIR-V id bound.
2024-12-09 16:09:16 +01:00
Giovanni Mascellani
3f548ccf9c
vkd3d-shader/spirv: Parse the SPIR-V generator magic number.
2024-12-09 16:09:16 +01:00
Giovanni Mascellani
e218dae281
vkd3d-shader/spirv: Parse the SPIR-V version number.
2024-12-09 16:08:33 +01:00
Giovanni Mascellani
6cac18e395
vkd3d-shader/spirv: Parse the SPIR-V magic number.
2024-12-09 15:41:24 +01:00
Giovanni Mascellani
49fba97b0a
vkd3d-shader/spirv: Introduce a SPIR-V parser.
2024-12-09 14:22:24 +01:00
Conor McCarthy
f3fac95bb6
tests/hlsl: Add int64 wave op tests.
2024-12-09 14:21:49 +01:00
Conor McCarthy
50306a8b08
tests/hlsl: Add uint64 wave op tests.
2024-12-09 14:20:28 +01:00
Conor McCarthy
f0f8bb3f36
tests/hlsl: Add float64 wave op tests.
2024-12-09 14:17:05 +01:00
Feifan He
9d4bcc951d
vkd3d-shader/msl: Implement VKD3DSIH_USHR.
2024-12-05 21:26:03 +01:00
Feifan He
138e7caa03
vkd3d-shader/msl: Implement VKD3DSIH_ISHR.
2024-12-05 21:26:03 +01:00
Feifan He
5d6ed0fa30
vkd3d-shader/msl: Implement VKD3DSIH_ISHL.
2024-12-05 21:26:03 +01:00
Feifan He
a425c242a4
vkd3d-shader/msl: Implement VKD3DSIH_MAD.
2024-12-05 21:26:03 +01:00
Feifan He
8e0de82c74
vkd3d-shader/msl: Implement support for VKD3DSPDM_SATURATE modifiers.
2024-12-05 21:26:03 +01:00
Feifan He
ebf5828542
vkd3d-shader/msl: Implement VKD3DSIH_ELSE.
2024-12-05 21:25:35 +01:00
Feifan He
bbe10dcf17
vkd3d-shader/msl: Implement VKD3DSIH_NOT.
2024-12-05 21:13:29 +01:00
Giovanni Mascellani
74fa51d57c
vkd3d-shader/ir: Check that DCL_INDEX_RANGE ranges do not overlap with unrelated signature elements.
2024-12-05 21:06:31 +01:00
Giovanni Mascellani
aae0a74d60
vkd3d-shader/ir: Validate the DCL_INDEX_RANGE instruction.
2024-12-05 21:06:31 +01:00
Giovanni Mascellani
38c53dca08
vkd3d-shader/ir: Introduce a helper function to determine the signature for a register type.
2024-12-05 21:05:50 +01:00
Giovanni Mascellani
b5e1c45827
vkd3d-shader/ir: Validate the register type for registers used as relative addresses.
2024-12-05 21:00:43 +01:00
Giovanni Mascellani
abf7a91834
vkd3d-shader/ir: Validate the array index when it is statically known.
2024-12-05 21:00:43 +01:00
Giovanni Mascellani
239c88e8d3
vkd3d: Do not use more than a few million descriptors in Vulkan heap set layouts.
...
Currently, when using Vulkan heaps, we create descriptor set
layouts with as many descriptors as allowed by the Vulkan
implementation limits. For some implementations this can mean
hundreds of millions of descriptors or more, which is wasteful,
given that even on the best resource binding tier Direct3D 12
applications should not expect to have more than a million usable
descriptors.
Recently this began being a problem, because since Mesa 24.2.7
the Intel driver advertises more than 200 million descriptors,
but pipeline compilation takes linear RAM in the number of
descriptors declared in the pipeline layout. This means that
compiling even a simple shader requires 10-20 GB of RAM.
In order to avoid using too much memory, with this commit we clamp
the number of descriptors declared in the set layouts to how many
we actually need to guarantee tier 3 resource binding support.
2024-12-05 21:00:03 +01:00
Conor McCarthy
a43f6a6600
vkd3d: Create descriptor pools of geometrically increasing size.
...
Creating a pool of 16k descriptors is wasteful if an allocator only uses
a fraction of them, so start at 1k and double for each subsequent
allocation until 16k is reached.
2024-12-05 20:54:45 +01:00
Conor McCarthy
e729ceeb1a
vkd3d: Create separate descriptor pools for each vkd3d descriptor type.
...
Now that our Vulkan descriptor sets contain only a single vkd3d
descriptor type, we're able to create descriptor pools containing only a
single vkd3d descriptor type as well. This avoids wasting unallocated
descriptors of one type when we run out of descriptors of another type.
2024-12-05 20:54:45 +01:00
Henri Verbeet
a97c7c1fda
vkd3d: Introduce d3d12_descriptor_set_layout_init().
2024-12-05 20:54:45 +01:00
Conor McCarthy
19c6df1adb
vkd3d: Introduce vkd3d_vk_descriptor_pool_array_destroy_pools().
2024-12-05 20:54:45 +01:00
Conor McCarthy
8dc9fe725a
vkd3d: Introduce vkd3d_vk_descriptor_pool_array_pop().
2024-12-05 20:54:45 +01:00
Conor McCarthy
9d46a1863b
vkd3d: Introduce vkd3d_vk_descriptor_pool_array_push().
2024-12-05 20:54:45 +01:00
Conor McCarthy
7c0ce25bb7
vkd3d: Introduce vkd3d_vk_descriptor_pool_array_push_array().
2024-12-05 20:54:45 +01:00
Conor McCarthy
3c620e88a0
vkd3d: Introduce struct vkd3d_vk_descriptor_pool_array.
2024-12-05 20:54:45 +01:00
Conor McCarthy
4a94bfc2f6
vkd3d: Store only a single vkd3d descriptor type in each Vulkan descriptor set.
...
We currently create statically sized descriptor pools, shared among
different descriptor types. Once we're unable to allocate a descriptor
set from a pool, we create a new pool. The unfortunate but predictable
consequence is that when we run out of descriptors of one type, we waste
any unallocated descriptors of the other types.
Dynamically adjusting the pool sizes could mitigate the issue, but it
seems non-trivial to handle all the edge cases, particularly in
situations where the descriptor count ratios change significantly
between frames. Instead, by storing only a single vkd3d descriptor type
in each Vulkan descriptor set we're able to create separate descriptor
pools for each vkd3d descriptor type, which also avoids the issue.
The main drawback of using separate descriptor sets for each descriptor
type is that we can no longer pack all bounded descriptor ranges into a
single descriptor set, potentially leaving fewer descriptor sets
available for unbounded ranges. That seems worth it, but we may end up
having to switch to a more complicated strategy if this ends up being a
problem on Vulkan implementations with a very limited number of
available descriptor sets.
2024-12-05 20:54:45 +01:00
Elizabeth Figura
01117c716d
vkd3d-shader/hlsl: Remove unused expr ops.
...
These correspond to specific SM1 opcodes which we don't use (and which the native compiler never uses either).
2024-12-04 14:38:32 +01:00
Elizabeth Figura
a3c74fd429
tests: Add a reflection test for shader model 4.0.
2024-12-04 14:37:33 +01:00
Giovanni Mascellani
82963035e9
vkd3d-shader/ir: Validate the control point index when it is statically known.
2024-12-04 14:36:36 +01:00
Feifan He
a06e664730
vkd3d-shader/msl: Implement VKD3DSIH_RSQ.
2024-12-04 14:26:20 +01:00
Feifan He
bc67f2eb75
vkd3d-shader/msl: Implement VKD3DSIH_MIN.
2024-12-04 14:26:20 +01:00
Feifan He
ab2cb43e15
vkd3d-shader/msl: Implement VKD3DSIH_MAX.
2024-12-04 14:26:20 +01:00
Feifan He
64ea033c81
vkd3d-shader/msl: Implement VKD3DSIH_LOG.
2024-12-04 14:26:20 +01:00
Feifan He
b1e6dbe83f
vkd3d-shader/msl: Handle SV_IS_FRONT_FACE inputs.
2024-12-04 14:26:20 +01:00
Feifan He
568296c88f
vkd3d-shader/msl: Implement VKD3DSIH_ROUND_NE.
2024-12-04 14:26:20 +01:00
Feifan He
610a11ddf8
vkd3d-shader/msl: Implement VKD3DSIH_IF and VKD3DSIH_ENDIF.
2024-12-04 14:26:20 +01:00
Feifan He
28068c9d4c
vkd3d-shader/msl: Implement VKD3DSIH_ROUND_NI.
2024-12-04 14:26:20 +01:00
Elizabeth Figura
36fda8e28c
vkd3d-shader: Correct the disassembly for POSITIONT.
2024-12-03 14:49:02 +01:00
Elizabeth Figura
3d6f836801
vkd3d-shader: Fix the disassembly names of IFC and BREAKC.
2024-12-03 14:49:02 +01:00
Elizabeth Figura
7a7dc4bf0e
vkd3d-shader/d3dbc: Mark some more instructions as version-limited.
2024-12-03 14:47:00 +01:00
Elizabeth Figura
e2961a2e3c
vkd3d-shader/d3dbc: Omit unnecessary instruction maximum versions.
2024-12-03 14:47:00 +01:00
Feifan He
a81a9fb7bc
vkd3d-shader/msl: Implement VKD3DSIH_LTO.
2024-12-03 14:44:32 +01:00
Feifan He
24753747a1
vkd3d-shader/msl: Implement VKD3DSIH_EXP.
2024-12-03 14:44:32 +01:00
Feifan He
ac897781ba
vkd3d-shader/msl: Implement VKD3DSIH_IEQ.
2024-12-03 14:44:32 +01:00
Feifan He
67dd1d2b0c
vkd3d-shader/msl: Handle the VKD3DSIM_LINEAR interpolation modifier on inputs.
2024-12-03 14:42:49 +01:00
Feifan He
8ae6a04561
vkd3d-shader/msl: Implement VKD3DSIH_SQRT.
2024-12-03 14:42:27 +01:00
Feifan He
77ed788a60
vkd3d-shader/msl: Implement VKD3DSIH_DP2.
2024-12-03 14:42:27 +01:00
Feifan He
6f7ee57e29
vkd3d-shader/msl: Implement VKD3DSIH_DP4.
2024-12-03 14:42:27 +01:00
Feifan He
046e9b5286
vkd3d-shader/msl: Implement VKD3DSIH_DP3.
2024-12-03 14:42:19 +01:00
Henri Verbeet
74365417ac
vkd3d-shader/hlsl: Output the candidates for ambiguous function calls.
2024-12-03 14:38:33 +01:00
Henri Verbeet
4ca4dc0b2a
vkd3d-shader/hlsl: Introduce hlsl_dump_ir_function_decl().
2024-12-03 14:38:33 +01:00
Henri Verbeet
0b726e4408
vkd3d-shader/hlsl: Introduce hlsl_dump_type().
2024-12-03 14:38:33 +01:00
Henri Verbeet
d0e4331640
vkd3d-shader/hlsl: Use hlsl_error() instead of hlsl_fixme() for ambiguous function calls.
...
This changes the return code, and some tests start passing as a result.
2024-12-03 14:38:33 +01:00
Giovanni Mascellani
1c93d706d7
vkd3d-shader/ir: Merge removing I/O declarations in the general instruction lowering pass.
2024-12-03 14:36:13 +01:00
Giovanni Mascellani
4717775abb
vkd3d-shader/ir: Remove I/O declarations before flattening hull shader phases.
2024-12-03 14:19:50 +01:00
Giovanni Mascellani
4ef946287c
vkd3d-shader/ir: Remove I/O declarations before normalising hull shader control point I/O.
2024-12-03 14:19:50 +01:00
Giovanni Mascellani
66382f0d68
vkd3d-shader/ir: Remove I/O declarations before I/O normalisation.
2024-12-03 14:19:50 +01:00
Giovanni Mascellani
18e422dfe4
vkd3d-shader/ir: Encode I/O declarations in vsir_program.
...
Most I/O registers are already described by the shader signatures.
The registers that are not do not have any property other then
being used by the program or not, so they can be collectively
described with a bitmap.
2024-12-03 14:19:24 +01:00
Giovanni Mascellani
a92b602b33
vkd3d-shader/spirv: Merge emitting input and output registers.
...
The register storage class is now represented in
vkd3d_register_builtins, so the spirv_compiler_emit_io_register()
doesn't need to know it from the caller.
2024-12-03 13:48:39 +01:00
Elizabeth Figura
8bc9e15618
vkd3d-shader/hlsl: Translate invalid implicit-size arrays to an error type.
...
Instead of returning nonsense (such as, currently, a type with zero size).
In practice this improves error reporting for shaders such as the following:
void func(float x[])
{
float y[] = {x};
}
Currently this outputs a nonsense
test.hlsl:1:19: E5002: Implicit size arrays not allowed in function parameters.
test.hlsl:3:7: E5002: Implicit size arrays need to be initialized.
With this patch the second warning is removed.
2024-12-03 12:39:27 +01:00
Elizabeth Figura
e060b47330
vkd3d-shader/hlsl: Return an error expression when a function is used as a variable.
2024-12-03 12:39:27 +01:00
Elizabeth Figura
c553c45f00
vkd3d-shader/hlsl: Move the numeric type check to add_constructor().
2024-12-03 12:39:27 +01:00
Elizabeth Figura
97eac342d3
vkd3d-shader/hlsl: Do not abort parsing when invalid modifiers are used.
2024-12-03 12:39:27 +01:00
Elizabeth Figura
9c70348b39
vkd3d-shader/hlsl: Do not abort when modifying a const expression.
2024-12-03 12:39:27 +01:00
Giovanni Mascellani
3264378fa0
tests: Print the file name instead of the test name in test logs.
...
Some test programs, particularly the shader runner, are built from
many different files nowadays, and a line number is relatively
cumbersome to use if you don't know which file that line comes from.
2024-12-03 12:38:26 +01:00
Giovanni Mascellani
73be28a252
tests: Use plain skip() when skipping a test in the shader runner.
...
The context already gives the location in the .shader_test file.
2024-12-03 12:38:26 +01:00
Henri Verbeet
39cbef9e01
tests: Get rid of some redundant "glsl" todo's.
...
These are redundant either because we already have a broader tag like
"sm<6", or because the tests are never executed with the GLSL runner in
the first place.
2024-12-02 17:13:17 +01:00
Elizabeth Figura
d56601c8d0
vkd3d-shader/ir: Implement exponential fog.
2024-12-02 17:12:20 +01:00
Elizabeth Figura
1fbbc82f3a
vkd3d-shader/ir: Allow controlling the fog source through a parameter.
2024-12-02 17:12:16 +01:00
Elizabeth Figura
fc98cb482f
vkd3d-shader/ir: Add a couple of traces for signature remapping.
2024-12-02 17:12:13 +01:00
Elizabeth Figura
f86d1e72a4
vkd3d-shader/ir: Allow controlling fog through parameters.
...
Fog requires several parameters to even implement the most basic of
functionality correctly, so this commit is relatively large.
2024-12-02 17:12:06 +01:00
Elizabeth Figura
a1de406de4
vkd3d-shader/spirv: Handle SSA registers in spirv_compiler_get_register_info().
...
Instead of in spirv_compiler_emit_load_reg(). This allows arbitrary swizzles to
work and reduces the amount of duplicated code.
2024-12-02 17:08:43 +01:00
Feifan He
7d2819249b
vkd3d-shader/msl: Implement support for the VKD3DSPR_DEPTHOUT register.
2024-11-30 14:25:10 +01:00
Feifan He
b7203b0bbe
tests/shader_runner_metal: Implement clears.
2024-11-30 14:14:26 +01:00
Feifan He
004a6d3055
tests/shader_runner_metal: Implement depth texture and state.
2024-11-30 14:12:21 +01:00
Nikolay Sivov
949708450b
vkd3d-compiler: Support fx_4_0 sources embedded in DXBC containers.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-30 14:03:50 +01:00
Feifan He
9619582d1b
vkd3d-shader/msl: Implement VKD3DSIH_ROUND_Z.
2024-11-27 14:00:51 +01:00
Feifan He
778382cd94
vkd3d-shader/msl: Implement VKD3DSIH_ROUND_PI.
2024-11-27 14:00:51 +01:00
Feifan He
a7ae6404de
vkd3d-shader/msl: Implement VKD3DSIH_FTOU.
2024-11-27 14:00:51 +01:00
Feifan He
9fd7f4f1ec
vkd3d-shader/msl: Implement VKD3DSIH_UTOF.
2024-11-27 14:00:51 +01:00
Feifan He
ffbade9ed1
vkd3d-shader/msl: Implement VKD3DSIH_FTOI.
2024-11-27 14:00:50 +01:00
Feifan He
16409569fd
vkd3d-shader/msl: Implement VKD3DSIH_ITOF.
2024-11-27 14:00:50 +01:00
Giovanni Mascellani
9e0c02a0ea
vkd3d-shader/ir: Evaluate OUTCONTROLPOINT usage in the patch constant phase directly.
...
Instead of using DCL_INPUT.
The main goal here is to eventually get rid of the I/O
declaration instructions. A positive side effect is that we don't
add a useless barrier to shaders which have a DCL_INPUT instruction
in the patch constant phase but don't actually read OUTCONTROLPOINT
registers.
2024-11-27 13:59:39 +01:00
Giovanni Mascellani
1cfe23569c
vkd3d-shader/ir: Synthesize the default control point phase in the HS control point I/O normaliser.
...
This makes it available to all backends, without requiring an
ad-hoc solution for each of them. It also gets rid of an
undocumented flag we're currently passing to
DCL_CONTROL_POINT_PHASE.
2024-11-27 13:57:09 +01:00
Francisco Casas
198c3dc7b9
vkd3d-shader/hlsl: Remove hlsl_ir_vsir_instruction_ref, again.
2024-11-27 13:03:15 +01:00
Francisco Casas
d6d6f37578
vkd3d-shader/hlsl: Migrate SM4 control flow instructions to the vsir program.
...
Translate the instructions that contain hlsl_blocks. Also move
other control flow instructions such as HS_CONTROL_POINT_PHASE and
RET to the vsir_program so that we can directly iterate over it now.
2024-11-27 13:02:53 +01:00
Francisco Casas
81fa4d45b9
vkd3d-shader/tpf: Apply extra bits to all conditional ops.
2024-11-27 12:54:27 +01:00
Francisco Casas
28ad600b43
vkd3d-shader/hlsl: Store SM4 jumps in the vsir program.
2024-11-27 12:54:15 +01:00
Giovanni Mascellani
2c3a7b0dd9
vkd3d-shader/ir: Validate the register type for DCL_OUTPUT_SIV instructions.
2024-11-25 20:51:29 +01:00
Giovanni Mascellani
3832e38ce0
vkd3d-shader/ir: Validate the register type for DCL_OUTPUT instructions.
2024-11-25 20:51:25 +01:00
Giovanni Mascellani
e7770eaaf6
vkd3d-shader/ir: Validate the register type for DCL_INPUT_PS_SGV instructions.
2024-11-25 20:48:39 +01:00
Giovanni Mascellani
1d9862261f
vkd3d-shader/ir: Validate the register type for DCL_INPUT_PS_SIV instructions.
2024-11-25 20:48:39 +01:00
Giovanni Mascellani
09ede1e7f2
vkd3d-shader/ir: Validate the register type for DCL_INPUT_PS instructions.
2024-11-25 20:48:39 +01:00
Giovanni Mascellani
31f6b18c84
vkd3d-shader/ir: Validate the register type for DCL_INPUT_SGV instructions.
2024-11-25 20:48:39 +01:00
Giovanni Mascellani
fadaa69b92
vkd3d-shader/ir: Validate the register type for DCL_INPUT_SIV instructions.
2024-11-25 20:48:39 +01:00
Giovanni Mascellani
b007b1dd79
vkd3d-shader/ir: Validate the register type for DCL_INPUT instructions.
2024-11-25 20:48:39 +01:00
Giovanni Mascellani
a8c5f9e667
vkd3d-shader/dxil: Emit register SAMPLEMASK for output sysval SV_Coverage.
2024-11-25 20:47:24 +01:00
Giovanni Mascellani
c22812e20b
vkd3d-shader/ir: Validate index count for OUTSTENCILREF registers.
2024-11-25 20:45:44 +01:00
Giovanni Mascellani
e367dc0783
vkd3d-shader/ir: Validate index count for WAVELANEINDEX registers.
2024-11-25 20:45:44 +01:00
Giovanni Mascellani
5b04a7973b
vkd3d-shader/ir: Validate index count for WAVELANECOUNT registers.
2024-11-25 20:45:44 +01:00
Giovanni Mascellani
820a545950
vkd3d-shader/ir: Validate index count for GSINSTID registers.
2024-11-25 20:45:44 +01:00
Giovanni Mascellani
07b31761fb
vkd3d-shader/ir: Validate index count for SAMPLEMASK registers.
2024-11-25 20:45:44 +01:00
Giovanni Mascellani
9f3bbad6bc
vkd3d-shader/ir: Validate index count for COVERAGE registers.
2024-11-25 20:45:44 +01:00
Feifan He
71ce43313f
vkd3d-shader/msl: Implement VKD3DSIH_MOVC.
2024-11-25 20:43:13 +01:00
Feifan He
32a507ace6
vkd3d-shader/msl: Implement VKD3DSIH_FRC.
2024-11-25 20:43:13 +01:00
Feifan He
154847c696
vkd3d-shader/msl: Implement VKD3DSIH_GEO.
2024-11-25 20:43:13 +01:00
Feifan He
38d7f8415d
vkd3d-shader/msl: Implement support for VKD3DSPSM_NEG modifiers.
2024-11-25 20:43:13 +01:00
Feifan He
64ea19b7f7
vkd3d-shader/msl: Implement VKD3DSIH_DIV.
2024-11-25 20:43:13 +01:00
Feifan He
b7605f1c34
vkd3d-shader/msl: Implement VKD3DSIH_OR.
2024-11-25 20:43:13 +01:00
Feifan He
f2a32589ea
vkd3d-shader/msl: Implement VKD3DSIH_INE.
2024-11-25 20:43:13 +01:00
Feifan He
a2d56c8bfc
vkd3d-shader/msl: Implement VKD3DSIH_MUL.
2024-11-25 20:43:13 +01:00
Francisco Casas
4f549155c5
vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_RESINFOs in the vsir program.
2024-11-24 00:01:03 +01:00
Francisco Casas
c89f503604
vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_SAMPLE_INFOs in the vsir program.
2024-11-24 00:00:46 +01:00
Francisco Casas
4382af6e1b
vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_GATHERs in the vsir program.
2024-11-23 23:55:07 +01:00
Francisco Casas
42ce821603
vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_SAMPLEs in the vsir program.
2024-11-23 23:52:24 +01:00
Francisco Casas
52b81f42eb
vkd3d-shader/hlsl: Store SM4 HLSL_RESOURCE_LOADs in the vsir program.
2024-11-23 23:49:57 +01:00
Feifan He
fd1beedc07
vkd3d-shader/msl: Implement support for VSIR_DIMENSION_VEC4 immediate constants.
2024-11-23 23:43:42 +01:00
Feifan He
68d7470fc2
vkd3d-shader/msl: Implement VKD3DSIH_NEU.
2024-11-23 23:43:42 +01:00
Feifan He
65b0e13a1a
vkd3d-shader/msl: Implement VKD3DSIH_AND.
2024-11-23 23:43:42 +01:00
Feifan He
4add058cd8
vkd3d-shader/msl: Implement support for VKD3DSPSM_ABS modifiers.
2024-11-23 23:43:42 +01:00
Feifan He
5bb7dcaba3
vkd3d-shader/msl: Implement support for VKD3DSPR_IMMCONST registers.
2024-11-23 23:43:42 +01:00
Feifan He
05b9331d0d
vkd3d-shader/msl: Implement VKD3DSIH_ADD.
2024-11-23 23:43:42 +01:00
Nikolay Sivov
b314a9eb84
vkd3d-shader/fx: Remove newlines from the parser error messages.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-23 23:24:05 +01:00
Nikolay Sivov
3784919213
vkd3d-shader/fx: Implement parsing inline shader blobs.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-23 23:21:39 +01:00
Giovanni Mascellani
0f362ab720
vkd3d-shader/ir: Check that tessellation system value registers are consecutive.
2024-11-23 23:19:57 +01:00
Giovanni Mascellani
5894e79064
vkd3d-shader/ir: Check that all tessellation system values appear in the patch constant signature.
2024-11-23 23:19:57 +01:00
Giovanni Mascellani
0245d22c83
vkd3d-shader/ir: Validate index count for LOCALTHREADINDEX registers.
2024-11-23 23:15:40 +01:00
Giovanni Mascellani
050840f493
vkd3d-shader/ir: Validate index count for LOCALTHREADID registers.
2024-11-23 23:15:39 +01:00
Giovanni Mascellani
595fe9a7aa
vkd3d-shader/ir: Validate index count for THREADGROUPID registers.
2024-11-23 23:15:39 +01:00
Giovanni Mascellani
fd9da5db2d
vkd3d-shader/ir: Validate index count for THREADID registers.
2024-11-23 23:15:39 +01:00
Giovanni Mascellani
26251d02a9
vkd3d-shader/ir: Validate index count for TESSCOORD registers.
2024-11-23 23:15:39 +01:00
Giovanni Mascellani
f2659c14a2
vkd3d-shader/ir: Validate index count for JOININSTID registers.
2024-11-23 23:15:39 +01:00
Giovanni Mascellani
808b28b425
vkd3d-shader/ir: Validate index count for FORKINSTID registers.
2024-11-23 23:15:39 +01:00
Giovanni Mascellani
860bb59c89
vkd3d-shader/ir: Validate index count for OUTPOINTID registers.
2024-11-23 23:15:39 +01:00
Giovanni Mascellani
0c3c4e0563
vkd3d-shader/ir: Validate index count for PRIMID registers.
2024-11-23 23:15:39 +01:00
Francisco Casas
64bc0515e0
vkd3d-shader/hlsl: Add special allocation rules for FFACE and SAMPLE.
2024-11-23 23:13:13 +01:00
Francisco Casas
2c15015ec2
tests: Test allocation rules for FFACE and SAMPLE.
...
These seem to have their own interpolation mode.
2024-11-23 23:10:56 +01:00
Francisco Casas
ad5377f995
vkd3d-shader/hlsl: Add special allocation rules for PRIMID, RTINDEX, and VPINDEX.
...
These system values are bound to the same allocation rules as other
semantics: they can share registers with other semantics with the same
interpolation mode and they prefer forming shorter writemasks. However,
for some reason, these don't allow further semantics to share the same
register once allocated, except among themselves.
2024-11-23 23:10:46 +01:00
Francisco Casas
2c0773c9ad
tests: Test signature reflection for PRIMID, RTINDEX and VPINDEX.
2024-11-23 22:57:23 +01:00
Giovanni Mascellani
e383834049
vkd3d-shader/ir: Check that tessellation system values only appear in the patch constant signature.
2024-11-21 19:28:46 +01:00
Giovanni Mascellani
018f3e8094
vkd3d-shader/ir: Validate tessellation system values for the given tessellator domain.
2024-11-21 19:28:46 +01:00
Giovanni Mascellani
1ed8d907b3
vkd3d-shader/ir: Keep track of the tessellator domain in struct vsir_program.
2024-11-21 19:28:46 +01:00
Giovanni Mascellani
49ec9add38
vkd3d-shader/ir: Check that semantic indices for tessellation system values are not duplicated.
2024-11-21 19:28:46 +01:00
Giovanni Mascellani
8d8de1db10
vkd3d-shader/ir: Validate the semantic index for tessellation system values.
2024-11-21 19:28:46 +01:00
Anna (navi) Figueiredo Gomes
9f3bbab2f0
vkd3d-shader/hlsl: Implement cast from bool to int for SM1.
2024-11-21 19:28:46 +01:00
Nikolay Sivov
1a6409cd5b
vkd3d-shader/hlsl: Add parser support for stream-output object types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com >
2024-11-21 19:28:46 +01:00
Francisco Casas
13dfccc1c6
vkd3d-shader/hlsl: Store SM4 resource stores in the vsir program.
2024-11-21 19:28:46 +01:00
Francisco Casas
5b4af411f5
vkd3d-shader/hlsl: Store SM4 loads in the vsir program.
2024-11-21 19:28:46 +01:00
Francisco Casas
874ca85a95
vkd3d-shader/hlsl: Store SM4 stores in the vsir program.
2024-11-21 19:28:46 +01:00
Francisco Casas
5dedcff665
vkd3d-shader/tpf: Remove HLSL_IR_SWIZZLE handling.
2024-11-21 19:28:46 +01:00
Shaun Ren
843fc980b5
tests/shader_runner_gl: Implement tessellation support.
2024-11-21 19:27:51 +01:00
Shaun Ren
12ac1dd46b
tests/shader_runner_vulkan: Enable patch list topology support.
2024-11-21 15:11:02 +01:00
Shaun Ren
e20b63c55e
vkd3d-shader: Implement scanning hull shader tessellation information.
2024-11-21 15:03:02 +01:00
Shaun Ren
1f4d17a4a2
vkd3d-shader/dxil: Allow zero domain input control point count.
2024-11-21 14:56:23 +01:00
Victor Chiletto
3669763835
tests: Add more function overloading tests.
2024-11-21 14:52:17 +01:00
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