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

Reply via email to