Mesa (master): swr: only broadcast color0 value, not all color values

Ilia Mirkin imirkin at kemper.freedesktop.org
Wed Nov 23 01:29:34 UTC 2016


Module: Mesa
Branch: master
Commit: 37be598dda8671568fb24105a0cbca7d34cdd2ee
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=37be598dda8671568fb24105a0cbca7d34cdd2ee

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Sun Nov 20 19:08:12 2016 -0500

swr: only broadcast color0 value, not all color values

The way that dual-source blending is described for GLES2 is very odd,
and we end up with a shader that both has this property set *and* has a
color1 value to be used as the second source. While changing the state
tracker is an option, it seems more reliable to verify that the
broadcast is only done on color0.

Fixes arb_blend_func_extended-fbo-extended-blend-pattern_gles2

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Reviewed-by: Tim Rowley <timothy.o.rowley at intel.com>

---

 src/gallium/drivers/swr/swr_shader.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/swr/swr_shader.cpp b/src/gallium/drivers/swr/swr_shader.cpp
index e4f9796..2f72239 100644
--- a/src/gallium/drivers/swr/swr_shader.cpp
+++ b/src/gallium/drivers/swr/swr_shader.cpp
@@ -645,7 +645,8 @@ BuilderSWR::CompileFS(struct swr_context *ctx, swr_jit_fs_key &key)
 
             LLVMValueRef out =
                LLVMBuildLoad(gallivm->builder, outputs[attrib][channel], "");
-            if (swr_fs->info.base.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS]) {
+            if (swr_fs->info.base.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS] &&
+                swr_fs->info.base.output_semantic_index[attrib] == 0) {
                for (uint32_t rt = 0; rt < key.nr_cbufs; rt++) {
                   STORE(unwrap(out),
                         pPS,




More information about the mesa-commit mailing list