[Mesa-dev] [PATCH 1/2] i965 gen4-6: Fix off-by-one errors brw_create_constant_surface()

Kenneth Graunke kenneth at whitecape.org
Wed Jan 11 13:05:02 PST 2012


On 01/11/2012 12:06 PM, Paul Berry wrote:
> Commit 9bdc44a52804a64219a0ca1a061b18596863e524 (i965: Replace struct
> with bit shifting for WM pull constant surfaces) accidentally
> introduced off-by-one errors into the calculation of the surface
> width, height, and depth.  This patch restores the correct
> computation.
>
> The reason this wasn't noticed by Piglit tests is that the size of our
> constant surfaces is always less than 2^20, therefore the off-by-one
> error was causing the "depth" field of the surface to be set to all
> 1's.  The hardware interpreted this as an extremely large surface, so
> overflow checking was effectively disabled.
>
> No Piglit regressions on Sandy Bridge.
>
> NOTE: This is a candidate for the 7.11 and 8.0 branches.
> ---
>   src/mesa/drivers/dri/i965/brw_wm_surface_state.c |    6 +++---
>   1 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> index dedf594..b40f5e1 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> @@ -698,10 +698,10 @@ brw_create_constant_surface(struct brw_context *brw,
>
>      surf[1] = bo->offset; /* reloc */
>
> -   surf[2] = (((w&  0x7f) - 1)<<  BRW_SURFACE_WIDTH_SHIFT |
> -	      (((w>>  7)&  0x1fff) - 1)<<  BRW_SURFACE_HEIGHT_SHIFT);
> +   surf[2] = ((w&  0x7f)<<  BRW_SURFACE_WIDTH_SHIFT |
> +	      ((w>>  7)&  0x1fff)<<  BRW_SURFACE_HEIGHT_SHIFT);
>
> -   surf[3] = ((((w>>  20)&  0x7f) - 1)<<  BRW_SURFACE_DEPTH_SHIFT |
> +   surf[3] = (((w>>  20)&  0x7f)<<  BRW_SURFACE_DEPTH_SHIFT |
>   	      (width * 16 - 1)<<  BRW_SURFACE_PITCH_SHIFT);
>
>      surf[4] = 0;

Yeah, from reading the simulator, these -1's are clearly wrong.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>


More information about the mesa-dev mailing list