D3D12: Fix Quad test screenshot and update texture
- Fix SetGraphicsRootDescriptorTable call order (SetRootSignature before SetPipelineState) - Rename texture earth_d.jpg -> earth.png - Fix vertex order for TriangleStrip quad rendering - Add integration test README - Add debug logging to D3D12Screenshot - Remove obsolete run.bat
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include "RHI/D3D12/D3D12Texture.h"
|
||||
#include "Debug/Logger.h"
|
||||
#include <d3d12.h>
|
||||
#include <dxgi.h>
|
||||
#include <stdio.h>
|
||||
|
||||
namespace XCEngine {
|
||||
@@ -65,6 +66,13 @@ bool D3D12Screenshot::CopyToReadbackAndSave(ID3D12Device* device,
|
||||
ID3D12CommandAllocator* cmdAlloc = nullptr;
|
||||
HRESULT hr = device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&cmdAlloc));
|
||||
if (FAILED(hr)) {
|
||||
XCEngine::Debug::Logger::Get().Error(XCEngine::Debug::LogCategory::Rendering, "Screenshot: CreateCommandAllocator failed");
|
||||
if (hr == DXGI_ERROR_DEVICE_REMOVED) {
|
||||
HRESULT removedReason = device->GetDeviceRemovedReason();
|
||||
char reasonMsg[256];
|
||||
sprintf_s(reasonMsg, sizeof(reasonMsg), "Screenshot: Device removed reason: 0x%X", removedReason);
|
||||
XCEngine::Debug::Logger::Get().Error(XCEngine::Debug::LogCategory::Rendering, reasonMsg);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -93,6 +101,7 @@ bool D3D12Screenshot::CopyToReadbackAndSave(ID3D12Device* device,
|
||||
IID_PPV_ARGS(&readbackBuffer));
|
||||
|
||||
if (FAILED(hr)) {
|
||||
XCEngine::Debug::Logger::Get().Error(XCEngine::Debug::LogCategory::Rendering, "Screenshot: CreateCommittedResource failed");
|
||||
cmdAlloc->Release();
|
||||
return false;
|
||||
}
|
||||
@@ -100,6 +109,7 @@ bool D3D12Screenshot::CopyToReadbackAndSave(ID3D12Device* device,
|
||||
ID3D12GraphicsCommandList* cmdList = nullptr;
|
||||
hr = device->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, cmdAlloc, nullptr, IID_PPV_ARGS(&cmdList));
|
||||
if (FAILED(hr)) {
|
||||
XCEngine::Debug::Logger::Get().Error(XCEngine::Debug::LogCategory::Rendering, "Screenshot: CreateCommandList failed");
|
||||
cmdAlloc->Release();
|
||||
readbackBuffer->Release();
|
||||
return false;
|
||||
@@ -140,11 +150,21 @@ bool D3D12Screenshot::CopyToReadbackAndSave(ID3D12Device* device,
|
||||
cmdList->Close();
|
||||
ID3D12CommandList* ppCmdLists[] = { cmdList };
|
||||
commandQueue->ExecuteCommandLists(1, ppCmdLists);
|
||||
XCEngine::Debug::Logger::Get().Info(XCEngine::Debug::LogCategory::Rendering, "Screenshot: ExecuteCommandLists done, waiting for fence...");
|
||||
|
||||
HANDLE fenceEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
||||
ID3D12Fence* fence = nullptr;
|
||||
hr = device->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&fence));
|
||||
if (SUCCEEDED(hr)) {
|
||||
if (FAILED(hr)) {
|
||||
XCEngine::Debug::Logger::Get().Error(XCEngine::Debug::LogCategory::Rendering, "Screenshot: CreateFence failed");
|
||||
cmdList->Release();
|
||||
cmdAlloc->Release();
|
||||
readbackBuffer->Release();
|
||||
CloseHandle(fenceEvent);
|
||||
return false;
|
||||
}
|
||||
XCEngine::Debug::Logger::Get().Info(XCEngine::Debug::LogCategory::Rendering, "Screenshot: Fence created, waiting...");
|
||||
{
|
||||
UINT64 fenceValue = 1;
|
||||
commandQueue->Signal(fence, fenceValue);
|
||||
if (fence->GetCompletedValue() < fenceValue) {
|
||||
|
||||
Reference in New Issue
Block a user