[Mesa-dev] [PATCH 1/2] st/mesa: check for incomplete texture in st_finalize_texture()
Brian Paul
brianp at vmware.com
Sun Jul 9 20:13:42 UTC 2017
I think we can skip this one since it's pretty obscure and only the
VMware driver seemed to be effected.
-Brian
On 07/08/2017 08:06 AM, Andres Gomez wrote:
> Brian, it looks like we could want this series into -stable (?)
>
> On Wed, 2017-06-28 at 16:12 -0600, Brian Paul wrote:
>> Return early from st_finalize_texture() if we have an incomplete
>> texture. This avoids trying to create a texture resource with invalid
>> parameters (too many mipmap levels given the base dimension).
>>
>> Specifically, the Piglit fbo-incomplete-texture-03 test winds up
>> calling pipe_screen::resource_create() with width0=32, height0=32 and
>> last_level=6 because the first five cube faces are 32x32 but the sixth
>> face is 64x64. Some drivers handle this, but others (like VMware svga)
>> do not (generates device errors).
>>
>> Note that this code is on the path that's usually not taken (we normally
>> build consistent textures).
>>
>> No Piglit regressions.
>> ---
>> src/mesa/state_tracker/st_cb_texture.c | 14 ++++++++++++++
>> 1 file changed, 14 insertions(+)
>>
>> diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
>> index 9798321..7708443 100644
>> --- a/src/mesa/state_tracker/st_cb_texture.c
>> +++ b/src/mesa/state_tracker/st_cb_texture.c
>> @@ -2543,6 +2543,20 @@ st_finalize_texture(struct gl_context *ctx,
>> stObj->base.Target == GL_TEXTURE_CUBE_MAP_ARRAY)
>> ptHeight = ptWidth;
>> }
>> +
>> + /* At this point, the texture may be incomplete (mismatched cube
>> + * face sizes, for example). If that's the case, give up, but
>> + * don't return GL_FALSE as that would raise an incorrect
>> + * GL_OUT_OF_MEMORY error. See Piglit fbo-incomplete-texture-03 test.
>> + */
>> + if (!stObj->base._BaseComplete ||
>> + !stObj->base._MipmapComplete) {
>> + _mesa_test_texobj_completeness(ctx, &stObj->base);
>> + if (!stObj->base._BaseComplete ||
>> + !stObj->base._MipmapComplete) {
>> + return TRUE;
>> + }
>> + }
>> }
>>
>> ptNumSamples = firstImage->base.NumSamples;
More information about the mesa-dev
mailing list