diff options
author | 2023-04-20 13:40:18 -0400 | |
---|---|---|
committer | 2023-04-21 12:31:27 -0400 | |
commit | 45fd4a5013383f37c8e8a354b1626a8e1aebe29a (patch) | |
tree | 6d9cdd5016a92a7a45d333ef29c87ad23f1717b7 | |
parent | 269c2879760de630bfbef53d9527ff51150cf6ab (diff) |
Add plumbing for HDR WebView
Bug: 279030860
Test: make
Change-Id: Idc7879193c6190a3fadfb46d67fe81eb47101283
-rw-r--r-- | libs/hwui/effects/GainmapRenderer.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/effects/GainmapRenderer.h | 2 | ||||
-rw-r--r-- | libs/hwui/pipeline/skia/GLFunctorDrawable.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/pipeline/skia/VkFunctorDrawable.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/private/hwui/DrawGlInfo.h | 5 | ||||
-rw-r--r-- | libs/hwui/private/hwui/DrawVkInfo.h | 5 |
7 files changed, 19 insertions, 1 deletions
diff --git a/libs/hwui/effects/GainmapRenderer.cpp b/libs/hwui/effects/GainmapRenderer.cpp index bfe4eaf39e21..613f52b32bea 100644 --- a/libs/hwui/effects/GainmapRenderer.cpp +++ b/libs/hwui/effects/GainmapRenderer.cpp @@ -38,7 +38,7 @@ namespace android::uirenderer { using namespace renderthread; -static float getTargetHdrSdrRatio(const SkColorSpace* destColorspace) { +float getTargetHdrSdrRatio(const SkColorSpace* destColorspace) { // We should always have a known destination colorspace. If we don't we must be in some // legacy mode where we're lost and also definitely not going to HDR if (destColorspace == nullptr) { diff --git a/libs/hwui/effects/GainmapRenderer.h b/libs/hwui/effects/GainmapRenderer.h index 4ed2445da17e..0ab03f0b571a 100644 --- a/libs/hwui/effects/GainmapRenderer.h +++ b/libs/hwui/effects/GainmapRenderer.h @@ -25,6 +25,8 @@ namespace android::uirenderer { +float getTargetHdrSdrRatio(const SkColorSpace* destColorspace); + void DrawGainmapBitmap(SkCanvas* c, const sk_sp<const SkImage>& image, const SkRect& src, const SkRect& dst, const SkSamplingOptions& sampling, const SkPaint* paint, SkCanvas::SrcRectConstraint constraint, diff --git a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp index a4960ea17c79..c58ba6868eb5 100644 --- a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp +++ b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp @@ -26,6 +26,7 @@ #include "SkM44.h" #include "include/gpu/GpuTypes.h" // from Skia #include "utils/GLUtils.h" +#include <effects/GainmapRenderer.h> namespace android { namespace uirenderer { @@ -129,6 +130,7 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) { info.height = fboSize.height(); mat4.getColMajor(&info.transform[0]); info.color_space_ptr = canvas->imageInfo().colorSpace(); + info.currentHdrSdrRatio = getTargetHdrSdrRatio(info.color_space_ptr); // ensure that the framebuffer that the webview will render into is bound before we clear // the stencil and/or draw the functor. diff --git a/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp b/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp index e6ef95b9cf91..e299d12b1d67 100644 --- a/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp +++ b/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp @@ -30,6 +30,7 @@ #include "renderthread/VulkanManager.h" #include "thread/ThreadBase.h" #include "utils/TimeUtils.h" +#include "effects/GainmapRenderer.h" namespace android { namespace uirenderer { @@ -73,6 +74,7 @@ void VkFunctorDrawHandler::draw(const GrBackendDrawableInfo& info) { .clip_right = mClip.fRight, .clip_bottom = mClip.fBottom, .is_layer = !vulkan_info.fFromSwapchainOrAndroidWindow, + .currentHdrSdrRatio = getTargetHdrSdrRatio(mImageInfo.colorSpace()), }; mat4.getColMajor(¶ms.transform[0]); params.secondary_command_buffer = vulkan_info.fSecondaryCommandBuffer; diff --git a/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp b/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp index e168a7b9459a..adf3c06b8624 100644 --- a/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp +++ b/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp @@ -32,6 +32,7 @@ #include "renderthread/EglManager.h" #include "thread/ThreadBase.h" #include "utils/TimeUtils.h" +#include "effects/GainmapRenderer.h" #include <SkBlendMode.h> @@ -139,6 +140,7 @@ void VkInteropFunctorDrawable::onDraw(SkCanvas* canvas) { info.height = mFBInfo.height(); mat4.getColMajor(&info.transform[0]); info.color_space_ptr = canvas->imageInfo().colorSpace(); + info.currentHdrSdrRatio = getTargetHdrSdrRatio(info.color_space_ptr); glViewport(0, 0, info.width, info.height); diff --git a/libs/hwui/private/hwui/DrawGlInfo.h b/libs/hwui/private/hwui/DrawGlInfo.h index 501b8df9bc36..7888c8719e88 100644 --- a/libs/hwui/private/hwui/DrawGlInfo.h +++ b/libs/hwui/private/hwui/DrawGlInfo.h @@ -86,6 +86,11 @@ struct DrawGlInfo { // commands are issued. kStatusDrew = 0x4 }; + + // The current HDR/SDR ratio that we are rendering to. The transform to SDR will already + // be baked into the color_space_ptr, so this is just to indicate the amount of extended + // range is available if desired + float currentHdrSdrRatio; }; // struct DrawGlInfo } // namespace uirenderer diff --git a/libs/hwui/private/hwui/DrawVkInfo.h b/libs/hwui/private/hwui/DrawVkInfo.h index 5c596576df4e..8f7063d72314 100644 --- a/libs/hwui/private/hwui/DrawVkInfo.h +++ b/libs/hwui/private/hwui/DrawVkInfo.h @@ -71,6 +71,11 @@ struct VkFunctorDrawParams { // Input: Whether destination surface is offscreen surface. bool is_layer; + + // The current HDR/SDR ratio that we are rendering to. The transform to SDR will already + // be baked into the color_space_ptr, so this is just to indicate the amount of extended + // range is available if desired + float currentHdrSdrRatio; }; } // namespace uirenderer |