projects
/
mesa.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
2addcb7
)
swrast: avoid large stack allocations in blend code
author
Brian Paul
<brianp@vmware.com>
Thu, 2 Dec 2010 21:18:18 +0000
(14:18 -0700)
committer
Brian Paul
<brianp@vmware.com>
Thu, 2 Dec 2010 21:29:07 +0000
(14:29 -0700)
src/mesa/swrast/s_blend.c
patch
|
blob
|
history
diff --git
a/src/mesa/swrast/s_blend.c
b/src/mesa/swrast/s_blend.c
index 1a550c445d3c60543d757858c06303393b395a2f..d61baba0f33bbcf944cacb19fc75afe2e6e7bb0f 100644
(file)
--- 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)
{
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;
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);
}
blend_general_float(ctx, n, mask, (GLfloat (*)[4]) src,
(GLfloat (*)[4]) dst, chanType);
}
+
+ free(rgbaF);
+ free(destF);
}
}