Chromium Code Reviews| 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 13791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 13802 bool unpack_premultiply_alpha_change = | 13802 bool unpack_premultiply_alpha_change = |
| 13803 (unpack_premultiply_alpha ^ unpack_unmultiply_alpha) != 0; | 13803 (unpack_premultiply_alpha ^ unpack_unmultiply_alpha) != 0; |
| 13804 if (image && !unpack_flip_y && !unpack_premultiply_alpha_change) { | 13804 if (image && !unpack_flip_y && !unpack_premultiply_alpha_change) { |
| 13805 glBindTexture(dest_target, dest_texture->service_id()); | 13805 glBindTexture(dest_target, dest_texture->service_id()); |
| 13806 if (image->CopyTexImage(dest_target)) | 13806 if (image->CopyTexImage(dest_target)) |
| 13807 return; | 13807 return; |
| 13808 } | 13808 } |
| 13809 | 13809 |
| 13810 DoCopyTexImageIfNeeded(source_texture, source_target); | 13810 DoCopyTexImageIfNeeded(source_texture, source_target); |
| 13811 | 13811 |
| 13812 // GL_TEXTURE_EXTERNAL_OES texture requires apply a transform matrix | 13812 // GL_TEXTURE_EXTERNAL_OES texture requires that we apply a transform matrix |
| 13813 // before presenting. | 13813 // before presenting. |
| 13814 if (source_target == GL_TEXTURE_EXTERNAL_OES) { | 13814 if (source_target == GL_TEXTURE_EXTERNAL_OES) { |
| 13815 // TODO(hkuang): get the StreamTexture transform matrix in GPU process | |
| 13816 // instead of using kIdentityMatrix crbug.com/226218. AVDACodecImage does | |
| 13817 // this correctly, but others (e.g., stream_texture_android.cc) don't. | |
| 13818 // (crbug.com/371500, crbug.com/588837) | |
| 13819 GLfloat transform_matrix[16]; | |
| 13820 memcpy(transform_matrix, kIdentityMatrix, sizeof(transform_matrix)); | |
| 13821 if (GLStreamTextureImage* image = | 13815 if (GLStreamTextureImage* image = |
|
no sievers
2016/03/18 01:34:11
nit: merge ifs
| |
| 13822 source_texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, | 13816 source_texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, |
| 13823 0)) { | 13817 0)) { |
| 13824 image->GetTextureMatrix(transform_matrix); | 13818 // The coordinate system of this matrix is y-up, not y-down, so a flip is |
| 13819 // needed. | |
| 13820 GLfloat transform_matrix[16]; | |
| 13821 image->GetFlippedTextureMatrix(transform_matrix); | |
| 13822 copy_texture_CHROMIUM_->DoCopyTextureWithTransform( | |
| 13823 this, source_target, source_texture->service_id(), dest_target, | |
| 13824 dest_texture->service_id(), source_width, source_height, | |
| 13825 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, | |
| 13826 unpack_unmultiply_alpha == GL_TRUE, transform_matrix); | |
| 13827 return; | |
| 13825 } | 13828 } |
| 13826 copy_texture_CHROMIUM_->DoCopyTextureWithTransform( | |
| 13827 this, source_target, source_texture->service_id(), dest_target, | |
| 13828 dest_texture->service_id(), source_width, source_height, | |
| 13829 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, | |
| 13830 unpack_unmultiply_alpha == GL_TRUE, transform_matrix); | |
| 13831 } else { | |
| 13832 copy_texture_CHROMIUM_->DoCopyTexture( | |
| 13833 this, source_target, source_texture->service_id(), | |
| 13834 source_internal_format, dest_target, dest_texture->service_id(), | |
| 13835 internal_format, source_width, source_height, | |
| 13836 unpack_flip_y == GL_TRUE, | |
| 13837 unpack_premultiply_alpha == GL_TRUE, | |
| 13838 unpack_unmultiply_alpha == GL_TRUE); | |
| 13839 } | 13829 } |
| 13830 copy_texture_CHROMIUM_->DoCopyTexture( | |
| 13831 this, source_target, source_texture->service_id(), source_internal_format, | |
| 13832 dest_target, dest_texture->service_id(), internal_format, source_width, | |
| 13833 source_height, unpack_flip_y == GL_TRUE, | |
| 13834 unpack_premultiply_alpha == GL_TRUE, unpack_unmultiply_alpha == GL_TRUE); | |
| 13840 } | 13835 } |
| 13841 | 13836 |
| 13842 void GLES2DecoderImpl::DoCopySubTextureCHROMIUM( | 13837 void GLES2DecoderImpl::DoCopySubTextureCHROMIUM( |
| 13843 GLuint source_id, | 13838 GLuint source_id, |
| 13844 GLuint dest_id, | 13839 GLuint dest_id, |
| 13845 GLint xoffset, | 13840 GLint xoffset, |
| 13846 GLint yoffset, | 13841 GLint yoffset, |
| 13847 GLint x, | 13842 GLint x, |
| 13848 GLint y, | 13843 GLint y, |
| 13849 GLsizei width, | 13844 GLsizei width, |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 14000 ScopedTextureBinder binder( | 13995 ScopedTextureBinder binder( |
| 14001 &state_, dest_texture->service_id(), dest_target); | 13996 &state_, dest_texture->service_id(), dest_target); |
| 14002 if (image->CopyTexSubImage(dest_target, gfx::Point(xoffset, yoffset), | 13997 if (image->CopyTexSubImage(dest_target, gfx::Point(xoffset, yoffset), |
| 14003 gfx::Rect(x, y, width, height))) { | 13998 gfx::Rect(x, y, width, height))) { |
| 14004 return; | 13999 return; |
| 14005 } | 14000 } |
| 14006 } | 14001 } |
| 14007 | 14002 |
| 14008 DoCopyTexImageIfNeeded(source_texture, source_target); | 14003 DoCopyTexImageIfNeeded(source_texture, source_target); |
| 14009 | 14004 |
| 14010 // TODO(hkuang): get the StreamTexture transform matrix in GPU process. | 14005 |
| 14011 // crbug.com/226218. | 14006 // GL_TEXTURE_EXTERNAL_OES texture requires apply a transform matrix |
| 14007 // before presenting. | |
| 14008 if (source_target == GL_TEXTURE_EXTERNAL_OES) { | |
| 14009 if (GLStreamTextureImage* image = | |
|
no sievers
2016/03/18 01:34:11
nit: merge ifs
Tobias Sargeant
2016/03/18 10:30:13
The inner if declares and assigns |image|, so it c
| |
| 14010 source_texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, | |
| 14011 0)) { | |
| 14012 // The coordinate system of this matrix is y-up, not y-down, so a flip is | |
| 14013 // needed. | |
| 14014 GLfloat transform_matrix[16]; | |
| 14015 image->GetFlippedTextureMatrix(transform_matrix); | |
| 14016 copy_texture_CHROMIUM_->DoCopySubTextureWithTransform( | |
| 14017 this, source_target, source_texture->service_id(), | |
| 14018 source_internal_format, dest_target, dest_texture->service_id(), | |
| 14019 dest_internal_format, xoffset, yoffset, x, y, width, height, | |
| 14020 dest_width, dest_height, source_width, source_height, | |
| 14021 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE, | |
| 14022 unpack_unmultiply_alpha == GL_TRUE, transform_matrix); | |
| 14023 return; | |
| 14024 } | |
| 14025 } | |
| 14012 copy_texture_CHROMIUM_->DoCopySubTexture( | 14026 copy_texture_CHROMIUM_->DoCopySubTexture( |
| 14013 this, source_target, source_texture->service_id(), source_internal_format, | 14027 this, source_target, source_texture->service_id(), source_internal_format, |
| 14014 dest_target, dest_texture->service_id(), dest_internal_format, | 14028 dest_target, dest_texture->service_id(), dest_internal_format, xoffset, |
| 14015 xoffset, yoffset, x, y, width, height, dest_width, dest_height, | 14029 yoffset, x, y, width, height, dest_width, dest_height, source_width, |
| 14016 source_width, source_height, | 14030 source_height, unpack_flip_y == GL_TRUE, |
| 14017 unpack_flip_y == GL_TRUE, | 14031 unpack_premultiply_alpha == GL_TRUE, unpack_unmultiply_alpha == GL_TRUE); |
| 14018 unpack_premultiply_alpha == GL_TRUE, | |
| 14019 unpack_unmultiply_alpha == GL_TRUE); | |
| 14020 } | 14032 } |
| 14021 | 14033 |
| 14022 void GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM(GLuint source_id, | 14034 void GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM(GLuint source_id, |
| 14023 GLuint dest_id) { | 14035 GLuint dest_id) { |
| 14024 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM"); | 14036 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM"); |
| 14025 | 14037 |
| 14026 TextureRef* source_texture_ref = GetTexture(source_id); | 14038 TextureRef* source_texture_ref = GetTexture(source_id); |
| 14027 TextureRef* dest_texture_ref = GetTexture(dest_id); | 14039 TextureRef* dest_texture_ref = GetTexture(dest_id); |
| 14028 | 14040 |
| 14029 if (!source_texture_ref || !dest_texture_ref) { | 14041 if (!source_texture_ref || !dest_texture_ref) { |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 14170 if (error != GL_NO_ERROR) { | 14182 if (error != GL_NO_ERROR) { |
| 14171 RestoreCurrentTextureBindings(&state_, dest_texture->target()); | 14183 RestoreCurrentTextureBindings(&state_, dest_texture->target()); |
| 14172 return; | 14184 return; |
| 14173 } | 14185 } |
| 14174 | 14186 |
| 14175 texture_manager()->SetLevelInfo( | 14187 texture_manager()->SetLevelInfo( |
| 14176 dest_texture_ref, dest_texture->target(), 0, GL_RGBA, source_width, | 14188 dest_texture_ref, dest_texture->target(), 0, GL_RGBA, source_width, |
| 14177 source_height, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 14189 source_height, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 14178 gfx::Rect(source_width, source_height)); | 14190 gfx::Rect(source_width, source_height)); |
| 14179 | 14191 |
| 14180 // GL_TEXTURE_EXTERNAL_OES texture requires apply a transform matrix | 14192 copy_texture_CHROMIUM_->DoCopyTexture( |
| 14181 // before presenting. | 14193 this, source_texture->target(), source_texture->service_id(), |
| 14182 if (source_texture->target() == GL_TEXTURE_EXTERNAL_OES) { | 14194 source_internal_format, dest_texture->target(), |
| 14183 // TODO(hkuang): get the StreamTexture transform matrix in GPU process | 14195 dest_texture->service_id(), GL_RGBA, source_width, source_height, false, |
| 14184 // instead of using kIdentityMatrix crbug.com/226218. | 14196 false, false); |
| 14185 copy_texture_CHROMIUM_->DoCopyTextureWithTransform( | |
| 14186 this, source_texture->target(), source_texture->service_id(), | |
| 14187 dest_texture->target(), dest_texture->service_id(), source_width, | |
| 14188 source_height, false, false, false, kIdentityMatrix); | |
| 14189 } else { | |
| 14190 copy_texture_CHROMIUM_->DoCopyTexture( | |
| 14191 this, source_texture->target(), source_texture->service_id(), | |
| 14192 source_internal_format, dest_texture->target(), | |
| 14193 dest_texture->service_id(), GL_RGBA, source_width, source_height, false, | |
| 14194 false, false); | |
| 14195 } | |
| 14196 } | 14197 } |
| 14197 | 14198 |
| 14198 void GLES2DecoderImpl::DoTexStorage2DEXT( | 14199 void GLES2DecoderImpl::DoTexStorage2DEXT( |
| 14199 GLenum target, | 14200 GLenum target, |
| 14200 GLint levels, | 14201 GLint levels, |
| 14201 GLenum internal_format, | 14202 GLenum internal_format, |
| 14202 GLsizei width, | 14203 GLsizei width, |
| 14203 GLsizei height) { | 14204 GLsizei height) { |
| 14204 TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoTexStorage2DEXT", | 14205 TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoTexStorage2DEXT", |
| 14205 "width", width, "height", height); | 14206 "width", width, "height", height); |
| (...skipping 2045 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 16251 } | 16252 } |
| 16252 | 16253 |
| 16253 // Include the auto-generated part of this file. We split this because it means | 16254 // Include the auto-generated part of this file. We split this because it means |
| 16254 // we can easily edit the non-auto generated parts right here in this file | 16255 // we can easily edit the non-auto generated parts right here in this file |
| 16255 // instead of having to edit some template or the code generator. | 16256 // instead of having to edit some template or the code generator. |
| 16256 #include "base/macros.h" | 16257 #include "base/macros.h" |
| 16257 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 16258 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
| 16258 | 16259 |
| 16259 } // namespace gles2 | 16260 } // namespace gles2 |
| 16260 } // namespace gpu | 16261 } // namespace gpu |
| OLD | NEW |