diff options
author | thexai <58434170+thexai@users.noreply.github.com> | 2023-08-04 17:53:26 +0200 |
---|---|---|
committer | thexai <58434170+thexai@users.noreply.github.com> | 2023-08-06 10:33:17 +0200 |
commit | 17b768facaa6f1839616db4708ea7f362691266e (patch) | |
tree | 3044596852ca4cffb78b3588392e2b6a1a381e2c | |
parent | 89cc33615d0c755daa69adb4ae4b583d80bb6eac (diff) |
[Windows] improve GetAdapterDesc() - return struct by value
-rw-r--r-- | xbmc/cores/VideoPlayer/DVDCodecs/Video/DXVA.cpp | 29 | ||||
-rw-r--r-- | xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.cpp | 6 | ||||
-rw-r--r-- | xbmc/rendering/dx/DeviceResources.cpp | 26 | ||||
-rw-r--r-- | xbmc/rendering/dx/DeviceResources.h | 2 | ||||
-rw-r--r-- | xbmc/rendering/dx/RenderSystemDX.cpp | 3 |
5 files changed, 26 insertions, 40 deletions
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DXVA.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DXVA.cpp index 5ba6cc3ca1..a1df723bfb 100644 --- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DXVA.cpp +++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DXVA.cpp @@ -333,12 +333,10 @@ bool CContext::CreateContext() D3D11_SDK_VERSION, &pD3DDevice, &d3dFeatureLevel, &pD3DDeviceContext); if (SUCCEEDED(hr)) { - DXGI_ADAPTER_DESC aDesc; - DX::DeviceResources::Get()->GetAdapter()->GetDesc(&aDesc); - - CLog::LogF(LOGINFO, "device for decoding created on adapter '{}' with {}", - KODI::PLATFORM::WINDOWS::FromW(aDesc.Description), - DX::GetFeatureLevelDescription(d3dFeatureLevel)); + CLog::LogF( + LOGINFO, "device for decoding created on adapter '{}' with {}", + KODI::PLATFORM::WINDOWS::FromW(DX::DeviceResources::Get()->GetAdapterDesc().Description), + DX::GetFeatureLevelDescription(d3dFeatureLevel)); #ifdef _DEBUG if (FAILED(pD3DDevice.As(&m_d3d11Debug))) @@ -705,8 +703,7 @@ bool CContext::Reset() { if (Check()) { - DXGI_ADAPTER_DESC appDesc = {}; - DX::DeviceResources::Get()->GetAdapterDesc(&appDesc); + const DXGI_ADAPTER_DESC appDesc = DX::DeviceResources::Get()->GetAdapterDesc(); ComPtr<IDXGIDevice> ctxDevice; ComPtr<IDXGIAdapter> ctxAdapter; @@ -1093,8 +1090,7 @@ static bool CheckH264L41(AVCodecContext* avctx) static bool IsL41LimitedATI() { - DXGI_ADAPTER_DESC AIdentifier = {}; - DX::DeviceResources::Get()->GetAdapterDesc(&AIdentifier); + const DXGI_ADAPTER_DESC AIdentifier = DX::DeviceResources::Get()->GetAdapterDesc(); if (AIdentifier.VendorId == PCIV_AMD) { @@ -1110,8 +1106,7 @@ static bool IsL41LimitedATI() static bool HasVP3WidthBug(AVCodecContext* avctx) { // Some nVidia VP3 hardware cannot do certain macroblock widths - DXGI_ADAPTER_DESC AIdentifier = {}; - DX::DeviceResources::Get()->GetAdapterDesc(&AIdentifier); + const DXGI_ADAPTER_DESC AIdentifier = DX::DeviceResources::Get()->GetAdapterDesc(); if (AIdentifier.VendorId == PCIV_NVIDIA && !CDVDCodecUtils::IsVP3CompatibleWidth(avctx->coded_width)) @@ -1126,8 +1121,8 @@ static bool HasVP3WidthBug(AVCodecContext* avctx) static bool HasATIMP2Bug(AVCodecContext* avctx) { - DXGI_ADAPTER_DESC AIdentifier = {}; - DX::DeviceResources::Get()->GetAdapterDesc(&AIdentifier); + const DXGI_ADAPTER_DESC AIdentifier = DX::DeviceResources::Get()->GetAdapterDesc(); + if (AIdentifier.VendorId != PCIV_AMD) return false; @@ -1141,8 +1136,7 @@ static bool HasATIMP2Bug(AVCodecContext* avctx) static bool HasAMDH264SDiBug(AVCodecContext* avctx) { - DXGI_ADAPTER_DESC AIdentifier = {}; - DX::DeviceResources::Get()->GetAdapterDesc(&AIdentifier); + const DXGI_ADAPTER_DESC AIdentifier = DX::DeviceResources::Get()->GetAdapterDesc(); if (AIdentifier.VendorId != PCIV_AMD) return false; @@ -1245,8 +1239,7 @@ bool CDecoder::Open(AVCodecContext* avctx, AVCodecContext* mainctx, enum AVPixel m_refs = 2 + m_shared; // 1 decode + 1 safety + display m_surface_alignment = 16; - DXGI_ADAPTER_DESC ad = {}; - DX::DeviceResources::Get()->GetAdapterDesc(&ad); + const DXGI_ADAPTER_DESC ad = DX::DeviceResources::Get()->GetAdapterDesc(); size_t videoMem = ad.SharedSystemMemory + ad.DedicatedVideoMemory + ad.DedicatedSystemMemory; CLog::LogF(LOGINFO, "Total video memory available is {} MB (dedicated = {} MB, shared = {} MB)", diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.cpp index 1df8a6eef6..62bed9f5d5 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.cpp @@ -185,8 +185,7 @@ bool CProcessorHD::OpenProcessor() // AMD/HDR (as of 2023-06-16): processor tone maps by default and modifies high code values // We want "passthrough" of the signal and to do our own tone mapping when needed. // Disable the functionality by pretending that the display supports all PQ levels (0-10000) - DXGI_ADAPTER_DESC ad{}; - DX::DeviceResources::Get()->GetAdapterDesc(&ad); + const DXGI_ADAPTER_DESC ad = DX::DeviceResources::Get()->GetAdapterDesc(); bool streamIsHDR = (m_color_primaries == AVCOL_PRI_BT2020) && (m_color_transfer == AVCOL_TRC_SMPTE2084 || m_color_transfer == AVCOL_TRC_ARIB_STD_B67); @@ -525,8 +524,7 @@ void CProcessorHD::TryEnableVideoSuperResolution() if (!m_pVideoContext || !m_pVideoProcessor) return; - DXGI_ADAPTER_DESC ad{}; - DX::DeviceResources::Get()->GetAdapterDesc(&ad); + const DXGI_ADAPTER_DESC ad = DX::DeviceResources::Get()->GetAdapterDesc(); if (ad.VendorId == PCIV_Intel) { diff --git a/xbmc/rendering/dx/DeviceResources.cpp b/xbmc/rendering/dx/DeviceResources.cpp index 851642f270..2a33d2a828 100644 --- a/xbmc/rendering/dx/DeviceResources.cpp +++ b/xbmc/rendering/dx/DeviceResources.cpp @@ -131,15 +131,19 @@ void DX::DeviceResources::GetOutput(IDXGIOutput** ppOutput) const *ppOutput = pOutput.Detach(); } -void DX::DeviceResources::GetAdapterDesc(DXGI_ADAPTER_DESC* desc) const +DXGI_ADAPTER_DESC DX::DeviceResources::GetAdapterDesc() const { + DXGI_ADAPTER_DESC desc{}; + if (m_adapter) - m_adapter->GetDesc(desc); + m_adapter->GetDesc(&desc); // GetDesc() returns VendorId == 0 in Xbox however, we need to know that // GPU is AMD to apply workarounds in DXVA.cpp CheckCompatibility() same as desktop if (CSysInfo::GetWindowsDeviceFamily() == CSysInfo::Xbox) - desc->VendorId = PCIV_AMD; + desc.VendorId = PCIV_AMD; + + return desc; } void DX::DeviceResources::GetDisplayMode(DXGI_MODE_DESC* mode) const @@ -620,12 +624,9 @@ void DX::DeviceResources::ResizeBuffers() // Xbox needs 10 bit swapchain to output true 4K resolution #ifdef TARGET_WINDOWS_DESKTOP - DXGI_ADAPTER_DESC ad = {}; - GetAdapterDesc(&ad); - // Some AMD graphics has issues with 10 bit in SDR. // Enabled by default only in Intel and NVIDIA with latest drivers/hardware - if (m_d3dFeatureLevel < D3D_FEATURE_LEVEL_12_1 || ad.VendorId == PCIV_AMD) + if (m_d3dFeatureLevel < D3D_FEATURE_LEVEL_12_1 || GetAdapterDesc().VendorId == PCIV_AMD) use10bit = false; #endif @@ -1151,8 +1152,7 @@ void DX::DeviceResources::CheckDXVA2SharedDecoderSurfaces() if (!m_NV12SharedTexturesSupport) return; - DXGI_ADAPTER_DESC ad = {}; - GetAdapterDesc(&ad); + const DXGI_ADAPTER_DESC ad = GetAdapterDesc(); m_DXVA2SharedDecoderSurfaces = ad.VendorId == PCIV_Intel || @@ -1174,8 +1174,7 @@ void DX::DeviceResources::CheckDXVA2SharedDecoderSurfaces() VideoDriverInfo DX::DeviceResources::GetVideoDriverVersion() { - DXGI_ADAPTER_DESC ad = {}; - GetAdapterDesc(&ad); + const DXGI_ADAPTER_DESC ad = GetAdapterDesc(); VideoDriverInfo driver = CWIN32Util::GetVideoDriverInfo(ad.VendorId, ad.Description); @@ -1311,10 +1310,7 @@ void DX::DeviceResources::SetHdrColorSpace(const DXGI_COLOR_SPACE_TYPE colorSpac if (m_usedSwapChain && m_IsTransferPQ != (colorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020)) { - DXGI_ADAPTER_DESC ad{}; - GetAdapterDesc(&ad); - - if (ad.VendorId == PCIV_AMD) + if (GetAdapterDesc().VendorId == PCIV_AMD) { // Temporary release, can't hold references during swap chain re-creation swapChain3 = nullptr; diff --git a/xbmc/rendering/dx/DeviceResources.h b/xbmc/rendering/dx/DeviceResources.h index 123517c29a..8a3e86cfeb 100644 --- a/xbmc/rendering/dx/DeviceResources.h +++ b/xbmc/rendering/dx/DeviceResources.h @@ -68,7 +68,7 @@ namespace DX CD3DTexture& GetBackBuffer() { return m_backBufferTex; } void GetOutput(IDXGIOutput** ppOutput) const; - void GetAdapterDesc(DXGI_ADAPTER_DESC *desc) const; + DXGI_ADAPTER_DESC GetAdapterDesc() const; void GetDisplayMode(DXGI_MODE_DESC *mode) const; D3D11_VIEWPORT GetScreenViewport() const { return m_screenViewport; } diff --git a/xbmc/rendering/dx/RenderSystemDX.cpp b/xbmc/rendering/dx/RenderSystemDX.cpp index 0607a9a1ac..dd369e284c 100644 --- a/xbmc/rendering/dx/RenderSystemDX.cpp +++ b/xbmc/rendering/dx/RenderSystemDX.cpp @@ -88,8 +88,7 @@ bool CRenderSystemDX::InitRenderSystem() CPoint camPoint = { outputSize.Width * 0.5f, outputSize.Height * 0.5f }; SetCameraPosition(camPoint, outputSize.Width, outputSize.Height); - DXGI_ADAPTER_DESC AIdentifier = {}; - m_deviceResources->GetAdapterDesc(&AIdentifier); + const DXGI_ADAPTER_DESC AIdentifier = m_deviceResources->GetAdapterDesc(); m_RenderRenderer = KODI::PLATFORM::WINDOWS::FromW(AIdentifier.Description); uint32_t version = 0; for (uint32_t decimal = m_deviceResources->GetDeviceFeatureLevel() >> 8, round = 0; decimal > 0; decimal >>= 4, ++round) |