mesa: consolidate PBO map/unmap helpers
Instead of _mesa_map_readpix_pbo() use _mesa_map_pbo_source(). Instead of _mesa_map_drawpix_pbo() and _mesa_map_bitmap_pbo() use _mesa_map_pbo_dest().
This commit is contained in:
@@ -658,6 +658,8 @@ _mesa_update_default_objects_buffer_objects(GLcontext *ctx)
|
||||
* currently mapped. Whoever calls this function should check for that.
|
||||
* Remember, we can't use a PBO when it's mapped!
|
||||
*
|
||||
* If we're not using a PBO, this is a no-op.
|
||||
*
|
||||
* \param width width of image to read/write
|
||||
* \param height height of image to read/write
|
||||
* \param depth depth of image to read/write
|
||||
@@ -676,7 +678,8 @@ _mesa_validate_pbo_access(GLuint dimensions,
|
||||
GLvoid *start, *end;
|
||||
const GLubyte *sizeAddr; /* buffer size, cast to a pointer */
|
||||
|
||||
ASSERT(_mesa_is_bufferobj(pack->BufferObj));
|
||||
if (!_mesa_is_bufferobj(pack->BufferObj))
|
||||
return GL_TRUE; /* no PBO, OK */
|
||||
|
||||
if (pack->BufferObj->Size == 0)
|
||||
/* no buffer! */
|
||||
@@ -708,17 +711,18 @@ _mesa_validate_pbo_access(GLuint dimensions,
|
||||
|
||||
|
||||
/**
|
||||
* If the source of glBitmap data is a PBO, check that we won't read out
|
||||
* of buffer bounds, then map the buffer.
|
||||
* If not sourcing from a PBO, just return the bitmap pointer.
|
||||
* This is a helper function for (some) drivers.
|
||||
* Return NULL if error.
|
||||
* If non-null return, must call _mesa_unmap_bitmap_pbo() when done.
|
||||
* For commands that read from a PBO (glDrawPixels, glTexImage,
|
||||
* glPolygonStipple, etc), if we're reading from a PBO, map it read-only
|
||||
* and return the pointer into the PBO. If we're not reading from a
|
||||
* PBO, return \p src as-is.
|
||||
* If non-null return, must call _mesa_unmap_pbo_source() when done.
|
||||
*
|
||||
* \return NULL if error, else pointer to start of data
|
||||
*/
|
||||
const GLubyte *
|
||||
_mesa_map_bitmap_pbo(GLcontext *ctx,
|
||||
const GLvoid *
|
||||
_mesa_map_pbo_source(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *unpack,
|
||||
const GLubyte *bitmap)
|
||||
const GLvoid *src)
|
||||
{
|
||||
const GLubyte *buf;
|
||||
|
||||
@@ -730,11 +734,11 @@ _mesa_map_bitmap_pbo(GLcontext *ctx,
|
||||
if (!buf)
|
||||
return NULL;
|
||||
|
||||
buf = ADD_POINTERS(buf, bitmap);
|
||||
buf = ADD_POINTERS(buf, src);
|
||||
}
|
||||
else {
|
||||
/* unpack from normal memory */
|
||||
buf = bitmap;
|
||||
buf = src;
|
||||
}
|
||||
|
||||
return buf;
|
||||
@@ -742,13 +746,13 @@ _mesa_map_bitmap_pbo(GLcontext *ctx,
|
||||
|
||||
|
||||
/**
|
||||
* Counterpart to _mesa_map_bitmap_pbo()
|
||||
* This is a helper function for (some) drivers.
|
||||
* Counterpart to _mesa_map_pbo_source()
|
||||
*/
|
||||
void
|
||||
_mesa_unmap_bitmap_pbo(GLcontext *ctx,
|
||||
_mesa_unmap_pbo_source(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *unpack)
|
||||
{
|
||||
ASSERT(unpack != &ctx->Pack); /* catch pack/unpack mismatch */
|
||||
if (_mesa_is_bufferobj(unpack->BufferObj)) {
|
||||
ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT,
|
||||
unpack->BufferObj);
|
||||
@@ -757,57 +761,17 @@ _mesa_unmap_bitmap_pbo(GLcontext *ctx,
|
||||
|
||||
|
||||
/**
|
||||
* \sa _mesa_map_bitmap_pbo
|
||||
*/
|
||||
const GLvoid *
|
||||
_mesa_map_drawpix_pbo(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *unpack,
|
||||
const GLvoid *pixels)
|
||||
{
|
||||
const GLvoid *buf;
|
||||
|
||||
if (_mesa_is_bufferobj(unpack->BufferObj)) {
|
||||
/* unpack from PBO */
|
||||
buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT,
|
||||
GL_READ_ONLY_ARB,
|
||||
unpack->BufferObj);
|
||||
if (!buf)
|
||||
return NULL;
|
||||
|
||||
buf = ADD_POINTERS(buf, pixels);
|
||||
}
|
||||
else {
|
||||
/* unpack from normal memory */
|
||||
buf = pixels;
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \sa _mesa_unmap_bitmap_pbo
|
||||
*/
|
||||
void
|
||||
_mesa_unmap_drawpix_pbo(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *unpack)
|
||||
{
|
||||
if (_mesa_is_bufferobj(unpack->BufferObj)) {
|
||||
ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT,
|
||||
unpack->BufferObj);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* If PBO is bound, map the buffer, return dest pointer in mapped buffer.
|
||||
* Call _mesa_unmap_readpix_pbo() when finished
|
||||
* \return NULL if error
|
||||
* For commands that write to a PBO (glReadPixels, glGetColorTable, etc),
|
||||
* if we're writing to a PBO, map it write-only and return the pointer
|
||||
* into the PBO. If we're not writing to a PBO, return \p dst as-is.
|
||||
* If non-null return, must call _mesa_unmap_pbo_dest() when done.
|
||||
*
|
||||
* \return NULL if error, else pointer to start of data
|
||||
*/
|
||||
void *
|
||||
_mesa_map_readpix_pbo(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *pack,
|
||||
GLvoid *dest)
|
||||
_mesa_map_pbo_dest(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *pack,
|
||||
GLvoid *dest)
|
||||
{
|
||||
void *buf;
|
||||
|
||||
@@ -831,12 +795,13 @@ _mesa_map_readpix_pbo(GLcontext *ctx,
|
||||
|
||||
|
||||
/**
|
||||
* Counterpart to _mesa_map_readpix_pbo()
|
||||
* Counterpart to _mesa_map_pbo_dest()
|
||||
*/
|
||||
void
|
||||
_mesa_unmap_readpix_pbo(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *pack)
|
||||
_mesa_unmap_pbo_dest(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *pack)
|
||||
{
|
||||
ASSERT(pack != &ctx->Unpack); /* catch pack/unpack mismatch */
|
||||
if (_mesa_is_bufferobj(pack->BufferObj)) {
|
||||
ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT, pack->BufferObj);
|
||||
}
|
||||
|
@@ -81,32 +81,23 @@ _mesa_validate_pbo_access(GLuint dimensions,
|
||||
GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum format, GLenum type, const GLvoid *ptr);
|
||||
|
||||
extern const GLubyte *
|
||||
_mesa_map_bitmap_pbo(GLcontext *ctx,
|
||||
extern const GLvoid *
|
||||
_mesa_map_pbo_source(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *unpack,
|
||||
const GLubyte *bitmap);
|
||||
const GLvoid *src);
|
||||
|
||||
extern void
|
||||
_mesa_unmap_bitmap_pbo(GLcontext *ctx,
|
||||
_mesa_unmap_pbo_source(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *unpack);
|
||||
|
||||
extern const GLvoid *
|
||||
_mesa_map_drawpix_pbo(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *unpack,
|
||||
const GLvoid *pixels);
|
||||
|
||||
extern void
|
||||
_mesa_unmap_drawpix_pbo(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *unpack);
|
||||
|
||||
extern void *
|
||||
_mesa_map_readpix_pbo(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *pack,
|
||||
GLvoid *dest);
|
||||
_mesa_map_pbo_dest(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *pack,
|
||||
GLvoid *dest);
|
||||
|
||||
extern void
|
||||
_mesa_unmap_readpix_pbo(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *pack);
|
||||
_mesa_unmap_pbo_dest(GLcontext *ctx,
|
||||
const struct gl_pixelstore_attrib *pack);
|
||||
|
||||
|
||||
extern void
|
||||
|
@@ -275,7 +275,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height,
|
||||
struct pipe_texture *pt;
|
||||
|
||||
/* PBO source... */
|
||||
bitmap = _mesa_map_bitmap_pbo(ctx, unpack, bitmap);
|
||||
bitmap = _mesa_map_pbo_source(ctx, unpack, bitmap);
|
||||
if (!bitmap) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -287,7 +287,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height,
|
||||
0, width, height, 1,
|
||||
PIPE_TEXTURE_USAGE_SAMPLER);
|
||||
if (!pt) {
|
||||
_mesa_unmap_bitmap_pbo(ctx, unpack);
|
||||
_mesa_unmap_pbo_source(ctx, unpack);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -302,7 +302,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height,
|
||||
unpack_bitmap(ctx->st, 0, 0, width, height, unpack, bitmap,
|
||||
dest, transfer->stride);
|
||||
|
||||
_mesa_unmap_bitmap_pbo(ctx, unpack);
|
||||
_mesa_unmap_pbo_source(ctx, unpack);
|
||||
|
||||
/* Release transfer */
|
||||
screen->transfer_unmap(screen, transfer);
|
||||
|
@@ -353,7 +353,7 @@ make_texture(struct st_context *st,
|
||||
assert(pipeFormat);
|
||||
cpp = st_sizeof_format(pipeFormat);
|
||||
|
||||
pixels = _mesa_map_drawpix_pbo(ctx, unpack, pixels);
|
||||
pixels = _mesa_map_pbo_source(ctx, unpack, pixels);
|
||||
if (!pixels)
|
||||
return NULL;
|
||||
|
||||
@@ -381,7 +381,7 @@ make_texture(struct st_context *st,
|
||||
pt = st_texture_create(st, PIPE_TEXTURE_2D, pipeFormat, 0, ptw, pth, 1,
|
||||
PIPE_TEXTURE_USAGE_SAMPLER);
|
||||
if (!pt) {
|
||||
_mesa_unmap_drawpix_pbo(ctx, unpack);
|
||||
_mesa_unmap_pbo_source(ctx, unpack);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -428,7 +428,7 @@ make_texture(struct st_context *st,
|
||||
ctx->_ImageTransferState = imageTransferStateSave;
|
||||
}
|
||||
|
||||
_mesa_unmap_drawpix_pbo(ctx, unpack);
|
||||
_mesa_unmap_pbo_source(ctx, unpack);
|
||||
|
||||
return pt;
|
||||
}
|
||||
@@ -681,7 +681,7 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
|
||||
stmap = screen->transfer_map(screen, pt);
|
||||
|
||||
pixels = _mesa_map_drawpix_pbo(ctx, unpack, pixels);
|
||||
pixels = _mesa_map_pbo_source(ctx, unpack, pixels);
|
||||
assert(pixels);
|
||||
|
||||
/* if width > MAX_WIDTH, have to process image in chunks */
|
||||
@@ -775,7 +775,7 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
skipPixels += spanWidth;
|
||||
}
|
||||
|
||||
_mesa_unmap_drawpix_pbo(ctx, unpack);
|
||||
_mesa_unmap_pbo_source(ctx, unpack);
|
||||
|
||||
/* unmap the stencil buffer */
|
||||
screen->transfer_unmap(screen, pt);
|
||||
|
@@ -353,7 +353,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
return;
|
||||
}
|
||||
|
||||
dest = _mesa_map_readpix_pbo(ctx, &clippedPacking, dest);
|
||||
dest = _mesa_map_pbo_dest(ctx, &clippedPacking, dest);
|
||||
if (!dest)
|
||||
return;
|
||||
|
||||
@@ -380,7 +380,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
if (st_fast_readpixels(ctx, strb, x, y, width, height,
|
||||
format, type, pack, dest)) {
|
||||
/* success! */
|
||||
_mesa_unmap_readpix_pbo(ctx, &clippedPacking);
|
||||
_mesa_unmap_pbo_dest(ctx, &clippedPacking);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -534,7 +534,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
|
||||
screen->tex_transfer_destroy(trans);
|
||||
|
||||
_mesa_unmap_readpix_pbo(ctx, &clippedPacking);
|
||||
_mesa_unmap_pbo_dest(ctx, &clippedPacking);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -870,7 +870,7 @@ decompress_with_blit(GLcontext * ctx, GLenum target, GLint level,
|
||||
PIPE_TRANSFER_READ,
|
||||
0, 0, width, height);
|
||||
|
||||
pixels = _mesa_map_readpix_pbo(ctx, &ctx->Pack, pixels);
|
||||
pixels = _mesa_map_pbo_dest(ctx, &ctx->Pack, pixels);
|
||||
|
||||
/* copy/pack data into user buffer */
|
||||
if (st_equal_formats(stImage->pt->format, format, type)) {
|
||||
@@ -903,7 +903,7 @@ decompress_with_blit(GLcontext * ctx, GLenum target, GLint level,
|
||||
}
|
||||
}
|
||||
|
||||
_mesa_unmap_readpix_pbo(ctx, &ctx->Pack);
|
||||
_mesa_unmap_pbo_dest(ctx, &ctx->Pack);
|
||||
|
||||
/* destroy the temp / dest surface */
|
||||
util_destroy_rgba_surface(dst_texture, dst_surface);
|
||||
|
@@ -56,7 +56,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,
|
||||
|
||||
ASSERT(ctx->RenderMode == GL_RENDER);
|
||||
|
||||
bitmap = _mesa_map_bitmap_pbo(ctx, unpack, bitmap);
|
||||
bitmap = (const GLubyte *) _mesa_map_pbo_source(ctx, unpack, bitmap);
|
||||
if (!bitmap)
|
||||
return;
|
||||
|
||||
@@ -133,7 +133,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,
|
||||
|
||||
swrast_render_finish(ctx);
|
||||
|
||||
_mesa_unmap_bitmap_pbo(ctx, unpack);
|
||||
_mesa_unmap_pbo_source(ctx, unpack);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -847,7 +847,7 @@ _swrast_DrawPixels( GLcontext *ctx,
|
||||
if (swrast->NewState)
|
||||
_swrast_validate_derived( ctx );
|
||||
|
||||
pixels = _mesa_map_drawpix_pbo(ctx, unpack, pixels);
|
||||
pixels = _mesa_map_pbo_source(ctx, unpack, pixels);
|
||||
if (!pixels) {
|
||||
swrast_render_finish(ctx);
|
||||
_mesa_set_vp_override(ctx, save_vp_override);
|
||||
@@ -892,7 +892,7 @@ _swrast_DrawPixels( GLcontext *ctx,
|
||||
swrast_render_finish(ctx);
|
||||
_mesa_set_vp_override(ctx, save_vp_override);
|
||||
|
||||
_mesa_unmap_drawpix_pbo(ctx, unpack);
|
||||
_mesa_unmap_pbo_source(ctx, unpack);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -574,7 +574,7 @@ _swrast_ReadPixels( GLcontext *ctx,
|
||||
return;
|
||||
}
|
||||
|
||||
pixels = _mesa_map_readpix_pbo(ctx, &clippedPacking, pixels);
|
||||
pixels = _mesa_map_pbo_dest(ctx, &clippedPacking, pixels);
|
||||
if (!pixels)
|
||||
return;
|
||||
|
||||
@@ -616,5 +616,5 @@ _swrast_ReadPixels( GLcontext *ctx,
|
||||
|
||||
swrast_render_finish(ctx);
|
||||
|
||||
_mesa_unmap_readpix_pbo(ctx, &clippedPacking);
|
||||
_mesa_unmap_pbo_dest(ctx, &clippedPacking);
|
||||
}
|
||||
|
Reference in New Issue
Block a user