| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| index e9fb769156909867595e4de8ac15bdf2fa3ffb1a..dbe74c8d1ab1e42c27eb3179c213662b6147481c 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| @@ -953,6 +953,7 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
|
|
|
| void DoCopyTextureCHROMIUM(GLuint source_id,
|
| GLint source_level,
|
| + GLenum dest_target,
|
| GLuint dest_id,
|
| GLint dest_level,
|
| GLenum internal_format,
|
| @@ -963,6 +964,7 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
|
|
|
| void DoCopySubTextureCHROMIUM(GLuint source_id,
|
| GLint source_level,
|
| + GLenum dest_target,
|
| GLuint dest_id,
|
| GLint dest_level,
|
| GLint xoffset,
|
| @@ -2019,6 +2021,7 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
|
| GLsizei width, GLsizei height, GLsizei depth, GLenum format,
|
| Texture* texture);
|
| bool ValidateCopyTextureCHROMIUMTextures(const char* function_name,
|
| + GLenum dest_target,
|
| TextureRef* source_texture_ref,
|
| TextureRef* dest_texture_ref);
|
| CopyTextureMethod ValidateCopyTextureCHROMIUMInternalFormats(
|
| @@ -16133,6 +16136,7 @@ bool GLES2DecoderImpl::DoIsSync(GLuint client_id) {
|
|
|
| bool GLES2DecoderImpl::ValidateCopyTextureCHROMIUMTextures(
|
| const char* function_name,
|
| + GLenum dest_target,
|
| TextureRef* source_texture_ref,
|
| TextureRef* dest_texture_ref) {
|
| if (!source_texture_ref || !dest_texture_ref) {
|
| @@ -16148,8 +16152,15 @@ bool GLES2DecoderImpl::ValidateCopyTextureCHROMIUMTextures(
|
| return false;
|
| }
|
|
|
| + if (dest_texture->target() !=
|
| + GLES2Util::GLFaceTargetToTextureTarget(dest_target)) {
|
| + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name,
|
| + "target should be aligned with dest target");
|
| + return false;
|
| + }
|
| switch (dest_texture->target()) {
|
| case GL_TEXTURE_2D:
|
| + case GL_TEXTURE_CUBE_MAP:
|
| case GL_TEXTURE_RECTANGLE_ARB:
|
| break;
|
| default:
|
| @@ -16334,6 +16345,7 @@ bool GLES2DecoderImpl::ValidateCompressedCopyTextureCHROMIUM(
|
| void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| GLuint source_id,
|
| GLint source_level,
|
| + GLenum dest_target,
|
| GLuint dest_id,
|
| GLint dest_level,
|
| GLenum internal_format,
|
| @@ -16347,8 +16359,8 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| TextureRef* source_texture_ref = GetTexture(source_id);
|
| TextureRef* dest_texture_ref = GetTexture(dest_id);
|
|
|
| - if (!ValidateCopyTextureCHROMIUMTextures(kFunctionName, source_texture_ref,
|
| - dest_texture_ref)) {
|
| + if (!ValidateCopyTextureCHROMIUMTextures(
|
| + kFunctionName, dest_target, source_texture_ref, dest_texture_ref)) {
|
| return;
|
| }
|
|
|
| @@ -16362,7 +16374,7 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| Texture* source_texture = source_texture_ref->texture();
|
| Texture* dest_texture = dest_texture_ref->texture();
|
| GLenum source_target = source_texture->target();
|
| - GLenum dest_target = dest_texture->target();
|
| + GLenum dest_binding_target = dest_texture->target();
|
|
|
| GLenum source_type = 0;
|
| GLenum source_internal_format = 0;
|
| @@ -16469,7 +16481,7 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| dest_type_previous != dest_type) {
|
| // Ensure that the glTexImage2D succeeds.
|
| LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(kFunctionName);
|
| - glBindTexture(dest_target, dest_texture->service_id());
|
| + glBindTexture(dest_binding_target, dest_texture->service_id());
|
| glTexImage2D(dest_target, dest_level,
|
| TextureManager::AdjustTexInternalFormat(feature_info_.get(),
|
| internal_format),
|
| @@ -16478,7 +16490,7 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| dest_type, nullptr);
|
| GLenum error = LOCAL_PEEK_GL_ERROR(kFunctionName);
|
| if (error != GL_NO_ERROR) {
|
| - RestoreCurrentTextureBindings(&state_, dest_target);
|
| + RestoreCurrentTextureBindings(&state_, dest_binding_target);
|
| return;
|
| }
|
|
|
| @@ -16498,7 +16510,7 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| // TODO(qiankun.miao@intel.com): Support level > 0 for CopyTexImage.
|
| if (image && dest_level == 0 && !unpack_flip_y &&
|
| !unpack_premultiply_alpha_change) {
|
| - glBindTexture(dest_target, dest_texture->service_id());
|
| + glBindTexture(dest_binding_target, dest_texture->service_id());
|
| if (image->CopyTexImage(dest_target))
|
| return;
|
| }
|
| @@ -16534,6 +16546,7 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
|
| void GLES2DecoderImpl::DoCopySubTextureCHROMIUM(
|
| GLuint source_id,
|
| GLint source_level,
|
| + GLenum dest_target,
|
| GLuint dest_id,
|
| GLint dest_level,
|
| GLint xoffset,
|
| @@ -16551,8 +16564,8 @@ void GLES2DecoderImpl::DoCopySubTextureCHROMIUM(
|
| TextureRef* source_texture_ref = GetTexture(source_id);
|
| TextureRef* dest_texture_ref = GetTexture(dest_id);
|
|
|
| - if (!ValidateCopyTextureCHROMIUMTextures(kFunctionName, source_texture_ref,
|
| - dest_texture_ref)) {
|
| + if (!ValidateCopyTextureCHROMIUMTextures(
|
| + kFunctionName, dest_target, source_texture_ref, dest_texture_ref)) {
|
| return;
|
| }
|
|
|
| @@ -16566,7 +16579,7 @@ void GLES2DecoderImpl::DoCopySubTextureCHROMIUM(
|
| Texture* source_texture = source_texture_ref->texture();
|
| Texture* dest_texture = dest_texture_ref->texture();
|
| GLenum source_target = source_texture->target();
|
| - GLenum dest_target = dest_texture->target();
|
| + GLenum dest_binding_target = dest_texture->target();
|
| int source_width = 0;
|
| int source_height = 0;
|
| gl::GLImage* image =
|
| @@ -16717,8 +16730,8 @@ void GLES2DecoderImpl::DoCopySubTextureCHROMIUM(
|
| // TODO(qiankun.miao@intel.com): Support level > 0 for CopyTexSubImage.
|
| if (image && dest_level == 0 && !unpack_flip_y &&
|
| !unpack_premultiply_alpha_change) {
|
| - ScopedTextureBinder binder(
|
| - &state_, dest_texture->service_id(), dest_target);
|
| + ScopedTextureBinder binder(&state_, dest_texture->service_id(),
|
| + dest_binding_target);
|
| if (image->CopyTexSubImage(dest_target, gfx::Point(xoffset, yoffset),
|
| gfx::Rect(x, y, width, height))) {
|
| return;
|
|
|