Add extended brightness plumbing to VRI
Test: manual, builds & boots
Bug: 266628247
Change-Id: I6310883f3d10bb3eefa3cc189938b6c2c1a14544
diff --git a/libs/hwui/renderthread/VulkanSurface.cpp b/libs/hwui/renderthread/VulkanSurface.cpp
index 7dd3561..2efa5d6 100644
--- a/libs/hwui/renderthread/VulkanSurface.cpp
+++ b/libs/hwui/renderthread/VulkanSurface.cpp
@@ -199,7 +199,14 @@
outWindowInfo->bufferFormat = ColorTypeToBufferFormat(colorType);
outWindowInfo->colorspace = colorSpace;
- outWindowInfo->dataspace = ColorSpaceToADataSpace(colorSpace.get(), colorType);
+ outWindowInfo->colorMode = colorMode;
+
+ if (colorMode == ColorMode::Hdr) {
+ outWindowInfo->dataspace =
+ static_cast<android_dataspace>(STANDARD_DCI_P3 | TRANSFER_SRGB | RANGE_EXTENDED);
+ } else {
+ outWindowInfo->dataspace = ColorSpaceToADataSpace(colorSpace.get(), colorType);
+ }
LOG_ALWAYS_FATAL_IF(
outWindowInfo->dataspace == HAL_DATASPACE_UNKNOWN && colorType != kAlpha_8_SkColorType,
"Unsupported colorspace");
@@ -496,6 +503,33 @@
return currentBuffer.hasValidContents ? (mPresentCount - currentBuffer.lastPresentedCount) : 0;
}
+void VulkanSurface::setColorSpace(sk_sp<SkColorSpace> colorSpace) {
+ mWindowInfo.colorspace = std::move(colorSpace);
+ for (int i = 0; i < kNumBufferSlots; i++) {
+ mNativeBuffers[i].skSurface.reset();
+ }
+
+ if (mWindowInfo.colorMode == ColorMode::Hdr) {
+ mWindowInfo.dataspace =
+ static_cast<android_dataspace>(STANDARD_DCI_P3 | TRANSFER_SRGB | RANGE_EXTENDED);
+ } else {
+ mWindowInfo.dataspace = ColorSpaceToADataSpace(
+ mWindowInfo.colorspace.get(), BufferFormatToColorType(mWindowInfo.bufferFormat));
+ }
+ LOG_ALWAYS_FATAL_IF(mWindowInfo.dataspace == HAL_DATASPACE_UNKNOWN &&
+ mWindowInfo.bufferFormat != AHARDWAREBUFFER_FORMAT_R8_UNORM,
+ "Unsupported colorspace");
+
+ if (mNativeWindow) {
+ int err = native_window_set_buffers_data_space(mNativeWindow.get(), mWindowInfo.dataspace);
+ if (err != 0) {
+ ALOGE("VulkanSurface::setColorSpace() native_window_set_buffers_data_space(%d) "
+ "failed: %s (%d)",
+ mWindowInfo.dataspace, strerror(-err), err);
+ }
+ }
+}
+
} /* namespace renderthread */
} /* namespace uirenderer */
} /* namespace android */