gallium: set surface status to CLEAR or DEFINED in clearing/drawing code.
Otherwise, we were never setting these flags. This confused the state tracker. Fixes progs/demos/texenv.c, probably others.
This commit is contained in:
parent
a889928d85
commit
69c39b9ae2
|
@ -55,6 +55,7 @@ softpipe_clear(struct pipe_context *pipe, struct pipe_surface *ps,
|
|||
|
||||
if (ps == sp_tile_cache_get_surface(softpipe->zsbuf_cache)) {
|
||||
sp_tile_cache_clear(softpipe->zsbuf_cache, clearValue);
|
||||
softpipe->framebuffer.zsbuf->status = PIPE_SURFACE_STATUS_CLEAR;
|
||||
#if TILE_CLEAR_OPTIMIZATION
|
||||
return;
|
||||
#endif
|
||||
|
@ -63,6 +64,7 @@ softpipe_clear(struct pipe_context *pipe, struct pipe_surface *ps,
|
|||
for (i = 0; i < softpipe->framebuffer.num_cbufs; i++) {
|
||||
if (ps == sp_tile_cache_get_surface(softpipe->cbuf_cache[i])) {
|
||||
sp_tile_cache_clear(softpipe->cbuf_cache[i], clearValue);
|
||||
softpipe->framebuffer.cbufs[i]->status = PIPE_SURFACE_STATUS_CLEAR;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1164,11 +1164,22 @@ static void setup_begin( struct draw_stage *stage )
|
|||
struct setup_stage *setup = setup_stage(stage);
|
||||
struct softpipe_context *sp = setup->softpipe;
|
||||
const struct sp_fragment_shader *fs = setup->softpipe->fs;
|
||||
uint i;
|
||||
|
||||
if (sp->dirty) {
|
||||
softpipe_update_derived(sp);
|
||||
}
|
||||
|
||||
/* Mark surfaces as defined now */
|
||||
for (i = 0; i < sp->framebuffer.num_cbufs; i++){
|
||||
if (sp->framebuffer.cbufs[i]) {
|
||||
sp->framebuffer.cbufs[i]->status = PIPE_SURFACE_STATUS_DEFINED;
|
||||
}
|
||||
}
|
||||
if (sp->framebuffer.zsbuf) {
|
||||
sp->framebuffer.zsbuf->status = PIPE_SURFACE_STATUS_DEFINED;
|
||||
}
|
||||
|
||||
setup->quad.nr_attrs = fs->info.num_inputs;
|
||||
|
||||
sp->quad.first->begin(sp->quad.first);
|
||||
|
|
Loading…
Reference in New Issue