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