summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer
diff options
context:
space:
mode:
authorreveman <reveman@chromium.org>2014-10-28 15:49:20 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-28 22:49:44 +0000
commiteeba91b525f74890247a93fe022054f12aee18cc (patch)
tree3796e6ae653db0610ea6ee0dd7cdcbd8e3313826 /gpu/command_buffer
parentb950c3c26267f2e3aa2a95df567da1760577a7fd (diff)
downloadchromium_src-eeba91b525f74890247a93fe022054f12aee18cc.zip
chromium_src-eeba91b525f74890247a93fe022054f12aee18cc.tar.gz
chromium_src-eeba91b525f74890247a93fe022054f12aee18cc.tar.bz2
gpu: Move image creation part of GpuMemoryBufferFactory interface to gpu namespace.
This moves the image creation part of the GpuMemoryBufferFactory interface to a new ImageFactory interface in the gpu namespace. This is necessary for in-process command buffer to be able to create images. This also moves some utility functions from CommandBufferProxy to this new ImageFactory interface so they can be reused by the in-process command buffer code. BUG=423533 Review URL: https://codereview.chromium.org/659883003 Cr-Commit-Position: refs/heads/master@{#301732}
Diffstat (limited to 'gpu/command_buffer')
-rw-r--r--gpu/command_buffer/service/BUILD.gn2
-rw-r--r--gpu/command_buffer/service/image_factory.cc76
-rw-r--r--gpu/command_buffer/service/image_factory.h54
3 files changed, 132 insertions, 0 deletions
diff --git a/gpu/command_buffer/service/BUILD.gn b/gpu/command_buffer/service/BUILD.gn
index 3b2b782..8293fbc 100644
--- a/gpu/command_buffer/service/BUILD.gn
+++ b/gpu/command_buffer/service/BUILD.gn
@@ -69,6 +69,8 @@ source_set("service") {
"gpu_tracer.h",
"id_manager.h",
"id_manager.cc",
+ "image_factory.cc",
+ "image_factory.h",
"image_manager.cc",
"image_manager.h",
"in_process_command_buffer.cc",
diff --git a/gpu/command_buffer/service/image_factory.cc b/gpu/command_buffer/service/image_factory.cc
new file mode 100644
index 0000000..0b740d8
--- /dev/null
+++ b/gpu/command_buffer/service/image_factory.cc
@@ -0,0 +1,76 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/image_factory.h"
+
+#include "ui/gl/gl_bindings.h"
+
+namespace gpu {
+
+ImageFactory::ImageFactory() {
+}
+
+ImageFactory::~ImageFactory() {
+}
+
+// static
+gfx::GpuMemoryBuffer::Format ImageFactory::ImageFormatToGpuMemoryBufferFormat(
+ unsigned internalformat) {
+ switch (internalformat) {
+ case GL_RGB:
+ return gfx::GpuMemoryBuffer::RGBX_8888;
+ case GL_RGBA:
+ return gfx::GpuMemoryBuffer::RGBA_8888;
+ default:
+ NOTREACHED();
+ return gfx::GpuMemoryBuffer::RGBA_8888;
+ }
+}
+
+// static
+gfx::GpuMemoryBuffer::Usage ImageFactory::ImageUsageToGpuMemoryBufferUsage(
+ unsigned usage) {
+ switch (usage) {
+ case GL_MAP_CHROMIUM:
+ return gfx::GpuMemoryBuffer::MAP;
+ case GL_SCANOUT_CHROMIUM:
+ return gfx::GpuMemoryBuffer::SCANOUT;
+ default:
+ NOTREACHED();
+ return gfx::GpuMemoryBuffer::MAP;
+ }
+}
+
+// static
+bool ImageFactory::IsImageFormatCompatibleWithGpuMemoryBufferFormat(
+ unsigned internalformat,
+ gfx::GpuMemoryBuffer::Format format) {
+ switch (internalformat) {
+ case GL_RGB:
+ switch (format) {
+ case gfx::GpuMemoryBuffer::RGBX_8888:
+ return true;
+ case gfx::GpuMemoryBuffer::RGBA_8888:
+ case gfx::GpuMemoryBuffer::BGRA_8888:
+ return false;
+ }
+ NOTREACHED();
+ return false;
+ case GL_RGBA:
+ switch (format) {
+ case gfx::GpuMemoryBuffer::RGBX_8888:
+ return false;
+ case gfx::GpuMemoryBuffer::RGBA_8888:
+ case gfx::GpuMemoryBuffer::BGRA_8888:
+ return true;
+ }
+ NOTREACHED();
+ return false;
+ default:
+ NOTREACHED();
+ return false;
+ }
+}
+
+} // namespace gpu
diff --git a/gpu/command_buffer/service/image_factory.h b/gpu/command_buffer/service/image_factory.h
new file mode 100644
index 0000000..40dd15a0e
--- /dev/null
+++ b/gpu/command_buffer/service/image_factory.h
@@ -0,0 +1,54 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_IMAGE_FACTORY_H_
+#define GPU_COMMAND_BUFFER_SERVICE_IMAGE_FACTORY_H_
+
+#include "base/memory/ref_counted.h"
+#include "gpu/gpu_export.h"
+#include "ui/gfx/geometry/size.h"
+#include "ui/gfx/gpu_memory_buffer.h"
+
+namespace gfx {
+class GLImage;
+}
+
+namespace gpu {
+
+class GPU_EXPORT ImageFactory {
+ public:
+ ImageFactory();
+
+ // Returns a valid GpuMemoryBuffer format given a valid internalformat as
+ // defined by CHROMIUM_gpu_memory_buffer_image.
+ static gfx::GpuMemoryBuffer::Format ImageFormatToGpuMemoryBufferFormat(
+ unsigned internalformat);
+
+ // Returns a valid GpuMemoryBuffer usage given a valid usage as defined by
+ // CHROMIUM_gpu_memory_buffer_image.
+ static gfx::GpuMemoryBuffer::Usage ImageUsageToGpuMemoryBufferUsage(
+ unsigned usage);
+
+ // Returns true if |internalformat| is compatible with |format|.
+ static bool IsImageFormatCompatibleWithGpuMemoryBufferFormat(
+ unsigned internalformat,
+ gfx::GpuMemoryBuffer::Format format);
+
+ // Creates a GLImage instance for GPU memory buffer identified by |handle|.
+ // |client_id| should be set to the client requesting the creation of instance
+ // and can be used by factory implementation to verify access rights.
+ virtual scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer(
+ const gfx::GpuMemoryBufferHandle& handle,
+ const gfx::Size& size,
+ gfx::GpuMemoryBuffer::Format format,
+ unsigned internalformat,
+ int client_id) = 0;
+
+ protected:
+ virtual ~ImageFactory();
+};
+
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_IMAGE_FACTORY_H_