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

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

Issue 2460973002: gpu, cmaa: reuse CopyTextureCHROMIUMResourceManager (Closed)
Patch Set: Created 4 years, 2 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_apply_framebuffer_attachment_cmaa_intel.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_apply_framebuffer_attachment_cmaa_intel.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa_intel.cc b/gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa_intel.cc
index 6f411353803a30ed09f163944d7355ab204c54ae..4e53cc8d0c338aac0bce2e3d24d62d865ea47421 100644
--- a/gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa_intel.cc
+++ b/gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa_intel.cc
@@ -185,6 +185,8 @@ void ApplyFramebufferAttachmentCMAAINTELResourceManager::Initialize(
process_and_apply_shader_result_rgba_texture_slot1_ = glGetUniformLocation(
process_and_apply_shader_, "g_resultRGBATextureSlot1");
+ copy_to_framebuffer_shader_ = CreateProgram("", vert_str_, copy_frag_str_);
+
initialized_ = true;
}
@@ -194,6 +196,7 @@ void ApplyFramebufferAttachmentCMAAINTELResourceManager::Destroy() {
ReleaseTextures();
+ glDeleteProgram(copy_to_framebuffer_shader_);
glDeleteProgram(process_and_apply_shader_);
glDeleteProgram(edges_combine_shader_);
glDeleteProgram(edges1_shader_);
@@ -245,16 +248,11 @@ void ApplyFramebufferAttachmentCMAAINTELResourceManager::
// CMAA Effect
if (do_copy) {
ApplyCMAAEffectTexture(source_texture, rgba8_texture_, do_copy);
+ CopyTexture(rgba8_texture_, source_texture);
} else {
ApplyCMAAEffectTexture(source_texture, source_texture, do_copy);
}
- // Copy rgba8_texture_ to source_texture
- if (do_copy) {
- // copy_framebuffer_ always binds rgba8_texture_
- glBindFramebufferEXT(GL_FRAMEBUFFER, copy_framebuffer_);
- CopyTexture(source_texture);
- }
decoder->RestoreTextureState(source_texture);
}
}
@@ -551,15 +549,42 @@ void ApplyFramebufferAttachmentCMAAINTELResourceManager::ReleaseTextures() {
}
void ApplyFramebufferAttachmentCMAAINTELResourceManager::CopyTexture(
piman 2016/10/28 21:51:12 We already have a facility to copy a texture using
+ GLint source,
GLint dest) {
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, dest);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ // glDrawArrays is faster than glCopyTexSubImage2D on IA Mesa driver,
+ // although opposite in Android. Currently, only IA ChromeOS uses this code.
+ const bool draw = true;
dshwang 2016/10/28 18:13:24 Mesa may will fix it or future Intel Chromebook ma
+ if (draw) {
+ glBindFramebufferEXT(GL_FRAMEBUFFER, copy_framebuffer_);
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D, dest, 0);
+ glViewport(0, 0, width_, height_);
- glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, width_, height_);
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, source);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_STENCIL_TEST);
+ glDisable(GL_CULL_FACE);
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ glDepthMask(GL_FALSE);
+ glDisable(GL_BLEND);
+ glUseProgram(copy_to_framebuffer_shader_);
+
+ glDrawArrays(GL_TRIANGLES, 0, 3);
+ glUseProgram(0);
+ glBindTexture(GL_TEXTURE_2D, 0);
+ } else {
+ // copy_framebuffer_ always binds rgba8_texture_
+ glBindFramebufferEXT(GL_FRAMEBUFFER, copy_framebuffer_);
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, dest);
+ glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, width_, height_);
+ }
}
GLuint ApplyFramebufferAttachmentCMAAINTELResourceManager::CreateProgram(
@@ -1861,6 +1886,19 @@ const char ApplyFramebufferAttachmentCMAAINTELResourceManager::cmaa_frag_s2_[] =
\n#endif\n
}
);
+
+const char
+ ApplyFramebufferAttachmentCMAAINTELResourceManager::copy_frag_str_[] =
+ SHADER(
+ precision highp float;
+ layout(binding = 0) uniform highp sampler2D inTexture;
+ layout(location = 0) out vec4 outColor;
+ void main() {
+ ivec2 screenPosI = ivec2( gl_FragCoord.xy );
+ vec4 pixel = texelFetch(inTexture, screenPosI, 0);
+ outColor = pixel;
+ }
+ );
/* clang-format on */
} // namespace gles2
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa_intel.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698