panvk: add basic driconf infrastructure
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

This hooks up some driconfs for WSI, as well as the force_vk_vendor
DRIconf. Nothing panvk specific for now.

Reviewed-by: Benjamin Lee <benjamin.lee@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33895>
This commit is contained in:
Erik Faye-Lund 2025-03-05 16:01:08 +01:00 committed by Marge Bot
parent 4fabd37a3c
commit aa8fec638f
4 changed files with 41 additions and 2 deletions

View file

@ -10,6 +10,7 @@
*/
#include "util/build_id.h"
#include "util/driconf.h"
#include "util/mesa-sha1.h"
#include "vk_alloc.h"
@ -146,6 +147,35 @@ panvk_kmod_free(const struct pan_kmod_allocator *allocator, void *data)
return vk_free(vkalloc, data);
}
static const driOptionDescription panvk_dri_options[] = {
DRI_CONF_SECTION_PERFORMANCE
DRI_CONF_ADAPTIVE_SYNC(true)
DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
DRI_CONF_VK_KHR_PRESENT_WAIT(false)
DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
DRI_CONF_SECTION_END
DRI_CONF_SECTION_DEBUG
DRI_CONF_FORCE_VK_VENDOR()
DRI_CONF_VK_WSI_FORCE_SWAPCHAIN_TO_CURRENT_EXTENT(false)
DRI_CONF_VK_X11_IGNORE_SUBOPTIMAL(false)
DRI_CONF_SECTION_END
};
static void
panvk_init_dri_options(struct panvk_instance *instance)
{
driParseOptionInfo(&instance->available_dri_options, panvk_dri_options, ARRAY_SIZE(panvk_dri_options));
driParseConfigFiles(&instance->dri_options, &instance->available_dri_options, 0, "panvk", NULL, NULL,
instance->vk.app_info.app_name, instance->vk.app_info.app_version,
instance->vk.app_info.engine_name, instance->vk.app_info.engine_version);
instance->force_vk_vendor =
driQueryOptioni(&instance->dri_options, "force_vk_vendor");
}
VKAPI_ATTR VkResult VKAPI_CALL
panvk_CreateInstance(const VkInstanceCreateInfo *pCreateInfo,
const VkAllocationCallbacks *pAllocator,
@ -188,6 +218,8 @@ panvk_CreateInstance(const VkInstanceCreateInfo *pCreateInfo,
return panvk_error(NULL, result);
}
panvk_init_dri_options(instance);
instance->kmod.allocator = (struct pan_kmod_allocator){
.zalloc = panvk_kmod_zalloc,
.free = panvk_kmod_free,

View file

@ -9,6 +9,7 @@
#include <stdint.h>
#include "vk_instance.h"
#include "util/xmlconfig.h"
#include "lib/kmod/pan_kmod.h"
@ -41,7 +42,11 @@ struct panvk_instance {
enum panvk_debug_flags debug_flags;
struct driOptionCache dri_options;
struct driOptionCache available_dri_options;
uint8_t driver_build_sha[20];
uint32_t force_vk_vendor;
struct {
struct pan_kmod_allocator allocator;

View file

@ -508,7 +508,8 @@ get_device_properties(const struct panvk_instance *instance,
*properties = (struct vk_properties){
.apiVersion = get_api_version(arch),
.driverVersion = vk_get_driver_version(),
.vendorID = ARM_VENDOR_ID,
.vendorID = instance->force_vk_vendor ? instance->force_vk_vendor :
ARM_VENDOR_ID,
/* Collect arch_major, arch_minor, arch_rev and product_major,
* as done by the Arm driver.

View file

@ -50,7 +50,8 @@ panvk_wsi_init(struct panvk_physical_device *physical_device)
result = wsi_device_init(&physical_device->wsi_device,
panvk_physical_device_to_handle(physical_device),
panvk_wsi_proc_addr, &instance->vk.alloc, -1, NULL,
panvk_wsi_proc_addr, &instance->vk.alloc, -1,
&instance->dri_options,
&(struct wsi_device_options){.sw_device = false});
if (result != VK_SUCCESS)
return result;