On Thu, 29 Sep 2011 17:02:28 -0600, Brian Paul <bri...@vmware.com> wrote: > On 09/29/2011 04:39 PM, Eric Anholt wrote: > > --- > > src/mesa/drivers/dri/intel/intel_tex_image.c | 59 > > ++++---------------------- > > 1 files changed, 8 insertions(+), 51 deletions(-) > > > > diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c > > b/src/mesa/drivers/dri/intel/intel_tex_image.c > > index c0f609f..8c87a25 100644 > > --- a/src/mesa/drivers/dri/intel/intel_tex_image.c > > +++ b/src/mesa/drivers/dri/intel/intel_tex_image.c > > @@ -403,61 +403,18 @@ intelTexImage(struct gl_context * ctx, > > return; > > } > > > > - pixels = _mesa_validate_pbo_teximage(ctx, dims, width, height, 1, > > - format, type, > > - pixels, unpack, "glTexImage"); > > - > > - if (intelImage->mt) { > > - if (pixels != NULL) { > > - /* Flush any queued rendering with the texture before mapping. */ > > - if (drm_intel_bo_references(intel->batch.bo, > > - intelImage->mt->region->bo)) { > > - intel_flush(ctx); > > - } > > - texImage->Data = intel_miptree_image_map(intel, > > - intelImage->mt, > > - > > intelImage->base.Base.Face, > > - > > intelImage->base.Base.Level, > > -&dstRowStride, > > - > > intelImage->base.Base.ImageOffsets); > > - } > > - > > - texImage->RowStride = dstRowStride / intelImage->mt->cpp; > > - } > > - > > DBG("Upload image %dx%dx%d row_len %d pitch %d pixels %d\n", > > width, height, depth, width * texelBytes, dstRowStride, > > pixels ? 1 : 0); > > > > - /* Copy data. Would like to know when it's ok for us to eg. use > > - * the blitter to copy. Or, use the hardware to do the format > > - * conversion and copy: > > - */ > > - if (pixels) { > > - if (!_mesa_texstore(ctx, dims, > > - texImage->_BaseFormat, > > - texImage->TexFormat, > > - texImage->Data, 0, 0, 0, /* dstX/Y/Zoffset */ > > - dstRowStride, > > - texImage->ImageOffsets, > > - width, height, depth, > > - format, type, pixels, unpack)) { > > - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage"); > > - } > > - } > > - > > - _mesa_unmap_teximage_pbo(ctx, unpack); > > - > > - if (intel->must_use_separate_stencil > > -&& texImage->TexFormat == MESA_FORMAT_S8_Z24) { > > - intel_tex_image_s8z24_create_renderbuffers(intel, intelImage); > > - intel_tex_image_s8z24_scatter(intel, intelImage); > > - } > > - > > - if (intelImage->mt) { > > - if (pixels != NULL) > > - intel_miptree_image_unmap(intel, intelImage->mt); > > - texImage->Data = NULL; > > + if (pixels || _mesa_is_bufferobj(unpack->BufferObj)) { > > + _mesa_store_teximage3d(ctx, target, level, internalFormat, > > + width, height, depth, border, > > + format, type, pixels, > > + unpack, texObj, texImage); > > + } else { > > + ctx->Driver.AllocTextureImageBuffer(ctx, texImage, > > texImage->TexFormat, > > + width, height, depth); > > } > > } > > > > I think you can simplify this even more. > > I think you can omit the conditional and always call > _mesa_store_teximage3d() because that function will call > ctx->Driver.AllocTextureImageBuffer() and return early if there's no > pixel data to put into the texture buffer.
Good call. I think there may be a related point to be made about _mesa_store_teximage2d's code for 1D arrays, too. I'll poke at them both.
pgp9M4p1N7VIH.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev