Swappy para Vulkan

Vulkan que faz parte do Swappy.

Resumo

Typedefs

SwappyVkFunctionProvider typedef
Estrutura que permite fornecer seus próprios wrappers de função Vulkan, chamando SwappyVk_setFunctionProvider.

Funções

SwappyVk_destroySwapchain(VkDevice device, VkSwapchainKHR swapchain)
void
Destrói a instância do SwappyVk associada à cadeia de troca.
SwappyVk_determineDeviceExtensions(VkPhysicalDevice physicalDevice, uint32_t availableExtensionCount, VkExtensionProperties *pAvailableExtensions, uint32_t *pRequiredExtensionCount, char **pRequiredExtensions)
void
Determina todas as extensões de dispositivo Vulkan que precisam ser ativadas para um novo VkDevice.
SwappyVk_getFenceTimeoutNS()
uint64_t
Recebe o parâmetro de tempo limite para dispositivos com drivers defeituosos.
SwappyVk_initAndGetRefreshCycleDuration(JNIEnv *env, jobject jactivity, VkPhysicalDevice physicalDevice, VkDevice device, VkSwapchainKHR swapchain, uint64_t *pRefreshDuration)
bool
Inicializa o SwappyVk em determinado dispositivo e cadeia de troca e recebe a duração aproximada entre períodos de apagamento vertical.
SwappyVk_injectTracer(const SwappyTracer *tracer)
void
Injeta funções de callback a serem chamadas para cada frame.
SwappyVk_queuePresent(VkQueue queue, const VkPresentInfoKHR *pPresentInfo)
VkResult
Pede ao Swappy para apresentar uma ou mais imagens às cadeias de troca correspondentes.
SwappyVk_setAutoPipelineMode(bool enabled)
void
Ativa o recurso Auto-Pipeline-Mode para todas as instâncias.
SwappyVk_setAutoSwapInterval(bool enabled)
void
Ativa o recurso Auto-Swap-Interval para todas as instâncias.
SwappyVk_setFenceTimeoutNS(uint64_t fence_timeout_ns)
void
O parâmetro de tempo limite pode ser definido para dispositivos com drivers defeituosos.
SwappyVk_setFunctionProvider(const SwappyVkFunctionProvider *pSwappyVkFunctionProvider)
void
Define o provedor de função Vulkan.
SwappyVk_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns)
void
Define a duração máxima de troca para todas as instâncias.
SwappyVk_setQueueFamilyIndex(VkDevice device, VkQueue queue, uint32_t queueFamilyIndex)
void
Informa ao Swappy o queueFamilyIndex usado para criar uma VkQueue específica.
SwappyVk_setSwapIntervalNS(VkDevice device, VkSwapchainKHR swapchain, uint64_t swap_ns)
void
Informa ao Swappy por quanto tempo cada imagem apresentada ficará visível.
SwappyVk_setWindow(VkDevice device, VkSwapchainKHR swapchain, ANativeWindow *window)
void
Informa ao Swappy qual ANativeWindow usar ao chamar a API ANativeWindow_*.

Macros

VK_NO_PROTOTYPES 1

Estruturas

SwappyVkFunctionProvider

Estrutura que permite fornecer seus próprios wrappers de função Vulkan, chamando SwappyVk_setFunctionProvider.

Typedefs

SwappyVkFunctionProvider

struct SwappyVkFunctionProvider SwappyVkFunctionProvider

Estrutura que permite fornecer seus próprios wrappers de função Vulkan, chamando SwappyVk_setFunctionProvider.

O uso dessa função é opcional.

Funções

SwappyVk_destroySwapchain

void SwappyVk_destroySwapchain(
  VkDevice device,
  VkSwapchainKHR swapchain
)

Destrói a instância do SwappyVk associada à cadeia de troca.

É importante que essa API seja chamada antes de chamar vkDestroySwapchainKHR(), para que o Swappy possa limpar o espaço interno. Caso você tenha apenas uma cadeia de troca para o dispositivo, essa função também limpará todos os recursos associados a ele.

Detalhes
Parâmetros
device
- O VkDevice associado ao SwappyVk
swapchain
- O VkSwapchainKHR que o aplicativo quer que o Swappy troque

SwappyVk_determineDeviceExtensions

void SwappyVk_determineDeviceExtensions(
  VkPhysicalDevice physicalDevice,
  uint32_t availableExtensionCount,
  VkExtensionProperties *pAvailableExtensions,
  uint32_t *pRequiredExtensionCount,
  char **pRequiredExtensions
)

Determina todas as extensões de dispositivo Vulkan que precisam ser ativadas para um novo VkDevice.

Benefícios do Swappy for-Vulkan (SwappyVk) de determinadas extensões do dispositivo Vulkan (por exemplo, VK_GOOGLE_display_timing). Antes que o aplicativo chame vkCreateDevice, o SwappyVk precisa examinar a lista de extensões disponíveis (retornadas por vkEnumerateDeviceExtensionProperties) e possivelmente identificar uma ou mais extensões a que o aplicativo precisa adicionar a:

  • VkDeviceCreateInfo::enabledExtensionCount
  • VkDeviceCreateInfo::ppEnabledExtensionNames

antes que o aplicativo chame vkCreateDevice. Para cada VkPhysicalDevice para que o aplicativo chamará vkCreateDevice, é necessário chamar essa função e, em seguida, adicionar as extensões correspondentes à lista ativada para o VkDevice. Semelhante a muitas funções Vulkan, essa função pode ser chamada duas vezes, uma para identificar o número de extensões necessárias e outra com a memória alocada pelo aplicativo em que a função pode gravar.

Detalhes
Parâmetros
physicalDevice
- O VkPhysicalDevice associado às extensões disponíveis.
availableExtensionCount
- Valor retornado de pPropertyCount de vkEnumerateDeviceExtensionProperties.
pAvailableExtensions
- Valor retornado de pProperties de vkEnumerateDeviceExtensionProperties.
pRequiredExtensionCount
- Se pRequiredExtensions for nullptr, a função definirá esse parâmetro como o número de extensões necessárias. Se pRequiredExtensions não for nullptr, essa será a quantidade de extensões obrigatórias que a função gravará em pRequiredExtensions.
pRequiredExtensions
- Se non-nullptr, esse parâmetro será a memória alocada pelo aplicativo em que a função gravará os nomes das extensões necessárias. É um ponteiro para uma matriz de strings de caracteres* (ou seja, o mesmo que VkDeviceCreateInfo::ppEnabledExtensionNames).

SwappyVk_getFenceTimeoutNS

uint64_t SwappyVk_getFenceTimeoutNS()

Recebe o parâmetro de tempo limite para dispositivos com drivers defeituosos.

O valor padrão é 50.000.000.

SwappyVk_initAndGetRefreshCycleDuration

bool SwappyVk_initAndGetRefreshCycleDuration(
  JNIEnv *env,
  jobject jactivity,
  VkPhysicalDevice physicalDevice,
  VkDevice device,
  VkSwapchainKHR swapchain,
  uint64_t *pRefreshDuration
)

Inicializa o SwappyVk em determinado dispositivo e cadeia de troca e recebe a duração aproximada entre períodos de apagamento vertical.

Usa JNI para consultar AppVsyncOffset e PresentationDeadline.

Se seu aplicativo apresentar mais de uma cadeia de troca por vez, será necessário chamar essa função para cada cadeia de troca antes de chamar swappyVkSetSwapInterval().

A duração entre os períodos de apagamento vertical (um intervalo) é expressa como o número aproximado de nanossegundos entre os períodos de apagamento vertical da tela física da cadeia de troca.

Se o aplicativo converter esse número para uma fração (por exemplo, 16.666.666 ns para 0,016666666) e dividir um por essa fração, o resultado será a taxa de atualização aproximada da tela (por exemplo, 16.666.666 nanossegundos corresponde a uma tela de 60 Hz, 11.111.111 ns corresponde a uma tela de 90 Hz).

Detalhes
Parâmetros
env
- JNIEnv que é considerado originado da função AttachCurrentThread
jactivity
- Gerenciador do objeto NativeActivity, usado para JNI
physicalDevice
- O VkPhysicalDevice associado à cadeia de troca
device
- O VkDevice associado à troca de cadeia
swapchain
- O VkSwapchainKHR que o aplicativo quer que o Swappy troque
pRefreshDuration
- A duração do ciclo de atualização retornado
Retornos
bool - "true" se o valor retornado por pRefreshDuration for válido. Caso contrário, retorna "false".

SwappyVk_injectTracer

void SwappyVk_injectTracer(
  const SwappyTracer *tracer
)

Injeta funções de callback a serem chamadas para cada frame.

Detalhes
Parâmetros
tracer
- Coleção de funções de callback

SwappyVk_queuePresent

VkResult SwappyVk_queuePresent(
  VkQueue queue,
  const VkPresentInfoKHR *pPresentInfo
)

Pede ao Swappy para apresentar uma ou mais imagens às cadeias de troca correspondentes.

O Swappy chamará vvQueuePresentKHR para seu aplicativo. Swappy pode inserir uma estrutura na cadeia pNext de VkPresentInfoKHR ou inserir outros comandos Vulkan para tentar honrar o intervalo de troca esperado.

Observação: caso seu aplicativo apresente mais de uma cadeia de troca por vez e você use um intervalo de troca diferente para cada uma delas, o Swap tentará respeitar todos os intervalos de troca. Isso ocorre melhor em dispositivos compatíveis com uma extensão de tempo de apresentação subjacente, como VK_GOOGLE_display_timing.

Detalhes
Parâmetros
queue
- A VkQueue associada ao dispositivo e à cadeia de troca
pPresentInfo
- Um ponteiro para o VkPresentInfoKHR que contém as informações sobre as imagens que serão incluídas em cada cadeia de troca.

SwappyVk_setAutoPipelineMode

void SwappyVk_setAutoPipelineMode(
  bool enabled
)

Ativa o recurso Auto-Pipeline-Mode para todas as instâncias.

Por padrão, esse recurso é ativado. Essa configuração pode ser alterada para aperfeiçoar o comportamento do Swappy.

Detalhes
Parâmetros
enabled
- "True" significa ativar, "false" significa desativar

SwappyVk_setAutoSwapInterval

void SwappyVk_setAutoSwapInterval(
  bool enabled
)

Ativa o recurso Auto-Swap-Interval para todas as instâncias.

Por padrão, esse recurso é ativado. Essa configuração pode ser alterada para aperfeiçoar o comportamento do Swappy.

Detalhes
Parâmetros
enabled
- "True" significa ativar, "false" significa desativar

SwappyVk_setFenceTimeoutNS

void SwappyVk_setFenceTimeoutNS(
  uint64_t fence_timeout_ns
)

O parâmetro de tempo limite pode ser definido para dispositivos com drivers defeituosos.

O valor padrão é 50.000.000.

SwappyVk_setFunctionProvider

void SwappyVk_setFunctionProvider(
  const SwappyVkFunctionProvider *pSwappyVkFunctionProvider
)

Define o provedor de função Vulkan.

Isso permite que você forneça um objeto que será usado para procurar funções Vulkan, por exemplo, para fixar o uso dessas funções.

Para usar essa funcionalidade, você precisa chamar essa função antes de qualquer outra.

O uso dessa função é totalmente opcional. Se você não usá-la, as funções do Vulkan exigidas pelo Swapppy serão carregadas de forma dinâmica a partir do libvulkan.so.

Detalhes
Parâmetros
provider
- objeto do provedor

SwappyVk_setMaxAutoSwapIntervalNS

void SwappyVk_setMaxAutoSwapIntervalNS(
  uint64_t max_swap_ns
)

Define a duração máxima de troca para todas as instâncias.

Define a duração máxima para Auto-Swap-Interval em milissegundos. Se o SwappyVk estiver operando no Auto-Swap-Interval e a duração do frame for maior que a duração fornecida, o SwappyVk não encontrará nenhum ritmo e enviará o frame o mais cedo possível.

Detalhes
Parâmetros
max_swap_ns
- duração máxima de troca em milissegundos.

SwappyVk_setQueueFamilyIndex

void SwappyVk_setQueueFamilyIndex(
  VkDevice device,
  VkQueue queue,
  uint32_t queueFamilyIndex
)

Informa ao Swappy o queueFamilyIndex usado para criar uma VkQueue específica.

O Swappy precisa conhecer o queueFamilyIndex usado na criação de um VVQueue específico para que possa usá-lo durante a apresentação.

Detalhes
Parâmetros
device
- O VkDevice associado à fila
queue
- Uma fila de dispositivo.
queueFamilyIndex
- O índice de família de filas usado para criar a VkQueue.

SwappyVk_setSwapIntervalNS

void SwappyVk_setSwapIntervalNS(
  VkDevice device,
  VkSwapchainKHR swapchain,
  uint64_t swap_ns
)

Informa ao Swappy por quanto tempo cada imagem apresentada ficará visível.

Se seu aplicativo apresentar mais de uma cadeia de troca por vez, será necessário chamar essa função para cada cadeia de troca antes da apresentação.

Detalhes
Parâmetros
device
- O VkDevice associado à troca de cadeia
swapchain
- O VkSwapchainKHR que o aplicativo quer que o Swappy troque
swap_ns
- O tempo de exibição de cada imagem apresentada em nanossegundos

SwappyVk_setWindow

void SwappyVk_setWindow(
  VkDevice device,
  VkSwapchainKHR swapchain,
  ANativeWindow *window
)

Informa ao Swappy qual ANativeWindow usar ao chamar a API ANativeWindow_*.

Detalhes
Parâmetros
device
- O VkDevice associado à troca de cadeia
swapchain
- O VkSwapchainKHR que o aplicativo quer que o Swappy troque
window
- A ANativeWindow que foi usada para criar o VkSwapchainKHR

Macros

VK_NO_PROTOTYPES

 VK_NO_PROTOTYPES 1