Giovanni Mascellani
ee28861837
vkd3d-shader/hlsl: Document some possibly obscure HLSL opcodes.
2023-09-14 20:28:55 +02:00
Giovanni Mascellani
f251da574c
vkd3d-shader/hlsl: Remove HLSL_OP3_LERP.
...
It is unused, and it's not clear whether it would be of any help to
have it.
2023-09-14 20:28:54 +02:00
Nikolay Sivov
1002a6b357
vkd3d-shader/tpf: Use 'movc' to implement ternary operator.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2023-09-07 19:15:25 +02:00
Zebediah Figura
9ab77658f2
vkd3d-shader/hlsl: Define smoothstep() in HLSL.
2023-08-30 22:49:01 +02:00
Zebediah Figura
d396c4ce27
vkd3d-shader/hlsl: Store the internal name counter in struct hlsl_ctx.
...
This is minutely more efficient than using a global variable and atomic instructions.
2023-08-30 22:48:59 +02:00
Zebediah Figura
63e056512d
vkd3d-shader/hlsl: Introduce an hlsl_sprintf_alloc() helper.
2023-08-30 22:48:55 +02:00
Nikolay Sivov
18c1477464
vkd3d-shader/hlsl: Ignore 'inline' modifier for functions.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2023-08-28 20:39:53 +02:00
Francisco Casas
81afe43569
vkd3d-shader/tpf: Put the actual bind count in the RDEF table.
2023-08-15 21:51:29 +02:00
Francisco Casas
7eba063136
vkd3d-shader/hlsl: Rename hlsl_reg.bind_count to hlsl_reg.allocation_size.
...
We have to distinguish between the "bind count" and the "allocation size"
of variables.
The "allocation size" affects the starting register id for the resource to
be allocated next, while the "bind count" is determined by the last field
actually used. The former may be larger than the latter.
What we are currently calling hlsl_reg.bind_count is actually the
"allocation size", so a rename is in order.
The real "bind count", which will be introduced in following patches,
is important because it is what should be shown in the RDEF table and
some resource allocation rules depend on it.
For instance, for this shader:
texture2D texs[3];
texture2D tex;
float4 main() : sv_target
{
return texs[0].Load(int3(0, 0, 0)) + tex.Load(int3(0, 0, 0));
}
the variable "texs" has a "bind count" of 1, but an "allocation size" of
3:
// Resource Bindings:
//
// Name Type Format Dim HLSL Bind Count
// ------------------------------ ---------- ------- ----------- -------------- ------
// texs texture float4 2d t0 1
// tex texture float4 2d t3 1
2023-08-15 21:51:27 +02:00
Francisco Casas
8a6a620ee2
vkd3d-shader/tpf: Use enum vkd3d_shader_register_type in sm4_register.type.
2023-08-14 18:38:01 +02:00
Zebediah Figura
0652bb1950
vkd3d-shader/hlsl: Store the "instrs" field of struct hlsl_attribute as a hlsl_block.
2023-08-08 21:15:08 +09:00
Zebediah Figura
372ddd1f29
vkd3d-shader/hlsl: Pass an hlsl_block pointer to add_load_component().
2023-08-08 21:15:05 +09:00
Nikolay Sivov
d50b5fe767
vkd3d-shader/hlsl: Parse GetDimensions() method.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2023-07-31 21:07:48 +09:00
Zebediah Figura
7e7a6d3691
vkd3d-shader/hlsl: Pass a hlsl_block pointer to hlsl_add_conditional().
2023-07-24 22:41:15 +02:00
Zebediah Figura
a55973d695
vkd3d-shader/hlsl: Lower combined samplers to separate sampler and texture objects for SM4.
...
Co-authored-by: Francisco Casas <fcasas@codeweavers.com>
2023-07-17 22:55:51 +02:00
Francisco Casas
c4f074d25d
vkd3d-shader/hlsl: Introduce hlsl_new_synthetic_var_named().
2023-07-17 22:55:46 +02:00
Francisco Casas
c58d666d1b
vkd3d-shader/hlsl: Handle resource components individually for SM 5.0.
2023-07-17 22:55:40 +02:00
Francisco Casas
ae6bc398d6
vkd3d-shader/hlsl: Allow derefs to provide the data_type.
...
After lowering the derefs path to a single offset node, there was no way
of knowing the type of the referenced part of the variable. This little
modification allows to avoid having to pass the data type everywhere and
it is required for supporting instructions that reference objects
components within struct types.
Since deref->data_type allows us to retrieve the type of the deref,
deref->offset_regset is no longer necessary.
2023-07-17 22:55:36 +02:00
Zebediah Figura
53e9ad3e4c
vkd3d-shader/hlsl: Do not emit DEF instructions for uniform constants.
2023-07-04 22:40:20 +02:00
Francisco Casas
e4d94d955c
vkd3d-shader/hlsl: Support fine derivates.
2023-07-04 22:39:12 +02:00
Francisco Casas
ff31284f8d
vkd3d-shader/hlsl: Support coarse derivates.
2023-07-04 22:39:10 +02:00
Nikolay Sivov
861078d63a
vkd3d-shader/hlsl: Handle 'texkill' discard type for sm4+.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2023-06-27 22:33:50 +02:00
Nikolay Sivov
8d84e206ab
vkd3d-shader/hlsl: Parse clip() function.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2023-06-27 22:33:48 +02:00
Nikolay Sivov
b40179da3a
vkd3d-shader/hlsl: Add a parameter for jump nodes and use it for 'discard'.
2023-06-27 22:33:47 +02:00
Nikolay Sivov
d856be0519
vkd3d-shader/hlsl: Handle static constants in array size expressions.
2023-06-12 22:50:12 +02:00
Nikolay Sivov
99314b6340
vkd3d-shader/hlsl: Store static initialization instructions in a block.
2023-06-12 22:50:11 +02:00
Zebediah Figura
f34b107faf
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_constant().
2023-06-08 18:50:35 +02:00
Zebediah Figura
740b0ad807
vkd3d-shader/hlsl: Pass a hlsl_constant_value pointer to hlsl_new_constant().
2023-06-08 18:50:34 +02:00
Francisco Casas
ebf7573571
vkd3d-shader/hlsl: Support non-constant vector indexing.
...
Non-constant vector indexing is not solved with relative addressing
in the register indexes because this indexation cannot be at the level
of register-components.
Mathematical operations must be used instead.
2023-06-07 20:48:59 +02:00
Nikolay Sivov
a2e85a8a76
vkd3d-shader/hlsl: Parse SampleCmpLevelZero() method.
2023-05-29 20:21:17 +02:00
Nikolay Sivov
2fd3550ba6
vkd3d-shader/hlsl: Parse SampleCmp() method.
2023-05-29 20:21:14 +02:00
Nikolay Sivov
7c94705c54
vkd3d-shader/hlsl: Parse SamplerComparisonState objects.
2023-05-29 20:21:11 +02:00
Ethan Lee
24d4ab7fb3
vkd3d-shader/hlsl: Add support for SampleGrad() method.
...
Signed-off-by: Ethan Lee <flibitijibibo@gmail.com>
2023-05-23 21:07:49 +02:00
Nikolay Sivov
cff22ecde8
vkd3d-shader/hlsl: Add support for writing RWStructuredBuffer declarations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2023-05-22 22:03:26 +02:00
Nikolay Sivov
3de824bfd8
vkd3d-shader/hlsl: Add support for RWBuffer object.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2023-05-22 22:03:24 +02:00
Nikolay Sivov
dfa0076473
vkd3d-shader/hlsl: Add support for sample index argument in Load().
2023-05-22 22:03:12 +02:00
Zebediah Figura
da7670f7c8
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from add_conditional().
2023-05-09 21:50:37 +02:00
Zebediah Figura
39bbac3cca
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_uint_constant().
2023-05-09 21:50:36 +02:00
Zebediah Figura
b991f98e2f
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_swizzle().
2023-05-09 21:50:35 +02:00
Zebediah Figura
306ae40696
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_store_index().
2023-05-09 21:50:34 +02:00
Zebediah Figura
29a2b87f54
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_simple_store().
2023-05-09 21:50:33 +02:00
Zebediah Figura
145a2dfd2d
vkd3d-shader/hlsl: Return bool from hlsl_new_store_component().
2023-05-09 21:50:31 +02:00
Francisco Casas
fd38c58112
vkd3d-shader/hlsl: Introduce hlsl_calloc().
...
This is just a wrapper of vkd3d_calloc(), that has the advantage of
checking for multiplication overflow.
2023-05-08 20:24:15 +02:00
Francisco Casas
3e9a9c5051
vkd3d-shader/hlsl: Track objects sampling dimension.
2023-05-08 20:24:15 +02:00
Francisco Casas
4dba38e6c8
vkd3d-shader/hlsl: Track object components usage and allocate registers accordingly.
2023-05-08 20:24:14 +02:00
Francisco Casas
69ff249ef4
vkd3d-shader/hlsl: Support multiple-register variables in object regsets.
...
Variables that contain more than one object (arrays or structs) require
the allocation of contiguous registers in the respective object
register spaces.
2023-05-08 20:22:14 +02:00
Francisco Casas
4aaf6b8895
vkd3d-shader/hlsl: Use hlsl_ir_index for resource access.
...
This patch makes index expressions on resources hlsl_ir_index nodes
instead of hlsl_ir_resource_load nodes, because it is not known if they
will be used later as the lhs of an hlsl_ir_resource_store.
For now, the only benefit is consistency.
2023-05-03 21:11:56 +02:00
Nikolay Sivov
7d41cf4440
vkd3d-shader/hlsl: Partially implement static expressions evaluation.
2023-05-02 20:46:08 +02:00
Zebediah Figura
6de904b448
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_resource_store().
2023-05-02 20:46:03 +02:00
Zebediah Figura
3cc18f1e9f
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_resource_load().
2023-05-02 20:46:02 +02:00