diff options
| author | lbavoil <[email protected]> | 2016-03-25 13:01:54 +0100 |
|---|---|---|
| committer | lbavoil <[email protected]> | 2016-03-25 13:01:54 +0100 |
| commit | 99174e4e5fb4b7079da80b35a6dfd68f3fd56a1c (patch) | |
| tree | fbcd4260d6c953d569a887505336a1c3f202e10f /src/Shaders_DX12.h | |
| download | hbaoplus-99174e4e5fb4b7079da80b35a6dfd68f3fd56a1c.tar.xz hbaoplus-99174e4e5fb4b7079da80b35a6dfd68f3fd56a1c.zip | |
GFSDK_HBAO+_distro_r3.0_cl20573789
Diffstat (limited to 'src/Shaders_DX12.h')
| -rw-r--r-- | src/Shaders_DX12.h | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/src/Shaders_DX12.h b/src/Shaders_DX12.h new file mode 100644 index 0000000..a210296 --- /dev/null +++ b/src/Shaders_DX12.h @@ -0,0 +1,220 @@ +/* +* Copyright (c) 2008-2016, NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA CORPORATION and its licensors retain all intellectual property +* and proprietary rights in and to this software, related documentation +* and any modifications thereto. Any use, reproduction, disclosure or +* distribution of this software and related documentation without an express +* license agreement from NVIDIA CORPORATION is strictly prohibited. +*/ + +#if SUPPORT_D3D12 + +#pragma once +#include "Common.h" + +namespace GFSDK +{ +namespace SSAO +{ +namespace D3D12 +{ +//-------------------------------------------------------------------------------- +struct VertexShader +{ + VertexShader() + { + // Use proper heap here @jihoc + VS.BytecodeLength = 0; + VS.pShaderBytecode = nullptr; + } + + void Create(ID3D12Device* pD3DDevice, const void *pShaderBytecode, SIZE_T BytecodeLength) + { + VS.pShaderBytecode = pShaderBytecode; + VS.BytecodeLength = BytecodeLength; + } + + void Release(ID3D12Device*) + { + VS.pShaderBytecode = nullptr; + VS.BytecodeLength = 0; + } + + operator GFSDK_D3D12_VertexShader*() + { + return &VS; + } + +private: + GFSDK_D3D12_VertexShader VS; +}; + +//-------------------------------------------------------------------------------- +struct GeometryShader +{ + GeometryShader() + { + GS.BytecodeLength = 0; + GS.pShaderBytecode = nullptr; + } + + void Create(ID3D12Device* pD3DDevice, const void *pShaderBytecode, SIZE_T BytecodeLength) + { + GS.pShaderBytecode = pShaderBytecode; + GS.BytecodeLength = BytecodeLength; + } + + void Release(ID3D12Device*) + { + GS.pShaderBytecode = nullptr; + GS.BytecodeLength = 0; + } + + operator GFSDK_D3D12_GeometryShader*() + { + return &GS; + } + +private: + GFSDK_D3D12_GeometryShader GS; +}; + +//-------------------------------------------------------------------------------- +struct PixelShader +{ + PixelShader() + { + PS.BytecodeLength = 0; + PS.pShaderBytecode = nullptr; + } + + void Create(ID3D12Device* pD3DDevice, const void *pShaderBytecode, SIZE_T BytecodeLength) + { + PS.BytecodeLength = BytecodeLength; + PS.pShaderBytecode = pShaderBytecode; + } + + void Release(ID3D12Device*) + { + PS.pShaderBytecode = nullptr; + PS.BytecodeLength = 0; + } + + operator GFSDK_D3D12_PixelShader*() + { + return &PS; + } + +private: + GFSDK_D3D12_PixelShader PS; +}; + +//-------------------------------------------------------------------------------- +struct DevicePointer +{ + DevicePointer(ID3D12Device* pDeviceIn) : pDevice(pDeviceIn) + { + } + + DevicePointer() : pDevice(NULL) + { + } + + operator ID3D12Device*() const + { + return pDevice; + } + +private: + ID3D12Device* pDevice; +}; + +//-------------------------------------------------------------------------------- +#include "shaders/out/D3D11/FullScreenTriangle_VS.h" +#include "shaders/out/D3D11/CopyDepth_PS.h" +#include "shaders/out/D3D11/LinearizeDepth_PS.h" +#include "shaders/out/D3D11/DeinterleaveDepth_PS.h" +#include "shaders/out/D3D11/DebugNormals_PS.h" +#include "shaders/out/D3D11/ReconstructNormal_PS.h" +#include "shaders/out/D3D11/ReinterleaveAO_PS.h" +#include "shaders/out/D3D11/BlurX_PS.h" +#include "shaders/out/D3D11/BlurY_PS.h" +#include "shaders/out/D3D11/CoarseAO_PS.h" +#include "shaders/out/D3D11/CoarseAO_GS.h" + +//-------------------------------------------------------------------------------- +struct Shaders +{ + void Create(ID3D12Device* pDevice) + { + FullScreenTriangle_VS.Create(DevicePointer(pDevice)); + CopyDepth_PS.Create(DevicePointer(pDevice)); + LinearizeDepth_PS.Create(DevicePointer(pDevice)); + DeinterleaveDepth_PS.Create(DevicePointer(pDevice)); + DebugNormals_PS.Create(DevicePointer(pDevice)); + ReconstructNormal_PS.Create(DevicePointer(pDevice)); + ReinterleaveAO_PS.Create(DevicePointer(pDevice)); + BlurX_PS.Create(DevicePointer(pDevice)); + BlurY_PS.Create(DevicePointer(pDevice)); + CoarseAO_PS.Create(DevicePointer(pDevice)); + CoarseAO_GS.Create(DevicePointer(pDevice)); + } + + void Release() + { + FullScreenTriangle_VS.Release(DevicePointer()); + CopyDepth_PS.Release(DevicePointer()); + LinearizeDepth_PS.Release(DevicePointer()); + DeinterleaveDepth_PS.Release(DevicePointer()); + DebugNormals_PS.Release(DevicePointer()); + ReconstructNormal_PS.Release(DevicePointer()); + ReinterleaveAO_PS.Release(DevicePointer()); + BlurX_PS.Release(DevicePointer()); + BlurY_PS.Release(DevicePointer()); + CoarseAO_PS.Release(DevicePointer()); + CoarseAO_GS.Release(DevicePointer()); + } + + Generated::FullScreenTriangle_VS FullScreenTriangle_VS; + Generated::CopyDepth_PS CopyDepth_PS; + Generated::LinearizeDepth_PS LinearizeDepth_PS; + Generated::DeinterleaveDepth_PS DeinterleaveDepth_PS; + Generated::DebugNormals_PS DebugNormals_PS; + Generated::ReconstructNormal_PS ReconstructNormal_PS; + Generated::ReinterleaveAO_PS ReinterleaveAO_PS; + Generated::BlurX_PS BlurX_PS; + Generated::BlurY_PS BlurY_PS; + Generated::CoarseAO_PS CoarseAO_PS; + Generated::CoarseAO_GS CoarseAO_GS; +}; + +#if ENABLE_DEBUG_MODES + +#include "shaders/out/D3D11/HBAO_PS.h" +#include "shaders/out/D3D11/DebugAO_PS.h" + +struct DebugShaders +{ + void Create(ID3D12Device* pDevice) + { + HBAO_PS.Create(pDevice); + DebugAO_PS.Create(pDevice); + } + void Release() + { + HBAO_PS.Release(); + DebugAO_PS.Release(); + } + + Generated::HBAO_PS HBAO_PS; + Generated::DebugAO_PS DebugAO_PS; +}; + +#endif //ENABLE_DEBUG_MODES + +} // namespace D3D12 +} // namespace SSAO +} // namespace GFSDK + +#endif // SUPPORT_D3D12 |