Created attachment 120124 [details]
A small program to demonstrate the issue
It seems that a texture bound in the previous draw call is used by textureSize() and textureQueryLevels() (instead of the currently bound texture).
The attached program demonstrated the bug. When the program is built with -DBROKEN, it incorrectly prints "width: 2.000000 height 2.000000 miplevels 2.000000" while the current texture is 512x256 with 4 miplevels.
OpenGL vendor string: nouveau
OpenGL renderer string: Gallium 0.4 on NVE4
OpenGL core profile version string: 4.1 (Core Profile) Mesa 11.0.5
OpenGL core profile shading language version string: 4.10
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
01:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 760] (rev a1) (prog-if 00 [VGA controller])
It works correctly in 11.2.0-devel (git-63b49e1). I guess it was fixed meanwhile.
I did a reverse-bisect, and found this is what fixed it:
Author: Ilia Mirkin <firstname.lastname@example.org>
Date: Thu Sep 10 23:58:17 2015 -0400
nvc0/ir: start offset at texBindBase for txq, like regular texturing
Curiously this has no actual effect. I think it's because the first 8
textures are bound in multiple slots for some reason. However seems
prudent to use these the same way as regular texturing, esp in the case
where there are more than 8 textures bound.
Signed-off-by: Ilia Mirkin <email@example.com>
I really couldn't find an effect that it practically had at the time. I could spend time thinking about what the difference is, but... I'm insufficiently interested. I'll ask for a cherry-pick to the 11.0 branch.