On 06.06.2016 23:58, Ilia Mirkin wrote:
On Mon, Jun 6, 2016 at 5:37 PM, Nicolai Hähnle <nhaeh...@gmail.com> wrote:
On 05.06.2016 08:24, Ilia Mirkin wrote:

In the case where we can't guess the base level size, just use the first
image's dims. The width0/height0/depth0 on stObj may not have been set
at this point. Observed in a trace that set up levels 2..9 of a 2d
texture,
and set the base level to 2, with height 1. This made the guess logic
always bail.


So by coincidence, I've been digging around this code today as well, though
I think the issues we were looking at are unrelated.

I'm a bit confused. As far as I understand the code, the allocated pipe
texture always has levels corresponding to the GL texture (ignoring texture
views, at least...). So in the described situation, BaseLevel == 2,
stObj->lastLevel == 9, and we allocate a 10-level texture object.

The pipe texture dimensions should be the dimensions of a hypothetical level
0, but with your change they will end up being the dimension of the GL level
2, leading to a texture that is too small? How does this work?

I agree though that the current code can't be correct either...

Well, since it's *hypothetical*, I was kinda hoping everything would
work out starting from firstImage and ignore the hypothetical higher
levels. However perhaps that hope isn't rooted in reality, and is the
reason why the test fails.

I mean, aren't the level sizes wrong?

E.g. the program sets GL texture level 2 to 128x1, level 3 to 64x1, etc. Now the pipe texture width0 should be 512 and the height0 should be 1, but will end up being 128 and 1, respectively.


Perhaps guess_base_level_size shouldn't bail on dim == 1 in the first place?

Well, it'll bail for *some* cases, so we might as well make it work. I
think this was to avoid the situation where you end up over-guessing
for a narrow image, such as this one, which only ever has height 1,
but width up to 512. If we had started guessing at the 1x1 level, we'd
come up with 512x512.

Yeah, I guess there is an argument in favor of bailing in this case when called from guess_and_alloc_texture.

But when called from st_finalize_texture, I think it should just do

width = width > 1 ? width << level : 1;

etc. Does that fix the test?

Nicolai
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to