[Mesa-dev] [PATCH 1/4] gallium: Add support for multiple viewports

Roland Scheidegger sroland at vmware.com
Thu May 23 14:02:24 PDT 2013


Am 23.05.2013 22:33, schrieb Zack Rusin:
> Gallium supported only a single viewport/scissor combination. This
> commit changes the interface to allow us to add support for multiple
> viewports/scissors.
> 
> Signed-off-by: Zack Rusin <zackr at vmware.com>
> ---
> diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
> index d1130bc..eaaa043 100644
> --- a/src/gallium/include/pipe/p_context.h
> +++ b/src/gallium/include/pipe/p_context.h
> @@ -211,11 +211,13 @@ struct pipe_context {
>     void (*set_polygon_stipple)( struct pipe_context *,
>  				const struct pipe_poly_stipple * );
>  
> -   void (*set_scissor_state)( struct pipe_context *,
> -                              const struct pipe_scissor_state * );
> +   void (*set_scissor_states)( struct pipe_context *,
> +                               unsigned num_scissors,
> +                               const struct pipe_scissor_state * );
>  
> -   void (*set_viewport_state)( struct pipe_context *,
> -                               const struct pipe_viewport_state * );
> +   void (*set_viewport_states)( struct pipe_context *,
> +                                unsigned num_viewports,
> +                                const struct pipe_viewport_state *);
>  
>     void (*set_fragment_sampler_views)(struct pipe_context *,
>                                        unsigned num_views,
> diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
> index bb86968..00f0a37 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -507,7 +507,8 @@ enum pipe_cap {
>     PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER = 80,
>     PIPE_CAP_QUERY_PIPELINE_STATISTICS = 81,
>     PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK = 82,
> -   PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE = 83
> +   PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE = 83,
> +   PIPE_CAP_MULTIPLE_VIEWPORTS = 84
Would it be better if this were PIPE_CAP_MAX_VIEWPORTS instead? Though I
guess there's no real need right now to support anything but 16 (as
that's needed by d3d10/11, and is the minimum supported value for GL,
though GL would allow for more), so I don't have a strong opinion on that.
Also please document that CAP bit.

>  };
>  
>  #define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)
> diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h
> index 50de2d3..b33cf1d 100644
> --- a/src/gallium/include/pipe/p_shader_tokens.h
> +++ b/src/gallium/include/pipe/p_shader_tokens.h
> @@ -164,7 +164,8 @@ struct tgsi_declaration_interp
>  #define TGSI_SEMANTIC_THREAD_ID  18 /**< block-relative id of the current thread */
>  #define TGSI_SEMANTIC_TEXCOORD   19 /**< texture or sprite coordinates */
>  #define TGSI_SEMANTIC_PCOORD     20 /**< point sprite coordinate */
> -#define TGSI_SEMANTIC_COUNT      21 /**< number of semantic values */
> +#define TGSI_SEMANTIC_VIEWPORT_INDEX 21 /**< viewport index */
> +#define TGSI_SEMANTIC_COUNT      22 /**< number of semantic values */
>  
>  struct tgsi_declaration_semantic
>  {
> diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
> index 262078d..ff0aac7 100644
> --- a/src/gallium/include/pipe/p_state.h
> +++ b/src/gallium/include/pipe/p_state.h
> @@ -65,6 +65,7 @@ extern "C" {
>  #define PIPE_MAX_TEXTURE_LEVELS   16
>  #define PIPE_MAX_SO_BUFFERS        4
>  #define PIPE_MAX_SO_OUTPUTS       64
> +#define PIPE_MAX_VIEWPORTS        16
>  
>  
>  struct pipe_reference

Otherwise looks good to me.

Roland


More information about the mesa-dev mailing list