Skip to content
Snippets Groups Projects
Unverified Commit 416cb099 authored by Olivia Lee's avatar Olivia Lee
Browse files

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: default avatarBenjamin Lee <benjamin.lee@collabora.com>
parent 2dd16d8b
No related branches found
No related tags found
No related merge requests found
...@@ -133,10 +133,23 @@ get_cache_uuid(uint16_t family, void *uuid) ...@@ -133,10 +133,23 @@ get_cache_uuid(uint16_t family, void *uuid)
static VkResult static VkResult
get_core_mask(struct panvk_physical_device *device, get_core_mask(struct panvk_physical_device *device,
const struct panvk_instance *instance, const char *option_name, 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; uint64_t present = device->kmod.props.shader_present;
*mask = driQueryOptionu64(&instance->dri_options, option_name) & present; *mask &= present;
if (!*mask) if (!*mask)
return panvk_errorf(instance, VK_ERROR_INITIALIZATION_FAILED, return panvk_errorf(instance, VK_ERROR_INITIALIZATION_FAILED,
...@@ -153,11 +166,15 @@ get_core_masks(struct panvk_physical_device *device, ...@@ -153,11 +166,15 @@ get_core_masks(struct panvk_physical_device *device,
{ {
VkResult result; 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); &device->compute_core_mask);
if (result != VK_SUCCESS) if (result != VK_SUCCESS)
return result; 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); &device->fragment_core_mask);
return result; return result;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment