diff --git a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUContextDX12.cpp b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUContextDX12.cpp index 0c791de83..2e61471b7 100644 --- a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUContextDX12.cpp +++ b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUContextDX12.cpp @@ -269,6 +269,7 @@ void GPUContextDX12::Reset() _currentAllocator = _device->GetCommandQueue()->RequestAllocator(); _commandList->Reset(_currentAllocator, nullptr); } + IsOpen = true; // Setup initial state _currentState = nullptr; @@ -327,6 +328,7 @@ uint64 GPUContextDX12::Execute(bool waitForCompletion) _currentState = nullptr; // Execute commands + IsOpen = false; const uint64 fenceValue = queue->ExecuteCommandList(_commandList); // Cleanup used allocator diff --git a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUContextDX12.h b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUContextDX12.h index edff51b3e..19ecafbc4 100644 --- a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUContextDX12.h +++ b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUContextDX12.h @@ -93,6 +93,9 @@ public: return _commandList; } + // Flag for command list state. + bool IsOpen = false; + uint64 FrameFenceValues[2]; public: diff --git a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUTextureDX12.cpp b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUTextureDX12.cpp index 4d441415c..cc5ad7338 100644 --- a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUTextureDX12.cpp +++ b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUTextureDX12.cpp @@ -171,7 +171,7 @@ bool GPUTextureDX12::OnInit() if (isWrite) { _device->Locker.Lock(); - if (IsInMainThread() && _device->IsRendering()) + if (IsInMainThread() && _device->IsRendering() && _device->GetMainContextDX12()->IsOpen) _device->GetMainContextDX12()->GetCommandList()->DiscardResource(_resource, nullptr); else _device->PendingResourceDiscards.Add(_resource); diff --git a/Source/Engine/GraphicsDevice/DirectX/GPUDeviceDX.h b/Source/Engine/GraphicsDevice/DirectX/GPUDeviceDX.h index d59b02225..3cbdcc2bd 100644 --- a/Source/Engine/GraphicsDevice/DirectX/GPUDeviceDX.h +++ b/Source/Engine/GraphicsDevice/DirectX/GPUDeviceDX.h @@ -83,6 +83,7 @@ protected: #if GRAPHICS_API_DIRECTX12 case D3D_FEATURE_LEVEL_12_0: case D3D_FEATURE_LEVEL_12_1: + case D3D_FEATURE_LEVEL_12_2: return ShaderProfile::DirectX_SM5; #endif default: