[Mesa-dev] [PATCH 08/14] swr: [rasterizer core/jitter] fix alpha test bug
Ilia Mirkin
imirkin at alum.mit.edu
Mon Nov 14 18:05:41 UTC 2016
It seems like this still doesn't quite fix things - have a look at
fbo-mrt-alphatest in piglit. I had assumed this change would do the
trick, but no such luck.
On Wed, Nov 9, 2016 at 10:18 PM, Tim Rowley <timothy.o.rowley at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list