mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 21:37:52 -07:00
Merge pull request #12087 from Dentomologist/dx12_use_correct_framebuffer_descriptor
D3D12: Only use framebuffer integer descriptor if allocated
This commit is contained in:
commit
b0dc067717
@ -422,6 +422,23 @@ DXFramebuffer::~DXFramebuffer()
|
||||
}
|
||||
}
|
||||
|
||||
const D3D12_CPU_DESCRIPTOR_HANDLE* DXFramebuffer::GetIntRTVDescriptorArray() const
|
||||
{
|
||||
if (m_color_attachment == nullptr)
|
||||
return nullptr;
|
||||
|
||||
const auto& handle = m_int_rtv_descriptor.cpu_handle;
|
||||
|
||||
// To save space in the descriptor heap, m_int_rtv_descriptor.cpu_handle.ptr is only allocated
|
||||
// when the integer RTV format corresponding to the current abstract format differs from the
|
||||
// non-integer RTV format. Only use the integer handle if it has been allocated.
|
||||
if (handle.ptr != 0)
|
||||
return &handle;
|
||||
|
||||
// The integer and non-integer RTV formats are the same, so use the non-integer descriptor.
|
||||
return GetRTVDescriptorArray();
|
||||
}
|
||||
|
||||
void DXFramebuffer::Unbind()
|
||||
{
|
||||
static const D3D12_DISCARD_REGION dr = {0, nullptr, 0, 1};
|
||||
@ -556,6 +573,10 @@ bool DXFramebuffer::CreateIRTVDescriptor()
|
||||
const bool multisampled = m_samples > 1;
|
||||
DXGI_FORMAT non_int_format = D3DCommon::GetRTVFormatForAbstractFormat(m_color_format, false);
|
||||
DXGI_FORMAT int_format = D3DCommon::GetRTVFormatForAbstractFormat(m_color_format, true);
|
||||
|
||||
// If the integer and non-integer RTV formats are the same for a given abstract format we can save
|
||||
// space in the descriptor heap by only allocating the non-integer descriptor and using it for
|
||||
// the integer RTV too.
|
||||
if (int_format != non_int_format)
|
||||
{
|
||||
if (!g_dx_context->GetRTVHeapManager().Allocate(&m_int_rtv_descriptor))
|
||||
|
@ -75,10 +75,7 @@ public:
|
||||
{
|
||||
return m_render_targets_raw.data();
|
||||
}
|
||||
const D3D12_CPU_DESCRIPTOR_HANDLE* GetIntRTVDescriptorArray() const
|
||||
{
|
||||
return m_color_attachment ? &m_int_rtv_descriptor.cpu_handle : nullptr;
|
||||
}
|
||||
const D3D12_CPU_DESCRIPTOR_HANDLE* GetIntRTVDescriptorArray() const;
|
||||
const D3D12_CPU_DESCRIPTOR_HANDLE* GetDSVDescriptorArray() const
|
||||
{
|
||||
return m_depth_attachment ? &m_dsv_descriptor.cpu_handle : nullptr;
|
||||
|
Loading…
Reference in New Issue
Block a user