[Mesa-dev] [PATCH 4/7] intel: Move more of the PBO blit upload logic into that function.
Eric Anholt
eric at anholt.net
Wed Sep 21 10:15:46 PDT 2011
This also improves the debugging output in the failure paths so you
get more than just "failed", and don't get spammed with "failed" when
you didn't even have a PBO to try.
---
src/mesa/drivers/dri/intel/intel_tex_image.c | 54 +++++++++++++++-----------
1 files changed, 31 insertions(+), 23 deletions(-)
diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c b/src/mesa/drivers/dri/intel/intel_tex_image.c
index 6db27bc..18fccba 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_image.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_image.c
@@ -156,10 +156,11 @@ check_pbo_format(GLint internalFormat,
/* XXX: Do this for TexSubImage also:
*/
-static GLboolean
+static bool
try_pbo_upload(struct intel_context *intel,
struct intel_texture_image *intelImage,
const struct gl_pixelstore_attrib *unpack,
+ GLenum format, GLenum type,
GLint width, GLint height, const void *pixels)
{
struct intel_buffer_object *pbo = intel_buffer_object(unpack->BufferObj);
@@ -169,11 +170,28 @@ try_pbo_upload(struct intel_context *intel,
intelImage->mt->region,
INTEL_WRITE_FULL);
- if (!_mesa_is_bufferobj(unpack->BufferObj) ||
- intel->ctx._ImageTransferState ||
+ if (!_mesa_is_bufferobj(unpack->BufferObj))
+ return false;
+
+ DBG("trying pbo upload\n");
+
+ if (!intelImage->mt) {
+ DBG("%s: no miptree\n", __FUNCTION__);
+ return false;
+ }
+
+ if (intel->ctx._ImageTransferState ||
unpack->SkipPixels || unpack->SkipRows) {
- DBG("%s: failure 1\n", __FUNCTION__);
- return GL_FALSE;
+ DBG("%s: image transfer\n", __FUNCTION__);
+ return false;
+ }
+
+ if (!check_pbo_format(intelImage->base.Base.InternalFormat, format,
+ type, intelImage->base.Base.TexFormat)) {
+ DBG("%s: format mismatch (upload to %s with format 0x%x, type 0x%x)\n",
+ __FUNCTION__, _mesa_get_format_name(intelImage->base.Base.TexFormat),
+ format, type);
+ return false;
}
/* note: potential 64-bit ptr to 32-bit int cast */
@@ -206,11 +224,13 @@ try_pbo_upload(struct intel_context *intel,
intelImage->mt->region->tiling,
0, 0, dst_x, dst_y, width, height,
GL_COPY)) {
- return GL_FALSE;
+ DBG("%s: blit failed\n", __FUNCTION__);
+ return false;
}
}
- return GL_TRUE;
+ DBG("%s: success\n", __FUNCTION__);
+ return true;
}
/**
@@ -398,24 +418,12 @@ intelTexImage(struct gl_context * ctx,
}
}
- /* PBO fastpaths:
+ /* Attempt to use the blitter for PBO image uploads.
*/
if (dims <= 2 &&
- intelImage->mt &&
- _mesa_is_bufferobj(unpack->BufferObj) &&
- check_pbo_format(internalFormat, format,
- type, intelImage->base.Base.TexFormat)) {
-
- DBG("trying pbo upload\n");
-
- /* Otherwise, attempt to use the blitter for PBO image uploads.
- */
- if (try_pbo_upload(intel, intelImage, unpack, width, height, pixels)) {
- DBG("pbo upload succeeded\n");
- return;
- }
-
- DBG("pbo upload failed\n");
+ try_pbo_upload(intel, intelImage, unpack, format, type,
+ width, height, pixels)) {
+ return;
}
/* intelCopyTexImage calls this function with pixels == NULL, with
--
1.7.5.4
More information about the mesa-dev
mailing list