summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-05-31 13:48:10 -0700
committerKenneth Graunke <[email protected]>2017-09-15 10:59:05 -0700
commit7bd5931cc1e1102e0171ca70bd2d6bbad81f71dc (patch)
tree0e99a57de0fc5c10bddbf2701931f35cffae5314
parentbb811fa8282a0117e81354ab6ac91deb1c37d2ed (diff)
i965/tex: Unify the TexImage and TexSubImage code
It's nearly the same so there's no good reason why it can't be in a common function. The one difference is that _mesa_store_teximage calls AllocTextureImageBuffer for us, while _mesa_store_texsubimage doesn't, but we don't need that anyway - intelTexImage already does it. Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/intel_tex_image.c103
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);
}