[Mesa-dev] [PATCH 7/9] mesa: Fill out ARB_texture_view entry points
Brian Paul
brianp at vmware.com
Thu Dec 5 15:12:30 PST 2013
In _mesa_test_texobj_completeness() we check if BaseLevel is negative.
If so, we mark the texture object as 'incomplete'. Down in the drivers,
we should never sample from a texture that's incomplete. In gallium,
for example, we use a dummy/fallback texture instead.
-Brian
On 12/05/2013 10:16 AM, Courtney Goeltzenleuchter wrote:
> Browsing the code a little, it's not clear that drivers are using the
> texture object's BaseLevel in a "safe" manner.
>
> Some example uses of BaseLevel:
>
> [intel driver]
>
> const struct gl_texture_image *img = t->Image[0][t->BaseLevel]; // Without conditioning, this could lead to memory access error. Maybe that's already an issue?
>
>
> firstImage = tObj->Image[0][tObj->BaseLevel]; // Same with this
>
>
>
> if (sampler->MinFilter == GL_NEAREST ||
>
>
> sampler->MinFilter == GL_LINEAR) {
>
>
> maxlevel = tObj->BaseLevel;
>
>
> }else{
> maxlevel=tObj->_MaxLevel;
>
> }
>
>
> [st_atom_sampler]
>
> sampler->min_lod = CLAMP(msamp->MinLod,
>
>
> 0.0f,
>
> (GLfloat) texobj->MaxLevel - texobj->BaseLevel);
>
>
>
> There are more. All using the values that were set in TexParam.
>
>
>
> Courtney
>
>
>
> On Thu, Dec 5, 2013 at 9:41 AM, Courtney Goeltzenleuchter
> <courtney at lunarg.com <mailto:courtney at lunarg.com>> wrote:
>
> Okay, that makes it easier.
>
> Should this change be conditional based on the type of context created?
>
> Courtney
>
>
> On Thu, Dec 5, 2013 at 8:52 AM, Brian Paul <brianp at vmware.com
> <mailto:brianp at vmware.com>> wrote:
>
> On 12/04/2013 03:46 PM, Courtney Goeltzenleuchter wrote:
>
> It's come to my attention that Mesa's handling of
> GL_TEXTURE_BASE_LEVEL
> and GL_TEXTURE_MAX_LEVEL in glTexParameter and
> glGetTexParameter may be
> incorrect. The issue happens with the following sequence:
>
> glTexStorage2D(GL_TEXTURE_2D, 4, GL_RGBA8, 128, 128);
>
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 5);
>
> glGetTexParameter(GL_TEXTURE___2D, GL_TEXTURE_BASE_LEVEL, &n);
>
> The key question is: What is the value of n?
>
> Right now, the Mesa driver will clamp the glTexParameter
> call to the
> range 0 .. 3 (as specified by the TexStorage call) and n = 3
> after the
> GetTexParameter call. However, the value returned on the
> Intel Windows
> driver and NVIDIA's Linux driver return 5. This has
> apparently been
> discussed among Kronos members in bug: 9342
> (https://cvs.khronos.org/__bugzilla/show_bug.cgi?id=9342
> <https://urldefense.proofpoint.com/v1/url?u=https://cvs.khronos.org/bugzilla/show_bug.cgi?id%3D9342&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=lGQMzzTgII0I7jefp2FHq7WtZ%2BTLs8wadB%2BiIj9xpBY%3D%0A&m=8j9s5ig%2FDyFT8SNxc8Hh2Ote4QS96m9F38JN6bYow4U%3D%0A&s=8b560a97e6e9d96f301fa9015d729022dfa73f3f26427740d8cd54d2e29e76c1>
> <https://urldefense.__proofpoint.com/v1/url?u=https:__//cvs.khronos.org/bugzilla/__show_bug.cgi?id%3D9342&k=__oIvRg1%2BdGAgOoM1BIlLLqw%3D%__3D%0A&r=__lGQMzzTgII0I7jefp2FHq7WtZ%__2BTLs8wadB%2BiIj9xpBY%3D%0A&m=__SrPAWBW251dxCErQJNhB0m93E9Vb62__KGHxK3yiRBRuU%3D%0A&s=__a0c086b7a31a804e3e786118fd1771__b53c85717a4cf0c8dea41b60e5acd0__406b
> <https://urldefense.proofpoint.com/v1/url?u=https://cvs.khronos.org/bugzilla/show_bug.cgi?id%3D9342&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=lGQMzzTgII0I7jefp2FHq7WtZ%2BTLs8wadB%2BiIj9xpBY%3D%0A&m=SrPAWBW251dxCErQJNhB0m93E9Vb62KGHxK3yiRBRuU%3D%0A&s=a0c086b7a31a804e3e786118fd1771b53c85717a4cf0c8dea41b60e5acd0406b>>)
>
> which I don't have visibility of.
>
> To match that behavior the texture object will likely need
> two BaseLevel
> and MaxLevel attributes. One that's clamped and used locally
> and the
> other that simply holds the set value as given by the
> application in the
> glTexParameter call.
>
> Thoughts?
>
>
> From reading the bug report, it sounds like the ARB decided
> that clamping should be done when the texture is used, not when
> glTexParameter is called. In the GL 4.3 spec I don't see any
> language about clamping in glTexParameter either.
>
> We should be doing the use-time clamping already. So I think we
> just have to remove the clamping step in glTexParameter.
>
> -Brian
>
>
>
>
> --
> Courtney Goeltzenleuchter
> LunarG
>
>
>
>
> --
> Courtney Goeltzenleuchter
> LunarG
>
More information about the mesa-dev
mailing list