提交 0f023258 编写于 作者: GamebabyRockSun_QQ's avatar GamebabyRockSun_QQ

去除了示例8中所有的d3dx12.h的引用

上级 ab3e5cb4
...@@ -496,13 +496,13 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -496,13 +496,13 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
stBeginResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; stBeginResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
D3D12_RESOURCE_BARRIER stEneResBarrier = {}; D3D12_RESOURCE_BARRIER stEndResBarrier = {};
stEneResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stEndResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
stEneResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; stEndResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
stEneResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get();
stEneResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; stEndResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
stEneResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; stEndResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;
stEneResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stEndResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
D3D12_CPU_DESCRIPTOR_HANDLE stRTVHandle = pIRTVHeap->GetCPUDescriptorHandleForHeapStart(); D3D12_CPU_DESCRIPTOR_HANDLE stRTVHandle = pIRTVHeap->GetCPUDescriptorHandleForHeapStart();
DWORD dwRet = 0; DWORD dwRet = 0;
...@@ -552,8 +552,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -552,8 +552,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
pICMDList->DrawInstanced(3, 1, 0, 0); pICMDList->DrawInstanced(3, 1, 0, 0);
//又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了 //又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了
stEneResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get();
pICMDList->ResourceBarrier(1, &stEneResBarrier); pICMDList->ResourceBarrier(1, &stEndResBarrier);
//关闭命令列表,可以去执行了 //关闭命令列表,可以去执行了
GRS_THROW_IF_FAILED(pICMDList->Close()); GRS_THROW_IF_FAILED(pICMDList->Close());
......
...@@ -932,13 +932,13 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -932,13 +932,13 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
stBeginResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; stBeginResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
D3D12_RESOURCE_BARRIER stEneResBarrier = {}; D3D12_RESOURCE_BARRIER stEndResBarrier = {};
stEneResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stEndResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
stEneResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; stEndResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
stEneResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get();
stEneResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; stEndResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
stEneResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; stEndResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;
stEneResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stEndResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
D3D12_CPU_DESCRIPTOR_HANDLE stRTVHandle = pIRTVHeap->GetCPUDescriptorHandleForHeapStart(); D3D12_CPU_DESCRIPTOR_HANDLE stRTVHandle = pIRTVHeap->GetCPUDescriptorHandleForHeapStart();
DWORD dwRet = 0; DWORD dwRet = 0;
...@@ -990,8 +990,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -990,8 +990,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
pICMDList->DrawInstanced(nVertexCnt, 1, 0, 0); pICMDList->DrawInstanced(nVertexCnt, 1, 0, 0);
//又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了 //又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了
stEneResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get();
pICMDList->ResourceBarrier(1, &stEneResBarrier); pICMDList->ResourceBarrier(1, &stEndResBarrier);
//关闭命令列表,可以去执行了 //关闭命令列表,可以去执行了
GRS_THROW_IF_FAILED(pICMDList->Close()); GRS_THROW_IF_FAILED(pICMDList->Close());
......
...@@ -1059,7 +1059,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1059,7 +1059,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
} }
D3D12_RESOURCE_BARRIER stBeginResBarrier = {}; D3D12_RESOURCE_BARRIER stBeginResBarrier = {};
D3D12_RESOURCE_BARRIER stEneResBarrier = {}; D3D12_RESOURCE_BARRIER stEndResBarrier = {};
{ {
stBeginResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stBeginResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
...@@ -1070,12 +1070,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1070,12 +1070,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
stEneResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stEndResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
stEneResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; stEndResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
stEneResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get();
stEneResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; stEndResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
stEneResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; stEndResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;
stEneResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stEndResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
} }
DWORD dwRet = 0; DWORD dwRet = 0;
...@@ -1126,8 +1126,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1126,8 +1126,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
pICMDList->OMSetRenderTargets(1, &stRTVHandle, FALSE, nullptr); pICMDList->OMSetRenderTargets(1, &stRTVHandle, FALSE, nullptr);
// 继续记录命令,并真正开始新一帧的渲染 // 继续记录命令,并真正开始新一帧的渲染
const float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f }; const float arClearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
pICMDList->ClearRenderTargetView(stRTVHandle, clearColor, 0, nullptr); pICMDList->ClearRenderTargetView(stRTVHandle, arClearColor, 0, nullptr);
//注意我们使用的渲染手法是三角形带,这是最快的绘制矩形的方式,也是很多UI库中核心使用的方法 //注意我们使用的渲染手法是三角形带,这是最快的绘制矩形的方式,也是很多UI库中核心使用的方法
pICMDList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); pICMDList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
pICMDList->IASetVertexBuffers(0, 1, &stVertexBufferView); pICMDList->IASetVertexBuffers(0, 1, &stVertexBufferView);
...@@ -1138,8 +1138,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1138,8 +1138,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
//--------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------
//又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了 //又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了
stEneResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get();
pICMDList->ResourceBarrier( 1, &stEneResBarrier ); pICMDList->ResourceBarrier( 1, &stEndResBarrier );
//关闭命令列表,可以去执行了 //关闭命令列表,可以去执行了
GRS_THROW_IF_FAILED(pICMDList->Close()); GRS_THROW_IF_FAILED(pICMDList->Close());
......
...@@ -1201,7 +1201,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1201,7 +1201,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
} }
D3D12_RESOURCE_BARRIER stBeginResBarrier = {}; D3D12_RESOURCE_BARRIER stBeginResBarrier = {};
D3D12_RESOURCE_BARRIER stEneResBarrier = {}; D3D12_RESOURCE_BARRIER stEndResBarrier = {};
{ {
stBeginResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stBeginResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
...@@ -1212,12 +1212,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1212,12 +1212,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
stEneResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stEndResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
stEneResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; stEndResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
stEneResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get();
stEneResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; stEndResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
stEneResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; stEndResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;
stEneResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stEndResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
} }
//25、记录帧开始时间,和当前时间,以循环结束为界 //25、记录帧开始时间,和当前时间,以循环结束为界
...@@ -1293,8 +1293,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1293,8 +1293,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
pICMDList->RSSetViewports(1, &stViewPort); pICMDList->RSSetViewports(1, &stViewPort);
pICMDList->RSSetScissorRects(1, &stScissorRect); pICMDList->RSSetScissorRects(1, &stScissorRect);
// 继续记录命令,并真正开始新一帧的渲染 // 继续记录命令,并真正开始新一帧的渲染
const float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f }; const float arClearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
pICMDList->ClearRenderTargetView(stRTVHandle, clearColor, 0, nullptr); pICMDList->ClearRenderTargetView(stRTVHandle, arClearColor, 0, nullptr);
//--------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------
pICMDList->SetGraphicsRootSignature(pIRootSignature.Get()); pICMDList->SetGraphicsRootSignature(pIRootSignature.Get());
...@@ -1327,8 +1327,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1327,8 +1327,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
//--------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------
//又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了 //又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了
stEneResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nFrameIndex].Get();
pICMDList->ResourceBarrier(1, &stEneResBarrier); pICMDList->ResourceBarrier(1, &stEndResBarrier);
//关闭命令列表,可以去执行了 //关闭命令列表,可以去执行了
GRS_THROW_IF_FAILED(pICMDList->Close()); GRS_THROW_IF_FAILED(pICMDList->Close());
......
...@@ -1643,7 +1643,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1643,7 +1643,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
} }
D3D12_RESOURCE_BARRIER stBeginResBarrier = {}; D3D12_RESOURCE_BARRIER stBeginResBarrier = {};
D3D12_RESOURCE_BARRIER stEneResBarrier = {}; D3D12_RESOURCE_BARRIER stEndResBarrier = {};
{ {
stBeginResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stBeginResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
stBeginResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; stBeginResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
...@@ -1653,12 +1653,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1653,12 +1653,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
stEneResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stEndResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
stEneResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; stEndResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
stEneResBarrier.Transition.pResource = pIARenderTargets[nCurrentFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nCurrentFrameIndex].Get();
stEneResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; stEndResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
stEneResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; stEndResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;
stEneResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stEndResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
} }
// 记录帧开始时间,和当前时间,以循环结束为界 // 记录帧开始时间,和当前时间,以循环结束为界
...@@ -1765,8 +1765,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1765,8 +1765,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
//=============================================================================================== //===============================================================================================
//又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了 //又一个资源屏障,用于确定渲染已经结束可以提交画面去显示了
stEneResBarrier.Transition.pResource = pIARenderTargets[nCurrentFrameIndex].Get(); stEndResBarrier.Transition.pResource = pIARenderTargets[nCurrentFrameIndex].Get();
pICmdListDirect->ResourceBarrier(1, &stEneResBarrier); pICmdListDirect->ResourceBarrier(1, &stEndResBarrier);
//关闭命令列表,可以去执行了 //关闭命令列表,可以去执行了
GRS_THROW_IF_FAILED(pICmdListDirect->Close()); GRS_THROW_IF_FAILED(pICmdListDirect->Close());
......
...@@ -717,7 +717,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -717,7 +717,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
} }
D3D12_RESOURCE_BARRIER stBeginResBarrier = {}; D3D12_RESOURCE_BARRIER stBeginResBarrier = {};
D3D12_RESOURCE_BARRIER stEneResBarrier = {}; D3D12_RESOURCE_BARRIER stEndResBarrier = {};
{ {
stBeginResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stBeginResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
stBeginResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; stBeginResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
...@@ -727,12 +727,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -727,12 +727,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stBeginResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
stEneResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; stEndResBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
stEneResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; stEndResBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
stEneResBarrier.Transition.pResource = g_pIARenderTargets[nCurrentFrameIndex].Get(); stEndResBarrier.Transition.pResource = g_pIARenderTargets[nCurrentFrameIndex].Get();
stEneResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; stEndResBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
stEneResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; stEndResBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;
stEneResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; stEndResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
} }
UINT nStates = 0; //初始状态为0 UINT nStates = 0; //初始状态为0
...@@ -869,8 +869,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -869,8 +869,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
break; break;
case 2:// 状态2 表示所有的渲染命令列表都记录完成了,开始后处理和执行命令列表 case 2:// 状态2 表示所有的渲染命令列表都记录完成了,开始后处理和执行命令列表
{ {
stEneResBarrier.Transition.pResource = g_pIARenderTargets[nCurrentFrameIndex].Get(); stEndResBarrier.Transition.pResource = g_pIARenderTargets[nCurrentFrameIndex].Get();
pICmdListPost->ResourceBarrier(1, &stEneResBarrier); pICmdListPost->ResourceBarrier(1, &stEndResBarrier);
//关闭命令列表,可以去执行了 //关闭命令列表,可以去执行了
GRS_THROW_IF_FAILED(pICmdListPre->Close()); GRS_THROW_IF_FAILED(pICmdListPre->Close());
......
...@@ -605,7 +605,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -605,7 +605,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
stGPUParams[iGPUIndex].m_pICmdList->SetName(pszDebugName); stGPUParams[iGPUIndex].m_pICmdList->SetName(pszDebugName);
} }
if (iGPUIndex == nIDGPUMain) if ( iGPUIndex == nIDGPUMain )
{// 在主显卡上创建复制命令列表对象 {// 在主显卡上创建复制命令列表对象
GRS_THROW_IF_FAILED(stGPUParams[iGPUIndex].m_pID3D12Device4->CreateCommandList(0 GRS_THROW_IF_FAILED(stGPUParams[iGPUIndex].m_pID3D12Device4->CreateCommandList(0
, D3D12_COMMAND_LIST_TYPE_COPY , D3D12_COMMAND_LIST_TYPE_COPY
...@@ -682,8 +682,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -682,8 +682,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
UINT64 n64szTexture = 0; UINT64 n64szTexture = 0;
D3D12_RESOURCE_DESC stCrossAdapterResDesc = {}; D3D12_RESOURCE_DESC stCrossAdapterResDesc = {};
if (bCrossAdapterTextureSupport) if ( bCrossAdapterTextureSupport )
{ {// 这表示可以在显卡间直接共享Texture,这就省去了Texture来回复制的麻烦
// 如果支持那么直接创建跨显卡资源堆 // 如果支持那么直接创建跨显卡资源堆
stCrossAdapterResDesc = stRenderTargetDesc; stCrossAdapterResDesc = stRenderTargetDesc;
stCrossAdapterResDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER; stCrossAdapterResDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER;
...@@ -694,7 +694,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -694,7 +694,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
n64szTexture = stTextureInfo.SizeInBytes; n64szTexture = stTextureInfo.SizeInBytes;
} }
else else
{ {// 这表示只能在多个显卡间共享Buffer,这也是目前D3D12共享资源的最低要求,通常异构显卡目前只能共享Buffer
// 只能共享Buffer时,只能通过共享的Buffer来回复制Texture,在示例中就主要是复制Render Target Texture
// 如果不支持,那么我们就需要先在主显卡上创建用于复制渲染结果的资源堆,然后再共享堆到辅助显卡上 // 如果不支持,那么我们就需要先在主显卡上创建用于复制渲染结果的资源堆,然后再共享堆到辅助显卡上
D3D12_PLACED_SUBRESOURCE_FOOTPRINT stResLayout = {}; D3D12_PLACED_SUBRESOURCE_FOOTPRINT stResLayout = {};
stGPUParams[nIDGPUMain].m_pID3D12Device4->GetCopyableFootprints( stGPUParams[nIDGPUMain].m_pID3D12Device4->GetCopyableFootprints(
...@@ -716,7 +717,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -716,7 +717,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
stCrossAdapterResDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER; stCrossAdapterResDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER;
} }
// 创建跨显卡共享的资源堆 // 创建跨显卡共享的资源堆,注意是默认堆
D3D12_HEAP_DESC stCrossHeapDesc = {}; D3D12_HEAP_DESC stCrossHeapDesc = {};
stCrossHeapDesc.SizeInBytes = n64szTexture * g_nFrameBackBufCount; stCrossHeapDesc.SizeInBytes = n64szTexture * g_nFrameBackBufCount;
stCrossHeapDesc.Alignment = 0; stCrossHeapDesc.Alignment = 0;
...@@ -730,6 +731,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -730,6 +731,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
GRS_THROW_IF_FAILED(stGPUParams[nIDGPUMain].m_pID3D12Device4->CreateHeap(&stCrossHeapDesc GRS_THROW_IF_FAILED(stGPUParams[nIDGPUMain].m_pID3D12Device4->CreateHeap(&stCrossHeapDesc
, IID_PPV_ARGS(&stGPUParams[nIDGPUMain].m_pICrossAdapterHeap))); , IID_PPV_ARGS(&stGPUParams[nIDGPUMain].m_pICrossAdapterHeap)));
// 在主显卡上得到共享堆的句柄
HANDLE hHeap = nullptr; HANDLE hHeap = nullptr;
GRS_THROW_IF_FAILED(stGPUParams[nIDGPUMain].m_pID3D12Device4->CreateSharedHandle( GRS_THROW_IF_FAILED(stGPUParams[nIDGPUMain].m_pID3D12Device4->CreateSharedHandle(
stGPUParams[nIDGPUMain].m_pICrossAdapterHeap.Get(), stGPUParams[nIDGPUMain].m_pICrossAdapterHeap.Get(),
...@@ -738,6 +740,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -738,6 +740,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
nullptr, nullptr,
&hHeap)); &hHeap));
// 在第二个显卡上打开句柄,实质就是完成了资源堆的共享
HRESULT hrOpenSharedHandle = stGPUParams[nIDGPUSecondary].m_pID3D12Device4->OpenSharedHandle(hHeap HRESULT hrOpenSharedHandle = stGPUParams[nIDGPUSecondary].m_pID3D12Device4->OpenSharedHandle(hHeap
, IID_PPV_ARGS(&stGPUParams[nIDGPUSecondary].m_pICrossAdapterHeap)); , IID_PPV_ARGS(&stGPUParams[nIDGPUSecondary].m_pICrossAdapterHeap));
...@@ -747,7 +750,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -747,7 +750,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
GRS_THROW_IF_FAILED(hrOpenSharedHandle); GRS_THROW_IF_FAILED(hrOpenSharedHandle);
// 以定位方式在共享堆上创建每个显卡上的资源 // 以定位方式在共享堆上创建每个显卡上的资源
for (UINT nFrameIndex = 0; nFrameIndex < g_nFrameBackBufCount; nFrameIndex++) for ( UINT nFrameIndex = 0; nFrameIndex < g_nFrameBackBufCount; nFrameIndex++ )
{ {
GRS_THROW_IF_FAILED(stGPUParams[nIDGPUMain].m_pID3D12Device4->CreatePlacedResource( GRS_THROW_IF_FAILED(stGPUParams[nIDGPUMain].m_pID3D12Device4->CreatePlacedResource(
stGPUParams[nIDGPUMain].m_pICrossAdapterHeap.Get(), stGPUParams[nIDGPUMain].m_pICrossAdapterHeap.Get(),
......
此差异已折叠。
...@@ -1320,8 +1320,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l ...@@ -1320,8 +1320,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR l
pICmdList->RSSetViewports(1, &stViewPort); pICmdList->RSSetViewports(1, &stViewPort);
pICmdList->RSSetScissorRects(1, &stScissorRect); pICmdList->RSSetScissorRects(1, &stScissorRect);
const float clearColor[] = { 0.0f, 0.0f, 0.5f, 1.0f }; const float arClearColor[] = { 0.0f, 0.0f, 0.5f, 1.0f };
pICmdList->ClearRenderTargetView(stRTVHandle, clearColor, 0, nullptr); pICmdList->ClearRenderTargetView(stRTVHandle, arClearColor, 0, nullptr);
pICmdList->ClearDepthStencilView(dsvHandle, D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr); pICmdList->ClearDepthStencilView(dsvHandle, D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr);
//再一次执行每个场景物体的的捆绑包,渲染到屏幕 //再一次执行每个场景物体的的捆绑包,渲染到屏幕
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册