#include <vulkan/vulkan.h>
#include <stdio.h>
#include <stdlib.h>
#define APP_SHORT_NAME "vulkansamples_instance"
typedef struct{
VkApplicationInfo app_info;
VkInstanceCreateInfo inst_info;
VkInstance inst;
//enumeracion de dispositivos
VkPhysicalDevice *physical_devices;
uint32_t gpu_count;
}INST;
VkResult creaInstancia(INST *info);
VkResult enumera_dispositivos(INST *info);
int main(int argc, char *argv[]){
INST info;
VkResult res;
res=creaInstancia(&info);
if(res == VK_SUCCESS) printf("Se creó la instancia\n");
res=enumera_dispositivos(&info);
if(res == 0){
printf("Enumeracion exitosa\n");
}
free(info.physical_devices);
vkDestroyInstance(info.inst, NULL);//Liberando instancia
return 0;
}
/*Enumeracion de dispositivos*/
VkResult enumera_dispositivos(INST *info){
VkResult res;//control
info->gpu_count=0;//cuenta de dispositivos
res = vkEnumeratePhysicalDevices(info->inst, &(info->gpu_count), NULL);//enumerando dispositivos
if (info->gpu_count > 0) {
//reservando memoria para dispositivos
info->physical_devices = (VkPhysicalDevice *) malloc(sizeof(VkPhysicalDevice) * info->gpu_count);
//alojando dispositivos en info->physical_devices
res = vkEnumeratePhysicalDevices(info->inst, &(info->gpu_count),info->physical_devices);
}
return res;//retornando control
}
VkResult creaInstancia(INST *info){
VkResult res;
// initialize the VkApplicationInfo structure
info->app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
info->app_info.pNext = NULL;
info->app_info.pApplicationName = APP_SHORT_NAME;
info->app_info.applicationVersion = 1;
info->app_info.pEngineName = APP_SHORT_NAME;
info->app_info.engineVersion = 1;
info->app_info.apiVersion = VK_API_VERSION_1_0;
// initialize the VkInstanceCreateInfo structure
info->inst_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
info->inst_info.pNext = NULL;
info->inst_info.flags = 0;
info->inst_info.pApplicationInfo = &info->app_info;
info->inst_info.enabledExtensionCount = 0;
info->inst_info.ppEnabledExtensionNames = NULL;
info->inst_info.enabledLayerCount = 0;
info->inst_info.ppEnabledLayerNames = NULL;
res = vkCreateInstance(&(info->inst_info), NULL, &(info->inst));
return res;
}
Comentarios sobre la versión: 1.0 (0)
No hay comentarios