Swappy para Vulkan
Parte Vulkan de Swappy
Resumen
Typedefs |
|
---|---|
SwappyVkFunctionProvider
|
typedefstruct SwappyVkFunctionProvider
Es una estructura que te permite proporcionar tus propios wrappers de funciones de Vulkan por medio de la llamada a SwappyVk_setFunctionProvider. |
Funciones |
|
---|---|
SwappyVk_destroySwapchain(VkDevice device, VkSwapchainKHR swapchain)
|
void
Destruye la instancia SwappyVk asociada con la cadena de intercambio.
|
SwappyVk_determineDeviceExtensions(VkPhysicalDevice physicalDevice, uint32_t availableExtensionCount, VkExtensionProperties *pAvailableExtensions, uint32_t *pRequiredExtensionCount, char **pRequiredExtensions)
|
void
Determina las extensiones de dispositivo de Vulkan que deben habilitarse para un nuevo VkDevice.
|
SwappyVk_getFenceTimeoutNS()
|
uint64_t
Obtiene el parámetro de valla de tiempo de espera para dispositivos con controladores defectuosos.
|
SwappyVk_initAndGetRefreshCycleDuration(JNIEnv *env, jobject jactivity, VkPhysicalDevice physicalDevice, VkDevice device, VkSwapchainKHR swapchain, uint64_t *pRefreshDuration)
|
bool
Inicializa SwappyVk para un dispositivo y una cadena de intercambio determinados, y obtiene la duración aproximada entre períodos de supresión vertical.
|
SwappyVk_injectTracer(const SwappyTracer *tracer)
|
void
Inserta funciones de devolución de llamada para que se llamen en cada fotograma.
|
SwappyVk_queuePresent(VkQueue queue, const VkPresentInfoKHR *pPresentInfo)
|
VkResult
Pide a Swappy que presente una o más imágenes a las cadenas de intercambio correspondientes.
|
SwappyVk_setAutoPipelineMode(bool enabled)
|
void
Habilita la función de modo de canalización automático para todas las instancias.
|
SwappyVk_setAutoSwapInterval(bool enabled)
|
void
Habilita la función de intervalo de intercambio automático para todas las instancias.
|
SwappyVk_setFenceTimeoutNS(uint64_t fence_timeout_ns)
|
void
Establece el parámetro de valla de tiempo de espera para dispositivos con controladores defectuosos.
|
SwappyVk_setFunctionProvider(const SwappyVkFunctionProvider *pSwappyVkFunctionProvider)
|
void
Establece el proveedor de la función de Vulkan.
|
SwappyVk_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns)
|
void
Establece la duración de intercambio máxima para todas las instancias.
|
SwappyVk_setQueueFamilyIndex(VkDevice device, VkQueue queue, uint32_t queueFamilyIndex)
|
void
Indica a Swappy el queueFamilyIndex que se usó para crear una VkQueue específica.
|
SwappyVk_setSwapIntervalNS(VkDevice device, VkSwapchainKHR swapchain, uint64_t swap_ns)
|
void
Indica a Swappy que la duración de cada imagen que se presente debe ser visible.
|
SwappyVk_setWindow(VkDevice device, VkSwapchainKHR swapchain, ANativeWindow *window)
|
void
Indica a Swappy qué ANativeWindow usar cuando se llame a la API ANativeWindow_*.
|
Macros |
|
---|---|
VK_NO_PROTOTYPES 1
|
Structs |
|
---|---|
SwappyVkFunctionProvider |
Es una estructura que te permite proporcionar tus propios wrappers de funciones de Vulkan llamando a SwappyVk_setFunctionProvider. |
Typedefs
SwappyVkFunctionProvider
struct SwappyVkFunctionProvider SwappyVkFunctionProvider
Es una estructura que te permite proporcionar tus propios wrappers de funciones de Vulkan por medio de la llamada a SwappyVk_setFunctionProvider.
El uso de esta función es opcional.
Funciones
SwappyVk_destroySwapchain
void SwappyVk_destroySwapchain( VkDevice device, VkSwapchainKHR swapchain )
Destruye la instancia SwappyVk asociada con la cadena de intercambio.
Se espera que esta API se llame antes de llamar a vkDestroySwapchainKHR() para que Swappy pueda limpiar su estado interno. Ten en cuenta que, si solo tienes una cadena de intercambio para el dispositivo, esta función también limpiará los recursos asociados con él.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
SwappyVk_determineDeviceExtensions
void SwappyVk_determineDeviceExtensions( VkPhysicalDevice physicalDevice, uint32_t availableExtensionCount, VkExtensionProperties *pAvailableExtensions, uint32_t *pRequiredExtensionCount, char **pRequiredExtensions )
Determina las extensiones de dispositivo de Vulkan que deben habilitarse para un nuevo VkDevice.
Swappy para Vulkan (SwappyVk) saca provecho de determinadas extensiones de dispositivos Vulkan (p. ej., VK_GOOGLE_display_timing). Antes de que la aplicación llame a vkCreateDevice, SwappyVk debe analizar la lista de extensiones disponibles (que muestra vkEnumerateDeviceExtensionProperties) y eventualmente identificar las que la aplicación deba agregar a lo siguiente:
- VkDeviceCreateInfo::enabledExtensionCount
- VkDeviceCreateInfo::ppEnabledExtensionNames
antes de que la aplicación llame a vkCreateDevice. Por cada VkPhysicalDevice para el que la aplicación llama a vkCreateDevice, la aplicación debe llamar a esta función y, luego, agregar las extensiones identificadas a la lista de las habilitadas para el VkDevice. Al igual que ocurre con muchas funciones de Vulkan, se puede llamar a esta función dos veces, una para identificar la cantidad de extensiones requeridas y otra con memoria asignada por la aplicación en la que la función puede escribir.
Detalles | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
SwappyVk_getFenceTimeoutNS
uint64_t SwappyVk_getFenceTimeoutNS()
Obtiene el parámetro de valla de tiempo de espera para dispositivos con controladores defectuosos.
Su valor predeterminado es 50,000,000.
SwappyVk_initAndGetRefreshCycleDuration
bool SwappyVk_initAndGetRefreshCycleDuration( JNIEnv *env, jobject jactivity, VkPhysicalDevice physicalDevice, VkDevice device, VkSwapchainKHR swapchain, uint64_t *pRefreshDuration )
Inicializa SwappyVk para un dispositivo y una cadena de intercambio determinados, y obtiene la duración aproximada entre períodos de supresión vertical.
Usa JNI para consultar AppVsyncOffset y PresentationDeadline.
Si tu aplicación presenta a más de una cadena de intercambio a la vez, debes hacer la llamada para cada cadena antes de llamar a swappyVkSetSwapInterval().
La duración entre los períodos de supresión vertical (un intervalo) se expresa como la cantidad aproximada de nanosegundos entre los períodos de supresión vertical de la pantalla física de la cadena de intercambio.
Si la aplicación convierte este número en una fracción (p. ej., 16,666,666 ns a 0.016666666) y divide a uno por esa fracción, se obtendrá la frecuencia de actualización aproximada de la pantalla (p. ej., 16,666,666 nanosegundos corresponde a una pantalla de 60 Hz, mientras que 11,111,111 ns corresponde a una pantalla de 90 Hz).
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||||
Resultado que se muestra |
booleano: verdadero si el valor que muestra pRefreshDuration es válido o falso si se muestra un error.
|
SwappyVk_injectTracer
void SwappyVk_injectTracer( const SwappyTracer *tracer )
Inserta funciones de devolución de llamada para que se llamen en cada fotograma.
Detalles | |||
---|---|---|---|
Parámetros |
|
SwappyVk_queuePresent
VkResult SwappyVk_queuePresent( VkQueue queue, const VkPresentInfoKHR *pPresentInfo )
Pide a Swappy que presente una o más imágenes a las cadenas de intercambio correspondientes.
Swappy llamará a vkQueuePresentKHR para tu aplicación. Swappy puede insertar una estructura en pNext-chain de VkPresentInfoKHR, o bien otros comandos de Vulkan a fin de intentar respetar el intervalo de intercambio deseado.
Nota: Si tu aplicación presenta más de una cadena de intercambio a la vez y usas un intervalo de intercambio diferente para cada una de ellas, Swappy intentará respetar el intervalo de intercambio de cada cadena (este proceso es más exitoso en dispositivos compatibles con una extensión de tiempo de presentación subyacente, como VK_GOOGLE_display_timing).
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
SwappyVk_setAutoPipelineMode
void SwappyVk_setAutoPipelineMode( bool enabled )
Habilita la función de modo de canalización automático para todas las instancias.
Esta función está habilitada de forma predeterminada. Cambiar esta configuración es completamente opcional a los efectos de ajustar el comportamiento de Swappy.
Detalles | |||
---|---|---|---|
Parámetros |
|
SwappyVk_setAutoSwapInterval
void SwappyVk_setAutoSwapInterval( bool enabled )
Habilita la función de intervalo de intercambio automático para todas las instancias.
Esta función está habilitada de forma predeterminada. Cambiar esta configuración es completamente opcional a los efectos de ajustar el comportamiento de Swappy.
Detalles | |||
---|---|---|---|
Parámetros |
|
SwappyVk_setFenceTimeoutNS
void SwappyVk_setFenceTimeoutNS( uint64_t fence_timeout_ns )
Establece el parámetro de valla de tiempo de espera para dispositivos con controladores defectuosos.
Su valor predeterminado es 50,000,000.
SwappyVk_setFunctionProvider
void SwappyVk_setFunctionProvider( const SwappyVkFunctionProvider *pSwappyVkFunctionProvider )
Establece el proveedor de la función de Vulkan.
Esto te permite proporcionar un objeto que se usará para buscar funciones de Vulkan, p. ej., a fin de implementar un hook en el uso de estas funciones.
Para usar esta función, debes llamarla antes que a cualquier otra.
El uso de esta función es completamente opcional. Si no la usas, las funciones de Vulkan requeridas por Swappy se cargarán de forma dinámica desde libvulkan.so.
Detalles | |||
---|---|---|---|
Parámetros |
|
SwappyVk_setMaxAutoSwapIntervalNS
void SwappyVk_setMaxAutoSwapIntervalNS( uint64_t max_swap_ns )
Establece la duración de intercambio máxima para todas las instancias.
Establece la duración máxima en milisegundos del intervalo de intercambio automático. Si SwappyVk funciona en el modo de intervalo de intercambio automático y la duración del fotograma es más larga que la proporcionada, SwappyVk no establecerá ningún ritmo y solo enviará el fotograma lo antes posible.
Detalles | |||
---|---|---|---|
Parámetros |
|
SwappyVk_setQueueFamilyIndex
void SwappyVk_setQueueFamilyIndex( VkDevice device, VkQueue queue, uint32_t queueFamilyIndex )
Indica a Swappy el queueFamilyIndex que se usó para crear una VkQueue específica.
Swappy necesita conocer qué queueFamilyIndex se usó para crear una VkQueue específica a fin de que pueda usarla durante la presentación.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
SwappyVk_setSwapIntervalNS
void SwappyVk_setSwapIntervalNS( VkDevice device, VkSwapchainKHR swapchain, uint64_t swap_ns )
Indica a Swappy que la duración de cada imagen que se presente debe ser visible.
Si tu aplicación presenta a más de una cadena de intercambio a la vez, debes hacer la llamada para cada cadena de intercambio antes de realizar la presentación.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
SwappyVk_setWindow
void SwappyVk_setWindow( VkDevice device, VkSwapchainKHR swapchain, ANativeWindow *window )
Indica a Swappy qué ANativeWindow usar cuando se llame a la API ANativeWindow_*.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
Macros
VK_NO_PROTOTYPES
VK_NO_PROTOTYPES 1