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