[UI] UI common shaders to XeSL

This commit is contained in:
Triang3l
2022-02-06 22:48:24 +03:00
parent e07ed95f53
commit 9b1fdac986
76 changed files with 6490 additions and 6926 deletions

View File

@@ -0,0 +1,66 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xesl.xesli"
#include "amd_language.xesli"
#if XE_GUEST_OUTPUT_DITHER
#include "dither_8bpc.xesli"
#endif // XE_GUEST_OUTPUT_DITHER
xesl_push_constants_begin(b0, space0)
// 16 used by the vertex shader (GLSL push constant offsets are across
// stages).
xesl_block_offset_member(16, c0.x, xesl_int2,
xe_fsr_rcas_output_offset)
xesl_block_offset_member(24, c0.z, float, xe_fsr_rcas_sharpness_post_setup)
xesl_push_constants_end
// Forward declaration because FsrRcasLoadF needs xe_fsr_rcas_source from the
// entry point bindings.
void FsrRcasF(out float pixel_r, out float pixel_g, out float pixel_b,
xesl_uint2 pixel_position, xesl_uint4 constants);
xesl_entry
xesl_fetchSampler(xesl_sampler2D, xe_fsr_rcas_source, set=0, binding=0, t0,
space0)
xesl_entry_bindings_end
xesl_input_frag_coord
xesl_entry_signature_next
xesl_output_color(xesl_float4, xe_fsr_rcas_color, 0)
xesl_entry_signature_end
xesl_uint2 pixel_coord =
xesl_uint2(xesl_int2(xesl_FragCoord.xy) -
xesl_push_constant(xe_fsr_rcas_output_offset));
float sharpness = xesl_push_constant(xe_fsr_rcas_sharpness_post_setup);
// FsrRcasCon with smaller push constant usage.
xesl_uint4 rcas_const =
xesl_uint4(xesl_floatBitsToUint(sharpness),
xesl_packHalf2x16(xesl_float2(sharpness, sharpness)), 0u, 0u);
FsrRcasF(xe_fsr_rcas_color.r, xe_fsr_rcas_color.g, xe_fsr_rcas_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_fsr_rcas_color.rgb =
xesl_saturate(xe_fsr_rcas_color.rgb + XeDitherOffset8bpc(pixel_coord));
#endif // XE_GUEST_OUTPUT_DITHER
// Force alpha to 1 to make sure the surface won't be translucent.
xe_fsr_rcas_color.a = 1.0;
xesl_entry_end
#define A_GPU 1
#include "../../../../third_party/FidelityFX-FSR/ffx-fsr/ffx_a.h"
#define FSR_RCAS_F 1
xesl_float4 FsrRcasLoadF(xesl_int2 p) {
return xesl_float4(xesl_texelFetch2D_comb(xe_fsr_rcas_source, 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"