Commit Graph

6672 Commits

Author SHA1 Message Date
Giovanni Mascellani
ca309e439a ci: Test DXIL shaders on macOS.
This unfortunately introduces a lot of failures, because it turns
out there is still work to do there. But at least we can
estimate how bad we're doing.
2024-10-17 17:31:22 +02:00
Giovanni Mascellani
19c699870b ci: Build the DirectX shader compiler for macOS. 2024-10-17 17:31:22 +02:00
Giovanni Mascellani
7c3f424a97 ci: Stop building widl for the macOS image. 2024-10-17 17:31:22 +02:00
Giovanni Mascellani
2b84e30e26 ci: Use widl from the mingw-w64 brew package on macOS. 2024-10-17 17:31:22 +02:00
Giovanni Mascellani
51cdb74061 ci: Remove the tart username and password environment variables.
They're not really needed, the runner already handles login
properly.
2024-10-17 17:31:22 +02:00
Elizabeth Figura
eeb7bbe3c5 vkd3d-shader/hlsl: Handle error expressions in ternary expressions. 2024-10-17 17:28:52 +02:00
Elizabeth Figura
d95962068a vkd3d-shader/hlsl: Handle error expressions in initializers. 2024-10-17 17:28:52 +02:00
Elizabeth Figura
dfe79cb6a9 vkd3d-shader/hlsl: Factor the component count check into initialize_var(). 2024-10-17 17:28:52 +02:00
Elizabeth Figura
d8892a4ca2 vkd3d-shader/hlsl: Store the initializer location in struct parse_initializer. 2024-10-17 17:28:52 +02:00
Elizabeth Figura
44ea7b5e12 vkd3d-shader/hlsl: Factor out an initialize_var() helper. 2024-10-17 17:28:52 +02:00
Giovanni Mascellani
e411fcb60e tests: Test discontiguous signature masks with SM<4 shaders. 2024-10-17 17:28:52 +02:00
Giovanni Mascellani
0e43dea42d vkd3d-shader/ir: Check that signature masks are contiguous. 2024-10-17 17:28:52 +02:00
Giovanni Mascellani
083b87c712 vkd3d-shader/d3dbc: Make signature masks contiguous.
The goal is to make a requirement for VSIR that signature element
masks are always contiguous. The SPIR-V backend already implicitly
makes that assumption, since it just consider the LSB and popcount
of the mask.

For example, consider this HLSL pixel shader:

    float4 main(float4 color : COLOR) : SV_Target
    {
        return float4(color.x, 10.0f, 11.0f, color.w);
    }

Currently the parser describes the input signature element
corresponding to semantic COLOR as having mask .xw, which is
sensible. However, the SPIR-V parser will interpret that as
a mask starting at x and with popcount 2, and assuming it is
contiguous it will implicitly act as if it were .xy. This is
not correct, because the wrong component will be loaded from
the vertex stage.
2024-10-17 17:28:52 +02:00
Henri Verbeet
8943999bd2 vkd3d: Slightly simplify the SRV/UAV logic in vk_write_descriptor_set_from_d3d12_desc(). 2024-10-17 17:28:52 +02:00
Conor McCarthy
bfaab9700d vkd3d: Lay out virtual descriptor heap buffer and image bindings consecutively instead of interleaving them.
Slightly simplifies descriptor write addressing, and makes layouts
essentially the same as array layouts, differing only in the binding
details, and therefore easier to understand. This also simplifies the
addition of storage buffer bindings, which can all be added onto the end.
2024-10-17 17:28:46 +02:00
Giovanni Mascellani
0b8a53d75d vkd3d: Create Vulkan bindings in d3d12_root_signature_append_vk_binding(). 2024-10-17 17:23:04 +02:00
Conor McCarthy
74da9ed6fe vkd3d: Create a separate Vulkan descriptor binding array for each descriptor set.
Allows descriptor set layouts to be created after all bindings are
mapped. This is less complex and fragile than the current scheme, and in
a future patch it will support separating descriptor types into different
sets. Descriptors on virtual heaps are currently allocated from pools
which contain an equal number of each descriptor type used by vkd3d, and
this can waste a significant amount of device memory.
2024-10-17 17:23:04 +02:00
Giovanni Mascellani
b5c56a50b5 vkd3d: Use vk_binding_array_add_binding() in d3d12_root_signature_init_root_descriptors(). 2024-10-17 17:23:04 +02:00
Giovanni Mascellani
3aec841a9f vkd3d: Use vk_binding_array_add_binding() in d3d12_root_signature_init_static_samplers(). 2024-10-17 17:23:04 +02:00
Giovanni Mascellani
416ce575f6 vkd3d: Introduce a helper function to add bindings to struct vk_binding_array. 2024-10-17 17:23:04 +02:00
Conor McCarthy
eca344ff56 vkd3d: Introduce a separate structure for storing Vulkan descriptor binding arrays. 2024-10-17 17:23:04 +02:00
Conor McCarthy
3f98ca53ca vkd3d: Access the current range via the declared pointer in d3d12_root_signature_init_root_descriptor_tables(). 2024-10-17 17:23:04 +02:00
Conor McCarthy
b092fcfc46 tests/d3d12: Test buffer and texture SRVs in test_unbounded_resource_arrays().
On virtual heaps, SRV/UAV unbounded ranges are implemented using two
descriptor sets, one for buffers and another for textures, and this case
should be tested.
2024-10-17 17:23:04 +02:00
Giovanni Mascellani
c89e547e3e ci: Use the macOS image from the master vkd3d repository.
The current URL is from my own testing repository and it's not
meant for general use.
2024-10-16 21:40:58 +02:00
Giovanni Mascellani
2b45878ff8 vkd3d-shader/ir: Validate the line density SV_TessFactor signature element for isolines domains. 2024-10-16 21:40:58 +02:00
Giovanni Mascellani
f470eb2a1a vkd3d-shader/ir: Validate the line detail SV_TessFactor signature element for isolines domains. 2024-10-16 21:40:58 +02:00
Giovanni Mascellani
c5c3151414 vkd3d-shader/ir: Validate SV_InsideTessFactor signature elements for tri domains. 2024-10-16 21:40:58 +02:00
Giovanni Mascellani
4e8b34c075 vkd3d-shader/ir: Validate SV_TessFactor signature elements for tri domains. 2024-10-16 21:40:58 +02:00
Giovanni Mascellani
b2460a6794 vkd3d-shader/ir: Validate SV_InsideTessFactor signature elements for quad domains. 2024-10-16 21:40:58 +02:00
Giovanni Mascellani
a8b9a92c10 vkd3d-shader/ir: Validate SV_TessFactor signature elements for quad domains. 2024-10-16 21:40:58 +02:00
Shaun Ren
1ed5f1a4d0 vkd3d-shader/tpf: Write the patch constant function in hull shaders.
We use a single hs_fork_phase here for the patch constant function.
2024-10-16 21:40:40 +02:00
Shaun Ren
f771f081d9 tests: Test signature reflection for hull shaders. 2024-10-16 21:22:02 +02:00
Shaun Ren
ae2d86b99c vkd3d-shader/tpf: Determine SIV from SV and index in write_sm4_dcl_semantic(). 2024-10-16 21:12:29 +02:00
Shaun Ren
df3aaac7cf vkd3d-shader/tpf: Introduce tpf_write_shader_function(). 2024-10-16 21:12:13 +02:00
Shaun Ren
147f8898ca vkd3d-shader/hlsl: Process the patch constant function in hlsl_emit_bytecode().
Also, support patch constant function semantics in sm4_sysval_semantic_from_semantic_name().
2024-10-16 21:10:24 +02:00
Shaun Ren
aee00ea55a tests: Test hull shader uniform input parameters. 2024-10-16 21:07:53 +02:00
Shaun Ren
cbed70c60f vkd3d-shader/tpf: Implement semantics for hull shaders. 2024-10-16 21:07:53 +02:00
Shaun Ren
beb342ed5f vkd3d-shader/tpf: Write hull shader declarations. 2024-10-16 21:07:53 +02:00
Henri Verbeet
47fcbc335b vkd3d-shader/d3dbc: Avoid D3DXSHADER_CONSTANTTABLE. 2024-10-16 21:07:53 +02:00
Shaun Ren
069b8aac64 vkd3d-shader/hlsl: Implement struct single inheritance.
Here, we implement single inheritance by inserting a field at the
beginning of the derived struct with name "$super".

For the following struct declarations

  struct a
  {
      float4 aa;
      float4 bb;
  };

  struct b : a
  {
      float4 cc;
  };

  struct c : b
  {
      float4 bb;
  };

this commit generates the following:

  struct a
  {
      float4 aa;
      float4 bb;
  };

  struct b
  {
      struct a $super;
      float4 cc;
  };

  struct c
  {
      struct b $super;
      float4 bb;
  };
2024-10-16 21:07:53 +02:00
Shaun Ren
013e354b46 tests: Test struct single inheritance. 2024-10-16 21:07:53 +02:00
Francisco Casas
7eee877dd4 vkd3d-shader/tpf: Make hlsl_sm4_register_from_semantic() independent of HLSL IR. 2024-10-16 21:07:51 +02:00
Francisco Casas
a243862b8c vkd3d-shader/tpf: Make sysval_semantic_from_hlsl() independent of HLSL IR. 2024-10-16 21:05:10 +02:00
Francisco Casas
7cc8151b81 vkd3d-shader/tpf: Replace uses of ctx->profile with tpf->program->shader_version. 2024-10-16 18:50:15 +02:00
Francisco Casas
c75fbaf94e vkd3d-shader/tpf: Use the I/O signatures from the vsir program in tpf_write_signature(). 2024-10-16 17:40:26 +02:00
Francisco Casas
10442369d8 vkd3d-shader/tpf: Pass a tpf_compiler structure to tpf_compile() callees. 2024-10-16 17:26:47 +02:00
Francisco Casas
16d9a10dd5 vkd3d-shader/tpf: Rename "tpf_writer" to "tpf_compiler".
Analog to d3dbc_compiler.
2024-10-16 17:09:15 +02:00
Francisco Casas
5b21cc67f1 vkd3d-shader/hlsl: Split hlsl_sm4_write().
Similarly to the already done split from

    HLSL IR -> d3dbc

to

    HLSL IR -> vsir -> d3bc

we now start splitting the

    HLSL IR -> tpf

translation into

    HLSL IR -> vsir -> tpf

So hlsl_sm4_write is split into two functions, sm4_generate_vsir() and
tpf_compile().

This translation should be completed once tpf_compile() no longer needs
the hlsl_ctx and entry_func parameters.
2024-10-16 17:08:50 +02:00
Francisco Casas
3601397703 vkd3d-shader/d3dbc: Remove the "hlsl_" prefix from external functions.
They no longer rely on HLSL IR.

Also, rename them from "_from_semantic" to "from_semantic_name".
2024-10-16 16:52:45 +02:00
Francisco Casas
0ab5e1cb03 tests: Test interstage signature with arrays. 2024-10-16 16:49:55 +02:00