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

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 2639973002: Add target argument to Copy{Sub}TextureCHROMIUM entry point (Closed)
Patch Set: use dest_target instead of target Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698