[Mesa-dev] [PATCH 08/14] swr: [rasterizer core/jitter] fix alpha test bug
Ilia Mirkin
imirkin at alum.mit.edu
Thu Nov 10 13:43:20 UTC 2016
Right you are - I must have imagined the third place.
On Thu, Nov 10, 2016 at 1:06 AM, Rowley, Timothy O
<timothy.o.rowley at intel.com> wrote:
> 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 <imirkin at 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.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