Go to the source code of this file.
Functions | |
static void | output_quad (struct quad_stage *qs, struct quad_header *quad) |
Last step of quad processing: write quad colors to the framebuffer, taking mask into account. | |
static void | output_begin (struct quad_stage *qs) |
static void | output_destroy (struct quad_stage *qs) |
struct quad_stage * | sp_quad_output_stage (struct softpipe_context *softpipe) |
static void output_begin | ( | struct quad_stage * | qs | ) | [static] |
static void output_destroy | ( | struct quad_stage * | qs | ) | [static] |
static void output_quad | ( | struct quad_stage * | qs, | |
struct quad_header * | quad | |||
) | [static] |
Last step of quad processing: write quad colors to the framebuffer, taking mask into account.
Definition at line 41 of file sp_quad_output.c.
References softpipe_context::cbuf_cache, softpipe_cached_tile::color, quad_header_output::color, softpipe_cached_tile::data, debug_printf(), softpipe_context::framebuffer, quad_header::inout, quad_header::input, quad_header_inout::mask, pipe_framebuffer_state::num_cbufs, quad_header::output, QUAD_SIZE, quad_stage::softpipe, sp_get_cached_tile(), TILE_SIZE, softpipe_cached_tile::x, quad_header_input::x0, softpipe_cached_tile::y, and quad_header_input::y0.
00042 { 00043 /* in-tile pos: */ 00044 const int itx = quad->input.x0 % TILE_SIZE; 00045 const int ity = quad->input.y0 % TILE_SIZE; 00046 00047 struct softpipe_context *softpipe = qs->softpipe; 00048 uint cbuf; 00049 00050 /* loop over colorbuffer outputs */ 00051 for (cbuf = 0; cbuf < softpipe->framebuffer.num_cbufs; cbuf++) { 00052 struct softpipe_cached_tile *tile 00053 = sp_get_cached_tile(softpipe, 00054 softpipe->cbuf_cache[cbuf], 00055 quad->input.x0, quad->input.y0); 00056 float (*quadColor)[4] = quad->output.color[cbuf]; 00057 int i, j; 00058 00059 /* get/swizzle dest colors */ 00060 for (j = 0; j < QUAD_SIZE; j++) { 00061 if (quad->inout.mask & (1 << j)) { 00062 int x = itx + (j & 1); 00063 int y = ity + (j >> 1); 00064 for (i = 0; i < 4; i++) { /* loop over color chans */ 00065 tile->data.color[y][x][i] = quadColor[i][j]; 00066 } 00067 if (0) { 00068 debug_printf("sp write pixel %d,%d: %g, %g, %g\n", 00069 quad->input.x0 + x, 00070 quad->input.y0 + y, 00071 quadColor[0][j], 00072 quadColor[1][j], 00073 quadColor[2][j]); 00074 } 00075 } 00076 } 00077 } 00078 }
struct quad_stage* sp_quad_output_stage | ( | struct softpipe_context * | softpipe | ) | [read] |
Definition at line 93 of file sp_quad_output.c.
References quad_stage::begin, CALLOC_STRUCT, quad_stage::destroy, output_begin(), output_destroy(), output_quad(), quad_stage::run, and quad_stage::softpipe.
00094 { 00095 struct quad_stage *stage = CALLOC_STRUCT(quad_stage); 00096 00097 stage->softpipe = softpipe; 00098 stage->begin = output_begin; 00099 stage->run = output_quad; 00100 stage->destroy = output_destroy; 00101 00102 return stage; 00103 }