[TTVD] Add GPU workaround to disable software rendering 18/314818/1
authorJakub Gajownik <j.gajownik2@samsung.com>
Fri, 12 Jul 2024 17:44:21 +0000 (19:44 +0200)
committerj.gajownik2 <j.gajownik2@samsung.com>
Fri, 19 Jul 2024 15:12:25 +0000 (17:12 +0200)
Some specific boards struggles with using overlay with
software rendering:
- OscarP has different color conversion when first video
  is played,
- for RoseP software rendering is causing weird artifacts
  on other playing videos.

For now, using software rendering is disabled by GPU
workaround. We'll work more on that till some working
solution is developed or bug in driver is solved.

Bug: https://jira-eu.sec.samsung.net/browse/VDGAME-532
Change-Id: If21e8f6ca2d98416b1250460ec19aa09e0731472
Signed-off-by: Jakub Gajownik <j.gajownik2@samsung.com>
components/viz/service/display/overlay_processor_tizen.cc
gpu/config/gpu_driver_bug_list.json
gpu/config/gpu_workaround_list.txt
tizen_src/chromium_impl/ui/ozone/platform/efl/efl_surface_factory.cc
tizen_src/chromium_impl/ui/ozone/platform/efl/efl_surface_factory.h
tizen_src/chromium_impl/ui/ozone/platform/efl/output_surface_impl.cc
tizen_src/chromium_impl/ui/ozone/platform/efl/rendering_workarounds.cc
tizen_src/chromium_impl/ui/ozone/platform/efl/rendering_workarounds.h
tizen_src/chromium_impl/ui/ozone/platform/efl/tizen_native_pixmap.cc
tizen_src/chromium_impl/ui/ozone/platform/efl/tizen_native_pixmap.h

index e0748c482e316f9b7476bb2318edf2b841aa1b81..449006d258009da15e80db36db88fe4a978898b9 100644 (file)
@@ -86,14 +86,12 @@ OverlayProcessorTizen::OverlayProcessorTizen(
               ->GetGpuDriverBugWorkarounds())) {
   weak_this_ = weak_factory_.GetWeakPtr();
 
-  plane_collection_manager_ =
-      reinterpret_cast<ui::EflSurfaceFactory*>(
-          ui::OzonePlatform::GetInstance()->GetSurfaceFactoryOzone())
-          ->PlaneCollectionManager();
+  auto* efl_surface_factory = reinterpret_cast<ui::EflSurfaceFactory*>(
+      ui::OzonePlatform::GetInstance()->GetSurfaceFactoryOzone());
+  plane_collection_manager_ = efl_surface_factory->PlaneCollectionManager();
   output_surface_manager_ =
-      reinterpret_cast<ui::EflSurfaceFactory*>(
-          ui::OzonePlatform::GetInstance()->GetSurfaceFactoryOzone())
-          ->GetOutputSurfaceManager(rendering_workarounds_);
+      efl_surface_factory->GetOutputSurfaceManager(rendering_workarounds_);
+  efl_surface_factory->SetRenderingWorkarounds(rendering_workarounds_);
 
   strategies_.push_back(std::make_unique<OverlayStrategyFullscreen>(this));
   // TODO(vdwasm) VDGAME-336 - Disabling this strategy since reordering planes
index 3e69922fafccba3f94e83b0df94d42c983ed0c74..efd15928c4f1fd769c32ea2c39f90f8dd31492c7 100644 (file)
         "ttvd_prefer_manual_rendering_for_low_latency",
         "ttvd_disable_faster_decoder_selection"
       ]
+    },
+    {
+      "id": 414,
+      "description": "Disable manual rendering within TTVD, it struggles with color conversion when starting",
+      "os": {
+        "type": "linux"
+      },
+      "machine_model_name": ["OSCARP"],
+      "features": [
+        "ttvd_disable_manual_rendering"
+      ]
+    },
+    {
+      "id": 415,
+      "description": "Disable manual rendering within TTVD, it might cause issue with other video playback",
+      "os": {
+        "type": "linux"
+      },
+      "machine_model_name": ["ROSEP"],
+      "features": [
+        "ttvd_disable_manual_rendering"
+      ]
     }
   ]
 }
index e314ab8c8986c038e484b525f7e29b6aaf1f698f..6bb728bc59187717e4454fa9c2ac57fae6154645 100644 (file)
@@ -127,6 +127,7 @@ ttvd_force_first_frame_rendering
 ttvd_force_frames_rendering
 ttvd_disable_buffer_parallel_copy
 ttvd_disable_faster_decoder_selection
+ttvd_disable_manual_rendering
 ttvd_prefer_manual_rendering_for_low_latency
 scalarize_vec_and_mat_constructor_args
 set_zero_level_before_generating_mipmap
index e0af5c6e1b6712788d7dd849bffad11dc6dae61c..fd07b8e6b46991fbe5d2038e121c851afd9033f9 100644 (file)
@@ -155,7 +155,8 @@ EflSurfaceFactory::CreateNativePixmapFromHandle(
     gfx::BufferFormat format,
     gfx::NativePixmapHandle handle) {
   return base::MakeRefCounted<ui::TizenNativePixmap>(
-      this, std::move(handle), size, plane_collection_manager_);
+      this, std::move(handle), size, plane_collection_manager_,
+      rendering_workarounds_);
 }
 
 scoped_refptr<OutputSurfaceProxy> EflSurfaceFactory::GetSurface(
@@ -187,6 +188,11 @@ scoped_refptr<OutputSurfaceManager> EflSurfaceFactory::GetOutputSurfaceManager(
   return output_surface_manager_;
 }
 
+void EflSurfaceFactory::SetRenderingWorkarounds(
+    const RenderingWorkarounds& rendering_workarounds) {
+  rendering_workarounds_ = rendering_workarounds;
+}
+
 #endif  // defined(TIZEN_TV_UPSTREAM_MULTIMEDIA)
 
 }  // namespace ui
index 7de4c03dd42d351ce6fa5a611d883f27ac0fbb85..531864824ca6337c42fe215925e626c9a40ac0f5 100644 (file)
@@ -55,6 +55,9 @@ class EflSurfaceFactory : public SurfaceFactoryOzone {
 
   scoped_refptr<OutputSurfaceManager> GetOutputSurfaceManager(
       const RenderingWorkarounds& rendering_workarounds);
+
+  void SetRenderingWorkarounds(
+      const RenderingWorkarounds& rendering_workarounds);
 #endif
 
  private:
@@ -65,6 +68,7 @@ class EflSurfaceFactory : public SurfaceFactoryOzone {
   base::Lock output_surface_manager_lock_;
   scoped_refptr<ui::OutputSurfaceManager> output_surface_manager_
       GUARDED_BY(output_surface_manager_lock_);
+  RenderingWorkarounds rendering_workarounds_;
 #endif
 
   std::unique_ptr<GLOzone> egl_implementation_;
index a58148c2cf590b6bdd357596b31b435355b1e34f..d12062183e19927853ce4ff6d0c7f89132fb2621 100644 (file)
@@ -598,7 +598,8 @@ void OutputSurfaceImpl::UpdateScalerState(bool muted, bool synced) {
 bool OutputSurfaceImpl::SelectRenderingMethod(
     const gfx::OverlayRenderData& render_data) {
   const bool supports_software_rendering =
-      IsSoftwareRenderingCapable(render_data);
+      IsSoftwareRenderingCapable(render_data) &&
+      !rendering_workarounds_.disable_manual_rendering;
   const bool supports_direct_rendering = render_data.plane_id != 0;
   const bool force_software_rendering =
       supports_software_rendering && render_data.low_latency &&
index 622ba47f60cc2398f1a9572e06f8e7a4a77b91fe..db2c11fae7246214ffe6abebd398f2325bcdb756 100644 (file)
@@ -17,6 +17,8 @@ RenderingWorkarounds ConvertToRenderingWorkarounds(
       gpu_driver_workarounds.limit_rotation_to_single_plane;
   result.prefer_manual_rendering_for_low_latency =
       gpu_driver_workarounds.ttvd_prefer_manual_rendering_for_low_latency;
+  result.disable_manual_rendering =
+      gpu_driver_workarounds.ttvd_disable_manual_rendering;
   return result;
 }
 
index d1d700e305dd8d847613544a982ea4781421e565..19c8dcb97dbf9c986315fb8df27e26967adfa262 100644 (file)
@@ -14,6 +14,7 @@ struct RenderingWorkarounds {
   bool replace_rotate_180_with_hv_flip = false;
   bool limit_rotation_to_single_plane = false;
   bool prefer_manual_rendering_for_low_latency = false;
+  bool disable_manual_rendering = false;
 };
 
 RenderingWorkarounds ConvertToRenderingWorkarounds(
index 573202aca0ff41df72c1f62c5d42bb1311b04f26..5adc16753ba1df06472119b4c6884d8d145b866d 100644 (file)
@@ -21,11 +21,13 @@ TizenNativePixmap::TizenNativePixmap(
     ui::EflSurfaceFactory* surface_factory,
     gfx::NativePixmapHandle handle,
     gfx::Size size,
-    scoped_refptr<gfx::TizenPlaneCollectionManager> plane_collection_manager)
+    scoped_refptr<gfx::TizenPlaneCollectionManager> plane_collection_manager,
+    const RenderingWorkarounds& rendering_workarounds)
     : handle_(std::move(handle)),
       size_(size),
       plane_collection_manager_(plane_collection_manager),
-      surface_factory_(surface_factory) {}
+      surface_factory_(surface_factory),
+      rendering_workarounds_(rendering_workarounds) {}
 
 bool TizenNativePixmap::AreDmaBufFdsValid() const {
   return true;
index d91ca99803d70a723e2766688d8af5718b09faff..731a1520a5bc9010d8e5f38a9a2e3da9e4c58c1c 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "ui/gfx/native_pixmap.h"
 #include "ui/gfx/tizen_plane_collection_manager.h"
+#include "ui/ozone/platform/efl/rendering_workarounds.h"
 
 namespace ui {
 
@@ -22,7 +23,8 @@ class TizenNativePixmap : public gfx::NativePixmap {
       ui::EflSurfaceFactory* surface_factory,
       gfx::NativePixmapHandle handle,
       gfx::Size size,
-      scoped_refptr<gfx::TizenPlaneCollectionManager> plane_collection_manager);
+      scoped_refptr<gfx::TizenPlaneCollectionManager> plane_collection_manager,
+      const RenderingWorkarounds& rendering_workarounds);
 
   TizenNativePixmap(const TizenNativePixmap&) = delete;
   TizenNativePixmap& operator=(const TizenNativePixmap&) = delete;
@@ -54,7 +56,8 @@ class TizenNativePixmap : public gfx::NativePixmap {
 
   bool SupportsOverlayPlane() const {
     return handle_.picture_id.has_value() ||
-           handle_.modifier == kFormatModifierLinear;
+           (handle_.modifier == kFormatModifierLinear &&
+            !rendering_workarounds_.disable_manual_rendering);
   }
 
  private:
@@ -66,6 +69,7 @@ class TizenNativePixmap : public gfx::NativePixmap {
   const gfx::Size size_;
   scoped_refptr<gfx::TizenPlaneCollectionManager> plane_collection_manager_;
   ui::EflSurfaceFactory* surface_factory_;
+  RenderingWorkarounds rendering_workarounds_;
 };
 
 }  // namespace ui