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