st/mesa: add readpix_cache structure

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle 2016-06-08 13:22:52 +02:00
parent b74c23138c
commit 615ba11563
3 changed files with 22 additions and 0 deletions

View file

@ -218,6 +218,14 @@ fail:
return success;
}
/* Invalidate the readpixels cache to ensure we don't read stale data.
*/
void st_invalidate_readpix_cache(struct st_context *st)
{
pipe_resource_reference(&st->readpix_cache.src, NULL);
pipe_resource_reference(&st->readpix_cache.cache, NULL);
}
/**
* Create a staging texture and blit the requested region to it.
*/

View file

@ -184,6 +184,9 @@ st_destroy_context_priv(struct st_context *st)
free(st->drawpix_cache.image);
pipe_resource_reference(&st->drawpix_cache.texture, NULL);
/* free glReadPixels cache data */
st_invalidate_readpix_cache(st);
cso_destroy_context(st->cso_context);
free( st );
}

View file

@ -228,6 +228,16 @@ struct st_context
struct pipe_resource *texture;
} drawpix_cache;
/** for glReadPixels */
struct {
struct pipe_resource *src;
struct pipe_resource *cache;
enum pipe_format dst_format;
unsigned level;
unsigned layer;
unsigned hits;
} readpix_cache;
/** for glClear */
struct {
struct pipe_rasterizer_state raster;
@ -306,6 +316,7 @@ extern void st_init_driver_functions(struct pipe_screen *screen,
void st_invalidate_state(struct gl_context * ctx, GLbitfield new_state);
void st_invalidate_readpix_cache(struct st_context *st);
#define Y_0_TOP 1