diff options
author | reveman <reveman@chromium.org> | 2014-10-28 15:49:20 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-28 22:49:44 +0000 |
commit | eeba91b525f74890247a93fe022054f12aee18cc (patch) | |
tree | 3796e6ae653db0610ea6ee0dd7cdcbd8e3313826 /gpu/command_buffer | |
parent | b950c3c26267f2e3aa2a95df567da1760577a7fd (diff) | |
download | chromium_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.gn | 2 | ||||
-rw-r--r-- | gpu/command_buffer/service/image_factory.cc | 76 | ||||
-rw-r--r-- | gpu/command_buffer/service/image_factory.h | 54 |
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_ |