[Mesa-dev] [PATCH] st/mesa: align cube map arrays layers

Dave Airlie airlied at gmail.com
Tue Apr 7 18:01:03 PDT 2015


On 8 April 2015 at 10:43, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> On Tue, Apr 7, 2015 at 8:02 PM, Dave Airlie <airlied at gmail.com> wrote:
>> From: Dave Airlie <airlied at redhat.com>
>>
>> We create textures internally for texsubimage, and we use
>> the values from sub image to create a new texture, however
>> we don't align these to valid sizes, and cube map arrays
>> must have an array size aligned to 6.
>>
>> This fixes texsubimage cube_map_array on CAYMAN at least,
>> (it was causing  GPU hang and bad values), it probably
>> also fixes it on radeonsi and evergreen.
>>
>> Signed-off-by: Dave Airlie <airlied at redhat.com>
>> ---
>>  src/mesa/state_tracker/st_texture.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c
>> index ca7c83c..5c9a09c 100644
>> --- a/src/mesa/state_tracker/st_texture.c
>> +++ b/src/mesa/state_tracker/st_texture.c
>> @@ -177,6 +177,8 @@ st_gl_texture_dims_to_pipe_dims(GLenum texture,
>>        *widthOut = widthIn;
>>        *heightOut = heightIn;
>>        *depthOut = 1;
>> +      if (depthIn % 6)
>> +         depthIn = util_align_npot(depthIn, 6);
>>        *layersOut = depthIn;
>
> I'd just do this as
>
> *layersOut = util_align_npot(depthIn, 6)
>
> But I assume this is the st_TexSubImage caller? Then I bet that instead
>
>    /* TexSubImage only sets a single cubemap face. */
>    if (gl_target == GL_TEXTURE_CUBE_MAP) {
>       gl_target = GL_TEXTURE_2D;
>    }
>
> Should be changed to account for cube map arrays...

That works as well, belt and braces maybe just in case?

Dave.


More information about the mesa-dev mailing list