From: Courtney Goeltzenleuchter Date: Fri, 13 Dec 2013 19:12:53 +0000 (-0700) Subject: i965: Enhance intel_texsubimage_tiled_memcpy() to support all levels X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5a51c1b01a16d3256f9769a76d8293fea5853b1f;p=mesa.git i965: Enhance intel_texsubimage_tiled_memcpy() to support all levels Support all levels of a supported texture format. Using 1024x1024, RGBA 8888 source, mipmap internal-format Before (MB/sec) mipmap (MB/sec) GL_RGBA 627.15 615.90 GL_RGB 456.35 611.53 512x512 GL_RGBA 597.00 619.95 GL_RGB 440.62 611.28 256x256 GL_RGBA 487.80 587.42 GL_RGB 376.63 585.00 Benchmark has been sent to mesa-dev list: teximage_enh Signed-off-by: Courtney Goeltzenleuchter Reviewed-by: Chad Versace --- diff --git a/src/mesa/drivers/dri/i965/intel_tex_subimage.c b/src/mesa/drivers/dri/i965/intel_tex_subimage.c index f7adfef1a86..202ab6676cd 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_subimage.c +++ b/src/mesa/drivers/dri/i965/intel_tex_subimage.c @@ -549,7 +549,7 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx, uint32_t cpp; mem_copy_fn mem_copy = NULL; - /* This fastpath is restricted to specific texture types: level 0 of + /* This fastpath is restricted to specific texture types: * a 2D BGRA, RGBA, L8 or A8 texture. It could be generalized to support * more types. * @@ -561,7 +561,6 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx, if (!brw->has_llc || type != GL_UNSIGNED_BYTE || texImage->TexObject->Target != GL_TEXTURE_2D || - texImage->Level != 0 || pixels == NULL || _mesa_is_bufferobj(packing->BufferObj) || packing->Alignment > 4 || @@ -637,6 +636,10 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx, packing->Alignment, packing->RowLength, packing->SkipPixels, packing->SkipRows, for_glTexImage); + /* Adjust x and y offset based on miplevel */ + xoffset += image->mt->level[texImage->Level].level_x; + yoffset += image->mt->level[texImage->Level].level_y; + linear_to_tiled( xoffset * cpp, (xoffset + width) * cpp, yoffset, yoffset + height,