diff --git a/gpu/command_buffer/common/gpu_memory_buffer_support.cc b/gpu/command_buffer/common/gpu_memory_buffer_support.cc index bf79cf41728835..bc4862c5d2ff7a 100644 --- a/gpu/command_buffer/common/gpu_memory_buffer_support.cc +++ b/gpu/command_buffer/common/gpu_memory_buffer_support.cc @@ -80,7 +80,8 @@ GPU_EXPORT bool NativeBufferNeedsPlatformSpecificTextureTarget( format == gfx::BufferFormat::BGRA_8888 || format == gfx::BufferFormat::RGBX_8888 || format == gfx::BufferFormat::BGRX_8888 || - format == gfx::BufferFormat::RGBA_1010102) { + format == gfx::BufferFormat::RGBA_1010102 || + format == gfx::BufferFormat::BGRA_1010102) { return false; } #elif defined(OS_ANDROID) diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h index 78d3e9e93b283c..50cd4861991d65 100644 --- a/gpu/command_buffer/service/feature_info.h +++ b/gpu/command_buffer/service/feature_info.h @@ -37,9 +37,10 @@ class GPU_GLES2_EXPORT FeatureInfo : public base::RefCounted { FeatureFlags(); GpuMemoryBufferFormatSet gpu_memory_buffer_formats = { - gfx::BufferFormat::BGR_565, gfx::BufferFormat::RGBA_4444, - gfx::BufferFormat::RGBA_8888, gfx::BufferFormat::RGBX_8888, - gfx::BufferFormat::YVU_420, gfx::BufferFormat::RGBA_1010102, + gfx::BufferFormat::BGR_565, gfx::BufferFormat::RGBA_4444, + gfx::BufferFormat::RGBA_8888, gfx::BufferFormat::RGBX_8888, + gfx::BufferFormat::YVU_420, gfx::BufferFormat::RGBA_1010102, + gfx::BufferFormat::BGRA_1010102, }; // Use glBlitFramebuffer() and glRenderbufferStorageMultisample() with // GL_EXT_framebuffer_multisample-style semantics (as opposed to diff --git a/ui/gfx/buffer_format_util.cc b/ui/gfx/buffer_format_util.cc index 40251922e13784..b530a6bb8fae14 100644 --- a/ui/gfx/buffer_format_util.cc +++ b/ui/gfx/buffer_format_util.cc @@ -44,6 +44,7 @@ size_t AlphaBitsForBufferFormat(BufferFormat format) { return 4; case BufferFormat::RGBA_8888: return 8; + case BufferFormat::BGRA_1010102: case BufferFormat::RGBA_1010102: return 2; case BufferFormat::BGRA_8888: @@ -56,7 +57,6 @@ size_t AlphaBitsForBufferFormat(BufferFormat format) { case BufferFormat::BGR_565: case BufferFormat::RGBX_8888: case BufferFormat::BGRX_8888: - case BufferFormat::BGRA_1010102: case BufferFormat::YVU_420: case BufferFormat::YUV_420_BIPLANAR: case BufferFormat::P010: diff --git a/ui/gfx/linux/drm_util_linux.cc b/ui/gfx/linux/drm_util_linux.cc index d14ea2d852a1d8..7858b8b30d9caa 100644 --- a/ui/gfx/linux/drm_util_linux.cc +++ b/ui/gfx/linux/drm_util_linux.cc @@ -40,7 +40,7 @@ int GetFourCCFormatFromBufferFormat(gfx::BufferFormat format) { case gfx::BufferFormat::BGRX_8888: return DRM_FORMAT_XRGB8888; case gfx::BufferFormat::BGRA_1010102: - return DRM_FORMAT_XRGB2101010; + return DRM_FORMAT_ARGB2101010; case gfx::BufferFormat::RGBA_1010102: return DRM_FORMAT_ABGR2101010; case gfx::BufferFormat::RGBA_F16: @@ -69,7 +69,7 @@ gfx::BufferFormat GetBufferFormatFromFourCCFormat(int format) { return gfx::BufferFormat::BGRA_8888; case DRM_FORMAT_XRGB8888: return gfx::BufferFormat::BGRX_8888; - case DRM_FORMAT_XRGB2101010: + case DRM_FORMAT_ARGB2101010: return gfx::BufferFormat::BGRA_1010102; case DRM_FORMAT_ABGR2101010: return gfx::BufferFormat::RGBA_1010102; @@ -95,7 +95,7 @@ bool IsValidBufferFormat(uint32_t current_format) { case DRM_FORMAT_XBGR8888: case DRM_FORMAT_ARGB8888: case DRM_FORMAT_XRGB8888: - case DRM_FORMAT_XRGB2101010: + case DRM_FORMAT_ARGB2101010: case DRM_FORMAT_ABGR2101010: case DRM_FORMAT_RGB565: case DRM_FORMAT_NV12: diff --git a/ui/gl/gl_image_native_pixmap.cc b/ui/gl/gl_image_native_pixmap.cc index 795698d5a85b16..91e0293cdc7d2a 100644 --- a/ui/gl/gl_image_native_pixmap.cc +++ b/ui/gl/gl_image_native_pixmap.cc @@ -30,7 +30,7 @@ #define DRM_FORMAT_XRGB8888 FOURCC('X', 'R', '2', '4') #define DRM_FORMAT_XBGR8888 FOURCC('X', 'B', '2', '4') #define DRM_FORMAT_ABGR2101010 FOURCC('A', 'B', '3', '0') -#define DRM_FORMAT_XRGB2101010 FOURCC('X', 'R', '3', '0') +#define DRM_FORMAT_ARGB2101010 FOURCC('A', 'R', '3', '0') #define DRM_FORMAT_YVU420 FOURCC('Y', 'V', '1', '2') #define DRM_FORMAT_NV12 FOURCC('N', 'V', '1', '2') #define DRM_FORMAT_P010 FOURCC('P', '0', '1', '0') @@ -72,7 +72,7 @@ EGLint FourCC(gfx::BufferFormat format) { case gfx::BufferFormat::RGBA_1010102: return DRM_FORMAT_ABGR2101010; case gfx::BufferFormat::BGRA_1010102: - return DRM_FORMAT_XRGB2101010; + return DRM_FORMAT_ARGB2101010; case gfx::BufferFormat::YVU_420: return DRM_FORMAT_YVU420; case gfx::BufferFormat::YUV_420_BIPLANAR: @@ -104,6 +104,8 @@ gfx::BufferFormat GetBufferFormatFromFourCCFormat(int format) { return gfx::BufferFormat::BGRX_8888; case DRM_FORMAT_ABGR2101010: return gfx::BufferFormat::RGBA_1010102; + case DRM_FORMAT_ARGB2101010: + return gfx::BufferFormat::BGRA_1010102; case DRM_FORMAT_RGB565: return gfx::BufferFormat::BGR_565; case DRM_FORMAT_NV12: diff --git a/ui/gl/test/gl_image_test_support.cc b/ui/gl/test/gl_image_test_support.cc index 3b08152d8ed4b5..d3553a1033c0b3 100644 --- a/ui/gl/test/gl_image_test_support.cc +++ b/ui/gl/test/gl_image_test_support.cc @@ -138,19 +138,22 @@ void GLImageTestSupport::SetBufferDataToColor(int width, } } return; - case gfx::BufferFormat::BGRA_1010102: + case gfx::BufferFormat::BGRA_1010102: { DCHECK_EQ(0, plane); + DCHECK_EQ(63, color[3] % 64) << "Alpha channel doesn't have enough " + "precision for the supplied value"; + const uint8_t scaled_alpha = color[3] >> 6; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { *reinterpret_cast(&data[y * stride + x * 4]) = - 0x3 << 30 | // Alpha channel is unused - ((color[0] << 2) | (color[0] >> 6)) << 20 | // R + (scaled_alpha << 30) | // A + ((color[0] << 2) | (color[0] >> 6)) << 20 | // B ((color[1] << 2) | (color[1] >> 6)) << 10 | // G - ((color[2] << 2) | (color[2] >> 6)); // B + ((color[2] << 2) | (color[2] >> 6)); // R } } return; - + } case gfx::BufferFormat::RGBA_1010102: { DCHECK_EQ(0, plane); DCHECK_EQ(63, color[3] % 64) << "Alpha channel doesn't have enough " @@ -167,7 +170,6 @@ void GLImageTestSupport::SetBufferDataToColor(int width, } return; } - case gfx::BufferFormat::BGRA_8888: DCHECK_EQ(0, plane); for (int y = 0; y < height; ++y) { diff --git a/ui/ozone/gl/gl_image_ozone_native_pixmap_unittest.cc b/ui/ozone/gl/gl_image_ozone_native_pixmap_unittest.cc index f0ec757d079ef7..229b15167bbc07 100644 --- a/ui/ozone/gl/gl_image_ozone_native_pixmap_unittest.cc +++ b/ui/ozone/gl/gl_image_ozone_native_pixmap_unittest.cc @@ -91,7 +91,9 @@ INSTANTIATE_TYPED_TEST_SUITE_P(GLImageNativePixmapScanoutBGRA, using GLImageScanoutTypeDisabled = testing::Types< GLImageNativePixmapTestDelegate>; + gfx::BufferFormat::RGBA_1010102>, + GLImageNativePixmapTestDelegate>; // This test is disabled since we need mesa support for AB30 that is not // available on many boards yet. diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc index dd4e9fbc40cd1a..ad3bb4f195cbf9 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc @@ -909,8 +909,7 @@ TEST_P(HardwareDisplayPlaneManagerTest, ForceOpaqueFormatsForAddFramebuffer) { uint32_t used_fourcc; // FourCC expected to be used in AddFramebuffer. } kFourCCFormats[] = { {DRM_FORMAT_ABGR2101010, DRM_FORMAT_XBGR2101010}, - // TODO(mcasas): use AR30 when the CLs in crrev.com/c/2068722 have landed. - {DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB2101010}, + {DRM_FORMAT_ARGB2101010, DRM_FORMAT_XRGB2101010}, }; for (const auto& format_pair : kFourCCFormats) { diff --git a/ui/ozone/platform/drm/gpu/mock_gbm_device.cc b/ui/ozone/platform/drm/gpu/mock_gbm_device.cc index ef45c4792cca7e..193b14fe848c7b 100644 --- a/ui/ozone/platform/drm/gpu/mock_gbm_device.cc +++ b/ui/ozone/platform/drm/gpu/mock_gbm_device.cc @@ -121,7 +121,7 @@ std::unique_ptr MockGbmDevice::CreateBufferWithModifiers( switch (format) { case DRM_FORMAT_XRGB8888: case DRM_FORMAT_ARGB8888: - case DRM_FORMAT_XRGB2101010: + case DRM_FORMAT_ARGB2101010: case DRM_FORMAT_ABGR2101010: bytes_per_pixel = 4; break;