[Mesa-dev] RFC: ctx->Driver.Map/UnmapTextureImage() hooks

Brian Paul brianp at vmware.com
Fri Jun 24 10:31:07 PDT 2011


On 06/24/2011 11:27 AM, Eric Anholt wrote:
> On Thu, 23 Jun 2011 19:08:51 -0600, Brian Paul<brianp at vmware.com>  wrote:
>>
>> I'd like to overhaul the part of Mesa related to texture memory
>> reading/writing.
>>
>> The basic idea would be to add two new driver functions:
>>
>> /**
>>    * Map a 2D slice of a texture image into user space.
>>    * (x,y,w,h) defines a region of interest (ROI).  Reading/writing
>>    * texels outside of the ROI is undefined.
>>    *
>>    * \param texObj  the texture object
>>    * \param level  the mipmap level
>>    * \param faceSlice  the cube face or 3D/array image slice
>>    * \param x, y, w, h  region of interest
>>    * \param mode  bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT
>>    * \param mapOut  returns start of mapping of ROI
>>    * \param rowStrideOut  returns row stride (in bytes)
>>    */
>> void (*MapTextureImage)(struct gl_context *ctx,
>>                           struct gl_texture_object *texObj,
>>                           GLuint level, GLuint faceSlice,
>>                           GLuint x, GLuint y, GLuint w, GLuint h,
>>                           GLbitfield mode,
>>                           GLubyte **mapOut, GLint *rowStrideOut);
>>
>> void (*UnmapTextureImage)(struct gl_context *ctx,
>>                             struct gl_texture_object *texObj,
>>                             GLuint level, GLuint faceSlice);
>>
>>
>> glTexImage() would use these when loading texture data.  Similarly
>> when glGetTexImage() returns texture data.  swrast would also use
>> these before/after rendering.
>>
>> We'd get rid of these fields:
>>
>> struct gl_texture_image
>> {
>>      ...
>>      FetchTexelFuncC FetchTexelc;
>>      FetchTexelFuncF FetchTexelf;
>>      GLuint RowStride;
>>      GLuint *ImageOffsets;
>>      GLvoid *Data;
>> ...
>> }
>>
>> The texel fetch/store code would get pushed into swrast.
>>
>> The next step would be to do the same thing for renderbuffers and get
>> rid of all the Read/WriteSpan() stuff.
>>
>> After that, maybe unify texture images and renderbuffers.  I think I'd
>> like to do these things step by step to avoid too much disruption.
>
> I'm thoroughly in favor of this plan.  Also, thanks for making stride in
> bytes -- strides in pixels is one of the things I want to get rid of in
> our driver.

OK, I'll be on vacation next week but I hope to have some time to work 
on this then.

-Brian


More information about the mesa-dev mailing list