From a3e939ffb091d7f63b68652359a36f3721ccbacd Mon Sep 17 00:00:00 2001 From: CrystalP Date: Fri, 9 Jun 2023 22:56:58 -0400 Subject: [PATCH] [Windows] Add render method information to debug OSD --- xbmc/cores/VideoPlayer/VideoRenderers/DebugInfo.h | 1 + .../VideoPlayer/VideoRenderers/DebugRenderer.cpp | 1 + .../VideoRenderers/HwDecRender/DXVAHD.h | 1 + .../VideoRenderers/windows/RendererBase.cpp | 9 +++++++++ .../VideoRenderers/windows/RendererBase.h | 2 ++ .../VideoRenderers/windows/RendererDXVA.cpp | 15 +++++++++++++++ .../VideoRenderers/windows/RendererDXVA.h | 3 ++- .../VideoRenderers/windows/RendererShaders.cpp | 5 +++++ .../VideoRenderers/windows/RendererShaders.h | 2 +- .../VideoRenderers/windows/RendererSoftware.cpp | 5 +++++ .../VideoRenderers/windows/RendererSoftware.h | 2 +- 11 files changed, 43 insertions(+), 3 deletions(-) diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/DebugInfo.h b/xbmc/cores/VideoPlayer/VideoRenderers/DebugInfo.h index d800c1a837a06..8f18a1bfb04c4 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/DebugInfo.h +++ b/xbmc/cores/VideoPlayer/VideoRenderers/DebugInfo.h @@ -24,6 +24,7 @@ struct DEBUG_INFO_VIDEO std::string metaPrim; std::string metaLight; std::string shader; + std::string shader2; }; struct DEBUG_INFO_RENDER diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/DebugRenderer.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/DebugRenderer.cpp index 61cdedcc2ea8d..91a74e960b86a 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/DebugRenderer.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/DebugRenderer.cpp @@ -90,6 +90,7 @@ void CDebugRenderer::SetInfo(DEBUG_INFO_VIDEO& video, DEBUG_INFO_RENDER& render) m_adapter->AddSubtitle(video.metaPrim, 0., 5000000.); m_adapter->AddSubtitle(video.metaLight, 0., 5000000.); m_adapter->AddSubtitle(video.shader, 0., 5000000.); + m_adapter->AddSubtitle(video.shader2, 0., 5000000.); m_adapter->AddSubtitle(render.renderFlags, 0., 5000000.); m_adapter->AddSubtitle(render.videoOutput, 0., 5000000.); } diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.h b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.h index 5f10089d78bb4..cc280550dfe45 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.h +++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/DXVAHD.h @@ -123,6 +123,7 @@ class CProcessorHD : public ID3DResource static bool IsPQ10PassthroughSupported(const DXGI_FORMAT dxgi_format); static bool IsSuperResolutionSuitable(const VideoPicture& picture); void TryEnableVideoSuperResolution(); + bool IsVideoSuperResolutionEnabled() const { return m_superResolutionEnabled; } protected: bool ReInit(); diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererBase.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererBase.cpp index 91cf885e286fa..7fcd26531255f 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererBase.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererBase.cpp @@ -723,5 +723,14 @@ DEBUG_INFO_VIDEO CRendererBase::GetDebugInfo(int idx) if (m_outputShader) info.shader = m_outputShader->GetDebugInfo(); + info.shader2 = StringUtils::Format("Render method: {}", m_renderMethodName); + + std::string rmInfo = GetRenderMethodDebugInfo(); + if (!rmInfo.empty()) + { + info.shader2.append(", "); + info.shader2.append(rmInfo); + } + return info; } diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererBase.h b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererBase.h index d4f401aaff0f1..d54c20cbc5690 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererBase.h +++ b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererBase.h @@ -155,6 +155,7 @@ class CRendererBase virtual void CheckVideoParameters(); virtual void OnViewSizeChanged() {} virtual void OnOutputReset() {} + virtual std::string GetRenderMethodDebugInfo() const { return {}; } bool m_toneMapping = false; bool m_useDithering = false; @@ -188,4 +189,5 @@ class CRendererBase DXGI_HDR_METADATA_HDR10 m_lastHdr10 = {}; HDR_TYPE m_HdrType = HDR_TYPE::HDR_NONE_SDR; bool m_AutoSwitchHDR = false; + std::string m_renderMethodName{"NA"}; }; diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererDXVA.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererDXVA.cpp index 1a636bf07fd90..5f843cbc9024a 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererDXVA.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererDXVA.cpp @@ -110,6 +110,11 @@ void CRendererDXVA::GetWeight(std::map& weights, const VideoP weights[RENDER_DXVA] = weight; } +CRendererDXVA::CRendererDXVA(CVideoSettings& videoSettings) : CRendererHQ(videoSettings) +{ + m_renderMethodName = "DXVA"; +} + CRenderInfo CRendererDXVA::GetRenderInfo() { auto info = __super::GetRenderInfo(); @@ -295,6 +300,16 @@ CRenderBuffer* CRendererDXVA::CreateBuffer() return new CRenderBufferImpl(m_format, m_sourceWidth, m_sourceHeight); } +std::string CRendererDXVA::GetRenderMethodDebugInfo() const +{ + if (m_processor && DX::Windowing()->SupportsVideoSuperResolution()) + { + return StringUtils::Format("Video Super Resolution: {}", + m_processor->IsVideoSuperResolutionEnabled() ? "enabled" : "OFF"); + } + return {}; +} + CRendererDXVA::CRenderBufferImpl::CRenderBufferImpl(AVPixelFormat av_pix_format, unsigned width, unsigned height) : CRenderBuffer(av_pix_format, width, height) { diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererDXVA.h b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererDXVA.h index 0eed9503dc9ac..ea67e7b5f64f0 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererDXVA.h +++ b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererDXVA.h @@ -37,11 +37,12 @@ class CRendererDXVA : public CRendererHQ static void GetWeight(std::map& weights, const VideoPicture& picture); protected: - explicit CRendererDXVA(CVideoSettings& videoSettings) : CRendererHQ(videoSettings) {} + explicit CRendererDXVA(CVideoSettings& videoSettings); void CheckVideoParameters() override; void RenderImpl(CD3DTexture& target, CRect& sourceRect, CPoint(&destPoints)[4], uint32_t flags) override; CRenderBuffer* CreateBuffer() override; + virtual std::string GetRenderMethodDebugInfo() const; private: void FillBuffersSet(CRenderBuffer* (&buffers)[8]); diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererShaders.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererShaders.cpp index 32bce25f968da..9e869404a6e49 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererShaders.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererShaders.cpp @@ -71,6 +71,11 @@ void CRendererShaders::GetWeight(std::map& weights, const Vid weights[RENDER_PS] = weight; } +CRendererShaders::CRendererShaders(CVideoSettings& videoSettings) : CRendererHQ(videoSettings) +{ + m_renderMethodName = "Pixel Shaders"; +} + bool CRendererShaders::Supports(ESCALINGMETHOD method) const { if (method == VS_SCALINGMETHOD_LINEAR) diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererShaders.h b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererShaders.h index af4d677aae923..fc640d3b83767 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererShaders.h +++ b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererShaders.h @@ -39,7 +39,7 @@ class CRendererShaders : public CRendererHQ static void GetWeight(std::map& weights, const VideoPicture& picture); protected: - explicit CRendererShaders(CVideoSettings& videoSettings) : CRendererHQ(videoSettings) {} + explicit CRendererShaders(CVideoSettings& videoSettings); void RenderImpl(CD3DTexture& target, CRect& sourceRect, CPoint(&destPoints)[4], uint32_t flags) override; void CheckVideoParameters() override; void UpdateVideoFilters() override; diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererSoftware.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererSoftware.cpp index 7bc80a178d223..0f1b9279d2dc1 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererSoftware.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererSoftware.cpp @@ -39,6 +39,11 @@ void CRendererSoftware::GetWeight(std::map& weights, const Vi weights[RENDER_SW] = weight; } +CRendererSoftware::CRendererSoftware(CVideoSettings& videoSettings) : CRendererBase(videoSettings) +{ + m_renderMethodName = "Software"; +} + CRendererSoftware::~CRendererSoftware() { if (m_sw_scale_ctx) diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererSoftware.h b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererSoftware.h index fde19e7d6fbb0..165798b933e86 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererSoftware.h +++ b/xbmc/cores/VideoPlayer/VideoRenderers/windows/RendererSoftware.h @@ -28,7 +28,7 @@ class CRendererSoftware : public CRendererBase static void GetWeight(std::map& weights, const VideoPicture& picture); protected: - explicit CRendererSoftware(CVideoSettings& videoSettings) : CRendererBase(videoSettings) {} + explicit CRendererSoftware(CVideoSettings& videoSettings); CRenderBuffer* CreateBuffer() override; void RenderImpl(CD3DTexture& target, CRect& sourceRect, CPoint(&destPoints)[4], uint32_t flags) override; void FinalOutput(CD3DTexture& source, CD3DTexture& target, const CRect& src, const CPoint(&destPoints)[4]) override;