[Mesa-dev] [PATCH 04/16] intel: Rely on Mesa core for glTexImage storage.

Eric Anholt eric at anholt.net
Thu Sep 29 19:26:34 PDT 2011


On Thu, 29 Sep 2011 17:02:28 -0600, Brian Paul <brianp at 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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20110929/ca8f1c59/attachment.pgp>


More information about the mesa-dev mailing list