rockchip: kodi: add workaround for rendering sw-decoded content on mali4x0 GPUs

Current upstream mesa has a shortcoming for YUV12 to XR24 conversion
so that DRMPRIMEGLES conversion cannot be used (for details see
https://gitlab.freedesktop.org/mesa/mesa/-/issues/4074)

This adds a patch to kodi to not use this on lima GPUs and allow
proper fallback to LinuxRendererGLES where shaders are used and the
conversion is working.
This commit is contained in:
Alex Bee 2021-01-17 17:08:22 +01:00
parent aa7c55f606
commit 6528f66833

View File

@ -0,0 +1,44 @@
From 7479f183788ad47dc5ab74666808c29b7c272531 Mon Sep 17 00:00:00 2001
From: Alex Bee <knaerzche@gmail.com>
Date: Thu, 14 Jan 2021 23:51:20 +0100
Subject: [PATCH] HACKOFF: DRMPRIMEGLES: avoid for lima due to broken
YU12->XR24 conversion
Signed-off-by: Alex Bee <knaerzche@gmail.com>
---
xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.cpp | 2 +-
.../VideoRenderers/HwDecRender/RendererDRMPRIMEGLES.cpp | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.cpp
index 8c78f1beac..241a307351 100644
--- a/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.cpp
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.cpp
@@ -329,7 +329,7 @@ EShaderFormat CBaseRenderer::GetShaderFormat()
{
EShaderFormat ret = SHADER_NONE;
- if (m_format == AV_PIX_FMT_YUV420P)
+ if (m_format == AV_PIX_FMT_YUV420P || m_format == AV_PIX_FMT_DRM_PRIME)
ret = SHADER_YV12;
else if (m_format == AV_PIX_FMT_YUV420P9)
ret = SHADER_YV12_9;
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIMEGLES.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIMEGLES.cpp
index c1d69bf381..d33b58a321 100644
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIMEGLES.cpp
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIMEGLES.cpp
@@ -59,6 +59,11 @@ CBaseRenderer* CRendererDRMPRIMEGLES::Create(CVideoBuffer* buffer)
if (!winSystemEGL)
return nullptr;
+ if (CServiceBroker::GetRenderSystem()->GetRenderVendor() == "lima")
+ {
+ CLog::LogF(LOGDEBUG, "Not using DRMPRIMEGLES due to broken mesa lima driver.");
+ return nullptr;
+ }
CEGLImage image{winSystemEGL->GetEGLDisplay()};
if (!image.SupportsFormatAndModifier(format, modifier))
return nullptr;
--
2.25.1