diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/softpipe/sp_setup.c | 97 |
1 files changed, 57 insertions, 40 deletions
diff --git a/src/gallium/drivers/softpipe/sp_setup.c b/src/gallium/drivers/softpipe/sp_setup.c index 42c254c7a88..61be55cdd3d 100644 --- a/src/gallium/drivers/softpipe/sp_setup.c +++ b/src/gallium/drivers/softpipe/sp_setup.c @@ -47,6 +47,7 @@ #define DEBUG_VERTS 0 #define DEBUG_FRAGS 0 + /** * Triangle edge info */ @@ -68,7 +69,7 @@ struct edge { /** - * Triangle setup info (derived from draw_stage). + * Triangle setup info. * Also used for line drawing (taking some liberties). */ struct setup_context { @@ -145,7 +146,7 @@ cull_tri(const struct setup_context *setup, float det) * Clip setup->quad against the scissor/surface bounds. */ static INLINE void -quad_clip( struct setup_context *setup, struct quad_header *quad ) +quad_clip(struct setup_context *setup, struct quad_header *quad) { const struct pipe_scissor_state *cliprect = &setup->softpipe->cliprect; const int minx = (int) cliprect->minx; @@ -176,7 +177,7 @@ quad_clip( struct setup_context *setup, struct quad_header *quad ) * Emit a quad (pass to next stage) with clipping. */ static INLINE void -clip_emit_quad( struct setup_context *setup, struct quad_header *quad ) +clip_emit_quad(struct setup_context *setup, struct quad_header *quad) { quad_clip( setup, quad ); @@ -193,12 +194,15 @@ clip_emit_quad( struct setup_context *setup, struct quad_header *quad ) * Given an X or Y coordinate, return the block/quad coordinate that it * belongs to. */ -static INLINE int block( int x ) +static INLINE int +block(int x) { return x & ~(2-1); } -static INLINE int block_x( int x ) + +static INLINE int +block_x(int x) { return x & ~(16-1); } @@ -207,7 +211,8 @@ static INLINE int block_x( int x ) /** * Render a horizontal span of quads */ -static void flush_spans( struct setup_context *setup ) +static void +flush_spans(struct setup_context *setup) { const int step = MAX_QUADS; const int xleft0 = setup->span.left[0]; @@ -270,8 +275,9 @@ static void flush_spans( struct setup_context *setup ) #if DEBUG_VERTS -static void print_vertex(const struct setup_context *setup, - const float (*v)[4]) +static void +print_vertex(const struct setup_context *setup, + const float (*v)[4]) { int i; debug_printf(" Vertex: (%p)\n", (void *) v); @@ -285,16 +291,18 @@ static void print_vertex(const struct setup_context *setup, } #endif + /** * Sort the vertices from top to bottom order, setting up the triangle * edge fields (ebot, emaj, etop). * \return FALSE if coords are inf/nan (cull the tri), TRUE otherwise */ -static boolean setup_sort_vertices( struct setup_context *setup, - float det, - const float (*v0)[4], - const float (*v1)[4], - const float (*v2)[4] ) +static boolean +setup_sort_vertices(struct setup_context *setup, + float det, + const float (*v0)[4], + const float (*v1)[4], + const float (*v2)[4]) { setup->vprovoke = v2; @@ -451,9 +459,10 @@ tri_apply_cylindrical_wrap(float v0, * \param slot which attribute slot * \param i which component of the slot (0..3) */ -static void const_coeff( struct setup_context *setup, - struct tgsi_interp_coef *coef, - uint vertSlot, uint i) +static void +const_coeff(struct setup_context *setup, + struct tgsi_interp_coef *coef, + uint vertSlot, uint i) { assert(i <= 3); @@ -595,7 +604,8 @@ setup_fragcoord_coeff(struct setup_context *setup, uint slot) * Compute the setup->coef[] array dadx, dady, a0 values. * Must be called after setup->vmin,vmid,vmax,vprovoke are initialized. */ -static void setup_tri_coefficients( struct setup_context *setup ) +static void +setup_tri_coefficients(struct setup_context *setup) { struct softpipe_context *softpipe = setup->softpipe; const struct sp_fragment_shader *spfs = softpipe->fs; @@ -662,8 +672,8 @@ static void setup_tri_coefficients( struct setup_context *setup ) } - -static void setup_tri_edges( struct setup_context *setup ) +static void +setup_tri_edges(struct setup_context *setup) { float vmin_x = setup->vmin[0][0] + setup->pixel_offset; float vmid_x = setup->vmid[0][0] + setup->pixel_offset; @@ -693,10 +703,11 @@ static void setup_tri_edges( struct setup_context *setup ) * Render the upper or lower half of a triangle. * Scissoring/cliprect is applied here too. */ -static void subtriangle( struct setup_context *setup, - struct edge *eleft, - struct edge *eright, - int lines ) +static void +subtriangle(struct setup_context *setup, + struct edge *eleft, + struct edge *eright, + int lines) { const struct pipe_scissor_state *cliprect = &setup->softpipe->cliprect; const int minx = (int) cliprect->minx; @@ -770,9 +781,9 @@ static void subtriangle( struct setup_context *setup, * calculate it here. */ static float -calc_det( const float (*v0)[4], - const float (*v1)[4], - const float (*v2)[4] ) +calc_det(const float (*v0)[4], + const float (*v1)[4], + const float (*v2)[4]) { /* edge vectors e = v0 - v2, f = v1 - v2 */ const float ex = v0[0][0] - v2[0][0]; @@ -788,10 +799,11 @@ calc_det( const float (*v0)[4], /** * Do setup for triangle rasterization, then render the triangle. */ -void sp_setup_tri( struct setup_context *setup, - const float (*v0)[4], - const float (*v1)[4], - const float (*v2)[4] ) +void +sp_setup_tri(struct setup_context *setup, + const float (*v0)[4], + const float (*v1)[4], + const float (*v2)[4]) { float det; @@ -931,7 +943,7 @@ line_persp_coeff(const struct setup_context *setup, * Compute the setup->coef[] array dadx, dady, a0 values. * Must be called after setup->vmin,vmax are initialized. */ -static INLINE boolean +static boolean setup_line_coefficients(struct setup_context *setup, const float (*v0)[4], const float (*v1)[4]) @@ -1052,8 +1064,8 @@ plot(struct setup_context *setup, int x, int y) */ void sp_setup_line(struct setup_context *setup, - const float (*v0)[4], - const float (*v1)[4]) + const float (*v0)[4], + const float (*v1)[4]) { int x0 = (int) v0[0][0]; int x1 = (int) v1[0][0]; @@ -1181,8 +1193,8 @@ point_persp_coeff(const struct setup_context *setup, * XXX could optimize a lot for 1-pixel points. */ void -sp_setup_point( struct setup_context *setup, - const float (*v0)[4] ) +sp_setup_point(struct setup_context *setup, + const float (*v0)[4]) { struct softpipe_context *softpipe = setup->softpipe; const struct sp_fragment_shader *spfs = softpipe->fs; @@ -1382,7 +1394,12 @@ sp_setup_point( struct setup_context *setup, } } -void sp_setup_prepare( struct setup_context *setup ) + +/** + * Called by vbuf code just before we start buffering primitives. + */ +void +sp_setup_prepare(struct setup_context *setup) { struct softpipe_context *sp = setup->softpipe; @@ -1408,8 +1425,8 @@ void sp_setup_prepare( struct setup_context *setup ) } - -void sp_setup_destroy_context( struct setup_context *setup ) +void +sp_setup_destroy_context(struct setup_context *setup) { FREE( setup ); } @@ -1418,7 +1435,8 @@ void sp_setup_destroy_context( struct setup_context *setup ) /** * Create a new primitive setup/render stage. */ -struct setup_context *sp_setup_create_context( struct softpipe_context *softpipe ) +struct setup_context * +sp_setup_create_context(struct softpipe_context *softpipe) { struct setup_context *setup = CALLOC_STRUCT(setup_context); unsigned i; @@ -1435,4 +1453,3 @@ struct setup_context *sp_setup_create_context( struct softpipe_context *softpipe return setup; } - |