| 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 2012 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2023 bool ValidateCompressedTexSubDimensions( | 2023 bool ValidateCompressedTexSubDimensions( |
| 2024 const char* function_name, | 2024 const char* function_name, |
| 2025 GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, | 2025 GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, |
| 2026 GLsizei width, GLsizei height, GLsizei depth, GLenum format, | 2026 GLsizei width, GLsizei height, GLsizei depth, GLenum format, |
| 2027 Texture* texture); | 2027 Texture* texture); |
| 2028 bool ValidateCopyTextureCHROMIUMTextures(const char* function_name, | 2028 bool ValidateCopyTextureCHROMIUMTextures(const char* function_name, |
| 2029 GLenum dest_target, | 2029 GLenum dest_target, |
| 2030 TextureRef* source_texture_ref, | 2030 TextureRef* source_texture_ref, |
| 2031 TextureRef* dest_texture_ref); | 2031 TextureRef* dest_texture_ref); |
| 2032 bool CanUseCopyTextureCHROMIUMInternalFormat(GLenum dest_internal_format); | 2032 bool CanUseCopyTextureCHROMIUMInternalFormat(GLenum dest_internal_format); |
| 2033 CopyTextureMethod ValidateCopyTextureCHROMIUMInternalFormats( | 2033 bool ValidateCopyTextureCHROMIUMInternalFormats(const char* function_name, |
| 2034 const char* function_name, | 2034 GLenum source_internal_format, |
| 2035 GLint source_level, | 2035 GLenum dest_internal_format); |
| 2036 GLenum source_internal_format, | 2036 CopyTextureMethod getCopyTextureCHROMIUMMethod(GLenum source_target, |
| 2037 GLenum source_type, | 2037 GLint source_level, |
| 2038 GLenum dest_target, | 2038 GLenum source_internal_format, |
| 2039 GLint dest_level, | 2039 GLenum source_type, |
| 2040 GLenum dest_internal_format); | 2040 GLenum dest_target, |
| 2041 GLint dest_level, |
| 2042 GLenum dest_internal_format, |
| 2043 bool flip_y, |
| 2044 bool premultiply_alpha, |
| 2045 bool unpremultiply_alpha); |
| 2041 bool ValidateCompressedCopyTextureCHROMIUM(const char* function_name, | 2046 bool ValidateCompressedCopyTextureCHROMIUM(const char* function_name, |
| 2042 TextureRef* source_texture_ref, | 2047 TextureRef* source_texture_ref, |
| 2043 TextureRef* dest_texture_ref); | 2048 TextureRef* dest_texture_ref); |
| 2044 | 2049 |
| 2045 void RenderWarning(const char* filename, int line, const std::string& msg); | 2050 void RenderWarning(const char* filename, int line, const std::string& msg); |
| 2046 void PerformanceWarning( | 2051 void PerformanceWarning( |
| 2047 const char* filename, int line, const std::string& msg); | 2052 const char* filename, int line, const std::string& msg); |
| 2048 | 2053 |
| 2049 const FeatureInfo::FeatureFlags& features() const { | 2054 const FeatureInfo::FeatureFlags& features() const { |
| 2050 return feature_info_->feature_flags(); | 2055 return feature_info_->feature_flags(); |
| (...skipping 14251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16302 case GL_RGB32F: | 16307 case GL_RGB32F: |
| 16303 case GL_RGBA16F: | 16308 case GL_RGBA16F: |
| 16304 case GL_RGBA32F: | 16309 case GL_RGBA32F: |
| 16305 case GL_R11F_G11F_B10F: | 16310 case GL_R11F_G11F_B10F: |
| 16306 return true; | 16311 return true; |
| 16307 default: | 16312 default: |
| 16308 return false; | 16313 return false; |
| 16309 } | 16314 } |
| 16310 } | 16315 } |
| 16311 | 16316 |
| 16312 CopyTextureMethod GLES2DecoderImpl::ValidateCopyTextureCHROMIUMInternalFormats( | 16317 bool GLES2DecoderImpl::ValidateCopyTextureCHROMIUMInternalFormats( |
| 16313 const char* function_name, | 16318 const char* function_name, |
| 16314 GLint source_level, | |
| 16315 GLenum source_internal_format, | 16319 GLenum source_internal_format, |
| 16316 GLenum source_type, | |
| 16317 GLenum dest_target, | |
| 16318 GLint dest_level, | |
| 16319 GLenum dest_internal_format) { | 16320 GLenum dest_internal_format) { |
| 16320 bool valid_dest_format = false; | 16321 bool valid_dest_format = false; |
| 16321 // TODO(qiankun.miao@intel.com): ALPHA, LUMINANCE and LUMINANCE_ALPHA formats | 16322 // TODO(qiankun.miao@intel.com): ALPHA, LUMINANCE and LUMINANCE_ALPHA formats |
| 16322 // are not supported on GL core profile. See crbug.com/577144. Enable the | 16323 // are not supported on GL core profile. See crbug.com/577144. Enable the |
| 16323 // workaround for glCopyTexImage and glCopyTexSubImage in | 16324 // workaround for glCopyTexImage and glCopyTexSubImage in |
| 16324 // gles2_cmd_copy_tex_image.cc for glCopyTextureCHROMIUM implementation. | 16325 // gles2_cmd_copy_tex_image.cc for glCopyTextureCHROMIUM implementation. |
| 16325 switch (dest_internal_format) { | 16326 switch (dest_internal_format) { |
| 16326 case GL_RGB: | 16327 case GL_RGB: |
| 16327 case GL_RGBA: | 16328 case GL_RGBA: |
| 16328 case GL_RGB8: | 16329 case GL_RGB8: |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16386 source_internal_format == GL_LUMINANCE_ALPHA || | 16387 source_internal_format == GL_LUMINANCE_ALPHA || |
| 16387 source_internal_format == GL_BGRA_EXT || | 16388 source_internal_format == GL_BGRA_EXT || |
| 16388 source_internal_format == GL_BGRA8_EXT || | 16389 source_internal_format == GL_BGRA8_EXT || |
| 16389 source_internal_format == GL_RGB_YCBCR_420V_CHROMIUM || | 16390 source_internal_format == GL_RGB_YCBCR_420V_CHROMIUM || |
| 16390 source_internal_format == GL_RGB_YCBCR_422_CHROMIUM; | 16391 source_internal_format == GL_RGB_YCBCR_422_CHROMIUM; |
| 16391 if (!valid_source_format) { | 16392 if (!valid_source_format) { |
| 16392 std::string msg = "invalid source internal format " + | 16393 std::string msg = "invalid source internal format " + |
| 16393 GLES2Util::GetStringEnum(source_internal_format); | 16394 GLES2Util::GetStringEnum(source_internal_format); |
| 16394 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, | 16395 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, |
| 16395 msg.c_str()); | 16396 msg.c_str()); |
| 16396 return NOT_COPYABLE; | 16397 return false; |
| 16397 } | 16398 } |
| 16398 if (!valid_dest_format) { | 16399 if (!valid_dest_format) { |
| 16399 std::string msg = "invalid dest internal format " + | 16400 std::string msg = "invalid dest internal format " + |
| 16400 GLES2Util::GetStringEnum(dest_internal_format); | 16401 GLES2Util::GetStringEnum(dest_internal_format); |
| 16401 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, | 16402 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, |
| 16402 msg.c_str()); | 16403 msg.c_str()); |
| 16403 return NOT_COPYABLE; | 16404 return false; |
| 16404 } | 16405 } |
| 16405 | 16406 |
| 16407 return true; |
| 16408 } |
| 16409 |
| 16410 CopyTextureMethod GLES2DecoderImpl::getCopyTextureCHROMIUMMethod( |
| 16411 GLenum source_target, |
| 16412 GLint source_level, |
| 16413 GLenum source_internal_format, |
| 16414 GLenum source_type, |
| 16415 GLenum dest_target, |
| 16416 GLint dest_level, |
| 16417 GLenum dest_internal_format, |
| 16418 bool flip_y, |
| 16419 bool premultiply_alpha, |
| 16420 bool unpremultiply_alpha) { |
| 16421 bool premultiply_alpha_change = premultiply_alpha ^ unpremultiply_alpha; |
| 16406 bool source_format_color_renderable = | 16422 bool source_format_color_renderable = |
| 16407 Texture::ColorRenderable(GetFeatureInfo(), source_internal_format, false); | 16423 Texture::ColorRenderable(GetFeatureInfo(), source_internal_format, false); |
| 16408 bool dest_format_color_renderable = | 16424 bool dest_format_color_renderable = |
| 16409 Texture::ColorRenderable(GetFeatureInfo(), dest_internal_format, false); | 16425 Texture::ColorRenderable(GetFeatureInfo(), dest_internal_format, false); |
| 16410 std::string output_error_msg; | 16426 std::string output_error_msg; |
| 16411 | 16427 |
| 16412 // CopyTexImage* should not allow internalformat of GL_BGRA_EXT and | 16428 // CopyTexImage* should not allow internalformat of GL_BGRA_EXT and |
| 16413 // GL_BGRA8_EXT. crbug.com/663086. | 16429 // GL_BGRA8_EXT. crbug.com/663086. |
| 16414 bool copy_tex_image_format_valid = | 16430 bool copy_tex_image_format_valid = |
| 16415 source_internal_format != GL_BGRA_EXT && | 16431 source_internal_format != GL_BGRA_EXT && |
| 16416 dest_internal_format != GL_BGRA_EXT && | 16432 dest_internal_format != GL_BGRA_EXT && |
| 16417 source_internal_format != GL_BGRA8_EXT && | 16433 source_internal_format != GL_BGRA8_EXT && |
| 16418 dest_internal_format != GL_BGRA8_EXT && | 16434 dest_internal_format != GL_BGRA8_EXT && |
| 16419 ValidateCopyTexFormatHelper(dest_internal_format, source_internal_format, | 16435 ValidateCopyTexFormatHelper(dest_internal_format, source_internal_format, |
| 16420 source_type, &output_error_msg); | 16436 source_type, &output_error_msg); |
| 16421 | 16437 |
| 16422 // TODO(qiankun.miao@intel.com): for WebGL 2.0 or OpenGL ES 3.0, both | 16438 // TODO(qiankun.miao@intel.com): for WebGL 2.0 or OpenGL ES 3.0, both |
| 16423 // DIRECT_DRAW path for dest_level > 0 and DIRECT_COPY path for source_level > | 16439 // DIRECT_DRAW path for dest_level > 0 and DIRECT_COPY path for source_level > |
| 16424 // 0 are not available due to a framebuffer completeness bug: | 16440 // 0 are not available due to a framebuffer completeness bug: |
| 16425 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and | 16441 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and |
| 16426 // OpenGL ES 3.0 can be lifted. | 16442 // OpenGL ES 3.0 can be lifted. |
| 16427 // For WebGL 1.0 or OpenGL ES 2.0, DIRECT_DRAW path isn't available for | 16443 // For WebGL 1.0 or OpenGL ES 2.0, DIRECT_DRAW path isn't available for |
| 16428 // dest_level > 0 due to level > 0 isn't supported by glFramebufferTexture2D | 16444 // dest_level > 0 due to level > 0 isn't supported by glFramebufferTexture2D |
| 16429 // in ES2 context. DIRECT_DRAW path isn't available for cube map dest texture | 16445 // in ES2 context. DIRECT_DRAW path isn't available for cube map dest texture |
| 16430 // either due to it may be cube map incomplete. Go to DRAW_AND_COPY path in | 16446 // either due to it may be cube map incomplete. Go to DRAW_AND_COPY path in |
| 16431 // these cases. | 16447 // these cases. |
| 16432 if (source_format_color_renderable && copy_tex_image_format_valid && | 16448 if (source_target == GL_TEXTURE_2D && |
| 16433 source_level == 0) | 16449 (dest_target == GL_TEXTURE_2D || dest_target == GL_TEXTURE_CUBE_MAP) && |
| 16450 source_format_color_renderable && copy_tex_image_format_valid && |
| 16451 source_level == 0 && !flip_y && !premultiply_alpha_change) |
| 16434 return DIRECT_COPY; | 16452 return DIRECT_COPY; |
| 16435 if (dest_format_color_renderable && dest_level == 0 && | 16453 if (dest_format_color_renderable && dest_level == 0 && |
| 16436 dest_target != GL_TEXTURE_CUBE_MAP) | 16454 dest_target != GL_TEXTURE_CUBE_MAP) |
| 16437 return DIRECT_DRAW; | 16455 return DIRECT_DRAW; |
| 16438 | 16456 |
| 16439 // Draw to a fbo attaching level 0 of an intermediate texture, | 16457 // Draw to a fbo attaching level 0 of an intermediate texture, |
| 16440 // then copy from the fbo to dest texture level with glCopyTexImage2D. | 16458 // then copy from the fbo to dest texture level with glCopyTexImage2D. |
| 16441 return DRAW_AND_COPY; | 16459 return DRAW_AND_COPY; |
| 16442 } | 16460 } |
| 16443 | 16461 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16527 source_texture->GetLevelType(source_target, source_level, &source_type, | 16545 source_texture->GetLevelType(source_target, source_level, &source_type, |
| 16528 &source_internal_format); | 16546 &source_internal_format); |
| 16529 GLenum format = | 16547 GLenum format = |
| 16530 TextureManager::ExtractFormatFromStorageFormat(internal_format); | 16548 TextureManager::ExtractFormatFromStorageFormat(internal_format); |
| 16531 if (!texture_manager()->ValidateTextureParameters( | 16549 if (!texture_manager()->ValidateTextureParameters( |
| 16532 GetErrorState(), kFunctionName, true, format, dest_type, | 16550 GetErrorState(), kFunctionName, true, format, dest_type, |
| 16533 internal_format, dest_level)) { | 16551 internal_format, dest_level)) { |
| 16534 return; | 16552 return; |
| 16535 } | 16553 } |
| 16536 | 16554 |
| 16537 CopyTextureMethod method = ValidateCopyTextureCHROMIUMInternalFormats( | 16555 if (!ValidateCopyTextureCHROMIUMInternalFormats( |
| 16538 kFunctionName, source_level, source_internal_format, source_type, | 16556 kFunctionName, source_internal_format, internal_format)) { |
| 16539 dest_binding_target, dest_level, internal_format); | |
| 16540 // INVALID_OPERATION is already generated by | |
| 16541 // ValidateCopyTextureCHROMIUMInternalFormats. | |
| 16542 if (method == NOT_COPYABLE) { | |
| 16543 return; | 16557 return; |
| 16544 } | 16558 } |
| 16545 | 16559 |
| 16546 if (feature_info_->feature_flags().desktop_srgb_support) { | 16560 if (feature_info_->feature_flags().desktop_srgb_support) { |
| 16547 bool enable_framebuffer_srgb = | 16561 bool enable_framebuffer_srgb = |
| 16548 GLES2Util::GetColorEncodingFromInternalFormat(source_internal_format) == | 16562 GLES2Util::GetColorEncodingFromInternalFormat(source_internal_format) == |
| 16549 GL_SRGB || | 16563 GL_SRGB || |
| 16550 GLES2Util::GetColorEncodingFromInternalFormat(internal_format) == | 16564 GLES2Util::GetColorEncodingFromInternalFormat(internal_format) == |
| 16551 GL_SRGB; | 16565 GL_SRGB; |
| 16552 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); | 16566 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16662 copy_texture_CHROMIUM_->DoCopyTextureWithTransform( | 16676 copy_texture_CHROMIUM_->DoCopyTextureWithTransform( |
| 16663 this, source_target, source_texture->service_id(), source_level, | 16677 this, source_target, source_texture->service_id(), source_level, |
| 16664 source_internal_format, dest_target, dest_texture->service_id(), | 16678 source_internal_format, dest_target, dest_texture->service_id(), |
| 16665 dest_level, internal_format, source_width, source_height, | 16679 dest_level, internal_format, source_width, source_height, |
| 16666 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, | 16680 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, |
| 16667 unpack_unmultiply_alpha == GL_TRUE, transform_matrix); | 16681 unpack_unmultiply_alpha == GL_TRUE, transform_matrix); |
| 16668 return; | 16682 return; |
| 16669 } | 16683 } |
| 16670 } | 16684 } |
| 16671 | 16685 |
| 16686 CopyTextureMethod method = getCopyTextureCHROMIUMMethod( |
| 16687 source_target, source_level, source_internal_format, source_type, |
| 16688 dest_binding_target, dest_level, internal_format, |
| 16689 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, |
| 16690 unpack_unmultiply_alpha == GL_TRUE); |
| 16672 copy_texture_CHROMIUM_->DoCopyTexture( | 16691 copy_texture_CHROMIUM_->DoCopyTexture( |
| 16673 this, source_target, source_texture->service_id(), source_level, | 16692 this, source_target, source_texture->service_id(), source_level, |
| 16674 source_internal_format, dest_target, dest_texture->service_id(), | 16693 source_internal_format, dest_target, dest_texture->service_id(), |
| 16675 dest_level, internal_format, source_width, source_height, | 16694 dest_level, internal_format, source_width, source_height, |
| 16676 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, | 16695 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, |
| 16677 unpack_unmultiply_alpha == GL_TRUE, method); | 16696 unpack_unmultiply_alpha == GL_TRUE, method); |
| 16678 } | 16697 } |
| 16679 | 16698 |
| 16680 void GLES2DecoderImpl::DoCopySubTextureCHROMIUM( | 16699 void GLES2DecoderImpl::DoCopySubTextureCHROMIUM( |
| 16681 GLuint source_id, | 16700 GLuint source_id, |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16779 "destination texture is not defined"); | 16798 "destination texture is not defined"); |
| 16780 return; | 16799 return; |
| 16781 } | 16800 } |
| 16782 if (!dest_texture->ValidForTexture(dest_target, dest_level, xoffset, yoffset, | 16801 if (!dest_texture->ValidForTexture(dest_target, dest_level, xoffset, yoffset, |
| 16783 0, width, height, 1)) { | 16802 0, width, height, 1)) { |
| 16784 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, | 16803 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, |
| 16785 "destination texture bad dimensions."); | 16804 "destination texture bad dimensions."); |
| 16786 return; | 16805 return; |
| 16787 } | 16806 } |
| 16788 | 16807 |
| 16789 CopyTextureMethod method = ValidateCopyTextureCHROMIUMInternalFormats( | 16808 if (!ValidateCopyTextureCHROMIUMInternalFormats( |
| 16790 kFunctionName, source_level, source_internal_format, source_type, | 16809 kFunctionName, source_internal_format, dest_internal_format)) { |
| 16791 dest_binding_target, dest_level, dest_internal_format); | |
| 16792 // INVALID_OPERATION is already generated by | |
| 16793 // ValidateCopyTextureCHROMIUMInternalFormats. | |
| 16794 if (method == NOT_COPYABLE) { | |
| 16795 return; | 16810 return; |
| 16796 } | 16811 } |
| 16797 | 16812 |
| 16798 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) | |
| 16799 // glDrawArrays is faster than glCopyTexSubImage2D on IA Mesa driver, | |
| 16800 // although opposite in Android. | |
| 16801 // TODO(dshwang): After Mesa fixes this issue, remove this hack. | |
| 16802 // https://bugs.freedesktop.org/show_bug.cgi?id=98478, crbug.com/535198. | |
| 16803 if (Texture::ColorRenderable(GetFeatureInfo(), dest_internal_format, | |
| 16804 dest_texture->IsImmutable()) && | |
| 16805 method == DIRECT_COPY) { | |
| 16806 method = DIRECT_DRAW; | |
| 16807 } | |
| 16808 #endif | |
| 16809 | |
| 16810 if (feature_info_->feature_flags().desktop_srgb_support) { | 16813 if (feature_info_->feature_flags().desktop_srgb_support) { |
| 16811 bool enable_framebuffer_srgb = | 16814 bool enable_framebuffer_srgb = |
| 16812 GLES2Util::GetColorEncodingFromInternalFormat(source_internal_format) == | 16815 GLES2Util::GetColorEncodingFromInternalFormat(source_internal_format) == |
| 16813 GL_SRGB || | 16816 GL_SRGB || |
| 16814 GLES2Util::GetColorEncodingFromInternalFormat(dest_internal_format) == | 16817 GLES2Util::GetColorEncodingFromInternalFormat(dest_internal_format) == |
| 16815 GL_SRGB; | 16818 GL_SRGB; |
| 16816 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); | 16819 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); |
| 16817 } | 16820 } |
| 16818 | 16821 |
| 16819 // Clear the source texture if necessary. | 16822 // Clear the source texture if necessary. |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16885 copy_texture_CHROMIUM_->DoCopySubTextureWithTransform( | 16888 copy_texture_CHROMIUM_->DoCopySubTextureWithTransform( |
| 16886 this, source_target, source_texture->service_id(), source_level, | 16889 this, source_target, source_texture->service_id(), source_level, |
| 16887 source_internal_format, dest_target, dest_texture->service_id(), | 16890 source_internal_format, dest_target, dest_texture->service_id(), |
| 16888 dest_level, dest_internal_format, xoffset, yoffset, x, y, width, | 16891 dest_level, dest_internal_format, xoffset, yoffset, x, y, width, |
| 16889 height, dest_width, dest_height, source_width, source_height, | 16892 height, dest_width, dest_height, source_width, source_height, |
| 16890 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, | 16893 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, |
| 16891 unpack_unmultiply_alpha == GL_TRUE, transform_matrix); | 16894 unpack_unmultiply_alpha == GL_TRUE, transform_matrix); |
| 16892 return; | 16895 return; |
| 16893 } | 16896 } |
| 16894 } | 16897 } |
| 16898 |
| 16899 CopyTextureMethod method = getCopyTextureCHROMIUMMethod( |
| 16900 source_target, source_level, source_internal_format, source_type, |
| 16901 dest_binding_target, dest_level, dest_internal_format, |
| 16902 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, |
| 16903 unpack_unmultiply_alpha == GL_TRUE); |
| 16904 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
| 16905 // glDrawArrays is faster than glCopyTexSubImage2D on IA Mesa driver, |
| 16906 // although opposite in Android. |
| 16907 // TODO(dshwang): After Mesa fixes this issue, remove this hack. |
| 16908 // https://bugs.freedesktop.org/show_bug.cgi?id=98478, crbug.com/535198. |
| 16909 if (Texture::ColorRenderable(GetFeatureInfo(), dest_internal_format, |
| 16910 dest_texture->IsImmutable()) && |
| 16911 method == DIRECT_COPY) { |
| 16912 method = DIRECT_DRAW; |
| 16913 } |
| 16914 #endif |
| 16915 |
| 16895 copy_texture_CHROMIUM_->DoCopySubTexture( | 16916 copy_texture_CHROMIUM_->DoCopySubTexture( |
| 16896 this, source_target, source_texture->service_id(), source_level, | 16917 this, source_target, source_texture->service_id(), source_level, |
| 16897 source_internal_format, dest_target, dest_texture->service_id(), | 16918 source_internal_format, dest_target, dest_texture->service_id(), |
| 16898 dest_level, dest_internal_format, xoffset, yoffset, x, y, width, height, | 16919 dest_level, dest_internal_format, xoffset, yoffset, x, y, width, height, |
| 16899 dest_width, dest_height, source_width, source_height, | 16920 dest_width, dest_height, source_width, source_height, |
| 16900 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, | 16921 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, |
| 16901 unpack_unmultiply_alpha == GL_TRUE, method); | 16922 unpack_unmultiply_alpha == GL_TRUE, method); |
| 16902 } | 16923 } |
| 16903 | 16924 |
| 16904 bool GLES2DecoderImpl::InitializeCopyTexImageBlitter( | 16925 bool GLES2DecoderImpl::InitializeCopyTexImageBlitter( |
| (...skipping 2430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19335 } | 19356 } |
| 19336 | 19357 |
| 19337 // Include the auto-generated part of this file. We split this because it means | 19358 // Include the auto-generated part of this file. We split this because it means |
| 19338 // we can easily edit the non-auto generated parts right here in this file | 19359 // we can easily edit the non-auto generated parts right here in this file |
| 19339 // instead of having to edit some template or the code generator. | 19360 // instead of having to edit some template or the code generator. |
| 19340 #include "base/macros.h" | 19361 #include "base/macros.h" |
| 19341 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 19362 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
| 19342 | 19363 |
| 19343 } // namespace gles2 | 19364 } // namespace gles2 |
| 19344 } // namespace gpu | 19365 } // namespace gpu |
| OLD | NEW |