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