Anna (navi) Figueiredo Gomes
2a52ccf2c6
vkd3d-shader/spirv: Pass a vkd3d_shader_descriptor_info1 structure to spirv_compiler_emit_resource_declaration().
2024-09-02 18:54:19 +02:00
Giovanni Mascellani
527966580e
vkd3d-shader: Dump the converted shader too.
2024-08-29 19:17:07 +02:00
Giovanni Mascellani
1a0d6a4db4
vkd3d-shader: Use a hash to build the filename when dumping shaders.
...
This way the same shader is always dumped to the same path and when
launching the same program over and over we avoid both creating new
copies of the same file each time and overwriting different dumped
shaders.
2024-08-29 19:14:27 +02:00
Henri Verbeet
0e72aba0bc
Release 1.13.
2024-08-29 12:08:46 +02:00
Elizabeth Figura
eb71a1722a
vkd3d-shader: Use an extended version of vkd3d_shader_immediate_constant in vkd3d_shader_parameter1.
...
This is a proposed API change in 946, which won't make it into this release.
The intent is to allow slightly larger constants to be specified in the updated
vkd3d_shader_parameter1 structure. In particular, this is large enough to pass
4-dimensional integer or float vectors inline, which the proposed clip plane
implementation will use, as well as other Direct3D FFP parameters.
We could also simply add vkd3d_shader_immediate_constant1 as a separate union
member in vkd3d_shader_parameter1, but this API is a bit cleaner and simpler.
2024-08-28 12:08:37 +02:00
Henri Verbeet
f318e565f2
vkd3d-shader/spirv: Decorate non-array descriptor variables as well.
...
Commits 343c7942e1
and
94c74d2c00
moved applying the NonReadable
and Coherent decorations from spirv_compiler_emit_resource_declaration()
to spirv_compiler_build_descriptor_variable(), but unfortunately missed
the non-array path in the latter function.
The missing NonReadable decoration causes segmentation faults in
rasteriser-ordered-views.shader_test (among others) on my Intel SKL GT2
setup in particular.
2024-08-26 11:24:01 +02:00
Conor McCarthy
738ecc9eb1
vkd3d-shader/spirv: Free the spirv parameter info.
2024-08-20 21:27:58 +02:00
Anna (navi) Figueiredo Gomes
94c74d2c00
vkd3d-shader/spirv: Avoid decorating variables multiple times with Coherent.
2024-08-20 21:25:15 +02:00
Anna (navi) Figueiredo Gomes
a47c23fa1f
vkd3d-shader/spirv: Use unique SPIR-V variables for descriptors where visibility differs.
...
In the case two uav descriptors are mapped to the same variable, and one is
read from while the other is not, the variable would get the NonReadable
decorator, while being read from later.
2024-08-20 21:23:31 +02:00
Anna (navi) Figueiredo Gomes
343c7942e1
vkd3d-shader/spirv: Avoid decorating variables multiple times with NonReadable.
...
The existing code reuses the same SPIR-V variable for all descriptors mapped to
the same Vulkan binding, and applies the NonReadable decoration based on the
VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_READ only. This potentially causes the
decoration to be applied twice, should two non-read descriptors be mapped to
the same variable, which isn't allowed in SPIR-V, and the validator complains.
2024-08-20 21:20:33 +02:00
Nikolay Sivov
c8cc1b1a24
vkd3d-shader/fx: Fix the matrix type class for fx_2_0.
...
CTAB type correctly reflects matrix majority, unlike effects
type data that does not respond to majority modifiers at all.
It doesn't transpose default values either.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-19 14:21:59 +02:00
Nikolay Sivov
f0a2e4bc25
vkd3d-shader/glsl: Fix a typo in a few messages.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-19 14:20:21 +02:00
Nikolay Sivov
d1b8a7e745
vkd3d: Fix a few typos in the comments.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-19 14:17:41 +02:00
Petrichor Park
4467c655f0
vkd3d-shader/hlsl: Factor out add_binary_expr() and use it for assignment operators.
...
This fixes a lot of internal compiler errors with assignment operators,
especially bitwise ones. The bitwise-assignment test has the motivating
examples.
2024-08-19 14:15:43 +02:00
Nikolay Sivov
ebc039d128
vkd3d-shader/fx: Resolve NULL values for SamplerState.Texture field.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-15 17:53:46 +02:00
Nikolay Sivov
873b182021
vkd3d-shader/fx: Support NULL constants for object fields.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-15 17:53:46 +02:00
Nikolay Sivov
c3075d6fb4
vkd3d-shader/hlsl: Adjust NULL type properties to make it usable in transformations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-15 17:53:46 +02:00
Nikolay Sivov
aa0ea548e4
vkd3d-shader/fx: Handle SetPixelShader() and SetVertexShader().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-15 17:53:46 +02:00
Nikolay Sivov
2c533e494a
vkd3d-shader/fx: Handle SetBlendState().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-15 17:53:46 +02:00
Nikolay Sivov
60ce81112b
vkd3d-shader/fx: Support string annotations for fx_4+.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-14 22:00:35 +02:00
Nikolay Sivov
d4ae844bb6
vkd3d-shader/fx: Enable writing string objects for fx_4+.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-14 22:00:35 +02:00
Nikolay Sivov
89be723ad7
vkd3d-shader/hlsl: Treat "string" type name as case-insensitive.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-14 22:00:35 +02:00
Nikolay Sivov
1ce68cee2c
vkd3d-shader/hlsl: Tokenize 'String' the same as 'string'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-14 22:00:35 +02:00
Francisco Casas
412f91a14c
vkd3d-shader/hlsl: Always work with the extern resource's component type.
...
We need to distinguish between the data type of a resource and the data
type of its components. These are usually the same except for 4.0
profiles where an array (or multi-dimensional array) of resources is
still considered a single resource, so it is possible for it to hold
more than one component.
In the latter case, we often need to access the type of a single
component (all components have the same type) instead of the type of the
whole array which often doesn't contain the required information, such
as sampler dimension.
This patch replaces the extern_resource.data_type field with the
extern_resource.component_type field, which points to the type of a
single component in the resource. Using it relieves many other code
paths from considering the possibility of the resource being an array.
This fixes runtime errors reported by UBSan, such as this:
vkd3d/libs/vkd3d-shader/tpf.c:6075:87: runtime error: load of value 7, which is not a valid value for type '_Bool'
when trying to compile shaders that contain UAV arrays on 4.0 profiles.
Before this commit, tpf.c accesses the
hlsl_type->e.resource.rasteriser_ordered
field, but on 4.0 and 4.1 profiles these code paths can also be reached
by UAV arrays which are HLSL_CLASS_ARRAY and this field is not supposed
to be accessed.
By coincidence, the value of hlsl_type->e.array.elements_count was being
read because these fields have the same offset in the hlsl_type.e union.
2024-08-14 21:57:21 +02:00
Henri Verbeet
114578fc8a
vkd3d-shader/fx: Replace assert() with VKD3D_ASSERT().
2024-08-13 21:20:28 +02:00
Francisco Casas
355d4c4a86
vkd3d-shader/hlsl: Skip writing string default values.
...
This causes a crash in the native compiler, but can only happen in
ps_5_0 were it is possible to declare structs that are both used in the
shader and contain strings.
struct
{
float a;
string b;
} apple = {1, "foobar"};
float4 main() : sv_target
{
return apple.a;
}
In our case, hlsl_type_get_component_offset() triggered an assertion
failure because it does not expect the string type. So this is replaced
by an hlsl_error().
2024-08-13 21:19:04 +02:00
Francisco Casas
094e298c1c
vkd3d-shader/hlsl: Parse string default values.
2024-08-13 21:19:01 +02:00
Nikolay Sivov
b4d957f848
vkd3d-shader/hlsl: Handle NULL constants.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-13 21:10:45 +02:00
Nikolay Sivov
d945d5e78c
vkd3d-shader/hlsl: Check MS texture declaration without sample count only for used variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-13 21:10:29 +02:00
Anna (navi) Figueiredo Gomes
80b2a2eb55
vkd3d-shader/ir: Periodically flush buffers when tracing blocks.
...
Avoids overflowing the output buffer for the trace in cases where the
output is too long, which raises an exception.
2024-08-12 14:19:13 +02:00
Nikolay Sivov
b0ca3627bf
vkd3d-shader/fx: Turn assignments to arrays to element assignments for certain states.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
25e1c3e374
vkd3d-shader/fx: Explicitly handle bool values in state entries.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
c81223d086
vkd3d-shader/fx: Handle states of a BlendState object.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
2affc8f5c5
vkd3d-shader/fx: Run full set of constants passes on state block entries values.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
f1e65ecc83
vkd3d-shader/fx: Enable writing BlendState variables.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
91e88fac2e
vkd3d-shader/hlsl: Add parser support for BlendState type.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
1be0d99b76
vkd3d-shader/fx: Check destination array index when checking for duplicate state entries.
2024-08-12 14:15:14 +02:00
Nikolay Sivov
b23874dad6
vkd3d-shader/hlsl: Add parser support for GeometryShader type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-08 23:42:37 +02:00
Nikolay Sivov
de48960b33
vkd3d-shader/fx: Add support for the OMSetRenderTargets() state.
2024-08-08 23:42:37 +02:00
Nikolay Sivov
c565a60b9e
vkd3d-shader/fx: Add an array size field to the states description table.
2024-08-08 23:42:37 +02:00
Nikolay Sivov
d55a709992
vkd3d-shader/fx: Use more descriptive names for FX-specific types.
2024-08-08 23:42:37 +02:00
Nikolay Sivov
9fb23b9090
vkd3d-shader/fx: Handle "Texture" field of the sampler state objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-08 23:42:37 +02:00
Giovanni Mascellani
8b6ab9627d
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in vkd3d_shader_private.h.
2024-08-08 23:39:23 +02:00
Giovanni Mascellani
27bceec965
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in vkd3d_shader_main.c.
2024-08-08 23:39:23 +02:00
Giovanni Mascellani
0294aa62f3
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in tpf.c.
2024-08-08 23:38:02 +02:00
Giovanni Mascellani
d5126b4d98
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in spirv.c.
2024-08-08 23:36:23 +02:00
Victor Chiletto
8c3a5e5458
vkd3d-shader/hlsl: Implement f16tof32 intrinsic.
2024-08-08 23:35:02 +02:00
Victor Chiletto
693e89c74e
vkd3d-shader/hlsl: Push a new scope when compiling internal functions.
...
This allows for typedef usage without interfering with user code.
Thanks Zeb for the suggestion.
2024-08-08 23:35:02 +02:00
Francisco Casas
016be7e591
vkd3d-shader/hlsl: Lower non-constant row_major matrix loads for SM1.
2024-08-08 23:33:33 +02:00
Francisco Casas
87f01f5205
vkd3d-shader/hlsl: Remove SM1 fixme for matrix writemasks.
...
hlsl_ir_store instructions don't use writemasks for whole matrices.
2024-08-08 23:32:03 +02:00
Francisco Casas
9f515a9daa
vkd3d-shader/hlsl: Lower non-constant array loads for SM1.
...
This is achieved by means of creating a variable storing zero,
loading every array element, comparing if the non-constant index
matches the index of that element at runtime, and in that case
store the corresponding element in the variable.
This seems to be the same strategy that the native compiler uses.
2024-08-08 23:30:39 +02:00
Francisco Casas
eb2d320596
vkd3d-shader/hlsl: Avoid dereferencing rel_offset if it is NULL.
...
We are currently using &offset_node->loc when offset_node is NULL.
A NULL dereference of rel_offset can also happen if
hlsl_offset_from_deref() fails because the dereference is out of
bounds.
2024-08-08 23:28:31 +02:00
Francisco Casas
e8354ac499
vkd3d-shader/hlsl: Parse string type.
2024-08-07 15:53:07 +02:00
Francisco Casas
652db433e1
vkd3d-shader/hlsl: Parse string escape sequences.
2024-08-07 15:51:43 +02:00
Francisco Casas
090df488ba
vkd3d-shader/hlsl: Parse string constants.
2024-08-07 15:48:59 +02:00
Nikolay Sivov
c44a18b3d1
vkd3d-shader/fx: Add support for SetDomainShader(), SetComputeShader(), and SetHullShader() states.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-06 16:54:19 +02:00
Nikolay Sivov
1559237780
vkd3d-shader/fx: Fix state block entry array shifting when decomposing.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-06 16:54:19 +02:00
Nikolay Sivov
7c3677b114
vkd3d-shader/hlsl: Add parser support for ComputeShader, DomainShader, and HullShader types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-06 16:54:19 +02:00
Nikolay Sivov
2cbad81b55
vkd3d-shader/fx: Handle SetRasterizerState().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-06 16:54:19 +02:00
Nikolay Sivov
a3f4785720
vkd3d-shader/fx: Decompose function-style state assignments to individual states.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-08-05 16:01:33 +02:00
Giovanni Mascellani
46aec9fba8
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in preproc.y.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
625327653b
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in preproc.l.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
351220f182
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in preproc.h.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
4a04324ecc
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in ir.c.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
5e1ae5aaa3
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl.y.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
97a7ec8914
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl.h.
2024-08-05 15:57:56 +02:00
Giovanni Mascellani
9ff5b2ce7a
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl.c.
2024-08-01 15:18:15 +02:00
Giovanni Mascellani
4e7d0faaf0
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl_constant_ops.c.
2024-08-01 15:18:15 +02:00
Giovanni Mascellani
eff30577af
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in hlsl_codegen.c.
2024-08-01 15:18:15 +02:00
Giovanni Mascellani
02ef731b9a
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in fx.c.
2024-08-01 15:18:15 +02:00
Giovanni Mascellani
7d3e8f49e4
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in dxil.c.
2024-08-01 15:18:15 +02:00
Francisco Casas
e6e82ad3f6
vkd3d-shader/hlsl: Add missing src1 and src2 constants to sincos on SM2.
...
The sincos instruction expects two specific constants on 2.0 and 2.1 profiles.
Consider the following shader:
uniform float u;
float4 main() : sv_target
{
return sin(u);
}
On native, with ps_2_0, this compiles as:
ps_2_0
def c3, 0.159154937, 0.5, 6.28318548, -3.14159274
def c1, -1.55009923e-006, -2.17013894e-005, 0.00260416674, 0.00026041668
def c2, -0.020833334, -0.125, 1, 0.5
mov r0.xy, c3
mad r0.x, c0.x, r0.x, r0.y
frc r0.x, r0.x
mad r0.x, r0.x, c3.z, c3.w
sincos r1.y, r0.x, c1, c2
mov r0, r1.y
mov oC0, r0
We are not emitting the src1 and src2 constant arguments before this
patch.
2024-07-31 22:22:38 +02:00
Giovanni Mascellani
4094e5dbeb
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in dxbc.c.
2024-07-30 16:32:59 +02:00
Giovanni Mascellani
bcffcb4a29
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in d3dbc.c
2024-07-30 16:32:59 +02:00
Giovanni Mascellani
8e08fa6bf2
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in d3d_asm.c.
2024-07-30 16:32:59 +02:00
Giovanni Mascellani
5af138b247
vkd3d-shader: Replace assert() with VKD3D_ASSERT() in checksum.c.
2024-07-30 16:32:59 +02:00
Atharva Nimbalkar
2170fdc633
vkd3d-shader/glsl: Implement support for VKD3DSPR_TEMP registers.
2024-07-30 16:31:59 +02:00
Atharva Nimbalkar
337a030908
vkd3d-shader/glsl: Implement VKD3DSIH_MOV.
2024-07-30 16:31:59 +02:00
Henri Verbeet
c7589d8f19
vkd3d-shader/ir: Remove VKD3DSIH_DCL_SAMPLER instructions.
2024-07-30 16:31:44 +02:00
Henri Verbeet
fffe521b80
vkd3d-shader/ir: Remove VKD3DSIH_DCL instructions.
2024-07-30 16:31:44 +02:00
Giovanni Mascellani
a484063cd2
vkd3d: Introduce debug severity MESSAGE.
...
That's intended for messages that it's pretty important that the
user receives, but that are not proper error messages.
2024-07-29 13:17:19 +02:00
Elizabeth Figura
ae5cd6573f
vkd3d-shader: Allow controlling d3d color shade mode through vkd3d-shader parameters.
2024-07-24 16:08:10 +02:00
Elizabeth Figura
d20d0fc69f
vkd3d-shader: Use the program parameters in spirv_compiler_alloc_spec_constant_id().
2024-07-24 16:07:13 +02:00
Victor Chiletto
a0de05f0b4
vkd3d-shader/hlsl: Implement the asint() intrinsic.
2024-07-24 16:06:03 +02:00
Nikolay Sivov
91dce79227
vkd3d-shader/fx: Correct one of the object counters in the fx_2_0 header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-24 16:04:21 +02:00
Elizabeth Figura
97cd941710
vkd3d-shader: Do not make the alpha test ref parameter VSIR_DIMENSION_VEC4.
2024-07-23 21:12:28 +02:00
Elizabeth Figura
1db7c03185
vkd3d-shader/spirv: Pass a vkd3d_data_type to spirv_compiler_emit_shader_parameter().
2024-07-23 21:11:15 +02:00
Elizabeth Figura
f6dd6d52b3
vkd3d-shader: Factor out a vsir_program_get_parameter() helper.
2024-07-23 21:10:00 +02:00
Elizabeth Figura
6b58b6f261
vkd3d-shader/spirv: Allocate output_info after normalization.
...
Normalization may change the signatures.
2024-07-23 21:09:00 +02:00
Shaun Ren
49caeee1fd
vkd3d-shader/hlsl: Support default values for function parameters.
2024-07-23 15:36:32 +02:00
Nikolay Sivov
29699d3d22
vkd3d-shader/fx: Set total pass count for fx_2_0.
...
Binaries with that field set incorrectly fail to load on Windows.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-23 15:23:54 +02:00
Nikolay Sivov
dcf4ce753b
vkd3d-shader/fx: Correct empty pass check.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-23 15:23:54 +02:00
Nikolay Sivov
958117df2f
vkd3d-shader/hlsl: Allow annotations on global variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-23 15:23:54 +02:00
Shaun Ren
0202393d41
vkd3d-shader/d3dbc: Implement HLSL_OP1_{COS,SIN}_REDUCED for SM1.
...
Also enable SM1 trigonometry function tests.
2024-07-16 19:03:52 +02:00
Shaun Ren
ea2ffc0b6c
vkd3d-shader/hlsl: Allocate registers for HLSL_OP1_{COS,SIN}_REDUCED with the required writemasks.
2024-07-16 19:02:01 +02:00
Shaun Ren
8724cbe5d5
vkd3d-shader/d3dbc: Implement HLSL_OP3_MAD for SM1.
2024-07-16 18:56:44 +02:00
Shaun Ren
b4845b9dca
vkd3d-shader/hlsl: Implement sin/cos for SM1.
...
Also introduce HLSL_OP3_MAD.
2024-07-16 18:55:22 +02:00
Shaun Ren
b3a11a9ec4
vkd3d-shader/ir: Lower SM1 SINCOS to SM4 SINCOS.
2024-07-16 15:24:58 +02:00
Elizabeth Figura
806363b765
vkd3d-shader: Allow controlling alpha test through vkd3d-shader parameters.
2024-07-11 17:02:11 +02:00
Elizabeth Figura
c2ce15b623
vkd3d-shader/spirv: Respect VKD3D_SHADER_CONDITIONAL_OP_Z when discard has a bool argument.
2024-07-11 16:59:06 +02:00
Elizabeth Figura
e8bdac8147
vkd3d-shader/spirv: Support passing shader parameters through uniform buffers.
2024-07-11 16:58:52 +02:00
Elizabeth Figura
98def3214b
vkd3d-shader: Introduce struct vkd3d_shader_parameter_info and struct vkd3d_shader_parameter1.
...
As the newly added documentation describes, this reroll serves two purposes:
* to allow shader parameters to be used for any target type (which allows using
parameters for things like Direct3D 8-9 alpha test),
* to allow the union in struct vkd3d_shader_parameter to contain types larger
than 32 bits (by specifying them indirectly through a pointer).
2024-07-11 16:48:09 +02:00
Petrichor Park
bec4f413dc
vkd3d-shader/tpf: Implmenent HLSL_OP1_RCP.
...
SM5 comes with a RCP opcode; for SM4, implement it as `DIV dst, 1, x`.
2024-07-11 16:44:16 +02:00
Petrichor Park
b3f0cd5788
vkd3d-shader/hlsl: Implement the rcp() intrinisic.
...
SM1 already has the RCP opcode implemented; SM4 implementation is in the
next commit.
2024-07-11 16:44:02 +02:00
Nikolay Sivov
c792114a6a
vkd3d-shader/fx: Do not output empty strings for missing semantics for fx_2_0.
...
This is directly visible in parameter description. For a parameter without semantic
it should return null, instead of a pointer to an empty string.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-11 00:36:05 +02:00
Elizabeth Figura
59f770214a
vkd3d-shader/hlsl: Implement output SV_Coverage.
2024-07-11 00:33:57 +02:00
Elizabeth Figura
71a3d55e8c
vkd3d-shader/hlsl: Implement the GetRenderTargetSampleCount() intrinsic.
2024-07-11 00:33:57 +02:00
Victor Chiletto
2034a8bab9
vkd3d-shader/hlsl: Implement loop unrolling.
...
Based on a patch by Nikolay Sivov.
Co-authored-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-11 00:32:53 +02:00
Victor Chiletto
7edd7dcf79
vkd3d-shader/hlsl: Allow cloned blocks to contain external references.
2024-07-11 00:32:53 +02:00
Victor Chiletto
5bc56d43bb
vkd3d-shader/hlsl: Parse loop and unroll loop attributes.
...
Based on a patch by Nikolay Sivov.
Co-authored-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-11 00:32:53 +02:00
Victor Chiletto
323f53bd7d
vkd3d-shader/hlsl: Pull evaluate_static_expression_as_uint() upwards.
2024-07-11 00:32:53 +02:00
Victor Chiletto
50e28f70ed
vkd3d-shader/hlsl: Defer bounds checks to after copy propagation.
...
We potentially generate OOB accesses during loop unrolling that are later deleted.
2024-07-11 00:32:53 +02:00
Victor Chiletto
317bd46efd
vkd3d-shader/hlsl: Use a switch in validate_static_object_references().
2024-07-11 00:32:49 +02:00
Victor Chiletto
67c690aa07
vkd3d-shader/d3dbc: Fix implicit enum conversion warning.
...
This slipped through and broke CI.
2024-07-10 00:06:14 +02:00
Petrichor Park
746222b349
vkd3d-shader/hlsl: Implement the faceforward() intrinsic.
2024-07-09 20:43:41 +02:00
Francisco Casas
60c8a813a3
vkd3d-shader/hlsl: Validate state block function calls.
2024-07-09 20:38:08 +02:00
Francisco Casas
b5f2e7daeb
vkd3d-shader/hlsl: Parse function call syntax on state blocks.
2024-07-09 20:36:28 +02:00
Francisco Casas
7bd53cf6d9
vkd3d-shader/hlsl: Free array sizes on function parameters (Valgrind).
2024-07-09 20:32:25 +02:00
Francisco Casas
b92baa40ec
vkd3d-shader/d3dbc: Don't write inconsequential MOVs.
...
CASTs from floats to integers are implemented as mere MOVs. These often,
but not always, end up moving the value from one register to the same
register.
This patch avoids writing the MOV instructions if they have no effect.
2024-07-09 20:32:25 +02:00
Francisco Casas
daa13934a4
vkd3d-shader/d3dbc: Use vsir_program I/O signatures to write dcls.
...
Instead of relying on ctx->extern vars, semantics are now stored in the
vsir_program signatures, and then read to write the declarations.
2024-07-09 20:31:14 +02:00
Francisco Casas
704ce03561
vkd3d-shader/d3dbc: Don't require a hlsl_semantic to get register and usage.
2024-07-09 20:12:47 +02:00
Francisco Casas
003f4c7600
vkd3d-shader/d3dbc: Use program->shader_version instead of ctx->profile.
2024-07-09 20:06:23 +02:00
Francisco Casas
a333090288
vkd3d-shader/d3dbc: Introduce struct d3dbc_compiler.
2024-07-09 19:44:03 +02:00
Francisco Casas
dd8aa2ec91
vkd3d-shader/hlsl: Generate CTAB outside d3dbc_compile().
...
There is no way to store this information from the vsir_program alone,
so we make d3dbc_compile() expect the CTAB blob.
2024-07-09 18:59:54 +02:00
Francisco Casas
130b3335cb
vkd3d-shader/d3dbc: Split hlsl_sm1_write().
...
The idea is to start splitting the
HLSL IR -> d3dbc
translation into
HLSL IR -> vsir -> d3dbc
So hlsl_sm1_write is split into two functions, sm1_generate_vsir()
which should handle the first part and d3dbc_compile() which should
handle the second part.
This translation should be completed once the hlsl_ctx and entry_func
are no longer used in d3dbc_compile().
2024-07-09 18:38:00 +02:00
Zebediah Figura
6db2bc3eff
vkd3d-shader/d3dbc: Use enum vkd3d_shader_register_type in struct sm1_instruction.
2024-07-09 16:59:02 +02:00
Nikolay Sivov
3dc43e8945
vkd3d-shader: Disallow object structure fields for fx profiles.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:49:28 +02:00
Nikolay Sivov
937a80ead6
vkd3d-shader/fx: Write annotations for fx_4+ profiles.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:49:28 +02:00
Nikolay Sivov
0f7ac0a054
vkd3d-shader/hlsl: Set default values for annotations variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:49:06 +02:00
Nikolay Sivov
4d2ce385a7
vkd3d-shader/hlsl: Do not crash on initialization of a redefined variable.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:24:46 +02:00
Nikolay Sivov
0a344bd3c9
vkd3d-shader/fx: Add missing fields for structure types on fx_5_0.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:24:46 +02:00
Nikolay Sivov
8738e4662e
vkd3d-shader/fx: Preserve parsing order of initializer components.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:24:46 +02:00
Nikolay Sivov
c97c652ff0
vkd3d-shader/fx: Fix packed size for fx_4+ types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:24:46 +02:00
Nikolay Sivov
856686b2a2
vkd3d-shader/fx: Write default numeric values.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:24:46 +02:00
Nikolay Sivov
aea36be94c
vkd3d-shader/fx: Fix structure type data written for fx_4.
...
Strings and field types are written to the same unstructured area
as structure type itself, so it has to be done in two passes.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:24:46 +02:00
Nikolay Sivov
2176294df8
vkd3d-shader/hlsl: Implement tex*grad() functions.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:23:38 +02:00
Nikolay Sivov
4ff288bd32
vkd3d-shader: Implement tex*() functions variants with gradient arguments.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:23:38 +02:00
Elizabeth Figura
4cd2dd50f9
vkd3d-shader/hlsl: Separate an "array" rule.
2024-07-08 18:22:39 +02:00
Nikolay Sivov
94130c2394
vkd3d-shader/fx: Add support for writing RasterizerState objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:12:03 +02:00
Nikolay Sivov
f03cb7e911
vkd3d-shader/hlsl: Add RasterizerState type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:12:03 +02:00
Nikolay Sivov
12947aa50d
vkd3d-shader/fx: Add support for writing DepthStencilState objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:12:03 +02:00
Nikolay Sivov
1008c49ce6
vkd3d-shader/fx: Cast state block field values to target type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:12:03 +02:00
Francisco Casas
597e55691a
vkd3d-shader/hlsl: Only error out on bind_count register reservation overlaps for SM1.
...
While on SM1 a register reservation reserves the whole size in
registers of the variable's data type, overlapping conflicts are only
checked up to the bind_count (used size) for each variable.
2024-07-08 18:12:03 +02:00
Nikolay Sivov
48ff7de8ef
vkd3d-shader/hlsl: Add support for ConstantBuffer<> type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-07-08 18:12:03 +02:00
Victor Chiletto
abbcf0461f
vkd3d-shader/hlsl: Reserve register slots for unused buffers.
2024-07-03 17:09:16 -03:00
Victor Chiletto
da36a447b8
vkd3d-shader/hlsl: Validate cbuffer register allocations.
2024-07-03 17:09:16 -03:00
Victor Chiletto
27414ef928
vkd3d-shader/hlsl: Do not immediately fail parsing for malformed 'b' register reservations.
...
This is a fxc quirk. In most cases, this throws an error, but for global
variables it's completely ignored.
2024-07-03 17:09:16 -03:00
Victor Chiletto
b5b3c8b9ff
vkd3d-shader/hlsl: Ignore bracket offsets for 'b' register types prior to SM 5.1.
...
This is a fxc quirk that was fixed for SM >= 5.1 only.
2024-07-03 14:34:45 -03:00
Victor Chiletto
8fb3b604bf
vkd3d-shader/hlsl: Pass a pointer to struct hlsl_reg_reservation in parse_reservation_index.
...
Instead of passing the struct components individually.
2024-07-03 14:05:58 -03:00
Victor Chiletto
e13eb64d4c
vkd3d-shader/hlsl: Support expressions as register offsets.
2024-07-03 14:05:58 -03:00
Yuxuan Shui
ccb6150aab
vkd3d-shader/hlsl: Implement storing to a swizzled matrix.
2024-06-20 12:39:46 +02:00
Elizabeth Figura
acc9d79fbb
vkd3d-shader/hlsl: Only allocate the aligned size for uniforms.
2024-06-18 13:19:44 -05:00
Elizabeth Figura
7fe581203b
vkd3d-shader/hlsl: Respect the coords writemask in write_sm1_resource_load().
...
Spotted by Francisco Casas.
2024-06-18 13:19:44 -05:00
Nikolay Sivov
222c52380b
vkd3d-shader/fx: Fix variable buffer offset value.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-06-12 19:02:20 +02:00
Nikolay Sivov
402dc94259
vkd3d-shader/fx: Set EXPLICIT_BIND_POINT flag for packoffset() reservations as well.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-06-12 19:02:20 +02:00
Elizabeth Figura
2f88442d7d
vkd3d-shader/hlsl: Always initialize $$ when parsing modifiers from an arbitrary string.
...
This avoids spurious errors like "row_major and column_major are mutually
exclusive" when an invalid modifier is used.
Fixes: cf7c05f431
2024-06-11 15:54:10 +02:00
Nikolay Sivov
72ddea6030
vkd3d-shader/fx: Use original full semantic name.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-06-11 15:53:19 +02:00
Nikolay Sivov
1124ea46ee
vkd3d-shader/hlsl: Store original semantic name.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-06-11 15:53:19 +02:00
Nikolay Sivov
ba18035260
vkd3d-shader/d3dbc: Write load instruction for tex2Dbias().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-06-11 15:50:34 +02:00
Nikolay Sivov
a289393fe7
vkd3d-shader/asm: Output 'bias' flag for 'texld'.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-06-11 15:50:34 +02:00
Nikolay Sivov
ccbe36fb8d
vkd3d-shader/hlsl: Implement tex2Dbias().
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56701
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-06-11 15:50:34 +02:00
Elizabeth Figura
33e5553158
vkd3d-shader/hlsl: Write SM5.1 binding reflection data.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
bb41947fc6
vkd3d-shader: Write SM5.1 register spaces.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
4355e6ca69
vkd3d-shader/hlsl: Allocate register spaces for objects.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
7b61b0219e
vkd3d-shader/hlsl: Allocate register spaces for constant buffers.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
28a5e23814
vkd3d-shader: Write SM5.1 register indices.
...
Separate ID and index. Allocate IDs for all external resources (but ignore them
for shader models other than 5).
2024-06-11 15:49:30 +02:00
Elizabeth Figura
19a13740de
vkd3d-shader/hlsl: Put constant buffers into the extern_resources struct.
...
Mostly to get the same sorting logic.
2024-06-11 15:49:30 +02:00
Elizabeth Figura
558320b52f
vkd3d-shader/hlsl: Add a hlsl_fixme() for 5.1 resource arrays.
...
These are a bit trickier to handle, and need more tests.
2024-06-11 15:49:30 +02:00
Conor McCarthy
9b070edf01
vkd3d-shader/spirv: Implement the QUAD_READ_LANE_AT instruction.
2024-06-11 15:48:21 +02:00
Conor McCarthy
0b8b5b2d0f
vkd3d-shader/dxil: Implement DX intrinsic QuadReadLaneAt.
2024-06-11 15:48:21 +02:00
Conor McCarthy
c298493e4f
vkd3d-shader/spirv: Implement the QUAD_READ_ACROSS_* instructions.
2024-06-11 15:48:21 +02:00
Conor McCarthy
8a15642f45
vkd3d-shader/dxil: Implement DX intrinsic QuadOp.
2024-06-11 15:48:21 +02:00
Francisco Casas
f5bfa728eb
vkd3d-shader/hlsl: Reorder default values for matrices for SM4.
...
Default value initializers behave differently than regular initializers
for matrices on SM4 profiles.
While regular initializers assign the rhs elements in reading-order
(completing one row at the time), default initializers assing the rhs
elements in Chinese reading-order (completing one column at the time).
So after lowering a default value to a constant, the index of the
component to which this default value is stored is computed to meet
this expectation. This can be done because the default values.
For reference, compiling this shader:
row_major int2x3 m = {1, 2, 3, 4, 5, 6};
float4 main() : sv_target
{
return float4(m[0][0], 99, 99, 99);
}
gives the following buffer definition:
// cbuffer $Globals
// {
//
// row_major int2x3 m; // Offset: 0 Size: 28
// = 0x00000001 0x00000003 0x00000005 0x00000000
// 0x00000002 0x00000004 0x00000006
//
// }
Given that the matrix is column-major, m's default value is actually
{{1, 3, 5}, {2, 4, 6}}, unlike the {{1, 2, 3}, {4, 5, 6}} one would
expect in a regular initializer.
SM1 profiles assign the elements in regular reading order.
2024-06-11 15:46:40 +02:00
Francisco Casas
ab01fedc5d
vkd3d-shader/hlsl: Fix numeric register offset for matrix components.
2024-06-11 15:46:40 +02:00
Francisco Casas
affadf319c
vkd3d-shader/d3dbc: Write default values for SM1.
2024-06-11 15:46:40 +02:00
Francisco Casas
253c994155
vkd3d-shader/tpf: Write default values for SM4.
2024-06-11 15:46:40 +02:00
Francisco Casas
099a64aeb2
vkd3d-shader/hlsl: Initialize default values with braceless initializers.
...
It is hard to initialize default values on add_assignment() and calling
add_assignment() for initializers is not really necessary: the only
thing we need from it the implicit cast.
2024-06-11 15:46:40 +02:00
Francisco Casas
e8dbc36bd2
vkd3d-shader/hlsl: Record default values for uniforms and constant buffers.
2024-06-11 15:46:40 +02:00
Henri Verbeet
1fe7a6581b
vkd3d-shader/ir: Rename the "handler_idx" field of struct vkd3d_shader_instruction to "opcode".
2024-05-30 19:57:01 +02:00
Nikolay Sivov
5265fbb789
vkd3d-shader/fx: Do not write shared buffers block when not compiling as a child effect.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-30 19:56:50 +02:00
Nikolay Sivov
ea177a7750
vkd3d-shader/hlsl: Handle "unsigned int" type.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-30 19:56:29 +02:00
Henri Verbeet
36c123c005
Release 1.12.
2024-05-29 22:05:28 +02:00
Nikolay Sivov
308d735923
vkd3d-shader/ir: Set texture register dimension as VEC4 when normalising combined samplers.
...
Thanks, Giovanni.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-27 21:07:51 +02:00
Nikolay Sivov
f090d1e80d
vkd3d-shader: Remove explicit newlines from hlsl_fixme() messages.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-23 23:12:10 +02:00
Henri Verbeet
b5ac6ac636
vkd3d-shader: Use a separate allocation for the "semantic_name" field of shader signature elements.
...
For tpf shader this would previously be a pointer into the original
shader code, and for d3dbc shaders we'd use static strings.
Unfortunately the dxil parser creates shader signatures where these
are pointers to metadata strings, and those go away when we call
sm6_parser_cleanup().
We could conceivably store a flag in the shader signature to indicate
whether shader_signature_cleanup()/vkd3d_shader_free_shader_signature()
should free the "semantic_name" field. It'd be a little ugly, and seems
unlikely to be worth it, but I'd be willing to be convinced.
2024-05-23 23:12:06 +02:00
Victor Chiletto
105ef28273
vkd3d-shader/preproc: Treat CR as whitespace.
2024-05-23 23:11:58 +02:00
Victor Chiletto
fa5708d3b5
vkd3d-shader/hlsl: Fix XOR assign operator lexing.
2024-05-22 22:15:20 +02:00
Nikolay Sivov
9c83caeda6
vkd3d-shader/fx: Use correct type name when reusing types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-16 21:49:50 +02:00
Nikolay Sivov
a913ac7844
vkd3d-shader/fx: Implement writing shared buffers.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-16 21:49:48 +02:00
Henri Verbeet
ce6f8a6a30
vkd3d-shader/dxil: Parse the shader into a vsir program in vkd3d_shader_sm6_parser_create().
2024-05-16 21:49:40 +02:00
Henri Verbeet
6474e8cc7b
vkd3d-shader/tpf: Parse the shader into a vsir program in vkd3d_shader_sm4_parser_create().
2024-05-16 21:49:39 +02:00
Henri Verbeet
402b96ef3b
vkd3d-shader/d3dbc: Parse the shader into a vsir program in vkd3d_shader_sm1_parser_create().
2024-05-16 21:49:38 +02:00
Henri Verbeet
efe9dfd73a
vkd3d-shader/ir: Do not store the vkd3d-shader configuration flags in struct vkd3d_shader_parser.
2024-05-16 21:49:37 +02:00
Henri Verbeet
19b552ce1b
vkd3d-shader/ir: Pass an initialised vsir_program structure to vkd3d_shader_parser_init().
2024-05-16 21:49:36 +02:00
Henri Verbeet
9e4a790de1
vkd3d-shader/ir: Use a separate allocation for the vsir program in struct vkd3d_shader_parser.
2024-05-16 21:49:34 +02:00
Francisco Casas
061dc39036
vkd3d-shader/hlsl: Also lower matrix swizzles and index loads in const passes.
2024-05-15 21:17:51 +02:00
Francisco Casas
0d252f894a
vkd3d-shader/hlsl: Run more constant passes on static expressions eval.
2024-05-15 21:17:50 +02:00
Francisco Casas
4f60c7167e
vkd3d-shader/hlsl: Run constant passes in a separate function.
2024-05-15 21:17:49 +02:00
Conor McCarthy
9e57039fce
vkd3d-shader/dxil: Handle SV_ClipDistance and SV_CullDistance.
2024-05-14 20:44:22 +02:00
Conor McCarthy
4f50af4c83
vkd3d-shader/dxil: Handle SV_Coverage out.
2024-05-14 20:44:18 +02:00
Conor McCarthy
e1c774bfeb
vkd3d-shader/spirv: Implement the WAVE_READ_LANE_FIRST instruction.
2024-05-14 20:44:10 +02:00
Conor McCarthy
47f0483267
vkd3d-shader/dxil: Implement DX intrinsic WaveReadLaneFirst.
2024-05-14 20:44:06 +02:00
Conor McCarthy
936d8e4f61
vkd3d-shader/spirv: Implement the WAVE_READ_LANE_AT instruction.
2024-05-14 20:44:04 +02:00
Conor McCarthy
e41643ab8f
vkd3d-shader/dxil: Implement DX intrinsic WaveReadLaneAt.
2024-05-14 20:44:02 +02:00
Victor Chiletto
c9af34ab28
vkd3d-shader/hlsl: Avoid a null pointer dereference in hlsl_block_cleanup (UBSan).
...
destroy_block() is called with a NULL block from:
* create_loop, through the loop rules for while and do-while loops.
* The selection_statement rule, in the case $6.else_block is NULL.
* free_parse_initializer.
2024-05-14 20:43:48 +02:00
Conor McCarthy
98f73ca2e5
vkd3d-shader/ir: Allow all DCL instructions to occur outside hull shader phases.
2024-05-13 22:27:13 +02:00
Conor McCarthy
def87539de
vkd3d-shader/dxil: Delete bool not-equal-to-false comparison instructions.
2024-05-13 22:27:13 +02:00
Conor McCarthy
f47ac703ab
vkd3d-shader/spirv: Emit a trace instead of a warning message for ignored alignment.
2024-05-13 22:27:13 +02:00
Conor McCarthy
e340855122
vkd3d-shader/spirv: Do not warn if no global flags are unhandled.
2024-05-13 22:27:13 +02:00
Conor McCarthy
ea5624e5e8
vkd3d-shader/dxil: Emit bool inputs and outputs as uint.
...
DXIL reads/writes uint for these.
2024-05-13 22:27:13 +02:00
Francisco Casas
5b7191280b
vkd3d-shader: Return a valid pointer when count=0 in param allocator (ubsan).
...
After compiling and linking with '-fsanitize=undefined' the following
error pops up in many tests:
vkd3d_shader_main.c:2024:12: runtime error: member access within null pointer of type 'struct vkd3d_shader_param_node'
This happens in the scenario where shader_param_allocator_get() gets
called with 'count = 0' but no allocation has been made yet, so
allocator->current is NULL.
In this case the result of the function, given by:
params = &allocator->current->param[allocator->index * allocator->stride];
is an invalid non-NULL pointer.
Functions like shader_sm4_read_instruction() may call
vsir_program_get_src_params() or vsir_program_get_dst_params() with 0
counts for various DCL_ instructions, as well as things like NOP,
ELSE, and SYNC.
We could avoid calling the functions in question with 0 counts, but it
doesn't seem worth the effort.
Alternatively, we could just return NULL on 'count == 0', but this is
also complicated because NULL is interpreted as a memory allocation
failure on the callers.
So we force allocation of the next node even if 'count = 0' when
allocator->current is NULL.
2024-05-13 22:27:13 +02:00
Francisco Casas
28d267b7c0
vkd3d-shader/hlsl: Allocate SM1 numeric uniforms in decreasing bind count.
2024-05-13 22:26:21 +02:00
Francisco Casas
e7450ce539
vkd3d-shader/d3dbc: Write used bind count for numeric uniforms.
2024-05-13 22:26:13 +02:00
Francisco Casas
f548644222
vkd3d-shader/hlsl: Only allocate numeric bind count for SM1 numeric uniforms.
...
Unless they have register reservations, in which case the whole
variable is still reserved.
2024-05-13 22:26:08 +02:00
Francisco Casas
573d511344
vkd3d-shader/hlsl: Track bind count according to usage for uniforms.
...
Where bind count means the number of registers required to include all
dereferences to the variable within the shader as in
hlsl_ir_var.bind_count[].
2024-05-13 22:26:07 +02:00
Francisco Casas
e0a801e796
vkd3d-shader/hlsl: Improve tracking of used components running DCE before.
...
track_object_components_usage() had to be improved to also
register derefs on resource stores.
It was not doing it because it assumed that for every resource store
there was a resource load already, which was true, before calling DCE.
2024-05-13 22:26:05 +02:00
Francisco Casas
657e460d11
vkd3d-shader/hlsl: Allocate unused variables with register reservations on SM1.
2024-05-13 22:26:03 +02:00
Conor McCarthy
77259da1ad
vkd3d-shader/spirv: Implement the WAVE_PREFIX_BIT_COUNT instruction.
2024-05-13 11:50:23 +02:00
Conor McCarthy
2810edf45b
vkd3d-shader/dxil: Implement DX intrinsic WavePrefixBitCount.
2024-05-13 11:50:22 +02:00
Conor McCarthy
065ef0c5e4
vkd3d-shader/spirv: Implement the WAVE_IS_FIRST_LANE instruction.
2024-05-13 11:50:21 +02:00
Conor McCarthy
c30976e5c2
vkd3d-shader/dxil: Implement DX intrinsic WaveIsFirstLane.
2024-05-13 11:50:20 +02:00
Conor McCarthy
feef2577ef
vkd3d-shader/spirv: Implement the WAVE_ALL_BIT_COUNT instruction.
2024-05-13 11:50:19 +02:00
Conor McCarthy
cb5163f9a4
vkd3d-shader/dxil: Implement DX intrinsic WaveAllBitCount.
2024-05-13 11:50:17 +02:00
Conor McCarthy
962096f179
vkd3d-shader/dxil: Implement DX intrinsics EmitStream, CutStream and EmitThenCutStream.
2024-05-08 21:08:16 +02:00
Conor McCarthy
cc49f26af1
vkd3d-shader/ir: Validate geometry shader properties.
2024-05-08 21:08:15 +02:00
Conor McCarthy
4fd2d5aa77
vkd3d-shader/dxil: Load geometry shader properties.
2024-05-08 21:08:14 +02:00
Nikolay Sivov
0053cc52b7
vkd3d-shader/fx: Initial support for writing sample state objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-08 21:08:05 +02:00
Nikolay Sivov
3c6470e3b2
vkd3d-shader/fx: Set UAV count in the header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-08 21:08:04 +02:00
Nikolay Sivov
1a79d1e945
vkd3d-shader/fx: Filter out unsupported object types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-08 21:08:03 +02:00
Nikolay Sivov
9bbed14987
vkd3d-shader/fx: Fix shader counter in the header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-08 21:08:02 +02:00
Nikolay Sivov
cb1a271151
vkd3d-shader/fx: Set texture count in the header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-08 21:08:01 +02:00
Nikolay Sivov
162d8760be
vkd3d-shader/fx: Set RTV counter in the header.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-08 21:08:00 +02:00
Nikolay Sivov
a879ac5536
vkd3d-shader/fx: Write depth stencil view object variables.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-08 21:07:59 +02:00
Zebediah Figura
c2eb563e50
vkd3d-shader/fx: Skip uniform copy logic for global variables.
2024-05-08 21:07:58 +02:00
Francisco Casas
68483d070f
vkd3d-shader/hlsl: Turn hlsl_state_block_entry arguments into hlsl_src.
...
This allows to apply passes that replace instructions in
hlsl_state_block_entry.instrs.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-05-08 21:07:57 +02:00
Zebediah Figura
7b3c47ba2e
vkd3d-shader/tpf: Write the field offset in bytes.
2024-05-06 22:12:48 +02:00
Zebediah Figura
2480eec98b
vkd3d-shader/hlsl: Move the "base_type" member to the class-specific union.
2024-05-06 22:12:41 +02:00
Zebediah Figura
4fd3f46109
vkd3d-shader/hlsl: Use a switch in hlsl_types_are_equal().
2024-05-06 22:12:39 +02:00
Zebediah Figura
d9f7a88329
vkd3d-shader/hlsl: Make HLSL_TYPE_PIXELSHADER into a separate class.
2024-05-06 22:12:37 +02:00
Zebediah Figura
874937dab4
vkd3d-shader/hlsl: Make HLSL_TYPE_VERTEXSHADER into a separate class.
2024-05-06 22:12:34 +02:00
Zebediah Figura
e904b4596a
vkd3d-shader/hlsl: Ensure that the type is numeric before calling expr_common_base_type().
2024-05-06 22:12:33 +02:00
Conor McCarthy
cfcc789b42
vkd3d-shader/spirv: Implement the WAVE_OP_* instructions.
2024-05-06 22:12:27 +02:00
Conor McCarthy
c71751edc9
vkd3d-shader/dxil: Implement DX intrinsics WaveActiveOp and WavePrefixOp.
2024-05-06 22:12:25 +02:00
Conor McCarthy
fef5760af0
vkd3d-shader/spirv: Implement the WAVE_ACTIVE_BIT_* instructions.
2024-05-06 22:12:24 +02:00
Conor McCarthy
af208135f3
vkd3d-shader/dxil: Implement DX intrinsic WaveActiveBit.
2024-05-06 22:12:22 +02:00
Conor McCarthy
1c49b3a779
vkd3d-shader/spirv: Implement the WAVE_ACTIVE_BALLOT instruction.
2024-05-06 22:12:21 +02:00
Conor McCarthy
174a692a17
vkd3d-shader/dxil: Implement DX intrinsic WaveActiveBallot.
2024-05-06 22:12:19 +02:00
Henri Verbeet
592e902d47
vkd3d-shader: Pass a struct vsir_program to vkd3d_shader_parser_compile().
2024-05-02 22:19:18 +02:00
Henri Verbeet
fa7b623eac
vkd3d-shader: Pass a struct vsir_program to scan_with_parser().
2024-05-02 22:19:18 +02:00
Henri Verbeet
f948520504
vkd3d-shader/spirv: Pass a struct vsir_program to spirv_compile().
2024-05-02 22:19:17 +02:00
Henri Verbeet
e21215f466
vkd3d-shader/spirv: Pass a struct vsir_program to spirv_compiler_generate_spirv().
2024-05-02 22:19:16 +02:00
Conor McCarthy
95489899be
vkd3d-shader/spirv: Handle the WAVE_ANY_TRUE instruction.
2024-05-02 22:19:02 +02:00
Conor McCarthy
fb5eb3159d
vkd3d-shader/dxil: Implement DX intrinsic WaveAnyTrue.
2024-05-02 22:19:00 +02:00
Conor McCarthy
77ec2a5caa
vkd3d-shader/spirv: Handle the WAVE_ALL_TRUE instruction.
2024-05-02 22:18:59 +02:00
Conor McCarthy
8e2b351538
vkd3d-shader/dxil: Implement DX intrinsic WaveAllTrue.
2024-05-02 22:18:58 +02:00
Conor McCarthy
78f2d2936d
vkd3d-shader/spirv: Handle the WAVE_ACTIVE_ALL_EQUAL instruction.
2024-05-02 22:18:57 +02:00
Conor McCarthy
9aa9b112e6
vkd3d-shader/dxil: Implement DX intrinsic WaveActiveAllEqual.
2024-05-02 22:18:55 +02:00
Conor McCarthy
c770efc530
vkd3d-shader/spirv: Handle the WAVELANEINDEX register.
2024-05-02 22:18:54 +02:00
Conor McCarthy
a130c970a6
vkd3d-shader/spirv: Handle the WAVELANECOUNT register.
2024-05-02 22:18:49 +02:00
Conor McCarthy
6a56b4e5d8
vkd3d-shader/dxil: Implement DX intrinsics WaveGetLaneCount and WaveGetLaneIndex.
2024-05-02 22:18:48 +02:00
Conor McCarthy
127bcf90e4
vkd3d-shader/dxil: Implement DX intrinsic Coverage.
2024-04-30 16:32:10 +02:00
Conor McCarthy
36c76e1557
vkd3d-shader/dxil: Handle SV_PrimitiveId.
2024-04-30 16:32:10 +02:00
Conor McCarthy
eef0f7c29e
vkd3d-shader/dxil: Handle SV_InstanceId.
2024-04-30 16:32:10 +02:00
Conor McCarthy
fb730b11cf
vkd3d-shader/dxil: Handle constexpr pointer cast.
2024-04-30 16:31:44 +02:00
Conor McCarthy
05510c118a
vkd3d-shader/dxil: Emit an error if a CMPXCHG instruction uses a forward-referenced pointer.
2024-04-30 16:31:42 +02:00
Conor McCarthy
b67a68b486
vkd3d-shader/dxil: Emit an error if a ATOMICRMW instruction uses a forward-referenced pointer.
2024-04-30 16:31:41 +02:00
Conor McCarthy
9615c38968
vkd3d-shader/dxil: Emit an error if a STORE instruction uses a forward-referenced pointer.
2024-04-30 16:31:40 +02:00
Conor McCarthy
b4b5af66ef
vkd3d-shader/dxil: Emit an error if a LOAD instruction uses a forward-referenced pointer.
2024-04-30 16:31:39 +02:00
Alexandre Julliard
91762a62c6
vkd3d-shader: Avoid non-constant initializer.
...
Fixes "initializer element is not constant" error with gcc < 8.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56508
2024-04-30 16:31:32 +02:00
Henri Verbeet
87c83e2ae2
vkd3d-shader: Get rid of struct vkd3d_shader_desc.
2024-04-30 16:31:19 +02:00
Henri Verbeet
b761f1a263
vkd3d-shader/spirv: Use location information from the current instruction.
2024-04-30 16:31:14 +02:00
Henri Verbeet
8b8ad07057
vkd3d-shader/hlsl: Use vkd3d_string_buffer_printf() in declare_predefined_types().
2024-04-30 16:31:09 +02:00
Francisco Casas
ee735e8eed
vkd3d-shader/hlsl: Fold x * 1 identities.
2024-04-30 16:31:05 +02:00
Francisco Casas
b14f935d0f
vkd3d-shader/hlsl: Fold x + 0 identities.
2024-04-30 16:31:02 +02:00
Conor McCarthy
075979fa21
vkd3d-shader/ir: Always check for undominated SSA use in register relative addresses.
2024-04-24 23:48:13 +02:00
Francisco Casas
5e3515f191
vkd3d-shader/d3dbc: Support SM1 if conditionals.
...
According to the documentation, if_comp is available from 2_x pixel
and vertex shaders and, unlike "if bool" it doesn't expect a constant
boolean register (from the input signature), so:
if_neq cond -cond
seems like a convenient way to write these, for profiles above 2.0.
2024-04-24 23:48:06 +02:00
Francisco Casas
d2427ea1bd
vkd3d-shader/ir: Lower IFC instructions to IF instructions.
2024-04-24 23:48:05 +02:00
Francisco Casas
e370ce5bf2
vkd3d-shader/d3dbc: Pass hlsl_block instead of function declaration.
2024-04-24 23:48:04 +02:00
Henri Verbeet
46fca3f9f4
vkd3d-common: Introduce VKD3D_BITMAP_SIZE.
2024-04-23 22:41:25 +02:00
Francisco Casas
aa35b2cecb
vkd3d-shader/hlsl: Cleanup parse_attribute_list structs (valgrind).
2024-04-23 22:38:03 +02:00
Conor McCarthy
e3dde09bb9
vkd3d-shader/ir: Accept undefined PHI incomings as valid.
...
An incoming can be undefined if the PHI result is not used if the
incoming's path was taken, or if the undefined value is consumed by
an instruction (dxc will compile such code without errors).
2024-04-23 22:37:33 +02:00
Zebediah Figura
d7da278693
vkd3d-shader/hlsl: Make HLSL_TYPE_RENDERTARGETVIEW into a separate class.
2024-04-23 22:37:09 +02:00
Zebediah Figura
ee2bde3aba
vkd3d-shader/hlsl: Make HLSL_TYPE_DEPTHSTENCILVIEW into a separate class.
2024-04-23 22:37:06 +02:00
Zebediah Figura
76971d811e
vkd3d-shader/hlsl: Make HLSL_TYPE_TECHNIQUE into a separate class.
2024-04-23 22:36:51 +02:00
Zebediah Figura
3c8c7426df
vkd3d-shader/hlsl: Make HLSL_TYPE_PASS into a separate class.
2024-04-23 22:36:38 +02:00
Zebediah Figura
24d3a352a6
vkd3d-shader/hlsl: Make HLSL_TYPE_EFFECT_GROUP into a separate class.
2024-04-23 22:36:32 +02:00
Giovanni Mascellani
6b841486d4
vkd3d-shader/ir: Materialize SSAs in each function of a hull shader.
2024-04-23 22:36:17 +02:00
Giovanni Mascellani
c8af142bb0
vkd3d-shader/ir: Structurize each function of a hull shader.
2024-04-23 22:36:16 +02:00
Giovanni Mascellani
d8e4b19cdc
vkd3d-shader/ir: Skip invalid blocks when materializing undominated SSAs.
2024-04-23 22:36:14 +02:00
Henri Verbeet
8345b9b6f5
vkd3d-shader/glsl: Implement VKD3DSIH_NOP.
2024-04-22 23:14:30 +02:00
Conor McCarthy
079f8e4d52
vkd3d-shader/dxil: Implement DX intrinsic OutputControlPointID.
2024-04-22 23:13:31 +02:00
Conor McCarthy
3976738baf
vkd3d-shader/dxil: Implement DX intrinsic DomainLocation.
2024-04-22 23:13:30 +02:00
Conor McCarthy
e165f9cefc
vkd3d-shader/dxil: Implement DX intrinsic StorePatchConstant.
2024-04-22 23:13:29 +02:00
Conor McCarthy
3479962983
vkd3d-shader/dxil: Implement DX intrinsics LoadOutputControlPoint and LoadPatchConstant.
2024-04-22 23:13:28 +02:00
Conor McCarthy
4457181b2a
vkd3d-shader/dxil: Support patch constant functions and signatures.
2024-04-22 23:13:26 +02:00
Zebediah Figura
833c897aac
vkd3d-shader/hlsl: Parse register space reservations.
2024-04-22 23:13:15 +02:00
Zebediah Figura
29f6a7e5f7
vkd3d-shader/hlsl: Rename register_opt and packoffset_opt to register_reservation and packoffset_reservation.
...
"opt" seems to imply "optional", but the optional aspect of these reservations
is not (and never has been) encoded into these rules.
2024-04-22 23:13:13 +02:00
Henri Verbeet
4a209efb62
vkd3d-shader/hlsl: Support spirv-binary and spirv-text as target formats.
2024-04-19 22:24:07 +02:00
Henri Verbeet
0116e49d9b
vkd3d-shader/hlsl: Support d3d-asm as target format.
2024-04-19 22:24:06 +02:00
Henri Verbeet
414bb99542
vkd3d-shader/glsl: Add vkd3d-shader version information to the generated shader.
2024-04-19 22:23:55 +02:00
Conor McCarthy
3205e08fb1
vkd3d-shader/dxil: Support SV_Depth, SV_DepthGreaterEqual and SV_DepthLessEqual.
2024-04-19 22:23:43 +02:00
Zebediah Figura
171e097268
vkd3d-shader/hlsl: Make HLSL_TYPE_UAV into a separate class.
2024-04-19 22:23:20 +02:00
Zebediah Figura
93d7cd1785
vkd3d-shader/hlsl: Make HLSL_TYPE_TEXTURE into a separate class.
2024-04-19 22:23:19 +02:00
Zebediah Figura
220362cbad
vkd3d-shader/hlsl: Make HLSL_TYPE_SAMPLER into a separate class.
2024-04-19 22:23:18 +02:00
Zebediah Figura
f57db442b0
vkd3d-shader/hlsl: Make HLSL_TYPE_STRING into a separate class.
2024-04-19 22:23:16 +02:00
Zebediah Figura
cdcf2da2eb
vkd3d-shader/hlsl: Make HLSL_TYPE_VOID into a separate class.
2024-04-19 22:23:14 +02:00
Henri Verbeet
e17e481130
vkd3d-shader/glsl: Call vkd3d_shader_normalise().
2024-04-17 22:52:20 +02:00
Conor McCarthy
6975a8d726
vkd3d-shader: Introduce SPIRV_ENVIRONMENT_VULKAN_1_1.
...
The SPIR-V backend may emit SPIR-V 1.3 if Vulkan 1.1 is available.
Some extensions which provide wave op instructions are available in
SPIR-V 1.0, but these are not sufficient to implement all Shader Model 6
wave op intrinsics. SPIR-V 1.3 has all of the required instructions, but
does not support reading from a quad at a non-constant (but uniform) lane
index, so it may later prove necessary to introduce a Vulkan 1.2
environment.
2024-04-17 22:51:49 +02:00
Conor McCarthy
a7870e1793
vkd3d-shader/spirv: Emit a compiler warning if an atomic op is flagged volatile.
2024-04-17 22:51:43 +02:00
Conor McCarthy
d9f42b2c51
vkd3d-shader/dxil: Implement the DXIL CMPXCHG instruction.
2024-04-17 22:51:41 +02:00
Conor McCarthy
99996ed5b5
vkd3d-shader/dxil: Implement DX intrinsic RenderTargetGetSampleCount.
2024-04-17 22:51:34 +02:00
Conor McCarthy
fe5e821cca
vkd3d-shader/dxil: Implement DX intrinsics Texture2DMSGetSamplePosition and RenderTargetGetSamplePosition.
2024-04-17 22:51:32 +02:00
Henri Verbeet
1d6c3eae78
vkd3d-shader/ir: Remove VKD3DSIH_DCL_CONSTANT_BUFFER instructions.
2024-04-16 22:18:52 +02:00
Henri Verbeet
8a9364c124
vkd3d-shader/d3d-asm: Get rid of shader_addline().
2024-04-16 22:18:44 +02:00
Giovanni Mascellani
a359c42795
vkd3d-shader/ir: Only emit launchers when needed.
2024-04-16 22:18:33 +02:00
Giovanni Mascellani
df4731dc17
vkd3d-shader/ir: Only emit trampolines when needed.
2024-04-16 22:18:26 +02:00
Giovanni Mascellani
d6ba8b88fa
vkd3d-shader/ir: Swap selection branches if the if branch is empty.
2024-04-16 22:18:25 +02:00
Conor McCarthy
0515482e82
vkd3d-shader/ir: Validate tessellation declarations.
2024-04-16 22:18:18 +02:00
Conor McCarthy
e1abf1e48a
vkd3d-shader/dxil: Implement DX intrinsic PrimitiveID.
2024-04-16 22:18:17 +02:00
Conor McCarthy
54016b3ced
vkd3d-shader/dxil: Load hull shader properties.
2024-04-16 22:18:15 +02:00
Conor McCarthy
02cbc511bb
vkd3d-shader/dxil: Load domain shader properties.
2024-04-16 22:18:14 +02:00
Henri Verbeet
b8eadf4bab
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_interpolation_mode().
2024-04-15 21:33:58 +02:00
Henri Verbeet
1ad524072d
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_primitive_type().
2024-04-15 21:33:57 +02:00
Henri Verbeet
7d72accce2
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_decl_usage().
2024-04-15 21:33:56 +02:00
Henri Verbeet
4d8c966ff4
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_shader_input_sysval_semantic().
2024-04-15 21:33:55 +02:00
Henri Verbeet
37401fa11c
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_reg_type().
2024-04-15 21:33:54 +02:00
Henri Verbeet
7c66c9122d
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_register().
2024-04-15 21:33:52 +02:00
Conor McCarthy
23db066922
vkd3d-shader/ir: Implement MAD in two operations if flagged as precise.
...
With some changes by Giovanni Mascellani.
2024-04-15 21:33:35 +02:00
Giovanni Mascellani
9112a5be58
vkd3d-shader/ir: Move DCL_TEMPS removal to the generic instruction lowering pass.
2024-04-15 21:33:34 +02:00
Giovanni Mascellani
8a17a5a08b
vkd3d-shader/ir: Introduce vsir_program_lower_instructions().
...
It is meant as generic pass to host all program changes to single
instructions that do not require keeping a global state, intstead
of having to loop through the whole program many times.
2024-04-15 21:33:32 +02:00
Giovanni Mascellani
a7dc6dcce2
vkd3d-shader/ir: Split handling jumps when emitting a structured program.
2024-04-15 21:33:28 +02:00
Giovanni Mascellani
1a8a4c7787
vkd3d-shader/ir: Split handling selections when emitting a structured program.
2024-04-15 21:33:26 +02:00
Giovanni Mascellani
052df4d693
vkd3d-shader/ir: Split handling loops when emitting a structured program.
2024-04-15 21:33:16 +02:00
Giovanni Mascellani
5e42f6779a
vkd3d-shader/ir: Split handling blocks when emitting a structured program.
2024-04-15 21:33:15 +02:00
Giovanni Mascellani
b4cfc24f67
vkd3d-shader/ir: Refactor declaration emission outside of the CFG structure.
...
This is in preparation of handling more than one function (as
it happens for Hull Shaders), which will require having a single
row of declarations, but handling more than one CFG.
2024-04-15 21:33:14 +02:00
Giovanni Mascellani
27801e5612
vkd3d-shader/ir: Split undominated SSA materialization.
2024-04-15 21:33:13 +02:00
Giovanni Mascellani
d891ac5017
vkd3d-shader/ir: Split program structurization.
2024-04-15 21:33:12 +02:00
Giovanni Mascellani
eb15f97083
vkd3d-shader/ir: Move breaks out of selections again after having optimized loops.
2024-04-15 21:33:08 +02:00
Giovanni Mascellani
be7eec75dc
vkd3d-shader/ir: Append code to the non-breaking branch if there is breaking one.
2024-04-15 21:33:07 +02:00
Giovanni Mascellani
a2c6b5450b
vkd3d-shader/ir: Prepare for changing the destination list in vsir_cfg_optimize_recurse().
2024-04-15 21:33:05 +02:00
Petrichor Park
1fb9e7526b
vkd3d-shader/hlsl: Implement tanh.
2024-04-15 21:32:59 +02:00
Petrichor Park
c4182cc272
vkd3d-shader/hlsl: Implement hyperbolic sin and cos.
2024-04-15 21:32:56 +02:00
Giovanni Mascellani
aad040af05
vkd3d-shader/ir: Remove loops that terminate with a `break'.
2024-04-11 09:22:14 -05:00
Giovanni Mascellani
105ccc4769
vkd3d-shader/ir: Count how many jumps target each loop.
2024-04-11 09:22:13 -05:00
Giovanni Mascellani
f5d1b5d263
vkd3d-shader/ir: Move `break's out of selection constructs when possible.
2024-04-11 09:22:11 -05:00
Nikolay Sivov
8d78e3a821
vkd3d-shader/hlsl: Support refract() intrinsic.
...
With some changes by Giovanni Mascellani.
2024-04-10 08:55:27 -05:00
Giovanni Mascellani
ecad299ba4
vkd3d-shader/hlsl: Emit half results when operating on half arguments.
2024-04-10 08:55:24 -05:00
Zebediah Figura
280bea9033
vkd3d-shader/fx: Use a switch in write_fx_2_initial_value().
2024-04-10 08:55:20 -05:00
Zebediah Figura
6c6106f780
vkd3d-shader/fx: Move unimplemented type checks into is_type_supported_fx_2().
2024-04-10 08:55:19 -05:00
Zebediah Figura
047040fc63
vkd3d-shader/fx: Don't use an array to write the type class.
2024-04-10 08:55:18 -05:00
Zebediah Figura
285059ef11
vkd3d-shader/d3dbc: Consider the class in sm1_base_type().
...
We want the base type to stop being a property of all types, and to stop using
the same enumeration for objects and numeric types. The backend should do the
work of translation; we want a more sensible and convenient representation for
the compiler itself.
2024-04-10 08:55:17 -05:00
Zebediah Figura
a882d60534
vkd3d-shader/hlsl: Map HLSL_TYPE_DOUBLE to D3DXPT_FLOAT.
2024-04-10 08:55:15 -05:00
Giovanni Mascellani
a2bb4ef301
vkd3d-shader/d3d-asm: Reset indent level on HS phases.
2024-04-10 08:54:29 -05:00
Conor McCarthy
cb5411408a
vkd3d-shader/dxil: Implement DX intrinsic CalculateLOD.
2024-04-10 08:54:23 -05:00
Francisco Casas
e9559c394b
vkd3d-shader/hlsl: Allow KW_PIXELSHADER and KW_VERTEXSHADER as stateblock lhs.
2024-04-10 08:54:23 -05:00
Francisco Casas
ef9ae22ed0
vkd3d-shader/hlsl: Store state block on pass variables.
2024-04-10 08:54:23 -05:00
Francisco Casas
a99bcb1196
vkd3d-shader/hlsl: Parse list of state blocks.
2024-04-10 08:54:23 -05:00
Francisco Casas
80320f6129
vkd3d-shader/hlsl: Introduce hlsl_ir_stateblock_constant.
2024-04-10 08:54:23 -05:00
Francisco Casas
ee0d439a1b
vkd3d-shader/hlsl: Parse and store state blocks on variables.
2024-04-10 08:54:23 -05:00
Francisco Casas
4dedcc5885
vkd3d-shader/hlsl: Also call dce before lowering deref paths.
2024-04-10 08:54:23 -05:00
Francisco Casas
5ab1ef1cad
vkd3d-shader/hlsl: Properly release string buffer on write_atan_or_atan2().
...
vkd3d_string_buffer_cleanup() doesn't do the same as
hlsl_release_string_buffer(). The former only frees the char array
inside the string buffer and not the string buffer itself.
2024-04-09 12:28:03 -05:00
Zebediah Figura
0e3377a1be
vkd3d-shader/hlsl: Avoid using HLSL_CLASS_OBJECT without checking the base type.
...
As the diffstat shows, HLSL_CLASS_OBJECT does not really have much in common.
Resource types (TEXTURE, SAMPLER, UAV) sometimes behave similarly to each other,
but do not generally behave similarly to effect-specific types (string, shader,
state, view). Most consumers of HLSL_CLASS_OBJECT subsequently check the base
type anyway.
Hence we want to replace HLSL_TYPE_* with individual classes for object types.
As a first step, change the last few places that only check HLSL_CLASS_OBJECT.
2024-04-09 12:27:55 -05:00
Zebediah Figura
269cdad7b9
vkd3d-shader/hlsl: Consider any valid register reservation to invoke manual packing.
...
Regardless of the type of the variable.
2024-04-09 12:27:53 -05:00
Zebediah Figura
ce50c3a186
vkd3d-shader/hlsl: Use hlsl_type_is_resource() for unbounded array checks.
...
Not all objects can be unbounded descriptors.
2024-04-09 12:27:51 -05:00
Zebediah Figura
c5f507ac38
vkd3d-shader/hlsl: Add SM5.1 shader target strings.
2024-04-09 12:27:47 -05:00
Zebediah Figura
843968cd63
vkd3d-shader/hlsl: Use hlsl_version_ge() when checking for unbounded arrays.
...
6.x also allows them.
2024-04-09 12:27:45 -05:00
Zebediah Figura
5fbd2708c0
vkd3d-shader/hlsl: Move shader version helpers to hlsl.h.
2024-04-09 12:27:43 -05:00
Conor McCarthy
e72c3bab71
vkd3d-shader/spirv: Ensure the data register is UINT in spirv_compiler_emit_store_tgsm().
2024-04-09 12:27:30 -05:00
Conor McCarthy
dc99159dd8
vkd3d-shader/spirv: Bitcast if necessary in spirv_compiler_emit_store_dst_components().
2024-04-09 12:27:29 -05:00
Conor McCarthy
85c8c6be4d
vkd3d-shader/dxil: Support constexpr GEP.
2024-04-09 12:27:26 -05:00
Conor McCarthy
7d5e3713f9
vkd3d-shader/ir: Materialise SSAs to temps before lowering switch instructions.
2024-04-09 12:27:20 -05:00
Conor McCarthy
cfcd57209b
vkd3d-shader/ir: Convert SSAs to temps only if the block of origin does not dominate all uses.
2024-04-09 12:27:19 -05:00
Conor McCarthy
1c61776c18
vkd3d-shader/spirv: Handle uint2 to double bitcast in spirv_compiler_emit_mov().
...
Necessary for MakeDouble if the dst is SSA.
2024-04-09 12:27:18 -05:00
Conor McCarthy
c8eb7e1c81
vkd3d-shader/spirv: Emit a uint result for RESINFO_UINT if the dst register is SSA.
2024-04-09 12:27:16 -05:00
Conor McCarthy
7bfc7410f2
vkd3d-shader/ir: Materialise phis to temps in the incoming blocks.
...
RADV converts temps to phi instructions, so converting phis to MOVC in
VSIR just translates back to phis feeding into a MOVC. This commit
eliminates the MOVC.
2024-04-09 12:27:15 -05:00
Francisco Casas
62bb12f322
vkd3d-shader/hlsl: Use LOGIC_AND instead of MUL in all().
2024-04-09 12:27:09 -05:00
Francisco Casas
53e4d6eedb
vkd3d-shader/hlsl: Use LOGIC_OR instead of BIT_OR in any().
...
Note that BIT_OR is not available for SM1 bools, so we must prefer
LOGIC_OR when possible.
2024-04-09 12:27:07 -05:00
Francisco Casas
2621fc9572
vkd3d-shader/ir: Add missing src swizzle in vsir_program_lower_texkills().
2024-04-09 12:27:06 -05:00
Francisco Casas
8fca801591
vkd3d-shader/tpf: Use the extra_bits field for _nz on discard.
2024-04-09 12:27:03 -05:00
Francisco Casas
3a0a4b625f
vkd3d-shader/hlsl: Merge HLSL_OP3_MOVC into HLSL_OP3_TERNARY.
2024-04-09 12:27:02 -05:00
Francisco Casas
8f6f875a59
vkd3d-shader/hlsl: Move lower of non-float expressions with the other SM1 passes.
2024-04-09 12:27:01 -05:00
Francisco Casas
19fd43214b
vkd3d-shader/hlsl: Ensure that TERNARY condition is always bool.
...
Also, properly casting it to float in lower_ternary() for SM1
avoids creating ABS and NEG on bool types.
2024-04-09 12:26:59 -05:00
Giovanni Mascellani
a278f32d3f
vkd3d-shader/ir: Synthesize selection constructs from conditional jumps.
2024-04-04 22:19:19 +02:00
Giovanni Mascellani
0d13b6afe9
vkd3d-shader/ir: Remove trailing `continue's.
2024-04-04 22:19:18 +02:00
Giovanni Mascellani
d8414302e8
vkd3d-shader/ir: Move `continue's to the false branch when possible.
2024-04-04 22:19:16 +02:00
Nikolay Sivov
4b0a328a2b
vkd3d-shader/hlsl: Allow 'export' modifier on functions.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-04-03 22:24:15 +02:00
Giovanni Mascellani
e6c20361ea
vkd3d-shader/ir: Drop a useless helper.
2024-04-03 22:23:08 +02:00
Giovanni Mascellani
9aff65c6d2
vkd3d-shader/ir: Open a loop when visiting the loop header.
...
Not when making the loop header available, which is too early and
might lead to open too many loops at once.
2024-04-03 22:23:06 +02:00
Nikolay Sivov
e1e6367210
vkd3d-shader/fx: Add an option to include empty buffers in the effect binary.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-04-02 23:10:42 +02:00
Nikolay Sivov
c509c85f63
vkd3d-shader/hlsl: Allow annotations on constant buffers.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-04-02 23:10:40 +02:00
Giovanni Mascellani
d10031911d
vkd3d-shader/ir: Move vsir_program_normalise() to the end of the file.
...
vsir_program_normalise() has function calls to basically everything in
ir.c, so it's useful to have it in an easily reachable place to
quickly jump to wherever you need using your favorite code editor's
features.
2024-04-02 23:10:07 +02:00
Zebediah Figura
106cbc02de
vkd3d-shader/hlsl: Use hlsl_is_numeric_type() in type_has_object_components().
2024-04-02 23:09:38 +02:00
Zebediah Figura
54f2dfe403
vkd3d-shader/hlsl: Simplify type_has_object_components().
...
The extra argument is not very easy to intuit. Since all we're trying to do here is check whether the type is a struct with object components in it, write that out explicitly.
2024-04-02 23:09:36 +02:00
Zebediah Figura
1e7d82798c
vkd3d-shader/hlsl: Move a hlsl_fixme() to a more relevant place.
2024-04-02 23:09:35 +02:00
Zebediah Figura
675d7b8cb6
vkd3d-shader/hlsl: Remove a redundant type check.
...
We already perform an implicit cast per component in initialize_var_components().
2024-04-02 23:09:33 +02:00
Conor McCarthy
d72d5c35d1
vkd3d-shader/dxil: Implement DX intrinsics Dot2, Dot3 and Dot4.
2024-04-02 23:09:28 +02:00
Conor McCarthy
2909a5aacc
vkd3d-shader/dxil: Implement DX intrinsic MakeDouble.
2024-04-02 23:09:23 +02:00
Conor McCarthy
11ee92ed7e
vkd3d-shader/dxil: Implement DX intrinsic Discard.
2024-03-27 22:37:42 +01:00
Conor McCarthy
8d947ce868
vkd3d-shader/spirv: Support bool source in spirv_compiler_emit_discard().
2024-03-27 22:37:40 +01:00
Zebediah Figura
6b6e4bc212
vkd3d-shader: Add a compile option to control whether implicit truncation warnings are printed.
...
d3dcompiler and d3dx9 versions before 42 don't emit this error; this will be
necessary to emulate that behaviour.
Other warnings exist that are introduced in different d3dcompiler versions,
although there are not very many distinct HLSL warnings to begin with.
We could of course group all these together under a single compiler option, but
I find that using separate top-level options is unilaterally friendlier to an
API consumer, and simpler to implement as well. It also in some sense maps
conceptually to e.g. "-Wno-implicit-conversion".
2024-03-27 22:37:34 +01:00
Nikolay Sivov
b382d1843d
vkd3d-shader/fx: Accept texture types when writing fx_2_0 effects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-27 22:37:29 +01:00
Nikolay Sivov
b09f919673
vkd3d-shader/hlsl: Treat "texture" type name as case-insensitive.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-27 22:37:28 +01:00
Nikolay Sivov
17dc23269e
vkd3d-shader/fx: Handle "uint" type for fx_2_0 parameters.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-27 22:37:27 +01:00
Nikolay Sivov
9117629e35
vkd3d-shader/fx: Handle "half" type for fx_2_0 parameters.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-27 22:37:25 +01:00
Nikolay Sivov
88d9cff407
vkd3d-shader/fx: Set initial object count to 1 for fx_2_0.
...
This is used for the object table at runtime. Object variable index is 1-based.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-27 22:37:24 +01:00
Nikolay Sivov
501aed43f3
vkd3d-shader/fx: Zero-pad strings when aligning them for fx_2_0.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-27 22:37:23 +01:00
Nikolay Sivov
228d54efff
vkd3d-shader/fx: Mark shared variables as such for fx_2_0 effects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-27 22:37:21 +01:00
Francisco Casas
11e7265815
vkd3d-shader/spirv: Throw compiler error on unrecognized register.
...
This codepath path is currently triggered when transpiling d3dbc shaders
that use vPos (or other of these special registers).
While vPos gets added to the input signature and gets assigned an INPUT
register, the registers in the shader instructions are still of
VKD3DSPR_MISCTYPE type and are not propperly mapped yet. This gives
invalid results.
Some SM1 tests must be set back to "todo" but they only work because, by
coincidence, we are assigning vPos the input register with index 0.
Propper mapping of these registers is still required.
2024-03-27 22:37:15 +01:00
Zebediah Figura
172cb75872
vkd3d-shader/spirv: Implement VKD3DSIH_ABS.
2024-03-27 22:37:10 +01:00
Francisco Casas
9a222d2be1
vkd3d-shader/d3dbc: Implement HLSL_OP2_LOGIC_AND for SM1.
2024-03-27 22:37:09 +01:00
Francisco Casas
777bf772bf
vkd3d-shader/d3dbc: Implement HLSL_OP2_LOGIC_OR for SM1.
2024-03-27 22:37:08 +01:00
Francisco Casas
a838f97e3f
vkd3d-shader/hlsl: Cast to bool before applying LOGIC_NOT.
...
Before this commit, it is possible for one of the tests of
cf-cond-types.shader_test to pass a non-bool to LOGIC_NOT, which should
not be allowed.
2024-03-27 22:37:07 +01:00
Francisco Casas
ee5fc7e968
vkd3d-shader/hlsl: Support LOGIC_NOT for SM1.
2024-03-27 22:37:06 +01:00
Conor McCarthy
68b31b7396
vkd3d-shader/spirv: Handle the sequentially consistent ordering flag for atomic instructions.
2024-03-27 22:37:01 +01:00
Conor McCarthy
a8dd788f41
vkd3d-shader/spirv: Emit a warning if the atomic instruction volatile flag is unhandled.
2024-03-27 22:37:00 +01:00
Conor McCarthy
9e0b9c3a7a
vkd3d-shader/dxil: Implement the DXIL ATOMICRMW instruction.
2024-03-27 22:36:59 +01:00
Conor McCarthy
b708a9b3b5
vkd3d-shader/dxil: Implement DX instructions ThreadId, GroupId, ThreadIdInGroup and FlattenedThreadIdInGroup.
2024-03-27 22:36:58 +01:00
Conor McCarthy
0f332eb939
vkd3d-shader/dxil: Emit an error if a constant code is unhandled.
2024-03-27 22:36:56 +01:00
Conor McCarthy
47e56cdfed
vkd3d-shader/spirv: Support 64-bit register info component type in spirv_compiler_emit_load_reg().
...
For 64-bit indexable temps (and any other 64-bit declarations) the write
mask must not be converted.
2024-03-27 22:36:55 +01:00
Conor McCarthy
83a67366da
vkd3d-shader/spirv: Do not assert if a TGSM store data register is not UINT.
2024-03-27 22:36:54 +01:00
Conor McCarthy
9da375414e
vkd3d-shader/spirv: Do not assert if a TGSM load dst register is not UINT.
2024-03-27 22:36:52 +01:00
Zebediah Figura
2247288003
vkd3d-shader/tpf: Set the user-packed flag for sm5.0 resources as well.
2024-03-27 22:36:39 +01:00
Zebediah Figura
7b87895289
vkd3d-shader/tpf: Write the component count as the column count for structs.
2024-03-27 22:36:37 +01:00
Zebediah Figura
5bf23cb2f5
vkd3d-shader/tpf: Explicitly write the class and base type for non-numeric types.
...
Avoid relying on that information being stored in the hlsl_type.
2024-03-27 22:36:36 +01:00
Zebediah Figura
34e9c101e8
vkd3d-shader/tpf: Do not write structs with no numeric fields into the RDEF.
2024-03-27 22:36:35 +01:00
Zebediah Figura
0b1f11dd33
vkd3d-shader/hlsl: Allocate register reservations for structs as well.
2024-03-27 22:36:34 +01:00
Zebediah Figura
622fcda9ee
vkd3d-shader/tpf: Do not write non-numeric struct fields into the RDEF.
2024-03-27 22:36:33 +01:00
Henri Verbeet
5de5f241a6
vkd3d-shader/ir: Pass a struct vsir_program to vkd3d_shader_normalise().
2024-03-19 22:57:56 +01:00
Henri Verbeet
164608a007
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_dst_param().
2024-03-18 23:08:03 +01:00
Henri Verbeet
e2d1a878a7
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_src_param().
2024-03-18 23:08:02 +01:00
Henri Verbeet
939a7fbe88
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_tessellator_partitioning().
2024-03-18 23:08:01 +01:00
Henri Verbeet
5f5145b8f8
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_tessellator_output_primitive().
2024-03-18 23:08:00 +01:00
Henri Verbeet
f61a92b908
vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_tessellator_domain().
2024-03-18 23:07:58 +01:00
Henri Verbeet
b98171878f
vkd3d-shader/glsl: Keep track of the current indentation level.
2024-03-18 23:07:52 +01:00
Giovanni Mascellani
e5f486edd3
vkd3d-shader/ir: Use type "unused" for labels.
...
The label itself is certainly an unsigned integer, but the register
has no meaningful data type. It cannot be evaluated to anything.
The goal of this is to reduce cluttering in the internal ASM dumps.
2024-03-18 23:07:45 +01:00
Giovanni Mascellani
d418f49888
vkd3d-shader/d3d-asm: Do not dump a register's type if it's unused.
2024-03-18 23:07:44 +01:00
Giovanni Mascellani
22d19aed58
vkd3d-shader/d3d-asm: Indent instructions inside a block.
2024-03-18 23:07:43 +01:00
Conor McCarthy
0c01a55c7d
vkd3d-shader/dxil: Implement DX intrinsic Saturate.
2024-03-18 23:07:40 +01:00
Conor McCarthy
4599d3c1cf
vkd3d-shader/dxil: Implement DX intrinsic FAbs.
2024-03-18 23:07:39 +01:00
Conor McCarthy
33694f08fc
vkd3d-shader/dxil: Implement DX intrinsics FMa, FMad, IMad and UMad.
2024-03-18 23:07:38 +01:00
Conor McCarthy
421d311a49
vkd3d-shader/spirv: Use dst register data type in spirv_compiler_emit_imad().
2024-03-18 23:07:36 +01:00
Nikolay Sivov
f55b152811
vkd3d-shader/fx: Fail effect writing on unsupported annotations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:32 +01:00
Nikolay Sivov
206eeb0752
vkd3d-shader/fx: Remove newlines from fixme messages.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:31 +01:00
Nikolay Sivov
4fc15d4b4a
vkd3d-shader/fx: Add initial support for writing fx_2_0 parameters.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:30 +01:00
Nikolay Sivov
ed06e0bbef
vkd3d-shader/fx: Populate global variables list during context initialization.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:29 +01:00
Nikolay Sivov
ea686e8f5a
vkd3d-shader/fx: Fix an instruction block leak.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:28 +01:00
Nikolay Sivov
9c7fe62da6
vkd3d-shader/fx: Use type writing helper only for fx_4+.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-18 23:07:27 +01:00
Conor McCarthy
3f99719ff2
vkd3d-shader/dxil: Implement DX intrinsic BufferUpdateCounter.
2024-03-18 23:07:23 +01:00
Giovanni Mascellani
8c15377ffc
vkd3d-shader/ir: Emit multilevel jumps in the structured program.
...
The new structurizer therefore reaches feature parity with the
older simple one, except for a couple of points:
* the old structurizer accepts any CFG, without requiring reducibility;
however, the DXIL specification requires the CFG to be reducible
anyway, so we're not really losing anything;
* the new structurizer additionally requires that no block has two
incoming back arrows; AFAIK this is condition that can happen,
but in practice it seems to be rare; also, it's not hard to add
support for it, as soon as it is decided it is useful.
On the other hand, the new structurizer makes use of the merging
information that are reconstructed from the CFG, which is important
for downstream optimization and fundamental for correctly emitting
tangled instructions.
Taking these considerations into account, the old structurizer is
considered superseded and is therefore removed.
2024-03-18 23:07:17 +01:00
Giovanni Mascellani
c2aa01de6e
vkd3d-shader/ir: Emit the reconstructed structured program.
...
Multilevel jumps are not supported yet, and trigger a fallback to the
simple structurizer.
2024-03-18 23:07:15 +01:00
Henri Verbeet
abf76372e0
vkd3d-shader/ir: Pass a struct vsir_program to vsir_validate().
2024-03-14 23:24:29 +01:00
Henri Verbeet
7af3e9300f
vkd3d-shader/ir: Pass a struct vsir_program to flatten_control_flow_constructs().
2024-03-14 23:24:28 +01:00
Henri Verbeet
268989f5b9
vkd3d-shader/ir: Pass a struct vsir_program to normalise_combined_samplers().
2024-03-14 23:24:27 +01:00
Henri Verbeet
674bebe9c9
vkd3d-shader/ir: Pass a struct vsir_program to shader_normalise_io_registers().
2024-03-14 23:24:24 +01:00
Henri Verbeet
8a60814476
vkd3d-shader/glsl: Generate comments for unhandled instructions.
...
Mostly for debugging purposes; we'll fail compilation, but will still trace
the shader that would have been generated.
2024-03-14 23:24:19 +01:00
Henri Verbeet
9869fbb0ea
vkd3d-shader/glsl: Trace the generated shader.
...
Even if compilation ultimately failed.
2024-03-14 23:24:16 +01:00
Francisco Casas
619edb4c38
vkd3d-shader/hlsl: Lower CMP instructions for vertex shaders.
2024-03-14 22:49:29 +01:00
Francisco Casas
4c40deaac1
vkd3d-shader/hlsl: Use hlsl_fixme() on missing SM1 matrix writemask lowering.
...
Instead of FIXME(). Otherwise we compile invalid d3dbc.
2024-03-14 22:49:29 +01:00
Francisco Casas
5c986b9cde
vkd3d-shader/hlsl: Lower SLT instructions for pixel shaders.
...
Properly passing the inverse-trig.shader_test tests whose qualifiers
have been removed requires making spirv.c capable of handling ABS.
The same happens for the ps_3_0 equality test in
float-comparison.shader_test.
2024-03-14 22:49:29 +01:00
Francisco Casas
e9a4758648
vkd3d-shader/hlsl: Implement SM1 comparison operators.
2024-03-14 22:49:29 +01:00
Francisco Casas
7b883eef53
vkd3d-shader/d3dbc: Check profiles before writing SLT and CMP.
2024-03-14 22:48:56 +01:00
Giovanni Mascellani
d75dc76011
vkd3d-shader/ir: Dump the reconstructed structured program.
2024-03-14 22:48:53 +01:00
Giovanni Mascellani
2b3e21caeb
vkd3d-shader/ir: Add jumps to the structured programs.
2024-03-14 22:48:52 +01:00
Giovanni Mascellani
c25e4c47c3
vkd3d-shader/ir: Reconstruct a structured program.
...
For simplicity jumps are not currently processed.
2024-03-14 22:48:50 +01:00
Conor McCarthy
f08976be33
vkd3d-shader/dxil: Implement DX instruction Barrier.
2024-03-14 22:48:46 +01:00
Conor McCarthy
b22632ff1a
vkd3d-shader/spirv: Emit a trace message if TGSM alignment is ignored.
...
This would cause a lot of warning spam if it was a warning.
2024-03-14 22:48:45 +01:00
Conor McCarthy
5e63164d01
vkd3d-shader/dxil: Implement structured groupshared address space global variables.
2024-03-14 22:48:44 +01:00
Conor McCarthy
0965a3608a
vkd3d-shader/dxil: Implement raw groupshared address space global variables.
2024-03-14 22:48:43 +01:00
Conor McCarthy
6dd54eeb09
vkd3d-shader/spirv: Support zero-initialisation for workgroup memory.
2024-03-14 22:48:41 +01:00
Henri Verbeet
374c5fcbdd
vkd3d-shader/glsl: Store a pointer to the vsir program in struct vkd3d_glsl_generator.
2024-03-13 22:00:48 +01:00
Henri Verbeet
5f1f7ababb
vkd3d-shader/ir: Pass a struct vsir_program to remap_output_signature().
2024-03-13 22:00:42 +01:00
Henri Verbeet
0edf6d25f3
vkd3d-shader/ir: Pass a struct vsir_program to simple_structurizer_run().
2024-03-13 22:00:41 +01:00
Henri Verbeet
c3f3cb5ef9
vkd3d-shader/ir: Pass a struct vsir_program to materialize_ssas_to_temps().
2024-03-13 22:00:40 +01:00
Henri Verbeet
76791913d0
vkd3d-shader/ir: Pass a struct vsir_program to materialize_ssas_to_temps_process_reg().
2024-03-13 22:00:39 +01:00
Henri Verbeet
343a365c97
vkd3d-shader/ir: Pass a struct vsir_program to instruction_array_lower_texkills().
2024-03-13 22:00:37 +01:00
Conor McCarthy
0dc174ebd7
vkd3d-shader/spirv: Emit an error if a FIRSTBIT instruction has a 64-bit source.
2024-03-13 21:50:37 +01:00
Conor McCarthy
a64eb75c1d
vkd3d-shader/spirv: Emit an error if COUNTBITS has a 64-bit source.
2024-03-13 21:50:36 +01:00
Henri Verbeet
9b0d304f8f
vkd3d-shader/glsl: Introduce glsl_compile().
2024-03-12 22:15:41 +01:00
Henri Verbeet
bdc096d437
vkd3d-shader/d3d-asm: Get rid of the (now) redundant "shader_desc" parameter to vkd3d_dxbc_binary_to_text().
...
And rename the function to d3d_asm_compile() while we're touching it.
2024-03-12 22:15:34 +01:00
Nikolay Sivov
948cd2154a
vkd3d-shader/fx: Handle 'single' modifier for buffers.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-12 22:14:50 +01:00
Nikolay Sivov
e0ef45c0a3
vkd3d-shader: Parse a 'single' modifier.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-12 22:14:50 +01:00
Nikolay Sivov
cf7c05f431
vkd3d-shader: Remove a token for 'precise' modifier.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-12 22:14:50 +01:00
Giovanni Mascellani
f2b2040ff6
vkd3d-shader/ir: Sort loop intervals.
2024-03-12 22:14:47 +01:00
Giovanni Mascellani
070c4af8b3
vkd3d-shader/ir: Generate synthetic intervals for forward edges.
2024-03-12 22:14:46 +01:00
Giovanni Mascellani
1d60612340
vkd3d-shader/ir: Compute loop as intervals of the block order.
2024-03-12 22:14:45 +01:00
Nikolay Sivov
30cc6ceb44
vkd3d-shader/fx: Add support for writing shared object descriptions for fx_4_x.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-12 22:14:41 +01:00
Nikolay Sivov
13227f3852
vkd3d-shader: Add an option to enable child effects compilation.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-12 22:14:41 +01:00
Nikolay Sivov
7f1fdd447c
vkd3d-shader/fx: Add initial support for writing uninitialized vertex/pixel shader objects.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-12 22:14:40 +01:00
Henri Verbeet
038764985a
vkd3d-shader/glsl: Use location information from the current instruction.
2024-03-11 22:10:21 +01:00
Conor McCarthy
4f0e5b9069
vkd3d-shader/dxil: Support 16-bit types.
2024-03-11 22:10:06 +01:00
Conor McCarthy
066ea75945
vkd3d-shader/spirv: Introduce HALF and UINT16 types for minimum precision.
...
Minimum precision types must always be implemented as 32-bit to match how
reduced precision works in SPIR-V.
2024-03-11 22:10:05 +01:00
Conor McCarthy
58123c2e10
vkd3d-shader/spirv: Introduce a data_type_is_floating_point() helper function.
2024-03-11 22:10:03 +01:00
Nikolay Sivov
25d353db91
vkd3d-shader/d3dbc: Do not write semantic declarations for unused variables.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55829
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56402
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-11 22:09:55 +01:00
Zebediah Figura
ad495970e0
vkd3d-shader/spirv: Implement SLT and SGE.
2024-03-11 22:09:48 +01:00
Zebediah Figura
27196d8b0f
vkd3d-shader/spirv: Implement CMP.
2024-03-11 22:09:44 +01:00
Francisco Casas
cfac67ccc2
vkd3d-shader/hlsl: Cast slt before multiplying on ternary operator.
...
Otherwise we may get a failing
"hlsl_types_are_equal(arg1->data_type, arg2->data_type)"
assertion on hlsl_new_binary_expr() when creating the MUL.
This happens in the test introducing in the following patch:
int a, b, c;
void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
{
out_pos = pos;
res = a ? b/1000.0 : c/1000.0;
}
2024-03-11 22:09:42 +01:00
Giovanni Mascellani
1690b0b554
vkd3d-shader: Remove the bytecode fields from vkd3d_shader_desc.
2024-03-11 22:09:32 +01:00
Giovanni Mascellani
204c8afb9c
vkd3d-shader/dxbc: Remove flag is_dxil.
...
The full shader profile is already available in vsir_program.
2024-03-11 22:09:31 +01:00
Giovanni Mascellani
470d83a9da
vkd3d-shader: Move shader signatures to vsir_program.
2024-03-11 22:09:31 +01:00
Giovanni Mascellani
56dc0c9842
vkd3d-shader/dxbc: Decouple vkd3d_shader_desc from DXBC parsing.
2024-03-11 22:09:30 +01:00
Giovanni Mascellani
5204b92fa0
vkd3d-shader/tpf: Remove a useless parameter to shader_sm4_init().
2024-03-11 22:09:28 +01:00
Conor McCarthy
7b4b0143bd
vkd3d-shader/dxil: Implement DX intrinsic TextureGatherCmp.
2024-03-11 22:09:20 +01:00
Conor McCarthy
5a6fd010ac
vkd3d-shader/dxil: Implement DX intrinsic TextureGather.
2024-03-11 22:09:18 +01:00
Giovanni Mascellani
75bc68962d
vkd3d-shader/dxbc: Add flag to ignore the DXBC checksum.
2024-03-11 22:08:55 +01:00
Giovanni Mascellani
23259263cf
vkd3d-shader/d3d-asm: Only emit signatures for SM4-6.
2024-03-08 23:36:44 +01:00
Henri Verbeet
1fc55d80cd
vkd3d-shader: Enable GLSL target support when VKD3D_SHADER_UNSUPPORTED_GLSL is defined.
2024-03-08 23:36:40 +01:00
Evan Tang
4553b2a0dc
vkd3d-shader/spirv: Implement support for rasteriser-ordered views.
...
Using SPV_EXT_fragment_shader_interlock.
2024-03-08 23:36:35 +01:00
Giovanni Mascellani
21f76257b0
vkd3d-shader/d3d-asm: Print labels in red.
...
They are substantially different from any other register type, so
it makes sense to have them stand out. Also, they help segmenting
visually the code into blocks, because labels are usually found
either at the beginning or at the end of a block.
2024-03-08 23:36:25 +01:00
Conor McCarthy
e65055b435
vkd3d-shader/spirv: Handle the ORD and UNO instructions.
2024-03-08 23:36:14 +01:00
Conor McCarthy
f212aad0ff
vkd3d-shader/dxil: Support FCMP_ORD and FCMP_UNO for CMP2.
2024-03-08 23:36:13 +01:00
Giovanni Mascellani
172e7edf2d
vkd3d-shader: Refactor common code for vkd3d_shader_compile().
2024-03-08 23:35:54 +01:00
Giovanni Mascellani
0e5d6a97cc
vkd3d-shader: Refactor common code for vkd3d_shader_scan().
2024-03-08 23:35:54 +01:00
Giovanni Mascellani
bbd37a76fc
vkd3d-shader: Treat the HLSL case specially in vkd3d_shader_compile().
2024-03-08 23:35:54 +01:00
Giovanni Mascellani
3a1c32acd4
vkd3d-shader: Treat the HLSL case specially in vkd3d_shader_scan().
...
The other cases are similar and common code can be refactored.
Ideally the HLSL parser will eventually fit the same model, but that
will require more extensive work.
2024-03-08 23:35:53 +01:00
Giovanni Mascellani
b940d79aa8
vkd3d-shader/ir: Keep loops contiguous in the topological sort.
2024-03-08 23:35:48 +01:00
Giovanni Mascellani
cf9a023566
vkd3d-shader/ir: Dump the topological order of the control flow graph.
2024-03-08 23:35:47 +01:00
Giovanni Mascellani
ed40646c8a
vkd3d-shader/ir: Topologically sort the control flow graph.
2024-03-08 23:35:46 +01:00
Giovanni Mascellani
880d781b57
vkd3d-shader/ir: Allow adding to a block list without checking for duplicates.
2024-03-08 23:35:45 +01:00
Nikolay Sivov
75c019074a
vkd3d-shader/hlsl: Allow modifiers on buffer declarations.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-08 23:35:40 +01:00
Nikolay Sivov
b13d60d805
vkd3d-shader/hlsl: Add determinant() function.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-08 23:35:23 +01:00
Giovanni Mascellani
8723b5d266
vkd3d-shader/ir: Sort each loop by block label.
2024-03-07 23:08:36 +01:00
Giovanni Mascellani
3d4092d9dc
vkd3d-shader/ir: Dump the loops in the control flow graph.
2024-03-07 23:08:35 +01:00
Giovanni Mascellani
8241ca2b67
vkd3d-shader/ir: Keep track of loops by header block.
2024-03-07 23:08:34 +01:00
Giovanni Mascellani
088a6c49a2
vkd3d-shader/ir: Keep a reference to the message context inside struct vsir_cfg.
2024-03-07 23:08:33 +01:00
Giovanni Mascellani
9ac842b36b
vkd3d-shader/ir: Compute the loops in the control flow graph.
2024-03-07 23:08:32 +01:00
Giovanni Mascellani
de15f55477
vkd3d-shader/ir: Introduce a helper to express block domination.
2024-03-07 23:08:31 +01:00
Giovanni Mascellani
c3657c4799
vkd3d-shader/ir: Add a debug buffer to struct vsir_cfg.
2024-03-07 23:08:30 +01:00
Giovanni Mascellani
c5893288d9
vkd3d-shader/ir: Properly handle function-local indexable temps when flattening control flow.
...
They have to be considered code rather than declarations, as required
for instance by the SPIR-V backend.
2024-03-07 23:08:28 +01:00
Giovanni Mascellani
9aa86901e3
vkd3d-shader/d3d-asm: Support emitting the shader signature.
2024-03-07 23:08:24 +01:00
Giovanni Mascellani
01a687a7fc
vkd3d-shader/d3d-asm: Refactor dumping a write mask to a dedicated function.
2024-03-07 23:08:23 +01:00
Giovanni Mascellani
9d99389663
vkd3d-shader/d3d-asm: Describe the ASM dialect with a bunch of flags instead of a plain enum.
2024-03-07 23:08:22 +01:00
Giovanni Mascellani
94d641783b
vkd3d-shader/d3d-asm: Do not make a copy of the buffer before returning it.
2024-03-07 23:08:20 +01:00
Nikolay Sivov
a0d52dc385
vkd3d-shader/hlsl: Improve VertexShader/PixelShader types handling.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-06 23:04:25 +01:00
Nikolay Sivov
437ef0896f
vkd3d-shader/fx: Make sure to set error message for unimplemented cases.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-06 23:04:22 +01:00
Nikolay Sivov
8c5db57ea7
vkd3d-shader/fx: Reject fx_2_0 output without techniques.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-06 23:04:19 +01:00
Nikolay Sivov
dd5e42d347
vkd3d-shader/hlsl: Allow technique10 {} blocks for fx_2_0.
...
Such techniques are ignored later, but do not cause compilation errors.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-06 23:04:18 +01:00
Nikolay Sivov
5edbccd33b
vkd3d-shader/hlsl: Add keyword tokens for fx_5_0 shader object types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-06 23:04:16 +01:00
Conor McCarthy
5082893e5d
vkd3d-shader/spirv: Always use a 64-bit write mask for IMMCONST64 src params.
...
There is no way to tell in spirv_compiler_emit_load_reg() if the write
mask is 64-bit. All loads are 32-bit except for IMMCONST64 and SSA, and
the latter ignores the mask, so the only issue lies with IMMCONST64.
2024-03-06 23:04:12 +01:00
Francisco Casas
58c456ff2b
vkd3d-shader/d3dbc: Implement bool to float cast as MOV.
...
In SM1, bools are always represented as either 0.0f or 1.0f at runtime.
2024-03-06 23:04:07 +01:00
Francisco Casas
747511131d
vkd3d-shader/hlsl: Lower non-float operators for SM1.
2024-03-06 23:04:05 +01:00
Francisco Casas
a3319339e4
vkd3d-shader/hlsl: Lower casts to int using REINTERPRET instead.
...
I realized that it is better to lower casts to int to FLOOR+REINTERPET
instead of appending a FLOOR to all casts to int and assuming that this
is the case for all of them in d3dbc.c.
This in case we introduce new passes in the future that add casts that
we forget to lower, after the lower_casts_to_bool pass.
2024-03-06 23:04:04 +01:00
Nikolay Sivov
937d76507d
vkd3d-shader/hlsl: Implement ternary operator for older vertex profiles.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56333
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-03-06 23:03:59 +01:00
Henri Verbeet
f866fb95ad
Release 1.11.
2024-03-05 20:39:45 +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
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
Conor McCarthy
ba4bd651e5
vkd3d-shader/dxil: Implement DX intrinsics SampleCmp and SampleCmpLevelZero.
2024-02-22 22:45:36 +01:00