Add extended brightness plumbing to VRI
Test: manual, builds & boots
Bug: 266628247
Change-Id: I6310883f3d10bb3eefa3cc189938b6c2c1a14544
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
index 3692f09..2017eb6 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
@@ -642,12 +642,9 @@
mSurfaceColorSpace = DeviceInfo::get()->getWideColorSpace();
break;
case ColorMode::Hdr:
- mSurfaceColorType = SkColorType::kRGBA_F16_SkColorType;
- mSurfaceColorSpace = SkColorSpace::MakeRGB(GetPQSkTransferFunction(), SkNamedGamut::kRec2020);
- break;
- case ColorMode::Hdr10:
- mSurfaceColorType = SkColorType::kRGBA_1010102_SkColorType;
- mSurfaceColorSpace = SkColorSpace::MakeRGB(GetPQSkTransferFunction(), SkNamedGamut::kRec2020);
+ mSurfaceColorType = SkColorType::kN32_SkColorType;
+ mSurfaceColorSpace = SkColorSpace::MakeRGB(
+ GetExtendedTransferFunction(mTargetSdrHdrRatio), SkNamedGamut::kDisplayP3);
break;
case ColorMode::A8:
mSurfaceColorType = SkColorType::kAlpha_8_SkColorType;
@@ -656,6 +653,16 @@
}
}
+void SkiaPipeline::setTargetSdrHdrRatio(float ratio) {
+ if (mColorMode == ColorMode::Hdr) {
+ mTargetSdrHdrRatio = ratio;
+ mSurfaceColorSpace = SkColorSpace::MakeRGB(GetExtendedTransferFunction(mTargetSdrHdrRatio),
+ SkNamedGamut::kDisplayP3);
+ } else {
+ mTargetSdrHdrRatio = 1.f;
+ }
+}
+
// Overdraw debugging
// These colors should be kept in sync with Caches::getOverdrawColor() with a few differences.
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.h b/libs/hwui/pipeline/skia/SkiaPipeline.h
index 4f93346..befee89 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.h
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.h
@@ -78,6 +78,8 @@
virtual void setHardwareBuffer(AHardwareBuffer* buffer) override;
bool hasHardwareBuffer() override { return mHardwareBuffer != nullptr; }
+ void setTargetSdrHdrRatio(float ratio) override;
+
protected:
sk_sp<SkSurface> getBufferSkSurface(
const renderthread::HardwareBufferRenderParams& bufferParams);
@@ -92,6 +94,7 @@
ColorMode mColorMode = ColorMode::Default;
SkColorType mSurfaceColorType;
sk_sp<SkColorSpace> mSurfaceColorSpace;
+ float mTargetSdrHdrRatio = 1.f;
bool isCapturingSkp() const { return mCaptureMode != CaptureMode::None; }
diff --git a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
index b94b6cf..99298bc 100644
--- a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
@@ -185,6 +185,13 @@
return mVkSurface != nullptr;
}
+void SkiaVulkanPipeline::setTargetSdrHdrRatio(float ratio) {
+ SkiaPipeline::setTargetSdrHdrRatio(ratio);
+ if (mVkSurface) {
+ mVkSurface->setColorSpace(mSurfaceColorSpace);
+ }
+}
+
bool SkiaVulkanPipeline::isSurfaceReady() {
return CC_UNLIKELY(mVkSurface != nullptr);
}
diff --git a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h
index 2c7b268..d921ddb 100644
--- a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h
+++ b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h
@@ -53,6 +53,8 @@
void onStop() override;
bool isSurfaceReady() override;
bool isContextReady() override;
+ bool supportsExtendedRangeHdr() const override { return true; }
+ void setTargetSdrHdrRatio(float ratio) override;
static void invokeFunctor(const renderthread::RenderThread& thread, Functor* functor);
static sk_sp<Bitmap> allocateHardwareBitmap(renderthread::RenderThread& thread,