[Mesa-stable] [Mesa-dev] [PATCH 18.0] swr/rast: Fix index buffer overfetch issue for non-indexed draws

Cherniak, Bruce bruce.cherniak at intel.com
Wed Feb 28 20:55:59 UTC 2018


Reviewed-by: Bruce Cherniak <bruce.cherniak at intel.com> 

> On Feb 28, 2018, at 1:16 PM, George Kyriazis <george.kyriazis at intel.com> wrote:
> 
> Populate pLastIndex, even for the non-indexed case.  An zero pLastIndex
> can cause the index offsets inside the fetcher to have non-sensical values
> that can be either very large positive or very large negative numbers.
> 
> Cherry-pick of 539de78633 for 18.0.  Surrounding context is different for
> 18.0 branch, hence the need for a separate patch.
> 
> cc: "18.0" <mesa-stable at lists.freedesktop.org>
> ---
> src/gallium/drivers/swr/rasterizer/core/frontend.cpp | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
> 
> diff --git a/src/gallium/drivers/swr/rasterizer/core/frontend.cpp b/src/gallium/drivers/swr/rasterizer/core/frontend.cpp
> index 9600f78..ce6cb68 100644
> --- a/src/gallium/drivers/swr/rasterizer/core/frontend.cpp
> +++ b/src/gallium/drivers/swr/rasterizer/core/frontend.cpp
> @@ -1724,6 +1724,21 @@ void ProcessDraw(
> 
>             if (i < endVertex)
>             {
> +                if (!IsIndexedT::value)
> +                {
> +                    fetchInfo_lo.pLastIndex = fetchInfo_lo.pIndices;
> +                    uint32_t offset;
> +                    offset = std::min(endVertex-i, (uint32_t) KNOB_SIMD16_WIDTH);
> +#if USE_SIMD16_SHADERS
> +                    fetchInfo_lo.pLastIndex += offset;
> +#else
> +                    fetchInfo_lo.pLastIndex += std::min(offset, (uint32_t) KNOB_SIMD_WIDTH);
> +                    uint32_t offset2 = std::min(offset, (uint32_t) KNOB_SIMD16_WIDTH)-KNOB_SIMD_WIDTH;
> +                    assert(offset >= 0);
> +                    fetchInfo_hi.pLastIndex = fetchInfo_hi.pIndices;
> +                    fetchInfo_hi.pLastIndex += offset2;
> +#endif
> +                }
>                 // 1. Execute FS/VS for a single SIMD.
>                 AR_BEGIN(FEFetchShader, pDC->drawId);
> #if USE_SIMD16_SHADERS
> -- 
> 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-stable mailing list