[Mesa-dev] [PATCH] i965/ps: Use SET_FIELD() for sampler count

Kenneth Graunke kenneth at whitecape.org
Wed Apr 29 14:24:34 PDT 2015


On Thursday, April 30, 2015 12:14:34 AM Topi Pohjolainen wrote:
> The value is actually clamped to 0-16 as sample state pointer
> can be used to support more than 16 samplers.
> 
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
>  src/mesa/drivers/dri/i965/brw_defines.h   | 1 +
>  src/mesa/drivers/dri/i965/gen7_wm_state.c | 5 +++--
>  src/mesa/drivers/dri/i965/gen8_ps_state.c | 5 +++--
>  3 files changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
> index bd3218a..7d55d85 100644
> --- a/src/mesa/drivers/dri/i965/brw_defines.h
> +++ b/src/mesa/drivers/dri/i965/brw_defines.h
> @@ -2259,6 +2259,7 @@ enum brw_wm_barycentric_interp_mode {
>  # define GEN7_PS_SPF_MODE				(1 << 31)
>  # define GEN7_PS_VECTOR_MASK_ENABLE			(1 << 30)
>  # define GEN7_PS_SAMPLER_COUNT_SHIFT			27
> +# define GEN7_PS_SAMPLER_COUNT_MASK                     INTEL_MASK(29, 27)
>  # define GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
>  # define GEN7_PS_FLOATING_POINT_MODE_IEEE_754		(0 << 16)
>  # define GEN7_PS_FLOATING_POINT_MODE_ALT		(1 << 16)
> diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c b/src/mesa/drivers/dri/i965/gen7_wm_state.c
> index 923414e..55a1acd 100644
> --- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
> @@ -135,8 +135,9 @@ upload_ps_state(struct brw_context *brw)
>  
>     dw2 = dw4 = dw5 = ksp2 = 0;
>  
> -   dw2 |=
> -      (ALIGN(brw->wm.base.sampler_count, 4) / 4) << GEN7_PS_SAMPLER_COUNT_SHIFT;
> +   const unsigned sampler_count =
> +      DIV_ROUND_UP(CLAMP(brw->wm.base.sampler_count, 0, 16), 4);
> +   dw2 |= SET_FIELD(sampler_count, GEN7_PS_SAMPLER_COUNT);
>  
>     dw2 |= ((prog_data->base.binding_table.size_bytes / 4) <<
>             GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT);
> diff --git a/src/mesa/drivers/dri/i965/gen8_ps_state.c b/src/mesa/drivers/dri/i965/gen8_ps_state.c
> index 5f39e12..8481153 100644
> --- a/src/mesa/drivers/dri/i965/gen8_ps_state.c
> +++ b/src/mesa/drivers/dri/i965/gen8_ps_state.c
> @@ -133,8 +133,9 @@ upload_ps_state(struct brw_context *brw)
>      */
>     dw3 |= GEN7_PS_VECTOR_MASK_ENABLE;
>  
> -   dw3 |=
> -      (ALIGN(brw->wm.base.sampler_count, 4) / 4) << GEN7_PS_SAMPLER_COUNT_SHIFT;
> +   const unsigned sampler_count =
> +      DIV_ROUND_UP(CLAMP(brw->wm.base.sampler_count, 0, 16), 4);
> +   dw3 |= SET_FIELD(sampler_count, GEN7_PS_SAMPLER_COUNT); 
>  
>     /* BRW_NEW_FS_PROG_DATA */
>     dw3 |=
> 

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150429/e0de5ade/attachment.sig>


More information about the mesa-dev mailing list