aboutsummaryrefslogtreecommitdiff
path: root/demo/DemoAppD3D12/NvFlowInteropD3D12.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'demo/DemoAppD3D12/NvFlowInteropD3D12.cpp')
-rw-r--r--demo/DemoAppD3D12/NvFlowInteropD3D12.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/demo/DemoAppD3D12/NvFlowInteropD3D12.cpp b/demo/DemoAppD3D12/NvFlowInteropD3D12.cpp
new file mode 100644
index 0000000..ce79bcc
--- /dev/null
+++ b/demo/DemoAppD3D12/NvFlowInteropD3D12.cpp
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2014-2017, 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.
+ */
+
+#include <d3d12.h>
+
+#include "../DemoApp/NvFlowInterop.h"
+
+#include "NvFlowContextD3D12.h"
+#include "appD3D12Ctx.h"
+
+NvFlowDescriptorReserveHandleD3D12 NvFlowInteropReserveDescriptors(void* userdata, NvFlowUint numDescriptors, NvFlowUint64 lastFenceCompleted, NvFlowUint64 nextFenceValue)
+{
+ auto appctx = static_cast<AppGraphCtx*>(userdata);
+ auto srcHandle = appctx->m_dynamicHeapCbvSrvUav.reserveDescriptors(numDescriptors, lastFenceCompleted, nextFenceValue);
+ NvFlowDescriptorReserveHandleD3D12 handle = {};
+ handle.heap = srcHandle.heap;
+ handle.descriptorSize = srcHandle.descriptorSize;
+ handle.cpuHandle = srcHandle.cpuHandle;
+ handle.gpuHandle = srcHandle.gpuHandle;
+ return handle;
+}
+
+void NvFlowInteropUpdateContextDesc(NvFlowContextDescD3D12* desc, AppGraphCtx* appctx)
+{
+ desc->device = appctx->m_device;
+ desc->commandQueue = appctx->m_commandQueue;
+ desc->commandQueueFence = appctx->m_fence;
+ desc->commandList = appctx->m_commandList;
+ desc->lastFenceCompleted = appctx->m_lastFenceComplete;
+ desc->nextFenceValue = appctx->m_thisFrameFenceID;
+
+ desc->dynamicHeapCbvSrvUav.userdata = appctx;
+ desc->dynamicHeapCbvSrvUav.reserveDescriptors = NvFlowInteropReserveDescriptors;
+}
+
+NvFlowContext* NvFlowInteropCreateContext(AppGraphCtx* appctx)
+{
+ NvFlowContextDescD3D12 desc = {};
+ NvFlowInteropUpdateContextDesc(&desc, appctx);
+ return NvFlowCreateContextD3D12(NV_FLOW_VERSION, &desc);
+}
+
+NvFlowDepthStencilView* NvFlowInteropCreateDepthStencilView(AppGraphCtx* appctx, NvFlowContext* flowctx)
+{
+ NvFlowDepthStencilViewDescD3D12 desc = {};
+ desc.dsvHandle = appctx->m_current_dsvHandle;
+ desc.dsvDesc = appctx->m_current_dsvDesc;
+ desc.srvHandle = appctx->m_current_depth_srvHandle;
+ desc.srvDesc = appctx->m_current_depth_srvDesc;
+ desc.resource = appctx->m_depthStencil;
+ desc.currentState = D3D12_RESOURCE_STATE_DEPTH_WRITE;
+ desc.viewport = appctx->m_viewport;
+ return NvFlowCreateDepthStencilViewD3D12(flowctx, &desc);
+}
+
+NvFlowRenderTargetView* NvFlowInteropCreateRenderTargetView(AppGraphCtx* appctx, NvFlowContext* flowctx)
+{
+ NvFlowRenderTargetViewDescD3D12 desc = {};
+ desc.rtvHandle = appctx->m_current_rtvHandle;
+ desc.rtvDesc = appctx->m_current_rtvDesc;
+ desc.resource = appctx->m_current_renderTarget;
+ desc.currentState = D3D12_RESOURCE_STATE_RENDER_TARGET;
+ desc.viewport = appctx->m_viewport;
+ desc.scissor = appctx->m_scissorRect;
+ return NvFlowCreateRenderTargetViewD3D12(flowctx, &desc);
+}
+
+void NvFlowInteropUpdateContext(NvFlowContext* context, AppGraphCtx* appctx)
+{
+ NvFlowContextDescD3D12 desc = {};
+ NvFlowInteropUpdateContextDesc(&desc, appctx);
+ NvFlowUpdateContextD3D12(context, &desc);
+}
+
+void NvFlowInteropUpdateDepthStencilView(NvFlowDepthStencilView* view, AppGraphCtx* appctx, NvFlowContext* flowctx)
+{
+ NvFlowDepthStencilViewDescD3D12 desc = {};
+ desc.dsvHandle = appctx->m_current_dsvHandle;
+ desc.dsvDesc = appctx->m_current_dsvDesc;
+ desc.srvHandle = appctx->m_current_depth_srvHandle;
+ desc.srvDesc = appctx->m_current_depth_srvDesc;
+ desc.resource = appctx->m_depthStencil;
+ desc.currentState = D3D12_RESOURCE_STATE_DEPTH_WRITE;
+ desc.viewport = appctx->m_viewport;
+ NvFlowUpdateDepthStencilViewD3D12(flowctx, view, &desc);
+}
+
+void NvFlowInteropUpdateRenderTargetView(NvFlowRenderTargetView* view, AppGraphCtx* appctx, NvFlowContext* flowctx)
+{
+ NvFlowRenderTargetViewDescD3D12 desc = {};
+ desc.rtvHandle = appctx->m_current_rtvHandle;
+ desc.rtvDesc = appctx->m_current_rtvDesc;
+ desc.resource = appctx->m_current_renderTarget;
+ desc.currentState = D3D12_RESOURCE_STATE_RENDER_TARGET;
+ desc.viewport = appctx->m_viewport;
+ desc.scissor = appctx->m_scissorRect;
+ NvFlowUpdateRenderTargetViewD3D12(flowctx, view, &desc);
+} \ No newline at end of file