mirror of
https://github.com/Kbz-8/Pulse.git
synced 2026-01-11 15:33:34 +00:00
adding backend management responsability to the user
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
|
||||
#include "Vulkan.h"
|
||||
#include "VulkanLoader.h"
|
||||
#include "VulkanInstance.h"
|
||||
|
||||
VulkanGlobal* VulkanGetGlobal()
|
||||
{
|
||||
@@ -16,37 +17,49 @@ VulkanGlobal* VulkanGetGlobal()
|
||||
return &vulkan;
|
||||
}
|
||||
|
||||
bool VulkanLoadBackend()
|
||||
PulseBackendFlags VulkanCheckSupport(PulseBackendFlags candidates, PulseShaderFormatsFlags shader_formats_used)
|
||||
{
|
||||
if(candidates != PULSE_BACKEND_ANY && (candidates & PULSE_BACKEND_VULKAN) == 0)
|
||||
return PULSE_BACKEND_INVALID;
|
||||
if((shader_formats_used & PULSE_SHADER_FORMAT_SPIRV_BIT) == 0)
|
||||
return PULSE_BACKEND_INVALID;
|
||||
|
||||
if(!VulkanInitLoader())
|
||||
return PULSE_BACKEND_INVALID;
|
||||
VulkanInstance instance;
|
||||
if(!VulkanInitInstance(&instance, PULSE_NO_DEBUG)) // Instance creation will fail if Vulkan is not supported
|
||||
{
|
||||
PulseGetLastErrorType(); // Clearing out the errors set by the failed instance creation
|
||||
return PULSE_BACKEND_INVALID;
|
||||
}
|
||||
VulkanDestroyInstance(&instance);
|
||||
VulkanLoaderShutdown();
|
||||
return PULSE_BACKEND_VULKAN;
|
||||
}
|
||||
|
||||
bool VulkanLoadBackend(PulseDebugLevel debug_level)
|
||||
{
|
||||
if(!VulkanInitLoader())
|
||||
return false;
|
||||
VulkanDriverData* driver_data = (VulkanDriverData*)calloc(1, sizeof(VulkanDriverData));
|
||||
PULSE_CHECK_ALLOCATION_RETVAL(driver_data, false);
|
||||
if(!VulkanInitInstance(&driver_data->instance, debug_level))
|
||||
return false;
|
||||
VulkanDriver.driver_data = driver_data;
|
||||
return true;
|
||||
}
|
||||
|
||||
PulseDevice VulkanCreatePulseDevice(PulseDebugLevel debug_level)
|
||||
void VulkanUnloadBackend(PulseBackend backend)
|
||||
{
|
||||
VulkanPulseDevice* vulkan_device = (VulkanPulseDevice*)calloc(1, sizeof(VulkanPulseDevice));
|
||||
PULSE_CHECK_ALLOCATION_RETVAL(vulkan_device, PULSE_NULL_HANDLE);
|
||||
|
||||
if(!VulkanInitInstance(&vulkan_device->instance, debug_level))
|
||||
return PULSE_NULL_HANDLE;
|
||||
|
||||
PulseDeviceHandler* pulse_device = (PulseDeviceHandler*)calloc(1, sizeof(PulseDeviceHandler));
|
||||
PULSE_CHECK_ALLOCATION_RETVAL(pulse_device, PULSE_NULL_HANDLE);
|
||||
pulse_device->debug_level = debug_level;
|
||||
pulse_device->driver_data = vulkan_device;
|
||||
return pulse_device;
|
||||
VulkanDestroyInstance(&VULKAN_RETRIEVE_DRIVER_DATA(backend)->instance);
|
||||
VulkanLoaderShutdown();
|
||||
}
|
||||
|
||||
void VulkanDestroyPulseDevice(PulseDevice device)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
PulseBackendLoader VulkanDriver = {
|
||||
PulseBackendHandler VulkanDriver = {
|
||||
.PFN_LoadBackend = VulkanLoadBackend,
|
||||
.PFN_CreateDevice = VulkanCreatePulseDevice,
|
||||
.PFN_DestroyDevice = VulkanDestroyPulseDevice,
|
||||
.PFN_UnloadBackend = VulkanUnloadBackend,
|
||||
.PFN_CreateDevice = VulkanCreateDevice,
|
||||
.backend = PULSE_BACKEND_VULKAN,
|
||||
.supported_shader_formats = PULSE_SHADER_FORMAT_SPIRV_BIT
|
||||
.supported_shader_formats = PULSE_SHADER_FORMAT_SPIRV_BIT,
|
||||
.driver_data = PULSE_NULLPTR
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user