diff options
16 files changed, 115 insertions, 3 deletions
diff --git a/app/gfx/gl/gl_context.h b/app/gfx/gl/gl_context.h index 5264c4a..865af76 100644 --- a/app/gfx/gl/gl_context.h +++ b/app/gfx/gl/gl_context.h @@ -36,6 +36,11 @@ class GLContext { // contexts. virtual bool SwapBuffers() = 0; + // Set the size of the back buffer. + // FIXME(backer): Currently a NOP. Once we have an implementation for each + // backend we can switch it to pure virtual. + virtual void SetSize(gfx::Size) {} + // Get the size of the back buffer. virtual gfx::Size GetSize() = 0; diff --git a/chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc b/chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc index da74b3e..740fcc2 100644 --- a/chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc +++ b/chrome/renderer/webgraphicscontext3d_command_buffer_impl.cc @@ -229,6 +229,8 @@ void WebGraphicsContext3DCommandBufferImpl::reshape(int width, int height) { if (web_view_) { #if defined(OS_MACOSX) ggl::ResizeOnscreenContext(context_, gfx::Size(width, height)); +#else + glResizeCHROMIUM(width, height); #endif } else { ggl::ResizeOffscreenContext(context_, gfx::Size(width, height)); diff --git a/gpu/GLES2/gl2ext.h b/gpu/GLES2/gl2ext.h index 35ac011..ccfa910 100644 --- a/gpu/GLES2/gl2ext.h +++ b/gpu/GLES2/gl2ext.h @@ -909,6 +909,19 @@ typedef void* (GL_APIENTRYP PFNGLCOPYTEXTURETOPARENTTEXTURE) (GLuint id, GLuint #endif #endif +/* GL_CHROMIUM_resize */ +#ifndef GL_CHROMIUM_resize +#define GL_CHROMIUM_resize 1 +#ifdef GL_GLEXT_PROTOTYPES +#define glResizeCHROMIUM GLES2_GET_FUN(ResizeCHROMIUM) +#if !defined(GLES2_USE_CPP_BINDINGS) +GL_APICALL void GL_APIENTRY glResizeCHROMIUM (GLuint width, GLuint height); +#endif +#else +typedef void (GL_APIENTRYP PFNGLRESIZECHROMIUM) (GLuint width, GLuint height); +#endif +#endif + #ifdef __cplusplus } diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index cf88bd9..66d15e7 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -208,6 +208,7 @@ GL_APICALL void GL_APIENTRY glUnmapBufferSubData (const void* mem); GL_APICALL void* GL_APIENTRY glMapTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLenum access); GL_APICALL void GL_APIENTRY glUnmapTexSubImage2D (const void* mem); GL_APICALL void GL_APIENTRY glCopyTextureToParentTexture (GLidBindTexture client_child_id, GLidBindTexture client_parent_id); +GL_APICALL void GL_APIENTRY glResizeCHROMIUM (GLuint width, GLuint height); """ # This is the list of all commmands that will be generated and their Id. @@ -408,6 +409,7 @@ _CMD_ID_TABLE = { 'RenderbufferStorageMultisampleEXT': 445, 'BlitFramebufferEXT': 446, 'CopyTextureToParentTexture': 447, + 'ResizeCHROMIUM': 448, } # This is a list of enum names and their valid values. It is used to map @@ -1541,6 +1543,10 @@ _FUNCTION_INFO = { 'decoder_func': 'DoCopyTextureToParentTexture', 'unit_test': False }, + 'ResizeCHROMIUM': { + 'decoder_func': 'DoResizeCHROMIUM', + 'unit_test': False + }, } diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h index 0a69471..6107a96 100644 --- a/gpu/command_buffer/client/gles2_c_lib_autogen.h +++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h @@ -837,6 +837,10 @@ void GLES2CopyTextureToParentTexture( gles2::GetGLContext()->CopyTextureToParentTexture( client_child_id, client_parent_id); } +void GLES2ResizeCHROMIUM(GLuint width, GLuint height) { + GPU_CLIENT_LOG("ResizeCHROMIUM" << "(" << width << ", " << height << ")"); + gles2::GetGLContext()->ResizeCHROMIUM(width, height); +} #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_C_LIB_AUTOGEN_H_ diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h index 7e57558..f319e96 100644 --- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h +++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h @@ -1193,5 +1193,10 @@ c.Init(client_child_id, client_parent_id); } + void ResizeCHROMIUM(GLuint width, GLuint height) { + gles2::ResizeCHROMIUM& c = GetCmdSpace<gles2::ResizeCHROMIUM>(); + c.Init(width, height); + } + #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_AUTOGEN_H_ diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h index 16ef2ee..447c5a3 100644 --- a/gpu/command_buffer/client/gles2_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_autogen.h @@ -881,5 +881,9 @@ void CopyTextureToParentTexture( helper_->CopyTextureToParentTexture(client_child_id, client_parent_id); } +void ResizeCHROMIUM(GLuint width, GLuint height) { + helper_->ResizeCHROMIUM(width, height); +} + #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_ diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h index 3eeaf99..6297fdf 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h @@ -8793,6 +8793,44 @@ COMPILE_ASSERT(offsetof(CopyTextureToParentTexture, client_child_id) == 4, COMPILE_ASSERT(offsetof(CopyTextureToParentTexture, client_parent_id) == 8, OffsetOf_CopyTextureToParentTexture_client_parent_id_not_8); +struct ResizeCHROMIUM { + typedef ResizeCHROMIUM ValueType; + static const CommandId kCmdId = kResizeCHROMIUM; + static const cmd::ArgFlags kArgFlags = cmd::kFixed; + + static uint32 ComputeSize() { + return static_cast<uint32>(sizeof(ValueType)); // NOLINT + } + + void SetHeader() { + header.SetCmd<ValueType>(); + } + + void Init(GLuint _width, GLuint _height) { + SetHeader(); + width = _width; + height = _height; + } + + void* Set(void* cmd, GLuint _width, GLuint _height) { + static_cast<ValueType*>(cmd)->Init(_width, _height); + return NextCmdAddress<ValueType>(cmd); + } + + gpu::CommandHeader header; + uint32 width; + uint32 height; +}; + +COMPILE_ASSERT(sizeof(ResizeCHROMIUM) == 12, + Sizeof_ResizeCHROMIUM_is_not_12); +COMPILE_ASSERT(offsetof(ResizeCHROMIUM, header) == 0, + OffsetOf_ResizeCHROMIUM_header_not_0); +COMPILE_ASSERT(offsetof(ResizeCHROMIUM, width) == 4, + OffsetOf_ResizeCHROMIUM_width_not_4); +COMPILE_ASSERT(offsetof(ResizeCHROMIUM, height) == 8, + OffsetOf_ResizeCHROMIUM_height_not_8); + #endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_AUTOGEN_H_ diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h index 8bf6b6d..6b1f78a 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h @@ -3465,5 +3465,20 @@ TEST(GLES2FormatTest, CopyTextureToParentTexture) { EXPECT_EQ(static_cast<GLuint>(12), cmd.client_parent_id); } +TEST(GLES2FormatTest, ResizeCHROMIUM) { + ResizeCHROMIUM cmd = { { 0 } }; + void* next_cmd = cmd.Set( + &cmd, + static_cast<GLuint>(11), + static_cast<GLuint>(12)); + EXPECT_EQ(static_cast<uint32>(ResizeCHROMIUM::kCmdId), + cmd.header.command); + EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); + EXPECT_EQ(static_cast<char*>(next_cmd), + reinterpret_cast<char*>(&cmd) + sizeof(cmd)); + EXPECT_EQ(static_cast<GLuint>(11), cmd.width); + EXPECT_EQ(static_cast<GLuint>(12), cmd.height); +} + #endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_TEST_AUTOGEN_H_ diff --git a/gpu/command_buffer/common/gles2_cmd_id_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_id_test_autogen.h index e0f1544..6ef4d3c 100644 --- a/gpu/command_buffer/common/gles2_cmd_id_test_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_id_test_autogen.h @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2010 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. @@ -395,6 +395,8 @@ TEST(GLES2CommandIdTest, CommandIdsMatch) { GLES2_CommandBufferEnable_kCmdId_mismatch); COMPILE_ASSERT(CopyTextureToParentTexture::kCmdId == 447, GLES2_CopyTextureToParentTexture_kCmdId_mismatch); + COMPILE_ASSERT(ResizeCHROMIUM::kCmdId == 448, + GLES2_ResizeCHROMIUM_kCmdId_mismatch); } #endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_ID_TEST_AUTOGEN_H_ diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h index e7d5708..a41ec24 100644 --- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h @@ -200,6 +200,7 @@ OP(RenderbufferStorageMultisampleEXT) /* 445 */ \ OP(BlitFramebufferEXT) /* 446 */ \ OP(CopyTextureToParentTexture) /* 447 */ \ + OP(ResizeCHROMIUM) /* 448 */ \ enum CommandId { kStartPoint = cmd::kLastCommonId, // All GLES2 commands start after this. diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index 71ccb5b..cf755d8 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc @@ -94,6 +94,7 @@ void FeatureInfo::AddFeatures(const char* desired_features) { AddExtensionString("GL_CHROMIUM_map_sub"); AddExtensionString("GL_CHROMIUM_copy_texture_to_parent_texture"); AddExtensionString("GL_CHROMIUM_resource_safe"); + AddExtensionString("GL_CHROMIUM_resize"); AddExtensionString("GL_CHROMIUM_strict_attribs"); // Only turn this feature on if it is requested. Not by default. diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index e0df165..1348f64 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -1171,6 +1171,8 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, void DoCopyTextureToParentTexture(GLuint client_texture_id, GLuint parent_client_texture_id); + void DoResizeCHROMIUM(GLuint width, GLuint height); + // Gets the number of values that will be returned by glGetXXX. Returns // false if pname is unknown. bool GetNumValuesReturnedForGLGet(GLenum pname, GLsizei* num_values); @@ -2503,6 +2505,11 @@ void GLES2DecoderImpl::DoCopyTextureToParentTexture( } } +void GLES2DecoderImpl::DoResizeCHROMIUM(GLuint width, GLuint height) { + gfx::Size size(width, height); + context_->SetSize(size); +} + const char* GLES2DecoderImpl::GetCommandName(unsigned int command_id) const { if (command_id > kStartPoint && command_id < kNumCommands) { return gles2::GetCommandName(static_cast<CommandId>(command_id)); diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index 9ca83c5..18daa6a 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h @@ -2670,5 +2670,13 @@ error::Error GLES2DecoderImpl::HandleCopyTextureToParentTexture( return error::kNoError; } +error::Error GLES2DecoderImpl::HandleResizeCHROMIUM( + uint32 immediate_data_size, const gles2::ResizeCHROMIUM& c) { + GLuint width = static_cast<GLuint>(c.width); + GLuint height = static_cast<GLuint>(c.height); + DoResizeCHROMIUM(width, height); + return error::kNoError; +} + #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_ diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h index 83f11ba..eaa7af3 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h @@ -1753,5 +1753,7 @@ TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_1) { // TODO(gman): GetUniformLocationImmediate +// TODO(gman): GetUniformLocationBucket + #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_ diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h index 9b82306..95a1952 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h @@ -8,8 +8,6 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ -// TODO(gman): GetUniformLocationBucket - TEST_F(GLES2DecoderTest2, GetVertexAttribfvValidArgs) { SpecializedSetup<GetVertexAttribfv, 0>(true); @@ -1612,5 +1610,6 @@ TEST_F(GLES2DecoderTest2, ViewportInvalidArgs3_0) { // TODO(gman): CommandBufferEnable // TODO(gman): CopyTextureToParentTexture +// TODO(gman): ResizeCHROMIUM #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ |