aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthexai <58434170+thexai@users.noreply.github.com>2023-08-06 19:10:11 +0200
committerGitHub <noreply@github.com>2023-08-06 19:10:11 +0200
commitbcb774f785c7e99b47292b6fc44b307ec6d4ab17 (patch)
tree9030ff79d67dfc383ce0f58154bfa6e802349f48
parentbd39be048b740ae7c7f03e9784877e87c9232e7c (diff)
parent17b768facaa6f1839616db4708ea7f362691266e (diff)
Merge pull request #23585 from thexai/get-adapter-desc
[Windows] improve GetAdapterDesc() - return struct by value
-rw-r--r--xbmc/cores/VideoPlayer/DVDCodecs/Video/DXVA.cpp29
-rw-r--r--xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.cpp6
-rw-r--r--xbmc/rendering/dx/DeviceResources.cpp26
-rw-r--r--xbmc/rendering/dx/DeviceResources.h2
-rw-r--r--xbmc/rendering/dx/RenderSystemDX.cpp3
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 ffaa06604e..f4fbc6be30 100644
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DXVA.cpp
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DXVA.cpp
@@ -332,12 +332,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)))
@@ -704,8 +702,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;
@@ -1212,8 +1209,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)
{
@@ -1229,8 +1225,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))
@@ -1245,8 +1240,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;
@@ -1260,8 +1255,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;
@@ -1364,8 +1358,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 3d3767b05e..798deabcb6 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);
@@ -453,8 +452,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 fca6770345..8cfe5cf62c 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 ||
@@ -1182,8 +1182,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);
@@ -1319,10 +1318,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 d72ea9f9f6..01fa76a659 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)