A new patch is attached. Marek
On Tue, May 3, 2011 at 9:31 PM, Brian Paul <bri...@vmware.com> wrote: > On 05/03/2011 11:55 AM, Roland Scheidegger wrote: >> >> Am 03.05.2011 15:55, schrieb Marek Olšák: >>> >>> diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c >>> b/src/mesa/state_tracker/st_atom_rasterizer.c >>> index 250cbb2..ac6d76a 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_TEXTURE */ >>> + raster->seamless_cube_map = ctx->Texture.CubeMapSeamless != GL_FALSE; >>> + >>> 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_TEXTURE), /* mesa state dependencies */ >>> ST_NEW_VERTEX_PROGRAM, /* state tracker dependencies */ >>> }, >>> update_raster_state /* update function */ >> >> Hmm seems rather unfortunate that this is _NEW_TEXTURE - looks like all >> the rest of the bits are likely much lower frequency (and of course the >> seamless bit itself probably only ever changes once). I can see now why >> you made that a new bit. I'll defer that to Brian though. > > Marek, are you sure it's too hard to check the currently bound samplers in > the driver to check for global seamless cube map there? > > I'm still not too satisfied with having this state in two places. It feels > shoehorned into the rasterizer state. > > But I don't want to hold this up too long. It could be changed in the > future if we change our minds. > > -Brian >
From 54dd3ffe211b98df6b40201f1ae8944b6549d363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <mar...@gmail.com> Date: Mon, 2 May 2011 02:37:46 +0200 Subject: [PATCH 2/2] gallium: implement seamless cubemap extensions --- src/gallium/docs/source/cso/sampler.rst | 4 ++++ src/gallium/include/pipe/p_defines.h | 2 ++ src/gallium/include/pipe/p_state.h | 1 + src/mesa/state_tracker/st_atom_sampler.c | 3 +++ src/mesa/state_tracker/st_extensions.c | 8 ++++++++ 5 files changed, 18 insertions(+), 0 deletions(-) diff --git a/src/gallium/docs/source/cso/sampler.rst b/src/gallium/docs/source/cso/sampler.rst index 9bbb784..648b5cc 100644 --- a/src/gallium/docs/source/cso/sampler.rst +++ b/src/gallium/docs/source/cso/sampler.rst @@ -107,3 +107,7 @@ max_anisotropy Set to zero to disable anisotropic filtering. Any other setting enables anisotropic filtering, however it's not unexpected some drivers only will change their filtering with a setting of 2 and higher. +seamless_cube_map + If set, the bilinear filter of a cube map may take samples from adjacent + cube map faces when sampled near a texture border to produce a seamless + look. \ No newline at end of file diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index 431a7fb..3c0f9bf 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -465,6 +465,8 @@ 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, + PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE = 48, }; /* 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..86ef255 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -269,6 +269,7 @@ struct pipe_sampler_state unsigned compare_func:3; /**< PIPE_FUNC_x */ unsigned normalized_coords:1; /**< Are coords normalized to [0,1]? */ unsigned max_anisotropy:6; + unsigned seamless_cube_map:1; float lod_bias; /**< LOD/lambda bias */ float min_lod, max_lod; /**< LOD clamp range, after bias */ float border_color[4]; diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c index 56da010..e3d6cbb 100644 --- a/src/mesa/state_tracker/st_atom_sampler.c +++ b/src/mesa/state_tracker/st_atom_sampler.c @@ -201,6 +201,9 @@ update_samplers(struct st_context *st) = st_compare_func_to_pipe(msamp->CompareFunc); } + sampler->seamless_cube_map = + st->ctx->Texture.CubeMapSeamless || msamp->CubeMapSeamless; + st->state.num_samplers = su + 1; /*printf("%s su=%u non-null\n", __FUNCTION__, su);*/ diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 030bbc7..ad8e6bb 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -595,4 +595,12 @@ 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_PER_TEXTURE)) { + ctx->Extensions.ARB_seamless_cube_map = GL_TRUE; + ctx->Extensions.AMD_seamless_cubemap_per_texture = GL_TRUE; + } + else if (screen->get_param(screen, PIPE_CAP_SEAMLESS_CUBE_MAP)) { + ctx->Extensions.ARB_seamless_cube_map = GL_TRUE; + } } -- 1.7.4.1
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev