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

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

Issue 1144103006: gpu: Avoid scissor test for glCopyTextureCHROMIUM if possible. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc b/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
index 974cbd7d8e0c7d85dd99dff0049b04019ec007e2..00f510db2832f23462cd1217cb7763a4477f778c 100644
--- a/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
+++ b/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
@@ -429,11 +429,10 @@ void CopyTextureCHROMIUMResourceManager::DoCopySubTexture(
return;
}
- DoCopyTextureInternal(decoder, source_target, source_id, dest_id, xoffset - x,
- yoffset - y, dest_width, dest_height, source_width,
- source_height, flip_y, premultiply_alpha,
- unpremultiply_alpha, kIdentityMatrix, xoffset, yoffset,
- width, height);
+ DoCopyTextureInternal(decoder, source_target, source_id, dest_id, xoffset,
+ yoffset, x, y, width, height, dest_width, dest_height,
+ source_width, source_height, flip_y, premultiply_alpha,
+ unpremultiply_alpha, kIdentityMatrix);
}
void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
@@ -449,10 +448,10 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
const GLfloat transform_matrix[16]) {
GLsizei dest_width = width;
GLsizei dest_height = height;
- DoCopyTextureInternal(decoder, source_target, source_id, dest_id, 0, 0,
- dest_width, dest_height, width, height, flip_y,
- premultiply_alpha, unpremultiply_alpha,
- transform_matrix, 0, 0, dest_width, dest_height);
+ DoCopyTextureInternal(decoder, source_target, source_id, dest_id, 0, 0, 0, 0,
+ width, height, dest_width, dest_height, width, height,
+ flip_y, premultiply_alpha, unpremultiply_alpha,
+ transform_matrix);
}
void CopyTextureCHROMIUMResourceManager::DoCopyTextureInternal(
@@ -462,6 +461,10 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureInternal(
GLuint dest_id,
GLint xoffset,
GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
GLsizei dest_width,
GLsizei dest_height,
GLsizei source_width,
@@ -469,11 +472,7 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureInternal(
bool flip_y,
bool premultiply_alpha,
bool unpremultiply_alpha,
- const GLfloat transform_matrix[16],
- GLint scissor_x,
- GLint scissor_y,
- GLsizei scissor_width,
- GLsizei scissor_height) {
+ const GLfloat transform_matrix[16]) {
DCHECK(source_target == GL_TEXTURE_2D ||
source_target == GL_TEXTURE_RECTANGLE_ARB ||
source_target == GL_TEXTURE_EXTERNAL_OES);
@@ -522,18 +521,21 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureInternal(
}
glUseProgram(info->program);
- if (!xoffset && !yoffset) {
+ GLint x_translate = xoffset - x;
+ GLint y_translate = yoffset - y;
+ if (!x_translate && !y_translate) {
glUniformMatrix4fv(info->matrix_handle, 1, GL_FALSE, transform_matrix);
} else {
// transform offsets from ([0, dest_width], [0, dest_height]) coord.
// to ([-1, 1], [-1, 1]) coord.
- GLfloat xoffset_on_vertex = ((2.f * xoffset) / dest_width);
- GLfloat yoffset_on_vertex = ((2.f * yoffset) / dest_height);
+ GLfloat x_translate_on_vertex = ((2.f * x_translate) / dest_width);
+ GLfloat y_translate_on_vertex = ((2.f * y_translate) / dest_height);
// Pass view_matrix * offset_matrix to the program.
GLfloat view_transform[16];
memcpy(view_transform, transform_matrix, 16 * sizeof(GLfloat));
- PreTranslate(view_transform, xoffset_on_vertex, yoffset_on_vertex, 0);
+ PreTranslate(view_transform, x_translate_on_vertex, y_translate_on_vertex,
+ 0);
glUniformMatrix4fv(info->matrix_handle, 1, GL_FALSE, view_transform);
}
if (source_target == GL_TEXTURE_RECTANGLE_ARB)
@@ -575,8 +577,12 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureInternal(
glDepthMask(GL_FALSE);
glDisable(GL_BLEND);
- glEnable(GL_SCISSOR_TEST);
- glScissor(scissor_x, scissor_y, scissor_width, scissor_height);
+ bool need_scissor =
+ xoffset || yoffset || width != dest_width || height != dest_height;
+ if (need_scissor) {
+ glEnable(GL_SCISSOR_TEST);
+ glScissor(xoffset, yoffset, width, height);
+ }
glViewport(0, 0, dest_width, dest_height);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
}
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698