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

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

Issue 2109603003: gpu, cmaa: Don't blend large L shape because it would be the intended shape with high probability. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove redundant "if (blurCoeff == 0.0)" Created 4 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 | « no previous file | 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 c71fd744f380244fe7597f43c0b6174fd616d788..2cb329c233335a266711598dd19751992fffcc23 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
@@ -1482,7 +1482,7 @@ const char ApplyFramebufferAttachmentCMAAINTELResourceManager::cmaa_frag_s2_[] =
vec4 edgesFlt = vec4(edges);
float numberOfEdges = dot(edgesFlt, vec4(1, 1, 1, 1));
- if (numberOfEdges < 2.0)
+ if (numberOfEdges <= 1.0)
continue;
float fromRight = edgesFlt.r;
@@ -1507,7 +1507,7 @@ const char ApplyFramebufferAttachmentCMAAINTELResourceManager::cmaa_frag_s2_[] =
// the current pixel's colour in return.
// However, in the case when this is an actual corner, the pixel's
// colour will be partially overwritten by it's 2 neighbours.
- // if( numberOfEdges > 1.0 )
+ if( numberOfEdges == 2.0 )
{
// with value of 0.15, the pixel will retain approx 77% of its
// colour and the remaining 23% will come from its 2 neighbours
@@ -1518,10 +1518,39 @@ const char ApplyFramebufferAttachmentCMAAINTELResourceManager::cmaa_frag_s2_[] =
// parallel edges, don't do anything
blurCoeff *= (1.0 - fromBelow * fromAbove) *
(1.0 - fromRight * fromLeft);
+
+ if (blurCoeff == 0.0)
+ continue;
+
+ uint packedEdgesL = packedEdgesArray[(0 + _x) * 4 + (1 + _y)];
+ uint packedEdgesB = packedEdgesArray[(1 + _x) * 4 + (0 + _y)];
+ uint packedEdgesR = packedEdgesArray[(2 + _x) * 4 + (1 + _y)];
+ uint packedEdgesT = packedEdgesArray[(1 + _x) * 4 + (2 + _y)];
+
+ // Don't blend large L shape because it would be the intended shape
+ // with high probability. e.g. rectangle
+ // large_l1 large_l2 large_l3 large_l4
+ // _ _ | | _ _
+ // X| X| |X |X
+ // | ¯¯¯¯ ¯¯¯¯ |
+ bool large_l1 = (packedEdgesC == (0x01u | 0x02u)) &&
+ bool(packedEdgesL & 0x02u) &&
+ bool(packedEdgesB & 0x01u);
+ bool large_l2 = (packedEdgesC == (0x01u | 0x08u)) &&
+ bool(packedEdgesL & 0x08u) &&
+ bool(packedEdgesT & 0x01u);
+ bool large_l3 = (packedEdgesC == (0x04u | 0x08u)) &&
+ bool(packedEdgesR & 0x08u) &&
+ bool(packedEdgesT & 0x04u);
+ bool large_l4 = (packedEdgesC == (0x02u | 0x04u)) &&
+ bool(packedEdgesR & 0x02u) &&
+ bool(packedEdgesB & 0x04u);
+ if (large_l1 || large_l2 || large_l3 || large_l4)
+ continue;
}
// 2.) U-like shape (surrounded with edges from 3 sides)
- if (numberOfEdges > 2.0) {
+ if (numberOfEdges == 3.0) {
// with value of 0.13, the pixel will retain approx 72% of its
// colour and the remaining 28% will be picked from its 3
// neighbours (which are unlikely to be blurred too but could be)
@@ -1529,19 +1558,14 @@ const char ApplyFramebufferAttachmentCMAAINTELResourceManager::cmaa_frag_s2_[] =
}
// 3.) Completely surrounded with edges from all 4 sides
- if (numberOfEdges > 3.0) {
+ if (numberOfEdges == 4.0) {
// with value of 0.07, the pixel will retain 78% of its colour
// and the remaining 22% will come from its 4 neighbours (which
// are unlikely to be blurred)
blurCoeff = 0.05;
}
- if (blurCoeff == 0.0) {
- // this avoids Z search below as well but that's ok because a Z
- // shape will also always have some blurCoeff
- continue;
- }
-
+ // |blurCoeff| must be not zero at this point.
vec4 blurMap = xFroms * blurCoeff;
vec4 pixelC = texelFetch(g_screenTexture, screenPosI.xy, 0);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698