You might also just create the cache unconditionally in screen_create. Marek
On Feb 10, 2017 12:58 PM, "Timothy Arceri" <tarc...@itsqueeze.com> wrote: > > > On 10/02/17 22:25, Marek Olšák wrote: > >> I don't see anything radeonsi-specific here. Is there any reason this >> has to be in radeonsi? >> > > disk_cache_create(r600_get_chip_name(rscreen), mesa_version); > > Is the only AMD specific bit. I did have just have a generic > get_gpu_name() function at one point. But I went around in cycles a bit > deciding if that was ok. I can have another go at making this more generic. > > > >> Also, all pipe_screen functions must be thread-safe, so a mutex around >> checking and setting disk_shader_cache should be used. >> > I was wondering about that thanks :) > > >> if _mesa_create_cache_version_string was in src/util, you wouldn't >> have to pass it via the parameter.I'm going to sent a new version >> > I'm going to send a new version next week based around [1] rather than > mesa string. > > [1] https://lists.freedesktop.org/archives/mesa-dev/2017-Februar > y/143791.html > >> >> Marek >> >> On Tue, Feb 7, 2017 at 4:42 AM, Timothy Arceri <tarc...@itsqueeze.com> >> wrote: >> >>> --- >>> src/gallium/drivers/radeon/r600_pipe_common.c | 17 +++++++++++++++++ >>> src/gallium/drivers/radeon/r600_pipe_common.h | 2 ++ >>> src/gallium/include/pipe/p_screen.h | 3 +++ >>> src/mesa/state_tracker/st_context.c | 6 ++++++ >>> 4 files changed, 28 insertions(+) >>> >>> diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c >>> b/src/gallium/drivers/radeon/r600_pipe_common.c >>> index 95a6a48..d7d5362 100644 >>> --- a/src/gallium/drivers/radeon/r600_pipe_common.c >>> +++ b/src/gallium/drivers/radeon/r600_pipe_common.c >>> @@ -27,6 +27,7 @@ >>> #include "r600_pipe_common.h" >>> #include "r600_cs.h" >>> #include "tgsi/tgsi_parse.h" >>> +#include "util/disk_cache.h" >>> #include "util/list.h" >>> #include "util/u_draw_quad.h" >>> #include "util/u_memory.h" >>> @@ -772,6 +773,20 @@ static const char* r600_get_chip_name(struct >>> r600_common_screen *rscreen) >>> } >>> } >>> >>> +static struct disk_cache* r600_create_disk_cache(struct pipe_screen >>> *pscreen, >>> + const char >>> *mesa_version) >>> +{ >>> + struct r600_common_screen *rscreen = (struct >>> r600_common_screen*)pscreen; >>> + >>> + if (rscreen->disk_shader_cache) >>> + return rscreen->disk_shader_cache; >>> + >>> + struct disk_cache *cache = >>> disk_cache_create(r600_get_chip_name(rscreen), >>> mesa_version); >>> + rscreen->disk_shader_cache = cache; >>> + >>> + return rscreen->disk_shader_cache; >>> +} >>> + >>> static const char* r600_get_name(struct pipe_screen* pscreen) >>> { >>> struct r600_common_screen *rscreen = (struct >>> r600_common_screen*)pscreen; >>> @@ -1224,6 +1239,7 @@ bool r600_common_screen_init(struct >>> r600_common_screen *rscreen, >>> rscreen->info.drm_minor, rscreen->info.drm_patchlevel, >>> kernel_version, llvm_string); >>> >>> + rscreen->b.create_disk_cache = r600_create_disk_cache; >>> rscreen->b.get_name = r600_get_name; >>> rscreen->b.get_vendor = r600_get_vendor; >>> rscreen->b.get_device_vendor = r600_get_device_vendor; >>> @@ -1314,6 +1330,7 @@ void r600_destroy_common_screen(struct >>> r600_common_screen *rscreen) >>> pipe_mutex_destroy(rscreen->gpu_load_mutex); >>> pipe_mutex_destroy(rscreen->aux_context_lock); >>> rscreen->aux_context->destroy(rscreen->aux_context); >>> + disk_cache_destroy(rscreen->disk_shader_cache); >>> >>> slab_destroy_parent(&rscreen->pool_transfers); >>> >>> diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h >>> b/src/gallium/drivers/radeon/r600_pipe_common.h >>> index 6eff9aa..72c2df9 100644 >>> --- a/src/gallium/drivers/radeon/r600_pipe_common.h >>> +++ b/src/gallium/drivers/radeon/r600_pipe_common.h >>> @@ -400,6 +400,8 @@ struct r600_common_screen { >>> bool has_cp_dma; >>> bool has_streamout; >>> >>> + struct disk_cache *disk_shader_cache; >>> + >>> struct slab_parent_pool pool_transfers; >>> >>> /* Texture filter settings. */ >>> diff --git a/src/gallium/include/pipe/p_screen.h >>> b/src/gallium/include/pipe/p_screen.h >>> index b6203f1..90f6c93 100644 >>> --- a/src/gallium/include/pipe/p_screen.h >>> +++ b/src/gallium/include/pipe/p_screen.h >>> @@ -318,6 +318,9 @@ struct pipe_screen { >>> const void *(*get_compiler_options)(struct pipe_screen *screen, >>> enum pipe_shader_ir ir, >>> unsigned shader); >>> + >>> + struct disk_cache *(*create_disk_cache)(struct pipe_screen *screen, >>> + const char *mesa_version); >>> }; >>> >>> >>> diff --git a/src/mesa/state_tracker/st_context.c >>> b/src/mesa/state_tracker/st_context.c >>> index 5523734..658faba 100644 >>> --- a/src/mesa/state_tracker/st_context.c >>> +++ b/src/mesa/state_tracker/st_context.c >>> @@ -551,6 +551,12 @@ struct st_context *st_create_context(gl_api api, >>> struct pipe_context *pipe, >>> return NULL; >>> } >>> >>> + if (pipe->screen->create_disk_cache) { >>> + ctx->Cache = >>> + pipe->screen->create_disk_cache(pipe->screen, >>> + _mesa_create_cache_version_st >>> ring()); >>> + } >>> + >>> st_init_driver_flags(&ctx->DriverFlags); >>> >>> /* XXX: need a capability bit in gallium to query if the pipe >>> -- >>> 2.9.3 >>> >>> _______________________________________________ >>> mesa-dev mailing list >>> mesa-dev@lists.freedesktop.org >>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev >>> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev >> > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev