diff options
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_tex_image.c | 103 |
1 files changed, 45 insertions, 58 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c index 29a49840d81..ceb0b3f9810 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_image.c +++ b/src/mesa/drivers/dri/i965/intel_tex_image.c @@ -284,17 +284,51 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx, static void +intel_upload_tex(struct gl_context * ctx, + GLuint dims, + struct gl_texture_image *texImage, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, + const GLvoid * pixels, + const struct gl_pixelstore_attrib *packing) +{ + struct intel_mipmap_tree *mt = intel_texture_image(texImage)->mt; + bool ok; + + bool tex_busy = mt && brw_bo_busy(mt->bo); + + if (mt && mt->format == MESA_FORMAT_S_UINT8) + mt->r8stencil_needs_update = true; + + ok = _mesa_meta_pbo_TexSubImage(ctx, dims, texImage, + xoffset, yoffset, zoffset, + width, height, depth, format, type, + pixels, tex_busy, packing); + if (ok) + return; + + ok = intel_texsubimage_tiled_memcpy(ctx, dims, texImage, + xoffset, yoffset, zoffset, + width, height, depth, + format, type, pixels, packing); + if (ok) + return; + + _mesa_store_texsubimage(ctx, dims, texImage, + xoffset, yoffset, zoffset, + width, height, depth, + format, type, pixels, packing); +} + + +static void intelTexImage(struct gl_context * ctx, GLuint dims, struct gl_texture_image *texImage, GLenum format, GLenum type, const void *pixels, const struct gl_pixelstore_attrib *unpack) { - struct intel_texture_image *intelImage = intel_texture_image(texImage); - bool ok; - - bool tex_busy = intelImage->mt && brw_bo_busy(intelImage->mt->bo); - DBG("%s mesa_format %s target %s format %s type %s level %d %dx%dx%d\n", __func__, _mesa_get_format_name(texImage->TexFormat), _mesa_enum_to_string(texImage->TexObject->Target), @@ -307,34 +341,11 @@ intelTexImage(struct gl_context * ctx, return; } - assert(intelImage->mt); - - if (intelImage->mt->format == MESA_FORMAT_S_UINT8) - intelImage->mt->r8stencil_needs_update = true; - - ok = _mesa_meta_pbo_TexSubImage(ctx, dims, texImage, 0, 0, 0, - texImage->Width, texImage->Height, - texImage->Depth, - format, type, pixels, - tex_busy, unpack); - if (ok) - return; + assert(intel_texture_image(texImage)->mt); - ok = intel_texsubimage_tiled_memcpy(ctx, dims, texImage, - 0, 0, 0, /*x,y,z offsets*/ - texImage->Width, - texImage->Height, - texImage->Depth, - format, type, pixels, unpack); - if (ok) - return; - - DBG("%s: upload image %dx%dx%d pixels %p\n", - __func__, texImage->Width, texImage->Height, texImage->Depth, - pixels); - - _mesa_store_teximage(ctx, dims, texImage, - format, type, pixels, unpack); + intel_upload_tex(ctx, dims, texImage, 0, 0, 0, + texImage->Width, texImage->Height, texImage->Depth, + format, type, pixels, unpack); } @@ -348,38 +359,14 @@ intelTexSubImage(struct gl_context * ctx, const GLvoid * pixels, const struct gl_pixelstore_attrib *packing) { - struct intel_mipmap_tree *mt = intel_texture_image(texImage)->mt; - bool ok; - - bool tex_busy = mt && brw_bo_busy(mt->bo); - - if (mt && mt->format == MESA_FORMAT_S_UINT8) - mt->r8stencil_needs_update = true; - DBG("%s mesa_format %s target %s format %s type %s level %d %dx%dx%d\n", __func__, _mesa_get_format_name(texImage->TexFormat), _mesa_enum_to_string(texImage->TexObject->Target), _mesa_enum_to_string(format), _mesa_enum_to_string(type), texImage->Level, texImage->Width, texImage->Height, texImage->Depth); - ok = _mesa_meta_pbo_TexSubImage(ctx, dims, texImage, - xoffset, yoffset, zoffset, - width, height, depth, format, type, - pixels, tex_busy, packing); - if (ok) - return; - - ok = intel_texsubimage_tiled_memcpy(ctx, dims, texImage, - xoffset, yoffset, zoffset, - width, height, depth, - format, type, pixels, packing); - if (ok) - return; - - _mesa_store_texsubimage(ctx, dims, texImage, - xoffset, yoffset, zoffset, - width, height, depth, - format, type, pixels, packing); + intel_upload_tex(ctx, dims, texImage, xoffset, yoffset, zoffset, + width, height, depth, format, type, pixels, packing); } |