Discussion:
[EGIT] [core/efl] master 01/01: ector software: Be careful at alloca() usage.
Hermet Park
2018-12-07 10:56:10 UTC
Permalink
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e6f66e56fdc0989e73fc54809dea5368df68cfab

commit e6f66e56fdc0989e73fc54809dea5368df68cfab
Author: Hermet Park <***@gmail.com>
Date: Fri Dec 7 19:54:41 2018 +0900

ector software: Be careful at alloca() usage.

allocate one spare span memory then reuse it.
---
src/lib/ector/software/ector_software_rasterizer.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/lib/ector/software/ector_software_rasterizer.c b/src/lib/ector/software/ector_software_rasterizer.c
index 7a03bb69f2..d9b3351248 100644
--- a/src/lib/ector/software/ector_software_rasterizer.c
+++ b/src/lib/ector/software/ector_software_rasterizer.c
@@ -49,12 +49,16 @@ _blend_color_argb_with_maskA(int count, const SW_FT_Span *spans, void *user_data
sd->raster_buffer->pixels.u32 + ((pix_stride * sd->offy) + sd->offx);
uint32_t *mbuffer = mask->pixels.u32;

+ //Temp buffer for intermediate processing
+ int tsize = sd->raster_buffer->generic->w;
+ uint32_t *tbuffer = alloca(sizeof(uint32_t) * tsize);
+
while (count--)
{
uint32_t *target = buffer + ((pix_stride * spans->y) + spans->x);
uint32_t *mtarget =
mbuffer + ((mask->generic->w * spans->y) + spans->x);
- uint32_t *temp = alloca(sizeof(uint32_t) * spans->len);
+ uint32_t *temp = tbuffer;
memset(temp, 0x00, sizeof(uint32_t) * spans->len);
comp_func(temp, spans->len, color, spans->coverage);

@@ -88,12 +92,16 @@ _blend_color_argb_with_maskInvA(int count, const SW_FT_Span *spans, void *user_d
sd->raster_buffer->pixels.u32 + ((pix_stride * sd->offy) + sd->offx);
uint32_t *mbuffer = mask->pixels.u32;

+ //Temp buffer for intermediate processing
+ int tsize = sd->raster_buffer->generic->w;
+ uint32_t *tbuffer = alloca(sizeof(uint32_t) * tsize);
+
while (count--)
{
uint32_t *target = buffer + ((pix_stride * spans->y) + spans->x);
uint32_t *mtarget =
mbuffer + ((mask->generic->w * spans->y) + spans->x);
- uint32_t *temp = alloca(sizeof(uint32_t) * spans->len);
+ uint32_t *temp = tbuffer;
memset(temp, 0x00, sizeof(uint32_t) * spans->len);
comp_func(temp, spans->len, color, spans->coverage);


--

Loading...