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 <mar...@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 <imir...@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 <imir...@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@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to