Skip to content

Commit 2da83ab

Browse files
committed
D3D12MeshletRender: First pass to get stuff working
Just throwing structures into temporaries, might be better ways to do this
1 parent 06debb3 commit 2da83ab

2 files changed

Lines changed: 53 additions & 13 deletions

File tree

Samples/Desktop/D3D12MeshShaders/src/MeshletRender/D3D12MeshletRender.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,15 @@ void D3D12MeshletRender::LoadPipeline()
183183
depthOptimizedClearValue.DepthStencil.Depth = 1.0f;
184184
depthOptimizedClearValue.DepthStencil.Stencil = 0;
185185

186+
const CD3DX12_HEAP_PROPERTIES depthStencilHeapProps(D3D12_HEAP_TYPE_DEFAULT);
187+
const CD3DX12_RESOURCE_DESC depthStencilResDesc = CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_D32_FLOAT, m_width, m_height, 1, 0, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL);
188+
186189
ThrowIfFailed(m_device->CreateCommittedResource(
187-
&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT),
190+
//&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT),
191+
&depthStencilHeapProps,
188192
D3D12_HEAP_FLAG_NONE,
189-
&CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_D32_FLOAT, m_width, m_height, 1, 0, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL),
193+
//&CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_D32_FLOAT, m_width, m_height, 1, 0, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL),
194+
&depthStencilResDesc,
190195
D3D12_RESOURCE_STATE_DEPTH_WRITE,
191196
&depthOptimizedClearValue,
192197
IID_PPV_ARGS(&m_depthStencil)
@@ -201,10 +206,15 @@ void D3D12MeshletRender::LoadPipeline()
201206
{
202207
const UINT64 constantBufferSize = sizeof(SceneConstantBuffer) * FrameCount;
203208

209+
const CD3DX12_HEAP_PROPERTIES constantBufferHeapProps(D3D12_HEAP_TYPE_UPLOAD);
210+
const CD3DX12_RESOURCE_DESC constantBufferResDesc = CD3DX12_RESOURCE_DESC::Buffer(constantBufferSize);
211+
204212
ThrowIfFailed(m_device->CreateCommittedResource(
205-
&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD),
213+
//&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD),
214+
&constantBufferHeapProps,
206215
D3D12_HEAP_FLAG_NONE,
207-
&CD3DX12_RESOURCE_DESC::Buffer(constantBufferSize),
216+
//&CD3DX12_RESOURCE_DESC::Buffer(constantBufferSize),
217+
&constantBufferResDesc,
208218
D3D12_RESOURCE_STATE_GENERIC_READ,
209219
nullptr,
210220
IID_PPV_ARGS(&m_constantBuffer)));
@@ -386,7 +396,9 @@ void D3D12MeshletRender::PopulateCommandList()
386396
m_commandList->RSSetScissorRects(1, &m_scissorRect);
387397

388398
// Indicate that the back buffer will be used as a render target.
389-
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
399+
const auto toRenderTargetBarrier = CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET);
400+
//m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
401+
m_commandList->ResourceBarrier(1, &toRenderTargetBarrier);
390402

391403
CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart(), m_frameIndex, m_rtvDescriptorSize);
392404
CD3DX12_CPU_DESCRIPTOR_HANDLE dsvHandle(m_dsvHeap->GetCPUDescriptorHandleForHeapStart());
@@ -415,7 +427,9 @@ void D3D12MeshletRender::PopulateCommandList()
415427
}
416428

417429
// Indicate that the back buffer will now be used to present.
418-
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));
430+
const auto toPresentBarrier = CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT);
431+
//m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));
432+
m_commandList->ResourceBarrier(1, &toPresentBarrier);
419433

420434
ThrowIfFailed(m_commandList->Close());
421435
}

Samples/Desktop/D3D12MeshShaders/src/MeshletRender/Model.cpp

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -452,26 +452,52 @@ HRESULT Model::UploadGpuResources(ID3D12Device* device, ID3D12CommandQueue* cmdQ
452452
for (uint32_t j = 0; j < m.Vertices.size(); ++j)
453453
{
454454
cmdList->CopyResource(m.VertexResources[j].Get(), vertexUploads[j].Get());
455-
cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.VertexResources[j].Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
455+
const auto barrier = CD3DX12_RESOURCE_BARRIER::Transition(m.VertexResources[j].Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
456+
cmdList->ResourceBarrier(1, &barrier);
457+
//cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.VertexResources[j].Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
456458
}
457459

458460
cmdList->CopyResource(m.IndexResource.Get(), indexUpload.Get());
459-
cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.IndexResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
461+
{
462+
const auto barrier = CD3DX12_RESOURCE_BARRIER::Transition(m.IndexResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
463+
cmdList->ResourceBarrier(1, &barrier);
464+
}
465+
//cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.IndexResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
460466

461467
cmdList->CopyResource(m.MeshletResource.Get(), meshletUpload.Get());
462-
cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.MeshletResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
468+
{
469+
const auto barrier = CD3DX12_RESOURCE_BARRIER::Transition(m.MeshletResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
470+
cmdList->ResourceBarrier(1, &barrier);
471+
}
472+
//cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.MeshletResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
463473

464474
cmdList->CopyResource(m.CullDataResource.Get(), cullDataUpload.Get());
465-
cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.CullDataResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
475+
{
476+
const auto barrier = CD3DX12_RESOURCE_BARRIER::Transition(m.CullDataResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
477+
cmdList->ResourceBarrier(1, &barrier);
478+
}
479+
//cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.CullDataResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
466480

467481
cmdList->CopyResource(m.UniqueVertexIndexResource.Get(), uniqueVertexIndexUpload.Get());
468-
cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.UniqueVertexIndexResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
482+
{
483+
const auto barrier = CD3DX12_RESOURCE_BARRIER::Transition(m.UniqueVertexIndexResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
484+
cmdList->ResourceBarrier(1, &barrier);
485+
}
486+
//cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.UniqueVertexIndexResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
469487

470488
cmdList->CopyResource(m.PrimitiveIndexResource.Get(), primitiveIndexUpload.Get());
471-
cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.PrimitiveIndexResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
489+
{
490+
const auto barrier = CD3DX12_RESOURCE_BARRIER::Transition(m.PrimitiveIndexResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
491+
cmdList->ResourceBarrier(1, &barrier);
492+
}
493+
//cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.PrimitiveIndexResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE));
472494

473495
cmdList->CopyResource(m.MeshInfoResource.Get(), meshInfoUpload.Get());
474-
cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.MeshInfoResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER));
496+
{
497+
const auto barrier = CD3DX12_RESOURCE_BARRIER::Transition(m.MeshInfoResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
498+
cmdList->ResourceBarrier(1, &barrier);
499+
}
500+
//cmdList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m.MeshInfoResource.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER));
475501

476502
ThrowIfFailed(cmdList->Close());
477503

0 commit comments

Comments
 (0)