Compare commits
merge into: ndepoel:master
ndepoel:2019
ndepoel:cas
ndepoel:framework
ndepoel:fsr3.1.1
ndepoel:fsr3.1.4
ndepoel:fsr3framegen
ndepoel:master
pull from: ndepoel:cas
ndepoel:2019
ndepoel:cas
ndepoel:framework
ndepoel:fsr3.1.1
ndepoel:fsr3.1.4
ndepoel:fsr3framegen
ndepoel:master
3 Commits
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
e28400609a |
Use precise math because it makes literally no difference for performance
|
1 year ago |
|
|
30235b37a5 |
Remove final saturate from the CAS filter, so that the output remains in HDR
|
1 year ago |
|
|
d65cc3a35d |
Added standalone CAS sharpening shader
|
1 year ago |
15 changed files with 2029 additions and 0 deletions
-
50Runtime/Common/ConstantsBuffer.cs
-
3Runtime/Common/ConstantsBuffer.cs.meta
-
12Shaders/ffx_cas_sharpen_pass.compute
-
8Shaders/ffx_cas_sharpen_pass.compute.meta
-
8Shaders/shaders/cas.meta
-
1271Shaders/shaders/cas/ffx_cas.h
-
65Shaders/shaders/cas/ffx_cas.h.meta
-
226Shaders/shaders/cas/ffx_cas_callbacks_hlsl.h
-
65Shaders/shaders/cas/ffx_cas_callbacks_hlsl.h.meta
-
41Shaders/shaders/cas/ffx_cas_resources.h
-
65Shaders/shaders/cas/ffx_cas_resources.h.meta
-
89Shaders/shaders/cas/ffx_cas_sharpen.h
-
65Shaders/shaders/cas/ffx_cas_sharpen.h.meta
-
54Shaders/shaders/ffx_cas_sharpen_pass.hlsl
-
7Shaders/shaders/ffx_cas_sharpen_pass.hlsl.meta
@ -0,0 +1,50 @@ |
|||||
|
using System.Runtime.InteropServices; |
||||
|
using UnityEngine; |
||||
|
using UnityEngine.Rendering; |
||||
|
|
||||
|
namespace FidelityFX |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Convenience class for handling a constants buffer containing a single struct item.
|
||||
|
/// This wraps the compute buffer and the value array, as well as providing easy access to both.
|
||||
|
/// </summary>
|
||||
|
public class ConstantsBuffer<TConst> |
||||
|
where TConst: struct |
||||
|
{ |
||||
|
private ComputeBuffer _computeBuffer; |
||||
|
|
||||
|
private readonly TConst[] _constArray = { new TConst() }; |
||||
|
public ref TConst Value => ref _constArray[0]; |
||||
|
|
||||
|
public static ConstantsBuffer<TConst> Create() |
||||
|
{ |
||||
|
ConstantsBuffer<TConst> buffer = new(); |
||||
|
buffer.Init(); |
||||
|
return buffer; |
||||
|
} |
||||
|
|
||||
|
public void Init() |
||||
|
{ |
||||
|
_computeBuffer = new ComputeBuffer(1, Marshal.SizeOf<TConst>(), ComputeBufferType.Constant); |
||||
|
} |
||||
|
|
||||
|
public void UpdateBufferData(CommandBuffer commandBuffer) |
||||
|
{ |
||||
|
commandBuffer.SetBufferData(_computeBuffer, _constArray); |
||||
|
} |
||||
|
|
||||
|
public void Destroy() |
||||
|
{ |
||||
|
if (_computeBuffer == null) |
||||
|
return; |
||||
|
|
||||
|
_computeBuffer.Release(); |
||||
|
_computeBuffer = null; |
||||
|
} |
||||
|
|
||||
|
public static implicit operator ComputeBuffer(ConstantsBuffer<TConst> constants) |
||||
|
{ |
||||
|
return constants._computeBuffer; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: c423d73295de440dade5b92337efc50a |
||||
|
timeCreated: 1729668780 |
||||
@ -0,0 +1,12 @@ |
|||||
|
#pragma kernel CS |
||||
|
|
||||
|
#define FFX_CAS_OPTION_SHARPEN_ONLY 1 |
||||
|
#define FFX_CAS_COLOR_SPACE_CONVERSION 0 // Linear color space |
||||
|
#define FFX_CAS_USE_PRECISE_MATH 1 |
||||
|
|
||||
|
#define FFX_GPU // Compiling for GPU |
||||
|
#define FFX_HLSL // Compile for plain HLSL |
||||
|
|
||||
|
#pragma warning(disable: 3571) |
||||
|
|
||||
|
#include "shaders/ffx_cas_sharpen_pass.hlsl" |
||||
@ -0,0 +1,8 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: 00e3ffafadd35564780d8a12adcbeff7 |
||||
|
ComputeShaderImporter: |
||||
|
externalObjects: {} |
||||
|
preprocessorOverride: 0 |
||||
|
userData: |
||||
|
assetBundleName: |
||||
|
assetBundleVariant: |
||||
@ -0,0 +1,8 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: 94edab5297308bd4fae936da8ce22a37 |
||||
|
folderAsset: yes |
||||
|
DefaultImporter: |
||||
|
externalObjects: {} |
||||
|
userData: |
||||
|
assetBundleName: |
||||
|
assetBundleVariant: |
||||
1271
Shaders/shaders/cas/ffx_cas.h
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,65 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: f674a479a9610d244a0b9f93b091b49d |
||||
|
PluginImporter: |
||||
|
externalObjects: {} |
||||
|
serializedVersion: 2 |
||||
|
iconMap: {} |
||||
|
executionOrder: {} |
||||
|
defineConstraints: [] |
||||
|
isPreloaded: 0 |
||||
|
isOverridable: 0 |
||||
|
isExplicitlyReferenced: 0 |
||||
|
validateReferences: 1 |
||||
|
platformData: |
||||
|
- first: |
||||
|
: Any |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
Exclude Editor: 1 |
||||
|
Exclude GameCoreScarlett: 1 |
||||
|
Exclude GameCoreXboxOne: 1 |
||||
|
Exclude Linux64: 1 |
||||
|
Exclude OSXUniversal: 1 |
||||
|
Exclude PS4: 1 |
||||
|
Exclude PS5: 1 |
||||
|
Exclude Win: 1 |
||||
|
Exclude Win64: 1 |
||||
|
- first: |
||||
|
Any: |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: {} |
||||
|
- first: |
||||
|
Editor: Editor |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
DefaultValueInitialized: true |
||||
|
- first: |
||||
|
Standalone: Linux64 |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: OSXUniversal |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: Win |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: Win64 |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
userData: |
||||
|
assetBundleName: |
||||
|
assetBundleVariant: |
||||
@ -0,0 +1,226 @@ |
|||||
|
// This file is part of the FidelityFX SDK. |
||||
|
// |
||||
|
// Copyright (C) 2024 Advanced Micro Devices, Inc. |
||||
|
// |
||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
// of this software and associated documentation files(the "Software"), to deal |
||||
|
// in the Software without restriction, including without limitation the rights |
||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell |
||||
|
// copies of the Software, and to permit persons to whom the Software is |
||||
|
// furnished to do so, subject to the following conditions : |
||||
|
// |
||||
|
// The above copyright notice and this permission notice shall be included in |
||||
|
// all copies or substantial portions of the Software. |
||||
|
// |
||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
// THE SOFTWARE. |
||||
|
|
||||
|
#include "ffx_cas_resources.h" |
||||
|
|
||||
|
#if defined(FFX_GPU) |
||||
|
#ifdef __hlsl_dx_compiler |
||||
|
#pragma dxc diagnostic push |
||||
|
#pragma dxc diagnostic ignored "-Wambig-lit-shift" |
||||
|
#endif //__hlsl_dx_compiler |
||||
|
#include "../ffx_core.h" |
||||
|
#ifdef __hlsl_dx_compiler |
||||
|
#pragma dxc diagnostic pop |
||||
|
#endif //__hlsl_dx_compiler |
||||
|
|
||||
|
#ifndef FFX_PREFER_WAVE64 |
||||
|
#define FFX_PREFER_WAVE64 |
||||
|
#endif // #ifndef FFX_PREFER_WAVE64 |
||||
|
|
||||
|
#if defined(FFX_GPU) |
||||
|
#pragma warning(disable: 3205) // conversion from larger type to smaller |
||||
|
#endif // #if defined(FFX_GPU) |
||||
|
|
||||
|
#define DECLARE_SRV_REGISTER(regIndex) t##regIndex |
||||
|
#define DECLARE_UAV_REGISTER(regIndex) u##regIndex |
||||
|
#define DECLARE_CB_REGISTER(regIndex) b##regIndex |
||||
|
#define FFX_CAS_DECLARE_SRV(regIndex) register(DECLARE_SRV_REGISTER(regIndex)) |
||||
|
#define FFX_CAS_DECLARE_UAV(regIndex) register(DECLARE_UAV_REGISTER(regIndex)) |
||||
|
#define FFX_CAS_DECLARE_CB(regIndex) register(DECLARE_CB_REGISTER(regIndex)) |
||||
|
|
||||
|
#if defined(CAS_BIND_CB_CAS) |
||||
|
cbuffer cbCAS : FFX_CAS_DECLARE_CB(CAS_BIND_CB_CAS) |
||||
|
{ |
||||
|
FfxUInt32x4 const0; |
||||
|
FfxUInt32x4 const1; |
||||
|
#define FFX_CAS_CONSTANT_BUFFER_1_SIZE 8 // Number of 32-bit values. This must be kept in sync with the cbCAS size. |
||||
|
}; |
||||
|
#else |
||||
|
#define const0 0 |
||||
|
#define const1 0 |
||||
|
#endif |
||||
|
|
||||
|
#if defined(FFX_GPU) |
||||
|
#define FFX_CAS_ROOTSIG_STRINGIFY(p) FFX_CAS_ROOTSIG_STR(p) |
||||
|
#define FFX_CAS_ROOTSIG_STR(p) #p |
||||
|
#define FFX_CAS_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_CAS_ROOTSIG_STRINGIFY(FFX_CAS_RESOURCE_IDENTIFIER_COUNT) ")), " \ |
||||
|
"DescriptorTable(SRV(t0, numDescriptors = " FFX_CAS_ROOTSIG_STRINGIFY(FFX_CAS_RESOURCE_IDENTIFIER_COUNT) ")), " \ |
||||
|
"CBV(b0), " \ |
||||
|
"StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ |
||||
|
"addressU = TEXTURE_ADDRESS_CLAMP, " \ |
||||
|
"addressV = TEXTURE_ADDRESS_CLAMP, " \ |
||||
|
"addressW = TEXTURE_ADDRESS_CLAMP, " \ |
||||
|
"comparisonFunc = COMPARISON_NEVER, " \ |
||||
|
"borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] |
||||
|
|
||||
|
#if defined(FFX_CAS_EMBED_ROOTSIG) |
||||
|
#define FFX_CAS_EMBED_ROOTSIG_CONTENT FFX_CAS_ROOTSIG |
||||
|
#else |
||||
|
#define FFX_CAS_EMBED_ROOTSIG_CONTENT |
||||
|
#endif // #if FFX_CAS_EMBED_ROOTSIG |
||||
|
#endif // #if defined(FFX_GPU) |
||||
|
|
||||
|
|
||||
|
FfxUInt32x4 Const0() |
||||
|
{ |
||||
|
#if defined(CAS_BIND_CB_CAS) |
||||
|
return const0; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxUInt32x4 Const1() |
||||
|
{ |
||||
|
#if defined(CAS_BIND_CB_CAS) |
||||
|
return const1; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
SamplerState s_LinearClamp : register(s0); |
||||
|
|
||||
|
// SRVs |
||||
|
#if defined(CAS_BIND_SRV_INPUT_COLOR) |
||||
|
Texture2D<FfxFloat32x4> r_input_color : FFX_CAS_DECLARE_SRV(CAS_BIND_SRV_INPUT_COLOR); |
||||
|
#endif |
||||
|
|
||||
|
// UAV declarations |
||||
|
#if defined(CAS_BIND_UAV_OUTPUT_COLOR) |
||||
|
RWTexture2D<FfxFloat32x4> rw_output_color : FFX_CAS_DECLARE_UAV(CAS_BIND_UAV_OUTPUT_COLOR); |
||||
|
#endif |
||||
|
|
||||
|
#if FFX_HALF |
||||
|
|
||||
|
FfxFloat16x3 casLoadHalf(FFX_PARAMETER_IN FfxInt16x2 position) |
||||
|
{ |
||||
|
#if defined(CAS_BIND_SRV_INPUT_COLOR) |
||||
|
return FfxFloat16x3(r_input_color.Load(FfxInt32x3(position, 0)).rgb); |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
// Transform input from the load into a linear color space between 0 and 1. |
||||
|
void casInputHalf(FFX_PARAMETER_INOUT FfxFloat16x2 red, FFX_PARAMETER_INOUT FfxFloat16x2 green, FFX_PARAMETER_INOUT FfxFloat16x2 blue) |
||||
|
{ |
||||
|
#if FFX_CAS_COLOR_SPACE_CONVERSION == 1 // gamma 2.0 |
||||
|
red *= red; |
||||
|
green *= green; |
||||
|
blue *= blue; |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 2 // gamma 2.2 |
||||
|
red = ffxLinearFromGammaHalf(red, FfxFloat16(2.2f)); |
||||
|
green = ffxLinearFromGammaHalf(green, FfxFloat16(2.2f)); |
||||
|
blue = ffxLinearFromGammaHalf(blue, FfxFloat16(2.2f)); |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 3 // sRGB output (auto-degamma'd on sampler read) |
||||
|
|
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 4 // sRGB input/output |
||||
|
red = ffxLinearFromSrgbHalf(red); |
||||
|
green = ffxLinearFromSrgbHalf(green); |
||||
|
blue = ffxLinearFromSrgbHalf(blue); |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void casOutputHalf(FFX_PARAMETER_INOUT FfxFloat16x2 red, FFX_PARAMETER_INOUT FfxFloat16x2 green, FFX_PARAMETER_INOUT FfxFloat16x2 blue) |
||||
|
{ |
||||
|
#if FFX_CAS_COLOR_SPACE_CONVERSION == 1 // gamma 2.0 |
||||
|
red = ffxSqrt(red); |
||||
|
green = ffxSqrt(green); |
||||
|
blue = ffxSqrt(blue); |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 2 // gamma 2.2 |
||||
|
red = ffxGammaFromLinearHalf(red, FfxFloat16(1/2.2f)); |
||||
|
green = ffxGammaFromLinearHalf(green, FfxFloat16(1/2.2f)); |
||||
|
blue = ffxGammaFromLinearHalf(blue, FfxFloat16(1/2.2f)); |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 3 // sRGB output (auto-degamma'd on sampler read) |
||||
|
red = ffxSrgbFromLinearHalf(red); |
||||
|
green = ffxSrgbFromLinearHalf(green); |
||||
|
blue = ffxSrgbFromLinearHalf(blue); |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 4 // sRGB input/output |
||||
|
red = ffxSrgbFromLinearHalf(red); |
||||
|
green = ffxSrgbFromLinearHalf(green); |
||||
|
blue = ffxSrgbFromLinearHalf(blue); |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
#else |
||||
|
|
||||
|
FfxFloat32x3 casLoad(FFX_PARAMETER_IN FfxInt32x2 position) |
||||
|
{ |
||||
|
#if defined(CAS_BIND_SRV_INPUT_COLOR) |
||||
|
return r_input_color.Load(FfxInt32x3(position, 0)).rgb; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
// Transform input from the load into a linear color space between 0 and 1. |
||||
|
void casInput(FFX_PARAMETER_INOUT FfxFloat32 red, FFX_PARAMETER_INOUT FfxFloat32 green, FFX_PARAMETER_INOUT FfxFloat32 blue) |
||||
|
{ |
||||
|
#if FFX_CAS_COLOR_SPACE_CONVERSION == 1 // gamma 2.0 |
||||
|
red *= red; |
||||
|
green *= green; |
||||
|
blue *= blue; |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 2 // gamma 2.2 |
||||
|
red = ffxLinearFromGamma(red, FfxFloat32(2.2f)); |
||||
|
green = ffxLinearFromGamma(green, FfxFloat32(2.2f)); |
||||
|
blue = ffxLinearFromGamma(blue, FfxFloat32(2.2f)); |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 3 // sRGB output (auto-degamma'd on sampler read) |
||||
|
|
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 4 // sRGB input/output |
||||
|
red = ffxLinearFromSrgb(red); |
||||
|
green = ffxLinearFromSrgb(green); |
||||
|
blue = ffxLinearFromSrgb(blue); |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void casOutput(FFX_PARAMETER_INOUT FfxFloat32 red, FFX_PARAMETER_INOUT FfxFloat32 green, FFX_PARAMETER_INOUT FfxFloat32 blue) |
||||
|
{ |
||||
|
#if FFX_CAS_COLOR_SPACE_CONVERSION == 1 // gamma 2.0 |
||||
|
red = ffxSqrt(red); |
||||
|
green = ffxSqrt(green); |
||||
|
blue = ffxSqrt(blue); |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 2 // gamma 2.2 |
||||
|
red = ffxGammaFromLinear(red, FfxFloat32(1/2.2f)); |
||||
|
green = ffxGammaFromLinear(green, FfxFloat32(1/2.2f)); |
||||
|
blue = ffxGammaFromLinear(blue, FfxFloat32(1/2.2f)); |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 3 // sRGB output (auto-degamma'd on sampler read) |
||||
|
red = ffxSrgbFromLinear(red); |
||||
|
green = ffxSrgbFromLinear(green); |
||||
|
blue = ffxSrgbFromLinear(blue); |
||||
|
#elif FFX_CAS_COLOR_SPACE_CONVERSION == 4 // sRGB input/output |
||||
|
red = ffxSrgbFromLinear(red); |
||||
|
green = ffxSrgbFromLinear(green); |
||||
|
blue = ffxSrgbFromLinear(blue); |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
#endif // FFX_HALF |
||||
|
|
||||
|
void casStoreOutput(FfxInt32x2 iPxPos, FfxFloat32x4 fColor) |
||||
|
{ |
||||
|
#if defined(CAS_BIND_UAV_OUTPUT_COLOR) |
||||
|
rw_output_color[iPxPos] = fColor; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
#endif // #if defined(FFX_GPU) |
||||
@ -0,0 +1,65 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: 75c2da7c7b951b940adb44e9342dd303 |
||||
|
PluginImporter: |
||||
|
externalObjects: {} |
||||
|
serializedVersion: 2 |
||||
|
iconMap: {} |
||||
|
executionOrder: {} |
||||
|
defineConstraints: [] |
||||
|
isPreloaded: 0 |
||||
|
isOverridable: 0 |
||||
|
isExplicitlyReferenced: 0 |
||||
|
validateReferences: 1 |
||||
|
platformData: |
||||
|
- first: |
||||
|
: Any |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
Exclude Editor: 1 |
||||
|
Exclude GameCoreScarlett: 1 |
||||
|
Exclude GameCoreXboxOne: 1 |
||||
|
Exclude Linux64: 1 |
||||
|
Exclude OSXUniversal: 1 |
||||
|
Exclude PS4: 1 |
||||
|
Exclude PS5: 1 |
||||
|
Exclude Win: 1 |
||||
|
Exclude Win64: 1 |
||||
|
- first: |
||||
|
Any: |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: {} |
||||
|
- first: |
||||
|
Editor: Editor |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
DefaultValueInitialized: true |
||||
|
- first: |
||||
|
Standalone: Linux64 |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: OSXUniversal |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: Win |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: Win64 |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
userData: |
||||
|
assetBundleName: |
||||
|
assetBundleVariant: |
||||
@ -0,0 +1,41 @@ |
|||||
|
// This file is part of the FidelityFX SDK. |
||||
|
// |
||||
|
// Copyright (C) 2024 Advanced Micro Devices, Inc. |
||||
|
// |
||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
// of this software and associated documentation files(the "Software"), to deal |
||||
|
// in the Software without restriction, including without limitation the rights |
||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell |
||||
|
// copies of the Software, and to permit persons to whom the Software is |
||||
|
// furnished to do so, subject to the following conditions : |
||||
|
// |
||||
|
// The above copyright notice and this permission notice shall be included in |
||||
|
// all copies or substantial portions of the Software. |
||||
|
// |
||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
// THE SOFTWARE. |
||||
|
|
||||
|
#ifndef FFX_CAS_RESOURCES_H |
||||
|
#define FFX_CAS_RESOURCES_H |
||||
|
|
||||
|
#if defined(FFX_CPU) || defined(FFX_GPU) |
||||
|
|
||||
|
#define FFX_CAS_RESOURCE_IDENTIFIER_NULL 0 |
||||
|
#define FFX_CAS_RESOURCE_IDENTIFIER_INPUT_COLOR 1 |
||||
|
#define FFX_CAS_RESOURCE_IDENTIFIER_OUTPUT_COLOR 2 |
||||
|
|
||||
|
#define FFX_CAS_RESOURCE_IDENTIFIER_COUNT 3 |
||||
|
|
||||
|
// CBV resource definitions |
||||
|
#define FFX_CAS_CONSTANTBUFFER_IDENTIFIER_CAS 0 |
||||
|
|
||||
|
#define FFX_CAS_CONSTANTBUFFER_IDENTIFIER_COUNT 1 |
||||
|
|
||||
|
#endif // #if defined(FFX_CPU) || defined(FFX_GPU) |
||||
|
|
||||
|
#endif // FFX_CAS_RESOURCES_H |
||||
@ -0,0 +1,65 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: 178b95414522b1349920c12ff1ddc925 |
||||
|
PluginImporter: |
||||
|
externalObjects: {} |
||||
|
serializedVersion: 2 |
||||
|
iconMap: {} |
||||
|
executionOrder: {} |
||||
|
defineConstraints: [] |
||||
|
isPreloaded: 0 |
||||
|
isOverridable: 0 |
||||
|
isExplicitlyReferenced: 0 |
||||
|
validateReferences: 1 |
||||
|
platformData: |
||||
|
- first: |
||||
|
: Any |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
Exclude Editor: 1 |
||||
|
Exclude GameCoreScarlett: 1 |
||||
|
Exclude GameCoreXboxOne: 1 |
||||
|
Exclude Linux64: 1 |
||||
|
Exclude OSXUniversal: 1 |
||||
|
Exclude PS4: 1 |
||||
|
Exclude PS5: 1 |
||||
|
Exclude Win: 1 |
||||
|
Exclude Win64: 1 |
||||
|
- first: |
||||
|
Any: |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: {} |
||||
|
- first: |
||||
|
Editor: Editor |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
DefaultValueInitialized: true |
||||
|
- first: |
||||
|
Standalone: Linux64 |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: OSXUniversal |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: Win |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: Win64 |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
userData: |
||||
|
assetBundleName: |
||||
|
assetBundleVariant: |
||||
@ -0,0 +1,89 @@ |
|||||
|
// This file is part of the FidelityFX SDK. |
||||
|
// |
||||
|
// Copyright (C) 2024 Advanced Micro Devices, Inc. |
||||
|
// |
||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
// of this software and associated documentation files(the "Software"), to deal |
||||
|
// in the Software without restriction, including without limitation the rights |
||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell |
||||
|
// copies of the Software, and to permit persons to whom the Software is |
||||
|
// furnished to do so, subject to the following conditions : |
||||
|
// |
||||
|
// The above copyright notice and this permission notice shall be included in |
||||
|
// all copies or substantial portions of the Software. |
||||
|
// |
||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
// THE SOFTWARE. |
||||
|
|
||||
|
#include "../ffx_core.h" |
||||
|
|
||||
|
#if FFX_HALF |
||||
|
|
||||
|
#define FFX_CAS_PACKED_ONLY 1 |
||||
|
|
||||
|
#endif // FFX_HALF |
||||
|
|
||||
|
#include "ffx_cas.h" |
||||
|
|
||||
|
void Sharpen(FfxUInt32x3 LocalThreadId, FfxUInt32x3 WorkGroupId, FfxUInt32x3 Dtid) |
||||
|
{ |
||||
|
// Do remapping of local xy in workgroup for a more PS-like swizzle pattern. |
||||
|
FfxUInt32x2 gxy = ffxRemapForQuad(LocalThreadId.x) + FfxUInt32x2(WorkGroupId.x << 4u, WorkGroupId.y << 4u); |
||||
|
|
||||
|
FfxBoolean sharpenOnly; |
||||
|
#if FFX_CAS_OPTION_SHARPEN_ONLY |
||||
|
sharpenOnly = true; |
||||
|
#else |
||||
|
sharpenOnly = false; |
||||
|
#endif // FFX_CAS_OPTION_SHARPEN_ONLY |
||||
|
|
||||
|
#if FFX_HALF |
||||
|
|
||||
|
// Filter. |
||||
|
FfxFloat16x4 c0, c1; |
||||
|
FfxFloat16x2 cR, cG, cB; |
||||
|
|
||||
|
ffxCasFilterHalf(cR, cG, cB, gxy, Const0(), Const1(), sharpenOnly); |
||||
|
casOutputHalf(cR, cG, cB); |
||||
|
ffxCasDepackHalf(c0, c1, cR, cG, cB); |
||||
|
casStoreOutput(FfxInt32x2(gxy), FfxFloat32x4(c0)); |
||||
|
casStoreOutput(FfxInt32x2(gxy) + FfxInt32x2(8, 0), FfxFloat32x4(c1)); |
||||
|
gxy.y += 8u; |
||||
|
|
||||
|
ffxCasFilterHalf(cR, cG, cB, gxy, Const0(), Const1(), sharpenOnly); |
||||
|
casOutputHalf(cR, cG, cB); |
||||
|
ffxCasDepackHalf(c0, c1, cR, cG, cB); |
||||
|
casStoreOutput(FfxInt32x2(gxy), FfxFloat32x4(c0)); |
||||
|
casStoreOutput(FfxInt32x2(gxy) + FfxInt32x2(8, 0), FfxFloat32x4(c1)); |
||||
|
|
||||
|
#else |
||||
|
|
||||
|
// Filter. |
||||
|
FfxFloat32x3 c; |
||||
|
|
||||
|
ffxCasFilter(c.r, c.g, c.b, gxy, Const0(), Const1(), sharpenOnly); |
||||
|
casOutput(c.r, c.g, c.b); |
||||
|
casStoreOutput(FfxInt32x2(gxy), FfxFloat32x4(c, 1)); |
||||
|
gxy.x += 8u; |
||||
|
|
||||
|
ffxCasFilter(c.r, c.g, c.b, gxy, Const0(), Const1(), sharpenOnly); |
||||
|
casOutput(c.r, c.g, c.b); |
||||
|
casStoreOutput(FfxInt32x2(gxy), FfxFloat32x4(c, 1)); |
||||
|
gxy.y += 8u; |
||||
|
|
||||
|
ffxCasFilter(c.r, c.g, c.b, gxy, Const0(), Const1(), sharpenOnly); |
||||
|
casOutput(c.r, c.g, c.b); |
||||
|
casStoreOutput(FfxInt32x2(gxy), FfxFloat32x4(c, 1)); |
||||
|
gxy.x -= 8u; |
||||
|
|
||||
|
ffxCasFilter(c.r, c.g, c.b, gxy, Const0(), Const1(), sharpenOnly); |
||||
|
casOutput(c.r, c.g, c.b); |
||||
|
casStoreOutput(FfxInt32x2(gxy), FfxFloat32x4(c, 1)); |
||||
|
|
||||
|
#endif // FFX_HALF |
||||
|
} |
||||
@ -0,0 +1,65 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: 4a24b15e191a20745a2da66e8ff76069 |
||||
|
PluginImporter: |
||||
|
externalObjects: {} |
||||
|
serializedVersion: 2 |
||||
|
iconMap: {} |
||||
|
executionOrder: {} |
||||
|
defineConstraints: [] |
||||
|
isPreloaded: 0 |
||||
|
isOverridable: 0 |
||||
|
isExplicitlyReferenced: 0 |
||||
|
validateReferences: 1 |
||||
|
platformData: |
||||
|
- first: |
||||
|
: Any |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
Exclude Editor: 1 |
||||
|
Exclude GameCoreScarlett: 1 |
||||
|
Exclude GameCoreXboxOne: 1 |
||||
|
Exclude Linux64: 1 |
||||
|
Exclude OSXUniversal: 1 |
||||
|
Exclude PS4: 1 |
||||
|
Exclude PS5: 1 |
||||
|
Exclude Win: 1 |
||||
|
Exclude Win64: 1 |
||||
|
- first: |
||||
|
Any: |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: {} |
||||
|
- first: |
||||
|
Editor: Editor |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
DefaultValueInitialized: true |
||||
|
- first: |
||||
|
Standalone: Linux64 |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: OSXUniversal |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: Win |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
- first: |
||||
|
Standalone: Win64 |
||||
|
second: |
||||
|
enabled: 0 |
||||
|
settings: |
||||
|
CPU: None |
||||
|
userData: |
||||
|
assetBundleName: |
||||
|
assetBundleVariant: |
||||
@ -0,0 +1,54 @@ |
|||||
|
// This file is part of the FidelityFX SDK. |
||||
|
// |
||||
|
// Copyright (C) 2024 Advanced Micro Devices, Inc. |
||||
|
// |
||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
// of this software and associated documentation files(the "Software"), to deal |
||||
|
// in the Software without restriction, including without limitation the rights |
||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell |
||||
|
// copies of the Software, and to permit persons to whom the Software is |
||||
|
// furnished to do so, subject to the following conditions : |
||||
|
// |
||||
|
// The above copyright notice and this permission notice shall be included in |
||||
|
// all copies or substantial portions of the Software. |
||||
|
// |
||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
// THE SOFTWARE. |
||||
|
|
||||
|
// CAS pass |
||||
|
// SRV 0 : CAS_InputColor : r_input_color |
||||
|
// UAV 0 : CAS_OutputColor : rw__output_color |
||||
|
// CB 0 : cbCAS |
||||
|
|
||||
|
#define CAS_BIND_SRV_INPUT_COLOR 0 |
||||
|
#define CAS_BIND_UAV_OUTPUT_COLOR 0 |
||||
|
#define CAS_BIND_CB_CAS 0 |
||||
|
|
||||
|
#include "cas/ffx_cas_callbacks_hlsl.h" |
||||
|
#include "cas/ffx_cas_sharpen.h" |
||||
|
|
||||
|
#ifndef FFX_CAS_THREAD_GROUP_WIDTH |
||||
|
#define FFX_CAS_THREAD_GROUP_WIDTH 64 |
||||
|
#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH |
||||
|
#ifndef FFX_CAS_THREAD_GROUP_HEIGHT |
||||
|
#define FFX_CAS_THREAD_GROUP_HEIGHT 1 |
||||
|
#endif // FFX_FSR2_THREAD_GROUP_HEIGHT |
||||
|
#ifndef FFX_CAS_THREAD_GROUP_DEPTH |
||||
|
#define FFX_CAS_THREAD_GROUP_DEPTH 1 |
||||
|
#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH |
||||
|
#ifndef FFX_CAS_NUM_THREADS |
||||
|
#define FFX_CAS_NUM_THREADS [numthreads(FFX_CAS_THREAD_GROUP_WIDTH, FFX_CAS_THREAD_GROUP_HEIGHT, FFX_CAS_THREAD_GROUP_DEPTH)] |
||||
|
#endif // #ifndef FFX_FSR2_NUM_THREADS |
||||
|
|
||||
|
FFX_PREFER_WAVE64 |
||||
|
FFX_CAS_NUM_THREADS |
||||
|
FFX_CAS_EMBED_ROOTSIG_CONTENT |
||||
|
void CS(uint3 LocalThreadId : SV_GroupThreadID, uint3 WorkGroupId : SV_GroupID, uint3 Dtid : SV_DispatchThreadID) |
||||
|
{ |
||||
|
Sharpen(LocalThreadId, WorkGroupId, Dtid); |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: b9b8c665d9f11a44e9ca915bb9ce0225 |
||||
|
ShaderIncludeImporter: |
||||
|
externalObjects: {} |
||||
|
userData: |
||||
|
assetBundleName: |
||||
|
assetBundleVariant: |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue