From 416cb0993bf46c503b46ed36c84ebffa6dde9d9b Mon Sep 17 00:00:00 2001 From: Benjamin Lee <benjamin.lee@collabora.com> Date: Thu, 20 Mar 2025 23:55:48 -0700 Subject: [PATCH] panvk: add core mask environment variables PANVK_COMPUTE_CORE_MASK and PANVK_FRAGMENT_CORE_MASK override the corresponding driconf options if present. Signed-off-by: Benjamin Lee <benjamin.lee@collabora.com> --- src/panfrost/vulkan/panvk_physical_device.c | 25 +++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index 10892d62d37..d2504bbe108 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -133,10 +133,23 @@ get_cache_uuid(uint16_t family, void *uuid) static VkResult get_core_mask(struct panvk_physical_device *device, const struct panvk_instance *instance, const char *option_name, - uint64_t *mask) + const char *env_name, uint64_t *mask) { + *mask = driQueryOptionu64(&instance->dri_options, option_name); + + const char *env_str = getenv(env_name); + if (env_str) { + char *end = NULL; + errno = 0; + *mask = strtoull(env_str, &end, 0); + if (errno == ERANGE || *end != 0 || env_str[0] == '-') + return panvk_errorf(instance, VK_ERROR_INITIALIZATION_FAILED, + "%s is not a 64-bit unsigned integer.\n", + env_name); + } + uint64_t present = device->kmod.props.shader_present; - *mask = driQueryOptionu64(&instance->dri_options, option_name) & present; + *mask &= present; if (!*mask) return panvk_errorf(instance, VK_ERROR_INITIALIZATION_FAILED, @@ -153,11 +166,15 @@ get_core_masks(struct panvk_physical_device *device, { VkResult result; - result = get_core_mask(device, instance, "panvk_compute_core_mask", + result = get_core_mask(device, instance, + "panvk_compute_core_mask", + "PANVK_COMPUTE_CORE_MASK", &device->compute_core_mask); if (result != VK_SUCCESS) return result; - result = get_core_mask(device, instance, "panvk_fragment_core_mask", + result = get_core_mask(device, instance, + "panvk_fragment_core_mask", + "PANVK_FRAGMENT_CORE_MASK", &device->fragment_core_mask); return result; -- GitLab