Nico de Poel
89269073f7
Removed random write requirement from all render textures that aren't used as UAV (i.e. are used as fragment render targets). Sort of makes GLES3 work, and might provide an appreciable overall efficiency boost as well.
10 months ago
Nico de Poel
3293533bf9
Minor: print the ASR variant to the log when creating the context, makes for easier readback of the log
10 months ago
Nico de Poel
3912c66b0d
Bind new locks to the accumulate shader as a regular SRV (read-only), and clear the locks buffer ahead of time instead of at the end of the accumulate shader. This simplifies the shader binding setup, as well as being "more correct" because we're using a temporary RT for the locks buffer, meaning it makes no sense to clear it for the next frame.
10 months ago
Nico de Poel
16cf41493a
Swapped the order of the render targets around for the depth clip pass. Fixes prepared input color being black in NGGC because... I don't know, probably an alignment issue of some sort? PS5 is being really stupid here.
10 months ago
Nico de Poel
51e5a86112
Reverted dilated reactive masks format back to R8G8_UNorm, as that works correctly now
10 months ago
Nico de Poel
c52a40f706
Use implicit register binding when using UAVs in fragment shaders. Fixes remaining issues with reconstruct and accumulate passes on PS5 CGGC.
Also disable writing to locks UAV at the end of Accumulate pass, as it doesn't actually do anything and it might cause issues with reading & writing to the same texture.
10 months ago
Nico de Poel
cc74a9cd2f
Use implicit register binding for fragment shader random write targets. Fixes UAVs not binding properly on PS5.
10 months ago
Nico de Poel
90490e8819
Temp disabled Native16Bit again, as it does cause compilation issues when building for standalone. Need to make a split between Modern and Legacy here.
10 months ago
Nico de Poel
2f8a0ca595
Added output target pragmas for random write targets. Not sure if these are necessary but it's something to keep an eye on.
11 months ago
Nico de Poel
9aee5758b6
Made some progress towards making ASR FP16 work on PS5:
- Auto-gen reactive mask & Reconstruct previous depth & Depth Clip passes now verified correct and working
- Changed dilated reactive masks texture format to R16G16_SFloat, which Agc seems to like better as an output format than R8G8_UNorm
- Accumulate pass is the only real (big) problem left
11 months ago
Nico de Poel
bd18c12408
Updated PSSL target output format pragmas with what *should* be the correct values, though the PS5 still disagrees with this
11 months ago
Nico de Poel
5f4d4b37ad
Fixed a big derp in the PSSL type definitions, copy-pasted code still contained FFX_HALF instead of FFXM_HALF, which caused 16-bit types to be compiled as 32-bit, causing a bunch of duplicate function definitions.
11 months ago
Nico de Poel
884ca84071
Moved unorm and globallycoherent definitions to the common cginc, rather than stuffing them somewhere in between all the types
11 months ago
Nico de Poel
e4ad05a414
Made PSSL pragmas only get included for PSSL to prevent compiler warnings, and require native 16-bit compilation for PSSL.
11 months ago
Nico de Poel
8d85253def
Enabled Native16Bit requirement for Vulkan, which sets a precedent for other graphics APIs to use this as well
11 months ago
Nico de Poel
090b9135e8
Reworked auto-exposure to use a double buffered render texture, which allows the smooth exposure transition logic to load a value that's guaranteed to be from the previous frame. Fixes artifacting and flickering issues caused by loading & storing to the same texture.
11 months ago
Nico de Poel
d088d440f5
Allow live switching between FP16 and FP32
11 months ago
Nico de Poel
c0cf3de364
Temporarily disable FP16 altogether, which makes PSSL shader compilation a lot happier. Need to figure out how to make the FP16 utility function definitions work without the shader compiler complaining about duplicate declarations.
11 months ago
Nico de Poel
c4b59c7dc3
Bunch of fixes to make ASR Quality somewhat work on PS5, without reactive mask still:
- Define macros for various VS/FS binding intrinsics
- Use pragmas to set output formats for render targets that aren't normal RGBA
- Added alpha channel to color output targets, so that they're 4-channel instead of 3
- Pass FSR2 constant buffer to reactive mask shader (may not matter)
11 months ago
Nico de Poel
6824f1f652
Enable FP16 (FFXM_HALF keyword) usage by default
11 months ago
Nico de Poel
4c93edccde
Added type definitions for PSSL (PS4/5) and removed hard-coded FFMX_HALF defines. Let the multi-compile shaders and C# code control that.
11 months ago
Nico de Poel
9ef2bfdef0
Reverted rework of accumulation parameter initialization function to what it originally was, but with a struct clear to zero.
11 months ago
Nico de Poel
389faf3b65
Minor fixes (clearing auto-exposure to 1e8f achieves faster convergence but might cause issues with OpenGL on Nvidia, keep an eye on this!)
11 months ago
Nico de Poel
4a0fc42c2a
Fixed RCAS pass still using compute shader bindings
11 months ago
Nico de Poel
c92e35ff73
Added balanced and performance preset keywords to the depth clip and accumulate passes, which seem to be the only ones that use it. Makes the Balanced variant work. Performance variant still problematic.
11 months ago
Nico de Poel
943d119706
Fixed a number of issues to make Quality variant work:
- Removed "fix" to initialize params to 0, as that happens midway through the Accumulation process, resetting a lot of variables. Instead rewrote InitParams to take an inout parameter and clear the params first thing in the Accumulate function.
- Bind first multi-render target as depth target, fixes RenderDoc errors about color/depth buffer size mismatch.
- Ensure keywords that need a value are redefined using the correct value.
- Removed obsolete auto-TCR constants struct.
11 months ago
Nico de Poel
c4df3d45aa
Got UAV bindings in fragment shaders to work in what I think is the correct way
11 months ago
Nico de Poel
82734c7606
Went over all the shader inputs and output and implemented them. Realized that some fragment shaders use UAVs with random write, is that even possible in Unity?
11 months ago
Nico de Poel
d71b061d16
Added new shader IDs and resource definitions
11 months ago
Nico de Poel
20a930097e
Added keywords for balanced/performance presets and GLES support
11 months ago
Nico de Poel
3ef31fac65
Some cleanup and minor fixes
11 months ago
Nico de Poel
2a88584eb2
Added a quick and dirty upscaler integration and fixed global keyword creation
11 months ago
Nico de Poel
ac0adc168b
Added definition for quality preset variants
11 months ago
Nico de Poel
d320a76b89
Turned dispatch descriptions into structs, using in-parameters where applicable
11 months ago
Nico de Poel
a0eeda1e84
Updated fragment shader passes to provide their output render targets to the Blit function, including multi-render targets
11 months ago
Nico de Poel
d5bbadaa77
Made all the ASR shader keywords global and encapsulated all of the keyword management into a separate class, which will enable and disable keywords globally based on the initialization flags and dispatch parameters.
11 months ago
Nico de Poel
dd33e77b6f
Reworked ASR passes to allow for blitting using fragment shaders, and got an idea of the problems yet to solve. Modified assets script and added it to the PPV2 resources. Some additional refactoring and bug fixing as well.
11 months ago
Nico de Poel
d7191b98e7
Applied a few more recent fixes from the FSR2 codebase
11 months ago
Nico de Poel
d3f60e2650
Added ASR runtime source files, as a copy of the FSR2 sources, with a bunch of renaming and stripped of some parts that we know we're not going to need.
11 months ago
Nico de Poel
c8eebd63ed
Added multi-compile keywords for all fragment shaders, and added Metal workaround for texture atomics
11 months ago
Nico de Poel
a85e242d4c
Added shaders for the two compute passes, plus a few minor fixes
11 months ago
Nico de Poel
d77922cc4b
Backported fixes that we already know are going to be necessary for full Unity support:
- Removed empty parantheses on GroupMemoryBarrier macro, which confuse the 2020.1 shader compiler
- Added padding field to cbFSR2 to make it exactly 128 bytes in size, which gives correct buffer alignment on iOS Metal
- Changed auto-exposure reset threshold value to 1e4f, as part of a fix for black screen flashes in OpenGL Core on Nvidia GPUs
- Clamp luma to >= 0 in auto-exposure to fix artifacting in OpenGL Core on Nvidia GPUs
- Removed #extension directives meant for GLSL, which cause shader compiler warnings in Unity
11 months ago
Nico de Poel
1551a3ccf8
Added the remaining vertex/fragment shader passes and made the same modifications to get them to compile
11 months ago
Nico de Poel
c27195fb9a
Defined a vertex/fragment shader for the accumulate pass, with initial modifications to make things compile as a proof of concept:
- Removed vk::binding directives, as they are only meant for Vulkan and don't mean anything to Unity
- Initialize inout struct as zero to stop Unity compiler complaints
- Renamed vertex main function to VertMain to prevent duplicate main function declaration
- Removed duplicate VertexOut struct declaration
- Removed unused header includes in vertex shader code, preventing duplicate declarations
- Fixed up a few relative header include paths
11 months ago
Nico de Poel
66059cb742
Imported ARM ASR shader code for HLSL without any modifications
11 months ago
Nico de Poel
299200cb9c
Ported over jitter UV fixes from Snapdragon GitHub repo
1 year ago
Nico de Poel
9971d85ce4
Changed output texture formats from half to float, fixes Metal shader compilation issues on iOS
1 year ago
Nico de Poel
9f4b96ea25
Made integration more PPV2-like by using property sheets, material property blocks and the BlitFullScreenTriangle method.
1 year ago
Nico de Poel
df58df61d6
Reorganized shader code such that standard BiRP and PPV2 can share the same common code with only some light wrappers to implement the differences
1 year ago
Nico de Poel
72df347315
Reworked 2-pass FS implementation to integrate more directly with the PPV2 framework, allowing for multi-target rendering using the fullscreen triangle blit, which eliminates the need for an extra blit at the end.
Also fixed a bug where the scale factor was inverted, which caused FS upscaling output to be blurry.
1 year ago