blob: cb0f64a425f1c1db044a159084848f3a9cd414b6 [file] [log] [blame]
// Copyright 2023 The Khronos Group Inc.
// Copyright 2023 Valve Corporation
// Copyright 2023 LunarG, Inc.
//
// SPDX-License-Identifier: Apache-2.0
//
// Author(s):
// - Christophe Riccio <christophe@lunarg.com>
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "vk_layer_settings_ext.h"
typedef enum VkuLayerSettingType {
VKU_LAYER_SETTING_TYPE_BOOL32 = VK_LAYER_SETTING_TYPE_BOOL32_EXT,
VKU_LAYER_SETTING_TYPE_INT32 = VK_LAYER_SETTING_TYPE_INT32_EXT,
VKU_LAYER_SETTING_TYPE_INT64 = VK_LAYER_SETTING_TYPE_INT64_EXT,
VKU_LAYER_SETTING_TYPE_UINT32 = VK_LAYER_SETTING_TYPE_UINT32_EXT,
VKU_LAYER_SETTING_TYPE_UINT64 = VK_LAYER_SETTING_TYPE_UINT64_EXT,
VKU_LAYER_SETTING_TYPE_FLOAT32 = VK_LAYER_SETTING_TYPE_FLOAT32_EXT,
VKU_LAYER_SETTING_TYPE_FLOAT64 = VK_LAYER_SETTING_TYPE_FLOAT64_EXT,
VKU_LAYER_SETTING_TYPE_STRING = VK_LAYER_SETTING_TYPE_STRING_EXT,
VKU_LAYER_SETTING_TYPE_FRAMESET,
VKU_LAYER_SETTING_TYPE_FRAMESET_STRING
} VkuLayerSettingType;
VK_DEFINE_HANDLE(VkuLayerSettingSet)
// - `first` is an integer related to the first frame to be processed.
// The frame numbering is 0-based.
// - `count` is an integer related to the number of frames to be
// processed. A count of zero represents every frame after the start of the range.
// - `step` is an integer related to the interval between frames. A step of zero
// represent no frame to be processed.
// between frames to be processed.
typedef struct VkuFrameset {
uint32_t first;
uint32_t count;
uint32_t step;
} VkuFrameset;
typedef void(VKAPI_PTR *VkuLayerSettingLogCallback)(const char *pSettingName, const char *pMessage);
// Create a layer setting set. If 'pCallback' is set to NULL, the messages are outputed to stderr.
VkResult vkuCreateLayerSettingSet(const char *pLayerName, const VkLayerSettingsCreateInfoEXT *pCreateInfo,
const VkAllocationCallbacks *pAllocator, VkuLayerSettingLogCallback pCallback,
VkuLayerSettingSet *pLayerSettingSet);
void vkuDestroyLayerSettingSet(VkuLayerSettingSet layerSettingSet, const VkAllocationCallbacks *pAllocator);
// Set a compatibility namespace to find layer settings using environment variables
void vkuSetLayerSettingCompatibilityNamespace(VkuLayerSettingSet layerSettingSet, const char *name);
// Check whether a setting was set either programmatically, from vk_layer_settings.txt or an environment variable
VkBool32 vkuHasLayerSetting(VkuLayerSettingSet layerSettingSet, const char *pSettingName);
// Query setting values
VkResult vkuGetLayerSettingValues(VkuLayerSettingSet layerSettingSet, const char *pSettingName, VkuLayerSettingType type,
uint32_t *pValueCount, void *pValues);
// Find the VkLayerSettingsCreateInfoEXT in the VkInstanceCreateInfo pNext chain, return NULL if not present
const VkLayerSettingsCreateInfoEXT *vkuFindLayerSettingsCreateInfo(const VkInstanceCreateInfo *pCreateInfo);
// Return the list of Unknown setting in VkLayerSettingsCreateInfoEXT
VkResult vkuGetUnknownSettings(const VkLayerSettingsCreateInfoEXT *pCreateInfo, uint32_t settingsCount, const char **pSettings,
uint32_t *pUnknownSettingCount, const char **pUnknownSettings);
#ifdef __cplusplus
}
#endif