1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
/*
* 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.
*/
#pragma once
// --------------------------- NvFlowContextD3D12 -------------------------------
///@defgroup NvFlowContextD3D12
///@{
struct NvFlowDepthStencilViewDescD3D12
{
D3D12_CPU_DESCRIPTOR_HANDLE dsvHandle;
D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc;
ID3D12Resource* dsvResource;
D3D12_RESOURCE_STATES dsvCurrentState;
D3D12_CPU_DESCRIPTOR_HANDLE srvHandle;
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc;
ID3D12Resource* srvResource;
D3D12_RESOURCE_STATES srvCurrentState;
D3D12_VIEWPORT viewport;
};
struct NvFlowRenderTargetViewDescD3D12
{
D3D12_CPU_DESCRIPTOR_HANDLE rtvHandle;
D3D12_RENDER_TARGET_VIEW_DESC rtvDesc;
ID3D12Resource* resource;
D3D12_RESOURCE_STATES currentState;
D3D12_VIEWPORT viewport;
D3D12_RECT scissor;
};
struct NvFlowDescriptorReserveHandleD3D12
{
ID3D12DescriptorHeap* heap;
NvFlowUint descriptorSize;
D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle;
D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle;
};
struct NvFlowDynamicDescriptorHeapD3D12
{
void* userdata;
NvFlowDescriptorReserveHandleD3D12 (*reserveDescriptors)(void* userdata, NvFlowUint numDescriptors, NvFlowUint64 lastFenceCompleted, NvFlowUint64 nextFenceValue);
};
struct NvFlowContextDescD3D12
{
ID3D12Device* device; //!< The desired d3d12 device to use
ID3D12CommandQueue* commandQueue; //!< The commandQueue commandList will be submit on
ID3D12Fence* commandQueueFence; //!< Fence marking events on this queue
ID3D12GraphicsCommandList* commandList; //!< The commandlist for recording
UINT64 lastFenceCompleted; //!< The last fence completed on commandQueue
UINT64 nextFenceValue; //!< The fence value signaled after commandList is submitted
NvFlowDynamicDescriptorHeapD3D12 dynamicHeapCbvSrvUav; //!< Optional interface to share app descriptor heap with Flow
};
struct NvFlowResourceViewDescD3D12
{
D3D12_CPU_DESCRIPTOR_HANDLE srvHandle;
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc;
ID3D12Resource* resource;
D3D12_RESOURCE_STATES* currentState;
};
struct NvFlowResourceRWViewDescD3D12
{
NvFlowResourceViewDescD3D12 resourceView;
D3D12_CPU_DESCRIPTOR_HANDLE uavHandle;
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc;
};
/**
* Creates a graphics/compute context for Flow.
*
* @param[in] version Should be set by app to NV_FLOW_VERSION.
* @param[in] desc A graphics-API dependent structure containing data needed for a FlowContext to interoperate with the app.
*
* @return The created Flow context.
*/
NV_FLOW_API NvFlowContext* NvFlowCreateContextD3D12(NvFlowUint version, const NvFlowContextDescD3D12* desc);
/**
* Creates a Flow depth stencil view based on information provided by the application.
*
* @param[in] context The Flow context to create and use the depth stencil view.
* @param[in] desc The graphics API dependent description.
*
* @return The created Flow depth stencil view.
*/
NV_FLOW_API NvFlowDepthStencilView* NvFlowCreateDepthStencilViewD3D12(NvFlowContext* context, const NvFlowDepthStencilViewDescD3D12* desc);
/**
* Creates a Flow render target view based on information provided by the application.
*
* @param[in] context The Flow context to create and use the render target view.
* @param[in] desc The graphics API dependent description.
*
* @return The created Flow render target view.
*/
NV_FLOW_API NvFlowRenderTargetView* NvFlowCreateRenderTargetViewD3D12(NvFlowContext* context, const NvFlowRenderTargetViewDescD3D12* desc);
/**
* Updates a Flow context with information provided by the application.
*
* @param[in] context The Flow context to update.
* @param[in] desc The graphics API dependent description.
*/
NV_FLOW_API void NvFlowUpdateContextD3D12(NvFlowContext* context, const NvFlowContextDescD3D12* desc);
/**
* Gets a Flow context description from a Flow context.
*
* @param[in] context The Flow context.
* @param[out] desc The graphics API dependent description.
*/
NV_FLOW_API void NvFlowUpdateContextDescD3D12(NvFlowContext* context, NvFlowContextDescD3D12* desc);
/**
* Updates a Flow depth stencil view with information provided by the application.
*
* @param[in] context The Flow context used to create the depth stencil view.
* @param[in] view The Flow depth stencil view to update.
* @param[in] desc The graphics API dependent description.
*/
NV_FLOW_API void NvFlowUpdateDepthStencilViewD3D12(NvFlowContext* context, NvFlowDepthStencilView* view, const NvFlowDepthStencilViewDescD3D12* desc);
/**
* Updates a Flow render target view with information provided by the application.
*
* @param[in] context The Flow context used to create the render target view.
* @param[in] view The Flow render target view to update.
* @param[in] desc The graphics API dependent description.
*/
NV_FLOW_API void NvFlowUpdateRenderTargetViewD3D12(NvFlowContext* context, NvFlowRenderTargetView* view, const NvFlowRenderTargetViewDescD3D12* desc);
/**
* Updates an application visible description with internal Flow resource information.
*
* @param[in] context The Flow context that created the resource.
* @param[in] resource The Flow resource to describe.
* @param[out] desc The graphics API dependent Flow resource description.
*/
NV_FLOW_API void NvFlowUpdateResourceViewDescD3D12(NvFlowContext* context, NvFlowResource* resource, NvFlowResourceViewDescD3D12* desc);
/**
* Updates an application visible description with internal Flow resourceRW information.
*
* @param[in] context The Flow context that created the resourceRW.
* @param[in] buffer The Flow resourceRW to describe.
* @param[out] desc The graphics API dependent Flow resourceRW description.
*/
NV_FLOW_API void NvFlowUpdateResourceRWViewDescD3D12(NvFlowContext* context, NvFlowResourceRW* resourceRW, NvFlowResourceRWViewDescD3D12* desc);
///@}
|