nvk: Hook up the disk cache

This won't actually do much yet because we don't have pipeline caches
yet but it turns on the infrastructure.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25443>
This commit is contained in:
Faith Ekstrand 2023-09-27 14:28:05 -05:00 committed by Marge Bot
parent d08df319ca
commit a4f8fd9dd5
3 changed files with 49 additions and 2 deletions

View file

@ -12,6 +12,7 @@
#include "nvk_shader.h"
#include "nvk_wsi.h"
#include "git_sha1.h"
#include "util/disk_cache.h"
#include "util/mesa-sha1.h"
#include "vulkan/runtime/vk_device.h"
@ -627,6 +628,24 @@ nvk_get_device_properties(const struct nvk_instance *instance,
"Mesa " PACKAGE_VERSION MESA_GIT_SHA1);
}
static void
nvk_physical_device_init_disk_cache(struct nvk_physical_device *pdev)
{
#ifdef ENABLE_SHADER_CACHE
char renderer[10];
ASSERTED int len = snprintf(renderer, sizeof(renderer), "nvk_%04x",
pdev->info.chipset);
assert(len == sizeof(renderer) - 2);
char timestamp[41];
struct nvk_instance *instance = nvk_physical_device_instance(pdev);
_mesa_sha1_format(timestamp, instance->driver_build_sha);
const uint64_t driver_flags = nvk_physical_device_compiler_flags(pdev);
pdev->vk.disk_cache = disk_cache_create(renderer, timestamp, driver_flags);
#endif
}
VkResult
nvk_create_drm_physical_device(struct vk_instance *_instance,
drmDevicePtr drm_device,
@ -752,6 +771,8 @@ nvk_create_drm_physical_device(struct vk_instance *_instance,
pdev->render_dev = render_dev;
pdev->info = info;
nvk_physical_device_init_disk_cache(pdev);
pdev->mem_heaps[0].flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
pdev->mem_types[0].propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
pdev->mem_types[0].heapIndex = 0;

View file

@ -61,6 +61,29 @@ pipe_shader_type_from_mesa(gl_shader_stage stage)
}
}
static uint64_t
get_prog_debug(void)
{
return debug_get_num_option("NV50_PROG_DEBUG", 0);
}
static uint64_t
get_prog_optimize(void)
{
return debug_get_num_option("NV50_PROG_OPTIMIZE", 0);
}
uint64_t
nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev)
{
uint64_t prog_debug = get_prog_debug();
uint64_t prog_optimize = get_prog_optimize();
assert(prog_debug <= UINT8_MAX);
assert(prog_optimize <= UINT8_MAX);
return prog_debug | (prog_optimize << 8);
}
const nir_shader_compiler_options *
nvk_physical_device_nir_options(const struct nvk_physical_device *pdev,
gl_shader_stage stage)
@ -1108,8 +1131,8 @@ nvk_compile_nir(struct nvk_physical_device *pdev, nir_shader *nir,
shader->cp.block_size[i] = nir->info.workgroup_size[i];
info->bin.smemSize = shader->cp.smem_size;
info->dbgFlags = debug_get_num_option("NV50_PROG_DEBUG", 0);
info->optLevel = debug_get_num_option("NV50_PROG_OPTIMIZE", 3);
info->dbgFlags = get_prog_debug();
info->optLevel = get_prog_optimize();
info->io.auxCBSlot = 1;
info->io.uboInfoBase = 0;
info->io.drawInfoBase = nvk_root_descriptor_offset(draw.base_vertex);

View file

@ -95,6 +95,9 @@ nvk_shader_address(const struct nvk_shader *shader)
return shader->upload_addr + shader->upload_padding;
}
uint64_t
nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev);
const nir_shader_compiler_options *
nvk_physical_device_nir_options(const struct nvk_physical_device *pdev,
gl_shader_stage stage);