Philip Rebohle
11f08c7dea
[dxbc] Declare vertex positions as invariant
...
Otherwise, games relying on different vertex shaders to produce
the same numerical results may suffer from Z-fighting issues.
Fixes #1364 .
2020-01-22 23:59:51 +01:00
Philip Rebohle
6690a31d8d
[dxbc] Don't enable SPV_KHR_shader_draw_parameters
...
Core in SPIR-V 1.3.
2020-01-17 17:46:59 +01:00
Philip Rebohle
31948cae8c
[spirv] Allow specifying the SPIR-V version explicitly
...
We're going to use some SPIR-V 1.4 features for D3D11 if supported,
but 1.4 is not supported by all implementations.
2019-12-18 17:36:46 +01:00
Philip Rebohle
27ea176295
[d3d11] Remove d3d11.strictDivision option
2019-11-30 20:39:32 +01:00
Philip Rebohle
3b030d9569
[dxbc] Implement workaround to replace NaN render target outputs by zero
2019-11-30 20:39:32 +01:00
Philip Rebohle
49e7df96ec
[dxbc] Emit a spec constant for uniform buffers
...
This partially reverts commit fd547b666e
.
For some reason, not doing so breaks Overwatch (because of course it does).
2019-11-28 00:55:38 +01:00
Philip Rebohle
e95bc3256f
[d3d11] Move handling of constantBufferRangeCheck option to D3D11Options
2019-10-30 10:57:36 +01:00
Philip Rebohle
c4e5323e0e
[dxbc] Remove old constant buffer range check
2019-10-28 17:52:50 +01:00
Philip Rebohle
fd547b666e
[dxbc] Don't emit a spec constant for uniform buffers
2019-10-28 15:44:02 +01:00
Philip Rebohle
3d213efe53
[dxbc] Use SSBOs for dynamically indexed constant buffers if needed
...
SSBOs are tightly bound-checked on all Nvidia GPUs, so this allows for
a more accurate workaround for games relying on OOB access behaviour.
2019-10-28 15:42:46 +01:00
Philip Rebohle
68760f5b20
[dxbc] Parse dynamically indexed flag for constant buffers
2019-10-28 14:15:44 +01:00
Philip Rebohle
6888a98c89
[dxbc] Always set geometry shader invocation count
...
Fixes validation errors when the DXBC shader does not specify
the invocation count itself.
2019-10-26 23:19:59 +02:00
Philip Rebohle
144f4badef
[dxbc] Always allocate at least one input array element
...
Turns out that shaders with no inputs can still have an input signature,
in which case we were generating a zero-length array which is illegal.
2019-10-26 23:13:59 +02:00
Philip Rebohle
2d6a3396dd
[dxbc] Declare length of shader input array late
...
Otherwise, we generate out-of-bounds array reads and writes
in broken ENB shaders.
2019-10-23 16:36:52 +02:00
Philip Rebohle
59d4556641
[dxbc] Extend scalar constants to vectors if required
...
Needed for ENB. Fixes #865 .
2019-10-23 15:26:22 +02:00
Philip Rebohle
ec8ca8a403
[dxbc] Assume vec4 type for i/o vars not declared in signature
...
Works around an ENB bug.
2019-10-23 15:26:22 +02:00
Philip Rebohle
3e12a116bb
[dxbc] Declare temp registers on demand
...
And ignore dcl_temps. Needed to successfully compile some broken
ENB shaders (this does work on Windows too). See #865 .
2019-10-23 13:55:04 +02:00
Philip Rebohle
8211225ad4
[dxbc] Swap OpSelect arguments for Ne/Dne, don't use OpLogicalNot
...
Saves one instruction.
2019-10-18 03:22:20 +02:00
Philip Rebohle
803ec3542d
[dxbc] Fix sample positions
...
From the D3D11.3 functional specification:
"The sample position is relative to the pixel's center"
Fixes wine test failures.
2019-10-11 18:41:10 +02:00
Philip Rebohle
59d4e8a36a
[dxbc] Fix NaN handling in not-equal comparison
...
Ne and Dne are unordered in DXBC. Avoid FUnordNotEqual to
avoid potential issues with drivers and debugging tools.
2019-09-30 00:19:47 +02:00
Philip Rebohle
b6cf518962
Revert "[dxbc] Always decorate SV_POSITION as invariant"
...
This reverts commit 5ee790a4a3
.
Breaks Shadow of the Tomb Raider on Nvidia for unknown reasons.
2019-09-24 23:01:36 +02:00
Philip Rebohle
5ee790a4a3
[dxbc] Always decorate SV_POSITION as invariant
...
Apparently fixes Z-Fighting in Saints Row IV on Nvidia.
2019-09-24 22:19:43 +02:00
Philip Rebohle
f38cfd592e
[dbxc] Actually fix callc implementation
...
Yeah maybe we should close our blocks properly. There seems to be
no way to generate a callc instruction with fxc so this is untested.
2019-09-22 22:36:42 +02:00
Philip Rebohle
94ce76da6b
[dxbc] Implement label, call and callc instructions
...
Fixes #1200 .
2019-09-22 22:28:58 +02:00
Philip Rebohle
17a6c4168e
[dxbc] Implement stencil ref export from fragment shaders
...
This is an optional feature in D3D11.3, but easy enough to support.
2019-09-16 12:42:15 +02:00
Philip Rebohle
26afaba410
[dxbc] Implement MSAD4 instruction
...
Apparently we're required to support this for Direct3D 11.2+.
There are currently no known games that require this instruction.
2019-09-16 12:42:14 +02:00
Philip Rebohle
6ab074c95b
[dxbc] Only use atomic append/consume optimization in compute shaders
...
- For fragment shaders, this isn't safe since ballots include helper invocations
- For vertex shaders, if drivers don't support subgroup operations in those
stages, we don't want it to affect the performance of compute shadres.
2019-07-26 14:07:39 +02:00
Philip Rebohle
9c5102e257
[dxvk] Don't duplicate geometry shader system value outputs
...
Fixes #1121 . The basic idea here is that all built-ins that can be
written by the GS will be consumed as built-ins by the FS anyway,
so we do not need to keep the o# variable around.
2019-07-24 18:18:20 +02:00
Philip Rebohle
8644d75722
[dxbc] Use OpDemoteToHelperInvocationEXT for discards if supported
2019-07-11 19:33:17 +02:00
Liam Middlebrook
2e83aae472
[dxbc] Print shader signatures at debug loglevel
2019-07-11 12:40:44 +02:00
Liam Middlebrook
ff4fa29304
[dxbc] Add string output function for DxbcRegMask
2019-07-11 12:40:44 +02:00
Liam Middlebrook
2164a44887
[dxbc] Add ostream operator for DxbcScalarType
2019-07-11 12:40:44 +02:00
Philip Rebohle
06d4e06d8a
[dxbc] Enable early discard on RADV/ACO
...
Still can't enable on LLVM due to GPU hangs. The way we detect it
may have to change in the future, but for now, this should do.
2019-07-08 16:30:56 +02:00
Philip Rebohle
58dcf77c08
[dxbc] Disable atomic counter optimization on old RADV versions
...
Breaks TressFX in Tomb Raider 2013 for some reason, whereas this works
fine on 19.1 with both LLVM 8.0 and 9.0-git.
2019-06-15 12:58:31 +02:00
Philip Rebohle
d5ba36443e
[dxbc] Fix useRawSsbo option
...
Add some break to fix some breakage.
2019-06-11 20:23:47 +02:00
Philip Rebohle
d755b18ccb
[dxbc] Repurpose useRawSsbo option
...
Basically, abuse the minSsboAlignment property to convince the
compiler to always/never emit raw SSBOs for raw and structured
buffers, and use the actual device limit by default.
2019-06-11 20:20:40 +02:00
Philip Rebohle
0f7c23c022
[dxbc] Always use raw storage buffers if alignment requirements are met
2019-06-11 20:20:40 +02:00
Philip Rebohle
163e6aaa50
[dxbc] Store alignment for raw and structured buffers
2019-06-11 20:20:40 +02:00
Philip Rebohle
7d9a75c82c
[dxbc] Use subgroup operations for atomic append/consume operations
...
Reduces the number of atomic operations performed per subgroup to 1.
2019-05-15 19:32:27 +02:00
Philip Rebohle
d94d89c3ef
[dxbc] Add option to use subgroup ops for atomic counter operations
...
This can greatly reduce the number of atomic operations when using
append/consume buffers.
2019-05-15 18:49:02 +02:00
Philip Rebohle
04e6479690
[dxbc] Remove old spec constant code
2019-05-01 01:57:34 +02:00
Philip Rebohle
dc3cfc9fa0
[dxbc] Use new spec constant API for rasterizer sample count
2019-05-01 01:57:34 +02:00
Philip Rebohle
7111af423d
[dxbc] Add new emitNewSpecConstant method
...
Convenience method to declare new specialization constants.
2019-05-01 01:57:34 +02:00
Philip Rebohle
dc52212873
[dxbc] Disable Constant Buffer Range Check on AMD
...
The hardware already behaves as intended, no need to waste GPÜ cycles.
2019-04-30 16:07:24 +02:00
Philip Rebohle
3b1e753bb5
[dxvk] Re-implement early discard with quad granularity
...
May perform better on some hardware in situations where we cannot
discard a full subgroup. Closes #753 .
2019-04-30 14:46:03 +02:00
Danylo Piliaiev
261d31cac6
[dxbc] Fix xfb passthrough for system values
...
vReg should be always allocated for system values which is
necessary for emitXfbOutputSetup and is already done for
hull shader passthrough.
Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
2019-04-30 12:19:21 +02:00
Philip Rebohle
06c144f075
[dxbc] Store sample positions as vec2 array
...
We can append the zeroes in shader code instead. May
improve generated code on drivers that use scratch
memory or temporary uniform buffers for large arrays.
2019-04-29 14:04:42 +02:00
Philip Rebohle
b14ad7b30c
[dxbc] Remove some old TODOs
...
This is already implemented properly.
2019-04-29 11:48:09 +02:00
Philip Rebohle
04152055b7
[dxbc] Correctly report a sample count of 0 for unbound images
2019-04-29 11:48:09 +02:00
Philip Rebohle
a3e0157ab0
[dxbc] Correctly report a size of 0 for unbound images
2019-04-29 11:48:09 +02:00
Philip Rebohle
18cbaefdcb
[dxbc] Correctly report a size of 0 for unbound buffers
2019-04-29 11:48:09 +02:00
Philip Rebohle
ad5da34c57
[dxbc] Fix typo in sample positions
2019-04-29 11:48:09 +02:00
Philip Rebohle
b44cad4d32
[dxbc] Replace computeResourceSlotId by light-weight alternatives
...
Slightly reduces overhead of D3D11 binding methods.
2019-04-18 10:06:15 +02:00
Philip Rebohle
35a2a02714
[dxbc] Do not emit GS system values if rasterization is disabled
...
Fixes issue in Star Citizen, which declares a max output vertex count
of 128 in a geometry shader which emits eight components per vertex,
which becomes 12 components in DXVK due to the gl_Position builtin.
This should keep us below the magic limit of 1024 output components.
2019-04-15 09:00:46 +02:00
Philip Rebohle
5819a69302
[d3d11] Add option to enable constant buffer range checks
2019-04-05 20:56:32 +02:00
Philip Rebohle
9b99c55a2e
[dxbc] Implement optional constant buffer range check
2019-04-05 20:56:29 +02:00
Philip Rebohle
0326258829
[dxbc] Use SDiv instead of ShiftRightLogical for index calc on Nvidia
...
Reportedly fixes Resident Evil 2 and Devil May Cry 5 on Nvidia.
2019-03-09 19:59:56 +01:00
Philip Rebohle
6d814b24da
[dxbc] Fix invalid SPIR-V for FirstBitHi / FirstBitShi on vectors
...
Refs #930 .
2019-02-23 21:27:40 +01:00
Philip Rebohle
d12a8e09a8
[dxbc] Decorate integer fragment shader builtins as flat
...
Fixes yellow tint in Unreal Engine 4 games on RADV and AMDGPU-PRO.
2019-02-23 14:33:59 +01:00
Philip Rebohle
38c6eeed26
[dxbc] Only emit depth clamp in fragment shader if necessary
...
We don't need this if the depth clip extension is supported
by the driver.
2019-02-19 14:27:21 +01:00
Philip Rebohle
2d81decb91
[dxbc] Fix SPIR-V caps for SRV and UAV resources
2019-02-19 11:31:12 +01:00
Philip Rebohle
915091b76b
[dxbc] OpSDiv by 4 -> OpShiftRightLogical by 2
2019-02-07 19:32:07 +01:00
Philip Rebohle
8b80db7839
[dxbc] Fix storage class for UBO loads
...
UniformConstant is used for other things, UBOs are Uniform.
2019-02-05 21:28:50 +01:00
Philip Rebohle
c0b325b483
[dxbc] Add option to enable strict sm4-compliat division
...
SM4 is defined to return the first source operand if the divisor is zero.
Windows drivers don't do this by default, so we shouldn't do it either.
2019-02-05 21:08:13 +01:00
Philip Rebohle
a4378996d9
[dxbc] Reduce length of temporary shader input array to a minimum
...
Fixes severe performance regression with the AMD proprietary driver.
2019-02-04 13:30:08 +01:00
Philip Rebohle
e5a06d3f4a
[dxbc] Only load requested components from constant buffers
...
Results in better performance compared to loading the entire vector
on RADV. Suggested by Samuel Pitoiset.
2019-01-30 16:32:25 +01:00
Philip Rebohle
1cc24c223b
[dxbc] Reduce length of tessellation i/o arrays to minimum
...
This allows us to fix a violation of the Vulkan specification
where using the same location range for per-vertex and per-patch
i/o is illegal.
May also help certain drivers figure out what's actually needed.
2019-01-26 17:12:23 +01:00
Philip Rebohle
b0b7960548
[dxbc] Add method to count required registers for signatures
2019-01-26 17:11:49 +01:00
Philip Rebohle
0b5cffb0bb
[dxbc] Parse patch constant signature
2019-01-26 14:52:29 +01:00
Philip Rebohle
bee21e7539
[dxbc] Support parsing the ISG1 and OSG1 signature chunks
...
Required to get the Resident Evil 2 demo to work.
2019-01-12 15:17:51 +01:00
Philip Rebohle
4fe5929799
[dxbc] Add options to enable/disble early discard and raw ssbo use
2019-01-08 20:58:18 +01:00
Philip Rebohle
9890b87225
[dxbc] Fix incorrect error message
2019-01-08 00:46:24 +01:00
Philip Rebohle
e5beab2872
[dxbc] Rename struct_c0 -> c0_t etc.
2018-12-14 23:45:38 +01:00
Philip Rebohle
01b8e74457
[dxbc] Use raw SSBOs for raw and structured buffers if appropriate
2018-12-14 23:45:37 +01:00
Philip Rebohle
48548eb894
[dxbc] Add useRawSsbo option
...
ENabled when we can replace texel buffers for raw and structured
buffers with raw SSBOs.
2018-12-14 23:45:37 +01:00
Philip Rebohle
a0de90861c
[dxvk] Store access flags in resource slots
...
Makes distinguishing read-only resources from read-write
resources significantly easier.
2018-12-14 23:45:37 +01:00
Philip Rebohle
f276bcd0e7
[dxbc] Check for RADV/Nvidia drivers explicitly using the new function
...
This way, only RADV gets locked out of using early discard whereas
AMDVLK and -PRO are able to use it.
2018-12-12 16:27:01 +01:00
Philip Rebohle
7096937c11
[dxbc] Use ballot to determine early-discard condition in fragment shaders
2018-11-27 11:50:01 +01:00
Philip Rebohle
2424cf0289
[dxbc] Disable early discard on AMD cards
...
Causes GPU hangs.
2018-11-24 10:09:33 +01:00
Philip Rebohle
a75c596132
[d3d11] Add config option to enable TGSM initialization
2018-11-23 16:12:02 +01:00
Philip Rebohle
ea5f11d091
[dxbc] Implement function to clear thread-group shared memory
...
Can be enabled in case a game reads undefined data from TGSM.
2018-11-23 15:57:54 +01:00
Philip Rebohle
79a6dd111e
[dxbc] Store workgroup size for compute shaders
2018-11-23 14:39:33 +01:00
Philip Rebohle
3e686098cc
[dxbc] Disable subgroup early discard on Nvidia GPUs
...
People report performance regressions up to 5% with it enabled.
2018-11-23 12:28:48 +01:00
Philip Rebohle
6dd82dfe03
[dxbc] Clamp written depth value to (0.0, 1.0)
...
Fixes shadow issue in Overwatch (#738 ).
2018-11-23 12:00:23 +01:00
Philip Rebohle
0418c02ac3
[dxbc] Use clustered subgroup operations on supported hardware
2018-11-21 11:17:09 +01:00
Philip Rebohle
ab17c49c4e
[dxbc] Fix compiler warning about uninitialized values
2018-11-21 11:17:09 +01:00
Philip Rebohle
4f76b89941
[dxbc] Use subgroup operations for early discard
...
Can improve performance in some complex fragment shaders.
2018-11-21 11:17:09 +01:00
Philip Rebohle
a574829bb6
[dxbc] Remove DeferKill flag
...
This behaviour is correct, and needs to be enabled by default.
2018-11-21 11:17:09 +01:00
Philip Rebohle
f69c5e4c4e
[dxbc] Emit Index decoration for pixel shader outputs
...
Simplifies shader patching when dual-source blending is used.
2018-11-19 16:57:11 +01:00
Philip Rebohle
a971370524
[dxbc] Implement Dmovc instruction
...
Fixes some mandelbrot demo mentioned in #216 .
2018-11-10 23:27:56 +01:00
Philip Rebohle
05856e836b
[d3d11] Don't enable StorageImageReadWithoutFormat feature for FL11_0
...
We don't really need this, although it might be useful in the future.
2018-11-10 11:34:23 +01:00
Philip Rebohle
bd03225c14
[dxbc] Refactor DxbcOptions
...
A bit mask isn't good enough going forward, and we also don't
need application-specific options for now.
2018-11-09 08:41:02 +01:00
Philip Rebohle
780780f8d1
[dxbc] Don't enable sample shading for interpolation functions
...
Actually doesn't resolve #456 , and doesn't make any sense either because
interpolation at a given sample index is apparently supposed to work even
without using sample shading.
2018-11-05 18:30:32 +01:00
Philip Rebohle
2ee7ef7689
[dxbc] Enable sample shading when using interpolation functions
...
Fixes artifacts on RADV when enabling MSAA in World of Warcraft (#456 ).
2018-11-05 17:07:11 +01:00
Philip Rebohle
851d9fb726
[general] Remove unnecessary include directories from build files
...
These are no longer needed because dxvk includes consistently
use relative file paths now, instead of global includes.
2018-11-02 14:54:39 +01:00
Philip Rebohle
a53e053391
[dxbc] Fix incorrect data type for explicit interpolation instructions
2018-10-25 22:25:13 +02:00
Philip Rebohle
a27e440272
[dxvk] Detect Xfb and set rasterized stream index
2018-10-10 13:05:37 +02:00
Philip Rebohle
d2c62a8645
[dxbc] Implement passthrough geometry shader
...
This is needed when vertex or domain shader code is
passed to CreateGeometryShaderWithStreamOutput.
- Fix compilation with new DxbcProgramInfo.
2018-10-10 10:28:15 +02:00
Philip Rebohle
017699df15
[dxbc] Implement Xfb output declarations and setup
2018-10-10 10:28:15 +02:00
Philip Rebohle
6a5fe2247a
[dxbc] Add support for multiple streams in geometry shaders
2018-10-10 10:28:15 +02:00