diff options
author | Brian Paul <[email protected]> | 2011-12-03 10:04:18 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2011-12-08 08:56:30 -0700 |
commit | 122c6768e3d4c1d1b57203eca70569f9301baab5 (patch) | |
tree | 00e32726c0dd459eb205f5718abe4a3da182b387 /src/mesa/state_tracker | |
parent | aa6cb952c917f4280d75b322c05885fcf7eb6cdb (diff) |
mesa: rewrite accum buffer support
Implemented in terms of renderbuffer mapping/unmapping and format
packing/unpacking functions.
The swrast and state tracker code for implementing accumulation are
unused and will be removed in the next commit.
v2: don't use memcpy() in _mesa_clear_accum_buffer()
v3: don't allocate MAX_WIDTH arrays, be more careful with mapping flags
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r-- | src/mesa/state_tracker/st_cb_clear.c | 5 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_fbo.c | 21 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_context.c | 5 |
3 files changed, 26 insertions, 5 deletions
diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c index 89273e28e89..61d98aeb9a3 100644 --- a/src/mesa/state_tracker/st_cb_clear.c +++ b/src/mesa/state_tracker/st_cb_clear.c @@ -34,12 +34,12 @@ */ #include "main/glheader.h" +#include "main/accum.h" #include "main/formats.h" #include "main/macros.h" #include "program/prog_instruction.h" #include "st_context.h" #include "st_atom.h" -#include "st_cb_accum.h" #include "st_cb_clear.h" #include "st_cb_fbo.h" #include "st_format.h" @@ -599,8 +599,7 @@ st_Clear(struct gl_context *ctx, GLbitfield mask) ctx->Depth.Clear, ctx->Stencil.Clear); } if (mask & BUFFER_BIT_ACCUM) - st_clear_accum_buffer(ctx, - ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer); + _mesa_clear_accum_buffer(ctx); } diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 2a60ed4df8a..ec40a2b70c1 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -667,6 +667,22 @@ st_MapRenderbuffer(struct gl_context *ctx, unsigned usage; GLuint y2; + if (strb->software) { + /* software-allocated renderbuffer (probably an accum buffer) */ + GLubyte *map = (GLubyte *) strb->data; + if (strb->data) { + map += strb->stride * y; + map += util_format_get_blocksize(strb->format) * x; + *mapOut = map; + *rowStrideOut = strb->stride; + } + else { + *mapOut = NULL; + *rowStrideOut = 0; + } + return; + } + usage = 0x0; if (mode & GL_MAP_READ_BIT) usage |= PIPE_TRANSFER_READ; @@ -716,6 +732,11 @@ st_UnmapRenderbuffer(struct gl_context *ctx, struct st_renderbuffer *strb = st_renderbuffer(rb); struct pipe_context *pipe = st->pipe; + if (strb->software) { + /* software-allocated renderbuffer (probably an accum buffer) */ + return; + } + pipe_transfer_unmap(pipe, strb->transfer); pipe->transfer_destroy(pipe, strb->transfer); strb->transfer = NULL; diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index a1817720d90..dc1d33f1dae 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -26,6 +26,7 @@ **************************************************************************/ #include "main/imports.h" +#include "main/accum.h" #include "main/context.h" #include "main/samplerobj.h" #include "main/shaderobj.h" @@ -34,7 +35,6 @@ #include "glapi/glapi.h" #include "st_context.h" #include "st_debug.h" -#include "st_cb_accum.h" #include "st_cb_bitmap.h" #include "st_cb_blit.h" #include "st_cb_bufferobjects.h" @@ -276,7 +276,8 @@ void st_init_driver_functions(struct dd_function_table *functions) _mesa_init_shader_object_functions(functions); _mesa_init_sampler_object_functions(functions); - st_init_accum_functions(functions); + functions->Accum = _mesa_accum; + st_init_blit_functions(functions); st_init_bufferobject_functions(functions); st_init_clear_functions(functions); |