Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
62a2a26
chore: dx12 swapchain attempt
doodlum Jan 28, 2025
e125148
style: 🎨 apply clang-format changes
doodlum Jan 28, 2025
4ca5785
chore: small fixes
doodlum Jan 28, 2025
02d0f8a
chore: maytbe better
doodlum Jan 28, 2025
3182e5d
style: 🎨 apply clang-format changes
doodlum Jan 28, 2025
94c3252
chore: more experiments
doodlum Jan 30, 2025
ee6038b
style: 🎨 apply clang-format changes
doodlum Jan 30, 2025
84535e0
feat: load ffx dx12 dll
doodlum Feb 27, 2025
53a6767
style: 🎨 apply clang-format changes
doodlum Feb 27, 2025
bfa6a99
chore: add more headers
doodlum Feb 27, 2025
6ec217f
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Feb 27, 2025
7d76f21
feat: c++ api
doodlum Feb 27, 2025
fe4f5cf
style: 🎨 apply clang-format changes
doodlum Feb 27, 2025
64a5224
chore: more ffx code
doodlum Feb 27, 2025
c24b77d
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Feb 27, 2025
9b4a8c4
style: 🎨 apply clang-format changes
doodlum Feb 27, 2025
4425545
feat: fsr frame generation
doodlum Feb 28, 2025
897ae2e
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Feb 28, 2025
03a7163
style: 🎨 apply clang-format changes
doodlum Feb 28, 2025
463cfa4
fix: fidelityfx fg
doodlum Feb 28, 2025
51a4267
Merge branch 'dx12-swapchain' into dx12merge-1
doodlum Feb 28, 2025
9d52ad0
style: 🎨 apply clang-format changes
doodlum Feb 28, 2025
153ef40
fix: most merge errors
doodlum Feb 28, 2025
e2df78c
Merge pull request #981 from doodlum/dx12merge-1
doodlum Feb 28, 2025
bea8512
chore: cleanup
doodlum Feb 28, 2025
bdb3148
chore: enable async
doodlum Feb 28, 2025
5e2c110
chore: syncing things
doodlum Feb 28, 2025
cf17965
style: 🎨 apply clang-format changes
doodlum Feb 28, 2025
ced98de
fix: fg
doodlum Feb 28, 2025
d08ef4f
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Feb 28, 2025
086bc64
style: 🎨 apply clang-format changes
doodlum Feb 28, 2025
2589ede
chore: fix syncing
doodlum Feb 28, 2025
b559c16
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Feb 28, 2025
0e68fe7
style: 🎨 apply clang-format changes
doodlum Feb 28, 2025
88adb06
chore: cleanup
doodlum Feb 28, 2025
978c127
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Feb 28, 2025
00e2d80
feat: updated dlss/nis
doodlum Mar 1, 2025
471a7d6
style: 🎨 apply clang-format changes
doodlum Mar 1, 2025
8788a13
chore: better latency
doodlum Mar 1, 2025
bd786e6
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 1, 2025
24995d2
style: 🎨 apply clang-format changes
doodlum Mar 1, 2025
56f4eb7
fix: swapchain when fg disabled
doodlum Mar 1, 2025
81f205f
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 1, 2025
39303ff
chore: cleanup
doodlum Mar 1, 2025
707316a
chore: cleanup settings
doodlum Mar 1, 2025
ec02909
chore: remove dlss fg
doodlum Mar 1, 2025
bc838cb
style: 🎨 apply clang-format changes
doodlum Mar 1, 2025
23743f5
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 1, 2025
a6d66ac
fix: maybe fixed sync
doodlum Mar 1, 2025
182b2a4
style: 🎨 apply clang-format changes
doodlum Mar 1, 2025
e045037
fix: probably fixed
doodlum Mar 1, 2025
d8fbb20
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 1, 2025
140e508
style: 🎨 apply clang-format changes
doodlum Mar 1, 2025
b1ccfb5
chore: follow microsoft example
doodlum Mar 1, 2025
678a6b2
Merge branches 'dx12-swapchain' and 'dx12-swapchain' of https://githu…
doodlum Mar 1, 2025
62ac72f
style: 🎨 apply clang-format changes
doodlum Mar 1, 2025
4098bf4
chore: use async fg
doodlum Mar 1, 2025
9acee69
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 1, 2025
acd509c
fix: force disable exclusive fullscreen
doodlum Mar 1, 2025
17b0537
feat: frame limiter for fsr fg
doodlum Mar 1, 2025
79126df
feat: vsync and adaptive sync options
doodlum Mar 1, 2025
7f29a6a
style: 🎨 apply clang-format changes
doodlum Mar 1, 2025
366ae27
chore: cleanup
doodlum Mar 1, 2025
e28cbf1
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 1, 2025
e4f11c3
fix: fsr fg on older gpus
doodlum Mar 1, 2025
9b37527
fix: async compute not on
doodlum Mar 2, 2025
526231c
chore: further cleanup and fixing
doodlum Mar 2, 2025
af55915
chore: rename
doodlum Mar 2, 2025
ce15958
style: 🎨 apply clang-format changes
doodlum Mar 2, 2025
7c79846
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 2, 2025
4596a73
chore: rename
doodlum Mar 2, 2025
7bab689
feat: ui composition and passthrough
doodlum Mar 2, 2025
c813df4
style: 🎨 apply clang-format changes
doodlum Mar 2, 2025
cf1258b
fix: maybe better ui hook
doodlum Mar 2, 2025
70db245
chore: dont use flags
doodlum Mar 2, 2025
93d891f
chore: limiter tweaks
doodlum Mar 2, 2025
3a7628c
chore: do not force proxy
doodlum Mar 2, 2025
753e11e
style: 🎨 apply clang-format changes
doodlum Mar 2, 2025
9d0e616
fix: remove ui composition
doodlum Mar 2, 2025
c070db5
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 2, 2025
d5bfd24
style: 🎨 apply clang-format changes
doodlum Mar 2, 2025
a151129
chore: add jitter to fg
doodlum Mar 2, 2025
55cccda
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 2, 2025
0e38874
style: 🎨 apply clang-format changes
doodlum Mar 2, 2025
678022e
fix: use RCAS instead of NIS
doodlum Mar 2, 2025
37866ad
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 2, 2025
85ff6f3
chore: move ffx into a folder
doodlum Mar 2, 2025
5273fa1
chore: let fsr fg handle tearing
doodlum Mar 2, 2025
42fb676
chore: default to VRR
doodlum Mar 2, 2025
7d51249
feat: add NIS sharpen back and use for everything
doodlum Mar 2, 2025
f719ed3
style: 🎨 apply clang-format changes
doodlum Mar 2, 2025
f3bf9d8
chore: fixing up
doodlum Mar 2, 2025
a689aa9
chore: stuff
doodlum Mar 2, 2025
f8d6a2e
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 2, 2025
1676cd9
style: 🎨 apply clang-format changes
doodlum Mar 2, 2025
80d979a
chore: remove some statics
doodlum Mar 2, 2025
bfd7cc8
chore: move some things to global
doodlum Mar 2, 2025
e725e2d
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 2, 2025
4405e13
chore: nis tweaks
doodlum Mar 2, 2025
aed8211
chore: modify ui hook
doodlum Mar 2, 2025
8cc6eeb
chore: dx12 swapchain in global
doodlum Mar 2, 2025
3a30c3a
style: 🎨 apply clang-format changes
doodlum Mar 2, 2025
298bcdf
chore: d3d12 interop work
doodlum Mar 2, 2025
5b3dd85
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 2, 2025
edbf0a0
chore: no vr for fg
doodlum Mar 2, 2025
bef88de
chore: no feature level check
doodlum Mar 3, 2025
dce0924
style: 🎨 apply clang-format changes
doodlum Mar 3, 2025
3c6302b
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 3, 2025
f8cca21
fix: frame limiter
doodlum Mar 3, 2025
7004984
chore: update dlss dll
doodlum Mar 3, 2025
4285765
chore: use preset K for dlss
doodlum Mar 3, 2025
9465b98
chore: fixes
doodlum Mar 3, 2025
3345dc3
chore: decrease required directx version
doodlum Mar 3, 2025
8160380
feat: fg diagnostics
doodlum Mar 3, 2025
a7014a3
chore: change default dlss preset
doodlum Mar 3, 2025
c2a68c9
style: 🎨 apply clang-format changes
doodlum Mar 3, 2025
8710df8
Merge branch 'dx12-swapchain' of https://github.com/doodlum/skyrim-co…
doodlum Mar 3, 2025
daf12a1
chore: better docs
doodlum Mar 3, 2025
e1bc1f7
chore: remove streamline
doodlum Mar 3, 2025
ad96d27
chore: remove option to disable fg/upscaling
doodlum Mar 3, 2025
c254358
style: 🎨 apply clang-format changes
doodlum Mar 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
[submodule "extern/CommonLibSSE-NG"]
path = extern/CommonLibSSE-NG
url = https://github.com/alandtse/CommonLibVR.git

[submodule "extern/Streamline"]
path = extern/Streamline
url = https://github.com/FlayaN/Streamline.git
[submodule "extern/FidelityFX-SDK"]
path = extern/FidelityFX-SDK
url = https://github.com/MapleHinata/FidelityFX-SDK.git
[submodule "extern/Streamline-DX12"]
path = extern/Streamline-DX12
url = https://github.com/NVIDIAGameWorks/Streamline.git
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ target_link_libraries(
efsw::efsw
Tracy::TracyClient
Streamline
d3d12.lib
)

# https://gitlab.kitware.com/cmake/cmake/-/issues/24922#note_1371990
Expand Down
3 changes: 0 additions & 3 deletions cmake/FidelityFX-SDK.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,5 @@ target_link_libraries(
${PROJECT_NAME}
PRIVATE
ffx_backend_dx11_x64
ffx_frameinterpolation_x64
ffx_fsr3_x64
ffx_fsr3upscaler_x64
ffx_opticalflow_x64
)
2 changes: 1 addition & 1 deletion cmake/Streamline/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.21)
add_library(Streamline INTERFACE)

target_include_directories(
Streamline INTERFACE ${CMAKE_SOURCE_DIR}/extern/Streamline/include)
Streamline INTERFACE ${CMAKE_SOURCE_DIR}/extern/Streamline-DX12/include)

if(MSVC)
target_compile_options(Streamline INTERFACE /wd5103)
Expand Down
1 change: 0 additions & 1 deletion extern/Streamline
Submodule Streamline deleted from f465f4
1 change: 1 addition & 0 deletions extern/Streamline-DX12
Submodule Streamline-DX12 added at fbe73b
Binary file not shown.

This file was deleted.

Binary file not shown.
Binary file not shown.

This file was deleted.

318 changes: 318 additions & 0 deletions include/dx12/ffx_api_dx12.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,318 @@
// 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.

#pragma once
#include "../ffx_api.h"
#include "../ffx_api_types.h"
#include <d3d12.h>
#include <dxgi.h>
#include <dxgi1_5.h>

#define FFX_API_CREATE_CONTEXT_DESC_TYPE_BACKEND_DX12 0x0000002u
struct ffxCreateBackendDX12Desc
{
ffxCreateContextDescHeader header;
ID3D12Device *device; ///< Device on which the backend will run.
};

#define FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_DX12 0x00030000u

#define FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_WRAP_DX12 0x30001u
struct ffxCreateContextDescFrameGenerationSwapChainWrapDX12
{
ffxCreateContextDescHeader header;
IDXGISwapChain4** swapchain; ///< Input swap chain to wrap, output frame interpolation swapchain.
ID3D12CommandQueue* gameQueue; ///< Input command queue to be used for presentation.
};

#define FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_NEW_DX12 0x30005u
struct ffxCreateContextDescFrameGenerationSwapChainNewDX12
{
ffxCreateContextDescHeader header;
IDXGISwapChain4** swapchain; ///< Output frame interpolation swapchain.
DXGI_SWAP_CHAIN_DESC* desc; ///< Swap chain creation parameters.
IDXGIFactory* dxgiFactory; ///< IDXGIFactory to use for DX12 swapchain creation.
ID3D12CommandQueue* gameQueue; ///< Input command queue to be used for presentation.
};

#define FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_FOR_HWND_DX12 0x30006u
struct ffxCreateContextDescFrameGenerationSwapChainForHwndDX12
{
ffxCreateContextDescHeader header;
IDXGISwapChain4** swapchain; ///< Output frame interpolation swapchain.
HWND hwnd; ///< HWND handle for the calling application;
DXGI_SWAP_CHAIN_DESC1* desc; ///< Swap chain creation parameters.
DXGI_SWAP_CHAIN_FULLSCREEN_DESC* fullscreenDesc; ///< Fullscreen swap chain creation parameters.
IDXGIFactory* dxgiFactory; ///< IDXGIFactory to use for DX12 swapchain creation.
ID3D12CommandQueue* gameQueue; ///< Input command queue to be used for presentation.
};

#define FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_REGISTERUIRESOURCE_DX12 0x30002u
struct ffxConfigureDescFrameGenerationSwapChainRegisterUiResourceDX12
{
ffxConfigureDescHeader header;
struct FfxApiResource uiResource; ///< Resource containing user interface for composition. May be empty.
uint32_t flags; ///< Zero or combination of values from FfxApiUiCompositionFlags.
};

#define FFX_API_QUERY_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_INTERPOLATIONCOMMANDLIST_DX12 0x30003u
struct ffxQueryDescFrameGenerationSwapChainInterpolationCommandListDX12
{
ffxQueryDescHeader header;
void** pOutCommandList; ///< Output command list (ID3D12GraphicsCommandList) to be used for frame generation dispatch.
};

#define FFX_API_QUERY_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_INTERPOLATIONTEXTURE_DX12 0x30004u
struct ffxQueryDescFrameGenerationSwapChainInterpolationTextureDX12
{
ffxQueryDescHeader header;
struct FfxApiResource *pOutTexture; ///< Output resource in which the frame interpolation result should be placed.
};

#define FFX_API_DISPATCH_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_WAIT_FOR_PRESENTS_DX12 0x30007u
struct ffxDispatchDescFrameGenerationSwapChainWaitForPresentsDX12
{
ffxDispatchDescHeader header;
};

#define FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_KEYVALUE_DX12 0x30008u
struct ffxConfigureDescFrameGenerationSwapChainKeyValueDX12
{
ffxConfigureDescHeader header;
uint64_t key; ///< Configuration key, member of the FfxApiConfigureFrameGenerationSwapChainKeyDX12 enumeration.
uint64_t u64; ///< Integer value or enum value to set.
void* ptr; ///< Pointer to set or pointer to value to set.
};

//enum value matches enum FfxFrameInterpolationSwapchainConfigureKey
enum FfxApiConfigureFrameGenerationSwapChainKeyDX12
{
FFX_API_CONFIGURE_FG_SWAPCHAIN_KEY_WAITCALLBACK = 0, ///< Sets FfxWaitCallbackFunc
FFX_API_CONFIGURE_FG_SWAPCHAIN_KEY_FRAMEPACINGTUNING = 2, ///< Sets FfxApiSwapchainFramePacingTuning
};

#define FFX_API_QUERY_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_GPU_MEMORY_USAGE_DX12 0x00030009u
struct ffxQueryFrameGenerationSwapChainGetGPUMemoryUsageDX12
{
ffxQueryDescHeader header;
struct FfxApiEffectMemoryUsage* gpuMemoryUsageFrameGenerationSwapchain;
};

#if defined(__cplusplus)

static inline uint32_t ffxApiGetSurfaceFormatDX12(DXGI_FORMAT format)
{
switch (format)
{
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
return FFX_API_SURFACE_FORMAT_R32G32B32A32_TYPELESS;
case DXGI_FORMAT_R32G32B32A32_FLOAT:
return FFX_API_SURFACE_FORMAT_R32G32B32A32_FLOAT;
case DXGI_FORMAT_R32G32B32A32_UINT:
return FFX_API_SURFACE_FORMAT_R32G32B32A32_UINT;
//case DXGI_FORMAT_R32G32B32A32_SINT:
//case DXGI_FORMAT_R32G32B32_TYPELESS:
//case DXGI_FORMAT_R32G32B32_FLOAT:
//case DXGI_FORMAT_R32G32B32_UINT:
//case DXGI_FORMAT_R32G32B32_SINT:

case DXGI_FORMAT_R16G16B16A16_TYPELESS:
return FFX_API_SURFACE_FORMAT_R16G16B16A16_TYPELESS;
case DXGI_FORMAT_R16G16B16A16_FLOAT:
return FFX_API_SURFACE_FORMAT_R16G16B16A16_FLOAT;
//case DXGI_FORMAT_R16G16B16A16_UNORM:
//case DXGI_FORMAT_R16G16B16A16_UINT:
//case DXGI_FORMAT_R16G16B16A16_SNORM:
//case DXGI_FORMAT_R16G16B16A16_SINT:

case DXGI_FORMAT_R32G32_TYPELESS:
return FFX_API_SURFACE_FORMAT_R32G32_TYPELESS;
case DXGI_FORMAT_R32G32_FLOAT:
return FFX_API_SURFACE_FORMAT_R32G32_FLOAT;
//case DXGI_FORMAT_R32G32_FLOAT:
//case DXGI_FORMAT_R32G32_UINT:
//case DXGI_FORMAT_R32G32_SINT:

case DXGI_FORMAT_R32G8X24_TYPELESS:
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
return FFX_API_SURFACE_FORMAT_R32_FLOAT;

case DXGI_FORMAT_R24G8_TYPELESS:
case DXGI_FORMAT_D24_UNORM_S8_UINT:
case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
return FFX_API_SURFACE_FORMAT_R32_UINT;

case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
return FFX_API_SURFACE_FORMAT_R8_UINT;

case DXGI_FORMAT_R10G10B10A2_TYPELESS:
return FFX_API_SURFACE_FORMAT_R10G10B10A2_TYPELESS;
case DXGI_FORMAT_R10G10B10A2_UNORM:
return FFX_API_SURFACE_FORMAT_R10G10B10A2_UNORM;
//case DXGI_FORMAT_R10G10B10A2_UINT:

case DXGI_FORMAT_R11G11B10_FLOAT:
return FFX_API_SURFACE_FORMAT_R11G11B10_FLOAT;

case DXGI_FORMAT_R8G8B8A8_TYPELESS:
return FFX_API_SURFACE_FORMAT_R8G8B8A8_TYPELESS;
case DXGI_FORMAT_R8G8B8A8_UNORM:
return FFX_API_SURFACE_FORMAT_R8G8B8A8_UNORM;
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
return FFX_API_SURFACE_FORMAT_R8G8B8A8_SRGB;
//case DXGI_FORMAT_R8G8B8A8_UINT:
case DXGI_FORMAT_R8G8B8A8_SNORM:
return FFX_API_SURFACE_FORMAT_R8G8B8A8_SNORM;

case DXGI_FORMAT_B8G8R8A8_TYPELESS:
return FFX_API_SURFACE_FORMAT_B8G8R8A8_TYPELESS;
case DXGI_FORMAT_B8G8R8A8_UNORM:
return FFX_API_SURFACE_FORMAT_B8G8R8A8_UNORM;
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
return FFX_API_SURFACE_FORMAT_B8G8R8A8_SRGB;

case DXGI_FORMAT_R16G16_TYPELESS:
return FFX_API_SURFACE_FORMAT_R16G16_TYPELESS;
case DXGI_FORMAT_R16G16_FLOAT:
return FFX_API_SURFACE_FORMAT_R16G16_FLOAT;
//case DXGI_FORMAT_R16G16_UNORM:
case DXGI_FORMAT_R16G16_UINT:
return FFX_API_SURFACE_FORMAT_R16G16_UINT;
//case DXGI_FORMAT_R16G16_SNORM
//case DXGI_FORMAT_R16G16_SINT

//case DXGI_FORMAT_R32_SINT:
case DXGI_FORMAT_R32_UINT:
return FFX_API_SURFACE_FORMAT_R32_UINT;
case DXGI_FORMAT_R32_TYPELESS:
return FFX_API_SURFACE_FORMAT_R32_TYPELESS;
case DXGI_FORMAT_D32_FLOAT:
case DXGI_FORMAT_R32_FLOAT:
return FFX_API_SURFACE_FORMAT_R32_FLOAT;

case DXGI_FORMAT_R8G8_UINT:
return FFX_API_SURFACE_FORMAT_R8G8_UINT;
case DXGI_FORMAT_R8G8_TYPELESS:
return FFX_API_SURFACE_FORMAT_R8G8_TYPELESS;
case DXGI_FORMAT_R8G8_UNORM:
return FFX_API_SURFACE_FORMAT_R8G8_UNORM;
//case DXGI_FORMAT_R8G8_SNORM:
//case DXGI_FORMAT_R8G8_SINT:

case DXGI_FORMAT_R16_TYPELESS:
return FFX_API_SURFACE_FORMAT_R16_TYPELESS;
case DXGI_FORMAT_R16_FLOAT:
return FFX_API_SURFACE_FORMAT_R16_FLOAT;
case DXGI_FORMAT_R16_UINT:
return FFX_API_SURFACE_FORMAT_R16_UINT;
case DXGI_FORMAT_D16_UNORM:
case DXGI_FORMAT_R16_UNORM:
return FFX_API_SURFACE_FORMAT_R16_UNORM;
case DXGI_FORMAT_R16_SNORM:
return FFX_API_SURFACE_FORMAT_R16_SNORM;
//case DXGI_FORMAT_R16_SINT:

case DXGI_FORMAT_R8_TYPELESS:
return FFX_API_SURFACE_FORMAT_R8_TYPELESS;
case DXGI_FORMAT_R8_UNORM:
case DXGI_FORMAT_A8_UNORM:
return FFX_API_SURFACE_FORMAT_R8_UNORM;
case DXGI_FORMAT_R8_UINT:
return FFX_API_SURFACE_FORMAT_R8_UINT;
//case DXGI_FORMAT_R8_SNORM:
//case DXGI_FORMAT_R8_SINT:
//case DXGI_FORMAT_R1_UNORM:

case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
return FFX_API_SURFACE_FORMAT_R9G9B9E5_SHAREDEXP;

case DXGI_FORMAT_UNKNOWN:
default:
return FFX_API_SURFACE_FORMAT_UNKNOWN;
}
}

static inline FfxApiResource ffxApiGetResourceDX12(ID3D12Resource* pRes, uint32_t state = FFX_API_RESOURCE_STATE_COMPUTE_READ, uint32_t additionalUsages = 0)
{
FfxApiResource res{};
res.resource = pRes;
res.state = state;
if (!pRes) return res;

D3D12_RESOURCE_DESC desc = pRes->GetDesc();
if (desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
{
res.description.flags = FFX_API_RESOURCE_FLAGS_NONE;
res.description.usage = FFX_API_RESOURCE_USAGE_UAV;
res.description.size = static_cast<uint32_t>(desc.Width);
res.description.stride = static_cast<uint32_t>(desc.Height);
res.description.type = FFX_API_RESOURCE_TYPE_BUFFER;
}
else
{
res.description.flags = FFX_API_RESOURCE_FLAGS_NONE;
if (desc.Format == DXGI_FORMAT_D16_UNORM || desc.Format == DXGI_FORMAT_D32_FLOAT)
{
res.description.usage = FFX_API_RESOURCE_USAGE_DEPTHTARGET;
}
else if (desc.Format == DXGI_FORMAT_D24_UNORM_S8_UINT || desc.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT)
{
res.description.usage = FFX_API_RESOURCE_USAGE_DEPTHTARGET | FFX_API_RESOURCE_USAGE_STENCILTARGET;
}
else
{
res.description.usage = FFX_API_RESOURCE_USAGE_READ_ONLY;
}

if (desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS)
res.description.usage |= FFX_API_RESOURCE_USAGE_UAV;

res.description.width = static_cast<uint32_t>(desc.Width);
res.description.height = static_cast<uint32_t>(desc.Height);
res.description.depth = static_cast<uint32_t>(desc.DepthOrArraySize);
res.description.mipCount = static_cast<uint32_t>(desc.MipLevels);

switch (desc.Dimension)
{
case D3D12_RESOURCE_DIMENSION_TEXTURE1D:
res.description.type = FFX_API_RESOURCE_TYPE_TEXTURE1D;
break;
case D3D12_RESOURCE_DIMENSION_TEXTURE2D:
if (desc.DepthOrArraySize == 6)
res.description.type = FFX_API_RESOURCE_TYPE_TEXTURE_CUBE;
else
res.description.type = FFX_API_RESOURCE_TYPE_TEXTURE2D;
break;
case D3D12_RESOURCE_DIMENSION_TEXTURE3D:
res.description.type = FFX_API_RESOURCE_TYPE_TEXTURE3D;
break;
}
}

res.description.format = ffxApiGetSurfaceFormatDX12(desc.Format);
res.description.usage |= additionalUsages;
return res;
}

#endif
Loading