[Mesa-dev] [PATCH 1/3] i965: Duplicate less code in GetSamplePositions driver hook.

Chris Forbes chrisf at ijw.co.nz
Sun Feb 9 17:42:39 PST 2014


For the series:

Reviewed-by: Chris Forbes <chrisf at ijw.co.nz>

On Mon, Feb 10, 2014 at 1:56 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> The 4x and 8x cases contained identical code for extracting the X and
> Y sample offset values and converting them from U0.4 back to float.
>
> Without this refactoring, we'd have to duplicate it a third time in
> order to support 2x MSAA.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/gen6_multisample_state.c | 23 +++++++++++-----------
>  1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/gen6_multisample_state.c b/src/mesa/drivers/dri/i965/gen6_multisample_state.c
> index f28e880..fd3dd0e 100644
> --- a/src/mesa/drivers/dri/i965/gen6_multisample_state.c
> +++ b/src/mesa/drivers/dri/i965/gen6_multisample_state.c
> @@ -32,25 +32,26 @@ gen6_get_sample_position(struct gl_context *ctx,
>                           struct gl_framebuffer *fb,
>                           GLuint index, GLfloat *result)
>  {
> +   uint8_t bits;
> +
>     switch (fb->Visual.samples) {
>     case 1:
>        result[0] = result[1] = 0.5f;
> +      return;
> +   case 4:
> +      bits = brw_multisample_positions_4x[0] >> (8 * index);
>        break;
> -   case 4: {
> -      uint8_t val = (uint8_t)(brw_multisample_positions_4x[0] >> (8*index));
> -      result[0] = ((val >> 4) & 0xf) / 16.0f;
> -      result[1] = (val & 0xf) / 16.0f;
> -      break;
> -   }
> -   case 8: {
> -      uint8_t val = (uint8_t)(brw_multisample_positions_8x[index>>2] >> (8*(index & 3)));
> -      result[0] = ((val >> 4) & 0xf) / 16.0f;
> -      result[1] = (val & 0xf) / 16.0f;
> +   case 8:
> +      bits = brw_multisample_positions_8x[index >> 2] >> (8 * (index & 3));
>        break;
> -   }
>     default:
>        assert(!"Not implemented");
> +      return;
>     }
> +
> +   /* Convert from U0.4 back to a floating point coordinate. */
> +   result[0] = ((bits >> 4) & 0xf) / 16.0f;
> +   result[1] = (bits & 0xf) / 16.0f;
>  }
>
>  /**
> --
> 1.8.5.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list