Swappy para Vulkan

Parte Vulkan de Swappy

Resumen

Typedefs

SwappyVkFunctionProvider typedef
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
device
- Es el VkDevice asociado con SwappyVk.
swapchain
- Es el VkSwapchainKHR que la aplicación quiere que Swappy cambie.

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
physicalDevice
- Este es el VkPhysicalDevice asociado con las extensiones disponibles.
availableExtensionCount
- Este es el valor mostrado de pPropertyCount de vkEnumerateDeviceExtensionProperties.
pAvailableExtensions
- Este es el valor mostrado de pProperties de vkEnumerateDeviceExtensionProperties.
pRequiredExtensionCount
- Si pRequiredExtensions es nullptr, la función establece este parámetro en la cantidad de extensiones que se requieran. Si pRequiredExtensions no es nullptr, será la cantidad de extensiones requeridas que la función deberá escribir en pRequiredExtensions.
pRequiredExtensions
- Si no es nullptr, esta es la memoria asignada por la aplicación en la que la función escribirá los nombres de las extensiones requeridas. Es un puntero de un arreglo de strings de char* (es decir, igual a VkDeviceCreateInfo::ppEnabledExtensionNames).

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
env
- Es el JNIEnv que se supone que pertenece a la función AttachCurrentThread.
jactivity
- Es el controlador de objeto NativeActivity, usado para JNI.
physicalDevice
- Es el VkPhysicalDevice asociado con la cadena de intercambio.
device
- Es el VkDevice asociado con la cadena de intercambio.
swapchain
- Es el VkSwapchainKHR que la aplicación quiere que Swappy cambie.
pRefreshDuration
- Es la duración del ciclo de actualización que se muestra.
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
tracer
- Es una colección de funciones de devolución de llamada.

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
queue
- Es la VkQueue asociada con el dispositivo y la cadena de intercambio.
pPresentInfo
- Es un puntero a VkPresentInfoKHR que contiene la información sobre las imágenes que se presentarán en cada cadena de intercambio.

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
enabled
- El resultado verdadero significa habilitar, y el falso, inhabilitar

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
enabled
- El resultado verdadero significa habilitar, y el falso, inhabilitar

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
provider
- objeto del proveedor

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
max_swap_ns
- Es la duración de intercambio máxima en milisegundos.

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
device
- Es el VkDevice asociado con la fila.
queue
- Es una fila del dispositivo..
queueFamilyIndex
- Es el índice de la familia de filas que se usó para crear la VkQueue.

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
device
- Es el VkDevice asociado con la cadena de intercambio.
swapchain
- Es el VkSwapchainKHR que la aplicación quiere que Swappy cambie.
swap_ns
- La duración de cada imagen que se presente debe poder visualizarse en nanosegundos.

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
device
- Es el VkDevice asociado con la cadena de intercambio.
swapchain
- Es el VkSwapchainKHR que la aplicación quiere que Swappy cambie.
window
- Es el ANativeWindow que se usó para crear VkSwapchainKHR.

Macros

VK_NO_PROTOTYPES

 VK_NO_PROTOTYPES 1