/** ****************************************************************************** * 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" 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_float2, xe_fsr_easu_input_output_size_ratio) xesl_block_offset_member(24, c0.z, xesl_float2, xe_fsr_easu_input_size_inv) xesl_push_constants_end // Forward declaration because FsrEasu#F need xe_fsr_easu_source from the entry // point bindings. void FsrEasuF(out xesl_float3 pixel, xesl_uint2 pixel_position, xesl_uint4 const0, xesl_uint4 const1, xesl_uint4 const2, xesl_uint4 const3); xesl_entry xesl_texture(xesl_texture2D, xe_fsr_easu_source, set=0, binding=0, t0, space0) xesl_entry_binding_next xesl_samplerState(xe_fsr_easu_sampler, set=0, binding=1, s0, space0) xesl_entry_bindings_end xesl_input_frag_coord xesl_entry_signature_next xesl_output_color(xesl_float4, xe_fsr_easu_color, 0) xesl_entry_signature_end // FsrEasuCon with smaller push constant usage. xesl_uint4 easu_const_0 = xesl_uint4( xesl_floatBitsToUint( xesl_push_constant(xe_fsr_easu_input_output_size_ratio)), xesl_floatBitsToUint( 0.5 * xesl_push_constant(xe_fsr_easu_input_output_size_ratio) - 0.5)); xesl_uint4 easu_const_1 = xesl_floatBitsToUint(xesl_float4(1.0, 1.0, 1.0, -1.0) * xesl_push_constant(xe_fsr_easu_input_size_inv).xyxy); xesl_uint4 easu_const_2 = xesl_floatBitsToUint(xesl_float4(-1.0, 2.0, 1.0, 2.0) * xesl_push_constant(xe_fsr_easu_input_size_inv).xyxy); xesl_uint4 easu_const_3 = xesl_uint4(xesl_floatBitsToUint(0.0), xesl_floatBitsToUint( 4.0 * xesl_push_constant(xe_fsr_easu_input_size_inv).y), 0u, 0u); FsrEasuF(xe_fsr_easu_color.rgb, xesl_uint2(xesl_FragCoord.xy), easu_const_0, easu_const_1, easu_const_2, easu_const_3); xe_fsr_easu_color.a = 1.0; xesl_entry_end #define A_GPU 1 #include "../../../../third_party/FidelityFX-FSR/ffx-fsr/ffx_a.h" #define FSR_EASU_F 1 xesl_float4 FsrEasuRF(xesl_float2 p) { return xesl_textureGatherRed2D_sep(xe_fsr_easu_source, xe_fsr_easu_sampler, p); } xesl_float4 FsrEasuGF(xesl_float2 p) { return xesl_textureGatherGreen2D_sep(xe_fsr_easu_source, xe_fsr_easu_sampler, p); } xesl_float4 FsrEasuBF(xesl_float2 p) { return xesl_textureGatherBlue2D_sep(xe_fsr_easu_source, xe_fsr_easu_sampler, p); } #include "../../../../third_party/FidelityFX-FSR/ffx-fsr/ffx_fsr1.h"