From 5c7d1b592ad9ce9e7ee36610f17d41e5c2881d54 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 4 Dec 2009 11:58:24 -0700 Subject: llvmpipe: remove lp_rast_triangle::oneoverarea field Makes lp_rast_triangle a little smaller (now 280 bytes on a 32-bit system). --- src/gallium/drivers/llvmpipe/lp_rast.h | 5 ----- src/gallium/drivers/llvmpipe/lp_setup_tri.c | 32 ++++++++++++++++------------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_rast.h b/src/gallium/drivers/llvmpipe/lp_rast.h index e9a1fa49ad..a119b089bd 100644 --- a/src/gallium/drivers/llvmpipe/lp_rast.h +++ b/src/gallium/drivers/llvmpipe/lp_rast.h @@ -108,11 +108,6 @@ struct lp_rast_triangle { int step[3][16]; - /* XXX: this is only used inside lp_setup_tri.c, don't really - * need it here: - */ - float oneoverarea; - /* inputs for the shader */ struct lp_rast_shader_inputs inputs; }; diff --git a/src/gallium/drivers/llvmpipe/lp_setup_tri.c b/src/gallium/drivers/llvmpipe/lp_setup_tri.c index 48733a599b..56a32d0ac0 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup_tri.c +++ b/src/gallium/drivers/llvmpipe/lp_setup_tri.c @@ -54,6 +54,7 @@ static void constant_coef( struct lp_rast_triangle *tri, * for a triangle. */ static void linear_coef( struct lp_rast_triangle *tri, + float oneoverarea, unsigned slot, const float (*v1)[4], const float (*v2)[4], @@ -67,8 +68,8 @@ static void linear_coef( struct lp_rast_triangle *tri, float da12 = a1 - a2; float da31 = a3 - a1; - float dadx = (da12 * tri->dy31 - tri->dy12 * da31) * tri->oneoverarea; - float dady = (da31 * tri->dx12 - tri->dx31 * da12) * tri->oneoverarea; + float dadx = (da12 * tri->dy31 - tri->dy12 * da31) * oneoverarea; + float dady = (da31 * tri->dx12 - tri->dx31 * da12) * oneoverarea; tri->inputs.dadx[slot][i] = dadx; tri->inputs.dady[slot][i] = dady; @@ -100,6 +101,7 @@ static void linear_coef( struct lp_rast_triangle *tri, * divide the interpolated value by the interpolated W at that fragment. */ static void perspective_coef( struct lp_rast_triangle *tri, + float oneoverarea, unsigned slot, const float (*v1)[4], const float (*v2)[4], @@ -114,8 +116,8 @@ static void perspective_coef( struct lp_rast_triangle *tri, float a3 = v3[vert_attr][i] * v3[0][3]; float da12 = a1 - a2; float da31 = a3 - a1; - float dadx = (da12 * tri->dy31 - tri->dy12 * da31) * tri->oneoverarea; - float dady = (da31 * tri->dx12 - tri->dx31 * da12) * tri->oneoverarea; + float dadx = (da12 * tri->dy31 - tri->dy12 * da31) * oneoverarea; + float dady = (da31 * tri->dx12 - tri->dx31 * da12) * oneoverarea; tri->inputs.dadx[slot][i] = dadx; tri->inputs.dady[slot][i] = dady; @@ -133,6 +135,7 @@ static void perspective_coef( struct lp_rast_triangle *tri, */ static void setup_fragcoord_coef(struct lp_rast_triangle *tri, + float oneoverarea, unsigned slot, const float (*v1)[4], const float (*v2)[4], @@ -147,9 +150,9 @@ setup_fragcoord_coef(struct lp_rast_triangle *tri, tri->inputs.dadx[slot][1] = 0.0; tri->inputs.dady[slot][1] = 1.0; /*Z*/ - linear_coef(tri, slot, v1, v2, v3, 0, 2); + linear_coef(tri, oneoverarea, slot, v1, v2, v3, 0, 2); /*W*/ - linear_coef(tri, slot, v1, v2, v3, 0, 3); + linear_coef(tri, oneoverarea, slot, v1, v2, v3, 0, 3); } @@ -169,10 +172,11 @@ static void setup_facing_coef( struct lp_rast_triangle *tri, */ static void setup_tri_coefficients( struct setup_context *setup, struct lp_rast_triangle *tri, + float oneoverarea, const float (*v1)[4], const float (*v2)[4], const float (*v3)[4], - boolean frontface ) + boolean frontface) { unsigned slot; @@ -188,7 +192,7 @@ static void setup_tri_coefficients( struct setup_context *setup, /* The internal position input is in slot zero: */ - setup_fragcoord_coef(tri, 0, v1, v2, v3); + setup_fragcoord_coef(tri, oneoverarea, 0, v1, v2, v3); /* setup interpolation for all the remaining attributes: */ @@ -204,18 +208,18 @@ static void setup_tri_coefficients( struct setup_context *setup, case LP_INTERP_LINEAR: for (i = 0; i < NUM_CHANNELS; i++) - linear_coef(tri, slot+1, v1, v2, v3, vert_attr, i); + linear_coef(tri, oneoverarea, slot+1, v1, v2, v3, vert_attr, i); break; case LP_INTERP_PERSPECTIVE: for (i = 0; i < NUM_CHANNELS; i++) - perspective_coef(tri, slot+1, v1, v2, v3, vert_attr, i); + perspective_coef(tri, oneoverarea, slot+1, v1, v2, v3, vert_attr, i); break; case LP_INTERP_POSITION: /* XXX: fix me - duplicates the values in slot zero. */ - setup_fragcoord_coef(tri, slot+1, v1, v2, v3); + setup_fragcoord_coef(tri, oneoverarea, slot+1, v1, v2, v3); break; case LP_INTERP_FACING: @@ -260,7 +264,7 @@ do_triangle_ccw(struct setup_context *setup, const int y3 = subpixel_snap(v3[0][1]); struct lp_rast_triangle *tri = get_data( &setup->data, sizeof *tri ); - float area; + float area, oneoverarea; int minx, maxx, miny, maxy; tri->dx12 = x1 - x2; @@ -297,11 +301,11 @@ do_triangle_ccw(struct setup_context *setup, /* */ - tri->oneoverarea = ((float)FIXED_ONE) / (float)area; + oneoverarea = ((float)FIXED_ONE) / (float)area; /* Setup parameter interpolants: */ - setup_tri_coefficients( setup, tri, v1, v2, v3, frontfacing ); + setup_tri_coefficients( setup, tri, oneoverarea, v1, v2, v3, frontfacing ); /* half-edge constants, will be interated over the whole * rendertarget. -- cgit v1.2.3