From b2591666909a6edc5db7405f55c4cd7320670ae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Wed, 17 Jan 2018 17:35:02 -0800 Subject: [PATCH] D3D12: Disabled ExecuteIndirect code path. --- src/renderer_d3d12.cpp | 61 ++++++++++++++++++++++++++---------------- src/renderer_d3d12.h | 8 ++++++ 2 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index d0944d3df..971876786 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -2391,11 +2391,12 @@ data.NumQualityLevels = 0; texture.setState(m_commandList, D3D12_RESOURCE_STATE_DEPTH_WRITE); } - m_commandList->OMSetRenderTargets(frameBuffer.m_num - , m_currentColor - , true - , m_currentDepthStencil - ); + m_commandList->OMSetRenderTargets( + frameBuffer.m_num + , m_currentColor + , true + , m_currentDepthStencil + ); } m_fbh = _fbh; @@ -3218,11 +3219,7 @@ data.NumQualityLevels = 0; bool m_wireframe; bool m_lost; -#if BX_PLATFORM_WINDOWS DXGI_SWAP_CHAIN_DESC m_scd; -#else - DXGI_SWAP_CHAIN_DESC1 m_scd; -#endif // BX_PLATFORM_WINDOWS uint32_t m_maxAnisotropy; bool m_depthClamp; @@ -3719,7 +3716,7 @@ data.NumQualityLevels = 0; { m_maxDrawPerBatch = _maxDrawPerBatch; setSeqMode(false); - setIndirectMode(true); + setIndirectMode(false); ID3D12Device* device = s_renderD3D12->m_device; ID3D12RootSignature* rootSignature = s_renderD3D12->m_rootSignature; @@ -4894,8 +4891,38 @@ data.NumQualityLevels = 0; postReset(); } - void FrameBufferD3D12::create(uint16_t /*_denseIdx*/, void* /*_nwh*/, uint32_t /*_width*/, uint32_t /*_height*/, TextureFormat::Enum /*_depthFormat*/) + void FrameBufferD3D12::create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) { + DXGI_SWAP_CHAIN_DESC scd; + bx::memCopy(&scd, &s_renderD3D12->m_scd, sizeof(DXGI_SWAP_CHAIN_DESC) ); + scd.BufferDesc.Width = _width; + scd.BufferDesc.Height = _height; + scd.OutputWindow = (HWND)_nwh; + + HRESULT hr; + hr = s_renderD3D12->m_factory->CreateSwapChain(s_renderD3D12->m_cmd.m_commandQueue + , &scd + , reinterpret_cast(&m_swapChain) + ); + BGFX_FATAL(SUCCEEDED(hr), Fatal::UnableToInitialize, "Failed to create swap chain."); + + m_denseIdx = _denseIdx; + m_num = 1; + } + + uint16_t FrameBufferD3D12::destroy() + { + DX_RELEASE(m_swapChain, 0); + + m_numTh = 0; + m_needPresent = false; + + m_depth.idx = bgfx::kInvalidHandle; + + uint16_t denseIdx = m_denseIdx; + m_denseIdx = UINT16_MAX; + + return denseIdx; } void FrameBufferD3D12::preReset() @@ -5016,18 +5043,6 @@ data.NumQualityLevels = 0; } } - uint16_t FrameBufferD3D12::destroy() - { - m_numTh = 0; - - m_depth.idx = bgfx::kInvalidHandle; - - uint16_t denseIdx = m_denseIdx; - m_denseIdx = UINT16_MAX; - - return denseIdx; - } - void FrameBufferD3D12::resolve() { } diff --git a/src/renderer_d3d12.h b/src/renderer_d3d12.h index 713c7b4d5..2a0dd3be6 100644 --- a/src/renderer_d3d12.h +++ b/src/renderer_d3d12.h @@ -87,6 +87,12 @@ extern "C" uint64_t WINAPI bgfx_PIXEventsReplaceBlock(bool _g namespace bgfx { namespace d3d12 { +#if BX_PLATFORM_WINDOWS + typedef ::DXGI_SWAP_CHAIN_DESC DXGI_SWAP_CHAIN_DESC; +#else + typedef ::DXGI_SWAP_CHAIN_DESC1 DXGI_SWAP_CHAIN_DESC; +#endif // BX_PLATFORM_WINDOWS + struct Rdt { enum Enum @@ -341,6 +347,7 @@ namespace bgfx { namespace d3d12 , m_denseIdx(UINT16_MAX) , m_num(0) , m_numTh(0) + , m_needPresent(false) { m_depth.idx = bgfx::kInvalidHandle; } @@ -362,6 +369,7 @@ namespace bgfx { namespace d3d12 uint8_t m_num; uint8_t m_numTh; Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS]; + bool m_needPresent; }; struct CommandQueueD3D12