On Mon, May 2, 2011 at 5:53 PM, Brian Paul <bri...@vmware.com> wrote:
> On 05/02/2011 08:40 AM, Marek Olšák wrote:
>>
>> On Mon, May 2, 2011 at 3:47 PM, Brian Paul<bri...@vmware.com>  wrote:
>>>
>>> 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.
>>
>> r600 and r700 hardware has one enable bit that affects the entire
>> chip. There is no per-sampler enable bit.
>>
>> evergreen and later hardware indeed has a per-sampler enable bit.
>>
>> I wouldn't like to limit the extension to evergreen, so
>> pipe_rasterizer_state seemed to be the only choice.
>
> Well, we could still put the bit in pipe_sampler_state and make sure it's
> either set or unset in all active sampler objects.  It shouldn't be a
> problem in the state tracker.
>
> It just feels wrong to put sampler-related state in the rasterizer struct.
>  And when the day comes that we do want per-texture/sampler seamless cube
> map, the flag will already be in the right place and not in two different
> places.

Even though the state only affects samplers, it's a global GPU state
on r600. (so maybe pipe_texture_misc_state?) It would be pretty
awkward to read one field from e.g. fragment sampler state 0 and use
it for all vertex, geometry, and fragment samplers.

It would be best for all GPUs to have both the per-sampler state of
seamless cubemap (evergreen and i965 friendly) and the global state
bit (r600 and nvidia friendly). So my alternative solution is:

unsigned pipe_sampler_state::seamless_cube_map:1; // for the AMD extension

// for the ARB extension (because people think
// putting it in rasterizer_state is awkward)
struct pipe_texture_misc_state {
   unsigned seamless_cube_map:1
};

In struct pipe_context:

void *(*create_texture_misc_state)(struct pipe_context*, struct
pipe_texture_misc_state*);
void (*bind_texture_misc_state)(struct pipe_context*, void*);
void (*delete_texture_misc_state)(struct pipe_context*, void*);

New caps:
PIPE_CAP_SEAMLESS_CUBE_MAP
PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE

What do you think?

Best regards
Marek
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to