Pushed, thanks! Marek
On Fri, Jun 7, 2019 at 7:19 AM <[email protected]> wrote: > From: Rui Salvaterra <[email protected]> > > This implements GLSL disk shader caching for the R300-R500 series of AMD > GPUs. > > Signed-off-by: Rui Salvaterra <[email protected]> > --- > src/gallium/drivers/r300/r300_screen.c | 38 +++++++++++++++++++++++++- > src/gallium/drivers/r300/r300_screen.h | 3 ++ > 2 files changed, 40 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/drivers/r300/r300_screen.c > b/src/gallium/drivers/r300/r300_screen.c > index d26cf901a7b..b9df321de86 100644 > --- a/src/gallium/drivers/r300/r300_screen.c > +++ b/src/gallium/drivers/r300/r300_screen.c > @@ -80,11 +80,42 @@ static const char* chip_families[] = { > "ATI RV570" > }; > > +static const char* r300_get_family_name(struct r300_screen* r300screen) > +{ > + return chip_families[r300screen->caps.family]; > +} > + > static const char* r300_get_name(struct pipe_screen* pscreen) > { > struct r300_screen* r300screen = r300_screen(pscreen); > > - return chip_families[r300screen->caps.family]; > + return r300_get_family_name(r300screen); > +} > + > +static void r300_disk_cache_create(struct r300_screen* r300screen) > +{ > + struct mesa_sha1 ctx; > + unsigned char sha1[20]; > + char cache_id[20 * 2 + 1]; > + > + _mesa_sha1_init(&ctx); > + if (!disk_cache_get_function_identifier(r300_disk_cache_create, > + &ctx)) > + return; > + > + _mesa_sha1_final(&ctx, sha1); > + disk_cache_format_hex_id(cache_id, sha1, 20 * 2); > + > + r300screen->disk_shader_cache = > + disk_cache_create(r300_get_family_name(r300screen), > + cache_id, > + r300screen->debug); > +} > + > +static struct disk_cache* r300_get_disk_shader_cache(struct pipe_screen* > pscreen) > +{ > + struct r300_screen* r300screen = r300_screen(pscreen); > + return r300screen->disk_shader_cache; > } > > static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap > param) > @@ -745,6 +776,8 @@ static void r300_destroy_screen(struct pipe_screen* > pscreen) > mtx_destroy(&r300screen->cmask_mutex); > slab_destroy_parent(&r300screen->pool_transfers); > > + disk_cache_destroy(r300screen->disk_shader_cache); > + > if (rws) > rws->destroy(rws); > > @@ -795,6 +828,7 @@ struct pipe_screen* r300_screen_create(struct > radeon_winsys *rws, > r300screen->screen.get_name = r300_get_name; > r300screen->screen.get_vendor = r300_get_vendor; > r300screen->screen.get_device_vendor = r300_get_device_vendor; > + r300screen->screen.get_disk_shader_cache = r300_get_disk_shader_cache; > r300screen->screen.get_param = r300_get_param; > r300screen->screen.get_shader_param = r300_get_shader_param; > r300screen->screen.get_paramf = r300_get_paramf; > @@ -807,6 +841,8 @@ struct pipe_screen* r300_screen_create(struct > radeon_winsys *rws, > > r300_init_screen_resource_functions(r300screen); > > + r300_disk_cache_create(r300screen); > + > slab_create_parent(&r300screen->pool_transfers, sizeof(struct > pipe_transfer), 64); > > (void) mtx_init(&r300screen->cmask_mutex, mtx_plain); > diff --git a/src/gallium/drivers/r300/r300_screen.h > b/src/gallium/drivers/r300/r300_screen.h > index 952dc341ab7..b28de008304 100644 > --- a/src/gallium/drivers/r300/r300_screen.h > +++ b/src/gallium/drivers/r300/r300_screen.h > @@ -27,6 +27,7 @@ > #include "r300_chipset.h" > #include "radeon/radeon_winsys.h" > #include "pipe/p_screen.h" > +#include "util/disk_cache.h" > #include "util/slab.h" > #include "os/os_thread.h" > #include <stdio.h> > @@ -44,6 +45,8 @@ struct r300_screen { > /** Combination of DBG_xxx flags */ > unsigned debug; > > + struct disk_cache *disk_shader_cache; > + > struct slab_parent_pool pool_transfers; > > /* The MSAA texture with CMASK access; */ > -- > 2.21.0 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
