summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2016-05-04 15:52:50 -0700
committerJason Ekstrand <[email protected]>2016-05-10 15:31:50 -0700
commit4f4f393bf303887e1dbedf495780f41f6a313a92 (patch)
treed1253ba591f4f248b581d5557fb82912a43beff7 /src
parent203c786a73847fb07d805c4cc799b7c7d028695c (diff)
meta/blit: Don't blend integer values during MSAA resolves
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/common/meta_blit.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c
index 6761238b014..20d321579d5 100644
--- a/src/mesa/drivers/common/meta_blit.c
+++ b/src/mesa/drivers/common/meta_blit.c
@@ -458,8 +458,17 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
int step;
if (src_datatype == GL_INT || src_datatype == GL_UNSIGNED_INT) {
- merge_function =
- "gvec4 merge(gvec4 a, gvec4 b) { return (a >> gvec4(1)) + (b >> gvec4(1)) + (a & b & gvec4(1)); }\n";
+ /* From the OpenGL ES 3.2 spec section 16.2.1:
+ *
+ * "If the source formats are integer types or stencil values,
+ * a single sample's value is selected for each pixel."
+ *
+ * The OpenGL 4.4 spec contains exactly the same language.
+ *
+ * We can accomplish this by making the merge function return just
+ * one of the two samples. The compiler should do the rest.
+ */
+ merge_function = "gvec4 merge(gvec4 a, gvec4 b) { return a; }\n";
} else {
/* The divide will happen at the end for floats. */
merge_function =