[GPU] Add FXAA post-processing [UI] Add FidelityFX FSR and CAS post-processing [UI] Add blue noise dithering from 10bpc to 8bpc [GPU] Apply the DC PWL gamma ramp closer to the spec, supporting fully white color [UI] Allow the GPU CP thread to present on the host directly, bypassing the UI thread OS paint event [UI] Allow variable refresh rate (or tearing) [UI] Present the newest frame (restart) on DXGI [UI] Replace GraphicsContext with a far more advanced Presenter with more coherent surface connection and UI overlay state management [UI] Connect presentation to windows via the Surface class, not native window handles [Vulkan] Switch to simpler Vulkan setup with no instance/device separation due to interdependencies and to pass fewer objects around [Vulkan] Lower the minimum required Vulkan version to 1.0 [UI/GPU] Various cleanup, mainly ComPtr usage [UI] Support per-monitor DPI awareness v2 on Windows [UI] DPI-scale Dear ImGui [UI] Replace the remaining non-detachable window delegates with unified window event and input listeners [UI] Allow listeners to safely destroy or close the window, and to register/unregister listeners without use-after-free and the ABA problem [UI] Explicit Z ordering of input listeners and UI overlays, top-down for input, bottom-up for drawing [UI] Add explicit window lifecycle phases [UI] Replace Window virtual functions with explicit desired state, its application, actual state, its feedback [UI] GTK: Apply the initial size to the drawing area [UI] Limit internal UI frame rate to that of the monitor [UI] Hide the cursor using a timer instead of polling due to no repeated UI thread paints with GPU CP thread presentation, and only within the window
46 lines
1.6 KiB
Plaintext
46 lines
1.6 KiB
Plaintext
// At least #version 420.
|
|
|
|
#if XE_GUEST_OUTPUT_DITHER
|
|
#include "dither_8bpc.xesli"
|
|
#endif // XE_GUEST_OUTPUT_DITHER
|
|
|
|
layout(push_constant) uniform XeFsrRcasConstants {
|
|
// 16 occupied by the vertex shader.
|
|
layout(offset = 16) ivec2 xe_fsr_rcas_output_offset;
|
|
// FsrRcasCon const0.x.
|
|
layout(offset = 24) float xe_fsr_rcas_sharpness_post_setup;
|
|
};
|
|
|
|
layout(set = 0, binding = 0) uniform sampler2D xe_texture;
|
|
|
|
layout(location = 0) out vec4 xe_frag_color;
|
|
|
|
#define A_GPU 1
|
|
#define A_GLSL 1
|
|
#include "../../../../third_party/FidelityFX-FSR/ffx-fsr/ffx_a.h"
|
|
#define FSR_RCAS_F 1
|
|
vec4 FsrRcasLoadF(ivec2 p) {
|
|
return vec4(texelFetch(xe_texture, p, 0).rgb, 1.0);
|
|
}
|
|
void FsrRcasInputF(inout float r, inout float g, inout float b) {}
|
|
#include "../../../../third_party/FidelityFX-FSR/ffx-fsr/ffx_fsr1.h"
|
|
|
|
void main() {
|
|
uvec2 pixel_coord = uvec2(ivec2(gl_FragCoord.xy) - xe_fsr_rcas_output_offset);
|
|
// FsrRcasCon with smaller push constant usage.
|
|
uvec4 rcas_const =
|
|
uvec4(floatBitsToUint(xe_fsr_rcas_sharpness_post_setup),
|
|
packHalf2x16(vec2(xe_fsr_rcas_sharpness_post_setup)), 0u, 0u);
|
|
FsrRcasF(xe_frag_color.r, xe_frag_color.g, xe_frag_color.b, pixel_coord,
|
|
rcas_const);
|
|
#if XE_GUEST_OUTPUT_DITHER
|
|
// Clamping because on Vulkan, the surface may specify any format, including
|
|
// floating-point.
|
|
xe_frag_color.rgb =
|
|
clamp(xe_frag_color.rgb + XeDitherOffset8bpc(pixel_coord),
|
|
vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0));
|
|
#endif // XE_GUEST_OUTPUT_DITHER
|
|
// Force alpha to 1 to make sure the surface won't be translucent.
|
|
xe_frag_color.a = 1.0;
|
|
}
|