refactor: 继续用 D3D12CommandList 替换原生 API
- 添加更多 wrapper 方法: SetDescriptorHeaps, SetGraphicsRootConstantBufferView, SetGraphicsRoot32BitConstants, SetGraphicsRootDescriptorTable, SetGraphicsRootShaderResourceView - 使用 wrapper 方法替换 main.cpp 中的原生 API 调用 - 测试通过
This commit is contained in:
@@ -67,9 +67,15 @@ public:
|
|||||||
void SetIndexBuffer(ID3D12Resource* buffer, uint64_t offset, Format indexFormat);
|
void SetIndexBuffer(ID3D12Resource* buffer, uint64_t offset, Format indexFormat);
|
||||||
|
|
||||||
void SetDescriptorHeap(ID3D12DescriptorHeap* heap);
|
void SetDescriptorHeap(ID3D12DescriptorHeap* heap);
|
||||||
|
void SetDescriptorHeaps(uint32_t count, ID3D12DescriptorHeap** heaps);
|
||||||
void SetGraphicsDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle);
|
void SetGraphicsDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle);
|
||||||
void SetComputeDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle);
|
void SetComputeDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle);
|
||||||
|
|
||||||
|
void SetGraphicsRootConstantBufferView(uint32_t rootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS bufferLocation);
|
||||||
|
void SetGraphicsRoot32BitConstants(uint32_t rootParameterIndex, uint32_t num32BitValuesToSet, const void* pSrcData, uint32_t destOffsetIn32BitValues);
|
||||||
|
void SetGraphicsRootDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseDescriptor);
|
||||||
|
void SetGraphicsRootShaderResourceView(uint32_t rootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS shaderResource);
|
||||||
|
|
||||||
void SetStencilRef(uint32_t stencilRef);
|
void SetStencilRef(uint32_t stencilRef);
|
||||||
void SetBlendFactor(const float blendFactor[4]);
|
void SetBlendFactor(const float blendFactor[4]);
|
||||||
void SetDepthBias(float depthBias, float slopeScaledDepthBias, float depthBiasClamp);
|
void SetDepthBias(float depthBias, float slopeScaledDepthBias, float depthBiasClamp);
|
||||||
|
|||||||
@@ -189,6 +189,10 @@ void D3D12CommandList::SetDescriptorHeap(ID3D12DescriptorHeap* heap) {
|
|||||||
m_currentDescriptorHeap = heap;
|
m_currentDescriptorHeap = heap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void D3D12CommandList::SetDescriptorHeaps(uint32_t count, ID3D12DescriptorHeap** heaps) {
|
||||||
|
m_commandList->SetDescriptorHeaps(count, heaps);
|
||||||
|
}
|
||||||
|
|
||||||
void D3D12CommandList::SetGraphicsDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle) {
|
void D3D12CommandList::SetGraphicsDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle) {
|
||||||
m_commandList->SetGraphicsRootDescriptorTable(rootParameterIndex, baseHandle);
|
m_commandList->SetGraphicsRootDescriptorTable(rootParameterIndex, baseHandle);
|
||||||
}
|
}
|
||||||
@@ -197,6 +201,22 @@ void D3D12CommandList::SetComputeDescriptorTable(uint32_t rootParameterIndex, D3
|
|||||||
m_commandList->SetComputeRootDescriptorTable(rootParameterIndex, baseHandle);
|
m_commandList->SetComputeRootDescriptorTable(rootParameterIndex, baseHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void D3D12CommandList::SetGraphicsRootConstantBufferView(uint32_t rootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS bufferLocation) {
|
||||||
|
m_commandList->SetGraphicsRootConstantBufferView(rootParameterIndex, bufferLocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void D3D12CommandList::SetGraphicsRoot32BitConstants(uint32_t rootParameterIndex, uint32_t num32BitValuesToSet, const void* pSrcData, uint32_t destOffsetIn32BitValues) {
|
||||||
|
m_commandList->SetGraphicsRoot32BitConstants(rootParameterIndex, num32BitValuesToSet, pSrcData, destOffsetIn32BitValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
void D3D12CommandList::SetGraphicsRootDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseDescriptor) {
|
||||||
|
m_commandList->SetGraphicsRootDescriptorTable(rootParameterIndex, baseDescriptor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void D3D12CommandList::SetGraphicsRootShaderResourceView(uint32_t rootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS shaderResource) {
|
||||||
|
m_commandList->SetGraphicsRootShaderResourceView(rootParameterIndex, shaderResource);
|
||||||
|
}
|
||||||
|
|
||||||
void D3D12CommandList::SetStencilRef(uint32_t stencilRef) {
|
void D3D12CommandList::SetStencilRef(uint32_t stencilRef) {
|
||||||
m_commandList->OMSetStencilRef(stencilRef);
|
m_commandList->OMSetStencilRef(stencilRef);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -842,10 +842,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||||||
}
|
}
|
||||||
|
|
||||||
InitD3D12(hwnd, 1280, 720);
|
InitD3D12(hwnd, 1280, 720);
|
||||||
ID3D12GraphicsCommandList* commandList = GetCommandList();
|
|
||||||
ID3D12CommandAllocator* commandAllocator = GetCommandAllocator();
|
ID3D12CommandAllocator* commandAllocator = GetCommandAllocator();
|
||||||
StaticMeshComponent staticMeshComponent;
|
StaticMeshComponent staticMeshComponent;
|
||||||
staticMeshComponent.InitFromFile(commandList, "Res/Model/Sphere.lhsm");
|
staticMeshComponent.InitFromFile(gCommandList.GetCommandList(), "Res/Model/Sphere.lhsm");
|
||||||
|
|
||||||
ID3D12RootSignature* rootSignature = InitRootSignature();
|
ID3D12RootSignature* rootSignature = InitRootSignature();
|
||||||
D3D12_SHADER_BYTECODE vs, gs, ps;
|
D3D12_SHADER_BYTECODE vs, gs, ps;
|
||||||
@@ -890,7 +889,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||||||
int imageWidth, imageHeight, imageChannel;
|
int imageWidth, imageHeight, imageChannel;
|
||||||
stbi_uc* pixels = stbi_load("Res/Image/earth_d.jpg", &imageWidth, &imageHeight, &imageChannel, 4);
|
stbi_uc* pixels = stbi_load("Res/Image/earth_d.jpg", &imageWidth, &imageHeight, &imageChannel, 4);
|
||||||
Log("[DEBUG] Texture loaded: width=%d, height=%d, channels=%d, pixels=%p\n", imageWidth, imageHeight, imageChannel, pixels);
|
Log("[DEBUG] Texture loaded: width=%d, height=%d, channels=%d, pixels=%p\n", imageWidth, imageHeight, imageChannel, pixels);
|
||||||
ID3D12Resource* texture = CreateTexture2D(commandList, pixels,
|
ID3D12Resource* texture = CreateTexture2D(gCommandList.GetCommandList(), pixels,
|
||||||
imageWidth * imageHeight * imageChannel, imageWidth, imageHeight, DXGI_FORMAT_R8G8B8A8_UNORM);
|
imageWidth * imageHeight * imageChannel, imageWidth, imageHeight, DXGI_FORMAT_R8G8B8A8_UNORM);
|
||||||
delete[] pixels;
|
delete[] pixels;
|
||||||
ID3D12Device* d3dDevice = GetD3DDevice();
|
ID3D12Device* d3dDevice = GetD3DDevice();
|
||||||
@@ -944,20 +943,20 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||||||
color[0] = timeSinceAppStartInSecond;
|
color[0] = timeSinceAppStartInSecond;
|
||||||
commandAllocator->Reset();
|
commandAllocator->Reset();
|
||||||
gCommandList.Reset(gCommandAllocator.GetCommandAllocator());
|
gCommandList.Reset(gCommandAllocator.GetCommandAllocator());
|
||||||
BeginRenderToSwapChain(commandList);
|
BeginRenderToSwapChain(gCommandList.GetCommandList());
|
||||||
commandList->SetPipelineState(pso);
|
gCommandList.SetPipelineState(pso);
|
||||||
commandList->SetGraphicsRootSignature(rootSignature);
|
gCommandList.SetRootSignature(rootSignature);
|
||||||
commandList->SetDescriptorHeaps(_countof(descriptorHeaps), descriptorHeaps);
|
gCommandList.SetDescriptorHeaps(_countof(descriptorHeaps), descriptorHeaps);
|
||||||
commandList->SetGraphicsRootConstantBufferView(0, cb->GetGPUVirtualAddress());
|
gCommandList.SetGraphicsRootConstantBufferView(0, cb->GetGPUVirtualAddress());
|
||||||
commandList->SetGraphicsRoot32BitConstants(1, 4, color, 0);
|
gCommandList.SetGraphicsRoot32BitConstants(1, 4, color, 0);
|
||||||
commandList->SetGraphicsRootDescriptorTable(2, srvHeap->GetGPUDescriptorHandleForHeapStart());
|
gCommandList.SetGraphicsRootDescriptorTable(2, srvHeap->GetGPUDescriptorHandleForHeapStart());
|
||||||
commandList->SetGraphicsRootShaderResourceView(3, sb->GetGPUVirtualAddress());
|
gCommandList.SetGraphicsRootShaderResourceView(3, sb->GetGPUVirtualAddress());
|
||||||
commandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
gCommandList.SetPrimitiveTopology(XCEngine::RHI::PrimitiveTopology::TriangleList);
|
||||||
staticMeshComponent.Render(commandList);
|
staticMeshComponent.Render(gCommandList.GetCommandList());
|
||||||
|
|
||||||
// On screenshot frame, don't transition to PRESENT - keep RENDER_TARGET for screenshot
|
// On screenshot frame, don't transition to PRESENT - keep RENDER_TARGET for screenshot
|
||||||
if (frameCount != 30) {
|
if (frameCount != 30) {
|
||||||
EndRenderToSwapChain(commandList);
|
EndRenderToSwapChain(gCommandList.GetCommandList());
|
||||||
}
|
}
|
||||||
EndCommandList();
|
EndCommandList();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user