[Mesa-dev] [PATCH] gallium: increase pipe_sampler_view::target bitfield size for MSVC

Marek Olšák maraeo at gmail.com
Wed Nov 1 15:47:35 UTC 2017


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Wed, Nov 1, 2017 at 3:45 PM, Brian Paul <brianp at vmware.com> wrote:
> MSVC treats enums as being signed.  The 4-bit target field isn't large
> enough to correctly store the value 8 (for PIPE_TEXTURE_CUBE_ARRAY).
> The bitfield value 0x8 was being interpreted as -8 so matching the
> target with PIPE_TEXTURE_CUBE_ARRAY in switch statements, etc. was
> failing.
>
> To keep the structure size the same, we reduce the format field from
> 16 bits to 15.  There don't appear to be any other enum bitfields
> which need to be adjusted.
>
> This fixes a number of Piglit cube map array tests.
> ---
>  src/gallium/include/pipe/p_state.h | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
> index 10bf678..90dc561 100644
> --- a/src/gallium/include/pipe/p_state.h
> +++ b/src/gallium/include/pipe/p_state.h
> @@ -34,6 +34,10 @@
>   * Basic notes:
>   *   1. Want compact representations, so we use bitfields.
>   *   2. Put bitfields before other (GLfloat) fields.
> + *   3. enum bitfields need to be at least one bit extra in size so the most
> + *      significant bit is zero.  MSVC treats enums as signed so if the high
> + *      bit is set, the value will be interpreted as a negative number.
> + *      That causes trouble in various places.
>   */
>
>
> @@ -436,8 +440,8 @@ struct pipe_surface
>  struct pipe_sampler_view
>  {
>     struct pipe_reference reference;
> -   enum pipe_format format:16;      /**< typed PIPE_FORMAT_x */
> -   enum pipe_texture_target target:4; /**< PIPE_TEXTURE_x */
> +   enum pipe_format format:15;      /**< typed PIPE_FORMAT_x */
> +   enum pipe_texture_target target:5; /**< PIPE_TEXTURE_x */
>     unsigned swizzle_r:3;         /**< PIPE_SWIZZLE_x for red component */
>     unsigned swizzle_g:3;         /**< PIPE_SWIZZLE_x for green component */
>     unsigned swizzle_b:3;         /**< PIPE_SWIZZLE_x for blue component */
> --
> 1.9.1
>
> _______________________________________________
> 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