commit c file
This commit is contained in:
@@ -0,0 +1,81 @@
|
|||||||
|
#include <vulkan/vulkan.h>
|
||||||
|
#include <output_device/vulkan_physical_device.h>
|
||||||
|
#include <output_device/vulkan_output_devices.h>
|
||||||
|
#include "vulkan_device_extensions.h"
|
||||||
|
#include "debugger/vulkan_debugger.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
// #include "presentation_queue/vulkan_queue_families.h"
|
||||||
|
// #include "presentation_queue/vulkan_swapchain.h"
|
||||||
|
// #include "vulkan_output_devices.h"
|
||||||
|
// #include <instance/vulkan_instance.h>
|
||||||
|
// #include "vulkan_physical_device.h"
|
||||||
|
// #include <set>
|
||||||
|
|
||||||
|
gnReturnCode gnCreateOutputDeviceFn(gnOutputDevice* outputDevice, gnInstance* instance, struct gnOutputDeviceInfo_t deviceInfo) {
|
||||||
|
outputDevice->outputDevice = malloc(sizeof(gnPlatformOutputDevice));
|
||||||
|
|
||||||
|
VkDeviceQueueCreateInfo* queueCreateInfos = malloc(sizeof(VkDeviceQueueCreateInfo) * deviceInfo.queueInfoCount);
|
||||||
|
float queuePriority = 1.0f;
|
||||||
|
for (int i = 0; i < deviceInfo.queueInfoCount; i++) {
|
||||||
|
queueCreateInfos[i].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
||||||
|
queueCreateInfos[i].queueFamilyIndex = deviceInfo.queueInfos[i].queueIndex;
|
||||||
|
queueCreateInfos[i].queueCount = deviceInfo.queueInfos[i].queueCount;
|
||||||
|
queueCreateInfos[i].pQueuePriorities = &queuePriority;
|
||||||
|
}
|
||||||
|
|
||||||
|
VkPhysicalDeviceFeatures deviceFeatures = {};
|
||||||
|
|
||||||
|
VkDeviceCreateInfo createInfo = {};
|
||||||
|
createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||||
|
createInfo.queueCreateInfoCount = deviceInfo.queueInfoCount;
|
||||||
|
createInfo.pQueueCreateInfos = queueCreateInfos;
|
||||||
|
createInfo.pEnabledFeatures = &deviceFeatures;
|
||||||
|
|
||||||
|
createInfo.enabledExtensionCount = deviceExtensionCount;
|
||||||
|
createInfo.ppEnabledExtensionNames = deviceExtensions;
|
||||||
|
|
||||||
|
if (instance->debugger == NULL)
|
||||||
|
createInfo.enabledLayerCount = 0;
|
||||||
|
else {
|
||||||
|
const char* validation_layers[1] = { "VK_LAYER_KHRONOS_validation" };
|
||||||
|
createInfo.enabledLayerCount = 1;
|
||||||
|
createInfo.ppEnabledLayerNames = validation_layers;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vkCreateDevice(deviceInfo.physicalDevice.physicalDevice->device, &createInfo, NULL, &outputDevice->outputDevice->device) != VK_SUCCESS) {
|
||||||
|
return GN_FAILED_TO_CREATE_DEVICE;
|
||||||
|
}
|
||||||
|
|
||||||
|
outputDevice->outputDevice->queues = malloc(sizeof(VkQueue) * deviceInfo.queueInfoCount);
|
||||||
|
for (int i = 0; i < deviceInfo.queueInfoCount; i++) {
|
||||||
|
vkGetDeviceQueue(outputDevice->outputDevice->device, deviceInfo.queueInfos[i].queueIndex, 0, &outputDevice->outputDevice->queues[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// {
|
||||||
|
// QueueFamilyIndices queueFamilyIndices = findQueueFamilies(
|
||||||
|
// outputDevice->physicalOutputDevice->physicalOutputDevice->instance->instance->window_surface,
|
||||||
|
// outputDevice->physicalOutputDevice->physicalOutputDevice->device
|
||||||
|
// );
|
||||||
|
|
||||||
|
// VkCommandPoolCreateInfo poolInfo{};
|
||||||
|
// poolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||||
|
// poolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
|
||||||
|
// poolInfo.queueFamilyIndex = queueFamilyIndices.graphicsFamily.value();
|
||||||
|
|
||||||
|
// if (vkCreateCommandPool(outputDevice->outputDevice->device, &poolInfo, nullptr, &outputDevice->outputDevice->commandPool) != VK_SUCCESS) {
|
||||||
|
// return GN_FAILED;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
return GN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void gnWaitForDeviceFn(const gnOutputDevice* device) {
|
||||||
|
// vkDeviceWaitIdle(device->outputDevice->device);
|
||||||
|
}
|
||||||
|
|
||||||
|
void gnDestroyOutputDeviceFn(gnOutputDevice* device) {
|
||||||
|
// vkDestroyCommandPool(device.outputDevice->device, device.outputDevice->commandPool, nullptr);
|
||||||
|
vkDestroyDevice(device->outputDevice->device, NULL);
|
||||||
|
}
|
@@ -9,7 +9,8 @@ typedef enum gnReturnCode_t {
|
|||||||
GN_FAILED_TO_CREATE_DEBUGGER,
|
GN_FAILED_TO_CREATE_DEBUGGER,
|
||||||
GN_FAILED_TO_CREATE_DEVICE,
|
GN_FAILED_TO_CREATE_DEVICE,
|
||||||
GN_FAILED_TO_ATTACH_WINDOW,
|
GN_FAILED_TO_ATTACH_WINDOW,
|
||||||
GN_INVALID_INSTANCE
|
GN_INVALID_INSTANCE,
|
||||||
|
GN_DEBUGGER_EXISTS
|
||||||
|
|
||||||
// GN_UNKNOWN_ERROR,
|
// GN_UNKNOWN_ERROR,
|
||||||
// GN_UNKNOWN_FRAMEBUFFER_ATTACHMENT,
|
// GN_UNKNOWN_FRAMEBUFFER_ATTACHMENT,
|
||||||
@@ -39,5 +40,6 @@ static const char* gnErrorCodeToCString(enum gnReturnCode_t returnCode) {
|
|||||||
case GN_FAILED_TO_CREATE_DEBUGGER: return "GN_FAILED_TO_CREATE_DEBUGGER";
|
case GN_FAILED_TO_CREATE_DEBUGGER: return "GN_FAILED_TO_CREATE_DEBUGGER";
|
||||||
case GN_FAILED_TO_CREATE_DEVICE: return "GN_FAILED_TO_CREATE_DEVICE";
|
case GN_FAILED_TO_CREATE_DEVICE: return "GN_FAILED_TO_CREATE_DEVICE";
|
||||||
case GN_INVALID_INSTANCE: return "GN_INVALID_INSTANCE";
|
case GN_INVALID_INSTANCE: return "GN_INVALID_INSTANCE";
|
||||||
|
case GN_DEBUGGER_EXISTS: return "GN_DEBUGGER_EXISTS";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user