sp_quad_output.c File Reference

Include dependency graph for sp_quad_output.c:

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_stagesp_quad_output_stage (struct softpipe_context *softpipe)


Function Documentation

static void output_begin ( struct quad_stage qs  )  [static]

Definition at line 81 of file sp_quad_output.c.

References assert, and quad_stage::next.

00082 {
00083    assert(qs->next == NULL);
00084 }

static void output_destroy ( struct quad_stage qs  )  [static]

Definition at line 87 of file sp_quad_output.c.

References FREE.

00088 {
00089    FREE( qs );
00090 }

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 }


Generated on Tue Sep 29 06:25:41 2009 for Gallium3D by  doxygen 1.5.4