Commit Graph

316 Commits

Author SHA1 Message Date
cbed70c60f vkd3d-shader/tpf: Implement semantics for hull shaders. 2024-10-16 21:07:53 +02:00
beb342ed5f vkd3d-shader/tpf: Write hull shader declarations. 2024-10-16 21:07:53 +02:00
7eee877dd4 vkd3d-shader/tpf: Make hlsl_sm4_register_from_semantic() independent of HLSL IR. 2024-10-16 21:07:51 +02:00
a243862b8c vkd3d-shader/tpf: Make sysval_semantic_from_hlsl() independent of HLSL IR. 2024-10-16 21:05:10 +02:00
7cc8151b81 vkd3d-shader/tpf: Replace uses of ctx->profile with tpf->program->shader_version. 2024-10-16 18:50:15 +02:00
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
10442369d8 vkd3d-shader/tpf: Pass a tpf_compiler structure to tpf_compile() callees. 2024-10-16 17:26:47 +02:00
16d9a10dd5 vkd3d-shader/tpf: Rename "tpf_writer" to "tpf_compiler".
Analog to d3dbc_compiler.
2024-10-16 17:09:15 +02:00
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
104435df5f vkd3d-shader/tpf: Use dcl_input_ps_sgv for sv_isfrontface.
As the native compiler does.
2024-10-15 16:44:38 +02:00
ad2f821ff5 vkd3d-shader/tpf: Write sysval semantic consistently.
Specifically we should write the sysval semantic as an instruction idx
for the following instructions:

    VKD3D_SM4_OP_DCL_INPUT_SGV
    VKD3D_SM4_OP_DCL_INPUT_PS_SGV
    VKD3D_SM4_OP_DCL_INPUT_SIV
    VKD3D_SM4_OP_DCL_INPUT_PS_SIV
    VKD3D_SM4_OP_DCL_OUTPUT_SIV

and not the following ones:

    VKD3D_SM4_OP_DCL_INPUT
    VKD3D_SM4_OP_DCL_PS_INPUT
    VKD3D_SM4_OP_DCL_OUTPUT

Which is consistent with what we do when reading these instructions in
the following functions:

    shader_sm4_read_declaration_register_semantic()
    shader_sm4_read_dcl_input_ps_siv()

and

    shader_sm4_read_dcl_input_ps()
    shader_sm4_read_declaration_dst()

for the non-SGV and non-SIV cases.

Note that the non-SGV and non-SIV instructions don't need/use this
extra information because they rely on the dst register type and index.

I suggest to introduce this change because the here replaced check is
brittle, and we might be omitting the sysval semantic in some cases.
2024-10-15 16:44:38 +02:00
0c5dc53fd2 vkd3d-shader/hlsl: Allocate temporary registers separately for each entry function. 2024-10-15 16:39:50 +02:00
5f8570b933 vkd3d-shader/hlsl: Track whether a variable is read in any entry function. 2024-10-15 16:18:36 +02:00
f15a1c0b23 vkd3d-shader/hlsl: Record semantic extern vars separately for each entry function.
This is required in order to process the entry point function and the
patch constant function in hull shaders.
2024-10-15 16:18:27 +02:00
16efb7c0c6 vkd3d-shader: Ignore the patch constant signature when it doesn't make sense. 2024-10-09 13:13:00 +02:00
1256b4f862 vkd3d-shader/d3d-asm: Rename vkd3d_shader_trace() to vsir_program_trace(). 2024-10-08 22:04:59 +02:00
cf92d9f398 vkd3d-shader/ir: Store the thread group size in struct vsir_program. 2024-10-08 22:03:05 +02:00
5e52ccbf3d vkd3d-shader/hlsl: Move default values indexing fixup to the tpf writer stage.
The primary goal here is to move compilation profile type and version
check outside of a parsing stage. Default values for parameters were
never subjected to this fixup, and it does look tpf-specific, so moving
it where it belongs.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-10-01 17:27:12 +02:00
8acaa3a62c vkd3d-shader/tpf: Propagate validation errors after parsing.
Also, trace the program when validation fails after parsing, mostly
to make debugging easier.
2024-09-30 20:48:43 +02:00
8d85ea2dc5 vkd3d-shader: Get rid of the RESOURCE data type. 2024-09-26 17:42:16 +02:00
e58726310b vkd3d-shader: Get rid of the UAV data type. 2024-09-26 17:42:16 +02:00
2934f820a9 vkd3d-shader: Get rid of the SAMPLER data type. 2024-09-26 17:42:16 +02:00
c43e5c8eb5 vkd3d-shader/hlsl: Introduce the "error" type.
Currently, if an expression successfully parses according to the bison grammar,
but for one reason or another cannot generate a meaningful IR instruction, we
abort parsing with YYABORT. This includes, for example, an undefined variable or
function, invalid swizzle or field reference, or a constructor with a complex or
non-numeric data type.

Aborting parsing is unfortunate, however, because it means that any further
errors in the program cannot be caught by the programmer, increasing the number
of times they will need to fix errors and recompile.

The idea of this patch is that any such expression will instead generate an IR
node whose data type is of HLSL_CLASS_ERROR. Any further expression which would
consume an "error" typed instruction will instead immediately return an
expression of type "error" (probably the same one) instead of aborting or doing
any other type-checking.

Currently these "error" instructions should not pass the parsing stage, since
hlsl_compile_shader() will immediately notice that compilation has failed and
skip any optimization, lowering, or bytecode-writing.

A further direction to take this is to pre-allocate one "error" expression
immediately when creating the HLSL parser, and return that expression when we
fail to allocate an hlsl_ir_node of any type. This means we do not need to
handle allocation errors when constructing nodes, saving us quite a lot of error
handling (which is not only tedious but currently often broken, if nothing else
by virtue of neglecting cleanup of local variables).
2024-09-23 15:28:47 +02:00
f64689eed8 vkd3d-shader/tpf: Set temps count in the STAT section.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-09-20 17:20:02 +02:00
478e28ea79 vkd3d-shader/tpf: Move STAT fields update to a separate helper.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-09-20 17:20:02 +02:00