summaryrefslogtreecommitdiff
path: root/libs/hwui/renderthread/VulkanSurface.cpp
diff options
context:
space:
mode:
authorScott Lobdell <slobdell@google.com>2021-04-08 04:27:11 +0000
committerScott Lobdell <slobdell@google.com>2021-04-09 17:32:37 +0000
commit5f1da148b08c14445ce83ca151a84f75e489d274 (patch)
treedf59b2056d1fe2dbe09f6c85463ddf1769daf4e6 /libs/hwui/renderthread/VulkanSurface.cpp
parent702f04add003ce3e490a2f0bdff083a7e6f5979e (diff)
parent851218af5f83cdb89c02d680fb22212318150068 (diff)
Merge SP1A.210407.002
Change-Id: Iaad2b7cc2aeba166f003d0d460bc8ce29d1caab3
Diffstat (limited to 'libs/hwui/renderthread/VulkanSurface.cpp')
-rw-r--r--libs/hwui/renderthread/VulkanSurface.cpp37
1 files changed, 19 insertions, 18 deletions
diff --git a/libs/hwui/renderthread/VulkanSurface.cpp b/libs/hwui/renderthread/VulkanSurface.cpp
index acf4931d6144..474d2ccf8600 100644
--- a/libs/hwui/renderthread/VulkanSurface.cpp
+++ b/libs/hwui/renderthread/VulkanSurface.cpp
@@ -194,24 +194,25 @@ bool VulkanSurface::InitializeWindowInfoStruct(ANativeWindow* window, ColorMode
outWindowInfo->bufferCount = static_cast<uint32_t>(query_value);
}
- outWindowInfo->dataspace = HAL_DATASPACE_V0_SRGB;
- if (colorMode == ColorMode::WideColorGamut) {
- skcms_Matrix3x3 surfaceGamut;
- LOG_ALWAYS_FATAL_IF(!colorSpace->toXYZD50(&surfaceGamut),
- "Could not get gamut matrix from color space");
- if (memcmp(&surfaceGamut, &SkNamedGamut::kSRGB, sizeof(surfaceGamut)) == 0) {
- outWindowInfo->dataspace = HAL_DATASPACE_V0_SCRGB;
- } else if (memcmp(&surfaceGamut, &SkNamedGamut::kDisplayP3, sizeof(surfaceGamut)) == 0) {
- outWindowInfo->dataspace = HAL_DATASPACE_DISPLAY_P3;
- } else {
- LOG_ALWAYS_FATAL("Unreachable: unsupported wide color space.");
- }
- }
-
outWindowInfo->bufferFormat = ColorTypeToBufferFormat(colorType);
- VkFormat vkPixelFormat = VK_FORMAT_R8G8B8A8_UNORM;
- if (outWindowInfo->bufferFormat == AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT) {
- vkPixelFormat = VK_FORMAT_R16G16B16A16_SFLOAT;
+ outWindowInfo->colorspace = colorSpace;
+ outWindowInfo->dataspace = ColorSpaceToADataSpace(colorSpace.get(), colorType);
+ LOG_ALWAYS_FATAL_IF(outWindowInfo->dataspace == HAL_DATASPACE_UNKNOWN,
+ "Unsupported colorspace");
+
+ VkFormat vkPixelFormat;
+ switch (colorType) {
+ case kRGBA_8888_SkColorType:
+ vkPixelFormat = VK_FORMAT_R8G8B8A8_UNORM;
+ break;
+ case kRGBA_F16_SkColorType:
+ vkPixelFormat = VK_FORMAT_R16G16B16A16_SFLOAT;
+ break;
+ case kRGBA_1010102_SkColorType:
+ vkPixelFormat = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
+ break;
+ default:
+ LOG_ALWAYS_FATAL("Unsupported colorType: %d", (int)colorType);
}
LOG_ALWAYS_FATAL_IF(nullptr == vkManager.mGetPhysicalDeviceImageFormatProperties2,
@@ -425,7 +426,7 @@ VulkanSurface::NativeBufferInfo* VulkanSurface::dequeueNativeBuffer() {
if (bufferInfo->skSurface.get() == nullptr) {
bufferInfo->skSurface = SkSurface::MakeFromAHardwareBuffer(
mGrContext, ANativeWindowBuffer_getHardwareBuffer(bufferInfo->buffer.get()),
- kTopLeft_GrSurfaceOrigin, DataSpaceToColorSpace(mWindowInfo.dataspace), nullptr);
+ kTopLeft_GrSurfaceOrigin, mWindowInfo.colorspace, nullptr);
if (bufferInfo->skSurface.get() == nullptr) {
ALOGE("SkSurface::MakeFromAHardwareBuffer failed");
mNativeWindow->cancelBuffer(mNativeWindow.get(), buffer, fence_fd);