Luke Usher
f101389704
Merge pull request #1812 from PatrickvL/trampoline_optimization
...
Trampoline optimization
2019-12-31 18:52:26 +00:00
PatrickvL
cb4d27728c
This moves construction of lookup strings outside call-locations towards a central LookupTrampolines() function, reducing the overhead of calling a trampoline down to a minimum.
2019-12-31 12:04:06 +01:00
patrickvl
36569f0d2e
This prevents "error X5765: Dest register for LRP cannot be the same as first or third source register" in WWE RAW2.
...
A little background information :
When compiling pixel shaders, to facilitate later optimizations, FixOverusedRegisters() inserts MOV opcodes reading from constant, vertex color or texture registers, and writing to a free R register slot.
In this case, this transformed :
````
lrp r0, c0,r2,c1
````
into
````
mov r0, c0
lrp r0, r0,r2,c1
````
Not only introduces this a completely useless additional MOV (to R0, which is overwritten by the next LRP opcode), but it also results in LRP reading from R0, which is the same register it's writing to, which seems to be forbidden.
This fix prevents that from happening, by not-inserting a MOV when this situation would arise.
It's possible there exist more such scenario's, but let's tackle them when they are reported.
As for the other change in this commit : Instead of repeating a nearly identical while-loop three times, this loop is now wrapped in a for-loop, that handles all three versions (for PARAM_C, PARAM_V and PARAM_T type registers).
2019-12-26 14:56:28 +01:00
RadWolfie
8fd6253ad1
Merge pull request #1809 from PatrickvL/d3d-visibility-test_pvl
...
Implement BeginVisibilityTest, EndVisibilityTest and GetVisibilityTestResult
2019-12-25 12:13:24 -06:00
patrickvl
a21cb8f0fd
Clearer LOG_TEST_CASE message
2019-12-25 17:11:37 +01:00
PatrickvL
e79a4e4131
Merge pull request #1808 from RadWolfie/sync-xbsymboldatabase
...
Update to Latest XbSymbolDatabase API Change
2019-12-25 16:37:11 +01:00
RadWolfie
5a5c3b67a5
update to latest XbSymbolDatabase API change
2019-12-25 09:08:41 -06:00
PatrickvL
0d43bc19aa
Continue with Voxel9's work, and extend it with support for multiple indexed occlusion queries
2019-12-25 16:02:23 +01:00
Voxel9
fd2a0506af
Add an explanation for the GetData while loop in GetVisibilityTestResult
2019-12-23 20:10:45 +00:00
Voxel9
1727b7e22b
Add D3D query nullptr check for GetVisibilityTestResult
2019-12-23 18:52:48 +00:00
Voxel9
566136c195
Add checks for EndVisibilityTest
2019-12-23 18:44:19 +00:00
Voxel9
d45101a7f5
Check whether CreateQuery succeeds before accessing output
2019-12-22 23:37:02 +00:00
Voxel9
81b1e87594
Move, assign and prefix global query variable appropriately
2019-12-22 22:30:54 +00:00
Voxel9
f1db14b053
Implement BeginVisibilityTest, EndVisibilityTest and GetVisibilityTestResult
2019-12-22 20:00:36 +00:00
Luke Usher
806227e824
Merge pull request #1805 from PatrickvL/HLSL_fixes
...
HLSL fixes
2019-12-22 15:31:15 +00:00
patrickvl
f97a642bc9
Fixed XDK Fog sample over-saturation by literally saturating all COLOR-semantic outputs (oD0, oD1, oB0 and oB1)!
...
Also updated the ARL bias, applied the frexp intrinsic to our LOGP function and updated LIT according to 6e3a387c01/src/Shader/ShaderCore.cpp (L1168)
2019-12-22 16:15:35 +01:00
Luke Usher
76d45fdd63
Merge pull request #1801 from PatrickvL/vsh_hlsl_pvl
...
Port to HLSL (High Level Shader Language) vertex shaders
2019-12-19 20:38:16 +00:00
Luke Usher
f23c9adae1
Fix vertex state shader compilation in Spy vs Spy^
2019-12-19 19:34:46 +00:00
PatrickvL
56af31aede
Remove unneeded HostDeclarationSize
2019-12-19 18:16:36 +01:00
PatrickvL
270462d22c
Replaced Parameter.Active with ParamCount
2019-12-19 17:12:52 +01:00
patrickvl
f9410dace0
Added Register out-of-range LOG_TEST_CASE's
...
Named consistently CXBX specific vertex shader constants
2019-12-19 00:50:43 +01:00
patrickvl
1f83a28a01
Trigger test case popup (instead of just log) when vertex shader can't be compiled (which gives us valuable feedback for now).
...
Removed obsolete hostTemporaryRegisterCount variable
2019-12-18 22:56:28 +01:00
patrickvl
f3d8120c6f
Revert unrelated changes
...
Made RegVIsPresentInDeclaration a class XboxVertexDeclarationConverter protected data member.
2019-12-18 22:45:46 +01:00
patrickvl
d28b4836fd
Halve the selection of input attrbibute or constant, using lerp.
...
For this, made sure that the crossover value (as set in SetOverrideFlags) is either 0 or 1.
Also replaced the v0..v15 defines by actual variables. Instead, manually unrolled the initialization code via a concatenating define.
2019-12-18 21:45:44 +01:00
patrickvl
499297993c
Remove IsMAC and replace it in HLSL generation with it's underlying condition
2019-12-18 20:12:25 +01:00
PatrickvL
c3ad911049
Removed temporary CMake entries
2019-12-18 20:12:25 +01:00
PatrickvL
9634329033
Avoid regex_replace by cutting up HLSL template into two raw strings.
2019-12-18 20:12:25 +01:00
Anthony Miles
016f8361b5
Remove dummy shader fallback
2019-12-18 20:12:25 +01:00
Anthony Miles
13df253853
regex_replace first occurrence only
2019-12-18 20:12:25 +01:00
Anthony Miles
949aecd862
Set optimization level 0
2019-12-18 20:12:24 +01:00
PatrickvL
adc065b0bc
Revert "TMP mechassault hack"
...
This reverts commit d616e94c117d3e1f0e8ce35bfc97d9f845d3c5b7.
2019-12-18 20:12:24 +01:00
PatrickvL
325e663c9f
Further cleanup
2019-12-18 20:12:24 +01:00
PatrickvL
ac36e6a0d4
Avoid using uninitialized class members
2019-12-18 20:12:24 +01:00
PatrickvL
ebbb8e961f
Moved a few functions to a better suitable location, and marked a few class functions 'static'
2019-12-18 20:12:24 +01:00
PatrickvL
18a27a64de
Refactor vertex shader decoding types and functions into a class
2019-12-18 20:12:23 +01:00
patrickvl
eeced5f0a9
Removed one unnecessary intermediate vertex shader decoding layer
2019-12-18 20:12:23 +01:00
patrickvl
5fe0a16cc6
Renamed vertex shader hlsl file, and prepared it for future extensions to behave closer to specifications (nothing changed for now)
2019-12-18 20:12:23 +01:00
patrickvl
cc594ca8d7
Further simplifications in vertex shader decoding to intermediate instructions
2019-12-18 20:12:22 +01:00
Anthony Miles
9ee7bb451f
Fix logp z component
2019-12-18 20:12:22 +01:00
Anthony Miles
f9e5f51815
Fix dph src1.w double-add
2019-12-18 20:12:22 +01:00
Anthony Miles
1cebf018e2
Use int instead of uint for compatibility with optimizer level 0
2019-12-18 20:12:21 +01:00
Anthony Miles
f8b1e35482
fix pInstruction typo
2019-12-18 20:12:21 +01:00
Anthony Miles
ab1061634d
TMP mechassault hack
2019-12-18 20:12:21 +01:00
Anthony Miles
0aa0dce8fb
Hack to make sure pre-transformed and regular geometry go into the same coordinate space
2019-12-18 20:12:20 +01:00
PatrickvL
ec2032bf0d
Made sure that intermediate vertex shader instructions are never empty
...
Move A0_X indexing boolean from per-parameter to per-instruction, where it belongs.
2019-12-18 20:12:20 +01:00
PatrickvL
ff1412b3d9
Use an HLSL accessor function for reading constant registers, allowing Xbox-native negative indices and out-of-bounds handling. This makes the generated HLSL look closed to the original Xbox vertex shader assembly.
2019-12-18 20:12:20 +01:00
PatrickvL
d74e5947ee
Refactor vertex shader microcode conversion to intermediate isntructions, fixing pairing bugs like ignore MAC R1 writes
2019-12-18 20:12:20 +01:00
PatrickvL
50a51657b0
Force A0's X mask during decoding (in VshAddInstructionMAC_ARL) instead of HLSL conversion (in OutputHlsl)
...
Also applied Unix EOL style (again)
2019-12-18 20:12:20 +01:00
Anthony Miles
619b276d81
Generate more accurate viewport values, so we can reverse transforms in the vertex shader more generally
2019-12-18 20:12:19 +01:00
Anthony Miles
5d2ef854fb
Remove popups about register usage, now that HLSL is used
2019-12-18 20:12:19 +01:00