[Mesa-dev] [PATCH] st/mesa: fix accum buffer allocation in st_renderbuffer_alloc_storage()
Brian Paul
brianp at vmware.com
Mon Nov 21 13:03:37 PST 2011
If the gallium driver doesn't support PIPE_FORMAT_R16G16B16A16_SNORM
the call to st_choose_renderbuffer_format() would fail and we'd generate
an GL_OUT_OF_MEMORY error. We'd never get to the subsequent code that
handles software/malloc-based renderbuffers.
Add a special-case check for PIPE_FORMAT_R16G16B16A16_SNORM which is used
for software-based accum buffers. This could be fixed in other ways but
it would be a much larger patch. st_renderbuffer_alloc_storage() could
be reorganized in the future.
This fixes accum buffer allocation for the svga driver.
---
src/mesa/state_tracker/st_cb_fbo.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index a351d11..45f417e 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -75,8 +75,14 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx,
enum pipe_format format;
struct pipe_surface surf_tmpl;
- format = st_choose_renderbuffer_format(screen, internalFormat,
- rb->NumSamples);
+ if (internalFormat == GL_RGBA16_SNORM && strb->software) {
+ /* special case for software accum buffers */
+ format = PIPE_FORMAT_R16G16B16A16_SNORM;
+ }
+ else {
+ format = st_choose_renderbuffer_format(screen, internalFormat,
+ rb->NumSamples);
+ }
if (format == PIPE_FORMAT_NONE) {
return FALSE;
--
1.7.3.4
More information about the mesa-dev
mailing list