From f26cfe52508e98dcc892a1cc748b5f37c7c96bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Fri, 26 Jan 2018 22:30:28 -0800 Subject: [PATCH] D3D12: Fixed swap chain. --- src/renderer_d3d12.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index 7b25f844b..4b4973992 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -1269,7 +1269,7 @@ namespace bgfx { namespace d3d12 | BGFX_CAPS_COMPUTE | (m_options.ROVsSupported ? BGFX_CAPS_FRAGMENT_ORDERING : 0) // | (m_architecture.UMA ? BGFX_CAPS_TEXTURE_DIRECT_ACCESS : 0) -// | (BX_ENABLED(BX_PLATFORM_WINDOWS) ? BGFX_CAPS_SWAP_CHAIN : 0) + | (BX_ENABLED(BX_PLATFORM_WINDOWS) ? BGFX_CAPS_SWAP_CHAIN : 0) | BGFX_CAPS_TEXTURE_BLIT | BGFX_CAPS_TEXTURE_READ_BACK | BGFX_CAPS_OCCLUSION_QUERY @@ -5167,15 +5167,13 @@ data.NumQualityLevels = 0; void FrameBufferD3D12::clear(ID3D12GraphicsCommandList* _commandList, const Clear& _clear, const float _palette[][4], const D3D12_RECT* _rect, uint32_t _num) { ID3D12Device* device = s_renderD3D12->m_device; - const uint32_t fbhIdx = (uint32_t)(this - s_renderD3D12->m_frameBuffers); + FrameBufferHandle fbh = { (uint16_t)(this - s_renderD3D12->m_frameBuffers) }; + D3D12_CPU_DESCRIPTOR_HANDLE rtv = s_renderD3D12->getRtv(fbh); + uint32_t rtvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); if (BGFX_CLEAR_COLOR & _clear.m_flags && 0 != m_num) { - D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = getCPUHandleHeapStart(s_renderD3D12->m_rtvDescriptorHeap); - uint32_t rtvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); - rtvDescriptor.ptr += (BX_COUNTOF(s_renderD3D12->m_backBufferColor) + fbhIdx * BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) * rtvDescriptorSize; - if (BGFX_CLEAR_COLOR_USE_PALETTE & _clear.m_flags) { for (uint32_t ii = 0, num = m_num; ii < num; ++ii) @@ -5183,12 +5181,12 @@ data.NumQualityLevels = 0; uint8_t index = _clear.m_index[ii]; if (UINT8_MAX != index) { - D3D12_CPU_DESCRIPTOR_HANDLE rtv = { rtvDescriptor.ptr + ii * rtvDescriptorSize }; _commandList->ClearRenderTargetView(rtv , _palette[index] , _num , _rect ); + rtv.ptr += rtvDescriptorSize; } } } @@ -5203,12 +5201,12 @@ data.NumQualityLevels = 0; }; for (uint32_t ii = 0, num = m_num; ii < num; ++ii) { - D3D12_CPU_DESCRIPTOR_HANDLE rtv = { rtvDescriptor.ptr + ii * rtvDescriptorSize }; _commandList->ClearRenderTargetView(rtv , frgba , _num , _rect ); + rtv.ptr += rtvDescriptorSize; } } } @@ -5218,7 +5216,7 @@ data.NumQualityLevels = 0; { D3D12_CPU_DESCRIPTOR_HANDLE dsvDescriptor = getCPUHandleHeapStart(s_renderD3D12->m_dsvDescriptorHeap); uint32_t dsvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); - dsvDescriptor.ptr += (1 + fbhIdx) * dsvDescriptorSize; + dsvDescriptor.ptr += (1 + fbh.idx) * dsvDescriptorSize; DWORD flags = 0; flags |= (_clear.m_flags & BGFX_CLEAR_DEPTH) ? D3D12_CLEAR_FLAG_DEPTH : 0;