Commit 59bde77b authored by Ricky Liang's avatar Ricky Liang Committed by Commit Bot

ui: allow R_8 for CAMERA_READ_WRITE on Chrome OS

Add a new CAMERA_READ_WRITE gfx::BufferUsage, which is used to specify
buffer usage capable of CPU read/write and camera read/write.

The R_8 format is used by the Chrome OS camera HAL as the underlying
format for the generic blob format.  Blob format is usually used to
store the picture taken by the camera in JPEG format.

BUG=832772

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: Ibd8d4e193ced3c7d2a6284a8576f02a40ede74b3
Reviewed-on: https://chromium-review.googlesource.com/1018922
Commit-Queue: Ricky Liang <jcliang@chromium.org>
Reviewed-by: default avatarAntoine Labour <piman@chromium.org>
Reviewed-by: default avatarKenneth Russell <kbr@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarDaniele Castagna <dcastagna@chromium.org>
Reviewed-by: default avatarDavid Reveman <reveman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#554378}
parent 366f1bc8
......@@ -308,6 +308,8 @@ const char* BufferUsageToString(gfx::BufferUsage usage) {
return "SCANOUT";
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
return "SCANOUT_CAMERA_READ_WRITE";
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
return "CAMERA_AND_CPU_READ_WRITE";
case gfx::BufferUsage::SCANOUT_CPU_READ_WRITE:
return "SCANOUT_CPU_READ_WRITE";
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
......
......@@ -109,6 +109,7 @@ _NAMED_TYPE_INFO = {
],
'invalid': [
'gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE',
'gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE',
],
},
'viz::ResourceFormat': {
......
......@@ -27,6 +27,7 @@ uint32_t LockFlags(gfx::BufferUsage usage) {
case gfx::BufferUsage::GPU_READ:
case gfx::BufferUsage::SCANOUT:
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
case gfx::BufferUsage::SCANOUT_CPU_READ_WRITE:
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT:
......
......@@ -113,6 +113,7 @@ bool GpuMemoryBufferImplSharedMemory::IsUsageSupported(gfx::BufferUsage usage) {
return true;
case gfx::BufferUsage::SCANOUT:
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
return false;
}
......
......@@ -87,6 +87,7 @@ TYPED_TEST_P(GpuMemoryBufferImplTest, CreateFromHandle) {
gfx::BufferUsage::GPU_READ,
gfx::BufferUsage::SCANOUT,
gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
gfx::BufferUsage::SCANOUT_VDA_WRITE,
gfx::BufferUsage::GPU_READ_CPU_READ_WRITE,
......
......@@ -88,6 +88,7 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferConfigurationSupported(
format == gfx::BufferFormat::YUV_420_BIPLANAR;
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
return false;
}
NOTREACHED();
......@@ -106,6 +107,7 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferConfigurationSupported(
case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT:
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
return false;
}
NOTREACHED();
......@@ -125,6 +127,7 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferConfigurationSupported(
case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT:
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
return false;
default:
NOTREACHED();
......
......@@ -57,6 +57,7 @@ GpuMemoryBufferConfigurationSet GetNativeGpuMemoryBufferConfigurations(
gfx::BufferUsage::GPU_READ,
gfx::BufferUsage::SCANOUT,
gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
gfx::BufferUsage::GPU_READ_CPU_READ_WRITE,
gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT};
......@@ -82,6 +83,7 @@ GpuMemoryBufferConfigurationSet GetNativeGpuMemoryBufferConfigurations(
const gfx::BufferUsage kGPUReadWriteUsages[] = {
gfx::BufferUsage::GPU_READ, gfx::BufferUsage::SCANOUT,
gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
gfx::BufferUsage::SCANOUT_VDA_WRITE};
for (auto format : kGPUReadWriteFormats) {
......
......@@ -55,6 +55,7 @@ TYPED_TEST_P(GpuMemoryBufferFactoryTest, CreateGpuMemoryBuffer) {
gfx::BufferUsage::GPU_READ,
gfx::BufferUsage::SCANOUT,
gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
gfx::BufferUsage::SCANOUT_VDA_WRITE,
gfx::BufferUsage::GPU_READ_CPU_READ_WRITE,
......
......@@ -51,6 +51,7 @@ enum class BufferUsage {
SCANOUT,
// SCANOUT_CAMERA_READ_WRITE implies CPU_READ_WRITE.
SCANOUT_CAMERA_READ_WRITE,
CAMERA_AND_CPU_READ_WRITE,
SCANOUT_CPU_READ_WRITE,
SCANOUT_VDA_WRITE,
GPU_READ_CPU_READ_WRITE,
......
......@@ -108,6 +108,14 @@ class ClientNativePixmapFactoryDmabuf : public ClientNativePixmapFactory {
return format == gfx::BufferFormat::YUV_420_BIPLANAR;
#else
return false;
#endif
}
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE: {
#if defined(OS_CHROMEOS)
// R_8 is used as the underlying pixel format for BLOB buffers.
return format == gfx::BufferFormat::R_8;
#else
return false;
#endif
}
}
......@@ -124,6 +132,7 @@ class ClientNativePixmapFactoryDmabuf : public ClientNativePixmapFactory {
case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE:
case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT:
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
#if defined(OS_CHROMEOS)
return ClientNativePixmapDmaBuf::ImportFromDmabuf(handle, size);
#else
......
......@@ -35,6 +35,7 @@ enum BufferUsage {
GPU_READ,
SCANOUT,
SCANOUT_CAMERA_READ_WRITE,
CAMERA_AND_CPU_READ_WRITE,
SCANOUT_CPU_READ_WRITE,
SCANOUT_VDA_WRITE,
GPU_READ_CPU_READ_WRITE,
......
......@@ -139,6 +139,8 @@ struct EnumTraits<gfx::mojom::BufferUsage, gfx::BufferUsage> {
return gfx::mojom::BufferUsage::SCANOUT;
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
return gfx::mojom::BufferUsage::SCANOUT_CAMERA_READ_WRITE;
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
return gfx::mojom::BufferUsage::CAMERA_AND_CPU_READ_WRITE;
case gfx::BufferUsage::SCANOUT_CPU_READ_WRITE:
return gfx::mojom::BufferUsage::SCANOUT_CPU_READ_WRITE;
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
......@@ -163,6 +165,9 @@ struct EnumTraits<gfx::mojom::BufferUsage, gfx::BufferUsage> {
case gfx::mojom::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
*out = gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE;
return true;
case gfx::mojom::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
*out = gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE;
return true;
case gfx::mojom::BufferUsage::SCANOUT_CPU_READ_WRITE:
*out = gfx::BufferUsage::SCANOUT_CPU_READ_WRITE;
return true;
......
......@@ -129,6 +129,10 @@ void DrmThread::CreateBuffer(gfx::AcceleratedWidget widget,
flags = GBM_BO_USE_LINEAR | GBM_BO_USE_CAMERA_WRITE | GBM_BO_USE_SCANOUT |
GBM_BO_USE_TEXTURING;
break;
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
flags =
GBM_BO_USE_LINEAR | GBM_BO_USE_CAMERA_WRITE | GBM_BO_USE_TEXTURING;
break;
case gfx::BufferUsage::SCANOUT_CPU_READ_WRITE:
flags = GBM_BO_USE_LINEAR | GBM_BO_USE_SCANOUT | GBM_BO_USE_TEXTURING;
break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment