| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 6 | 6 |
| 7 #include <limits.h> | 7 #include <limits.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 #include <stdio.h> | 10 #include <stdio.h> |
| (...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1288 int height, | 1288 int height, |
| 1289 int depth) override; | 1289 int depth) override; |
| 1290 | 1290 |
| 1291 // Restore all GL state that affects clearing. | 1291 // Restore all GL state that affects clearing. |
| 1292 void RestoreClearState(); | 1292 void RestoreClearState(); |
| 1293 | 1293 |
| 1294 // Remembers the state of some capabilities. | 1294 // Remembers the state of some capabilities. |
| 1295 // Returns: true if glEnable/glDisable should actually be called. | 1295 // Returns: true if glEnable/glDisable should actually be called. |
| 1296 bool SetCapabilityState(GLenum cap, bool enabled); | 1296 bool SetCapabilityState(GLenum cap, bool enabled); |
| 1297 | 1297 |
| 1298 // Infer color encoding from internalformat | |
| 1299 static GLint GetColorEncodingFromInternalFormat(GLenum internalformat); | |
| 1300 | |
| 1301 // Check that the currently bound read framebuffer's color image | 1298 // Check that the currently bound read framebuffer's color image |
| 1302 // isn't the target texture of the glCopyTex{Sub}Image{2D|3D}. | 1299 // isn't the target texture of the glCopyTex{Sub}Image{2D|3D}. |
| 1303 bool FormsTextureCopyingFeedbackLoop( | 1300 bool FormsTextureCopyingFeedbackLoop( |
| 1304 TextureRef* texture, | 1301 TextureRef* texture, |
| 1305 GLint level, | 1302 GLint level, |
| 1306 GLint layer); | 1303 GLint layer); |
| 1307 | 1304 |
| 1308 // Check if a framebuffer meets our requirements. | 1305 // Check if a framebuffer meets our requirements. |
| 1309 // Generates |gl_error| if the framebuffer is incomplete. | 1306 // Generates |gl_error| if the framebuffer is incomplete. |
| 1310 bool CheckFramebufferValid( | 1307 bool CheckFramebufferValid( |
| (...skipping 3099 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4410 Framebuffer* draw_framebuffer = GetBoundDrawFramebuffer(); | 4407 Framebuffer* draw_framebuffer = GetBoundDrawFramebuffer(); |
| 4411 bool valid = CheckFramebufferValid( | 4408 bool valid = CheckFramebufferValid( |
| 4412 draw_framebuffer, GetDrawFramebufferTarget(), gl_error, func_name); | 4409 draw_framebuffer, GetDrawFramebufferTarget(), gl_error, func_name); |
| 4413 | 4410 |
| 4414 Framebuffer* read_framebuffer = GetBoundReadFramebuffer(); | 4411 Framebuffer* read_framebuffer = GetBoundReadFramebuffer(); |
| 4415 valid = valid && CheckFramebufferValid( | 4412 valid = valid && CheckFramebufferValid( |
| 4416 read_framebuffer, GetReadFramebufferTarget(), gl_error, func_name); | 4413 read_framebuffer, GetReadFramebufferTarget(), gl_error, func_name); |
| 4417 return valid; | 4414 return valid; |
| 4418 } | 4415 } |
| 4419 | 4416 |
| 4420 GLint GLES2DecoderImpl::GetColorEncodingFromInternalFormat( | |
| 4421 GLenum internalformat) { | |
| 4422 switch (internalformat) { | |
| 4423 case GL_SRGB_EXT: | |
| 4424 case GL_SRGB_ALPHA_EXT: | |
| 4425 case GL_SRGB8: | |
| 4426 case GL_SRGB8_ALPHA8: | |
| 4427 return GL_SRGB; | |
| 4428 default: | |
| 4429 return GL_LINEAR; | |
| 4430 } | |
| 4431 } | |
| 4432 | |
| 4433 bool GLES2DecoderImpl::FormsTextureCopyingFeedbackLoop( | 4417 bool GLES2DecoderImpl::FormsTextureCopyingFeedbackLoop( |
| 4434 TextureRef* texture, GLint level, GLint layer) { | 4418 TextureRef* texture, GLint level, GLint layer) { |
| 4435 Framebuffer* framebuffer = GetBoundReadFramebuffer(); | 4419 Framebuffer* framebuffer = GetBoundReadFramebuffer(); |
| 4436 if (!framebuffer) | 4420 if (!framebuffer) |
| 4437 return false; | 4421 return false; |
| 4438 const Framebuffer::Attachment* attachment = | 4422 const Framebuffer::Attachment* attachment = |
| 4439 framebuffer->GetReadBufferAttachment(); | 4423 framebuffer->GetReadBufferAttachment(); |
| 4440 if (!attachment) | 4424 if (!attachment) |
| 4441 return false; | 4425 return false; |
| 4442 return attachment->FormsFeedbackLoop(texture, level, layer); | 4426 return attachment->FormsFeedbackLoop(texture, level, layer); |
| (...skipping 1780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6223 tex->GetLevelType(target, tex->base_level(), &type, &internal_format)) { | 6207 tex->GetLevelType(target, tex->base_level(), &type, &internal_format)) { |
| 6224 format = TextureManager::ExtractFormatFromStorageFormat(internal_format); | 6208 format = TextureManager::ExtractFormatFromStorageFormat(internal_format); |
| 6225 glTexImage2D(target, 0, internal_format, 1, 1, 0, format, type, nullptr); | 6209 glTexImage2D(target, 0, internal_format, 1, 1, 0, format, type, nullptr); |
| 6226 texture_zero_level_set = true; | 6210 texture_zero_level_set = true; |
| 6227 } | 6211 } |
| 6228 } | 6212 } |
| 6229 | 6213 |
| 6230 bool enable_srgb = 0; | 6214 bool enable_srgb = 0; |
| 6231 if (target == GL_TEXTURE_2D) { | 6215 if (target == GL_TEXTURE_2D) { |
| 6232 tex->GetLevelType(target, tex->base_level(), &type, &internal_format); | 6216 tex->GetLevelType(target, tex->base_level(), &type, &internal_format); |
| 6233 enable_srgb = | 6217 enable_srgb = GLES2Util::GetColorEncodingFromInternalFormat( |
| 6234 GetColorEncodingFromInternalFormat(internal_format) == GL_SRGB; | 6218 internal_format) == GL_SRGB; |
| 6235 } | 6219 } |
| 6236 if (enable_srgb && feature_info_->feature_flags().desktop_srgb_support) { | 6220 if (enable_srgb && feature_info_->feature_flags().desktop_srgb_support) { |
| 6237 state_.EnableDisableFramebufferSRGB(enable_srgb); | 6221 state_.EnableDisableFramebufferSRGB(enable_srgb); |
| 6238 } | 6222 } |
| 6239 if (enable_srgb && workarounds().decode_encode_srgb_for_generatemipmap) { | 6223 if (enable_srgb && workarounds().decode_encode_srgb_for_generatemipmap) { |
| 6240 if (target == GL_TEXTURE_2D) { | 6224 if (target == GL_TEXTURE_2D) { |
| 6241 if (!InitializeSRGBConverter("generateMipmap")) { | 6225 if (!InitializeSRGBConverter("generateMipmap")) { |
| 6242 return; | 6226 return; |
| 6243 } | 6227 } |
| 6244 srgb_converter_->GenerateMipmap(this, tex, target); | 6228 srgb_converter_->GenerateMipmap(this, tex, target); |
| (...skipping 1799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8044 } | 8028 } |
| 8045 } else if (stencil_buffer_draw->IsSameAttachment(stencil_buffer_read)) { | 8029 } else if (stencil_buffer_draw->IsSameAttachment(stencil_buffer_read)) { |
| 8046 is_feedback_loop = FeedbackLoopTrue; | 8030 is_feedback_loop = FeedbackLoopTrue; |
| 8047 } | 8031 } |
| 8048 } | 8032 } |
| 8049 } | 8033 } |
| 8050 | 8034 |
| 8051 GLenum src_internal_format = GetBoundReadFramebufferInternalFormat(); | 8035 GLenum src_internal_format = GetBoundReadFramebufferInternalFormat(); |
| 8052 GLenum src_type = GetBoundReadFramebufferTextureType(); | 8036 GLenum src_type = GetBoundReadFramebufferTextureType(); |
| 8053 | 8037 |
| 8054 bool read_buffer_has_srgb = | 8038 bool read_buffer_has_srgb = GLES2Util::GetColorEncodingFromInternalFormat( |
| 8055 GetColorEncodingFromInternalFormat(src_internal_format) == GL_SRGB; | 8039 src_internal_format) == GL_SRGB; |
| 8056 bool draw_buffers_has_srgb = false; | 8040 bool draw_buffers_has_srgb = false; |
| 8057 if ((mask & GL_COLOR_BUFFER_BIT) != 0) { | 8041 if ((mask & GL_COLOR_BUFFER_BIT) != 0) { |
| 8058 bool is_src_signed_int = | 8042 bool is_src_signed_int = |
| 8059 GLES2Util::IsSignedIntegerFormat(src_internal_format); | 8043 GLES2Util::IsSignedIntegerFormat(src_internal_format); |
| 8060 bool is_src_unsigned_int = | 8044 bool is_src_unsigned_int = |
| 8061 GLES2Util::IsUnsignedIntegerFormat(src_internal_format); | 8045 GLES2Util::IsUnsignedIntegerFormat(src_internal_format); |
| 8062 DCHECK(!is_src_signed_int || !is_src_unsigned_int); | 8046 DCHECK(!is_src_signed_int || !is_src_unsigned_int); |
| 8063 | 8047 |
| 8064 if ((is_src_signed_int || is_src_unsigned_int) && filter == GL_LINEAR) { | 8048 if ((is_src_signed_int || is_src_unsigned_int) && filter == GL_LINEAR) { |
| 8065 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, | 8049 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 8077 for (uint32_t ii = 0; ii < group_->max_draw_buffers(); ++ii) { | 8061 for (uint32_t ii = 0; ii < group_->max_draw_buffers(); ++ii) { |
| 8078 GLenum dst_format = GetBoundColorDrawBufferInternalFormat( | 8062 GLenum dst_format = GetBoundColorDrawBufferInternalFormat( |
| 8079 static_cast<GLint>(ii)); | 8063 static_cast<GLint>(ii)); |
| 8080 GLenum dst_type = GetBoundColorDrawBufferType(static_cast<GLint>(ii)); | 8064 GLenum dst_type = GetBoundColorDrawBufferType(static_cast<GLint>(ii)); |
| 8081 if (dst_format == 0) | 8065 if (dst_format == 0) |
| 8082 continue; | 8066 continue; |
| 8083 draw_buffer_has_image = true; | 8067 draw_buffer_has_image = true; |
| 8084 if (!src_internal_format) { | 8068 if (!src_internal_format) { |
| 8085 read_framebuffer_miss_image = true; | 8069 read_framebuffer_miss_image = true; |
| 8086 } | 8070 } |
| 8087 if (GetColorEncodingFromInternalFormat(dst_format) == GL_SRGB) | 8071 if (GLES2Util::GetColorEncodingFromInternalFormat(dst_format) == GL_SRGB) |
| 8088 draw_buffers_has_srgb = true; | 8072 draw_buffers_has_srgb = true; |
| 8089 if (read_buffer_samples > 0 && | 8073 if (read_buffer_samples > 0 && |
| 8090 (src_sized_format != | 8074 (src_sized_format != |
| 8091 GLES2Util::ConvertToSizedFormat(dst_format, dst_type))) { | 8075 GLES2Util::ConvertToSizedFormat(dst_format, dst_type))) { |
| 8092 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, | 8076 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, |
| 8093 "src and dst formats differ for color"); | 8077 "src and dst formats differ for color"); |
| 8094 return; | 8078 return; |
| 8095 } | 8079 } |
| 8096 bool is_dst_signed_int = GLES2Util::IsSignedIntegerFormat(dst_format); | 8080 bool is_dst_signed_int = GLES2Util::IsSignedIntegerFormat(dst_format); |
| 8097 bool is_dst_unsigned_int = GLES2Util::IsUnsignedIntegerFormat(dst_format); | 8081 bool is_dst_unsigned_int = GLES2Util::IsUnsignedIntegerFormat(dst_format); |
| (...skipping 5859 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13957 } | 13941 } |
| 13958 // Check we have compatible formats. | 13942 // Check we have compatible formats. |
| 13959 uint32_t channels_exist = GLES2Util::GetChannelsForFormat(read_format); | 13943 uint32_t channels_exist = GLES2Util::GetChannelsForFormat(read_format); |
| 13960 uint32_t channels_needed = GLES2Util::GetChannelsForFormat(internal_format); | 13944 uint32_t channels_needed = GLES2Util::GetChannelsForFormat(internal_format); |
| 13961 if (!channels_needed || | 13945 if (!channels_needed || |
| 13962 (channels_needed & channels_exist) != channels_needed) { | 13946 (channels_needed & channels_exist) != channels_needed) { |
| 13963 *output_error_msg = std::string("incompatible format"); | 13947 *output_error_msg = std::string("incompatible format"); |
| 13964 return false; | 13948 return false; |
| 13965 } | 13949 } |
| 13966 if (feature_info_->IsWebGL2OrES3Context()) { | 13950 if (feature_info_->IsWebGL2OrES3Context()) { |
| 13967 GLint color_encoding = GetColorEncodingFromInternalFormat(read_format); | 13951 GLint color_encoding = |
| 13952 GLES2Util::GetColorEncodingFromInternalFormat(read_format); |
| 13968 bool float_mismatch = feature_info_->ext_color_buffer_float_available() ? | 13953 bool float_mismatch = feature_info_->ext_color_buffer_float_available() ? |
| 13969 (GLES2Util::IsIntegerFormat(internal_format) != | 13954 (GLES2Util::IsIntegerFormat(internal_format) != |
| 13970 GLES2Util::IsIntegerFormat(read_format)) : | 13955 GLES2Util::IsIntegerFormat(read_format)) : |
| 13971 GLES2Util::IsFloatFormat(internal_format); | 13956 GLES2Util::IsFloatFormat(internal_format); |
| 13972 if (color_encoding != GetColorEncodingFromInternalFormat(internal_format) || | 13957 if (color_encoding != |
| 13973 float_mismatch || | 13958 GLES2Util::GetColorEncodingFromInternalFormat(internal_format) || |
| 13974 (GLES2Util::IsSignedIntegerFormat(internal_format) != | 13959 float_mismatch || (GLES2Util::IsSignedIntegerFormat(internal_format) != |
| 13975 GLES2Util::IsSignedIntegerFormat(read_format)) || | 13960 GLES2Util::IsSignedIntegerFormat(read_format)) || |
| 13976 (GLES2Util::IsUnsignedIntegerFormat(internal_format) != | 13961 (GLES2Util::IsUnsignedIntegerFormat(internal_format) != |
| 13977 GLES2Util::IsUnsignedIntegerFormat(read_format))) { | 13962 GLES2Util::IsUnsignedIntegerFormat(read_format))) { |
| 13978 *output_error_msg = std::string("incompatible format"); | 13963 *output_error_msg = std::string("incompatible format"); |
| 13979 return false; | 13964 return false; |
| 13980 } | 13965 } |
| 13981 } | 13966 } |
| 13982 if ((channels_needed & (GLES2Util::kDepth | GLES2Util::kStencil)) != 0) { | 13967 if ((channels_needed & (GLES2Util::kDepth | GLES2Util::kStencil)) != 0) { |
| 13983 *output_error_msg = | 13968 *output_error_msg = |
| 13984 std::string("can not be used with depth or stencil textures"); | 13969 std::string("can not be used with depth or stencil textures"); |
| 13985 return false; | 13970 return false; |
| (...skipping 2478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16464 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and | 16449 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and |
| 16465 // OpenGL ES 3.0 can be lifted. | 16450 // OpenGL ES 3.0 can be lifted. |
| 16466 if (((dest_level > 0 || dest_binding_target == GL_TEXTURE_CUBE_MAP) && | 16451 if (((dest_level > 0 || dest_binding_target == GL_TEXTURE_CUBE_MAP) && |
| 16467 method == DIRECT_DRAW) || | 16452 method == DIRECT_DRAW) || |
| 16468 (source_level > 0 && method == DIRECT_COPY)) { | 16453 (source_level > 0 && method == DIRECT_COPY)) { |
| 16469 method = DRAW_AND_COPY; | 16454 method = DRAW_AND_COPY; |
| 16470 } | 16455 } |
| 16471 | 16456 |
| 16472 if (feature_info_->feature_flags().desktop_srgb_support) { | 16457 if (feature_info_->feature_flags().desktop_srgb_support) { |
| 16473 bool enable_framebuffer_srgb = | 16458 bool enable_framebuffer_srgb = |
| 16474 GetColorEncodingFromInternalFormat(source_internal_format) == GL_SRGB || | 16459 GLES2Util::GetColorEncodingFromInternalFormat(source_internal_format) == |
| 16475 GetColorEncodingFromInternalFormat(internal_format) == GL_SRGB; | 16460 GL_SRGB || |
| 16461 GLES2Util::GetColorEncodingFromInternalFormat(internal_format) == |
| 16462 GL_SRGB; |
| 16476 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); | 16463 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); |
| 16477 } | 16464 } |
| 16478 | 16465 |
| 16479 int source_width = 0; | 16466 int source_width = 0; |
| 16480 int source_height = 0; | 16467 int source_height = 0; |
| 16481 gl::GLImage* image = | 16468 gl::GLImage* image = |
| 16482 source_texture->GetLevelImage(source_target, source_level); | 16469 source_texture->GetLevelImage(source_target, source_level); |
| 16483 if (image) { | 16470 if (image) { |
| 16484 gfx::Size size = image->GetSize(); | 16471 gfx::Size size = image->GetSize(); |
| 16485 source_width = size.width(); | 16472 source_width = size.width(); |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16711 } | 16698 } |
| 16712 | 16699 |
| 16713 CopyTextureMethod method = ValidateCopyTextureCHROMIUMInternalFormats( | 16700 CopyTextureMethod method = ValidateCopyTextureCHROMIUMInternalFormats( |
| 16714 kFunctionName, source_texture_ref, source_level, dest_internal_format); | 16701 kFunctionName, source_texture_ref, source_level, dest_internal_format); |
| 16715 // INVALID_OPERATION is already generated by | 16702 // INVALID_OPERATION is already generated by |
| 16716 // ValidateCopyTextureCHROMIUMInternalFormats. | 16703 // ValidateCopyTextureCHROMIUMInternalFormats. |
| 16717 if (method == NOT_COPYABLE) { | 16704 if (method == NOT_COPYABLE) { |
| 16718 return; | 16705 return; |
| 16719 } | 16706 } |
| 16720 | 16707 |
| 16708 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
| 16709 // glDrawArrays is faster than glCopyTexSubImage2D on IA Mesa driver, |
| 16710 // although opposite in Android. |
| 16711 // TODO(dshwang): After Mesa fixes this issue, remove this hack. |
| 16712 // https://bugs.freedesktop.org/show_bug.cgi?id=98478, crbug.com/535198. |
| 16713 if (Texture::ColorRenderable(GetFeatureInfo(), dest_internal_format, false) && |
| 16714 method == DIRECT_COPY) { |
| 16715 method = DIRECT_DRAW; |
| 16716 } |
| 16717 #endif |
| 16718 |
| 16721 // Draw to a fbo attaching level 0 of an intermediate texture, | 16719 // Draw to a fbo attaching level 0 of an intermediate texture, |
| 16722 // then copy from the fbo to dest texture level with glCopyTexImage2D. | 16720 // then copy from the fbo to dest texture level with glCopyTexImage2D. |
| 16723 // For WebGL 1.0 or OpenGL ES 2.0, DIRECT_DRAW path isn't available for | 16721 // For WebGL 1.0 or OpenGL ES 2.0, DIRECT_DRAW path isn't available for |
| 16724 // dest_level > 0 due to level > 0 isn't supported by glFramebufferTexture2D | 16722 // dest_level > 0 due to level > 0 isn't supported by glFramebufferTexture2D |
| 16725 // in ES2 context. DIRECT_DRAW path isn't available for cube map dest texture | 16723 // in ES2 context. DIRECT_DRAW path isn't available for cube map dest texture |
| 16726 // either due to it may be cube map incomplete. Go to DRAW_AND_COPY path in | 16724 // either due to it may be cube map incomplete. Go to DRAW_AND_COPY path in |
| 16727 // these cases. | 16725 // these cases. |
| 16728 // TODO(qiankun.miao@intel.com): for WebGL 2.0 or OpenGL ES 3.0, both | 16726 // TODO(qiankun.miao@intel.com): for WebGL 2.0 or OpenGL ES 3.0, both |
| 16729 // DIRECT_DRAW path for dest_level > 0 and DIRECT_COPY path for source_level > | 16727 // DIRECT_DRAW path for dest_level > 0 and DIRECT_COPY path for source_level > |
| 16730 // 0 are not available due to a framebuffer completeness bug: | 16728 // 0 are not available due to a framebuffer completeness bug: |
| 16731 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and | 16729 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and |
| 16732 // OpenGL ES 3.0 can be lifted. | 16730 // OpenGL ES 3.0 can be lifted. |
| 16733 if (((dest_level > 0 || dest_binding_target == GL_TEXTURE_CUBE_MAP) && | 16731 if (((dest_level > 0 || dest_binding_target == GL_TEXTURE_CUBE_MAP) && |
| 16734 method == DIRECT_DRAW) || | 16732 method == DIRECT_DRAW) || |
| 16735 (source_level > 0 && method == DIRECT_COPY)) { | 16733 (source_level > 0 && method == DIRECT_COPY)) { |
| 16736 method = DRAW_AND_COPY; | 16734 method = DRAW_AND_COPY; |
| 16737 } | 16735 } |
| 16738 | 16736 |
| 16739 if (feature_info_->feature_flags().desktop_srgb_support) { | 16737 if (feature_info_->feature_flags().desktop_srgb_support) { |
| 16740 bool enable_framebuffer_srgb = | 16738 bool enable_framebuffer_srgb = |
| 16741 GetColorEncodingFromInternalFormat(source_internal_format) == GL_SRGB || | 16739 GLES2Util::GetColorEncodingFromInternalFormat(source_internal_format) == |
| 16742 GetColorEncodingFromInternalFormat(dest_internal_format) == GL_SRGB; | 16740 GL_SRGB || |
| 16741 GLES2Util::GetColorEncodingFromInternalFormat(dest_internal_format) == |
| 16742 GL_SRGB; |
| 16743 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); | 16743 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); |
| 16744 } | 16744 } |
| 16745 | 16745 |
| 16746 // Clear the source texture if necessary. | 16746 // Clear the source texture if necessary. |
| 16747 if (!texture_manager()->ClearTextureLevel(this, source_texture_ref, | 16747 if (!texture_manager()->ClearTextureLevel(this, source_texture_ref, |
| 16748 source_target, source_level)) { | 16748 source_target, source_level)) { |
| 16749 LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, kFunctionName, | 16749 LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, kFunctionName, |
| 16750 "source texture dimensions too big"); | 16750 "source texture dimensions too big"); |
| 16751 return; | 16751 return; |
| 16752 } | 16752 } |
| (...skipping 2493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19246 } | 19246 } |
| 19247 | 19247 |
| 19248 // Include the auto-generated part of this file. We split this because it means | 19248 // Include the auto-generated part of this file. We split this because it means |
| 19249 // we can easily edit the non-auto generated parts right here in this file | 19249 // we can easily edit the non-auto generated parts right here in this file |
| 19250 // instead of having to edit some template or the code generator. | 19250 // instead of having to edit some template or the code generator. |
| 19251 #include "base/macros.h" | 19251 #include "base/macros.h" |
| 19252 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 19252 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
| 19253 | 19253 |
| 19254 } // namespace gles2 | 19254 } // namespace gles2 |
| 19255 } // namespace gpu | 19255 } // namespace gpu |
| OLD | NEW |