[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