On 02/24/2016 03:35 PM, Miklós Máté wrote: > v2: comment about the purpose of the code > v3: also compare texFormat, > add a perf debug message, > formatting fixes > > Signed-off-by: Miklós Máté <mtm...@gmail.com> > --- > src/mesa/main/teximage.c | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c > index 8a4c628..a906de3 100644 > --- a/src/mesa/main/teximage.c > +++ b/src/mesa/main/teximage.c > @@ -3474,6 +3474,23 @@ formats_differ_in_component_sizes(mesa_format f1, > mesa_format f2) > return GL_FALSE; > } > > +static bool > +can_avoid_reallocation(struct gl_texture_image *texImage, GLenum > internalFormat, > + mesa_format texFormat, GLint x, GLint y, GLsizei width, GLsizei > height, GLint border)
The second line should be indented to line up with the ( of the previous line. With that fixed, this patch is Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> Assuming there is no other review feedback, I can fix that whitespace issue for you when I commit the patch. > +{ > + if (texImage->InternalFormat != internalFormat) > + return false; > + if (texImage->TexFormat != texFormat) > + 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. > */ > @@ -3517,6 +3534,24 @@ copyteximage(struct gl_context *ctx, GLuint dims, > texFormat = _mesa_choose_texture_format(ctx, texObj, target, level, > internalFormat, GL_NONE, GL_NONE); > > + /* First check if reallocating the texture buffer can be avoided. > + * Without the realloc the copy can be 20x faster. > + */ > + _mesa_lock_texture(ctx, texObj); > + { > + texImage = _mesa_select_tex_image(texObj, target, level); > + if (texImage && can_avoid_reallocation(texImage, internalFormat, > texFormat, > + x, y, width, height, border)) { > + _mesa_unlock_texture(ctx, texObj); > + return _mesa_copy_texture_sub_image(ctx, dims, texObj, target, > level, > + 0, 0, 0, x, y, width, height, > + "CopyTexImage"); > + } > + } > + _mesa_unlock_texture(ctx, texObj); > + _mesa_perf_debug(ctx, MESA_DEBUG_SEVERITY_LOW, "glCopyTexImage " > + "can't avoid reallocating texture storage\n"); > + > rb = _mesa_get_read_renderbuffer_for_format(ctx, internalFormat); > > if (_mesa_is_gles3(ctx)) { > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev