Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 1275773003: gpu: support GL_TEXTURE_CUBE_MAP destination target to Copy(Sub)TextureCHROMIUM. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix android build Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <stdio.h> 7 #include <stdio.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cmath> 10 #include <cmath>
(...skipping 12040 matching lines...) Expand 10 before | Expand all | Expand 10 after
12051 const char* function_name, 12051 const char* function_name,
12052 GLenum target, 12052 GLenum target,
12053 TextureRef* source_texture_ref, 12053 TextureRef* source_texture_ref,
12054 TextureRef* dest_texture_ref, 12054 TextureRef* dest_texture_ref,
12055 GLenum dest_internal_format) { 12055 GLenum dest_internal_format) {
12056 if (!source_texture_ref || !dest_texture_ref) { 12056 if (!source_texture_ref || !dest_texture_ref) {
12057 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "unknown texture id"); 12057 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "unknown texture id");
12058 return false; 12058 return false;
12059 } 12059 }
12060 12060
12061 if (GL_TEXTURE_2D != target) { 12061 Texture* source_texture = source_texture_ref->texture();
12062 Texture* dest_texture = dest_texture_ref->texture();
12063 if (GL_TEXTURE_2D != target &&
12064 GL_TEXTURE_CUBE_MAP != GLES2Util::GLFaceToTarget(target) &&
piman 2015/08/06 20:43:23 Did you mean || instead of && ? if target == GL_T
dshwang 2015/08/10 08:04:18 Yes, thx for fixing mistake.
12065 dest_texture->target() != target) {
piman 2015/08/06 20:43:23 did you mean dest_texture->target() != GLES2Util::
dshwang 2015/08/10 08:04:18 Yes. oops, double mistake. Done.
12062 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, 12066 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name,
12063 "invalid texture target"); 12067 "invalid texture target");
12064 return false; 12068 return false;
12065 } 12069 }
12066 12070
12067 Texture* source_texture = source_texture_ref->texture();
12068 Texture* dest_texture = dest_texture_ref->texture();
12069 if (source_texture == dest_texture) { 12071 if (source_texture == dest_texture) {
12070 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, 12072 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name,
12071 "source and destination textures are the same"); 12073 "source and destination textures are the same");
12072 return false; 12074 return false;
12073 } 12075 }
12074 12076
12075 if (dest_texture->target() != GL_TEXTURE_2D || 12077 if (source_texture->target() != GL_TEXTURE_2D &&
12076 (source_texture->target() != GL_TEXTURE_2D && 12078 source_texture->target() != GL_TEXTURE_RECTANGLE_ARB &&
12077 source_texture->target() != GL_TEXTURE_RECTANGLE_ARB && 12079 source_texture->target() != GL_TEXTURE_EXTERNAL_OES) {
12078 source_texture->target() != GL_TEXTURE_EXTERNAL_OES)) {
12079 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, 12080 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name,
12080 "invalid texture target binding"); 12081 "invalid texture target binding");
12081 return false; 12082 return false;
12082 } 12083 }
12083 12084
12084 GLenum source_type = 0; 12085 GLenum source_type = 0;
12085 GLenum source_internal_format = 0; 12086 GLenum source_internal_format = 0;
12086 source_texture->GetLevelType(source_texture->target(), 0, &source_type, 12087 source_texture->GetLevelType(source_texture->target(), 0, &source_type,
12087 &source_internal_format); 12088 &source_internal_format);
12088 12089
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
12240 copy_texture_CHROMIUM_->Initialize(this); 12241 copy_texture_CHROMIUM_->Initialize(this);
12241 RestoreCurrentFramebufferBindings(); 12242 RestoreCurrentFramebufferBindings();
12242 if (LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM") != GL_NO_ERROR) 12243 if (LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM") != GL_NO_ERROR)
12243 return; 12244 return;
12244 } 12245 }
12245 12246
12246 GLenum dest_type_previous = dest_type; 12247 GLenum dest_type_previous = dest_type;
12247 GLenum dest_internal_format = internal_format; 12248 GLenum dest_internal_format = internal_format;
12248 int dest_width = 0; 12249 int dest_width = 0;
12249 int dest_height = 0; 12250 int dest_height = 0;
12250 bool dest_level_defined = dest_texture->GetLevelSize( 12251 bool dest_level_defined =
12251 GL_TEXTURE_2D, 0, &dest_width, &dest_height, nullptr); 12252 dest_texture->GetLevelSize(target, 0, &dest_width, &dest_height, nullptr);
12252 12253
12253 if (dest_level_defined) { 12254 if (dest_level_defined) {
12254 dest_texture->GetLevelType(GL_TEXTURE_2D, 0, &dest_type_previous, 12255 dest_texture->GetLevelType(target, 0, &dest_type_previous,
12255 &dest_internal_format); 12256 &dest_internal_format);
12256 } 12257 }
12257 12258
12259 GLenum binding_target = GLES2Util::GLFaceToTarget(target);
piman 2015/08/06 20:43:23 You can use dest_texture->target(), which saves a
dshwang 2015/08/10 08:04:17 Done.
12260
12258 // Resize the destination texture to the dimensions of the source texture. 12261 // Resize the destination texture to the dimensions of the source texture.
12259 if (!dest_level_defined || dest_width != source_width || 12262 if (!dest_level_defined || dest_width != source_width ||
12260 dest_height != source_height || 12263 dest_height != source_height ||
12261 dest_internal_format != internal_format || 12264 dest_internal_format != internal_format ||
12262 dest_type_previous != dest_type) { 12265 dest_type_previous != dest_type) {
12263 // Ensure that the glTexImage2D succeeds. 12266 // Ensure that the glTexImage2D succeeds.
12264 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopyTextureCHROMIUM"); 12267 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopyTextureCHROMIUM");
12265 glBindTexture(GL_TEXTURE_2D, dest_texture->service_id()); 12268 glBindTexture(binding_target, dest_texture->service_id());
12266 glTexImage2D(GL_TEXTURE_2D, 0, internal_format, source_width, source_height, 12269 glTexImage2D(target, 0, internal_format, source_width, source_height, 0,
12267 0, internal_format, dest_type, NULL); 12270 internal_format, dest_type, NULL);
12268 GLenum error = LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM"); 12271 GLenum error = LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM");
12269 if (error != GL_NO_ERROR) { 12272 if (error != GL_NO_ERROR) {
12270 RestoreCurrentTextureBindings(&state_, GL_TEXTURE_2D); 12273 RestoreCurrentTextureBindings(&state_, binding_target);
12271 return; 12274 return;
12272 } 12275 }
12273 12276
12274 texture_manager()->SetLevelInfo( 12277 texture_manager()->SetLevelInfo(
12275 dest_texture_ref, GL_TEXTURE_2D, 0, internal_format, source_width, 12278 dest_texture_ref, target, 0, internal_format, source_width,
12276 source_height, 1, 0, internal_format, dest_type, 12279 source_height, 1, 0, internal_format, dest_type,
12277 gfx::Rect(source_width, source_height)); 12280 gfx::Rect(source_width, source_height));
12278 } else { 12281 } else {
12279 texture_manager()->SetLevelCleared(dest_texture_ref, GL_TEXTURE_2D, 0, 12282 texture_manager()->SetLevelCleared(dest_texture_ref, target, 0, true);
12280 true);
12281 } 12283 }
12282 12284
12283 ScopedModifyPixels modify(dest_texture_ref); 12285 ScopedModifyPixels modify(dest_texture_ref);
12284 12286
12285 // Try using GLImage::CopyTexSubImage when possible. 12287 // Try using GLImage::CopyTexSubImage when possible.
12286 bool unpack_premultiply_alpha_change = 12288 bool unpack_premultiply_alpha_change =
12287 (unpack_premultiply_alpha ^ unpack_unmultiply_alpha) != 0; 12289 (unpack_premultiply_alpha ^ unpack_unmultiply_alpha) != 0;
12288 if (image && !unpack_flip_y && !unpack_premultiply_alpha_change) { 12290 if (image && !unpack_flip_y && !unpack_premultiply_alpha_change) {
12289 glBindTexture(GL_TEXTURE_2D, dest_texture->service_id()); 12291 glBindTexture(binding_target, dest_texture->service_id());
12290 if (image->CopyTexSubImage(GL_TEXTURE_2D, gfx::Point(0, 0), 12292 if (image->CopyTexSubImage(target, gfx::Point(0, 0),
12291 gfx::Rect(0, 0, source_width, source_height))) { 12293 gfx::Rect(0, 0, source_width, source_height))) {
12292 return; 12294 return;
12293 } 12295 }
12294 } 12296 }
12295 12297
12296 DoWillUseTexImageIfNeeded(source_texture, source_texture->target()); 12298 DoWillUseTexImageIfNeeded(source_texture, source_texture->target());
12297 12299
12298 // GL_TEXTURE_EXTERNAL_OES texture requires apply a transform matrix 12300 // GL_TEXTURE_EXTERNAL_OES texture requires apply a transform matrix
12299 // before presenting. 12301 // before presenting.
12300 if (source_texture->target() == GL_TEXTURE_EXTERNAL_OES) { 12302 if (source_texture->target() == GL_TEXTURE_EXTERNAL_OES) {
12301 // TODO(hkuang): get the StreamTexture transform matrix in GPU process 12303 // TODO(hkuang): get the StreamTexture transform matrix in GPU process
12302 // instead of using kIdentityMatrix crbug.com/226218. 12304 // instead of using kIdentityMatrix crbug.com/226218.
12303 copy_texture_CHROMIUM_->DoCopyTextureWithTransform( 12305 copy_texture_CHROMIUM_->DoCopyTextureWithTransform(
12304 this, source_texture->target(), source_texture->service_id(), 12306 this, source_texture->target(), source_texture->service_id(), target,
12305 dest_texture->service_id(), source_width, source_height, 12307 dest_texture->service_id(), source_width, source_height,
12306 unpack_flip_y == GL_TRUE, 12308 unpack_flip_y == GL_TRUE, unpack_premultiply_alpha == GL_TRUE,
12307 unpack_premultiply_alpha == GL_TRUE, 12309 unpack_unmultiply_alpha == GL_TRUE, kIdentityMatrix);
12308 unpack_unmultiply_alpha == GL_TRUE,
12309 kIdentityMatrix);
12310 } else { 12310 } else {
12311 copy_texture_CHROMIUM_->DoCopyTexture( 12311 copy_texture_CHROMIUM_->DoCopyTexture(
12312 this, source_texture->target(), source_texture->service_id(), 12312 this, source_texture->target(), source_texture->service_id(),
12313 source_internal_format, dest_texture->service_id(), internal_format, 12313 source_internal_format, target, dest_texture->service_id(),
12314 source_width, source_height, 12314 internal_format, source_width, source_height, unpack_flip_y == GL_TRUE,
12315 unpack_flip_y == GL_TRUE,
12316 unpack_premultiply_alpha == GL_TRUE, 12315 unpack_premultiply_alpha == GL_TRUE,
12317 unpack_unmultiply_alpha == GL_TRUE); 12316 unpack_unmultiply_alpha == GL_TRUE);
12318 } 12317 }
12319 12318
12320 DoDidUseTexImageIfNeeded(source_texture, source_texture->target()); 12319 DoDidUseTexImageIfNeeded(source_texture, source_texture->target());
12321 } 12320 }
12322 12321
12323 void GLES2DecoderImpl::DoCopySubTextureCHROMIUM( 12322 void GLES2DecoderImpl::DoCopySubTextureCHROMIUM(
12324 GLenum target, 12323 GLenum target,
12325 GLuint source_id, 12324 GLuint source_id,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
12375 &source_internal_format); 12374 &source_internal_format);
12376 if (!source_texture->ValidForTexture(source_texture->target(), 0, x, y, 0, 12375 if (!source_texture->ValidForTexture(source_texture->target(), 0, x, y, 0,
12377 width, height, 1, source_type)) { 12376 width, height, 1, source_type)) {
12378 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM", 12377 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
12379 "source texture bad dimensions."); 12378 "source texture bad dimensions.");
12380 return; 12379 return;
12381 } 12380 }
12382 12381
12383 GLenum dest_type = 0; 12382 GLenum dest_type = 0;
12384 GLenum dest_internal_format = 0; 12383 GLenum dest_internal_format = 0;
12385 bool dest_level_defined = dest_texture->GetLevelType( 12384 bool dest_level_defined =
12386 dest_texture->target(), 0, &dest_type, &dest_internal_format); 12385 dest_texture->GetLevelType(target, 0, &dest_type, &dest_internal_format);
12387 if (!dest_level_defined) { 12386 if (!dest_level_defined) {
12388 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCopySubTextureCHROMIUM", 12387 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCopySubTextureCHROMIUM",
12389 "destination texture is not defined"); 12388 "destination texture is not defined");
12390 return; 12389 return;
12391 } 12390 }
12392 if (!dest_texture->ValidForTexture(dest_texture->target(), 0, xoffset, 12391 if (!dest_texture->ValidForTexture(target, 0, xoffset, yoffset, 0, width,
12393 yoffset, 0, width, height, 1, dest_type)) { 12392 height, 1, dest_type)) {
12394 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM", 12393 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
12395 "destination texture bad dimensions."); 12394 "destination texture bad dimensions.");
12396 return; 12395 return;
12397 } 12396 }
12398 12397
12399 if (!ValidateCopyTextureCHROMIUM("glCopySubTextureCHROMIUM", target, 12398 if (!ValidateCopyTextureCHROMIUM("glCopySubTextureCHROMIUM", target,
12400 source_texture_ref, dest_texture_ref, 12399 source_texture_ref, dest_texture_ref,
12401 dest_internal_format)) { 12400 dest_internal_format)) {
12402 return; 12401 return;
12403 } 12402 }
(...skipping 12 matching lines...) Expand all
12416 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopySubTextureCHROMIUM"); 12415 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopySubTextureCHROMIUM");
12417 copy_texture_CHROMIUM_.reset(new CopyTextureCHROMIUMResourceManager()); 12416 copy_texture_CHROMIUM_.reset(new CopyTextureCHROMIUMResourceManager());
12418 copy_texture_CHROMIUM_->Initialize(this); 12417 copy_texture_CHROMIUM_->Initialize(this);
12419 RestoreCurrentFramebufferBindings(); 12418 RestoreCurrentFramebufferBindings();
12420 if (LOCAL_PEEK_GL_ERROR("glCopySubTextureCHROMIUM") != GL_NO_ERROR) 12419 if (LOCAL_PEEK_GL_ERROR("glCopySubTextureCHROMIUM") != GL_NO_ERROR)
12421 return; 12420 return;
12422 } 12421 }
12423 12422
12424 int dest_width = 0; 12423 int dest_width = 0;
12425 int dest_height = 0; 12424 int dest_height = 0;
12426 bool ok = dest_texture->GetLevelSize( 12425 bool ok =
12427 GL_TEXTURE_2D, 0, &dest_width, &dest_height, nullptr); 12426 dest_texture->GetLevelSize(target, 0, &dest_width, &dest_height, nullptr);
12428 DCHECK(ok); 12427 DCHECK(ok);
12429 if (xoffset != 0 || yoffset != 0 || width != dest_width || 12428 if (xoffset != 0 || yoffset != 0 || width != dest_width ||
12430 height != dest_height) { 12429 height != dest_height) {
12431 gfx::Rect cleared_rect; 12430 gfx::Rect cleared_rect;
12432 if (CombineAdjacentRects(dest_texture->GetLevelClearedRect(target, 0), 12431 if (CombineAdjacentRects(dest_texture->GetLevelClearedRect(target, 0),
12433 gfx::Rect(xoffset, yoffset, width, height), 12432 gfx::Rect(xoffset, yoffset, width, height),
12434 &cleared_rect)) { 12433 &cleared_rect)) {
12435 DCHECK_GE(cleared_rect.size().GetArea(), 12434 DCHECK_GE(cleared_rect.size().GetArea(),
12436 dest_texture->GetLevelClearedRect(target, 0).size().GetArea()); 12435 dest_texture->GetLevelClearedRect(target, 0).size().GetArea());
12437 texture_manager()->SetLevelClearedRect(dest_texture_ref, target, 0, 12436 texture_manager()->SetLevelClearedRect(dest_texture_ref, target, 0,
12438 cleared_rect); 12437 cleared_rect);
12439 } else { 12438 } else {
12440 // Otherwise clear part of texture level that is not already cleared. 12439 // Otherwise clear part of texture level that is not already cleared.
12441 if (!texture_manager()->ClearTextureLevel(this, dest_texture_ref, target, 12440 if (!texture_manager()->ClearTextureLevel(this, dest_texture_ref, target,
12442 0)) { 12441 0)) {
12443 LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, "glCopySubTextureCHROMIUM", 12442 LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, "glCopySubTextureCHROMIUM",
12444 "destination texture dimensions too big"); 12443 "destination texture dimensions too big");
12445 return; 12444 return;
12446 } 12445 }
12447 } 12446 }
12448 } else { 12447 } else {
12449 texture_manager()->SetLevelCleared(dest_texture_ref, GL_TEXTURE_2D, 0, 12448 texture_manager()->SetLevelCleared(dest_texture_ref, target, 0, true);
12450 true);
12451 } 12449 }
12452 12450
12453 ScopedModifyPixels modify(dest_texture_ref); 12451 ScopedModifyPixels modify(dest_texture_ref);
12454 12452
12455 // Try using GLImage::CopyTexSubImage when possible. 12453 // Try using GLImage::CopyTexSubImage when possible.
12456 bool unpack_premultiply_alpha_change = 12454 bool unpack_premultiply_alpha_change =
12457 (unpack_premultiply_alpha ^ unpack_unmultiply_alpha) != 0; 12455 (unpack_premultiply_alpha ^ unpack_unmultiply_alpha) != 0;
12458 if (image && !unpack_flip_y && !unpack_premultiply_alpha_change) { 12456 if (image && !unpack_flip_y && !unpack_premultiply_alpha_change) {
12459 glBindTexture(GL_TEXTURE_2D, dest_texture->service_id()); 12457 GLenum binding_target = GLES2Util::GLFaceToTarget(target);
piman 2015/08/06 20:43:23 you can use dest_texture->target() to save a switc
dshwang 2015/08/10 08:04:18 Done.
12460 if (image->CopyTexSubImage(GL_TEXTURE_2D, gfx::Point(xoffset, yoffset), 12458 glBindTexture(binding_target, dest_texture->service_id());
12459 if (image->CopyTexSubImage(target, gfx::Point(xoffset, yoffset),
12461 gfx::Rect(x, y, width, height))) { 12460 gfx::Rect(x, y, width, height))) {
12462 return; 12461 return;
12463 } 12462 }
12464 } 12463 }
12465 12464
12466 DoWillUseTexImageIfNeeded(source_texture, source_texture->target()); 12465 DoWillUseTexImageIfNeeded(source_texture, source_texture->target());
12467 12466
12468 // TODO(hkuang): get the StreamTexture transform matrix in GPU process. 12467 // TODO(hkuang): get the StreamTexture transform matrix in GPU process.
12469 // crbug.com/226218. 12468 // crbug.com/226218.
12470 copy_texture_CHROMIUM_->DoCopySubTexture( 12469 copy_texture_CHROMIUM_->DoCopySubTexture(
12471 this, source_texture->target(), source_texture->service_id(), 12470 this, source_texture->target(), source_texture->service_id(),
12472 source_internal_format, dest_texture->service_id(), dest_internal_format, 12471 source_internal_format, target, dest_texture->service_id(),
12473 xoffset, yoffset, x, y, width, height, dest_width, dest_height, 12472 dest_internal_format, xoffset, yoffset, x, y, width, height, dest_width,
12474 source_width, source_height, 12473 dest_height, source_width, source_height, unpack_flip_y == GL_TRUE,
12475 unpack_flip_y == GL_TRUE, 12474 unpack_premultiply_alpha == GL_TRUE, unpack_unmultiply_alpha == GL_TRUE);
12476 unpack_premultiply_alpha == GL_TRUE,
12477 unpack_unmultiply_alpha == GL_TRUE);
12478 12475
12479 DoDidUseTexImageIfNeeded(source_texture, source_texture->target()); 12476 DoDidUseTexImageIfNeeded(source_texture, source_texture->target());
12480 } 12477 }
12481 12478
12482 void GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM(GLenum target, 12479 void GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM(GLenum target,
12483 GLuint source_id, 12480 GLuint source_id,
12484 GLuint dest_id) { 12481 GLuint dest_id) {
12485 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM"); 12482 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompressedCopyTextureCHROMIUM");
12486 12483
12487 TextureRef* source_texture_ref = GetTexture(source_id); 12484 TextureRef* source_texture_ref = GetTexture(source_id);
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
12636 source_height, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 12633 source_height, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
12637 gfx::Rect(source_width, source_height)); 12634 gfx::Rect(source_width, source_height));
12638 12635
12639 // GL_TEXTURE_EXTERNAL_OES texture requires apply a transform matrix 12636 // GL_TEXTURE_EXTERNAL_OES texture requires apply a transform matrix
12640 // before presenting. 12637 // before presenting.
12641 if (source_texture->target() == GL_TEXTURE_EXTERNAL_OES) { 12638 if (source_texture->target() == GL_TEXTURE_EXTERNAL_OES) {
12642 // TODO(hkuang): get the StreamTexture transform matrix in GPU process 12639 // TODO(hkuang): get the StreamTexture transform matrix in GPU process
12643 // instead of using kIdentityMatrix crbug.com/226218. 12640 // instead of using kIdentityMatrix crbug.com/226218.
12644 copy_texture_CHROMIUM_->DoCopyTextureWithTransform( 12641 copy_texture_CHROMIUM_->DoCopyTextureWithTransform(
12645 this, source_texture->target(), source_texture->service_id(), 12642 this, source_texture->target(), source_texture->service_id(),
12646 dest_texture->service_id(), source_width, source_height, 12643 GL_TEXTURE_2D, dest_texture->service_id(), source_width, source_height,
12647 false, false, false, kIdentityMatrix); 12644 false, false, false, kIdentityMatrix);
12648 } else { 12645 } else {
12649 copy_texture_CHROMIUM_->DoCopyTexture( 12646 copy_texture_CHROMIUM_->DoCopyTexture(
12650 this, source_texture->target(), source_texture->service_id(), 12647 this, source_texture->target(), source_texture->service_id(),
12651 source_internal_format, dest_texture->service_id(), GL_RGBA, 12648 source_internal_format, GL_TEXTURE_2D, dest_texture->service_id(),
12652 source_width, source_height, false, false, false); 12649 GL_RGBA, source_width, source_height, false, false, false);
12653 } 12650 }
12654 12651
12655 DoDidUseTexImageIfNeeded(source_texture, source_texture->target()); 12652 DoDidUseTexImageIfNeeded(source_texture, source_texture->target());
12656 } 12653 }
12657 12654
12658 static GLenum ExtractTypeFromStorageFormat(GLenum internalformat) { 12655 static GLenum ExtractTypeFromStorageFormat(GLenum internalformat) {
12659 switch (internalformat) { 12656 switch (internalformat) {
12660 case GL_R8: 12657 case GL_R8:
12661 return GL_UNSIGNED_BYTE; 12658 return GL_UNSIGNED_BYTE;
12662 case GL_R8_SNORM: 12659 case GL_R8_SNORM:
(...skipping 1742 matching lines...) Expand 10 before | Expand all | Expand 10 after
14405 return error::kNoError; 14402 return error::kNoError;
14406 } 14403 }
14407 14404
14408 // Include the auto-generated part of this file. We split this because it means 14405 // Include the auto-generated part of this file. We split this because it means
14409 // we can easily edit the non-auto generated parts right here in this file 14406 // we can easily edit the non-auto generated parts right here in this file
14410 // instead of having to edit some template or the code generator. 14407 // instead of having to edit some template or the code generator.
14411 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 14408 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
14412 14409
14413 } // namespace gles2 14410 } // namespace gles2
14414 } // namespace gpu 14411 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698