<p dir="ltr">I think a second instance of the blend func being called was missed in backend.h (the avx512 one). Also iirc there was so.e third place where it was called... Should grep for pfnBlendFunc and see if any other instances pop up.</p>
<div class="gmail_extra"><br><div class="gmail_quote">On Nov 9, 2016 10:19 PM, "Tim Rowley" <<a href="mailto:timothy.o.rowley@intel.com">timothy.o.rowley@intel.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Alpha from render target 0 should always be used for alpha test for all<br>
render targets, according to GL and DX9 specs. Previously we were using<br>
alpha from the current render target.<br>
---<br>
 src/gallium/drivers/swr/<wbr>rasterizer/core/backend.h       |  1 +<br>
 src/gallium/drivers/swr/<wbr>rasterizer/core/state.h         |  6 +++++-<br>
 src/gallium/drivers/swr/<wbr>rasterizer/jitter/blend_jit.<wbr>cpp | 10 ++++++++--<br>
 3 files changed, 14 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/src/gallium/drivers/swr/<wbr>rasterizer/core/backend.h b/src/gallium/drivers/swr/<wbr>rasterizer/core/backend.h<br>
index dc0be90..a7018e0 100644<br>
--- a/src/gallium/drivers/swr/<wbr>rasterizer/core/backend.h<br>
+++ b/src/gallium/drivers/swr/<wbr>rasterizer/core/backend.h<br>
@@ -714,6 +714,7 @@ INLINE void OutputMerger(SWR_PS_CONTEXT &psContext, uint8_t* (&pColorBase)[SWR_N<br>
                 pBlendState,<br>
                 psContext.shaded[rt],<br>
                 psContext.shaded[1],<br>
+                psContext.shaded[0].w,<br>
                 sample,<br>
                 pColorSample,<br>
                 blendOut,<br>
diff --git a/src/gallium/drivers/swr/<wbr>rasterizer/core/state.h b/src/gallium/drivers/swr/<wbr>rasterizer/core/state.h<br>
index 5ee12e8..24927cd 100644<br>
--- a/src/gallium/drivers/swr/<wbr>rasterizer/core/state.h<br>
+++ b/src/gallium/drivers/swr/<wbr>rasterizer/core/state.h<br>
@@ -805,9 +805,13 @@ typedef void(__cdecl *PFN_CS_FUNC)(HANDLE hPrivateData, SWR_CS_CONTEXT* pCsConte<br>
 typedef void(__cdecl *PFN_SO_FUNC)(SWR_STREAMOUT_<wbr>CONTEXT& soContext);<br>
 typedef void(__cdecl *PFN_PIXEL_KERNEL)(HANDLE hPrivateData, SWR_PS_CONTEXT *pContext);<br>
 typedef void(__cdecl *PFN_CPIXEL_KERNEL)(HANDLE hPrivateData, SWR_PS_CONTEXT *pContext);<br>
-typedef void(__cdecl *PFN_BLEND_JIT_FUNC)(const SWR_BLEND_STATE*, simdvector&, simdvector&, uint32_t, uint8_t*, simdvector&, simdscalari*, simdscalari*);<br>
+typedef void(__cdecl *PFN_BLEND_JIT_FUNC)(const SWR_BLEND_STATE*,<br>
+    simdvector& vSrc, simdvector& vSrc1, simdscalar& vSrc0Alpha, uint32_t sample,<br>
+    uint8_t* pDst, simdvector& vResult, simdscalari* vOMask, simdscalari* vCoverageMask);<br>
 typedef simdscalar(*PFN_QUANTIZE_<wbr>DEPTH)(simdscalar);<br>
<br>
+<br>
+<br>
 //////////////////////////////<wbr>//////////////////////////////<wbr>//////////////<br>
 /// FRONTEND_STATE<br>
 //////////////////////////////<wbr>//////////////////////////////<wbr>/////////////<br>
diff --git a/src/gallium/drivers/swr/<wbr>rasterizer/jitter/blend_jit.<wbr>cpp b/src/gallium/drivers/swr/<wbr>rasterizer/jitter/blend_jit.<wbr>cpp<br>
index d69d503..43e3d36 100644<br>
--- a/src/gallium/drivers/swr/<wbr>rasterizer/jitter/blend_jit.<wbr>cpp<br>
+++ b/src/gallium/drivers/swr/<wbr>rasterizer/jitter/blend_jit.<wbr>cpp<br>
@@ -443,10 +443,13 @@ struct BlendJit : public Builder<br>
         }<br>
     }<br>
<br>
-    void AlphaTest(const BLEND_COMPILE_STATE& state, Value* pBlendState, Value* pAlpha, Value* ppMask)<br>
+    void AlphaTest(const BLEND_COMPILE_STATE& state, Value* pBlendState, Value* ppAlpha, Value* ppMask)<br>
     {<br>
         // load uint32_t reference<br>
         Value* pRef = VBROADCAST(LOAD(pBlendState, { 0, SWR_BLEND_STATE_<wbr>alphaTestReference }));<br>
+<br>
+        // load alpha<br>
+        Value* pAlpha = LOAD(ppAlpha);<br>
<br>
         Value* pTest = nullptr;<br>
         if (state.alphaTestFormat == ALPHA_TEST_UNORM8)<br>
@@ -523,6 +526,7 @@ struct BlendJit : public Builder<br>
             PointerType::get(Gen_SWR_<wbr>BLEND_STATE(JM()), 0), // SWR_BLEND_STATE*<br>
             PointerType::get(mSimdFP32Ty, 0),               // simdvector& src<br>
             PointerType::get(mSimdFP32Ty, 0),               // simdvector& src1<br>
+            PointerType::get(mSimdFP32Ty, 0),               // src0alpha<br>
             Type::getInt32Ty(JM()-><wbr>mContext),               // sampleNum<br>
             PointerType::get(mSimdFP32Ty, 0),               // uint8_t* pDst<br>
             PointerType::get(mSimdFP32Ty, 0),               // simdvector& result<br>
@@ -545,6 +549,8 @@ struct BlendJit : public Builder<br>
         pSrc->setName("src");<br>
         Value* pSrc1 = &*argitr++;<br>
         pSrc1->setName("src1");<br>
+        Value* pSrc0Alpha = &*argitr++;<br>
+        pSrc0Alpha->setName("<wbr>src0alpha");<br>
         Value* sampleNum = &*argitr++;<br>
         sampleNum->setName("sampleNum"<wbr>);<br>
         Value* pDst = &*argitr++;<br>
@@ -588,7 +594,7 @@ struct BlendJit : public Builder<br>
         // alpha test<br>
         if (state.desc.alphaTestEnable)<br>
         {<br>
-            AlphaTest(state, pBlendState, src[3], ppMask);<br>
+            AlphaTest(state, pBlendState, pSrc0Alpha, ppMask);<br>
         }<br>
<br>
         // color blend<br>
--<br>
2.7.4<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</blockquote></div></div>