Ah, yes, this patch missed the 8x2 tile path - I’ve fixed that now.  I don’t 
see another path to using the blend jit functions.

Thanks.

On Nov 9, 2016, at 10:44 PM, Ilia Mirkin 
<imir...@alum.mit.edu<mailto:imir...@alum.mit.edu>> wrote:


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.

On Nov 9, 2016 10:19 PM, "Tim Rowley" 
<timothy.o.row...@intel.com<mailto:timothy.o.row...@intel.com>> wrote:
Alpha from render target 0 should always be used for alpha test for all
render targets, according to GL and DX9 specs. Previously we were using
alpha from the current render target.
---
 src/gallium/drivers/swr/rasterizer/core/backend.h       |  1 +
 src/gallium/drivers/swr/rasterizer/core/state.h         |  6 +++++-
 src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp | 10 ++++++++--
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/swr/rasterizer/core/backend.h 
b/src/gallium/drivers/swr/rasterizer/core/backend.h
index dc0be90..a7018e0 100644
--- a/src/gallium/drivers/swr/rasterizer/core/backend.h
+++ b/src/gallium/drivers/swr/rasterizer/core/backend.h
@@ -714,6 +714,7 @@ INLINE void OutputMerger(SWR_PS_CONTEXT &psContext, 
uint8_t* (&pColorBase)[SWR_N
                 pBlendState,
                 psContext.shaded[rt],
                 psContext.shaded[1],
+                psContext.shaded[0].w,
                 sample,
                 pColorSample,
                 blendOut,
diff --git a/src/gallium/drivers/swr/rasterizer/core/state.h 
b/src/gallium/drivers/swr/rasterizer/core/state.h
index 5ee12e8..24927cd 100644
--- a/src/gallium/drivers/swr/rasterizer/core/state.h
+++ b/src/gallium/drivers/swr/rasterizer/core/state.h
@@ -805,9 +805,13 @@ typedef void(__cdecl *PFN_CS_FUNC)(HANDLE hPrivateData, 
SWR_CS_CONTEXT* pCsConte
 typedef void(__cdecl *PFN_SO_FUNC)(SWR_STREAMOUT_CONTEXT& soContext);
 typedef void(__cdecl *PFN_PIXEL_KERNEL)(HANDLE hPrivateData, SWR_PS_CONTEXT 
*pContext);
 typedef void(__cdecl *PFN_CPIXEL_KERNEL)(HANDLE hPrivateData, SWR_PS_CONTEXT 
*pContext);
-typedef void(__cdecl *PFN_BLEND_JIT_FUNC)(const SWR_BLEND_STATE*, simdvector&, 
simdvector&, uint32_t, uint8_t*, simdvector&, simdscalari*, simdscalari*);
+typedef void(__cdecl *PFN_BLEND_JIT_FUNC)(const SWR_BLEND_STATE*,
+    simdvector& vSrc, simdvector& vSrc1, simdscalar& vSrc0Alpha, uint32_t 
sample,
+    uint8_t* pDst, simdvector& vResult, simdscalari* vOMask, simdscalari* 
vCoverageMask);
 typedef simdscalar(*PFN_QUANTIZE_DEPTH)(simdscalar);

+
+
 //////////////////////////////////////////////////////////////////////////
 /// FRONTEND_STATE
 /////////////////////////////////////////////////////////////////////////
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp 
b/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp
index d69d503..43e3d36 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp
@@ -443,10 +443,13 @@ struct BlendJit : public Builder
         }
     }

-    void AlphaTest(const BLEND_COMPILE_STATE& state, Value* pBlendState, 
Value* pAlpha, Value* ppMask)
+    void AlphaTest(const BLEND_COMPILE_STATE& state, Value* pBlendState, 
Value* ppAlpha, Value* ppMask)
     {
         // load uint32_t reference
         Value* pRef = VBROADCAST(LOAD(pBlendState, { 0, 
SWR_BLEND_STATE_alphaTestReference }));
+
+        // load alpha
+        Value* pAlpha = LOAD(ppAlpha);

         Value* pTest = nullptr;
         if (state.alphaTestFormat == ALPHA_TEST_UNORM8)
@@ -523,6 +526,7 @@ struct BlendJit : public Builder
             PointerType::get(Gen_SWR_BLEND_STATE(JM()), 0), // SWR_BLEND_STATE*
             PointerType::get(mSimdFP32Ty, 0),               // simdvector& src
             PointerType::get(mSimdFP32Ty, 0),               // simdvector& src1
+            PointerType::get(mSimdFP32Ty, 0),               // src0alpha
             Type::getInt32Ty(JM()->mContext),               // sampleNum
             PointerType::get(mSimdFP32Ty, 0),               // uint8_t* pDst
             PointerType::get(mSimdFP32Ty, 0),               // simdvector& 
result
@@ -545,6 +549,8 @@ struct BlendJit : public Builder
         pSrc->setName("src");
         Value* pSrc1 = &*argitr++;
         pSrc1->setName("src1");
+        Value* pSrc0Alpha = &*argitr++;
+        pSrc0Alpha->setName("src0alpha");
         Value* sampleNum = &*argitr++;
         sampleNum->setName("sampleNum");
         Value* pDst = &*argitr++;
@@ -588,7 +594,7 @@ struct BlendJit : public Builder
         // alpha test
         if (state.desc.alphaTestEnable)
         {
-            AlphaTest(state, pBlendState, src[3], ppMask);
+            AlphaTest(state, pBlendState, pSrc0Alpha, ppMask);
         }

         // color blend
--
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org<mailto:mesa-dev@lists.freedesktop.org>
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to