load/init: add more initial entrypoint trampolines
This commit is contained in:
parent
96381b0d88
commit
46d383e003
@ -24,27 +24,75 @@
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
static VkResult setup_vtables (
|
||||
const VkInstanceCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkInstance* pInstance
|
||||
) {
|
||||
static void setup_tables (void)
|
||||
{
|
||||
static auto libraries = cruft::vk::load::enumerate ();
|
||||
static cruft::vk::load::vendor v (libraries[0]);
|
||||
|
||||
cruft::vk::load::i_table = &v.itable;
|
||||
cruft::vk::load::v_table = &v.vtable;
|
||||
|
||||
return cruft::vk::load::i_table->vkCreateInstance (pCreateInfo, pAllocator, pInstance);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
static cruft::vk::load::instance_table const initialiser {
|
||||
.vkCreateInstance = setup_vtables,
|
||||
};
|
||||
static VkResult _vkCreateInstance (
|
||||
const VkInstanceCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkInstance* pInstance
|
||||
) {
|
||||
setup_tables ();
|
||||
return cruft::vk::load::i_table->vkCreateInstance (pCreateInfo, pAllocator, pInstance);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
cruft::vk::load::instance_table const *cruft::vk::load::i_table = &initialiser;
|
||||
static PFN_vkVoidFunction
|
||||
_vkGetInstanceProcAddr (VkInstance instance,const char* pName)
|
||||
{
|
||||
setup_tables ();
|
||||
return cruft::vk::load::i_table->vkGetInstanceProcAddr (instance, pName);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
VkResult _vkEnumerateInstanceExtensionProperties (
|
||||
const char* pLayerName,
|
||||
uint32_t* pPropertyCount,
|
||||
VkExtensionProperties* pProperties
|
||||
) {
|
||||
setup_tables ();
|
||||
return cruft::vk::load::i_table->vkEnumerateInstanceExtensionProperties (
|
||||
pLayerName,
|
||||
pPropertyCount,
|
||||
pProperties
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
static cruft::vk::load::instance_table const _initialiser {
|
||||
.vkCreateInstance = _vkCreateInstance,
|
||||
.vkGetInstanceProcAddr = _vkGetInstanceProcAddr,
|
||||
.vkEnumerateInstanceExtensionProperties = _vkEnumerateInstanceExtensionProperties,
|
||||
};
|
||||
|
||||
|
||||
cruft::vk::load::instance_table const *cruft::vk::load::i_table = &_initialiser;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
static void*
|
||||
_vk_icdGetInstanceProcAddr (VkInstance instance, char const *name)
|
||||
{
|
||||
setup_tables ();
|
||||
return cruft::vk::load::v_table->vk_icdGetInstanceProcAddr (instance, name);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
static cruft::vk::load::vendor_table const v_initialiser {
|
||||
.vk_icdGetInstanceProcAddr = _vk_icdGetInstanceProcAddr,
|
||||
};
|
||||
|
||||
|
||||
cruft::vk::load::vendor_table const *cruft::vk::load::v_table = &v_initialiser;
|
||||
|
Loading…
Reference in New Issue
Block a user