supports latest instalar gtx development como application c specifications vulkan

c - latest - vulkan development



Vulkan: ¿Cuál es el punto de sType en las estructuras vk*CreateInfo? (1)

Para que la API se pueda cambiar sin romper la compatibilidad hacia atrás.

Si la versión 1.1 de Vulkan desea expandir la creación de, por ejemplo, grupos de buffers de comando, ¿cómo lo haría? Bueno, podrían agregar un punto de entrada completamente nuevo: vkCreateCommandPool2 . Pero esta función tendría casi la misma firma exacta que vkCreateCommandPool ; La única diferencia es que toman diferentes estructuras pCreateInfo .

Así que, en lugar de eso, todo lo que tiene que hacer es declarar una estructura VkCommandPoolCreateInfo2 . Y luego declare que vkCreateCommandPool puede tomar cualquiera de los dos. ¿Cómo diría la implementación en cuál pasaste?

Debido a que los primeros 4 bytes de cualquier estructura de este tipo es sType . Pueden probar ese valor. Si el valor es VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO , entonces es la estructura antigua. Si es VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO_2 , entonces es el nuevo.

Esto también facilita que las extensiones anulen completamente una estructura CreateInfo . El campo pNext es para aumentar una API con parámetros adicionales. Con sType , una extensión puede cambiar los parámetros existentes.

En todas las estructuras de información de creación ( vk*CreateInfo ) en la nueva API de Vulkan, SIEMPRE hay un miembro .sType . ¿Por qué está ahí si el valor solo puede ser una cosa? Además, la especificación Vulkan es muy explícita de que solo puede utilizar estructuras vk*CreateInfo como parámetros para su función vkCreate* correspondiente. Parece un poco redundante. Puedo ver que si el controlador pasaba esta estructura directamente a la GPU, es posible que necesite tenerla (noté que siempre es el primer miembro). Pero esto parece una idea realmente mala para que la aplicación lo haga porque si el controlador lo hiciera, las aplicaciones serían mucho menos propensas a errores, y la preparación de un int en una estructura no parece una operación extremadamente ineficiente computacional. Simplemente no veo por qué existe.

TL; DR
¿Por qué las estructuras vk*CreateInfo tienen el miembro .sType ?