[Mesa-dev] [PATCH 10/11] [RFC] mesa: optimize out the realloc from glCopyTexImagexD()

Miklós Máté mtmkls at gmail.com
Wed Dec 16 14:56:39 PST 2015


On 12/16/2015 05:44 PM, Marek Olšák wrote:
> On Wed, Dec 16, 2015 at 12:05 AM, Miklós Máté <mtmkls at gmail.com> wrote:
>> Apitrace showed this call to be 5ms (9 times per frame),
>> but in reality it's about 500us. This shortcut makes it 20us.
>> ---
>>   src/mesa/main/teximage.c | 29 +++++++++++++++++++++++++++++
>>   1 file changed, 29 insertions(+)
>>
>> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
>> index ab60a2f..ba13720 100644
>> --- a/src/mesa/main/teximage.c
>> +++ b/src/mesa/main/teximage.c
>> @@ -3393,6 +3393,21 @@ formats_differ_in_component_sizes(mesa_format f1, mesa_format f2)
>>      return GL_FALSE;
>>   }
>>
>> +static GLboolean
>> +canAvoidRealloc(struct gl_texture_image *texImage, GLenum internalFormat,
>> +      GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
>> +{
>> +   if (texImage->InternalFormat != internalFormat)
>> +      return false;
>> +   if (texImage->Border != border)
>> +      return false;
>> +   if (texImage->Width2 != width)
>> +      return false;
>> +   if (texImage->Height2 != height)
>> +      return false;
>> +   return true;
>> +}
>> +
>>   /**
>>    * Implement the glCopyTexImage1/2D() functions.
>>    */
>> @@ -3433,6 +3448,20 @@ copyteximage(struct gl_context *ctx, GLuint dims,
>>      texObj = _mesa_get_current_tex_object(ctx, target);
>>      assert(texObj);
>>
> Here should be an explanation why it's needed. Also, we don't use "//" comments.
Ok, I'll remove the C++ style comments for the next version from all 
patches. I'll also add a short explanation about the performance gain here.

MM
>
>> +   _mesa_lock_texture(ctx, texObj);
>> +   {
>> +      texImage = _mesa_select_tex_image(texObj, target, level);
>> +      if (texImage && canAvoidRealloc(texImage, internalFormat,
>> +               x, y, width, height, border)) {
>> +         _mesa_unlock_texture(ctx, texObj);
>> +         //_mesa_debug(0, "using shortcut\n");
>> +         return _mesa_copy_texture_sub_image(ctx, dims, texObj, target, level,
>> +               0, 0, 0, x, y, width, height, "CopyTexImage");
>> +      }
>> +      //_mesa_debug(0, "can't shortcut %p, %dx%d\n", texImage, width, height);
>> +   }
>> +   _mesa_unlock_texture(ctx, texObj);
>> +
>>      texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
>>                                              internalFormat, GL_NONE, GL_NONE);
>>
>> --
>> 2.6.4
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list