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

Author: Ilia Mirkin <[email protected]>
Date:   Thu Nov 24 18:02:31 2016 -0500

swr: [rasterizer jit] use signed integer representation for logic op

Instead of (incorrectly) biasing the snorm value to make it look like a
unorm, just use signed integer math.

This fixes arb_color_buffer_float-render GL_RGBA8_SNORM

Signed-off-by: Ilia Mirkin <[email protected]>
Reviewed-by: Tim Rowley <[email protected]>

---

 src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp 
b/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp
index ad809c4..2fd011f 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp
@@ -692,9 +692,13 @@ struct BlendJit : public Builder
                     dst[i] = BITCAST(dst[i], mSimdInt32Ty);
                     break;
                 case SWR_TYPE_SNORM:
-                    src[i] = FADD(src[i], VIMMED1(0.5f));
-                    dst[i] = FADD(dst[i], VIMMED1(0.5f));
-                    /* fallthrough */
+                    src[i] = FP_TO_SI(
+                        FMUL(src[i], VIMMED1(scale[i])),
+                        mSimdInt32Ty);
+                    dst[i] = FP_TO_SI(
+                        FMUL(dst[i], VIMMED1(scale[i])),
+                        mSimdInt32Ty);
+                    break;
                 case SWR_TYPE_UNORM:
                     src[i] = FP_TO_UI(
                         FMUL(src[i], VIMMED1(scale[i])),
@@ -728,11 +732,14 @@ struct BlendJit : public Builder
                     result[i] = BITCAST(result[i], mSimdFP32Ty);
                     break;
                 case SWR_TYPE_SNORM:
+                    result[i] = SHL(result[i], C(32 - info.bpc[i]));
+                    result[i] = ASHR(result[i], C(32 - info.bpc[i]));
+                    result[i] = FMUL(SI_TO_FP(result[i], mSimdFP32Ty),
+                                     VIMMED1(1.0f / scale[i]));
+                    break;
                 case SWR_TYPE_UNORM:
                     result[i] = FMUL(UI_TO_FP(result[i], mSimdFP32Ty),
                                      VIMMED1(1.0f / scale[i]));
-                    if (info.type[i] == SWR_TYPE_SNORM)
-                        result[i] = FADD(result[i], VIMMED1(-0.5f));
                     break;
                 }
 

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to