Mesa (master): swrast: avoid large stack allocations in blend code

Brian Paul brianp at kemper.freedesktop.org
Thu Dec 2 21:30:06 UTC 2010


Module: Mesa
Branch: master
Commit: 25662f878ea5f3a8c55506d0becafe2c0a6370f2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=25662f878ea5f3a8c55506d0becafe2c0a6370f2

Author: Brian Paul <brianp at vmware.com>
Date:   Thu Dec  2 14:18:18 2010 -0700

swrast: avoid large stack allocations in blend code

---

 src/mesa/swrast/s_blend.c |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/src/mesa/swrast/s_blend.c b/src/mesa/swrast/s_blend.c
index 1a550c4..d61baba 100644
--- a/src/mesa/swrast/s_blend.c
+++ b/src/mesa/swrast/s_blend.c
@@ -819,7 +819,16 @@ static void
 blend_general(struct gl_context *ctx, GLuint n, const GLubyte mask[],
               void *src, const void *dst, GLenum chanType)
 {
-   GLfloat rgbaF[MAX_WIDTH][4], destF[MAX_WIDTH][4];
+   GLfloat (*rgbaF)[4], (*destF)[4];
+
+   rgbaF = (GLfloat (*)[4]) malloc(4 * n * sizeof(GLfloat));
+   destF = (GLfloat (*)[4]) malloc(4 * n * sizeof(GLfloat));
+   if (!rgbaF || !destF) {
+      free(rgbaF);
+      free(destF);
+      _mesa_error(ctx, GL_OUT_OF_MEMORY, "blending");
+      return;
+   }
 
    if (chanType == GL_UNSIGNED_BYTE) {
       GLubyte (*rgba)[4] = (GLubyte (*)[4]) src;
@@ -883,6 +892,9 @@ blend_general(struct gl_context *ctx, GLuint n, const GLubyte mask[],
       blend_general_float(ctx, n, mask, (GLfloat (*)[4]) src,
                           (GLfloat (*)[4]) dst, chanType);
    }
+
+   free(rgbaF);
+   free(destF);
 }
 
 




More information about the mesa-commit mailing list