diff options
author | reveman <reveman@chromium.org> | 2015-10-26 13:27:47 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-26 20:28:42 +0000 |
commit | eb0fda21bf0fc43f591dfe2a6302fc014c425118 (patch) | |
tree | bb053cf4e4557a8c94910f48a4dbe118988e5a1f /gpu | |
parent | b65cfea2a48ce74ac98e2b10006e9d8b868d4553 (diff) | |
download | chromium_src-eb0fda21bf0fc43f591dfe2a6302fc014c425118.zip chromium_src-eb0fda21bf0fc43f591dfe2a6302fc014c425118.tar.gz chromium_src-eb0fda21bf0fc43f591dfe2a6302fc014c425118.tar.bz2 |
ui: Rename gfx::BufferUsage enum values and add BufferUsage::GPU_READ.
The problem with the current usage modes is that we currently use
SCANOUT for anything that doesn't require CPU access. When importing
a buffer we typically don't care about anything but having the GPU
be able to read from it. SCANOUT is not a good description of that
and currently means GPU read/write support.
This patch attempts to make usage more explicit and it solves the
use case where a buffer type can only provide GPU read and not GPU
write support (e.g. SHM fallback). Here are the new usage modes:
- GPU_READ
- GPU_READ_WRITE
- GPU_READ_CPU_READ_WRITE
GPU_READ is useful when importing a buffer and all you care about is
being able to use it for sampling and optionally scanout.
GPU_READ_WRITE is useful for things like WebGL or GPU raster where
we want the ability to write to the buffer using GL and potentially
use it for scanout.
GPU_READ_CPU_READ_WRITE is the usage mode that allows CPU access and
is used for one-copy and zero-copy texture initialization. There's
nothing preventing this mode from also supporting scanout.
- GPU_READ_CPU_READ_WRITE_PERSISTENT
This usage mode indicates that the data will be persistent across
Unmap()/Map() calls but will likely become part of the normal
GPU_READ_CPU_READ_WRITE usage once all buffer types support this.
BUG=538325
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1420923005
Cr-Commit-Position: refs/heads/master@{#356108}
Diffstat (limited to 'gpu')
11 files changed, 16 insertions, 49 deletions
diff --git a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_gpu_memory_buffer_image.txt b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_gpu_memory_buffer_image.txt index 9f4d09d..d185894 100644 --- a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_gpu_memory_buffer_image.txt +++ b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_gpu_memory_buffer_image.txt @@ -29,8 +29,7 @@ New Tokens Accepted by the <usage> parameter of CreateGpuMemoryBufferImageCHROMIUM: - MAP_CHROMIUM 0x78F1 - SCANOUT_CHROMIUM 0x78F2 + READ_WRITE_CHROMIUM 0x78F2 New Procedures and Functions @@ -50,8 +49,7 @@ New Procedures and Functions INVALID_ENUM is generated if <internalformat> is not one of RGB or RGBA. - INVALID_ENUM is generated if <usage> is not one of - MAP_CHROMIUM or SCANOUT_CHROMIUM. + INVALID_ENUM is generated if <usage> is not READ_WRTIE_CHROMIUM. Errors diff --git a/gpu/GLES2/gl2extchromium.h b/gpu/GLES2/gl2extchromium.h index a79b3e7..31958b3 100644 --- a/gpu/GLES2/gl2extchromium.h +++ b/gpu/GLES2/gl2extchromium.h @@ -111,12 +111,8 @@ typedef void ( #ifndef GL_CHROMIUM_gpu_memory_buffer_image #define GL_CHROMIUM_gpu_memory_buffer_image 1 -#ifndef GL_MAP_CHROMIUM -#define GL_MAP_CHROMIUM 0x78F1 -#endif - -#ifndef GL_SCANOUT_CHROMIUM -#define GL_SCANOUT_CHROMIUM 0x78F2 +#ifndef GL_READ_WRITE_CHROMIUM +#define GL_READ_WRITE_CHROMIUM 0x78F2 #endif #ifndef GL_RGB_YUV_420_CHROMIUM diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index 6c1a705..a1071ab 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -1861,8 +1861,7 @@ _NAMED_TYPE_INFO = { 'ImageUsage': { 'type': 'GLenum', 'valid': [ - 'GL_MAP_CHROMIUM', - 'GL_SCANOUT_CHROMIUM' + 'GL_READ_WRITE_CHROMIUM', ], }, 'ValueBufferTarget': { diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index 984c483..f0e4e9b 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc @@ -5484,13 +5484,7 @@ bool ValidImageFormat(GLenum internalformat, } bool ValidImageUsage(GLenum usage) { - switch (usage) { - case GL_MAP_CHROMIUM: - case GL_SCANOUT_CHROMIUM: - return true; - default: - return false; - } + return usage == GL_READ_WRITE_CHROMIUM; } } // namespace diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc index 8ff533d..2eabd33 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest.cc +++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc @@ -4111,7 +4111,8 @@ TEST_F(GLES2ImplementationManualInitTest, LoseContextOnOOM) { GLsizei max = std::numeric_limits<GLsizei>::max(); EXPECT_CALL(*gpu_control_, CreateGpuMemoryBufferImage(max, max, _, _)) .WillOnce(Return(-1)); - gl_->CreateGpuMemoryBufferImageCHROMIUM(max, max, GL_RGBA, GL_MAP_CHROMIUM); + gl_->CreateGpuMemoryBufferImageCHROMIUM(max, max, GL_RGBA, + GL_READ_WRITE_CHROMIUM); // The context should be lost. Cmds expected; expected.cmd.Init(GL_GUILTY_CONTEXT_RESET_ARB, GL_UNKNOWN_CONTEXT_RESET_ARB); @@ -4129,7 +4130,8 @@ TEST_F(GLES2ImplementationManualInitTest, NoLoseContextOnOOM) { GLsizei max = std::numeric_limits<GLsizei>::max(); EXPECT_CALL(*gpu_control_, CreateGpuMemoryBufferImage(max, max, _, _)) .WillOnce(Return(-1)); - gl_->CreateGpuMemoryBufferImageCHROMIUM(max, max, GL_RGBA, GL_MAP_CHROMIUM); + gl_->CreateGpuMemoryBufferImageCHROMIUM(max, max, GL_RGBA, + GL_READ_WRITE_CHROMIUM); // The context should not be lost. EXPECT_TRUE(NoCommandsWritten()); } diff --git a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h index 82c83fa..ba69729 100644 --- a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h @@ -97,7 +97,7 @@ static const GLES2Util::EnumToString enum_to_string_table[] = { 0x9500, "GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL", }, { - 0x78F2, "GL_SCANOUT_CHROMIUM", + 0x78F2, "GL_READ_WRITE_CHROMIUM", }, { 0x9138, "GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG", @@ -1906,7 +1906,7 @@ static const GLES2Util::EnumToString enum_to_string_table[] = { 0x84CA, "GL_TEXTURE10", }, { - 0x78F1, "GL_MAP_CHROMIUM", + 0x0BA7, "GL_PATH_PROJECTION_MATRIX_CHROMIUM", }, { 0x84CF, "GL_TEXTURE15", @@ -2752,9 +2752,6 @@ static const GLES2Util::EnumToString enum_to_string_table[] = { 0x8A2A, "GL_UNIFORM_BUFFER_SIZE", }, { - 0x0BA7, "GL_PATH_PROJECTION_MATRIX_CHROMIUM", - }, - { 0x0DE1, "GL_TEXTURE_2D", }, { @@ -3925,8 +3922,7 @@ std::string GLES2Util::GetStringImageInternalFormat(uint32_t value) { std::string GLES2Util::GetStringImageUsage(uint32_t value) { static const EnumToString string_table[] = { - {GL_MAP_CHROMIUM, "GL_MAP_CHROMIUM"}, - {GL_SCANOUT_CHROMIUM, "GL_SCANOUT_CHROMIUM"}, + {GL_READ_WRITE_CHROMIUM, "GL_READ_WRITE_CHROMIUM"}, }; return GLES2Util::GetQualifiedEnumString(string_table, arraysize(string_table), value); diff --git a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h index aa05581..4f75b7d 100644 --- a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h @@ -367,7 +367,7 @@ static const GLenum valid_image_internal_format_table[] = { }; static const GLenum valid_image_usage_table[] = { - GL_MAP_CHROMIUM, GL_SCANOUT_CHROMIUM, + GL_READ_WRITE_CHROMIUM, }; static const GLenum valid_index_type_table[] = { diff --git a/gpu/command_buffer/service/image_factory.cc b/gpu/command_buffer/service/image_factory.cc index 2a1257e..bcfd121 100644 --- a/gpu/command_buffer/service/image_factory.cc +++ b/gpu/command_buffer/service/image_factory.cc @@ -48,20 +48,6 @@ gfx::BufferFormat ImageFactory::DefaultBufferFormatForImageFormat( } // static -gfx::BufferUsage ImageFactory::ImageUsageToGpuMemoryBufferUsage( - unsigned usage) { - switch (usage) { - case GL_MAP_CHROMIUM: - return gfx::BufferUsage::MAP; - case GL_SCANOUT_CHROMIUM: - return gfx::BufferUsage::SCANOUT; - default: - NOTREACHED(); - return gfx::BufferUsage::MAP; - } -} - -// static bool ImageFactory::IsImageFormatCompatibleWithGpuMemoryBufferFormat( unsigned internalformat, gfx::BufferFormat format) { diff --git a/gpu/command_buffer/service/image_factory.h b/gpu/command_buffer/service/image_factory.h index c805db0..3746d56 100644 --- a/gpu/command_buffer/service/image_factory.h +++ b/gpu/command_buffer/service/image_factory.h @@ -26,10 +26,6 @@ class GPU_EXPORT ImageFactory { static gfx::BufferFormat DefaultBufferFormatForImageFormat( unsigned internalformat); - // Returns a valid GpuMemoryBuffer usage given a valid usage as defined by - // CHROMIUM_gpu_memory_buffer_image. - static gfx::BufferUsage ImageUsageToGpuMemoryBufferUsage(unsigned usage); - // Returns true if |internalformat| is compatible with |format|. static bool IsImageFormatCompatibleWithGpuMemoryBufferFormat( unsigned internalformat, diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc index 51b0b0a..5493054 100644 --- a/gpu/command_buffer/service/in_process_command_buffer.cc +++ b/gpu/command_buffer/service/in_process_command_buffer.cc @@ -778,7 +778,7 @@ int32 InProcessCommandBuffer::CreateGpuMemoryBufferImage( gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( gfx::Size(width, height), gpu::ImageFactory::DefaultBufferFormatForImageFormat(internalformat), - gpu::ImageFactory::ImageUsageToGpuMemoryBufferUsage(usage))); + gfx::BufferUsage::GPU_READ_WRITE)); if (!buffer) return -1; diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc index 9bb2a68..4daa466 100644 --- a/gpu/command_buffer/tests/gl_manager.cc +++ b/gpu/command_buffer/tests/gl_manager.cc @@ -450,7 +450,7 @@ int32 GLManager::CreateGpuMemoryBufferImage(size_t width, size_t height, unsigned internalformat, unsigned usage) { - DCHECK_EQ(usage, static_cast<unsigned>(GL_MAP_CHROMIUM)); + DCHECK_EQ(usage, static_cast<unsigned>(GL_READ_WRITE_CHROMIUM)); scoped_ptr<gfx::GpuMemoryBuffer> buffer = GLManager::CreateGpuMemoryBuffer( gfx::Size(width, height), gfx::BufferFormat::RGBA_8888); return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); |