[Mesa-dev] [PATCH] mesa/st: NumLayers is only valid for array textures
Marek Olšák
maraeo at gmail.com
Wed Sep 24 10:19:53 PDT 2014
Interesting, I didn't know about that. Nevermind. st/mesa indeed sets it to 6.
Marek
On Wed, Sep 24, 2014 at 6:26 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> On Wed, Sep 24, 2014 at 12:20 PM, Marek Olšák <maraeo at gmail.com> wrote:
>> Cubemaps have array_size == 1, but you can still set the target to 2D
>
> Are you *sure* about that? Everything I'm seeing indicates that
> cubemaps have array_size == 6. For example this code in nv50_tex.c:
>
> depth = MAX2(mt->base.base.array_size, mt->base.base.depth0);
> ...
> case PIPE_TEXTURE_CUBE:
> depth /= 6;
> ...
>
>> and set first_layer <= last_layer <= 6 in the sample view. Instead of
>> checking array_size, maybe NumLayers should be used instead. Just
>> guessing.
>>
>> Marek
>>
>> On Wed, Sep 24, 2014 at 5:05 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>>> The disguise of cubemap's layeredness is insufficient to trip up this
>>> code :) They still get their NumLayers set, and the resources still
>>> have an array size. Perhaps there's a scenario I'm not considering?
>>>
>>> On Wed, Sep 24, 2014 at 5:23 AM, Marek Olšák <maraeo at gmail.com> wrote:
>>>> Maybe something similar also needs to be done for cubemaps, because
>>>> they are just layered textures in disguise?
>>>>
>>>> Marek
>>>>
>>>> On Wed, Sep 24, 2014 at 7:01 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>>>>> For 3d textures, NumLayers is set to 1, which is not what we want. This
>>>>> fixes the newly added gl-layer-render-storage test (which constructs
>>>>> immutable 3d textures). Fixes regression introduced in d82bd7eb060.
>>>>>
>>>>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84145
>>>>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>>>>> ---
>>>>> src/mesa/state_tracker/st_atom_texture.c | 2 +-
>>>>> src/mesa/state_tracker/st_cb_fbo.c | 3 ++-
>>>>> src/mesa/state_tracker/st_texture.c | 3 ++-
>>>>> 3 files changed, 5 insertions(+), 3 deletions(-)
>>>>>
>>>>> diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
>>>>> index ed9a444..19072ae 100644
>>>>> --- a/src/mesa/state_tracker/st_atom_texture.c
>>>>> +++ b/src/mesa/state_tracker/st_atom_texture.c
>>>>> @@ -223,7 +223,7 @@ static unsigned last_level(struct st_texture_object *stObj)
>>>>>
>>>>> static unsigned last_layer(struct st_texture_object *stObj)
>>>>> {
>>>>> - if (stObj->base.Immutable)
>>>>> + if (stObj->base.Immutable && stObj->pt->array_size > 1)
>>>>> return MIN2(stObj->base.MinLayer + stObj->base.NumLayers - 1,
>>>>> stObj->pt->array_size - 1);
>>>>> return stObj->pt->array_size - 1;
>>>>> diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
>>>>> index 470ab27..7b6a444 100644
>>>>> --- a/src/mesa/state_tracker/st_cb_fbo.c
>>>>> +++ b/src/mesa/state_tracker/st_cb_fbo.c
>>>>> @@ -451,7 +451,8 @@ st_update_renderbuffer_surface(struct st_context *st,
>>>>> }
>>>>>
>>>>> /* Adjust for texture views */
>>>>> - if (strb->is_rtt) {
>>>>> + if (strb->is_rtt && resource->array_size > 1 &&
>>>>> + strb->Base.TexImage->TexObject->Immutable) {
>>>>> struct gl_texture_object *tex = strb->Base.TexImage->TexObject;
>>>>> first_layer += tex->MinLayer;
>>>>> if (!strb->rtt_layered)
>>>>> diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c
>>>>> index c84aa45..2cd95ec 100644
>>>>> --- a/src/mesa/state_tracker/st_texture.c
>>>>> +++ b/src/mesa/state_tracker/st_texture.c
>>>>> @@ -263,7 +263,8 @@ st_texture_image_map(struct st_context *st, struct st_texture_image *stImage,
>>>>> if (stObj->base.Immutable) {
>>>>> level += stObj->base.MinLevel;
>>>>> z += stObj->base.MinLayer;
>>>>> - d = MIN2(d, stObj->base.NumLayers);
>>>>> + if (stObj->pt->array_size > 1)
>>>>> + d = MIN2(d, stObj->base.NumLayers);
>>>>> }
>>>>>
>>>>> z += stImage->base.Face;
>>>>> --
>>>>> 1.8.5.5
>>>>>
>>>>> _______________________________________________
>>>>> mesa-dev mailing list
>>>>> mesa-dev at lists.freedesktop.org
>>>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list