535 Commits

Author SHA1 Message Date
Henri Verbeet
f866fb95ad Release 1.11. 2024-03-05 20:39:45 +01:00
Henri Verbeet
22d5e24bad vkd3d-shader: Update the chained structure list for vkd3d_shader_compile(). 2024-03-05 20:39:45 +01:00
Henri Verbeet
f80ae7aef1 vkd3d-shader: Document the newly supported transformations for d3dbc and HLSL sources. 2024-03-05 20:39:45 +01:00
Henri Verbeet
0885bf3082 vkd3d-utils: Restore the \since 1.11 command on D3DReflect().
This was effectively dropped by 8c6f5b847b.
2024-03-05 20:39:40 +01:00
Zebediah Figura
9177df883e vkd3d-shader/hlsl: Write the SFI0 section and "REQUIRES_ROVS" flag when ROVs are used. 2024-03-04 22:34:46 +01:00
Henri Verbeet
5c637d68da tests/shader_runner: Set the SPIR-V feature flags based on the runner caps. 2024-03-04 22:34:38 +01:00
Henri Verbeet
015fde5e23 tests/shader_runner: Set the vkd3d-shader API version in the Vulkan runner. 2024-03-04 22:34:37 +01:00
Henri Verbeet
5552be552b vkd3d-compiler: Compile SPIR-V shaders with the int64 and float64 features. 2024-03-04 22:34:30 +01:00
Henri Verbeet
6acca1f85e vkd3d-shader: Add documentation for the INT64 and FLOAT64 feature flags. 2024-03-04 22:34:24 +01:00
Giovanni Mascellani
500b61c383 tests: Test how constant folding works on SM1. 2024-02-26 23:04:08 +01:00
Henri Verbeet
0914561f85 vkd3d: Store a D3D12_RESOURCE_DESC structure in struct vkd3d_image_resource_create_info.
Like we did before commit 6d4782ed7f. That
commit somehow managed to change the "desc" field from
D3D12_RESOURCE_DESC to D3D12_RESOURCE_DESC1, but that breaks the ABI.
2024-02-26 23:04:05 +01:00
Victor Chiletto
7e27ae73af vkd3d-shader/hlsl: Fix hlsl_ir_resource_store::resource cleanup. 2024-02-26 23:03:51 +01:00
Conor McCarthy
c083b1d0fc vkd3d-shader/dxil: Implement DX intrinsic GetDimensions. 2024-02-26 23:03:48 +01:00
Conor McCarthy
292bbdefbf vkd3d-shader/dxil: Move the resource kind helper functions up. 2024-02-26 23:03:46 +01:00
Henri Verbeet
d65f331efc configure: Build with -Wwrite-strings.
libs/vkd3d-shader/hlsl.c: In function ‘declare_predefined_types’:
libs/vkd3d-shader/hlsl.c:3408:10: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
         {"technique",    9},
          ^~~~~~~~~~~
...
programs/vkd3d-compiler/main.c: In function ‘parse_formatting’:
programs/vkd3d-compiler/main.c:303:10: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
         {"colour",  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR},
          ^~~~~~~~
...

macOS tigetstr() takes a non-const char *, so account for that as well.
2024-02-22 22:46:29 +01:00
Henri Verbeet
7029d821be configure: Build with -Wtype-limits.
libs/vkd3d-shader/tpf.c: In function ‘write_sm4_unary_op_with_two_destinations’:
libs/vkd3d-shader/tpf.c:4489:24: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]
     assert(1 - dst_idx >= 0);
                        ^~
libs/vkd3d-shader/tpf.c: In function ‘write_sm4_binary_op_with_two_destinations’:
libs/vkd3d-shader/tpf.c:4549:24: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]
     assert(1 - dst_idx >= 0);
                        ^~
2024-02-22 22:46:22 +01:00
Henri Verbeet
d155071f22 configure: Build with -Wshift-overflow=2. 2024-02-22 22:46:16 +01:00
Henri Verbeet
1ed4767765 configure: Build with -Wempty-body. 2024-02-22 22:46:11 +01:00
Henri Verbeet
773f02d82f vkd3d: Disable "robustBufferAccess2" as well when we disable "robustBufferAccess".
From the validation layers: "If robustBufferAccess2 is enabled then
robustBufferAccess must also be enabled
(https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkPhysicalDeviceRobustness2FeaturesEXT-robustBufferAccess2-04000)"
2024-02-22 22:45:46 +01:00
Conor McCarthy
ba4bd651e5 vkd3d-shader/dxil: Implement DX intrinsics SampleCmp and SampleCmpLevelZero. 2024-02-22 22:45:36 +01:00
Conor McCarthy
2330ffdeda vkd3d-shader/dxil: Implement DX intrinsics SampleBias and SampleLevel. 2024-02-22 22:45:34 +01:00
Zebediah Figura
87b1de94da vkd3d-shader/hlsl: Check the resource format for UAVs also in hlsl_types_are_equal().
Spotted by Henri Verbeet.
2024-02-22 22:45:31 +01:00
Nikolay Sivov
5474d91804 vkd3d-shader/fx: Write DepthStencilView types. 2024-02-22 22:45:27 +01:00
Nikolay Sivov
371be3b60a vkd3d-shader/hlsl: Add DepthStencilView object type. 2024-02-22 22:45:26 +01:00
Nikolay Sivov
9632adaaec vkd3d-shader/fx: Handle fx_4+ UAV types. 2024-02-22 22:45:24 +01:00
Nikolay Sivov
e5f4f60214 vkd3d-shader/fx: Handle fx_4+ texture types. 2024-02-22 22:45:23 +01:00
Nikolay Sivov
a6057a1365 vkd3d-shader/fx: Add initial support for writing object variables.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-02-22 22:45:22 +01:00
Nikolay Sivov
c2b1714c5c vkd3d-shader/hlsl: Add RenderTargetView object type.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-02-22 22:45:21 +01:00
Giovanni Mascellani
9c678532a7 vkd3d-shader/ir: Dump the domination relationship. 2024-02-22 22:45:16 +01:00
Giovanni Mascellani
04c2852c1a vkd3d-shader/ir: Compute the domination relationship. 2024-02-22 22:45:15 +01:00
Giovanni Mascellani
2573d86ccf vkd3d-shader/ir: Dump the control flow graph in the GraphViz format. 2024-02-22 22:45:14 +01:00
Giovanni Mascellani
da037b61ba vkd3d-shader/ir: Build a representation of the control flow graph. 2024-02-22 22:45:13 +01:00
Conor McCarthy
1dffc281c9 vkd3d-shader/dxil: Implement DX intrinsic RawBufferStore. 2024-02-22 22:45:08 +01:00
Conor McCarthy
cab8b781ab vkd3d-shader/dxil: Handle raw and structured buffers in sm6_parser_emit_dx_buffer_store(). 2024-02-22 22:45:07 +01:00
Conor McCarthy
ce1875c435 vkd3d-shader/dxil: Implement DX intrinsic BufferStore. 2024-02-22 22:45:06 +01:00
Conor McCarthy
b447a725ec tests/shader-runner: Add a test for a signed int structured buffer UAV.
Check for backend type mismatches resulting from the absence of
signedness in SM 6.
2024-02-22 22:45:05 +01:00
Conor McCarthy
9180ea6591 tests/shader-runner: Add a test for a signed int typed buffer UAV.
Check for backend type mismatches resulting from the absence of
signedness in SM 6.
2024-02-22 22:45:04 +01:00
Conor McCarthy
081c9dbc96 tests/shader-runner: Support structured buffer UAVs. 2024-02-22 22:45:02 +01:00
Henri Verbeet
edc8e38bd9 ci: Enable colour output for the tests.
Autodetection doesn't work, but gitlab does in fact support colour
output. Perhaps more importantly, the "Scroll to next failure" feature
essentially scans the output for red text.
2024-02-21 23:23:34 +01:00
Petrichor Park
02a3667822 vkd3d-shader/hlsl: Implement atan and atan2.
Also narrows some more todos on the tests.
2024-02-21 23:23:13 +01:00
Petrichor Park
69294c290b vkd3d-shader/hlsl: Implement acos and asin trig intrinsics.
Tests have already been implemented in 92044d5e; this commit also reduces
the scope of some of the todos (because now they're implemented!).

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55154
2024-02-21 23:23:11 +01:00
Henri Verbeet
d4223a03c8 vkd3d-shader/hlsl: Replace HLSL_MODIFIER_RASTERIZER_ORDERED with a hlsl_type.e.resource flag. 2024-02-21 23:23:08 +01:00
Henri Verbeet
49d14613a5 vkd3d-shader/hlsl: Introduce hlsl_type.e.resource. 2024-02-21 23:23:06 +01:00
Conor McCarthy
d9c68ee481 vkd3d-shader/dxil: Handle resource descriptor additional tag/value pairs.
These are tag/value pairs, and the current code only works if an element
type or element stride pair is present at index zero.
2024-02-20 22:50:19 +01:00
Conor McCarthy
96a0685ba6 vkd3d-shader/dxil: Implement DX intrinsic AtomicCompareExchange. 2024-02-20 22:50:16 +01:00
Conor McCarthy
560c9413c3 vkd3d-shader/dxil: Implement DX intrinsic AtomicBinOp. 2024-02-20 22:50:15 +01:00
Conor McCarthy
3906c12476 tests/shader-runner: Add tests for UAV atomic ops. 2024-02-20 22:50:13 +01:00
Conor McCarthy
a04f16918f tests/shader-runner: Support scalar signed int probe values. 2024-02-20 22:50:12 +01:00
Henri Verbeet
54142eb0bd tests/shader_runner: Print information about the run configuration in run_shader_tests(). 2024-02-19 21:12:33 +01:00
Henri Verbeet
f15a0ace3e tests/shader_runner: Print a summary of the runner capabilities in run_shader_tests(). 2024-02-19 21:12:32 +01:00
Henri Verbeet
930fbcbb26 tests/shader_runner: Pass the runner capabilities to run_shader_tests().
Allowing these to be checked by run_shader_tests() itself, instead of
reimplementing those checks in each individual runner.
2024-02-19 21:12:30 +01:00
Evan Tang
7b41abaa1b vkd3d-shader/hlsl: Support SV_PrimitiveID in pixel shaders. 2024-02-19 21:12:23 +01:00
Francisco Casas
8df34fce62 vkd3d-shader/hlsl: Emit fixme on non-direct resource stores.
Co-authored-by: Giovanni Mascellani <gmascellani@codeweavers.com>

These may happen when storing to structured buffers, and we are not
handling them properly yet. The included test reaches unreacheable code
before this patch.

Storing to buffers is complicated since we need to split the index
chain in two paths:
- The path within the variable where the resource is.
- The subpath to the part of the resource element that is being stored
  to.

For now, we will emit a fixme when the index chain in the lhs is not a
direct resource access.
2024-02-19 21:12:14 +01:00
Nikolay Sivov
315b7c5a42 vkd3d-shader/fx: Do not align structured data section.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-02-19 21:12:09 +01:00
Nikolay Sivov
c107ec03b8 vkd3d-shader/fx: Add initial support for writing buffers descriptions.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-02-19 21:12:08 +01:00
Nikolay Sivov
656c068b32 vkd3d-shader/fx: Do not align strings for fx_4/fx_5 profiles.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-02-19 21:12:07 +01:00
Nikolay Sivov
d5f562d994 vkd3d-shader/fx: Use variable pointer in write_group().
The helper will need to access group annotations later, and these are
available for variables.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-02-19 21:12:05 +01:00
Francisco Casas
c249461e97 vkd3d-shader/hlsl: Parse Buffer types. 2024-02-19 21:11:55 +01:00
Francisco Casas
4fe9ab0a90 tests/shader-runner: Change probe directive syntax on shader_test files.
For consistency with the previous commit.
2024-02-19 21:11:53 +01:00
Francisco Casas
b08be04465 tests/shader-runner: Change resource declaration syntax on shader_test files.
On shader_test files, now resources should be declared this way:

    [texture n]       -> [srv n]
    [srv buffer n]    -> [srv n]
    [uav n]           -> [uav n]
    [uav buffer n]    -> [uav n]
    [vertex buffer n] -> [vb n]
    [render target n] -> [rtv n]

The dimension (buffer or 2D) is now specified as an additional parameter
in the "size" directive:

  For 2D resources:
  size (n, m)         -> size (2d, n, m)

  For buffers:
  size (n, 1)         -> size (buffer, n)
2024-02-19 21:11:52 +01:00
Francisco Casas
4d855611b7 tests/shader-runner: Support SRV buffers. 2024-02-19 21:11:51 +01:00
Francisco Casas
22a0f14a2f tests/shader-runner: Separate resource_type into type and dimension.
If in the same shader_test file we have both a [buffer uav n] and a
[uav n] with the same slot "n", we want the last one to override the
first one instead of passing both resources to the backends.

Same for [buffer srv n] and [texture n] after we introduce SRV buffers.
2024-02-19 21:11:49 +01:00
Francisco Casas
e1c759e1c9 vkd3d-shader/hlsl: Record valid methods in object_methods[].
Also, call hlsl_sampler_dim_count() and hlsl_offset_dim_count() after
type checking, to avoid reaching unreacheable cases.
2024-02-19 21:11:46 +01:00
Henri Verbeet
4735ff48d1 tests: Disable buffering of stdout.
Both to avoid it getting lost in case of crashes, and to properly interleave
test output and debug output in the log files.
2024-02-15 23:29:52 +01:00
Evan Tang
ee867bd470 vkd3d-shader/hlsl: Parse rasteriser-ordered view types. 2024-02-15 23:29:46 +01:00
Francisco Casas
e3ed5ac77e vkd3d-shader/hlsl: Lower casts to int for SM1. 2024-02-15 23:29:39 +01:00
Francisco Casas
e62bd1927e tests: Add simple test for implicit cast to int. 2024-02-15 23:29:39 +01:00
Francisco Casas
4b5c7e3721 vkd3d-shader/d3dbc: Implement casts from ints to floats as a MOV.
For temporary registers, SM1-SM3 integer types are internally
represented as floating point, so, in order to perform a cast
from ints to floats we need a mere MOV.

For constant integer registers "iN" there is no operation for casting
from a floating point register to them. For address registers "aN", and
the loop counting register "aL", vertex shaders have the "mova" operation
but we haven't used these registers in any way yet.

We probably would want to introduce these as synthetic variables
allocated in a special register set. In that case we have to remember to
use MOVA instead of MOV in the store operations, but they shouldn't be src
or dst of CAST operations.

Regarding constant integer registers, in some shaders, constants are
expected to be received formatted as an integer, such as:

    int m;
    float4 main() : sv_target
    {
        float4 res = {0, 0, 0, 0};

        for (int k = 0; k < m; ++k)
            res += k;
        return res;
    }

which compiles as:

    // Registers:
    //
    //   Name         Reg   Size
    //   ------------ ----- ----
    //   m            i0       1
    //

    ps_3_0
    def c0, 0, 1, 0, 0
    mov r0, c0.x
    mov r1.x, c0.x
    rep i0
      add r0, r0, r1.x
      add r1.x, r1.x, c0.y
    endrep
    mov oC0, r0

but this only happens if the integer constant is used directly in an
instruction that needs it, and as I said there is no instruction that
allows converting them to a float representation.

Notice how a more complex shader, that performs operations with this
integer variable "m":

    int m;
    float4 main() : sv_target
    {
        float4 res = {0, 0, 0, 0};

        for (int k = 0; k < m * m; ++k)
            res += k;
        return res;
    }

gives the following output:

    // Registers:
    //
    //   Name         Reg   Size
    //   ------------ ----- ----
    //   m            c0       1
    //

    ps_3_0
    def c1, 0, 0, 1, 0
    defi i0, 255, 0, 0, 0
    mul r0.x, c0.x, c0.x
    mov r1, c1.y
    mov r0.y, c1.y
    rep i0
      mov r0.z, r0.x
      break_ge r0.y, r0.z
      add r1, r0.y, r1
      add r0.y, r0.y, c1.z
    endrep
    mov oC0, r1

Meaning that the uniform "m" is just stored as a floating point in
"c0", the constant integer register "i0" is just set to 255 (hoping
it is a high enough value) using "defi", and the "break_ge"
involving c0 is used to break from the loop.

We could potentially use this approach to implement loops from SM3
without expecting the variables being received as constant integer
registers.

According to the D3D documentation, for SM1-SM3 constant integer
registers are only used by the 'loop' and 'rep' instructions.
2024-02-15 23:29:37 +01:00
Conor McCarthy
6d4782ed7f vkd3d: Implement ID3D12Resource2. 2024-02-15 23:29:33 +01:00
Conor McCarthy
99947deeb7 tests/d3d12: Add a test for zero description count in test_resource_allocation_info(). 2024-02-15 23:29:32 +01:00
Conor McCarthy
4668271872 vkd3d: Return DXGI_ERROR_NOT_FOUND from GetProtectedResourceSession(). 2024-02-15 23:29:32 +01:00
Conor McCarthy
e38f3995fd tests/d3d12: Add tests for GetProtectedResourceSession(). 2024-02-15 23:29:30 +01:00
Evan Tang
628acb6b96 tests: Add some tests for rasteriser-ordered views. 2024-02-14 21:48:53 +01:00
Henri Verbeet
f614d98759 tests/shader_runner: Allow UAV resources to be created without initial data.
We can e.g. initialise these with a shader.
2024-02-14 21:48:51 +01:00
Conor McCarthy
7d51a7d99c tests/shader-runner: Add a 64-bit switch test. 2024-02-14 21:48:44 +01:00
Conor McCarthy
6e634ad690 vkd3d-shader: Raise the instruction parameter allocation size if necessary.
Monolithic switch instructions have no definite case count limit.
2024-02-14 21:48:38 +01:00
Conor McCarthy
55c28e94f8 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_vselect(). 2024-02-14 21:48:32 +01:00
Conor McCarthy
c89627ec73 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_store(). 2024-02-14 21:48:31 +01:00
Conor McCarthy
4c7d956bdb vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_load(). 2024-02-14 21:48:30 +01:00
Conor McCarthy
04a9340164 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_extractval(). 2024-02-14 21:48:28 +01:00
Conor McCarthy
3c1ad054f0 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_cmp2(). 2024-02-14 21:48:26 +01:00
Conor McCarthy
cddb696499 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_cast(). 2024-02-14 21:48:25 +01:00
Conor McCarthy
76455580e2 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_texture_load(). 2024-02-14 21:48:24 +01:00
Conor McCarthy
d04a8ea893 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_split_double(). 2024-02-14 21:48:23 +01:00
Conor McCarthy
8c3512bd10 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_sincos(). 2024-02-14 21:48:22 +01:00
Conor McCarthy
cc5293bb4f vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_buffer_load(). 2024-02-14 21:48:21 +01:00
Conor McCarthy
6e3e200e96 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_load_input(). 2024-02-14 21:48:20 +01:00
Conor McCarthy
eb1bfaa821 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_tertiary(). 2024-02-14 21:48:19 +01:00
Conor McCarthy
1a2de25273 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_cbuffer_load(). 2024-02-14 21:48:18 +01:00
Conor McCarthy
0a23c81196 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_binary(). 2024-02-14 21:48:17 +01:00
Conor McCarthy
83e6ee4b3d vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_dx_unary(). 2024-02-14 21:48:14 +01:00
Conor McCarthy
217eb06f37 vkd3d-shader/dxil: Check for src param allocation failure in sm6_parser_emit_binop(). 2024-02-14 21:48:13 +01:00
Conor McCarthy
5a76cedf87 vkd3d-shader/dxil: Implement DX intrinsic SampleGrad. 2024-02-14 21:48:08 +01:00
Conor McCarthy
5178fb7364 vkd3d-shader/dxil: Implement DX intrinsic Sample. 2024-02-14 21:48:06 +01:00
Conor McCarthy
0a3eb61170 vkd3d-shader/dxil: Load sampler descriptors. 2024-02-14 21:48:03 +01:00
Henri Verbeet
0f3a42c34b tests: Implement check_requirements() for the OpenGL shader runner. 2024-02-13 22:51:36 +01:00
Conor McCarthy
aac3916fcf vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS13 in CheckFeatureSupport(). 2024-02-13 22:51:28 +01:00
Conor McCarthy
7b4e731aa5 vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS12 in CheckFeatureSupport(). 2024-02-13 22:51:28 +01:00
Conor McCarthy
68663b4fef vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS11 in CheckFeatureSupport(). 2024-02-13 22:51:28 +01:00
Conor McCarthy
a0bb055ad2 vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS10 in CheckFeatureSupport(). 2024-02-13 22:51:28 +01:00
Francisco Casas
6a8939e19f tests: Remove [require] directives for tests that use int and bool uniforms.
These tests should actually compile and run in SM1, which is possible
if we pass the int and uint uniforms in the expected IEEE 754 float
format for SM1 shaders.

Also, bools should be passed as 1.0f or 0.0f to SM1.
2024-02-13 22:51:23 +01:00
Francisco Casas
22c47e57f5 tests/shader-runner: Introduce "if" qualifier.
When the "if" qualifier is added to a directive, the directive is
skipped if the shader->minimum_shader_model is not included in the
range.

This can be used on the "probe" directives for tests that have different
expected results on different shader models, without having to resort to
[require] blocks.
2024-02-13 22:51:22 +01:00
Francisco Casas
faec42e8a1 tests: Don't ignore SM1 on a non-const-indexing.shader_test test.
The previous [require] block makes us skip the test for SM4.
2024-02-13 22:51:20 +01:00
Francisco Casas
0f9f5269e9 tests/vkd3d-shader: Set uninitialized uniforms to a value.
Avoids a potential source of non-determinism because the padding bytes
between uniforms could be left uninitialized.
2024-02-13 22:51:19 +01:00
Henri Verbeet
5eba031fa1 vkd3d: Cast DWORD flags to uint32_t in debug traces. 2024-02-09 22:47:51 +01:00
Giovanni Mascellani
2359ebc976 tests: Release the code blob in test_thread_id() (Valgrind). 2024-02-09 22:47:47 +01:00
Giovanni Mascellani
5905489b7f vkd3d-shader/hlsl: Free the selector in postfix_expr (Valgrind). 2024-02-09 22:47:46 +01:00
Giovanni Mascellani
a10de1b239 vkd3d-shader/hlsl: Free the individual attributes in func_prototype (Valgrind). 2024-02-09 22:47:45 +01:00
Giovanni Mascellani
049327a270 vkd3d-shader/hlsl: Free the parse initializer in attribute (Valgrind). 2024-02-09 22:47:44 +01:00
Giovanni Mascellani
521082afbe vkd3d-shader/hlsl: Free variable identifiers in primary_expr (Valgrind). 2024-02-09 22:47:42 +01:00
Henri Verbeet
5c917552c9 vkd3d: Use PRIuPTR for SIZE_T variables in debug traces. 2024-02-07 22:59:45 +01:00
Henri Verbeet
8ddca1ebaf vkd3d: Get rid of vkd3d_atomic_decrement(). 2024-02-07 22:59:37 +01:00
Henri Verbeet
6e439045e8 vkd3d: Get rid of vkd3d_atomic_increment(). 2024-02-07 22:59:37 +01:00
Conor McCarthy
18f73c1c4d vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS9 in CheckFeatureSupport(). 2024-02-07 22:59:32 +01:00
Conor McCarthy
8ea67b0ac6 vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS8 in CheckFeatureSupport(). 2024-02-07 22:59:32 +01:00
Conor McCarthy
5fd3076c67 vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS7 in CheckFeatureSupport(). 2024-02-07 22:59:31 +01:00
Conor McCarthy
db4a98c0d2 vkd3d: Handle D3D12_FEATURE_D3D12_OPTIONS6 in CheckFeatureSupport(). 2024-02-07 22:59:31 +01:00
Giovanni Mascellani
4ba324d37c tests: Work around a Metal bug.
This test currently hit a Metal bug when run on Apple Silicon with
MoltenVK and fails. We don't have an easy way to mark shader runner
tests as buggy and we're not interested in tracking that bug anyway,
so I'm just working around it.
2024-02-07 22:59:27 +01:00
Conor McCarthy
625e289574 vkd3d-shader/dxil: Handle hyperbolic trigonometric functions in sm6_parser_emit_dx_unary(). 2024-02-07 22:59:23 +01:00
Conor McCarthy
c2f6985454 tests/shader-runner: Add hyperbolic trigonometry tests. 2024-02-07 22:59:22 +01:00
Conor McCarthy
c35ec4f820 vkd3d-shader/dxil: Implement DX intrinsic TextureStore. 2024-02-07 22:59:18 +01:00
Conor McCarthy
cf4ed988d0 tests/shader-runner: Add shader model 6 texture UAV tests.
The UAV default register allocation rules changed with SM 5.1.
2024-02-07 22:59:16 +01:00
Conor McCarthy
805a4bc1e8 tests/shader-runner: Emit descriptor ranges for consecutive resources.
Shader models >= 5.1 support descriptor indexing, and emit arrayed
resource declarations.
2024-02-07 22:59:15 +01:00
Conor McCarthy
efddcc9a99 vkd3d-shader/dxil: Support forward-referenced value ids. 2024-02-07 22:59:10 +01:00
Conor McCarthy
7f87a3e5fc vkd3d-shader/spirv: Handle the ACOS, ASIN and ATAN instructions in spirv_compiler_emit_ext_glsl_instruction(). 2024-02-06 23:09:55 +01:00
Conor McCarthy
19d23fa696 vkd3d-shader/dxil: Handle inverse trigonometric functions in sm6_parser_emit_dx_unary(). 2024-02-06 23:09:53 +01:00
Petrichor Park
e6746cbbdc tests/shader-runner: Add tests for atan and atan2 trig intrinsics.
Extracted by Conor McCarthy from an HLSL patch, with ulp values
doubled in some cases to cover SM 6 results.
2024-02-06 23:09:48 +01:00
Petrichor Park
92044d5e41 tests/shader-runner: Add tests for acos and asin trig intrinsics.
Extracted by Conor McCarthy from an HLSL patch, and modified to include
SM 6 variations.
2024-02-06 23:09:46 +01:00
Henri Verbeet
2f9906ee90 vkd3d-utils: Use PRIuPTR for SIZE_T variables in debug traces. 2024-02-06 23:09:41 +01:00
Henri Verbeet
51cdddb961 vkd3d: Introduce a debug helper for GPU descriptor handles. 2024-02-06 23:07:43 +01:00
Henri Verbeet
532e902a56 vkd3d-common: Get rid of InterlockedDecrement(). 2024-02-06 23:07:36 +01:00
Henri Verbeet
c64921e79b vkd3d-common: Get rid of InterlockedIncrement(). 2024-02-06 23:07:36 +01:00
Giovanni Mascellani
51f13391e6 vkd3d-shader/ir: Introduce a simple control flow graph structurizer.
The structurizer is implemented along the lines of what is usually called
the "structured program theorem": the control flow is completely
virtualized by mean of an additional TEMP register which stores the
block index which is currently running. The whole program is then
converted to a huge switch construction enclosed in a loop, executing
at each iteration the appropriate block and updating the register
depending on block jump instruction.

The algorithm's generality is also its major weakness: it accepts any
input program, even if its CFG is not reducible, but the output
program lacks any useful convergence information. It satisfies the
letter of the SPIR-V requirements, but it is expected that it will
be very inefficient to run on a GPU (unless a downstream compiler is
able to devirtualize the control flow and do a proper convergence
analysis pass). The algorithm is however very simple, and good enough
to at least pass tests, enabling further development. A better
alternative is expected to be upstreamed incrementally.

Side note: the structured program theorem is often called the
Böhm-Jacopini theorem; Böhm and Jacopini did indeed prove a variation
of it, but their algorithm is different from what is commontly attributed
to them and implemented here, so I opted for not using their name.
2024-02-06 23:07:07 +01:00
Giovanni Mascellani
19aef21369 vkd3d-shader/ir: Handle PHI nodes when materializing SSA registers.
PHI nodes cannot be used with TEMP registers, so they have to be
converted to MOV/MOVC nodes and moved before the BRANCH node.
2024-02-06 23:07:03 +01:00
Giovanni Mascellani
e0d3e9c376 vkd3d-shader/ir: Materialize SSA registers to temporaries.
For simplicity PHI nodes are not currently handled.

The goal for this pass is to make the CFG structurizer simpler, because
it doesn't have to care about the more rigid rules SSA registers have
to satisfy than TEMP registers.

It is likely that the generated code will be harder for downstream
compilers to optimize and execute efficiently, so once a complete
structurizer is in place this pass should be removed, or at least
greatly reduced in scope.
2024-02-06 23:07:00 +01:00
Giovanni Mascellani
eb723a8d2b vkd3d-shader/spirv: Support bool TEMP registers. 2024-02-06 23:06:58 +01:00
Giovanni Mascellani
49f0fd42b8 vkd3d-shader/spirv: Move bool casting helpers above register loading helpers. 2024-02-06 23:06:55 +01:00
Giovanni Mascellani
ee994e95dd vkd3d-shader/spirv: Convert the swizzle according to the source bit width.
Fixes: 1f536238a8
2024-02-06 23:06:53 +01:00
Giovanni Mascellani
674f86042d vkd3d-shader/dxil: Set the register before calling src_param_init_scalar().
Which uses the register to compute the appropriate swizzle.

Fixes: 1f536238a8
2024-02-06 23:06:49 +01:00
Henri Verbeet
06ddb10c40 vkd3d: Introduce a debug helper for CPU descriptor handles. 2024-02-01 22:25:36 +01:00
Henri Verbeet
feca006d6a vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_versioned_root_signature_deserializer_Release(). 2024-02-01 22:25:27 +01:00
Henri Verbeet
f42411fe4a vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_versioned_root_signature_deserializer_AddRef(). 2024-02-01 22:25:27 +01:00
Henri Verbeet
afd0e45cd6 vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_root_signature_deserializer_Release(). 2024-02-01 22:25:27 +01:00
Henri Verbeet
c2e82cf06a vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_root_signature_deserializer_AddRef(). 2024-02-01 22:25:27 +01:00
Henri Verbeet
9434687c5b vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_pipeline_state_Release(). 2024-02-01 22:25:27 +01:00
Henri Verbeet
c71fa87522 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_pipeline_state_AddRef(). 2024-02-01 22:25:27 +01:00
Henri Verbeet
9e135f6143 vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_root_signature_Release(). 2024-02-01 22:25:27 +01:00
Henri Verbeet
37e8826301 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_root_signature_AddRef(). 2024-02-01 22:25:27 +01:00
Jacek Caban
2ae9f18a3a vkd3d: Use uint64_t for the size in vkd3d_gpu_va_allocator_allocate.
Avoids value truncation in 32-bit builds.
2024-02-01 22:25:20 +01:00
Conor McCarthy
eae4b7b4a2 vkd3d: Implement GetResourceAllocationInfo1(). 2024-02-01 22:25:13 +01:00
Conor McCarthy
67b4ae658a tests/d3d12: Add tests for GetResourceAllocationInfo1(). 2024-02-01 22:25:12 +01:00
Conor McCarthy
7e84421b9c vkd3d: Support multiple descriptions in GetResourceAllocationInfo(). 2024-02-01 22:25:11 +01:00
Conor McCarthy
8d0331df6c tests/d3d12: Test multiple descriptions in test_resource_allocation_info(). 2024-02-01 22:25:10 +01:00
Conor McCarthy
92e19a7da3 vkd3d: Add ID3D12Device7 interface stubs. 2024-02-01 22:25:10 +01:00
Conor McCarthy
76fbbe980a vkd3d: Add ID3D12Device6 interface stub. 2024-02-01 22:25:10 +01:00
Conor McCarthy
95e4222cc6 vkd3d-shader/spirv: Emit a vector bitcast if necessary in spirv_compiler_emit_load_ssa_reg(). 2024-02-01 22:25:04 +01:00
Conor McCarthy
ebec0aa434 vkd3d-shader/dxil: Implement DX intrinsic TextureLoad. 2024-02-01 22:25:02 +01:00
Conor McCarthy
e6d52861e9 vkd3d-shader/dxil: Implement DX intrinsic SplitDouble. 2024-02-01 22:24:58 +01:00
Conor McCarthy
254e812b12 tests/shader-runner: Add an asuint() test to the 64-bit cast tests. 2024-02-01 22:24:57 +01:00
Evan Tang
13ac795061 tests/shader-runner: Support testing for integer pixel data.
Modified by Conor McCarthy to use read_uint() and read_uint4().
2024-02-01 22:24:54 +01:00
Henri Verbeet
6dea3d08b1 vkd3d: Use debugstr_hresult() in d3d12_device_mark_as_removed(). 2024-02-01 00:08:39 +01:00
Henri Verbeet
920f5293e9 vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_query_heap_Release(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
d66f61cd5f vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_query_heap_AddRef(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
334f60c281 vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_descriptor_heap_Release(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
db37be2a70 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_descriptor_heap_AddRef(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
886c1fdcc4 vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_resource_Release(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
84234a8875 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_resource_AddRef(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
201fab7d5d vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_resource_decref(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
a9582a7355 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_resource_incref(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
6f7aec58ea vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_heap_resource_destroyed(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
30a00160e2 vkd3d: Use vkd3d_atomic_increment_u32() in vkd3d_bind_heap_memory(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
06eb8e5f8c vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_heap_Release(). 2024-02-01 00:08:35 +01:00
Henri Verbeet
fd385ab994 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_heap_AddRef(). 2024-02-01 00:08:35 +01:00
Giovanni Mascellani
cc72a8d311 vkd3d-shader/spirv: Free binary SPIR-V code (Valgrind). 2024-02-01 00:08:28 +01:00
Giovanni Mascellani
8b11b4b37a vkd3d-compiler: Free compilation options (Valgrind). 2024-02-01 00:08:28 +01:00
Giovanni Mascellani
896fc0c2ce vkd3d-compiler: Exit the main function through a common code path. 2024-02-01 00:08:28 +01:00
Henri Verbeet
d38221bd68 vkd3d-shader/ir: Pass a struct vsir_program to shader_parser_get_src_params(). 2024-02-01 00:08:23 +01:00
Henri Verbeet
47ec24ebad vkd3d-shader/ir: Pass a struct vsir_program to shader_parser_get_dst_params(). 2024-02-01 00:08:22 +01:00
Henri Verbeet
ced8543952 vkd3d-shader: Use vkd3d_atomic_increment_u32() in vkd3d_shader_dump_blob(). 2024-02-01 00:08:18 +01:00
Henri Verbeet
fef30dac2c vkd3d-shader/d3dbc: Do not fail parsing the shader when undeclared inputs are encountered.
These can be disassembled by D3DDisassemble() just fine, and perhaps
more importantly, shader model 1 vertex shaders do not require dcl_
instructions in Direct3D 8.
2024-01-29 22:33:46 +01:00
Henri Verbeet
8c6f5b847b vkd3d-utils: Implement D3DDisassemble().
Very loosely based on Wine's d3dcompiler_43.
2024-01-29 22:33:44 +01:00
Henri Verbeet
4fd4ecc020 vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_device_Release(). 2024-01-29 22:33:40 +01:00
Henri Verbeet
7d7833f3c0 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_device_AddRef(). 2024-01-29 22:33:40 +01:00
Henri Verbeet
f61891954e vkd3d: Use vkd3d_atomic_decrement_u32() in vkd3d_instance_decref(). 2024-01-29 22:33:40 +01:00
Henri Verbeet
042e269791 vkd3d: Use vkd3d_atomic_increment_u32() in vkd3d_instance_incref(). 2024-01-29 22:33:40 +01:00
Giovanni Mascellani
edc406d297 vkd3d-shader/ir: Check that SSA registers are used with compatible data types.
Specifically, accesses are always 32 bit or always 64 bit.
2024-01-29 22:33:34 +01:00
Giovanni Mascellani
1f536238a8 vkd3d-shader: Use 64 bit swizzles for 64 bit data types in VSIR.
The handling of write masks and swizzles for 64 bit data types is
currently irregular: write masks are always 64 bit, while swizzles
are usually 32 bit, except for SSA registers with are 64 bit.
With this change we always use 64 bit swizzles, in order to make
the situation less surprising and make it easier to convert
registers between SSA and TEMP.

64 bit swizzles are always required to have X in their last two
components.
2024-01-29 22:33:33 +01:00
Giovanni Mascellani
5ec1825eb3 include/vkd3d-shader: Generate swizzles without a function call.
So they can be used when a constant expression is expected, for instance
on case labels.
2024-01-29 22:33:31 +01:00
Giovanni Mascellani
2b93aae069 vkd3d-shader: Convert write masks between 32 and 64 bit by cases.
There are only three cases, and while the code is longer it is also
hopefully easier to read. Moreover, an error message is casted if
we're doing something unexpected.
2024-01-29 22:33:30 +01:00
Francisco Casas
13f713f74b vkd3d-shader/hlsl: Turn register(cX) reservations into buffer offset for SM4. 2024-01-29 22:33:27 +01:00
Francisco Casas
c7f7636534 vkd3d-shader/hlsl: Make register(cX) reservations work for SM1. 2024-01-29 22:33:25 +01:00
Francisco Casas
4791c7c23b tests: Test register(cX) reservations. 2024-01-29 22:33:25 +01:00
Francisco Casas
d7d4c9bc90 tests: Rename register-reservations.shader_test to register-reservations-resources.shader_test. 2024-01-29 22:33:25 +01:00
Conor McCarthy
92f0b37133 vkd3d-shader/spirv: Support 64-bit source value for bitfield instructions. 2024-01-29 22:33:22 +01:00
Conor McCarthy
3bbe374ca8 vkd3d-shader/dxil: Implement DX intrinsic Tertiary.
IBFE and UBFE are not emitted for HLSL sources which perform bitfield
extractions, e.g. loading a value from a struct containing bitfields, or
the equivalent done with bit shifts. These instructions are probably
only emitted by the TPF -> DXIL converter, which makes them hard to test.
2024-01-29 22:33:20 +01:00
Giovanni Mascellani
026c502f31 vkd3d-shader/ir: Fixup PHI nodes when lowering switches to selection ladders.
A map between the blocks before and after the pass is built and then
used to fix the PHI nodes.
2024-01-29 22:33:17 +01:00
Giovanni Mascellani
378109051c vkd3d-shader/ir: Lower monolithic switches to selection ladders.
PHI nodes must be fixed up after this pass, because the block references
might have become broken. For simplicitly this is not handled yet.

The goal for this pass is to make the CFG structurizer simpler, because
only conditional and unconditional branches must be supported.
Eventually this limitation might be lifted if there is advantage in
doing so.
2024-01-29 22:33:15 +01:00
Giovanni Mascellani
b97edee03d vkd3d-shader/spirv: Emit an error if merge information is missing.
Instead of crashing.
2024-01-29 22:33:14 +01:00
Conor McCarthy
e08c0cfc4f vkd3d-shader/dxil: Implement DX intrinsic RawBufferLoad. 2024-01-29 22:33:10 +01:00
Conor McCarthy
1bab93843d vkd3d-shader/dxil: Load raw/structured buffer SRV/UAV descriptors. 2024-01-29 22:33:09 +01:00
Giovanni Mascellani
fd7d23f64b tests: Mark a strip cut test as buggy in MoltenVK.
Metal, and therefore MoltenVK, doesn't support disabling primitive
restart.
2024-01-25 22:25:05 +01:00
Giovanni Mascellani
c5469c85e8 tests: Mark a depth sampling test as buggy on MoltenVK.
MoltenVK seems to be unable to handle tight inequalities (i.e.,
0.5 <= 0.5) properly on 16 bit depth resources.
2024-01-25 22:25:03 +01:00
Giovanni Mascellani
b6c1e6dcdf tests: Mark the tessellation pipeline as buggy on MoltenVK. 2024-01-25 22:25:03 +01:00
Giovanni Mascellani
74a14dad28 tests: Mark geometry shaders as buggy on MoltenVK. 2024-01-25 22:25:03 +01:00
Giovanni Mascellani
586ebeafec tests: Mark ReadFromSubresource() and WriteToSubresource() as todo on MoltenVK. 2024-01-25 22:25:03 +01:00
Giovanni Mascellani
17f3f2914e tests: Mark a test related to instanced draws as buggy on MoltenVK.
I haven't been able to understand what's happening here exactly,
but it doesn't look like we're generating bad Vulkan calls.
2024-01-25 22:25:01 +01:00
Henri Verbeet
3295f0d16e vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_signature_Release(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
13ba36bb43 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_signature_AddRef(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
0ff20e6b8d vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_queue_Release(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
cdb559c39d vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_queue_AddRef(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
298dce541d vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_list_Release(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
87f3a606d7 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_list_AddRef(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
d891e5c2a0 vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_command_allocator_Release(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
315fce8ac5 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_command_allocator_AddRef(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
78bb7b6760 vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_fence_decref(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
c8122ff47e vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_fence_incref(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
1b4f1ac8a0 vkd3d: Use vkd3d_atomic_decrement_u32() in d3d12_fence_Release(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
5a2b82fbd5 vkd3d: Use vkd3d_atomic_increment_u32() in d3d12_fence_AddRef(). 2024-01-25 22:24:55 +01:00
Henri Verbeet
fee3b94563 vkd3d-shader: Start an if-block on VKD3DSIH_IFC in vkd3d_shader_scan_instruction(). 2024-01-25 22:24:50 +01:00
Conor McCarthy
f954724870 vkd3d-shader/spirv: Handle the TAN instruction in spirv_compiler_emit_ext_glsl_instruction(). 2024-01-25 22:24:44 +01:00
Conor McCarthy
93d7c30395 vkd3d-shader/dxil: Handle DX intrinsic Tan in sm6_parser_emit_dx_unary(). 2024-01-25 22:24:43 +01:00
Conor McCarthy
2a260b8d56 vkd3d-shader/dxil: Implement DX intrinsics Cos and Sin. 2024-01-25 22:24:41 +01:00
Francisco Casas
d7ffdd7340 tests/shader_runner: Free runner->cs_source and runner->fx_source (valgrind). 2024-01-25 22:24:34 +01:00
Francisco Casas
70e1924e6e tests/shader_runner: Free runner->input_elements in parse_test_directive() (valgrind). 2024-01-25 22:24:33 +01:00
Francisco Casas
8379e5337c tests/shader_runner: Free extensions pointer on vulkan runner (valgrind). 2024-01-25 22:24:32 +01:00
Francisco Casas
48e61fa323 tests/shader_runner: Free runner->uniforms (valgrind). 2024-01-25 22:24:31 +01:00
Francisco Casas
969350a280 tests/shader_runner: Free params.data on test directives (valgrind). 2024-01-25 22:24:30 +01:00
Francisco Casas
8f9b48c455 tests/shader_runner: Pass a pointer to the data when creating uav buffers in d3d12.
The implementation of upload_buffer_data_with_states(), unlike the
implementation of upload_texture_data_with_states(), does not expect a
pointer to a D3D12_SUBRESOURCE_DATA, but rather, a direct pointer to the
data.
2024-01-25 22:24:29 +01:00
Francisco Casas
cec45da45b vkd3d-shader/ir: Update flatten_control_flow_constructs() comment. 2024-01-25 22:24:27 +01:00
Conor McCarthy
8ae69c745b vkd3d-shader/spirv: Handle thread group UAV barriers. 2024-01-25 22:24:23 +01:00
Conor McCarthy
18e9148f58 vkd3d-shader/spirv: Include Uniform in the memory semantics for UAV barriers.
The UniformMemory semantic applies the constraints to Uniform storage
class memory, which matches how UAV variables are declared.
2024-01-25 22:24:22 +01:00
Conor McCarthy
adfbecef3c vkd3d-shader/spirv: Handle globally coherent UAVs. 2024-01-25 22:24:20 +01:00
Henri Verbeet
766f5f039b vkd3d: Use debugstr_hresult() in vkd3d_serialize_versioned_root_signature(). 2024-01-24 22:38:42 +01:00
Henri Verbeet
30113c098d vkd3d: Use debugstr_hresult() in vkd3d_serialize_root_signature(). 2024-01-24 22:38:42 +01:00
Henri Verbeet
a86a21667c vkd3d: Use debugstr_hresult() in vkd3d_create_device(). 2024-01-24 22:38:42 +01:00
Henri Verbeet
ad08cbc390 vkd3d: Use debugstr_hresult() in vkd3d_uav_clear_state_init(). 2024-01-24 22:38:42 +01:00
Henri Verbeet
1599de9a0d vkd3d: Use debugstr_hresult() in d3d12_pipeline_state_init_compute(). 2024-01-24 22:38:42 +01:00
Henri Verbeet
c5b5621e28 vkd3d: Use debugstr_hresult() in d3d12_pipeline_state_find_and_init_uav_counters(). 2024-01-24 22:38:42 +01:00
Henri Verbeet
9c1e661ae3 vkd3d: Use debugstr_hresult() in vkd3d_create_compute_pipeline(). 2024-01-24 22:38:42 +01:00
Henri Verbeet
eabcaf15fb vkd3d-shader/ir: Use vsir_instruction_is_dcl() in vsir_validate_instruction(). 2024-01-24 22:38:36 +01:00
Henri Verbeet
365ad56888 vkd3d-shader/ir: Get rid of shader_instruction_is_dcl(). 2024-01-24 22:38:34 +01:00
Giovanni Mascellani
d304422a34 tests: Mark count buffers as buggy on MoltenVK.
They require Vulkan indirect draw count extension.
2024-01-24 22:38:28 +01:00
Giovanni Mascellani
5d4edba925 tests: Mark a timestamp query test as buggy on MoltenVK.
The generated Vulkan calls look right and do not trigger any
validation error, but the returned timestamp is 0. A valid
timestamp is returned if the CopyResource() call is commented,
or the second EndQuery() call is moved before CopyResource(),
or the first EndQuery() call is commented. I am not seeing any
sensible pattern here, so I guess there is just a bug in
MoltenVK.
2024-01-24 22:38:26 +01:00
Giovanni Mascellani
66cd2af188 tests: Mark clip distance as unsupported on MoltenVK.
At least for tessellation and geometry shaders.
2024-01-24 22:38:23 +01:00
Giovanni Mascellani
9a83e568b4 tests: Mark cull distance as buggy on MoltenVK.
The generated MSL code is not accepted by the Metal runtime, and
it looks wrong anyway.
2024-01-24 22:38:19 +01:00
Giovanni Mascellani
60e0246436 tests: Skip unbounded descriptor ranges tests when they're unsupported.
They are unsupported if the Vulkan descriptor indexing extension
is not available; on MoltenVK it is known to be buggy, so it is
disabled.
2024-01-24 22:38:18 +01:00
Giovanni Mascellani
711ce4e65d tests: Mark loading from stencil as buggy on MoltenVK.
Specifically, MoltenVK seems to be able to load from stencil, but
the specific replicating swizzle (repeating the stencil value on
all the channels) is not honored. The stencil value is read only
on the red channel.
2024-01-24 22:38:15 +01:00
Conor McCarthy
54f6e6dd67 vkd3d-shader/spirv: Check for FEATURE_FLOAT64 when double precision use is flagged. 2024-01-24 22:38:09 +01:00
Conor McCarthy
6446b6ea21 vkd3d-shader: Introduce VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64. 2024-01-24 22:38:09 +01:00
Conor McCarthy
e973271a40 vkd3d-shader/spirv: Handle the ISINF and ISNAN instructions in spirv_compiler_emit_alu_instruction(). 2024-01-24 22:38:04 +01:00
Conor McCarthy
cd674d593e vkd3d-shader/spirv: Implement the ISFINITE instruction. 2024-01-24 22:38:03 +01:00
Conor McCarthy
35d46cf3d9 tests/shader-runner: Add tests for floating point special values. 2024-01-24 22:38:00 +01:00
Conor McCarthy
41cce4cbf1 vkd3d-shader/dxil: Handle floating point special value comparisons in sm6_parser_emit_dx_unary(). 2024-01-24 22:37:59 +01:00
Zebediah Figura
0f46e7bbad tests: Test signature reflection via D3DReflect().
Ported from Wine.
2024-01-24 22:37:53 +01:00
Zebediah Figura
d1be80e08d tests: Test VKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_MAP_SEMANTIC_NAMES. 2024-01-24 22:37:53 +01:00
Zebediah Figura
579e262d98 vkd3d-utils: Implement input and output signature reflection. 2024-01-24 22:37:53 +01:00
Zebediah Figura
53bd1f5419 vkd3d-utils: Add D3DReflect(). 2024-01-24 22:37:53 +01:00
Zebediah Figura
e73ba2a4c3 include: Add vkd3d_d3d12shader.idl. 2024-01-24 22:37:53 +01:00
Francisco Casas
1c73513425 tests: Use the vulkan runner to run SM1 compilation tests.
At the current moment this is a little odd because for SM1 [test]
directives are skipped, and the [shader] directives are not executed by
the shader_runner_vulkan.c:compile_shader() but by the general
shader_runner.c:compile_shader(). So in principle it is a little weird
that we go through the vulkan runner.

But fret not, because in the future we plan to make the parser agnostic
to the language of the tests, so we will get rid of the general
shader_runner.c:compile_shader() function and instead call a
runner->compile_shader() function, defined for each runner. Granted,
most of these may call a generic implementation that uses native
compiler in Windows, and vkd3d-shader on Linux, but it would be more
conceptually correct.
2024-01-24 22:37:44 +01:00
Francisco Casas
b92f6c448a vkd3d-shader/ir: Lower texkill instructions to discard_nz. 2024-01-24 22:37:41 +01:00
Francisco Casas
7e75ac63a1 vkd3d-shader/d3dbc: Emit fixme for HLSL_RESOURCE_SAMPLE_LOD.
Currently, HLSL_RESOURCE_SAMPLE_LOD is not implemented for d3dbc,
but we are incorrectly writting a texld instruction to handle it.
This causes SM1 tests with the vulkan backend (in following patches)
to fail if VKD3D_SHADER_CONFIG="force_validation" is enabled.

For now a fixme is emited in these cases.
2024-01-24 22:37:38 +01:00
Francisco Casas
671f4ec2b2 tests/shader-runner: Call each runner only once.
If the runners require multiple calls to run_shader_tests() for
different shader model ranges, these are moved inside the sole runner
call.

For the same reason, the trace() messages are also moved inside the
runner calls.
2024-01-24 22:37:34 +01:00
Francisco Casas
79de3ec766 tests/shader-runner: Support reading multiple model range args for qualifiers.
We can now pass (sm<4) and (sm>=4) to "fail" and "todo" qualifiers, and
we can use multiple of these qualifier arguments using "&" for AND and
"|" for OR.

examples:
todo(sm>=4 & sm<6)
todo(sm<4 | sm>6)

parenthesis are not supported.

Adding additional model ranges for the tests, if we need them, should be
easier now, since they only have to be added to the "valid_args" array.
2024-01-24 22:37:30 +01:00
Henri Verbeet
bf628f0c74 vkd3d-shader/ir: Store block names in struct vsir_program. 2024-01-23 20:27:35 +01:00
Henri Verbeet
f3c7d2d05c vkd3d-shader/ir: Store the block count in struct vsir_program. 2024-01-23 20:27:34 +01:00
Henri Verbeet
98c6e85b33 vkd3d-shader/ir: Store control point counts in struct vsir_program. 2024-01-23 20:27:32 +01:00
Henri Verbeet
e4cc4a336e vkd3d: Use debugstr_hresult() in vkd3d_init_null_resources(). 2024-01-23 20:27:28 +01:00
Henri Verbeet
d4b329e628 vkd3d: Use debugstr_hresult() in vkd3d_join_thread(). 2024-01-23 20:27:28 +01:00
Henri Verbeet
e965701776 vkd3d: Use debugstr_hresult() in d3d12_device_init(). 2024-01-23 20:27:28 +01:00
Henri Verbeet
8dc1239e14 vkd3d: Use debugstr_hresult() in vkd3d_create_vk_device(). 2024-01-23 20:27:28 +01:00
Henri Verbeet
af160ef0c4 vkd3d: Use debugstr_hresult() in vkd3d_instance_init(). 2024-01-23 20:27:28 +01:00
Conor McCarthy
e4660fe0e6 vkd3d-shader/spirv: Emit DISCARD as a function call. 2024-01-23 20:26:59 +01:00
Conor McCarthy
367a06d748 vkd3d-shader/dxil: Use strcmp() to find the handle type.
We use strcmp() on the same type name elsewhere, and case-insensitive
matching does not seem necessary.
2024-01-23 20:26:53 +01:00
Conor McCarthy
1cca18a228 vkd3d-shader/dxil: Use strcmp() to find function names.
Function names are case-sensitive.
2024-01-23 20:26:52 +01:00
Conor McCarthy
4dec25cbde vkd3d-shader/dxil: Use strcmp() to check the entry point name.
Function names are case-sensitive.
2024-01-23 20:26:50 +01:00
Zebediah Figura
57c4a13024 tests: Add tests for valid conditional types. 2024-01-23 20:26:47 +01:00
Zebediah Figura
a8b0c03912 vkd3d-shader/hlsl: Always cast to bool in if() statements.
We emit sm4 if_nz for these, but that does a bitwise comparison to zero, which is wrong for floats.
2024-01-23 20:26:46 +01:00
Zebediah Figura
183172eff4 vkd3d-shader/hlsl: Validate that condition expressions are numeric. 2024-01-23 20:26:45 +01:00
Zebediah Figura
09220edd21 vkd3d-shader/hlsl: Validate the condition data type for loops as well. 2024-01-23 20:26:44 +01:00
Zebediah Figura
c18a349a3f vkd3d-shader/hlsl: Copy some missing fields in hlsl_type_clone(). 2024-01-23 20:26:42 +01:00
Giovanni Mascellani
de9725b6ba vkd3d-shader/ir: Remove DCL_TEMPS instructions.
We have to do work to keep it updated across passes and we never read it.
2024-01-23 20:26:38 +01:00
Giovanni Mascellani
4b869f73bb vkd3d-shader/ir: Run tracing and validation for DXIL code too. 2024-01-23 20:26:36 +01:00
Conor McCarthy
6df725718a vkd3d-shader/ir: Refactor return code checking in vkd3d_shader_normalise().
We started with only one or two of these but it has become excessive.

Patch originally written by Conor McCarthy and updated by Giovanni Mascellani.
2024-01-23 20:26:34 +01:00
Conor McCarthy
b3903636f7 vkd3d-shader/dxil: Implement DX intrinsic Binary. 2024-01-23 20:26:29 +01:00
Conor McCarthy
6c71cd5a72 vkd3d-shader/dxil: Add an operand type code for the return type. 2024-01-23 20:26:28 +01:00
Nikolay Sivov
0117e4fb7e vkd3d-shader/fx: Add initial support for writing passes for fx_2_0.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:22 +01:00
Nikolay Sivov
b478f0a300 vkd3d-shader/fx: Add initial support for writing fx_2_0 binaries.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:21 +01:00
Nikolay Sivov
56100d36b1 vkd3d-shader/fx: Check technique type in global scope as well.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:20 +01:00
Nikolay Sivov
2c1905b780 vkd3d-shader/hlsl: Allow annotations on techniques.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:19 +01:00
Nikolay Sivov
76a689d43f vkd3d-shader/hlsl: Allow annotations on passes.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:18 +01:00
Nikolay Sivov
e72f8f9a30 vkd3d-shader/hlsl: Add passes variables to the techniques.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:16 +01:00
Nikolay Sivov
fe8881747b vkd3d-shader/hlsl: Add initial support for parsing annotations.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-23 20:26:15 +01:00
Nikolay Sivov
341963bbec tests/hlsl: Add some tests for annotations. 2024-01-23 20:26:14 +01:00
Giovanni Mascellani
232b2ad360 vkd3d-shader/ir: Validate PHI instructions. 2024-01-23 20:26:08 +01:00
Giovanni Mascellani
56f9057985 vkd3d-shader/ir: Do not allow IMMCONST and IMMCONST64 as destination registers. 2024-01-23 20:26:06 +01:00
Giovanni Mascellani
21633fcc52 vkd3d-shader/ir: Refactor register-type-specific code in parameter validation.
To better accommodate code for other register types.
2024-01-23 20:26:05 +01:00
Giovanni Mascellani
fb6409bda1 vkd3d-shader/ir: Check that all instructions appear in a block. 2024-01-23 20:26:03 +01:00
Giovanni Mascellani
72e2eeaf14 tests: Add a test for SV_ViewportArrayIndex. 2024-01-22 22:19:16 +01:00
Giovanni Mascellani
bd84b96e9f tests: Use test utils to create the pipeline state in test_ps_layer(). 2024-01-22 22:19:16 +01:00
Giovanni Mascellani
245cce02bd tests: Test using SV_RenderTargetArrayIndex in the vertex shader. 2024-01-22 22:19:16 +01:00
Giovanni Mascellani
5ddf745d95 tests: Compile HLSL shaders at runtime in test_ps_layer(). 2024-01-22 22:19:15 +01:00
Giovanni Mascellani
dc56320b31 vkd3d-shader/tpf: Support SV_ViewportArrayIndex in pixel and vertex shaders. 2024-01-22 22:19:14 +01:00
Giovanni Mascellani
3a90f3e29d vkd3d-shader/tpf: Support SV_InstanceID in vertex shaders. 2024-01-22 22:19:13 +01:00
Giovanni Mascellani
b500381b5c vkd3d-shader/tpf: Support SV_RenderTargetArrayIndex in pixel and vertex shaders. 2024-01-22 22:19:12 +01:00
Giovanni Mascellani
45495f54f2 vkd3d-shader/spirv: Use capability ShaderViewportIndexLayerEXT for decoration ViewportIndex. 2024-01-22 22:19:11 +01:00
Giovanni Mascellani
6ac525d6c3 vkd3d-shader/spirv: Use capability ShaderViewportIndexLayerEXT for decoration Layer.
Capability Geometry allows to use the Layer builtin in geometry and pixel
shaders. For vertex and domain shaders ShaderLayer should be used, but it's only
available starting from SPIR-V 1.5. ShaderViewportIndexLayerEXT can be used
instead with extension SPV_EXT_shader_viewport_index_layer.
2024-01-22 22:19:09 +01:00
Henri Verbeet
dd00e209ac vkd3d: Use debugstr_hresult() in d3d12_command_queue_submit_locked(). 2024-01-22 22:19:03 +01:00
Henri Verbeet
ebb2a31e50 vkd3d: Use debugstr_hresult() in d3d12_command_list_copy_incompatible_texture_region(). 2024-01-22 22:19:03 +01:00
Henri Verbeet
f6ef7c3f46 vkd3d: Use debugstr_hresult() in vkd3d_wait_for_gpu_fence(). 2024-01-22 22:19:03 +01:00
Henri Verbeet
adc02eada8 vkd3d-shader/ir: Store the temporary register count in struct vsir_program. 2024-01-22 22:18:53 +01:00
Henri Verbeet
94ca46916a vkd3d-shader/ir: Store the SSA register count in struct vsir_program. 2024-01-22 22:18:52 +01:00
Henri Verbeet
7b85cd6a31 vkd3d-shader/ir: Store the "use_vocp" field in struct vsir_program. 2024-01-22 22:18:51 +01:00
Henri Verbeet
23dcd4f22b vkd3d-shader/ir: Store the shader version in struct vsir_program. 2024-01-22 22:18:50 +01:00
Henri Verbeet
fc9043be3c vkd3d-shader/ir: Introduce struct vsir_program. 2024-01-22 22:18:48 +01:00
Conor McCarthy
55c7cd5c22 vkd3d-shader/dxil: Handle semantic kind ISFRONTFACE. 2024-01-22 22:18:33 +01:00
Conor McCarthy
9f409b67d7 vkd3d-shader/dxil: Handle semantic kind VERTEXID. 2024-01-22 22:18:32 +01:00
Conor McCarthy
ca7487a56d vkd3d-shader/spirv: Handle UINT32_MAX result from FIRSTBIT_HI and FIRSTBIT_SHI instructions. 2024-01-22 22:18:27 +01:00
Conor McCarthy
62e15dac8d tests/d3d12: Add a raw firstbit test to test_shader_instructions(). 2024-01-22 22:18:25 +01:00
Conor McCarthy
bfdc8b31a3 vkd3d-shader/dxil: Implement DX intrinsic BufferLoad for typed buffers. 2024-01-22 22:18:21 +01:00
Conor McCarthy
85052ba93e vkd3d-shader/dxil: Load typed UAV descriptors. 2024-01-22 22:18:19 +01:00
Conor McCarthy
89d1ef83f4 vkd3d-shader/dxil: Load typed SRV descriptors. 2024-01-22 22:18:18 +01:00
Conor McCarthy
5ebe0cc717 vkd3d-shader/spirv: Do not assert VKD3D_DATA_UINT in spirv_compiler_emit_ld_raw_structured_srv_uav(). 2024-01-22 22:18:17 +01:00
Conor McCarthy
80d7ea2924 vkd3d-shader/dxil: Pass the code block and instruction in a struct to intrinsic handlers.
Simplifies handling of intrinsics which need to emit more than one
instruction.
2024-01-22 22:18:16 +01:00
Henri Verbeet
14da4df99e vkd3d-common: Use vkd3d_atomic_decrement_u32() in vkd3d_blob_Release(). 2024-01-18 23:16:19 +01:00
Henri Verbeet
9228e13155 vkd3d-common: Introduce vkd3d_atomic_decrement_u32(). 2024-01-18 23:16:19 +01:00
Henri Verbeet
bb6b393c15 vkd3d-common: Use vkd3d_atomic_increment_u32() in vkd3d_blob_AddRef(). 2024-01-18 23:16:19 +01:00
Henri Verbeet
5fe3c624d5 vkd3d-common: Use vkd3d_atomic_increment_u32() in get_buffer(). 2024-01-18 23:16:19 +01:00
Henri Verbeet
03fbf4a3dc vkd3d-common: Introduce vkd3d_atomic_increment_u32(). 2024-01-18 23:16:19 +01:00
Henri Verbeet
f69c8b1cc4 vkd3d-shader/d3dbc: Store the "offset" field as an unsigned int in hlsl_sm1_register_from_semantic(). 2024-01-18 23:16:06 +01:00
Giovanni Mascellani
67902d4304 vkd3d-shader/ir: Validate RET instructions. 2024-01-18 23:15:58 +01:00
Giovanni Mascellani
af96730276 vkd3d-shader/ir: Validate SWITCH_MONOLITHIC instructions. 2024-01-18 23:15:57 +01:00
Giovanni Mascellani
46ebb404d7 vkd3d-shader/ir: Validate BRANCH instructions. 2024-01-18 23:15:56 +01:00
Giovanni Mascellani
bc9db34cdc vkd3d-shader/ir: Validate LABEL instructions. 2024-01-18 23:15:55 +01:00
Giovanni Mascellani
dd1b2feec0 vkd3d-shader/ir: Validate LABEL registers. 2024-01-18 23:15:54 +01:00
Giovanni Mascellani
17f4afc2b5 vkd3d-shader/ir: Validate that structured CF does not appear in block-based shaders. 2024-01-18 23:15:53 +01:00
Giovanni Mascellani
1d45b7a422 vkd3d-shader/spirv: Normalise the shader before allocating registers.
So registers are allocated after normalisation (which could require
additional registers).
2024-01-18 23:15:48 +01:00
Zebediah Figura
9ad48f16ea vkd3d-shader/hlsl: Forbid mismatched argument types in ternaries. 2024-01-18 23:15:44 +01:00
Zebediah Figura
275901557c vkd3d-shader/hlsl: Handle scalar values in ternaries. 2024-01-18 23:15:43 +01:00
Zebediah Figura
11112798c8 vkd3d-shader/hlsl: Handle scalar conditions in ternaries. 2024-01-18 23:15:42 +01:00
Zebediah Figura
2c8751478f vkd3d-shader/hlsl: Forbid objects in ternary conditions. 2024-01-18 23:15:41 +01:00
Giovanni Mascellani
38fdf24002 vkd3d-shader: Make relative address sources mutable too.
They were forgotten in 78d95889bd.

Fixes: 78d95889bd
2024-01-18 23:15:35 +01:00
Giovanni Mascellani
93100edb4b tests: Test a couple of degenerate switch instances. 2024-01-18 23:15:35 +01:00
Giovanni Mascellani
6cb7487fb0 tests: Add a test with non-trivial control flow. 2024-01-18 23:15:35 +01:00
Conor McCarthy
83851133c5 vkd3d-shader/ir: Set merged signature element interpolation mode only from used elements. 2024-01-18 23:15:27 +01:00
Conor McCarthy
759362b527 tests: Test an interpolated PS input where component x is unused.
FXC does not emit an interpolation mode for unused elements.
2024-01-18 23:15:26 +01:00
Conor McCarthy
b8280e4210 vkd3d-shader/ir: Revert "Do not merge signature elements which have different interpolation modes.".
This reverts commit b5c067b41a.

The commit causes regressions in other shaders because unused elements
do not have an interpolation mode.
2024-01-18 23:15:25 +01:00
Conor McCarthy
efe800f7f0 vkd3d-shader/dxil: Handle the DXIL SWITCH instruction. 2024-01-18 23:15:14 +01:00
Conor McCarthy
ba1ee27b4b vkd3d-shader/dxil: Handle the DXIL PHI instruction. 2024-01-18 23:15:12 +01:00
Conor McCarthy
8a5804eb43 vkd3d-shader/dxil: Handle the DXIL BR instruction conditional variant. 2024-01-18 23:15:10 +01:00
Conor McCarthy
c9493884ef vkd3d-shader/dxil: Handle the DXIL BR instruction unconditional variant. 2024-01-18 23:15:03 +01:00
Conor McCarthy
9e964fa0c7 vkd3d-shader/dxil: Introduce a code block terminator struct. 2024-01-18 23:15:01 +01:00
Giovanni Mascellani
866e5de95b ci: Prepare the macOS build environment in a dedicated CI job. 2024-01-18 23:13:05 +01:00
Giovanni Mascellani
847930d5e0 ci: Rename CI target build-image to image-linux. 2024-01-18 23:13:03 +01:00
Henri Verbeet
cd77b2a9be vkd3d-utils: Use debugstr_hresult() in D3DStripShader(). 2024-01-17 22:29:39 +01:00
Henri Verbeet
1b3aa005db vkd3d-utils: Use debugstr_hresult() in get_blob_part(). 2024-01-17 22:29:39 +01:00
Henri Verbeet
2476d6bd6c vkd3d-utils: Use debugstr_hresult() in D3DCreateBlob(). 2024-01-17 22:29:39 +01:00
Henri Verbeet
cd9610bbe0 include: Introduce a debug helper for HRESULTs. 2024-01-17 22:29:39 +01:00
Henri Verbeet
71decc927f vkd3d-common: Introduce vkd3d_atomic_increment_u64(). 2024-01-17 22:29:29 +01:00
Conor McCarthy
c40093474e vkd3d-shader/tpf: Validate sysvals in index range declarations. 2024-01-17 22:29:01 +01:00
Conor McCarthy
4c30b23821 vkd3d-shader: Make the control point count the outer dimension of I/O arrays.
The relative-addressed case in shader_register_normalise_arrayed_addressing()
leaves the control point id in idx[0], while for constant register
indices it is placed in idx[1]. The latter case could be fixed instead,
but placing the control point count in the outer dimension is more
logical.
2024-01-17 22:28:59 +01:00
Conor McCarthy
b8561d6fd2 tests: Test punned array access in patch constant functions.
The FXC optimiser sometimes converts a local array of input values into
direct array addressing of the inputs, which can result in a
dcl_indexrange instruction spanning input elements with different masks.
2024-01-17 22:28:58 +01:00
Conor McCarthy
418e8d8100 vkd3d-shader/ir: Expand index range write masks to cover all element masks.
For example, this occurred in a shader:

reg_idx write_mask
   0      xyz
   1      xyzw
   2      xyzw
   3      xyz

The dcl_indexrange instruction covered only xyz, so once merged, searching for
xyzw failed.

It is impossible to declare an input array where elements have different
component counts, but the optimiser can create this case. One way for
this to occur is to dynamically index input values via a local array
containing copies of the input values. The optimiser converts this to
dynamically indexed inputs.
2024-01-17 22:28:56 +01:00
Zebediah Figura
16962ac6f1 vkd3d-shader/hlsl: Allow non-numeric types in the ternary operator. 2024-01-17 22:28:51 +01:00
Zebediah Figura
46bd099341 vkd3d-shader/hlsl: Separate an add_ternary() helper. 2024-01-17 22:28:50 +01:00
Zebediah Figura
9ac210eb1e tests: Add many more tests for ternary expressions. 2024-01-17 22:28:50 +01:00
Zebediah Figura
a5549bae38 vkd3d-shader/hlsl: Do not try to lower ternaries of types other than scalar or vector. 2024-01-17 22:28:49 +01:00
Zebediah Figura
e0b1f2e273 vkd3d-shader/hlsl: Remove a redundant definition of the "float" type. 2024-01-17 22:28:47 +01:00
Conor McCarthy
559d9d4ee0 vkd3d-shader/ir: Include an initial label instruction in the first control flow block. 2024-01-17 22:28:41 +01:00
Conor McCarthy
d402804851 vkd3d-shader/spirv: Do not emit function code before the main prolog. 2024-01-17 22:28:40 +01:00
Conor McCarthy
b4b2b0d3ac vkd3d-shader/spirv: Declare indexable temps as Private unless function scope is specified. 2024-01-17 22:28:39 +01:00
Conor McCarthy
37d9dba512 vkd3d-shader/ir: Store code block names in struct vkd3d_shader_desc. 2024-01-17 22:28:38 +01:00
Conor McCarthy
ffc65215ba vkd3d-shader/ir: Flatten SWITCH/CASE/DEFAULT/ENDSWITCH control flow instructions. 2024-01-17 22:28:36 +01:00
Conor McCarthy
dcb8527327 vkd3d-shader/ir: Flatten LOOP/BREAK/CONTINUE/ENDLOOP control flow instructions. 2024-01-17 22:28:35 +01:00
Conor McCarthy
e1dddc01b7 vkd3d-shader/ir: Flatten IF/ELSE/ENDIF control flow instructions. 2024-01-17 22:28:34 +01:00
Conor McCarthy
f3d464de0e vkd3d-shader/spirv: Handle RETP in spirv_compiler_handle_instruction(). 2024-01-17 22:28:33 +01:00
Conor McCarthy
bc1b5e7132 vkd3d-shader/spirv: Handle DISCARD and TEXKILL in spirv_compiler_handle_instruction(). 2024-01-17 22:28:31 +01:00
Conor McCarthy
db0d51675c vkd3d-shader/spirv: Emit descriptor offset loads in the function entry block.
Ensures they are loaded only once per function independent of the
control flow graph.
2024-01-17 22:28:29 +01:00
Henri Verbeet
68b898fcb6 vkd3d-shader/tpf: Store the "precise" mask as a uint32_t in shader_sm4_read_instruction(). 2024-01-15 19:58:22 +01:00
Henri Verbeet
ad2af68d2a vkd3d-shader/tpf: Store the "recognized_bits" mask as a uint32_t in shader_sm4_read_instruction_modifier(). 2024-01-15 19:58:21 +01:00
Henri Verbeet
b8903f5526 vkd3d-shader/tpf: Store the current token as a uint32_t in shader_sm4_read_dst_param(). 2024-01-15 19:58:20 +01:00
Henri Verbeet
fd854bc0c0 vkd3d-shader/tpf: Store the current token as a uint32_t in shader_sm4_read_src_param(). 2024-01-15 19:58:19 +01:00
Henri Verbeet
c5facd4e03 vkd3d-shader/tpf: Store the "addressing" token as a uint32_t in shader_sm4_read_param(). 2024-01-15 19:58:18 +01:00
Henri Verbeet
b1c538e0fe vkd3d-shader/tpf: Store the "components" token as a uint32_t in shader_sm4_read_dcl_resource(). 2024-01-15 19:58:17 +01:00
Henri Verbeet
9896394220 vkd3d-shader/tpf: Pass a uint32_t modifier token to shader_sm4_read_instruction_modifier(). 2024-01-15 19:58:15 +01:00
Henri Verbeet
4db7b40ca8 vkd3d-common: Get rid of InterlockedAdd().
This was once used by libvkd3d's fence worker thread, but currently this is
unused.
2024-01-15 19:57:59 +01:00
Nikolay Sivov
1a036ddff6 vkd3d-shader/fx: Do not write the same string twice. 2024-01-15 19:57:43 +01:00
Nikolay Sivov
e7d65d39ba vkd3d-shader/fx: Initial support for fx_5_0 output. 2024-01-15 19:57:42 +01:00
Nikolay Sivov
8014c11e88 vkd3d-shader/fx: Write empty passes blocks.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-15 19:57:41 +01:00
Nikolay Sivov
e1dca9b27a vkd3d-shader/hlsl: Add a scope for technique variables.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-15 19:57:39 +01:00
Nikolay Sivov
0a6d842ed1 vkd3d-shader/hlsl: Rename the rule for an optional name.
Names are optional for both techniques and passes.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-15 19:57:37 +01:00
Francisco Casas
43ff28b00b vkd3d-shader/hlsl: Emit fixmes on non-constant vector addressing.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56162

Storing to a vector component using a non-constant index is not allowed
on profiles lower than 6.0. Unless this happens inside a loop that can be
unrolled, which we are not doing yet.

For this reason, a validate_nonconstant_vector_store_derefs pass is
added to detect these cases.

Ideally we would want to emit an hlsl_error on this pass, but before
implementing loop unrolling, we could reach this point on valid HLSL.

Also, as pointed out by Nikolay in the mentioned bug, currently
new_offset_from_path_index() fails an assertion when this happens,
because it expects an hlsl_ir_constant, so a check is added.
It also felt correct to emit an hlsl_fixme there, despite the
redundancy.
2024-01-15 19:57:12 +01:00
Giovanni Mascellani
b0c8a47f9d vkd3d-shader/ir: Check that SSA registers are used validly.
Specifically, they are assigned only once and only assigned components
are used.

Right now we don't check that the assignment dominates all usages.
2024-01-15 19:57:01 +01:00
Giovanni Mascellani
26bebe8f91 vkd3d-shader/ir: Check that SSA registers have consistent dimensions. 2024-01-15 19:57:00 +01:00
Giovanni Mascellani
7503429555 vkd3d-shader/ir: Check that TEMP registers have consistent dimensions. 2024-01-15 19:56:59 +01:00
Giovanni Mascellani
fbd77486de vkd3d-shader/ir: Use vkd3d_free() instead of free(). 2024-01-15 19:56:58 +01:00
Giovanni Mascellani
26c6a87268 vkd3d-shader/ir: Simplify control flow in vsir_validate_register(). 2024-01-15 19:56:56 +01:00
Conor McCarthy
c5bc28b454 tests/d3d12: Test vector parameter for countbits() and firstbithigh() in test_shader_instructions(). 2024-01-15 19:56:36 +01:00
Conor McCarthy
52902b042f vkd3d-shader/spirv: Support vector source param for FIRSTBIT_HI and FIRSTBIT_SHI instructions. 2024-01-15 19:56:35 +01:00
Henri Verbeet
3e2ace8d33 vkd3d-shader/dxbc: Use sizeof(uint32_t) instead of sizeof(DWORD) in calls to require_space(). 2024-01-11 23:05:56 +01:00
Henri Verbeet
69350e1ff0 vkd3d-shader/dxbc: Pass an unsigned int count to shader_parse_root_parameters1(). 2024-01-11 23:05:54 +01:00
Henri Verbeet
04acc52496 vkd3d-shader/dxbc: Pass a size_t offset to shader_get_string(). 2024-01-11 23:05:52 +01:00
Henri Verbeet
bf0fda7812 vkd3d: Trace GetLastError() results with %lu.
These are DWORDs, but this is all Windows code, so we can just use %lu.
2024-01-11 23:05:42 +01:00
Conor McCarthy
ac9b14599f vkd3d-shader/dxil: Avoid null dereference on failure to find function pointer type.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55684
2024-01-11 23:05:17 +01:00
Giovanni Mascellani
78d95889bd vkd3d-shader: Make *src and *dst mutable in vkd3d_shader_instruction.
They were originally made const because no optimization/normalization
pass existed. Now having to cast away const all the time is becoming
more and more burdening.
2024-01-11 23:05:11 +01:00
Henri Verbeet
fd8a0d7fb6 vkd3d-shader/spirv: Pass a uint32_t write mask to spirv_compiler_emit_neg(). 2024-01-11 23:05:03 +01:00
Henri Verbeet
b4da553d28 vkd3d-shader/spirv: Pass a uint32_t write mask to spirv_compiler_emit_abs(). 2024-01-11 23:05:02 +01:00
Henri Verbeet
97acca715e vkd3d-shader/spirv: Pass a uin32_t write mask to spirv_compiler_emit_load_src(). 2024-01-11 23:05:01 +01:00
Henri Verbeet
5c2d0f42b5 vkd3d-shader/spirv: Pass a uint32_t write mask to vkd3d_symbol_set_register_info(). 2024-01-11 23:05:00 +01:00
Henri Verbeet
9dd5b2840f vkd3d-shader: Recognise DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS in shader_validate_descriptor_range1(). 2024-01-11 23:04:54 +01:00
Nikolay Sivov
a0207436f2 vkd3d-shader/tpf: Add initial support for writing fx_4_0/fx_4_1 binaries.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:48 +01:00
Nikolay Sivov
9494b72224 vkd3d-shader: Add separate binary target type for effects.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:48 +01:00
Nikolay Sivov
e527d7c1e7 vkd3d-shader/hlsl: Handle effect group statement.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:46 +01:00
Nikolay Sivov
f7a02a5da2 vkd3d-shader/hlsl: Add variables for techniques.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:45 +01:00
Nikolay Sivov
8494342fa0 vkd3d-shader/hlsl: Rename rule for top-level techniques.
Only technique10 and technique11 types could be nested in groups.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:43 +01:00
Nikolay Sivov
c3af1f9989 vkd3d-shader/hlsl: Add 'fxgroup' token.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:42 +01:00
Nikolay Sivov
ffae369748 tests: Add some tests for effects groups syntax.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-01-11 23:04:42 +01:00
Giovanni Mascellani
017f86aaaf vkd3d-shader/d3d-asm: Guess a sensible data type for literals.
When the typing information is not reliable.
2024-01-11 23:04:34 +01:00
Giovanni Mascellani
e3fb4e7eac vkd3d-utils: Support many different surface types when creating a device.
This is nice for the application, which can use our implementation of
D3D12CreateDevice() in more environments, and basically free for us,
because surface creation is still the application's business.
2024-01-09 23:00:58 +01:00
Giovanni Mascellani
0752e545e4 configure: Detect pthread support using -pthread instead of -lpthread.
The latter links the pthread library, but doesn't set the preprocessor
state that some toolchains require. The former is the supported way
to use pthread.

This allows vkd3d to be compiled with the Android NDK.
2024-01-09 23:00:56 +01:00
Conor McCarthy
b0d1fb7d98 vkd3d: Use mutable descriptors if available.
The mutable descriptor type allows six descriptor sets to be replaced
with one set for CBV/SRV/UAV heaps.
2024-01-09 22:59:46 +01:00
Henri Verbeet
bb64bfff63 vkd3d: Attempt to translate border colours to static border colours in d3d12_desc_create_sampler(). 2024-01-08 21:45:39 +01:00
Henri Verbeet
9060baacec vkd3d: Implement support for static border colours. 2024-01-08 21:45:39 +01:00
Henri Verbeet
3344c4e93d vkd3d-shader/hlsl: Store modifier flags as a uint32_t. 2024-01-08 21:45:26 +01:00
Henri Verbeet
fafe2a1dba vkd3d-shader/hlsl: Store swizzles as a uint32_t. 2024-01-08 21:45:24 +01:00
Fabian Maurer
49d5aecaa7 vkd3d: Unlock mutex in error case in d3d12_command_queue_CopyTileMappings. 2024-01-08 21:45:06 +01:00
Giovanni Mascellani
90bcc6691d tests: Mark resource arrays as buggy on MoltenVK.
They require Vulkan descriptor indexing extension, which is
exposed by MoltenVK but known to be buggy, so we assume it is
disabled.
2024-01-08 21:44:58 +01:00
Giovanni Mascellani
a610ccaed9 tests: Mark predicated rendering as buggy on MoltenVK.
It requires Vulkan conditional rendering extension.
2024-01-08 21:44:56 +01:00
Giovanni Mascellani
54514ba7dd tests: Mark streaming output as buggy on MoltenVK.
It requires Vulkan transform feedback extension.
2024-01-08 21:44:55 +01:00
Giovanni Mascellani
1cc2ccaf98 tests: Mark some sampling tests as buggy on MoltenVK.
Apparently Metal doesn't support specifying a bias directly in the
sampler, and, with "nearest" mip filtering, it doesn't switch
precisely at LOD 0.5 (though still between 0.5 and 0.6).
2024-01-08 21:44:53 +01:00
Giovanni Mascellani
7f9803620f vkd3d-shader/spirv: Specify behavior for bit field instructions.
Bit field instructions in SPIR-V do not specify what happens when
offset + count exceeds the type bit width. After this commit we
refine the emitted code's behavior to match TPF.

This fixes a few failures on MoltenVK.
2024-01-08 21:44:52 +01:00
Giovanni Mascellani
9c9b1fadbd tests: Use a uint target for rendering uint data.
This fixes a failure in MoltenVK.
2024-01-08 21:44:50 +01:00
Giovanni Mascellani
5e7f9d4d0d vkd3d: Specify the aspect when creating NULL UAVs.
This fixes a crash on MoltenVK.
2024-01-08 21:44:49 +01:00
Giovanni Mascellani
2fe76f3b60 ci: Dump the d3d12 summary line in the CI log.
d3d12 lumps many tests together, so it's useful to have the summary
line in the CI log.
2024-01-08 21:44:46 +01:00
Henri Verbeet
50cebc7278 vkd3d: Slightly simplify debug_vk_memory_property_flags().
VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD and
VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD were introduced by
Vulkan-Headers 1.1.121; we currently require version 1.2.148.
2024-01-04 22:24:10 +01:00
Henri Verbeet
0fb1ef1e63 vkd3d: Recognise VK_QUEUE_VIDEO_DECODE_BIT_KHR in debug_vk_queue_flags().
This was introduced by Vulkan-Headers 1.3.238, which is a bit newer than
we currently require.
2024-01-04 22:24:07 +01:00
Henri Verbeet
659c870edc vkd3d: Recognise VK_QUEUE_PROTECTED_BIT in debug_vk_queue_flags(). 2024-01-04 22:24:07 +01:00
Henri Verbeet
5b9a0dfaea vkd3d-shader/ir: Store destination parameter shifts as an unsigned int. 2024-01-04 22:23:54 +01:00
Henri Verbeet
4b5d3a078b vkd3d-shader/ir: Store destination parameter modifier flags as a uint32_t. 2024-01-04 22:23:52 +01:00
Henri Verbeet
60842b7181 vkd3d-shader/ir: Store source parameter swizzles as a uint32_t. 2024-01-04 22:23:51 +01:00
Henri Verbeet
9f4ca3bc9c vkd3d-shader/ir: Store instruction flags as a uint32_t. 2024-01-04 22:23:49 +01:00
Giovanni Mascellani
bd9118cac4 vkd3d-shader/ir: Validate destination write masks depending on the dimension. 2024-01-04 22:23:25 +01:00
Giovanni Mascellani
15e7711786 vkd3d-shader/ir: Validate source swizzles depending on the dimension. 2024-01-04 22:23:24 +01:00
Giovanni Mascellani
e91da41dea vkd3d-shader/ir: Validate SSA registers. 2024-01-04 22:23:23 +01:00
Giovanni Mascellani
e29ae1550c vkd3d-shader/dxil: Create constant buffer registers with dimension vec4. 2024-01-04 22:23:21 +01:00
Giovanni Mascellani
df2ae56de8 vkd3d-shader/d3dbc: Override the write mask when the destination is not vec4. 2024-01-04 22:23:20 +01:00
Zebediah Figura
1ce7e3d8b1 vkd3d-shader/d3dbc: Assign unique register indices for VKD3DSPR_RASTOUT. 2024-01-04 22:23:09 +01:00
Zebediah Figura
3f52fda8ad vkd3d-shader: Lower shader model 1/2 inter-stage I/O to a flat array.
An alternative is that we stash the reg_type in the signature, but this seems
far simpler for the backend to deal with.
2024-01-04 22:23:07 +01:00
Giovanni Mascellani
3bafee344d vkd3d-shader/dxil: Use vkd3d_shader_parser_error() for error reporting when available. 2024-01-03 22:38:26 +01:00
Giovanni Mascellani
a02cd1cf64 vkd3d-shader/dxil: Do not use the parser before it is initialized. 2024-01-03 22:38:24 +01:00
Conor McCarthy
111818eabb vkd3d-shader/dxil: Pre-allocate instruction space for globals in sm6_parser_globals_init().
For simplicity, declaration handlers assume instruction allocation will
not fail.
2024-01-03 22:38:21 +01:00
Conor McCarthy
8aa6e2228e vkd3d-shader/dxil: Count global variables in dxil_block_compute_module_decl_count(). 2024-01-03 22:38:19 +01:00
Henri Verbeet
4ec7f360d9 vkd3d: Add D3D_FEATURE_LEVEL_1_0_CORE as a valid feature level. 2024-01-03 22:38:10 +01:00
Henri Verbeet
6abcc27c97 vkd3d: Add D3D_FEATURE_LEVEL_12_2 as a valid feature level. 2024-01-03 22:38:10 +01:00
Henri Verbeet
ed4f3f3272 vkd3d-shader/ir: Rename the "immconst_double" field of struct vkd3d_shader_register to "immconst_f64". 2024-01-03 22:37:49 +01:00
Henri Verbeet
7f94fda05c vkd3d-shader/ir: Rename the "immconst_uint64" field of struct vkd3d_shader_register to "immconst_u64". 2024-01-03 22:37:43 +01:00
Henri Verbeet
05a542ba00 vkd3d-shader/ir: Rename the "immconst_float" field of struct vkd3d_shader_register to "immconst_f32". 2024-01-03 22:37:41 +01:00
Henri Verbeet
e33d3b3954 vkd3d-shader/ir: Rename the "immconst_uint" field of struct vkd3d_shader_register to "immconst_u32".
For consistency with the rest of vkd3d-shader; e.g. put_u32() and
read_u32().
2024-01-03 22:37:39 +01:00
Conor McCarthy
78343dcf87 vkd3d-shader/spirv: Decorate non-float32 non-built-in pixel shader inputs as Flat.
As per VUID-StandaloneSpirv-Flat-04744. Not strictly a regression, but
revealed by 66cb2815f because it declares unused inputs.
2024-01-02 23:03:59 +01:00
Florian Weimer
cca03d1c0e configure: Use AC_CHECK_FUNCS to define HAVE_GETTID.
VKD3D_CHECK_FUNC does not use a fake prototype (char gettid(void);)
and does not include <unistd.h>.  It always fails with Clang 16 and
GCC 14 and other compilers which do not support implicit function
declarations.
2024-01-02 23:03:46 +01:00
Henri Verbeet
62f18f749b tests: Print the failing line numbers when a test fails.
Currently, if a probe fails, it will print the line number of the [test]
block the probe is in, not the line number of the probe itself. This
makes it somewhat difficult to debug.

This commit makes it print the line number that a test fails at.
2024-01-02 23:03:25 +01:00
Conor McCarthy
812f01c2e2 vkd3d-shader/spirv: Handle ITOI and UTOU in spirv_compiler_map_alu_instruction().
These instructions perform integer casts to/from 64 bits.
2024-01-02 23:03:07 +01:00
Conor McCarthy
1eaa7d1dbe vkd3d-shader/spirv: Support UINT64 source in spirv_compiler_emit_bool_cast(). 2024-01-02 23:03:06 +01:00
Conor McCarthy
99924d913b vkd3d-shader/spirv: Support 64-bit sources in spirv_compiler_emit_int_div(). 2024-01-02 23:03:05 +01:00
Conor McCarthy
13459a55f1 vkd3d-shader/spirv: Introduce a UINT64 component type. 2024-01-02 23:03:04 +01:00
Conor McCarthy
fe44873979 vkd3d-shader/spirv: Introduce a data_type_is_64_bit() helper function. 2024-01-02 23:03:03 +01:00
Conor McCarthy
511c66d595 vkd3d-shader/spirv: Use data_type_is_integer() in spirv_compiler_emit_neg(). 2024-01-02 23:03:02 +01:00
Conor McCarthy
cc43ef3bca vkd3d: Pass int64 capability info to vkd3d-shader. 2024-01-02 23:03:00 +01:00
Henri Verbeet
f96a791807 vkd3d-shader/ir: Pass a uint32_t swizzle to vkd3d_swizzle_get_component64(). 2023-12-14 23:19:51 +01:00
Henri Verbeet
8a1de71fb1 vkd3d-shader/ir: Pass a uint32_t swizzle to vkd3d_swizzle_get_component(). 2023-12-14 23:19:49 +01:00
Zebediah Figura
4ff389854c vkd3d-shader: Allow compiling d3d bytecode to SPIR-V. 2023-12-14 23:19:31 +01:00
Zebediah Figura
6a514ebe8e tests: Avoid using "SV_Position" as a name for the vertex shader input.
We use vkd3d_shader_find_signature_element() in the Vulkan runner, and
vkd3d-shader translates SM1 position to "POSITION".
2023-12-14 23:19:30 +01:00
Zebediah Figura
aa44f9b390 tests: Use struct vkd3d_shader_scan_signature_info to retrieve the VS input signature.
In order to allow retrieving it from d3dbc shaders.
2023-12-14 23:19:28 +01:00
Zebediah Figura
2bc40385d9 vkd3d-shader: Do not scan DCL instructions which do not declare resources. 2023-12-14 23:19:28 +01:00
Zebediah Figura
8af47a96ea vkd3d-shader: Do not scan the shader in vkd3d_shader_parser_compile() for assembly targets. 2023-12-14 23:19:28 +01:00
Conor McCarthy
f23426ec32 tests/shader-runner: Check for int64 support in the Vulkan runner. 2023-12-14 21:00:41 +01:00
Conor McCarthy
a80ea8168f tests/shader-runner: Check for float64 support in the Vulkan runner. 2023-12-14 21:00:39 +01:00
Conor McCarthy
cd43cb3752 tests/shader-runner: Check for float64 support in the d3d11 runner. 2023-12-14 21:00:38 +01:00
Conor McCarthy
b8694fd879 vkd3d: Co-locate all descriptor-related members.
To optimise cache coherence, because decriptor updates use the most
performance-critical code paths.
2023-12-14 21:00:34 +01:00
Conor McCarthy
a2741babd9 vkd3d: Rename the device mutex to pipeline_cache_mutex.
It is used only for pipeline and render pass caching, and renaming it
helps prevent inappropriate or erroneous use.
2023-12-14 21:00:30 +01:00
Conor McCarthy
37e76618ca vkd3d: Write Vulkan descriptors in a worker thread.
Raises framerate by 5-10% in games which write thousands of descriptors
per frame, e.g. Horizon Zero Dawn.

The worker thread is a generic device worker which can also be used for
other purposes if the need arises.
2023-12-14 21:00:28 +01:00
Conor McCarthy
70962ae7d8 vkd3d: Update the descriptor next index before getting a reference for writing.
Fixes a race condition where the descriptor is modified between getting
its object and resetting the `next` index. The new object would never be
written. While it is invalid for the app to write descriptors used by a
command list which has been submitted to a queue, unused descriptors may
be written. This change also supports writing descriptors in a worker
thread.
2023-12-14 21:00:26 +01:00
Henri Verbeet
21491d1bbb vkd3d-shader/ir: Pass a uint32_t write mask to vkd3d_write_mask_32_from_64(). 2023-12-13 22:33:07 +01:00
Henri Verbeet
3759186193 vkd3d-shader/ir: Pass a uint32_t write mask to vkd3d_write_mask_64_from_32(). 2023-12-13 22:33:06 +01:00
Henri Verbeet
713adaa56a vkd3d-shader/ir: Pass a uint32_t write mask to vkd3d_write_mask_component_count(). 2023-12-13 22:33:04 +01:00
Henri Verbeet
e1aa12f94b vkd3d-shader/ir: Pass a uint32_t write mask to vkd3d_write_mask_get_component_idx(). 2023-12-13 22:33:03 +01:00
Giovanni Mascellani
09235d9e09 tests: Test assigning multisampled textures with different sample counts. 2023-12-13 22:32:38 +01:00
Conor McCarthy
af731024d7 tests/shader-runner: Fix the arithmetic-int-uniform int64 abs expected results. 2023-12-13 22:32:31 +01:00
Giovanni Mascellani
f087aa752d ci: Build vkd3d with SPIRV-Tools. 2023-12-13 22:32:26 +01:00
Giovanni Mascellani
ec4986e9e2 vkd3d-shader/spirv: Honor force_validation after emitting SPIR-V code. 2023-12-13 22:32:25 +01:00
Giovanni Mascellani
a6317e5f3b vkd3d: Pad push constant ranges to 16 bytes.
Because that's the granularity of Constant Buffer accesses in SM4.
This commit requires using more push constants, but without it the
generated SPIR-V can be invalid.
2023-12-13 22:32:23 +01:00
Giovanni Mascellani
1015cc952e vkd3d-shader/d3d-asm: Add an "internal" mode for the ASM dumper.
The new mode exposes more details about what's going on inside the VSIR
code and it's meant to ease development and debugging.
2023-12-12 23:16:26 +01:00
Giovanni Mascellani
e7fdf2e97f vkd3d-shader/d3d-asm: Dump unknown types as "<unknown>".
In analogy with "<continued>" and "<unused>".
2023-12-12 23:16:24 +01:00
Giovanni Mascellani
1caaf90ee2 vkd3d-shader/d3d-asm: Dump recently added types. 2023-12-12 23:16:23 +01:00
Giovanni Mascellani
4b6e596740 vkd3d-shader/d3d-asm: Write a single type in shader_dump_data_type(). 2023-12-12 23:16:22 +01:00
Giovanni Mascellani
bd50f15d31 vkd3d-shader/d3d-asm: Indent on IFC. 2023-12-12 23:16:21 +01:00
Conor McCarthy
cdb9eecfd1 vkd3d-shader/spirv: Introduce a compiler feature flag for int64 capability. 2023-12-12 22:50:53 +01:00
Conor McCarthy
108941fce0 tests/shader-runner: Add 64-bit bitwise tests. 2023-12-12 22:50:52 +01:00
Conor McCarthy
27d4ccf225 tests/shader-runner: Add 64-bit arithmetic tests. 2023-12-12 22:50:51 +01:00
Conor McCarthy
8a1eb306e8 tests/shader-runner: Introduce a 'float64' requirement directive. 2023-12-12 22:50:50 +01:00
Conor McCarthy
95c48eb98e tests/shader-runner: Introduce an 'int64' requirement directive. 2023-12-12 22:50:49 +01:00
Conor McCarthy
0610867334 vkd3d-shader/spirv: Emit an error if 64-bit integers are used. 2023-12-12 22:50:48 +01:00
Conor McCarthy
1929432559 vkd3d-shader: Introduce an instruction flag to suppress masking of bitwise shift counts.
DXIL does not use implicit masking of shift counts.
2023-12-12 22:50:46 +01:00
Fabian Maurer
9cb4372378 vkd3d-shader/dxil: Check null pointer before it is dereferenced (Coverity). 2023-12-11 23:18:58 +01:00
Conor McCarthy
af86cdf713 tests/shader-runner: Add a non-const-indexing test for asfloat() result storage. 2023-12-11 23:18:54 +01:00
Conor McCarthy
2037daae32 vkd3d-shader/spirv: Bitcast if necessary in the spirv_compiler_emit_mov() general implementation.
In SM 6, this is needed when storing an asfloat() or asuint() result in
an indexable temp, because dxc performs the bitcast by casting the
destination pointer.
2023-12-11 23:18:52 +01:00
Conor McCarthy
3db7c2a62d vkd3d-shader/dxil: Implement the DXIL STORE instruction. 2023-12-11 23:18:51 +01:00
Conor McCarthy
2d5f2bf7a4 vkd3d-shader/dxil: Implement the DXIL ALLOCA instruction. 2023-12-11 23:18:50 +01:00
Conor McCarthy
df82c61482 tests/shader-runner: Test an uninitialised indexable temp. 2023-12-11 23:18:49 +01:00
Zebediah Figura
d49bccea9a vkd3d-shader/dxil: No longer synthesize DCL instructions. 2023-12-11 23:18:45 +01:00
Zebediah Figura
66cb2815f0 vkd3d-shader/spirv: Declare I/O registers from the signature.
Instead of parsing DCL instructions.

This allows sm1 to work without further effort, and simplifies sm6 code.
2023-12-11 23:18:44 +01:00
Zebediah Figura
75348dff12 vkd3d-shader/dxil: Map SEMANTIC_KIND_TARGET to VKD3D_SHADER_SV_TARGET. 2023-12-11 23:18:43 +01:00
Zebediah Figura
cabf9996f9 vkd3d-shader/tpf: Do not uninvert used masks for domain shader patch constants. 2023-12-11 23:18:42 +01:00
Zebediah Figura
8876030590 vkd3d-shader/spirv: Do not use the output_info array for patch constants. 2023-12-11 23:18:40 +01:00
Conor McCarthy
45679a966c vkd3d-shader/ir: Pass a local copy of location to control_point_normaliser_emit_hs_input(). 2023-12-07 21:57:49 +01:00
Stefan Dösinger
b0d1fb0bd7 tests: Show that CreatePipelineState also doesn't reuse duplicate objects. 2023-12-07 21:57:45 +01:00
Stefan Dösinger
1eaf7fa37b tests: Show that compute pipeline state objects are not reused. 2023-12-07 21:57:45 +01:00
Stefan Dösinger
82a3209ee2 tests: Show that graphics pipeline state objects are not reused. 2023-12-07 21:57:45 +01:00
Stefan Dösinger
705cf10626 tests: Show that creating identical root signatures returns the same pointer. 2023-12-07 21:57:45 +01:00
Zebediah Figura
26a30b8539 configure: Enable -Wshadow. 2023-12-07 21:57:36 +01:00
Zebediah Figura
28f32349f4 vkd3d-shader: Add a helper to search the scan descriptor info.
Avoid shadowing "info" in vkd3d_shader_scan_combined_sampler_declaration().
2023-12-07 21:57:34 +01:00
Zebediah Figura
dfea1abbd8 vkd3d-shader/hlsl: Avoid shadowing "jump" in normalize_switch_cases(). 2023-12-07 21:57:33 +01:00
Zebediah Figura
98a02ceffb vkd3d-shader/hlsl: Avoid shadowing "load" in intrinsic_tex(). 2023-12-07 21:57:31 +01:00
Zebediah Figura
a102e99897 vkd3d-shader/hlsl: Avoid shadowing "block" in resolve_loop_continue(). 2023-12-07 21:57:30 +01:00
Zebediah Figura
ca8492c855 vkd3d-shader/d3dbc: Avoid shadowing "instr" in write_sm1_jump(). 2023-12-07 21:57:28 +01:00
Zebediah Figura
fcd6ec33bd tests: Avoid shadowing "l" in test_get_copyable_footprints().
Found with -Wshadow.
2023-12-07 21:57:18 +01:00
Zebediah Figura
46e135f6a7 vkd3d-shader/hlsl: Avoid shadowing "load" in lower_index_loads().
Found with -Wshadow.
2023-12-07 21:57:16 +01:00
Conor McCarthy
a4a1b4c557 vkd3d-shader/dxil: Set the result register data type for nop casts.
Casts from minimum precision types are emitted as nop, but the result
value type must be set to the cast result type.
2023-12-07 21:57:08 +01:00
Conor McCarthy
1630fd9a3c vkd3d-shader/dxil: Apply metadata attachments to instructions.
These are apparently only used for 'dx.op' intrinsics, because the
instructions based on native LLVM ones have their own way to apply
attributes.
2023-12-07 21:57:00 +01:00
Conor McCarthy
a33a9127ca vkd3d-shader/dxil: Implement DX intrinsic Unary. 2023-12-07 21:56:53 +01:00
Conor McCarthy
cc5e703802 vkd3d-shader/dxil: Emit constant global arrays as immediate constant buffers. 2023-12-07 21:56:47 +01:00
Conor McCarthy
cb88844a3d vkd3d-shader: Add a register index to struct vkd3d_shader_immediate_constant_buffer. 2023-12-07 21:56:47 +01:00
Conor McCarthy
ef940cb778 vkd3d-shader/spirv: Support declared component type and count in immediate constant buffers. 2023-12-07 21:56:45 +01:00
Conor McCarthy
16cb6fdbad vkd3d-shader/spirv: Support constant initialisers in indexable temps. 2023-12-07 21:56:44 +01:00
Conor McCarthy
ffae57eb8d vkd3d-shader/dxil: Support null constant arrays. 2023-12-07 21:56:43 +01:00
Conor McCarthy
69c3946c85 vkd3d-shader/spirv: Support declared component type and count in indexable temps. 2023-12-07 21:56:41 +01:00
174 changed files with 18381 additions and 4303 deletions

789
ANNOUNCE

File diff suppressed because it is too large Load Diff

View File

@@ -13,6 +13,7 @@ Derek Lesho
Ethan Lee
Evan Tang
Fabian Maurer
Florian Weimer
Francisco Casas
Francois Gouget
Giovanni Mascellani
@@ -33,6 +34,7 @@ Rémi Bernon
Robin Kertels
Stefan Dösinger
Sven Hesse
Victor Chiletto
Vinson Lee
Zebediah Figura
Zhiyi Zhang

View File

@@ -1,4 +1,4 @@
Copyright 2016-2023 the Vkd3d project authors (see the file AUTHORS for a
Copyright 2016-2024 the Vkd3d project authors (see the file AUTHORS for a
complete list)
Vkd3d is free software; you can redistribute it and/or modify it under

View File

@@ -6,6 +6,7 @@ AM_LDFLAGS = -no-undefined
widl_headers = \
include/vkd3d_d3d12.h \
include/vkd3d_d3d12sdklayers.h \
include/vkd3d_d3d12shader.h \
include/vkd3d_d3dcommon.h \
include/vkd3d_d3dx9shader.h \
include/vkd3d_dxgi.h \
@@ -21,6 +22,7 @@ vkd3d_public_headers = \
include/vkd3d.h \
include/vkd3d_d3d12.h \
include/vkd3d_d3d12sdklayers.h \
include/vkd3d_d3d12shader.h \
include/vkd3d_d3d9types.h \
include/vkd3d_d3dcommon.h \
include/vkd3d_d3dcompiler.h \
@@ -47,6 +49,7 @@ vkd3d_shader_tests = \
tests/hlsl/abs.shader_test \
tests/hlsl/all.shader_test \
tests/hlsl/angle-unit.shader_test \
tests/hlsl/annotations.shader_test \
tests/hlsl/any.shader_test \
tests/hlsl/arithmetic-float-uniform.shader_test \
tests/hlsl/arithmetic-float.shader_test \
@@ -72,6 +75,7 @@ vkd3d_shader_tests = \
tests/hlsl/cast-to-uint.shader_test \
tests/hlsl/cbuffer.shader_test \
tests/hlsl/ceil.shader_test \
tests/hlsl/cf-cond-types.shader_test \
tests/hlsl/clamp.shader_test \
tests/hlsl/clip.shader_test \
tests/hlsl/combined-samplers.shader_test \
@@ -117,6 +121,7 @@ vkd3d_shader_tests = \
tests/hlsl/initializer-struct.shader_test \
tests/hlsl/intrinsic-override.shader_test \
tests/hlsl/invalid.shader_test \
tests/hlsl/inverse-trig.shader_test \
tests/hlsl/is-front-face.shader_test \
tests/hlsl/ldexp.shader_test \
tests/hlsl/length.shader_test \
@@ -147,8 +152,10 @@ vkd3d_shader_tests = \
tests/hlsl/object-parameters.shader_test \
tests/hlsl/object-references.shader_test \
tests/hlsl/pow.shader_test \
tests/hlsl/rasteriser-ordered-views.shader_test \
tests/hlsl/reflect.shader_test \
tests/hlsl/register-reservations.shader_test \
tests/hlsl/register-reservations-numeric.shader_test \
tests/hlsl/register-reservations-resources.shader_test \
tests/hlsl/return-implicit-conversion.shader_test \
tests/hlsl/return.shader_test \
tests/hlsl/round.shader_test \
@@ -163,8 +170,12 @@ vkd3d_shader_tests = \
tests/hlsl/side-effects.shader_test \
tests/hlsl/sign.shader_test \
tests/hlsl/single-numeric-initializer.shader_test \
tests/hlsl/sm1-const-folding.shader_test \
tests/hlsl/sm6-ternary.shader_test \
tests/hlsl/sm6-uav-rwtexture.shader_test \
tests/hlsl/smoothstep.shader_test \
tests/hlsl/sqrt.shader_test \
tests/hlsl/srv-buffers.shader_test \
tests/hlsl/state-block-syntax.shader_test \
tests/hlsl/static-initializer.shader_test \
tests/hlsl/step.shader_test \
@@ -188,6 +199,7 @@ vkd3d_shader_tests = \
tests/hlsl/trigonometry.shader_test \
tests/hlsl/trunc.shader_test \
tests/hlsl/type-names.shader_test \
tests/hlsl/uav-atomics.shader_test \
tests/hlsl/uav-load.shader_test \
tests/hlsl/uav-out-param.shader_test \
tests/hlsl/uav-rwbuffer.shader_test \
@@ -294,6 +306,7 @@ libvkd3d_shader_la_SOURCES = \
libs/vkd3d-shader/d3dbc.c \
libs/vkd3d-shader/dxbc.c \
libs/vkd3d-shader/dxil.c \
libs/vkd3d-shader/fx.c \
libs/vkd3d-shader/glsl.c \
libs/vkd3d-shader/hlsl.c \
libs/vkd3d-shader/hlsl.h \
@@ -307,7 +320,7 @@ libvkd3d_shader_la_SOURCES = \
libs/vkd3d-shader/vkd3d_shader_main.c \
libs/vkd3d-shader/vkd3d_shader_private.h
libvkd3d_shader_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_SHADER_SOURCE -I$(srcdir)/libs/vkd3d-shader @SPIRV_TOOLS_CFLAGS@
libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 9:0:8
libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 10:0:9
libvkd3d_shader_la_LIBADD = libvkd3d-common.la @SPIRV_TOOLS_LIBS@ -lm
if HAVE_LD_VERSION_SCRIPT
libvkd3d_shader_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-shader/vkd3d_shader.map
@@ -342,7 +355,7 @@ libvkd3d_la_SOURCES = \
libs/vkd3d/vkd3d_shaders.h \
libs/vkd3d/vulkan_procs.h
libvkd3d_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_SOURCE
libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 11:0:10
libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 12:0:11
libvkd3d_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la @DL_LIBS@ @PTHREAD_LIBS@
if HAVE_LD_VERSION_SCRIPT
libvkd3d_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d/vkd3d.map
@@ -350,11 +363,12 @@ EXTRA_libvkd3d_la_DEPENDENCIES = $(srcdir)/libs/vkd3d/vkd3d.map
endif
libvkd3d_utils_la_SOURCES = \
libs/vkd3d-utils/reflection.c \
libs/vkd3d-utils/vkd3d_utils.map \
libs/vkd3d-utils/vkd3d_utils_main.c \
libs/vkd3d-utils/vkd3d_utils_private.h
libvkd3d_utils_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_UTILS_SOURCE
libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 5:0:4
libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 6:0:5
libvkd3d_utils_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la libvkd3d.la @PTHREAD_LIBS@
if HAVE_LD_VERSION_SCRIPT
libvkd3d_utils_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-utils/vkd3d_utils.map

2
README
View File

@@ -9,7 +9,7 @@ similar, but not identical, to Direct3D 12.
Building vkd3d
==============
Vkd3d depends on SPIRV-Headers and Vulkan-Headers (>= 1.2.148).
Vkd3d depends on SPIRV-Headers and Vulkan-Headers (>= 1.3.228).
Vkd3d generates some of its headers from IDL files. If you are using the
release tarballs, then these headers are pre-generated and are included. If

View File

@@ -1,5 +1,5 @@
AC_PREREQ([2.69])
AC_INIT([vkd3d],[1.10])
AC_INIT([vkd3d],[1.11])
AC_CONFIG_AUX_DIR([bin])
AC_CONFIG_MACRO_DIR([m4])
@@ -59,13 +59,18 @@ AS_IF([test "x${GCC}" = "xyes"],
VKD3D_CHECK_CFLAGS([-std=c99])
VKD3D_CHECK_CFLAGS([-fvisibility=hidden])
VKD3D_CHECK_CFLAGS([-Wdeclaration-after-statement])
VKD3D_CHECK_CFLAGS([-Wempty-body])
VKD3D_CHECK_CFLAGS([-Wenum-conversion])
VKD3D_CHECK_CFLAGS([-Wimplicit-fallthrough])
VKD3D_CHECK_CFLAGS([-Winit-self])
VKD3D_CHECK_CFLAGS([-Wmissing-prototypes])
VKD3D_CHECK_CFLAGS([-Wpointer-arith])
VKD3D_CHECK_CFLAGS([-Wshadow])
VKD3D_CHECK_CFLAGS([-Wshift-overflow=2])
VKD3D_CHECK_CFLAGS([-Wtype-limits])
VKD3D_CHECK_CFLAGS([-Wunused-but-set-parameter])
VKD3D_CHECK_CFLAGS([-Wvla])
VKD3D_CHECK_CFLAGS([-Wpointer-arith])
VKD3D_CHECK_CFLAGS([-Wenum-conversion])
VKD3D_CHECK_CFLAGS([-Wwrite-strings])
VKD3D_CHECK_CFLAGS([-Wl,--no-undefined])])
dnl Check for cross compilers
@@ -85,7 +90,7 @@ AS_IF([test "x$ac_cv_header_spirv_unified1_GLSL_std_450_h" != "xyes" \
-a "x$ac_cv_header_vulkan_GLSL_std_450_h" != "xyes"],
[AC_MSG_ERROR([GLSL.std.450.h not found.])])
VKD3D_CHECK_VULKAN_HEADER_VERSION([148], [AC_MSG_ERROR([Vulkan headers are too old, 1.2.148 is required.])])
VKD3D_CHECK_VULKAN_HEADER_VERSION([228], [AC_MSG_ERROR([Vulkan headers are too old, 1.3.228 is required.])])
AC_CHECK_DECL([SpvCapabilityDemoteToHelperInvocationEXT],, [AC_MSG_ERROR([SPIR-V headers are too old.])], [
#ifdef HAVE_SPIRV_UNIFIED1_SPIRV_H
@@ -153,10 +158,9 @@ VKD3D_CHECK_FUNC([HAVE_BUILTIN_CLZ], [__builtin_clz], [__builtin_clz(0)])
VKD3D_CHECK_FUNC([HAVE_BUILTIN_POPCOUNT], [__builtin_popcount], [__builtin_popcount(0)])
VKD3D_CHECK_FUNC([HAVE_BUILTIN_ADD_OVERFLOW], [__builtin_add_overflow], [__builtin_add_overflow(0, 0, (int *)0)])
VKD3D_CHECK_FUNC([HAVE_SYNC_ADD_AND_FETCH], [__sync_add_and_fetch], [__sync_add_and_fetch((int *)0, 0)])
VKD3D_CHECK_FUNC([HAVE_SYNC_SUB_AND_FETCH], [__sync_sub_and_fetch], [__sync_sub_and_fetch((int *)0, 0)])
VKD3D_CHECK_FUNC([HAVE_SYNC_BOOL_COMPARE_AND_SWAP], [__sync_bool_compare_and_swap], [__sync_bool_compare_and_swap((int *)0, 0, 0)])
VKD3D_CHECK_FUNC([HAVE_ATOMIC_EXCHANGE_N], [__atomic_exchange_n], [__atomic_exchange_n((int *)0, 0, 0)])
VKD3D_CHECK_FUNC([HAVE_GETTID], [gettid], [gettid()])
AC_CHECK_FUNCS([gettid])
dnl Makefiles
case $host_os in

View File

@@ -19,7 +19,7 @@
#define VK_NO_PROTOTYPES
#define VK_USE_PLATFORM_XCB_KHR
#define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_10
#define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_11
#include "config.h"
#include <vkd3d.h>
#include <vkd3d_utils.h>

View File

@@ -5,7 +5,7 @@ vkd3d testing scripts
These scripts are used by the GitLab CI feature to automatically run
the vkd3d tests on each merge request.
The CI target build-image, in the file image.yml, builds a Docker
The CI target image-linux, in the file image.yml, builds a Docker
image based on Debian bookworm with all the packages required for
testing, and uploads it to the GitLab container registry. The Docker
script is in the file image.docker.

View File

@@ -12,14 +12,16 @@ rm -fr build
mkdir build
cd build
export LD_LIBRARY_PATH=/usr/local/lib
if ../configure --enable-demos DXCOMPILER_LIBS="-L/usr/local/lib" CFLAGS="-g -O2 -Werror" CPPFLAGS="-DVKD3D_SHADER_UNSUPPORTED_DXIL" && \
if ../configure --enable-demos --with-spirv-tools DXCOMPILER_LIBS="-L/usr/local/lib" CFLAGS="-g -O2 -Werror" CPPFLAGS="-DVKD3D_SHADER_UNSUPPORTED_DXIL" && \
make -j$(nproc) ; then
make -j$(nproc) check || \
make -j$(nproc) AM_COLOR_TESTS=always check || \
touch ../tests_failed
else
touch ../build_failed
fi
cat tests/d3d12.log | grep -E 'd3d12: [0-9]+ tests executed' || true
mkdir -p ../artifacts/$COMMIT
rsync -Rr config.log doc/* test-suite.log tests/*.log tests/*/*.log ../artifacts/$COMMIT || true

View File

@@ -13,12 +13,14 @@ mkdir build
cd build
if ../configure CFLAGS="-g -O2 -Wno-implicit-fallthrough -Werror" && \
make -j$(sysctl -n hw.ncpu) ; then
make -j$(sysctl -n hw.ncpu) check || \
make -j$(sysctl -n hw.ncpu) AM_COLOR_TESTS=always check || \
touch ../tests_failed
else
touch ../build_failed
fi
cat tests/d3d12.log | grep -E 'd3d12: [0-9]+ tests executed' || true
mkdir -p ../artifacts/$COMMIT
rsync -Rr config.log test-suite.log tests/*.log tests/*/*.log ../artifacts/$COMMIT || true

View File

@@ -13,7 +13,7 @@ mkdir build
cd build
mkdir vulkan-headers
cp -r /usr/include/vulkan /usr/include/vk_video /usr/include/spirv vulkan-headers
../configure --enable-demos --disable-doxygen-doc --without-ncurses --host=$HOST SONAME_LIBVULKAN="vulkan-1.dll" CPPFLAGS="-I$PWD/vulkan-headers" CFLAGS="-g -O2 -Wno-format -Wno-array-bounds -Werror" LDFLAGS="-static-libgcc" && \
../configure --enable-demos --disable-doxygen-doc --without-ncurses --host=$HOST SONAME_LIBVULKAN="vulkan-1.dll" CPPFLAGS="-I$PWD/vulkan-headers" CFLAGS="-g -O2 -Wno-array-bounds -Werror" LDFLAGS="-static-libgcc" && \
make -j$(nproc) && \
make -j$(nproc) install DESTDIR="$PWD/destdir" || \
touch ../pipeline_failed

View File

@@ -5,7 +5,7 @@
image: $CI_REGISTRY/wine/vkd3d:debian-bookworm
interruptible: true
needs:
- job: build-image
- job: image-linux
optional: true
dependencies: []
script:
@@ -48,7 +48,7 @@ build-radv-32:
- amd-gpu
variables:
VK_LOADER_DRIVERS_SELECT: 'radeon_*'
CC: 'gcc -m32'
CC: 'i686-linux-gnu-gcc'
VKD3D_SHADER_CONFIG: 'force_validation'
build-llvmpipe-32:
@@ -58,7 +58,7 @@ build-llvmpipe-32:
- 2
variables:
VK_LOADER_DRIVERS_SELECT: 'lvp_*'
CC: 'gcc -m32'
CC: 'i686-linux-gnu-gcc'
VKD3D_SHADER_CONFIG: 'force_validation'
build-crosstest:
@@ -68,7 +68,7 @@ build-crosstest:
image: $CI_REGISTRY/wine/vkd3d:debian-bookworm
interruptible: true
needs:
- job: build-image
- job: image-linux
optional: true
dependencies: []
script:
@@ -94,7 +94,7 @@ build-crosstest:
image: $CI_REGISTRY/wine/vkd3d:debian-bookworm
interruptible: true
needs:
- job: build-image
- job: image-linux
optional: true
dependencies: []
script:
@@ -130,7 +130,9 @@ build-mac:
exit_codes:
- 2
interruptible: true
needs: []
needs:
- job: image-mac
optional: true
dependencies: []
tags:
- mac
@@ -147,14 +149,9 @@ build-mac:
- system_profiler SPSoftwareDataType SPHardwareDataType > artifacts/systeminfo.txt
- vulkaninfo > artifacts/vulkaninfo.txt
- export PATH="/usr/local/opt/bison/bin:/usr/local/opt/flex/bin:$PATH"
- git clone --depth 1 --branch wine-3.21 https://gitlab.winehq.org/wine/wine.git
- cd wine
- mkdir build
- cd build
- ../configure --enable-win64 --without-x --without-freetype
- make tools/widl/widl
- cd ../..
- export PATH="$PWD/wine/build/tools/widl:$PATH"
- curl -o image.zip https://gitlab.winehq.org/api/v4/projects/wine%2Fvkd3d/jobs/artifacts/master/download?job=image-mac
- unzip image.zip
- export PATH="$PWD/image/bin:$PATH"
- git rebase $CI_MERGE_REQUEST_DIFF_BASE_SHA --exec ./gitlab/build-mac
- if [ -f build_failed ] ; then exit 1 ; fi
- if [ -f tests_failed ] ; then exit 2 ; fi

View File

@@ -2,6 +2,12 @@
WORKDIR /tmp
# Package spirv-tools from Debian has two problems for us: first, it
# doesn't have shared libraries; second, it's not multiarch. So we
# have to rebuild it with some tweaks. In order to make it multiarch
# we also have to drop the executables, but we don't care about those
# anyway.
RUN export DEBIAN_FRONTEND=noninteractive; \
echo 'path-exclude=/usr/share/doc/*' > /etc/dpkg/dpkg.cfg.d/99-exclude-cruft && \
echo 'path-exclude=/usr/share/locale/*' >> /etc/dpkg/dpkg.cfg.d/99-exclude-cruft && \
@@ -11,9 +17,10 @@ RUN export DEBIAN_FRONTEND=noninteractive; \
echo 'exit 101' >> /usr/sbin/policy-rc.d && \
chmod +x /usr/sbin/policy-rc.d && \
dpkg --add-architecture i386 && \
sed -i -e 's|Types: deb|Types: deb deb-src|g' /etc/apt/sources.list.d/* && \
apt-get update && \
apt-get dist-upgrade -y && \
apt-get install -y build-essential pkg-config gcc-multilib gcc-mingw-w64 \
apt-get install -y build-essential pkg-config gcc-mingw-w64 crossbuild-essential-i386 \
autoconf automake libtool flex bison curl \
git ca-certificates rsync \
doxygen doxygen-latex graphviz \
@@ -27,6 +34,8 @@ RUN export DEBIAN_FRONTEND=noninteractive; \
libxcb-util-dev libxcb-util-dev:i386 \
libxcb-icccm4-dev libxcb-icccm4-dev:i386 \
libxcb-keysyms1-dev libxcb-keysyms1-dev:i386 && \
apt-get build-dep -y spirv-tools && \
apt-get build-dep -y -ai386 spirv-tools && \
git clone --depth 1 --branch wine-3.21 https://gitlab.winehq.org/wine/wine.git && \
cd wine && \
mkdir build && \
@@ -36,6 +45,26 @@ RUN export DEBIAN_FRONTEND=noninteractive; \
cp tools/widl/widl /usr/local/bin && \
cd ../.. && \
rm -rf wine && \
apt-get source spirv-tools && \
cd spirv-tools-* && \
sed -i -e 's|-DBUILD_SHARED_LIBS=OFF|-DBUILD_SHARED_LIBS=ON|g' debian/rules && \
sed -i -e 's|dh_install$|dh_install \&\& rm debian/spirv-tools/usr/bin/*|g' debian/rules && \
sed -i '/Architecture: any/a Multi-Arch: same' debian/control && \
dpkg-buildpackage -uc -us && \
cd .. && \
rm -f spirv-tools-dbgsym_*.deb && \
dpkg -i spirv-tools_*.deb && \
rm -fr * && \
apt-get source spirv-tools && \
cd spirv-tools-* && \
sed -i -e 's|-DBUILD_SHARED_LIBS=OFF|-DBUILD_SHARED_LIBS=ON|g' debian/rules && \
sed -i -e 's|dh_install$|dh_install \&\& rm debian/spirv-tools/usr/bin/*|g' debian/rules && \
sed -i '/Architecture: any/a Multi-Arch: same' debian/control && \
CONFIG_SITE=/etc/dpkg-cross/cross-config.amd64 DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -ai386 -Pcross,nocheck -uc -us && \
cd .. && \
rm -f spirv-tools-dbgsym_*.deb && \
dpkg -i spirv-tools_*.deb && \
rm -fr * && \
apt-get clean && \
curl -L -s https://github.com/microsoft/DirectXShaderCompiler/releases/download/v1.7.2308/linux_dxc_2023_08_14.x86_64.tar.gz | tar zx -C /usr/local ./lib/libdxcompiler.so ./lib/libdxil.so && \
groupadd host-render -g 800 && \

View File

@@ -1,4 +1,4 @@
build-image:
image-linux:
stage: image
rules:
- if: $CI_PIPELINE_SOURCE == 'push' && $CI_PROJECT_PATH == "wine/vkd3d" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
@@ -18,3 +18,32 @@ build-image:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(printf "%s:%s" "$CI_REGISTRY_USER" "$CI_REGISTRY_PASSWORD" | base64 | tr -d '\n')\"},\"$CI_DEPENDENCY_PROXY_SERVER\":{\"auth\":\"$(printf "%s:%s" "$CI_DEPENDENCY_PROXY_USER" "$CI_DEPENDENCY_PROXY_PASSWORD" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
- sed -i "1iFROM $IMAGE_SOURCE" "$DOCKER_FILE"
- /kaniko/executor --context "$CI_PROJECT_DIR" --dockerfile "$DOCKER_FILE" --destination "$IMAGE_LOCAL"
image-mac:
stage: image
rules:
- if: $CI_PIPELINE_SOURCE == 'push' && $CI_PROJECT_PATH == "wine/vkd3d" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
- .gitlab-ci.yml
- gitlab/image.yml
interruptible: true
tags:
- mac
script:
- mkdir image
- cd image
- mkdir bin
- export PATH="/usr/local/opt/bison/bin:/usr/local/opt/flex/bin:$PATH"
- git clone --depth 1 --branch wine-3.21 https://gitlab.winehq.org/wine/wine.git
- cd wine
- mkdir build
- cd build
- ../configure --enable-win64 --without-x --without-freetype
- make tools/widl/widl
- cd ../..
- cp wine/build/tools/widl/widl bin
- rm -fr wine
- cd ..
artifacts:
paths:
- image

View File

@@ -52,6 +52,7 @@
#define TAG_AON9 VKD3D_MAKE_TAG('A', 'o', 'n', '9')
#define TAG_DXBC VKD3D_MAKE_TAG('D', 'X', 'B', 'C')
#define TAG_DXIL VKD3D_MAKE_TAG('D', 'X', 'I', 'L')
#define TAG_FX10 VKD3D_MAKE_TAG('F', 'X', '1', '0')
#define TAG_ISG1 VKD3D_MAKE_TAG('I', 'S', 'G', '1')
#define TAG_ISGN VKD3D_MAKE_TAG('I', 'S', 'G', 'N')
#define TAG_OSG1 VKD3D_MAKE_TAG('O', 'S', 'G', '1')
@@ -63,6 +64,7 @@
#define TAG_RDEF VKD3D_MAKE_TAG('R', 'D', 'E', 'F')
#define TAG_RTS0 VKD3D_MAKE_TAG('R', 'T', 'S', '0')
#define TAG_SDBG VKD3D_MAKE_TAG('S', 'D', 'B', 'G')
#define TAG_SFI0 VKD3D_MAKE_TAG('S', 'F', 'I', '0')
#define TAG_SHDR VKD3D_MAKE_TAG('S', 'H', 'D', 'R')
#define TAG_SHEX VKD3D_MAKE_TAG('S', 'H', 'E', 'X')
#define TAG_STAT VKD3D_MAKE_TAG('S', 'T', 'A', 'T')
@@ -70,7 +72,7 @@
#define TAG_XNAP VKD3D_MAKE_TAG('X', 'N', 'A', 'P')
#define TAG_XNAS VKD3D_MAKE_TAG('X', 'N', 'A', 'S')
static inline size_t align(size_t addr, size_t alignment)
static inline uint64_t align(uint64_t addr, size_t alignment)
{
return (addr + (alignment - 1)) & ~(alignment - 1);
}
@@ -266,34 +268,42 @@ static inline int ascii_strcasecmp(const char *a, const char *b)
return c_a - c_b;
}
#ifndef _WIN32
# if HAVE_SYNC_ADD_AND_FETCH
static inline LONG InterlockedIncrement(LONG volatile *x)
{
return __sync_add_and_fetch(x, 1);
}
static inline LONG64 InterlockedIncrement64(LONG64 volatile *x)
{
return __sync_add_and_fetch(x, 1);
}
static inline LONG InterlockedAdd(LONG volatile *x, LONG val)
static inline uint64_t vkd3d_atomic_add_fetch_u64(uint64_t volatile *x, uint64_t val)
{
#if HAVE_SYNC_ADD_AND_FETCH
return __sync_add_and_fetch(x, val);
#elif defined(_WIN32)
return InterlockedAdd64((LONG64 *)x, val);
#else
# error "vkd3d_atomic_add_fetch_u64() not implemented for this platform"
#endif
}
# else
# error "InterlockedIncrement() not implemented for this platform"
# endif /* HAVE_SYNC_ADD_AND_FETCH */
# if HAVE_SYNC_SUB_AND_FETCH
static inline LONG InterlockedDecrement(LONG volatile *x)
static inline uint32_t vkd3d_atomic_add_fetch_u32(uint32_t volatile *x, uint32_t val)
{
return __sync_sub_and_fetch(x, 1);
#if HAVE_SYNC_ADD_AND_FETCH
return __sync_add_and_fetch(x, val);
#elif defined(_WIN32)
return InterlockedAdd((LONG *)x, val);
#else
# error "vkd3d_atomic_add_fetch_u32() not implemented for this platform"
#endif
}
# else
# error "InterlockedDecrement() not implemented for this platform"
# endif
#endif /* _WIN32 */
static inline uint64_t vkd3d_atomic_increment_u64(uint64_t volatile *x)
{
return vkd3d_atomic_add_fetch_u64(x, 1);
}
static inline uint32_t vkd3d_atomic_decrement_u32(uint32_t volatile *x)
{
return vkd3d_atomic_add_fetch_u32(x, ~0u);
}
static inline uint32_t vkd3d_atomic_increment_u32(uint32_t volatile *x)
{
return vkd3d_atomic_add_fetch_u32(x, 1);
}
static inline void vkd3d_parse_version(const char *version, int *major, int *minor)
{

View File

@@ -89,6 +89,10 @@ const char *debugstr_w(const WCHAR *wstr, size_t wchar_size);
#define TRACE_ON() (vkd3d_dbg_get_level() == VKD3D_DBG_LEVEL_TRACE)
#endif
#ifndef WARN_ON
#define WARN_ON() (vkd3d_dbg_get_level() >= VKD3D_DBG_LEVEL_WARN)
#endif
#define FIXME_ONCE VKD3D_DBG_LOG_ONCE(FIXME, WARN)
#define VKD3D_DEBUG_ENV_NAME(name) const char *const vkd3d_dbg_env_name = name
@@ -104,6 +108,29 @@ static inline const char *debugstr_guid(const GUID *guid)
guid->Data4[5], guid->Data4[6], guid->Data4[7]);
}
static inline const char *debugstr_hresult(HRESULT hr)
{
switch (hr)
{
#define TO_STR(u) case u: return #u;
TO_STR(S_OK)
TO_STR(S_FALSE)
TO_STR(E_NOTIMPL)
TO_STR(E_NOINTERFACE)
TO_STR(E_POINTER)
TO_STR(E_ABORT)
TO_STR(E_FAIL)
TO_STR(E_OUTOFMEMORY)
TO_STR(E_INVALIDARG)
TO_STR(DXGI_ERROR_NOT_FOUND)
TO_STR(DXGI_ERROR_MORE_DATA)
TO_STR(DXGI_ERROR_UNSUPPORTED)
#undef TO_STR
default:
return vkd3d_dbg_sprintf("%#x", (int)hr);
}
}
unsigned int vkd3d_env_var_as_uint(const char *name, unsigned int default_value);
struct vkd3d_debug_option

View File

@@ -101,12 +101,12 @@ static void vkd3d_test_end_todo(void);
struct vkd3d_test_state
{
LONG success_count;
LONG failure_count;
LONG skip_count;
LONG todo_count;
LONG todo_success_count;
LONG bug_count;
unsigned int success_count;
unsigned int failure_count;
unsigned int skip_count;
unsigned int todo_count;
unsigned int todo_success_count;
unsigned int bug_count;
unsigned int debug_level;
@@ -150,13 +150,13 @@ vkd3d_test_check_assert_that(unsigned int line, bool result, const char *fmt, va
{
if (result)
{
InterlockedIncrement(&vkd3d_test_state.success_count);
vkd3d_atomic_increment_u32(&vkd3d_test_state.success_count);
if (vkd3d_test_state.debug_level > 1)
vkd3d_test_printf(line, "Test succeeded.\n");
}
else
{
InterlockedIncrement(&vkd3d_test_state.failure_count);
vkd3d_atomic_increment_u32(&vkd3d_test_state.failure_count);
vkd3d_test_printf(line, "Test failed: ");
vprintf(fmt, args);
}
@@ -180,7 +180,7 @@ vkd3d_test_check_ok(unsigned int line, bool result, const char *fmt, va_list arg
if (is_bug && vkd3d_test_state.bug_enabled)
{
InterlockedIncrement(&vkd3d_test_state.bug_count);
vkd3d_atomic_increment_u32(&vkd3d_test_state.bug_count);
if (is_todo)
result = !result;
if (result)
@@ -193,12 +193,12 @@ vkd3d_test_check_ok(unsigned int line, bool result, const char *fmt, va_list arg
{
if (result)
{
InterlockedIncrement(&vkd3d_test_state.todo_success_count);
vkd3d_atomic_increment_u32(&vkd3d_test_state.todo_success_count);
vkd3d_test_printf(line, "Todo succeeded: ");
}
else
{
InterlockedIncrement(&vkd3d_test_state.todo_count);
vkd3d_atomic_increment_u32(&vkd3d_test_state.todo_count);
vkd3d_test_printf(line, "Todo: ");
}
vprintf(fmt, args);
@@ -227,7 +227,7 @@ vkd3d_test_skip(unsigned int line, const char *fmt, ...)
vkd3d_test_printf(line, "Test skipped: ");
vprintf(fmt, args);
va_end(args);
InterlockedIncrement(&vkd3d_test_state.skip_count);
vkd3d_atomic_increment_u32(&vkd3d_test_state.skip_count);
}
static void VKD3D_PRINTF_FUNC(2, 3) VKD3D_UNUSED
@@ -277,6 +277,7 @@ int main(int argc, char **argv)
char *test_platform = getenv("VKD3D_TEST_PLATFORM");
const char *bug = getenv("VKD3D_TEST_BUG");
setvbuf(stdout, NULL, _IONBF, 0);
memset(&vkd3d_test_state, 0, sizeof(vkd3d_test_state));
vkd3d_test_state.debug_level = debug_level ? atoi(debug_level) : 0;
vkd3d_test_state.bug_enabled = bug ? atoi(bug) : true;
@@ -293,16 +294,14 @@ int main(int argc, char **argv)
vkd3d_test_main(argc, argv);
printf("%s: %lu tests executed (%lu failures, %lu skipped, %lu todo, %lu bugs).\n",
printf("%s: %u tests executed (%u failures, %u skipped, %u todo, %u bugs).\n",
vkd3d_test_name,
(unsigned long)(vkd3d_test_state.success_count
+ vkd3d_test_state.failure_count + vkd3d_test_state.todo_count
+ vkd3d_test_state.todo_success_count),
(unsigned long)(vkd3d_test_state.failure_count
+ vkd3d_test_state.todo_success_count),
(unsigned long)vkd3d_test_state.skip_count,
(unsigned long)vkd3d_test_state.todo_count,
(unsigned long)vkd3d_test_state.bug_count);
vkd3d_test_state.success_count + vkd3d_test_state.failure_count
+ vkd3d_test_state.todo_count + vkd3d_test_state.todo_success_count,
vkd3d_test_state.failure_count + vkd3d_test_state.todo_success_count,
vkd3d_test_state.skip_count,
vkd3d_test_state.todo_count,
vkd3d_test_state.bug_count);
if (test_platform)
free(test_platform);

View File

@@ -79,6 +79,7 @@ enum vkd3d_api_version
VKD3D_API_VERSION_1_8,
VKD3D_API_VERSION_1_9,
VKD3D_API_VERSION_1_10,
VKD3D_API_VERSION_1_11,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_API_VERSION),
};

View File

@@ -0,0 +1,306 @@
/*
* Copyright 2020 Paul Gofman for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
import "vkd3d_windows.h";
import "vkd3d_d3dcommon.idl";
typedef enum D3D12_SHADER_VERSION_TYPE
{
D3D12_SHVER_PIXEL_SHADER = 0x0,
D3D12_SHVER_VERTEX_SHADER = 0x1,
D3D12_SHVER_GEOMETRY_SHADER = 0x2,
D3D12_SHVER_HULL_SHADER = 0x3,
D3D12_SHVER_DOMAIN_SHADER = 0x4,
D3D12_SHVER_COMPUTE_SHADER = 0x5,
D3D12_SHVER_RESERVED0 = 0xfff0,
} D3D12_SHADER_VERSION_TYPE;
typedef struct _D3D12_SHADER_DESC
{
UINT Version;
const char *Creator;
UINT Flags;
UINT ConstantBuffers;
UINT BoundResources;
UINT InputParameters;
UINT OutputParameters;
UINT InstructionCount;
UINT TempRegisterCount;
UINT TempArrayCount;
UINT DefCount;
UINT DclCount;
UINT TextureNormalInstructions;
UINT TextureLoadInstructions;
UINT TextureCompInstructions;
UINT TextureBiasInstructions;
UINT TextureGradientInstructions;
UINT FloatInstructionCount;
UINT IntInstructionCount;
UINT UintInstructionCount;
UINT StaticFlowControlCount;
UINT DynamicFlowControlCount;
UINT MacroInstructionCount;
UINT ArrayInstructionCount;
UINT CutInstructionCount;
UINT EmitInstructionCount;
D3D_PRIMITIVE_TOPOLOGY GSOutputTopology;
UINT GSMaxOutputVertexCount;
D3D_PRIMITIVE InputPrimitive;
UINT PatchConstantParameters;
UINT cGSInstanceCount;
UINT cControlPoints;
D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive;
D3D_TESSELLATOR_PARTITIONING HSPartitioning;
D3D_TESSELLATOR_DOMAIN TessellatorDomain;
UINT cBarrierInstructions;
UINT cInterlockedInstructions;
UINT cTextureStoreInstructions;
} D3D12_SHADER_DESC;
typedef struct _D3D12_SHADER_VARIABLE_DESC
{
const char *Name;
UINT StartOffset;
UINT Size;
UINT uFlags;
void *DefaultValue;
UINT StartTexture;
UINT TextureSize;
UINT StartSampler;
UINT SamplerSize;
} D3D12_SHADER_VARIABLE_DESC;
typedef struct _D3D12_SHADER_TYPE_DESC
{
D3D_SHADER_VARIABLE_CLASS Class;
D3D_SHADER_VARIABLE_TYPE Type;
UINT Rows;
UINT Columns;
UINT Elements;
UINT Members;
UINT Offset;
const char *Name;
} D3D12_SHADER_TYPE_DESC;
typedef struct _D3D12_SHADER_BUFFER_DESC
{
const char *Name;
D3D_CBUFFER_TYPE Type;
UINT Variables;
UINT Size;
UINT uFlags;
} D3D12_SHADER_BUFFER_DESC;
typedef struct _D3D12_SHADER_INPUT_BIND_DESC
{
const char *Name;
D3D_SHADER_INPUT_TYPE Type;
UINT BindPoint;
UINT BindCount;
UINT uFlags;
D3D_RESOURCE_RETURN_TYPE ReturnType;
D3D_SRV_DIMENSION Dimension;
UINT NumSamples;
UINT Space;
UINT uID;
} D3D12_SHADER_INPUT_BIND_DESC;
typedef struct _D3D12_SIGNATURE_PARAMETER_DESC
{
const char *SemanticName;
UINT SemanticIndex;
UINT Register;
D3D_NAME SystemValueType;
D3D_REGISTER_COMPONENT_TYPE ComponentType;
BYTE Mask;
BYTE ReadWriteMask;
UINT Stream;
D3D_MIN_PRECISION MinPrecision;
} D3D12_SIGNATURE_PARAMETER_DESC;
typedef struct _D3D12_PARAMETER_DESC
{
const char *Name;
const char *SemanticName;
D3D_SHADER_VARIABLE_TYPE Type;
D3D_SHADER_VARIABLE_CLASS Class;
UINT Rows;
UINT Columns;
D3D_INTERPOLATION_MODE InterpolationMode;
D3D_PARAMETER_FLAGS Flags;
UINT FirstInRegister;
UINT FirstInComponent;
UINT FirstOutRegister;
UINT FirstOutComponent;
} D3D12_PARAMETER_DESC;
typedef struct _D3D12_FUNCTION_DESC
{
UINT Version;
const char *Creator;
UINT Flags;
UINT ConstantBuffers;
UINT BoundResources;
UINT InstructionCount;
UINT TempRegisterCount;
UINT TempArrayCount;
UINT DefCount;
UINT DclCount;
UINT TextureNormalInstructions;
UINT TextureLoadInstructions;
UINT TextureCompInstructions;
UINT TextureBiasInstructions;
UINT TextureGradientInstructions;
UINT FloatInstructionCount;
UINT IntInstructionCount;
UINT UintInstructionCount;
UINT StaticFlowControlCount;
UINT DynamicFlowControlCount;
UINT MacroInstructionCount;
UINT ArrayInstructionCount;
UINT MovInstructionCount;
UINT MovcInstructionCount;
UINT ConversionInstructionCount;
UINT BitwiseInstructionCount;
D3D_FEATURE_LEVEL MinFeatureLevel;
UINT64 RequiredFeatureFlags;
const char *Name;
INT FunctionParameterCount;
BOOL HasReturn;
BOOL Has10Level9VertexShader;
BOOL Has10Level9PixelShader;
} D3D12_FUNCTION_DESC;
typedef struct _D3D12_LIBRARY_DESC
{
const char *Creator;
UINT Flags;
UINT FunctionCount;
} D3D12_LIBRARY_DESC;
interface ID3D12ShaderReflectionConstantBuffer;
[
uuid(e913c351-783d-48ca-a1d1-4f306284ad56),
object,
local,
]
interface ID3D12ShaderReflectionType
{
HRESULT GetDesc(D3D12_SHADER_TYPE_DESC *desc);
ID3D12ShaderReflectionType *GetMemberTypeByIndex(UINT index);
ID3D12ShaderReflectionType *GetMemberTypeByName(const char *name);
const char *GetMemberTypeName(UINT index);
HRESULT IsEqual(ID3D12ShaderReflectionType *type);
ID3D12ShaderReflectionType *GetSubType();
ID3D12ShaderReflectionType *GetBaseClass();
UINT GetNumInterfaces();
ID3D12ShaderReflectionType *GetInterfaceByIndex(UINT index);
HRESULT IsOfType(ID3D12ShaderReflectionType *type);
HRESULT ImplementsInterface(ID3D12ShaderReflectionType *base);
}
[
uuid(8337a8a6-a216-444a-b2f4-314733a73aea),
object,
local,
]
interface ID3D12ShaderReflectionVariable
{
HRESULT GetDesc(D3D12_SHADER_VARIABLE_DESC *desc);
ID3D12ShaderReflectionType *GetType();
ID3D12ShaderReflectionConstantBuffer *GetBuffer();
UINT GetInterfaceSlot(UINT index);
}
[
uuid(c59598b4-48b3-4869-b9b1-b1618b14a8b7),
object,
local,
]
interface ID3D12ShaderReflectionConstantBuffer
{
HRESULT GetDesc(D3D12_SHADER_BUFFER_DESC *desc);
ID3D12ShaderReflectionVariable *GetVariableByIndex(UINT index);
ID3D12ShaderReflectionVariable *GetVariableByName(const char *name);
}
[
uuid(5a58797d-a72c-478d-8ba2-efc6b0efe88e),
object,
local,
]
interface ID3D12ShaderReflection : IUnknown
{
HRESULT GetDesc(D3D12_SHADER_DESC *desc);
ID3D12ShaderReflectionConstantBuffer *GetConstantBufferByIndex(UINT index);
ID3D12ShaderReflectionConstantBuffer *GetConstantBufferByName(const char *name);
HRESULT GetResourceBindingDesc(UINT index, D3D12_SHADER_INPUT_BIND_DESC *desc);
HRESULT GetInputParameterDesc(UINT index, D3D12_SIGNATURE_PARAMETER_DESC *desc);
HRESULT GetOutputParameterDesc(UINT index, D3D12_SIGNATURE_PARAMETER_DESC *desc);
HRESULT GetPatchConstantParameterDesc(UINT index, D3D12_SIGNATURE_PARAMETER_DESC *desc);
ID3D12ShaderReflectionVariable *GetVariableByName(const char *name);
HRESULT GetResourceBindingDescByName(const char *name, D3D12_SHADER_INPUT_BIND_DESC *desc);
UINT GetMovInstructionCount();
UINT GetMovcInstructionCount();
UINT GetConversionInstructionCount();
UINT GetBitwiseInstructionCount();
D3D_PRIMITIVE GetGSInputPrimitive();
BOOL IsSampleFrequencyShader();
UINT GetNumInterfaceSlots();
HRESULT GetMinFeatureLevel(D3D_FEATURE_LEVEL *level);
UINT GetThreadGroupSize(UINT *sizex, UINT *sizey, UINT *sizez);
UINT64 GetRequiresFlags();
}
[
uuid(ec25f42d-7006-4f2b-b33e-02cc3375733f),
object,
local,
]
interface ID3D12FunctionParameterReflection
{
HRESULT GetDesc(D3D12_PARAMETER_DESC *desc);
}
[
uuid(1108795c-2772-4ba9-b2a8-d464dc7e2799),
object,
local,
]
interface ID3D12FunctionReflection
{
HRESULT GetDesc(D3D12_FUNCTION_DESC *desc);
ID3D12ShaderReflectionConstantBuffer *GetConstantBufferByIndex(UINT index);
ID3D12ShaderReflectionConstantBuffer *GetConstantBufferByName(const char *name);
HRESULT GetResourceBindingDesc(UINT index, D3D12_SHADER_INPUT_BIND_DESC *desc);
ID3D12ShaderReflectionVariable *GetVariableByName(const char *name);
HRESULT GetResourceBindingDescByName(const char *name, D3D12_SHADER_INPUT_BIND_DESC *desc);
ID3D12FunctionParameterReflection *GetFunctionParameter(INT index);
}
[
uuid(8e349d19-54db-4a56-9dc9-119d87bdb804),
object,
local,
]
interface ID3D12LibraryReflection : IUnknown
{
HRESULT GetDesc(D3D12_LIBRARY_DESC *desc);
ID3D12FunctionReflection *GetFunctionByIndex(INT index);
}

View File

@@ -155,6 +155,7 @@ typedef enum D3D_PRIMITIVE_TOPOLOGY
typedef enum D3D_FEATURE_LEVEL
{
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000,
D3D_FEATURE_LEVEL_9_1 = 0x9100,
D3D_FEATURE_LEVEL_9_2 = 0x9200,
D3D_FEATURE_LEVEL_9_3 = 0x9300,
@@ -164,6 +165,7 @@ typedef enum D3D_FEATURE_LEVEL
D3D_FEATURE_LEVEL_11_1 = 0xb100,
D3D_FEATURE_LEVEL_12_0 = 0xc000,
D3D_FEATURE_LEVEL_12_1 = 0xc100,
D3D_FEATURE_LEVEL_12_2 = 0xc200,
} D3D_FEATURE_LEVEL;
typedef enum D3D_CBUFFER_TYPE
@@ -351,6 +353,78 @@ typedef enum _D3D_SHADER_VARIABLE_TYPE
D3D_SVT_FORCE_DWORD = 0x7fffffff,
} D3D_SHADER_VARIABLE_TYPE;
typedef enum D3D_TESSELLATOR_DOMAIN
{
D3D_TESSELLATOR_DOMAIN_UNDEFINED,
D3D_TESSELLATOR_DOMAIN_ISOLINE,
D3D_TESSELLATOR_DOMAIN_TRI,
D3D_TESSELLATOR_DOMAIN_QUAD,
D3D11_TESSELLATOR_DOMAIN_UNDEFINED = 0,
D3D11_TESSELLATOR_DOMAIN_ISOLINE,
D3D11_TESSELLATOR_DOMAIN_TRI,
D3D11_TESSELLATOR_DOMAIN_QUAD,
} D3D_TESSELLATOR_DOMAIN;
typedef enum D3D_TESSELLATOR_PARTITIONING
{
D3D_TESSELLATOR_PARTITIONING_UNDEFINED,
D3D_TESSELLATOR_PARTITIONING_INTEGER,
D3D_TESSELLATOR_PARTITIONING_POW2,
D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,
D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN,
D3D11_TESSELLATOR_PARTITIONING_UNDEFINED = 0,
D3D11_TESSELLATOR_PARTITIONING_INTEGER,
D3D11_TESSELLATOR_PARTITIONING_POW2,
D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,
D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN,
} D3D_TESSELLATOR_PARTITIONING;
typedef enum D3D_TESSELLATOR_OUTPUT_PRIMITIVE
{
D3D_TESSELLATOR_OUTPUT_UNDEFINED,
D3D_TESSELLATOR_OUTPUT_POINT,
D3D_TESSELLATOR_OUTPUT_LINE,
D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW,
D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW,
D3D11_TESSELLATOR_OUTPUT_UNDEFINED = 0,
D3D11_TESSELLATOR_OUTPUT_POINT,
D3D11_TESSELLATOR_OUTPUT_LINE,
D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW,
D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW,
} D3D_TESSELLATOR_OUTPUT_PRIMITIVE;
typedef enum D3D_MIN_PRECISION
{
D3D_MIN_PRECISION_DEFAULT = 0,
D3D_MIN_PRECISION_FLOAT_16 = 1,
D3D_MIN_PRECISION_FLOAT_2_8 = 2,
D3D_MIN_PRECISION_RESERVED = 3,
D3D_MIN_PRECISION_SINT_16 = 4,
D3D_MIN_PRECISION_UINT_16 = 5,
D3D_MIN_PRECISION_ANY_16 = 0xf0,
D3D_MIN_PRECISION_ANY_10 = 0xf1,
} D3D_MIN_PRECISION;
typedef enum _D3D_INTERPOLATION_MODE
{
D3D_INTERPOLATION_UNDEFINED,
D3D_INTERPOLATION_CONSTANT,
D3D_INTERPOLATION_LINEAR,
D3D_INTERPOLATION_LINEAR_CENTROID,
D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE,
D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID,
D3D_INTERPOLATION_LINEAR_SAMPLE,
D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE,
} D3D_INTERPOLATION_MODE;
typedef enum _D3D_PARAMETER_FLAGS
{
D3D_PF_NONE,
D3D_PF_IN,
D3D_PF_OUT,
D3D_PF_FORCE_DWORD = 0x7fffffff,
} D3D_PARAMETER_FLAGS;
[
uuid(8ba5fb08-5195-40e2-ac58-0d989c3a0102),
object,

Some files were not shown because too many files have changed in this diff Show More