[Mesa-dev] [PATCH 2/6] gallium: implement ARB_seamless_cube_map
Brian Paul
brianp at vmware.com
Mon May 2 06:47:32 PDT 2011
On 05/02/2011 07:03 AM, Marek Olšák wrote:
> ---
> src/gallium/include/pipe/p_defines.h | 1 +
> src/gallium/include/pipe/p_state.h | 1 +
> src/mesa/state_tracker/st_atom_rasterizer.c | 6 +++++-
> src/mesa/state_tracker/st_extensions.c | 4 ++++
> 4 files changed, 11 insertions(+), 1 deletions(-)
>
> diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
> index 431a7fb..176fee9 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -465,6 +465,7 @@ enum pipe_cap {
> PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR = 44,
> PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL = 45,
> PIPE_CAP_MIXED_COLORBUFFER_FORMATS = 46,
> + PIPE_CAP_SEAMLESS_CUBE_MAP = 47
> };
>
> /* Shader caps not specific to any single stage */
> diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
> index 0c1f509..26e8a8e 100644
> --- a/src/gallium/include/pipe/p_state.h
> +++ b/src/gallium/include/pipe/p_state.h
> @@ -101,6 +101,7 @@ struct pipe_rasterizer_state
> unsigned line_smooth:1;
> unsigned line_stipple_enable:1;
> unsigned line_last_pixel:1;
> + unsigned seamless_cube_map:1;
Shouldn't this be sampler state and not rasterizer state? The AMD
extension lets this option be set per texture. Though, I don't know
if non-AMD hardware supports that mode.
> /**
> * Use the first vertex of a primitive as the provoking vertex for
> diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c b/src/mesa/state_tracker/st_atom_rasterizer.c
> index 250cbb2..e19b465 100644
> --- a/src/mesa/state_tracker/st_atom_rasterizer.c
> +++ b/src/mesa/state_tracker/st_atom_rasterizer.c
> @@ -257,6 +257,9 @@ static void update_raster_state( struct st_context *st )
> /* _NEW_FRAG_CLAMP */
> raster->clamp_fragment_color = ctx->Color._ClampFragmentColor;
>
> + /* _NEW_SEAMLESS_CUBE_MAP */
> + raster->seamless_cube_map = ctx->Texture.CubeMapSeamless;
> +
> raster->gl_rasterization_rules = 1;
>
> cso_set_rasterizer(st->cso_context, raster);
> @@ -273,7 +276,8 @@ const struct st_tracked_state st_update_rasterizer = {
> _NEW_POLYGON |
> _NEW_PROGRAM |
> _NEW_SCISSOR |
> - _NEW_FRAG_CLAMP), /* mesa state dependencies*/
> + _NEW_FRAG_CLAMP |
> + _NEW_SEAMLESS_CUBE_MAP), /* mesa state dependencies*/
> ST_NEW_VERTEX_PROGRAM, /* state tracker dependencies */
> },
> update_raster_state /* update function */
> diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
> index 030bbc7..8bdf89c 100644
> --- a/src/mesa/state_tracker/st_extensions.c
> +++ b/src/mesa/state_tracker/st_extensions.c
> @@ -595,4 +595,8 @@ void st_init_extensions(struct st_context *st)
> PIPE_BIND_SAMPLER_VIEW)) {
> ctx->Extensions.EXT_packed_float = GL_TRUE;
> }
> +
> + if (screen->get_param(screen, PIPE_CAP_SEAMLESS_CUBE_MAP)) {
> + ctx->Extensions.ARB_seamless_cube_map = GL_TRUE;
> + }
> }
More information about the mesa-dev
mailing list