llvmpipe: Fetch tile only if a color buffer is bound.

This commit is contained in:
José Fonseca 2009-10-03 19:42:22 +01:00
parent 7d2699aedc
commit cbb57bf726
2 changed files with 11 additions and 2 deletions

View File

@ -124,7 +124,7 @@ shade_quads(struct llvmpipe_context *llvmpipe,
struct quad_header *quad = quads[0];
const unsigned x = quad->input.x0;
const unsigned y = quad->input.y0;
uint8_t *tile = lp_get_cached_tile(llvmpipe->cbuf_cache[0], x, y);
uint8_t *tile;
uint8_t *color;
void *depth;
uint32_t ALIGN16_ATTRIB mask[4][NUM_CHANNELS];
@ -150,7 +150,13 @@ shade_quads(struct llvmpipe_context *llvmpipe,
mask[q][chan_index] = quads[q]->inout.mask & (1 << chan_index) ? ~0 : 0;
/* color buffer */
color = &TILE_PIXEL(tile, x & (TILE_SIZE-1), y & (TILE_SIZE-1), 0);
if(llvmpipe->framebuffer.nr_cbufs >= 1 &&
llvmpipe->framebuffer.cbufs[0]) {
tile = lp_get_cached_tile(llvmpipe->cbuf_cache[0], x, y);
color = &TILE_PIXEL(tile, x & (TILE_SIZE-1), y & (TILE_SIZE-1), 0);
}
else
color = NULL;
/* depth buffer */
if(llvmpipe->zsbuf_map) {

View File

@ -294,6 +294,9 @@ lp_get_cached_tile(struct llvmpipe_tile_cache *tc,
struct llvmpipe_cached_tile *tile = &tc->entries[y/TILE_SIZE][x/TILE_SIZE];
struct pipe_transfer *pt = tc->transfer;
assert(tc->surface);
assert(tc->transfer);
switch(tile->status) {
case LP_TILE_STATUS_CLEAR:
/* don't get tile from framebuffer, just clear it */