Spec-Zone.ru › Vulkan

Ссылка на API Vulkan

Команды Vulkan

vkAllocateCommandBuffers(3)

Имя

vkAllocateCommandBuffers - Выделение буферов команд из существующего пула команд

Спецификация C

Для выделения буферов команд вызовите:

VkResult vkAllocateCommandBuffers(
    VkDevice                                    device,
    const VkCommandBufferAllocateInfo*          pAllocateInfo,
    VkCommandBuffer*                            pCommandBuffers);

Параметры

  • device - это логическое устройство, которому принадлежит пул команд.
  • pAllocateInfo - это указатель на экземпляр структуры VkCommandBufferAllocateInfo , описывающий параметры выделения.
  • pCommandBuffers - это указатель на массив дескрипторов VkCommandBuffer , в котором возвращаются результирующие объекты буфера команд. Массив должен иметь длину не менее, чем указано в элементе commandBufferCount структуры pAllocateInfo. Каждый выделенный буфер команд начинается в начальном состоянии.

Описание

Когда буферы команд впервые выделяются, они находятся в начальном состоянии.

Правильное использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pAllocateInfo должен быть указателем на допустимую структуру VkCommandBufferAllocateInfo
  • pCommandBuffers должен быть указателем на массив дескрипторов pAllocateInfo::commandBufferCount VkCommandBuffer
Синхронизация узла
  • Доступ узла к pAllocateInfo::commandPool должен быть внешне синхронизирован
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkCommandBuffer, VkCommandBufferAllocateInfo, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkAllocateCommandBuffers

vkAllocateDescriptorSets(3)

Имя

vkAllocateDescriptorSets - Выделение одного или нескольких наборов дескрипторов

Спецификация C

Для выделения наборов дескрипторов из пула дескрипторов вызовите:

VkResult vkAllocateDescriptorSets(
    VkDevice                                    device,
    const VkDescriptorSetAllocateInfo*          pAllocateInfo,
    VkDescriptorSet*                            pDescriptorSets);

Параметры

  • device - это логическое устройство, которому принадлежит пул дескрипторов.
  • pAllocateInfo - это указатель на экземпляр структуры VkDescriptorSetAllocateInfo , описывающий параметры выделения.
  • pDescriptorSets - это указатель на массив дескрипторов VkDescriptorSet , в котором возвращаются результирующие объекты набора дескрипторов. Массив должен иметь длину не менее, чем указано в элементе descriptorSetCount структуры pAllocateInfo.

Описание

Выделенные наборы дескрипторов возвращаются в pDescriptorSets.

При выделении набора дескрипторов начальное состояние в значительной степени неинициализировано, и все дескрипторы не определены. Однако набор дескрипторов может быть привязан в буфер команд без вызова ошибок или исключений. Все записи, которые статически используются конвейером в команде рисования или отправки, должны быть заполнены до того, как набор дескрипторов будет привязан для использования этой командой. Записи, которые не используются конвейером статически, могут иметь неинициализированные дескрипторы или дескрипторы ресурсов, которые были уничтожены, и выполнение команды рисования или отправки с таким привязанным набором дескрипторов не вызывает неопределенного поведения. Это означает, что приложениям не нужно заполнять неиспользуемые записи фиктивными дескрипторами.

Если выделение завершается неудачей из-за фрагментации, возвращается неопределенная ошибка с неуказанным кодом ошибки. Любая возвращаемая ошибка, кроме VK_ERROR_FRAGMENTED_POOL, не подразумевает своего обычного значения: приложения должны предполагать, что выделение завершилось неудачей из-за фрагментации и создать новый пул дескрипторов.

Примечание

Приложения должны проверять наличие отрицательного значения возврата при выделении новых наборов дескрипторов, предполагать, что любая ошибка фактически означает VK_ERROR_FRAGMENTED_POOL, и попытаться создать новый пул дескрипторов. Если VK_ERROR_FRAGMENTED_POOL является фактическим значением возврата, это добавляет уверенности в этом решении.

Причина этого в том, что VK_ERROR_FRAGMENTED_POOL был добавлен только в более поздней редакции спецификации 1.0, поэтому драйверы могут возвращать другие ошибки, если они были написаны для более ранних редакций. Для обеспечения полной совместимости с более ранними исправлениями допускаются эти другие ошибки.

Правильное использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pAllocateInfo должен быть указателем на допустимую структуру VkDescriptorSetAllocateInfo
  • pDescriptorSets должен быть указателем на массив дескрипторов pAllocateInfo::descriptorSetCount VkDescriptorSet
Синхронизация узла
  • Доступ узла к pAllocateInfo::descriptorPool должен быть внешне синхронизирован
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_FRAGMENTED_POOL

См. также

VkDescriptorSet, VkDescriptorSetAllocateInfo, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkAllocateDescriptorSets

vkAllocateMemory(3)

Имя

vkAllocateMemory - Выделение памяти GPU

Спецификация C

Для выделения объектов памяти вызовите:

VkResult vkAllocateMemory(
    VkDevice                                    device,
    const VkMemoryAllocateInfo*                 pAllocateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkDeviceMemory*                             pMemory);

Параметры

  • device - это логическое устройство, которому принадлежит память.
  • pAllocateInfo - это указатель на экземпляр структуры VkMemoryAllocateInfo , описывающий параметры выделения. Успешное выделение должно использовать запрошенные параметры — замена не допускается реализацией.
  • pAllocator управляет выделением памяти узла, как описано в главе Выделение памяти .
  • pMemory - это указатель на дескриптор VkDeviceMemory , в котором возвращается информация о выделенной памяти.

Описание

Выделения, возвращаемые vkAllocateMemory, гарантированно удовлетворяют любым требованиям к выравниванию со стороны реализации. Например, если реализация требует 128-байтового выравнивания для изображений и 64-байтового выравнивания для буферов, память устройства, возвращаемая через этот механизм, будет выровнена по 128 байтам. Это гарантирует, что приложения могут правильно распределять объекты разных типов (с потенциально различными требованиями к выравниванию) в одном объекте памяти.

Когда память выделяется, ее содержимое не определено.

Существует зависящее от реализации максимальное количество выделений памяти, которые могут быть одновременно созданы на устройстве. Это указано членом maxMemoryAllocationCount структуры VkPhysicalDeviceLimits. Если maxMemoryAllocationCount превышен, vkAllocateMemory вернет VK_ERROR_TOO_MANY_OBJECTS.

Примечание

Некоторые платформы могут иметь ограничение на максимальный размер одного выделения. Например, некоторые системы могут не создавать выделения размером больше или равным 4 ГБ. Такое ограничение зависит от реализации, и если произойдет такой сбой, то должна быть возвращена ошибка VK_ERROR_OUT_OF_DEVICE_MEMORY.

Правильное использование
  • Количество текущих допустимых объектов памяти, выделенных из device, должно быть меньше, чем VkPhysicalDeviceLimits::maxMemoryAllocationCount
Правильное использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pAllocateInfo должен быть указателем на допустимую структуру VkMemoryAllocateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pMemory должен быть указателем на дескриптор VkDeviceMemory
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_TOO_MANY_OBJECTS

См. также

VkAllocationCallbacks, VkDevice, VkDeviceMemory, VkMemoryAllocateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkAllocateMemory

vkBeginCommandBuffer(3)

Имя

vkBeginCommandBuffer - Начало записи буфера команд

Спецификация C

Для начала записи буфера команд вызовите:

VkResult vkBeginCommandBuffer(
    VkCommandBuffer                             commandBuffer,
    const VkCommandBufferBeginInfo*             pBeginInfo);

Параметры

  • commandBuffer is the handle of the command buffer which is to be put in the recording state.
  • pBeginInfo is an instance of the VkCommandBufferBeginInfo structure, which defines additional information about how the command buffer begins recording.

Описание

Правильное использование
  • commandBuffer должен не находиться в состоянии записи или ожидания.
  • Если commandBuffer был выделен из VkCommandPool, у которого не был установлен флаг VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, commandBuffer должен находиться в начальном состоянии.
  • Если commandBuffer является вторичным буфером команд, член pInheritanceInfo структуры pBeginInfo должен быть допустимой структурой VkCommandBufferInheritanceInfo
  • Если commandBuffer является вторичным буфером команд и либо член occlusionQueryEnable члена pInheritanceInfo структуры pBeginInfo равен VK_FALSE, либо функция точных запросов на затенение не включена, член queryFlags члена pInheritanceInfo структуры pBeginInfo не должен содержать VK_QUERY_CONTROL_PRECISE_BIT
Правильное использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • pBeginInfo должен быть указателем на допустимую структуру VkCommandBufferBeginInfo
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkCommandBuffer, VkCommandBufferBeginInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkBeginCommandBuffer

vkBindBufferMemory(3)

Имя

vkBindBufferMemory - Привязка памяти устройства к объекту буфера

C Спецификация

Чтобы прикрепить память к объекту буфера, вызовите:

VkResult vkBindBufferMemory(
    VkDevice                                    device,
    VkBuffer                                    buffer,
    VkDeviceMemory                              memory,
    VkDeviceSize                                memoryOffset);

Параметры

  • device - это логическое устройство, которому принадлежит буфер и память.
  • buffer - это буфер, который будет прикреплен к памяти.
  • memory - это объект VkDeviceMemory, описывающий память устройства для прикрепления.
  • memoryOffset - это начальный смещение области memory, которая должна быть привязана к буферу. Количество байтов, возвращаемое в члене VkMemoryRequirements::size структуры memory, начиная с memoryOffset байтов, будет привязано к указанному буферу.

Описание

Правильное использование
  • buffer не должен уже поддерживаться объектом памяти
  • buffer не должен быть создан с какими-либо флагами привязки разреженной памяти
  • memoryOffset должен быть меньше размера memory
  • Если buffer был создан с VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT или VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, memoryOffset должен быть кратным VkPhysicalDeviceLimits::minTexelBufferOffsetAlignment
  • Если buffer был создан с VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, memoryOffset должен быть кратным VkPhysicalDeviceLimits::minUniformBufferOffsetAlignment
  • Если buffer был создан с VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, memoryOffset должен быть кратным VkPhysicalDeviceLimits::minStorageBufferOffsetAlignment
  • memory должен быть выделен с использованием одного из типов памяти, разрешенных в члене memoryTypeBits структуры VkMemoryRequirements, возвращаемой вызовом vkGetBufferMemoryRequirements с buffer
  • memoryOffset должен быть целым кратным члену alignment структуры VkMemoryRequirements, возвращаемой вызовом vkGetBufferMemoryRequirements с buffer
  • Член size структуры VkMemoryRequirements, возвращаемой вызовом vkGetBufferMemoryRequirements с buffer, должен быть меньше или равен размеру memory минус memoryOffset
Правильное использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • buffer должен быть допустимой дескриптором VkBuffer
  • memory должен быть допустимой дескриптором VkDeviceMemory
  • buffer должен быть создан, выделен или получен из device
  • memory должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к buffer должен быть внешне синхронизирован
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkBuffer, VkDevice, VkDeviceMemory, VkDeviceSize

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkBindBufferMemory

vkBindImageMemory(3)

Имя

vkBindImageMemory - Привязка памяти устройства к объекту изображения

C Спецификация

Чтобы прикрепить память к объекту изображения, вызовите:

VkResult vkBindImageMemory(
    VkDevice                                    device,
    VkImage                                     image,
    VkDeviceMemory                              memory,
    VkDeviceSize                                memoryOffset);

Параметры

  • device - это логическое устройство, которому принадлежит изображение и память.
  • image - это изображение.
  • memory - это объект VkDeviceMemory, описывающий память устройства для прикрепления.
  • memoryOffset - это начальный смещение области memory, которая должна быть привязана к изображению. Количество байтов, возвращаемое в члене VkMemoryRequirements::size структуры memory, начиная с memoryOffset байтов, будет привязано к указанному изображению.

Описание

Правильное использование
  • image не должен уже поддерживаться объектом памяти
  • image не должен быть создан с какими-либо флагами привязки разреженной памяти
  • memoryOffset должен быть меньше размера memory
  • memory должен быть выделен с использованием одного из типов памяти, разрешенных в члене memoryTypeBits структуры VkMemoryRequirements, возвращаемой вызовом vkGetImageMemoryRequirements с image
  • memoryOffset должен быть целым кратным члену alignment структуры VkMemoryRequirements, возвращаемой вызовом vkGetImageMemoryRequirements с image
  • Член size структуры VkMemoryRequirements, возвращаемой вызовом vkGetImageMemoryRequirements с image, должен быть меньше или равен размеру memory минус memoryOffset
Правильное использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • image должен быть допустимой дескриптором VkImage
  • memory должен быть допустимой дескриптором VkDeviceMemory
  • image должен быть создан, выделен или получен из device
  • memory должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к image должен быть внешне синхронизирован
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDevice, VkDeviceMemory, VkDeviceSize, VkImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

END_OF_DOCUMENT_MARKER

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkBindImageMemory

vkCmdBeginQuery(3)

Имя

vkCmdBeginQuery - Начать запрос

C Спецификация

Для начала запроса, вызовите:

void vkCmdBeginQuery(
    VkCommandBuffer                             commandBuffer,
    VkQueryPool                                 queryPool,
    uint32_t                                    query,
    VkQueryControlFlags                         flags);

Параметры

  • commandBuffer - буфер команд, в который будет записана эта команда.
  • queryPool - пул запросов, который будет управлять результатами запроса.
  • query - индекс запроса в пуле запросов, который будет содержать результаты.
  • flags - это битовая маска VkQueryControlFlagBits, указывающая ограничения на типы запросов, которые можно выполнить.

Описание

Если queryType пула равен VK_QUERY_TYPE_OCCLUSION и flags содержит VK_QUERY_CONTROL_PRECISE_BIT, реализация должна вернуть результат, соответствующий фактическому количеству переданных выборок. Это описано более подробно в Запросы на затенение.

После начала запроса этот запрос считается активным в буфере команд, в котором он был вызван, до тех пор, пока этот же запрос не будет завершен. Запросы, активные в основном буфере команд при выполнении вторичных буферов команд, считаются активными для этих вторичных буферов команд.

Допустимое использование
  • Запрос, идентифицированный queryPool и query, не должен быть активным в данный момент
  • Запрос, идентифицированный queryPool и query, должен быть недоступен
  • Если функция точных запросов на затенение не включена, или queryType, используемый для создания queryPool, не был VK_QUERY_TYPE_OCCLUSION, flags не должен содержать VK_QUERY_CONTROL_PRECISE_BIT
  • queryPool должен быть создан с queryType, отличным от любого другого запроса, который был сделан активным и в настоящее время всё ещё активен в commandBuffer
  • query должен быть меньше числа запросов в queryPool
  • Если queryType, используемый для создания queryPool, был VK_QUERY_TYPE_OCCLUSION, то VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Если queryType, используемый для создания queryPool, был VK_QUERY_TYPE_PIPELINE_STATISTICS и любой из pipelineStatistics указывает на графические операции, то VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Если queryType, используемый для создания queryPool, был VK_QUERY_TYPE_PIPELINE_STATISTICS и любой из pipelineStatistics указывает на вычислительные операции, то VkCommandPool, из которого был выделен commandBuffer, должен поддерживать вычислительные операции
Допустимое использование (Неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • queryPool должен быть допустимой дескриптором VkQueryPool
  • flags должен быть допустимым сочетанием значений VkQueryControlFlagBits
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • И commandBuffer, и queryPool должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический
вычислительный

См. также

VkCommandBuffer, VkQueryControlFlags, VkQueryPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdBeginQuery

vkCmdBeginRenderPass(3)

Имя

vkCmdBeginRenderPass - Начать новый проход отрисовки

C Спецификация

Для начала экземпляра прохода отрисовки, вызовите:

void vkCmdBeginRenderPass(
    VkCommandBuffer                             commandBuffer,
    const VkRenderPassBeginInfo*                pRenderPassBegin,
    VkSubpassContents                           contents);

Параметры

  • commandBuffer - буфер команд, в котором необходимо записать команду.
  • pRenderPassBegin - указатель на структуру VkRenderPassBeginInfo (определена ниже), которая указывает проход отрисовки, для которого нужно начать экземпляр, и фреймбуфер, который использует экземпляр.
  • contents - значение VkSubpassContents, указывающее, как будут предоставлены команды в первом подпроходе.

Описание

После начала экземпляра прохода отрисовки буфер команд готов к записи команд для первого подпрохода этого прохода отрисовки.

Правильное использование
  • Если любой из членов initialLayout или finalLayout структур VkAttachmentDescription или член layout структур VkAttachmentReference указанных при создании прохода рендеринга, указанного в члене renderPass pRenderPassBegin, является VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, тогда соответствующий подресурс изображения вложения буфера кадра, указанного в члене framebuffer pRenderPassBegin, должен был быть создан с установленным VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
  • Если любой из членов initialLayout или finalLayout структур VkAttachmentDescription или член layout структур VkAttachmentReference указанных при создании прохода рендеринга, указанного в члене renderPass pRenderPassBegin, является VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL или VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, тогда соответствующий подресурс изображения вложения буфера кадра, указанного в члене framebuffer pRenderPassBegin, должен был быть создан с установленным VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
  • Если любой из членов initialLayout или finalLayout структур VkAttachmentDescription или член layout структур VkAttachmentReference указанных при создании прохода рендеринга, указанного в члене renderPass pRenderPassBegin, является VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, тогда соответствующий подресурс изображения вложения буфера кадра, указанного в члене framebuffer pRenderPassBegin, должен был быть создан с установленным VK_IMAGE_USAGE_SAMPLED_BIT или VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
  • Если любой из членов initialLayout или finalLayout структур VkAttachmentDescription или член layout структур VkAttachmentReference указанных при создании прохода рендеринга, указанного в члене renderPass pRenderPassBegin, является VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, тогда соответствующий подресурс изображения вложения буфера кадра, указанного в члене framebuffer pRenderPassBegin, должен был быть создан с установленным VK_IMAGE_USAGE_TRANSFER_SRC_BIT
  • Если любой из членов initialLayout или finalLayout структур VkAttachmentDescription или член layout структур VkAttachmentReference указанных при создании прохода рендеринга, указанного в члене renderPass pRenderPassBegin, является VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, тогда соответствующий подресурс изображения вложения буфера кадра, указанного в члене framebuffer pRenderPassBegin, должен был быть создан с установленным VK_IMAGE_USAGE_TRANSFER_DST_BIT
  • Если любой из членов initialLayout структур VkAttachmentDescription, указанных при создании прохода рендеринга, указанного в члене renderPass pRenderPassBegin, не является VK_IMAGE_LAYOUT_UNDEFINED, то каждый такой initialLayout должен быть равен текущей компоновке соответствующего подресурса изображения вложения буфера кадра, указанного в члене framebuffer pRenderPassBegin
  • Члены srcStageMask и dstStageMask любого элемента члена pDependencies VkRenderPassCreateInfo, используемого для создания renderpass, должны поддерживаться возможностями семейства очередей, идентифицированного членом queueFamilyIndex VkCommandPoolCreateInfo, используемого для создания пула команд, из которого был выделен commandBuffer.
Правильное использование (неявное)
  • commandBuffer должен быть допустимой дескрипторной ссылкой VkCommandBuffer
  • pRenderPassBegin должен быть указателем на допустимую структуру VkRenderPassBeginInfo
  • contents должен быть допустимым значением VkSubpassContents
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только за пределами экземпляра прохода рендеринга
  • commandBuffer должен быть первичным VkCommandBuffer
Синхронизация узла
  • Доступ узла к commandBuffer должен быть внешне синхронизирован
  • Доступ узла к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команд
Уровни буфера команд Область действия прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Первичный

Вне

Графический

Графический

См. также

VkCommandBuffer, VkRenderPassBeginInfo, VkSubpassContents

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdBeginRenderPass

vkCmdBindDescriptorSets(3)

Имя

vkCmdBindDescriptorSets - Привязывает наборы дескрипторов к буферу команд

C-спецификация

Чтобы привязать один или несколько наборов дескрипторов к буферу команд, вызовите:

void vkCmdBindDescriptorSets(
    VkCommandBuffer                             commandBuffer,
    VkPipelineBindPoint                         pipelineBindPoint,
    VkPipelineLayout                            layout,
    uint32_t                                    firstSet,
    uint32_t                                    descriptorSetCount,
    const VkDescriptorSet*                      pDescriptorSets,
    uint32_t                                    dynamicOffsetCount,
    const uint32_t*                             pDynamicOffsets);

Параметры

  • commandBuffer - это буфер команд, к которому будут привязаны наборы дескрипторов.
  • pipelineBindPoint - это VkPipelineBindPoint, указывающий, будут ли дескрипторы использоваться графическими конвейерами или конвейерами вычислений. Для графических и вычислительных конвейеров существует отдельный набор точек привязки, поэтому привязка одной не влияет на другую.
  • layout - это объект VkPipelineLayout, используемый для программирования привязок.
  • firstSet - это номер набора первого набора дескрипторов, который будет привязан.
  • descriptorSetCount - это количество элементов в массиве pDescriptorSets.
  • pDescriptorSets - это массив дескрипторных ссылок на объекты VkDescriptorSet, описывающие наборы дескрипторов для записи.
  • dynamicOffsetCount - это количество динамических смещений в массиве pDynamicOffsets.
  • pDynamicOffsets - это указатель на массив значений uint32_t, указывающих динамические смещения.

Описание

vkCmdBindDescriptorSets приводит к тому, что наборы с номерами [firstSet.. firstSet+descriptorSetCount-1] будут использовать привязки, хранящиеся в pDescriptorSets[0..descriptorSetCount-1] для последующих команд рендеринга (либо вычислений, либо графики, в зависимости от pipelineBindPoint). Любые привязки, которые были применены ранее с помощью этих наборов, больше недействительны.

После привязки набор дескрипторов влияет на рендеринг последующих графических или вычислительных команд в буфере команд, пока не будет привязан другой набор к тому же номеру набора, или пока набор не будет нарушен, как описано в Совместимость компоновки конвейера.

Совместимый набор дескрипторов должен быть привязан для всех номеров наборов, к которым обращаются любые шейдеры в конвейере, в момент записи команды отрисовки или отправки для выполнения с использованием этого конвейера. Однако, если ни один из шейдеров в конвейере статически не использует привязки с определенным номером набора, то никакой набор дескрипторов не должен быть привязан для этого номера набора, даже если компоновка конвейера включает в себя нетривиальную компоновку набора дескрипторов для этого номера набора.

Если любой из привязываемых наборов включает динамические униформные или буферы хранилища, то pDynamicOffsets включает один элемент для каждого элемента массива в каждой привязке к динамическому типу дескриптора в каждом наборе. Значения берутся из pDynamicOffsets в таком порядке, что все записи для набора N идут перед набором N+1; внутри набора записи упорядочены по номерам привязки в компоновках наборов дескрипторов; и внутри массива привязок элементы упорядочены. dynamicOffsetCount должен быть равен общему количеству динамических дескрипторов в привязываемых наборах.

Эффективное смещение, используемое для динамических униформных и буферных привязок хранилища, представляет собой сумму относительного смещения, взятого из pDynamicOffsets, и базового адреса буфера плюс базовое смещение в наборе дескрипторов. Длина динамических униформных и буферных привязок хранилища — это диапазон буфера, как указано в наборе дескрипторов.

Каждый из pDescriptorSets должен быть совместим с компоновкой конвейера, указанной layout. Компоновка, используемая для программирования привязок, также должна быть совместима с конвейером, используемым в последующих графических или вычислительных командах, как определено в разделе Совместимость компоновки конвейера.

Содержимое набора дескрипторов, привязанное вызовом к vkCmdBindDescriptorSets, может быть использовано во время выполнения команды узлом или во время выполнения шейдера результирующих отрисовок, или в любое время между ними. Таким образом, содержимое не должно изменяться (перезаписываться командой обновления или освобождаться) между моментом записи команды и моментом завершения выполнения команды в очереди. Содержимое pDynamicOffsets используется немедленно во время выполнения vkCmdBindDescriptorSets. После завершения всех ожидающих использований разрешено обновлять и повторно использовать набор дескрипторов.

Допустимое использование
  • Любой заданный элемент pDescriptorSets должен быть выделен с помощью VkDescriptorSetLayout, который соответствует (является таким же, как или идентично определен как) VkDescriptorSetLayout в наборе n в layout, где n — это сумма firstSet и индекса в pDescriptorSets
  • dynamicOffsetCount должно быть равно общему числу динамических дескрипторов в pDescriptorSets
  • Сумма firstSet и descriptorSetCount должна быть меньше или равна VkPipelineLayoutCreateInfo::setLayoutCount, предоставленная при создании layout
  • pipelineBindPoint должна поддерживаться семейством очередей родительского VkCommandPool commandBuffer
  • Любой заданный элемент pDynamicOffsets должен удовлетворять требуемому выравниванию для типа дескриптора соответствующего связывания дескриптора
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескрипторной переменной VkCommandBuffer
  • pipelineBindPoint должно быть допустимым значением VkPipelineBindPoint
  • layout должен быть допустимой дескрипторной переменной VkPipelineLayout
  • pDescriptorSets должен быть указателем на массив допустимых дескрипторных переменных VkDescriptorSet descriptorSetCount
  • Если dynamicOffsetCount не 0, pDynamicOffsets должен быть указателем на массив значений uint32_t dynamicOffsetCount
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • descriptorSetCount должно быть больше 0
  • Каждый из commandBuffer, layout и элементов pDescriptorSets должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический
вычислительный

См. также

VkCommandBuffer, VkDescriptorSet, VkPipelineBindPoint, VkPipelineLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdBindDescriptorSets

vkCmdBindIndexBuffer(3)

Название

vkCmdBindIndexBuffer - Привязка буфера индексов к буферу команд

Спецификация C

Для привязки буфера индексов к буферу команд вызовите:

void vkCmdBindIndexBuffer(
    VkCommandBuffer                             commandBuffer,
    VkBuffer                                    buffer,
    VkDeviceSize                                offset,
    VkIndexType                                 indexType);

Параметры

  • commandBuffer — это буфер команд, в который записывается команда.
  • buffer — это привязываемый буфер.
  • offset — это начальное смещение в байтах внутри buffer, используемое в вычислениях адреса буфера индексов.
  • indexType — это значение VkIndexType, указывающее, обрабатываются ли индексы как 16-битные или 32-битные.

Описание

Допустимое использование
  • offset должно быть меньше размера buffer
  • Сумма offset и адреса диапазона объекта VkDeviceMemory, который поддерживает buffer, должна быть кратна типу, указанному indexType
  • buffer должен быть создан с флагом VK_BUFFER_USAGE_INDEX_BUFFER_BIT
  • Если buffer не является разреженным, то он должен быть полностью и непрерывно привязан к одному объекту VkDeviceMemory
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескрипторной переменной VkCommandBuffer
  • buffer должен быть допустимой дескрипторной переменной VkBuffer
  • indexType должно быть допустимым значением VkIndexType
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • И buffer, и commandBuffer должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический

См. также

VkBuffer, VkCommandBuffer, VkDeviceSize, VkIndexType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdBindIndexBuffer

vkCmdBindPipeline(3)

Название

vkCmdBindPipeline - Привязка объекта конвейера к буферу команд

Спецификация C

После создания конвейера его можно привязать к буферу команд с помощью команды:

void vkCmdBindPipeline(
    VkCommandBuffer                             commandBuffer,
    VkPipelineBindPoint                         pipelineBindPoint,
    VkPipeline                                  pipeline);

Параметры

  • commandBuffer — это буфер команд, к которому будет привязан конвейер.
  • pipelineBindPoint — это значение VkPipelineBindPoint, указывающее, следует ли привязывать к вычислительной или графической точке привязки. Привязка одной точки не влияет на другую.
  • pipeline — это привязываемый конвейер.

Описание

После привязки привязка конвейера влияет на последующие графические или вычислительные команды в буфере команд, пока к точке привязки не будет привязан другой конвейер. Конвейер, привязанный к VK_PIPELINE_BIND_POINT_COMPUTE, управляет поведением vkCmdDispatch и vkCmdDispatchIndirect. Конвейер, привязанный к VK_PIPELINE_BIND_POINT_GRAPHICS, управляет поведением vkCmdDraw, vkCmdDrawIndexed, vkCmdDrawIndirect и vkCmdDrawIndexedIndirect. На другие команды состояние конвейера не влияет.

Допустимое использование
  • Если pipelineBindPoint есть VK_PIPELINE_BIND_POINT_COMPUTE, то VkCommandPool, из которого был выделен commandBuffer, должен поддерживать вычислительные операции
  • Если pipelineBindPoint есть VK_PIPELINE_BIND_POINT_GRAPHICS, то VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Если pipelineBindPoint есть VK_PIPELINE_BIND_POINT_COMPUTE, pipeline должен быть вычислительным конвейером
  • Если pipelineBindPoint есть VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline должен быть графическим конвейером
  • Если функция variable multisample rate не поддерживается, pipeline является графическим конвейером, текущий подпроход не имеет вложений, и это не первый вызов этой функции с графическим конвейером после перехода к текущему подпроходу, то количество выборок, указанное этим конвейером, должно совпадать с тем, которое было установлено в предыдущем конвейере
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • pipelineBindPoint должен быть допустимым значением VkPipelineBindPoint
  • pipeline должен быть допустимой дескриптором VkPipeline
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • И commandBuffer, и pipeline должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команд
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический
вычислительный

См. также

VkCommandBuffer, VkPipeline, VkPipelineBindPoint

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdBindPipeline

vkCmdBindVertexBuffers(3)

Имя

vkCmdBindVertexBuffers - Привязка буферов вершин к буферу команд

C-спецификация

Для привязки буферов вершин к буферу команд для использования в последующих командах отрисовки, вызовите:

void vkCmdBindVertexBuffers(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    firstBinding,
    uint32_t                                    bindingCount,
    const VkBuffer*                             pBuffers,
    const VkDeviceSize*                         pOffsets);

Параметры

  • commandBuffer - буфер команд, в который записывается команда.
  • firstBinding - индекс первого привязывания входных данных вершин, состояние которого обновляется командой.
  • bindingCount - количество привязываний входных данных вершин, состояние которых обновляется командой.
  • pBuffers - указатель на массив дескрипторов буферов.
  • pOffsets - указатель на массив смещений буферов.

Описание

Значения, взятые из элементов i pBuffers и pOffsets, заменяют текущее состояние для привязывания входных данных вершин firstBinding + i, для i в [0, bindingCount). Привязка входных данных вершин обновляется так, чтобы начинаться со смещения, указанного pOffsets[i] от начала буфера pBuffers[i]. Все атрибуты входных данных вершин, которые используют каждое из этих привязываний, будут использовать эти обновленные адреса в своих вычислениях адресов для последующих команд отрисовки.

Допустимое использование
  • firstBinding должен быть меньше, чем VkPhysicalDeviceLimits::maxVertexInputBindings
  • Сумма firstBinding и bindingCount должна быть меньше или равна VkPhysicalDeviceLimits::maxVertexInputBindings
  • Все элементы pOffsets должны быть меньше размера соответствующего элемента в pBuffers
  • Все элементы pBuffers должны быть созданы с флагом VK_BUFFER_USAGE_VERTEX_BUFFER_BIT
  • Каждый элемент pBuffers, который не является разреженным, должен быть полностью и непрерывно привязан к одному объекту VkDeviceMemory
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • pBuffers должен быть указателем на массив bindingCount допустимых дескрипторов VkBuffer
  • pOffsets должен быть указателем на массив bindingCount значений VkDeviceSize
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • bindingCount должен быть больше, чем 0
  • И commandBuffer, и элементы pBuffers должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команд
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический

См. также

VkBuffer, VkCommandBuffer, VkDeviceSize

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdBindVertexBuffers

vkCmdBlitImage(3)

Имя

vkCmdBlitImage - Копирование областей изображения, потенциально с преобразованием формата,

C-спецификация

Для копирования областей исходного изображения в целевое изображение, потенциально с преобразованием формата, произвольным масштабированием и фильтрацией, вызовите:

void vkCmdBlitImage(
    VkCommandBuffer                             commandBuffer,
    VkImage                                     srcImage,
    VkImageLayout                               srcImageLayout,
    VkImage                                     dstImage,
    VkImageLayout                               dstImageLayout,
    uint32_t                                    regionCount,
    const VkImageBlit*                          pRegions,
    VkFilter                                    filter);

Параметры

  • commandBuffer - буфер команд, в который будет записана команда.
  • srcImage - исходное изображение.
  • srcImageLayout - компоновка подресурсов исходного изображения для копирования.
  • dstImage - целевое изображение.
  • dstImageLayout - компоновка подресурсов целевого изображения для копирования.
  • regionCount - количество областей для копирования.
  • pRegions - указатель на массив структур VkImageBlit, указывающих области для копирования.
  • filter - VkFilter, указывающий фильтр для применения, если копирование требует масштабирования.

Описание

vkCmdBlitImage не должен использоваться для многовыборочных исходных или целевых изображений. Используйте vkCmdResolveImage для этой цели.

Так как размеры исходных и целевых областей могут отличаться в любом измерении, тексели в исходной области масштабируются и фильтруются до целевого размера. Масштабирование происходит с помощью следующих операций:

  • Для каждого целевого текселя целочисленная координата этого текселя преобразуется в ненормализованную текстурную координату с использованием эффективного обратного преобразования уравнений, описанных в преобразовании из ненормализованных в целочисленные значения:

    ubase = i + ½
    vbase = j + ½
    wbase = k + ½
  • Затем к этим базовым координатам применяется смещение первого целевого смещения:

    uoffset = ubase - xdst0
    voffset = vbase - ydst0
    woffset = wbase - zdst0
    aoffset = a - baseArrayCountdst
  • Масштаб определяется из исходных и целевых областей и применяется к смещенным координатам:

    scale_u = (xsrc1 - xsrc0) / (xdst1 - xdst0)
    scale_v = (ysrc1 - ysrc0) / (ydst1 - ydst0)
    scale_w = (zsrc1 - zsrc0) / (zdst1 - zdst0)
    uscaled = uoffset * scaleu
    vscaled = voffset * scalev
    wscaled = woffset * scalew
  • Наконец, к масштабированным координатам добавляется исходное смещение, чтобы определить окончательные ненормализованные координаты, используемые для выборки из srcImage:

    u = uscaled + xsrc0
    v = vscaled + ysrc0
    w = wscaled + zsrc0
    q = mipLevel
    a = aoffset + baseArrayCountsrc

Эти координаты используются для выборки из исходного изображения, как описано в главе «Операции с изображениями», с режимом фильтрации, равным режиму filter, режимом mipmap VK_SAMPLER_MIPMAP_MODE_NEAREST и режимом адресации VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE. Реализации должны выполнять привязку к краю исходного изображения и могут дополнительно выполнять привязку к краю исходной области.

Примечание

Из-за допустимых ошибок округления при генерации координат исходной текстуры не всегда можно гарантировать, какие именно исходные тексели будут выбраны для данного blit. Поскольку ошибки округления зависят от реализации, точные результаты операции blit также зависят от реализации.

Операции blit выполняются послойно, начиная с элемента baseArrayLayer srcSubresource для источника и dstSubresource для назначения. layerCount слоёв копируется в целевое изображение.

Трехмерные текстуры копируются слой за слоем. Слои в исходной области, ограниченной srcOffsets[0].z и srcOffsets[1].z, копируются в слои в целевой области, ограниченной dstOffsets[0].z и dstOffsets[1].z. Для каждого целевого слоя координата z источника линейно интерполируется между srcOffsets[0].z и srcOffsets[1].z. Если параметр filter равен VK_FILTER_LINEAR, то значение, выбранное из исходного изображения, берется путем линейной фильтрации с использованием интерполированной координаты z. Если параметр filter равен VK_FILTER_NEAREST, то значение, выбранное из исходного изображения, берется из одного ближайшего слоя (с неопределенным режимом округления).

Применяются следующие правила фильтрации и преобразования:

  • Целочисленные форматы могут быть преобразованы только в другие целочисленные форматы с той же знакостью.
  • Преобразование форматов не поддерживается между изображениями глубины/трафарета. Форматы должны совпадать.
  • Преобразования форматов для unorm, snorm, unscaled и packed float форматов скопированного аспекта изображения выполняются путем предварительного преобразования пикселей в значения с плавающей точкой.
  • Для исходных форматов sRGB нелинейные значения RGB преобразуются в линейное представление перед фильтрацией.
  • После фильтрации значения с плавающей точкой сначала ограничиваются, а затем преобразуются в формат целевого изображения. В случае формата sRGB назначения линейные значения RGB преобразуются в нелинейное представление перед записью пикселя в изображение.

Знаковые и беззнаковые целые числа преобразуются путем предварительного ограничения до представимого диапазона целевого формата, а затем преобразования значения.

Допустимое использование
  • Исходная область, указанная данным элементом pRegions, должна быть областью, которая содержится в srcImage
  • Целевая область, указанная данным элементом pRegions, должна быть областью, которая содержится в dstImage
  • Объединение всех целевых областей, указанных элементами pRegions, не должно перекрываться в памяти с любым текселем, который может быть выбран во время операции blit
  • srcImage должен использовать формат, который поддерживает VK_FORMAT_FEATURE_BLIT_SRC_BIT, что указывается VkFormatProperties::linearTilingFeatures (для линейно расположенных изображений) или VkFormatProperties::optimalTilingFeatures (для оптимально расположенных изображений) - как возвращается vkGetPhysicalDeviceFormatProperties
  • srcImage должен быть создан с флагом использования VK_IMAGE_USAGE_TRANSFER_SRC_BIT
  • Если srcImage не разрежен, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • srcImageLayout должен указывать компоновку подобластей изображения srcImage, указанных в pRegions, в момент выполнения этой команды на VkDevice
  • srcImageLayout должен быть VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • dstImage должен использовать формат, который поддерживает VK_FORMAT_FEATURE_BLIT_DST_BIT, что указывается VkFormatProperties::linearTilingFeatures (для линейно расположенных изображений) или VkFormatProperties::optimalTilingFeatures (для оптимально расположенных изображений) - как возвращается vkGetPhysicalDeviceFormatProperties
  • dstImage должен быть создан с флагом использования VK_IMAGE_USAGE_TRANSFER_DST_BIT
  • Если dstImage не разрежен, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • dstImageLayout должен указывать компоновку подобластей изображения dstImage, указанных в pRegions, в момент выполнения этой команды на VkDevice
  • dstImageLayout должен быть VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • Количество выборок srcImage и dstImage должны быть равны VK_SAMPLE_COUNT_1_BIT
  • Если любой из srcImage или dstImage был создан с использованием знакового целого числа VkFormat, то другой также должен быть создан с использованием знакового целого числа VkFormat
  • Если любой из srcImage или dstImage был создан с использованием беззнакового целого числа VkFormat, то другой также должен быть создан с использованием беззнакового целого числа VkFormat
  • Если любой из srcImage или dstImage был создан с использованием формата глубины/трафарета, то другой должен иметь точно такой же формат
  • Если srcImage был создан с использованием формата глубины/трафарета, filter должен быть VK_FILTER_NEAREST
  • srcImage должен быть создан со значением samples равным VK_SAMPLE_COUNT_1_BIT
  • dstImage должен быть создан со значением samples равным VK_SAMPLE_COUNT_1_BIT
  • Если filter равен VK_FILTER_LINEAR, srcImage должен иметь формат, который поддерживает линейную фильтрацию, как указано флагом VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT в VkFormatProperties::linearTilingFeatures (для линейного изображения) или VkFormatProperties::optimalTilingFeatures (для оптимально расположенного изображения), возвращаемым vkGetPhysicalDeviceFormatProperties
Допустимое использование (Неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • srcImage должен быть допустимой дескриптором VkImage
  • srcImageLayout должен быть допустимым значением VkImageLayout
  • dstImage должен быть допустимой дескриптором VkImage
  • dstImageLayout должен быть допустимым значением VkImageLayout
  • pRegions должен быть указателем на массив из regionCount допустимых структур VkImageBlit
  • filter должен быть допустимым значением VkFilter
  • commandBuffer должен находиться в состоянии записи
  • Пул команд VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только за пределами экземпляра прохода рендеринга
  • regionCount должен быть больше 0
  • Каждый из commandBuffer, dstImage и srcImage должен быть создан, выделен или получен из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, который был выделен из commandBuffer, должен быть синхронизирован внешним образом
Свойства команд
Уровни буферов команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внешний

Графический

Передача

См. также

VkCommandBuffer, VkFilter, VkImage, VkImageBlit, VkImageLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdBlitImage

vkCmdClearAttachments(3)

Имя

vkCmdClearAttachments - Очистка областей внутри текущих связанных вложений фреймбуфера

Спецификация C

Чтобы очистить одну или несколько областей цветных и глубинно-трафаретных вложений внутри экземпляра прохода отрисовки, вызовите:

void vkCmdClearAttachments(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    attachmentCount,
    const VkClearAttachment*                    pAttachments,
    uint32_t                                    rectCount,
    const VkClearRect*                          pRects);

Параметры

  • commandBuffer - это буфер команд, в который будет записана команда.
  • attachmentCount - это число записей в массиве pAttachments.
  • pAttachments - это указатель на массив структур VkClearAttachment, определяющих вложения для очистки и используемые значения очистки.
  • rectCount - это число записей в массиве pRects.
  • pRects указывает на массив структур VkClearRect, определяющих области внутри каждого выбранного вложения для очистки.

Описание

vkCmdClearAttachments может очищать несколько областей каждого вложения, используемого в текущем подпроходе экземпляра прохода отрисовки. Эта команда должна вызываться только внутри экземпляра прохода отрисовки и неявно выбирает изображения для очистки на основе текущих вложений фреймбуфера и параметров команды.

Допустимое использование
  • Если член aspectMask любого данного элемента pAttachments содержит VK_IMAGE_ASPECT_COLOR_BIT, член colorAttachment этих элементов должен ссылаться на допустимое цветное вложение в текущем подпроходе
  • Прямоугольная область, указанная данным элементом pRects, должна находиться внутри области отрисовки текущего экземпляра прохода отрисовки
  • Слои, указанные данным элементом pRects, должны находиться внутри каждого вложения, на которое ссылается pAttachments
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • pAttachments должен быть указателем на массив attachmentCount допустимых структур VkClearAttachment
  • pRects должен быть указателем на массив rectCount структур VkClearRect
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только внутри экземпляра прохода отрисовки
  • attachmentCount должен быть больше 0
  • rectCount должен быть больше 0
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, который был выделен из commandBuffer, должен быть синхронизирован внешним образом
Свойства команд
Уровни буферов команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внутренний

Графический

Графический

См. также

VkClearAttachment, VkClearRect, VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdClearAttachments

vkCmdClearColorImage(3)

Имя

vkCmdClearColorImage - Очистка областей цветного изображения

Спецификация C

Чтобы очистить один или несколько подобластей цветного изображения, вызовите:

void vkCmdClearColorImage(
    VkCommandBuffer                             commandBuffer,
    VkImage                                     image,
    VkImageLayout                               imageLayout,
    const VkClearColorValue*                    pColor,
    uint32_t                                    rangeCount,
    const VkImageSubresourceRange*              pRanges);

Параметры

  • commandBuffer - это буфер команд, в который будет записана команда.
  • image - это изображение, которое будет очищено.
  • imageLayout указывает текущий макет диапазонов подобластей изображения, которые будут очищены, и должен быть VK_IMAGE_LAYOUT_GENERAL или VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
  • pColor - это указатель на структуру VkClearColorValue, которая содержит значения, до которых будут очищены диапазоны подобластей изображения (см. html/vkspec.html#clears-values ниже).
  • rangeCount - это число структур диапазона подобластей изображения в pRanges.
  • pRanges указывает на массив структур VkImageSubresourceRange, которые описывают диапазон уровней mipmap, слоев массива и аспектов, которые должны быть очищены, как описано в Представлениях изображений. aspectMask всех диапазонов подобластей изображения должен включать только VK_IMAGE_ASPECT_COLOR_BIT.

Описание

Каждый указанный диапазон в pRanges очищается до значения, указанного pColor.

Допустимое использование
  • image должен быть создан с флагом использования VK_IMAGE_USAGE_TRANSFER_DST_BIT
  • Если image не разреженный, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • imageLayout должен указывать на расположение диапазонов подобъектов изображения image указанных в pRanges в момент выполнения этой команды на VkDevice
  • imageLayout должен быть VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • Члены VkImageSubresourceRange::baseMipLevel элементов массива pRanges должны быть меньше mipLevels указанного в VkImageCreateInfo при создании image
  • Если член VkImageSubresourceRange::levelCount любого элемента массива pRanges не равен VK_REMAINING_MIP_LEVELS, он должен быть не нулевым, и VkImageSubresourceRange::baseMipLevel + VkImageSubresourceRange::levelCount для этого элемента массива pRanges должны быть меньше или равны mipLevels указанному в VkImageCreateInfo при создании image
  • Члены VkImageSubresourceRange::baseArrayLayer элементов массива pRanges должны быть меньше arrayLayers указанного в VkImageCreateInfo при создании image
  • Если член VkImageSubresourceRange::layerCount любого элемента массива pRanges не равен VK_REMAINING_ARRAY_LAYERS, он должен быть не нулевым, и VkImageSubresourceRange::baseArrayLayer + VkImageSubresourceRange::layerCount для этого элемента массива pRanges должны быть меньше или равны arrayLayers указанному в VkImageCreateInfo при создании image
  • image не должен иметь сжатый или depth/stencil формат
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • image должен быть допустимой дескриптором VkImage
  • imageLayout должен быть допустимым значением VkImageLayout
  • pColor должен быть указателем на допустимый союз VkClearColorValue
  • pRanges должен быть указателем на массив rangeCount допустимых структур VkImageSubresourceRange
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
  • rangeCount должен быть больше 0
  • И commandBuffer, и image должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Свойства команд
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очереди Тип конвейера

Основной
Вторичный

Вне

Графический
вычислительный

Передача

См. также

VkClearColorValue, VkCommandBuffer, VkImage, VkImageLayout, VkImageSubresourceRange

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdClearColorImage

vkCmdClearDepthStencilImage(3)

Имя

vkCmdClearDepthStencilImage - Заполнение областей объединенного изображения глубины/трафарета

C Спецификация

Чтобы очистить один или несколько подобластей изображения глубины/трафарета, вызовите:

void vkCmdClearDepthStencilImage(
    VkCommandBuffer                             commandBuffer,
    VkImage                                     image,
    VkImageLayout                               imageLayout,
    const VkClearDepthStencilValue*             pDepthStencil,
    uint32_t                                    rangeCount,
    const VkImageSubresourceRange*              pRanges);

Параметры

  • commandBuffer - это буфер команд, в который будет записана команда.
  • image - это изображение, которое будет очищено.
  • imageLayout указывает текущее расположение диапазонов подобъектов изображения, которые будут очищены, и должен быть VK_IMAGE_LAYOUT_GENERAL или VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
  • pDepthStencil - это указатель на структуру VkClearDepthStencilValue, которая содержит значения, до которых будут очищены диапазоны подобъектов изображения глубины и трафарета (см. html/vkspec.html#clears-values ниже).
  • rangeCount - это количество структур диапазонов подобъектов изображения в pRanges.
  • pRanges указывает на массив структур VkImageSubresourceRange, которые описывают диапазон уровней mipmap, слоев массива и аспектов, которые будут очищены, как описано в Представлениях изображений. aspectMask каждого диапазона подобъектов изображения в pRanges может включать VK_IMAGE_ASPECT_DEPTH_BIT, если формат изображения имеет компонент глубины, и VK_IMAGE_ASPECT_STENCIL_BIT, если формат изображения имеет компонент трафарета. pDepthStencil - это указатель на структуру VkClearDepthStencilValue, которая содержит значения, до которых будут очищены диапазоны подобъектов изображения (см. html/vkspec.html#clears-values ниже).

Описание

Допустимое использование
  • image должен быть создан с флагом использования VK_IMAGE_USAGE_TRANSFER_DST_BIT
  • Если image не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • imageLayout должен указывать макет диапазонов подобъектов изображения image, указанных в pRanges, в момент выполнения этой команды на VkDevice
  • imageLayout должен быть одним из VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • Элементы VkImageSubresourceRange::baseMipLevel элементов массива pRanges должны быть меньше mipLevels, указанного в VkImageCreateInfo при создании image
  • Если элемент VkImageSubresourceRange::levelCount любого элемента массива pRanges не равен VK_REMAINING_MIP_LEVELS, он должен быть не нулевым, и VkImageSubresourceRange::baseMipLevel + VkImageSubresourceRange::levelCount для этого элемента массива pRanges должны быть меньше или равны mipLevels, указанному в VkImageCreateInfo при создании image
  • Элементы VkImageSubresourceRange::baseArrayLayer элементов массива pRanges должны быть меньше arrayLayers, указанного в VkImageCreateInfo при создании image
  • Если элемент VkImageSubresourceRange::layerCount любого элемента массива pRanges не равен VK_REMAINING_ARRAY_LAYERS, он должен быть не нулевым, и VkImageSubresourceRange::baseArrayLayer + VkImageSubresourceRange::layerCount для этого элемента массива pRanges должны быть меньше или равны arrayLayers, указанному в VkImageCreateInfo при создании image
  • image должен иметь формат глубины/трафарета
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • image должен быть допустимой дескриптором VkImage
  • imageLayout должен быть допустимым значением VkImageLayout
  • pDepthStencil должен быть указателем на допустимую структуру VkClearDepthStencilValue
  • pRanges должен быть указателем на массив допустимых структур rangeCount VkImageSubresourceRange
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
  • rangeCount должен быть больше 0
  • И commandBuffer, и image должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область действия прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Вне

Графический

Передача

См. также

VkClearDepthStencilValue, VkCommandBuffer, VkImage, VkImageLayout, VkImageSubresourceRange

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdClearDepthStencilImage

vkCmdCopyBuffer(3)

Имя

vkCmdCopyBuffer - Копирование данных между областями буфера

C-спецификация

Для копирования данных между объектами буфера вызовите:

void vkCmdCopyBuffer(
    VkCommandBuffer                             commandBuffer,
    VkBuffer                                    srcBuffer,
    VkBuffer                                    dstBuffer,
    uint32_t                                    regionCount,
    const VkBufferCopy*                         pRegions);

Параметры

  • commandBuffer - буфер команд, в который будет записана команда.
  • srcBuffer - исходный буфер.
  • dstBuffer - целевой буфер.
  • regionCount - количество областей для копирования.
  • pRegions - указатель на массив структур VkBufferCopy, указывающих области для копирования.

Описание

Каждый регион в pRegions копируется из исходного буфера в тот же регион целевого буфера. srcBuffer и dstBuffer могут быть одним и тем же буфером или псевдонимом одной и той же памяти, но результат не определен, если области копирования перекрываются в памяти.

Допустимое использование
  • Элемент size данного элемента pRegions должен быть больше 0
  • Элемент srcOffset данного элемента pRegions должен быть меньше размера srcBuffer
  • Элемент dstOffset данного элемента pRegions должен быть меньше размера dstBuffer
  • Элемент size данного элемента pRegions должен быть меньше или равен размеру srcBuffer минус srcOffset
  • Элемент size данного элемента pRegions должен быть меньше или равен размеру dstBuffer минус dstOffset
  • Объединение исходных областей и объединение целевых областей, указанных элементами pRegions, не должны перекрываться в памяти
  • srcBuffer должен быть создан с флагом использования VK_BUFFER_USAGE_TRANSFER_SRC_BIT
  • Если srcBuffer не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • dstBuffer должен быть создан с флагом использования VK_BUFFER_USAGE_TRANSFER_DST_BIT
  • Если dstBuffer не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • srcBuffer должен быть допустимой дескриптором VkBuffer
  • dstBuffer должен быть допустимой дескриптором VkBuffer
  • pRegions должен быть указателем на массив структур regionCount VkBufferCopy
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать операции передачи, графики или вычислений
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
  • regionCount должен быть больше 0
  • Каждый из commandBuffer, dstBuffer и srcBuffer должен быть создан, выделен или получен из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Свойства команд
Уровни буфера команд Область действия прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внешний

Передача
графика
вычисления

Передача

См. также

VkBuffer, VkBufferCopy, VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdCopyBuffer

vkCmdCopyBufferToImage(3)

Имя

vkCmdCopyBufferToImage - Копирование данных из буфера в изображение

C-спецификация

Для копирования данных из буферного объекта в объектный объект изображения вызовите:

void vkCmdCopyBufferToImage(
    VkCommandBuffer                             commandBuffer,
    VkBuffer                                    srcBuffer,
    VkImage                                     dstImage,
    VkImageLayout                               dstImageLayout,
    uint32_t                                    regionCount,
    const VkBufferImageCopy*                    pRegions);

Параметры

  • commandBuffer - это буфер команд, в который будет записана команда.
  • srcBuffer - это исходный буфер.
  • dstImage - это целевое изображение.
  • dstImageLayout - это компоновка целевых подобъектов изображения для копирования.
  • regionCount - это количество областей для копирования.
  • pRegions - это указатель на массив структур VkBufferImageCopy, указывающих области для копирования.

Описание

Каждая область в pRegions копируется из указанной области исходного буфера в указанную область целевого изображения.

Допустимое использование
  • Область буфера, указанная данным элементом pRegions, должна быть областью, которая содержится в srcBuffer
  • Область изображения, указанная данным элементом pRegions, должна быть областью, которая содержится в dstImage
  • Объединение всех исходных областей и объединение всех целевых областей, указанных элементами pRegions, не должны перекрываться в памяти
  • srcBuffer должен был создан с флагом использования VK_BUFFER_USAGE_TRANSFER_SRC_BIT
  • Если srcBuffer не является разреженным, то он должен быть полностью и непрерывно привязан к одному объекту VkDeviceMemory
  • dstImage должен был создан с флагом использования VK_IMAGE_USAGE_TRANSFER_DST_BIT
  • Если dstImage не является разреженным, то он должен быть полностью и непрерывно привязан к одному объекту VkDeviceMemory
  • dstImage должен иметь количество выборок, равное VK_SAMPLE_COUNT_1_BIT
  • dstImageLayout должен указывать компоновку подобъектов изображения dstImage, указанных в pRegions, в момент выполнения этой команды в VkDevice
  • dstImageLayout должен быть VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескрипторной ссылкой VkCommandBuffer
  • srcBuffer должен быть допустимой дескрипторной ссылкой VkBuffer
  • dstImage должен быть допустимой дескрипторной ссылкой VkImage
  • dstImageLayout должен быть допустимым значением VkImageLayout
  • pRegions должен быть указателем на массив из regionCount допустимых структур VkBufferImageCopy
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать операции передачи, графики или вычислений
  • Эта команда должна вызываться только за пределами экземпляра прохода рендеринга
  • regionCount должен быть больше 0
  • Каждый из commandBuffer, dstImage и srcBuffer должен быть создан, выделен или получен из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Свойства команд
Уровни буфера команд Область действия прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внешний

Передача
графика
вычисления

Передача

См. также

VkBuffer, VkBufferImageCopy, VkCommandBuffer, VkImage, VkImageLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdCopyBufferToImage

vkCmdCopyImage(3)

Имя

vkCmdCopyImage - Копирование данных между изображениями

C-спецификация

Для копирования данных между объектами изображения вызовите:

void vkCmdCopyImage(
    VkCommandBuffer                             commandBuffer,
    VkImage                                     srcImage,
    VkImageLayout                               srcImageLayout,
    VkImage                                     dstImage,
    VkImageLayout                               dstImageLayout,
    uint32_t                                    regionCount,
    const VkImageCopy*                          pRegions);

Параметры

  • commandBuffer - это буфер команд, в который будет записана команда.
  • srcImage - это исходное изображение.
  • srcImageLayout - это текущая компоновка подобъекта исходного изображения.
  • dstImage - это целевое изображение.
  • dstImageLayout - это текущая компоновка подобъекта целевого изображения.
  • regionCount - это количество областей для копирования.
  • pRegions - это указатель на массив структур VkImageCopy, указывающих области для копирования.

Описание

Каждая область в pRegions копируется из исходного изображения в ту же область целевого изображения. srcImage и dstImage могут быть одним и тем же изображением или псевдонимом одной и той же памяти.

Форматы srcImage и dstImage должны быть совместимы. Форматы считаются совместимыми, если размер их элементов одинаков в обоих форматах. Например, VK_FORMAT_R8G8B8A8_UNORM совместим с VK_FORMAT_R32_UINT, поскольку оба текселя имеют размер 4 байта. Форматы глубины/трафарета должны точно совпадать.

vkCmdCopyImage позволяет копировать между совместимыми по размеру сжатыми и несжатыми внутренними форматами. Форматы совместимы по размеру, если размер элемента несжатого формата равен размеру элемента (размер блока сжатого текселя) сжатого формата. Такое копирование не выполняет сжатие или распаковку на лету. При копировании из несжатого формата в сжатый формат каждый тексель несжатых данных исходного изображения копируется как необработанное значение в соответствующий блок сжатого текселя целевого изображения. При копировании из сжатого формата в несжатый формат каждый блок сжатого текселя исходного изображения копируется как необработанное значение в соответствующий тексель несжатых данных в целевом изображении. Таким образом, например, допустимо копирование между 128-битным несжатым форматом и сжатым форматом, который имеет блок сжатого текселя размером 128 бит, представляющий 4×4 текселя (используя 8 бит на тексель), или между 64-битным несжатым форматом и сжатым форматом, который имеет блок сжатого текселя размером 64 бита, представляющий 4×4 текселя (используя 4 бита на тексель).

При копировании между сжатыми и несжатыми форматами члены extent представляют размеры текстурных элементов исходного изображения, а не целевого. При копировании из сжатого изображения в несжатое изображение размеры текстурных элементов изображения, записываемые в несжатое изображение, будут равны исходному размеру, деленному на размеры блока текстурных элементов сжатого изображения. При копировании из несжатого изображения в сжатое изображение размеры текстурных элементов изображения, записываемые в сжатое изображение, будут равны исходному размеру, умноженному на размеры блока текстурных элементов сжатого изображения. В обоих случаях количество прочитанных и количество записанных байтов будут одинаковыми.

Копирование в блокированные сжатые изображения или из них обычно выполняется кратно размеру блока текстурных элементов сжатого изображения. По этой причине extent должен быть кратным размеру блока текстурных элементов сжатого изображения. Существует одно исключение из этого правила, которое требуется для обработки сжатых изображений, созданных с размерами, не кратными размерам блока текстурных элементов сжатого изображения: если srcImage сжат, то:

  • Если extent.width не кратен ширине блока текстурных элементов сжатого изображения, то (extent.width + srcOffset.x) должен быть равен ширине подуровня изображения.
  • Если extent.height не кратен высоте блока текстурных элементов сжатого изображения, то (extent.height + srcOffset.y) должен быть равен высоте подуровня изображения.
  • Если extent.depth не кратен глубине блока текстурных элементов сжатого изображения, то (extent.depth + srcOffset.z) должен быть равен глубине подуровня изображения.

Аналогично, если dstImage сжат, то:

  • Если extent.width не кратен ширине блока текстурных элементов сжатого изображения, то (extent.width + dstOffset.x) должен быть равен ширине подуровня изображения.
  • Если extent.height не кратен высоте блока текстурных элементов сжатого изображения, то (extent.height + dstOffset.y) должен быть равен высоте подуровня изображения.
  • Если extent.depth не кратен глубине блока текстурных элементов сжатого изображения, то (extent.depth + dstOffset.z) должен быть равен глубине подуровня изображения.

Это позволяет включить последний сжатый блок текстурных элементов изображения в каждом измерении, не являющемся кратным, в качестве источника или назначения копии.

vkCmdCopyImage может использоваться для копирования данных изображения между многовыборочными изображениями, но оба изображения должны иметь одинаковое количество выборок.

Допустимое использование
  • Область источника, указанная данным элементом pRegions, должна быть областью, которая содержится в srcImage
  • Область назначения, указанная данным элементом pRegions, должна быть областью, которая содержится в dstImage
  • Объединение всех областей источника и объединение всех областей назначения, указанных элементами pRegions, не должны перекрываться в памяти
  • srcImage должен быть создан с флагом использования VK_IMAGE_USAGE_TRANSFER_SRC_BIT
  • Если srcImage не разрежен, то он должен быть полностью и непрерывно привязан к одному объекту VkDeviceMemory
  • srcImageLayout должен указывать макет подуровней изображения srcImage, указанных в pRegions, в момент выполнения этой команды на VkDevice
  • srcImageLayout должен быть VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • dstImage должен быть создан с флагом использования VK_IMAGE_USAGE_TRANSFER_DST_BIT
  • Если dstImage не разрежен, то он должен быть полностью и непрерывно привязан к одному объекту VkDeviceMemory
  • dstImageLayout должен указывать макет подуровней изображения dstImage, указанных в pRegions, в момент выполнения этой команды на VkDevice
  • dstImageLayout должен быть VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • VkFormat каждого из srcImage и dstImage должен быть совместимым, как определено ниже
  • Количество выборок srcImage и dstImage должно совпадать
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • srcImage должен быть допустимой дескриптором VkImage
  • srcImageLayout должен быть допустимым значением VkImageLayout
  • dstImage должен быть допустимой дескриптором VkImage
  • dstImageLayout должен быть допустимым значением VkImageLayout
  • pRegions должен быть указателем на массив из regionCount допустимых структур VkImageCopy
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать операции передачи, графики или вычислений
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
  • regionCount должен быть больше 0
  • Каждый из commandBuffer, dstImage и srcImage должен быть создан, выделен или получен из одного и того же VkDevice
Синхронизация узла
  • Доступ узла к commandBuffer должен быть внешне синхронизирован
  • Доступ узла к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вспомогательный

Внешняя

Передача
графика
вычисления

Передача

См. также

VkCommandBuffer, VkImage, VkImageCopy, VkImageLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdCopyImage

vkCmdCopyImageToBuffer(3)

Имя

vkCmdCopyImageToBuffer - Копирование данных изображения в буфер

C-спецификация

Для копирования данных из объекта изображения в объект буфера вызовите:

void vkCmdCopyImageToBuffer(
    VkCommandBuffer                             commandBuffer,
    VkImage                                     srcImage,
    VkImageLayout                               srcImageLayout,
    VkBuffer                                    dstBuffer,
    uint32_t                                    regionCount,
    const VkBufferImageCopy*                    pRegions);

Параметры

  • commandBuffer - это буфер команд, в который будет записана команда.
  • srcImage - это исходное изображение.
  • srcImageLayout - это макет подуровней исходного изображения для копирования.
  • dstBuffer - это целевой буфер.
  • regionCount - это количество областей для копирования.
  • pRegions - это указатель на массив структур VkBufferImageCopy, указывающих области для копирования.

Описание

Каждая область в pRegions копируется из указанной области исходного изображения в указанную область целевого буфера.

Правильное использование
  • Область изображения, заданная данным элементом pRegions, должна быть областью, которая содержится в srcImage
  • Область буфера, заданная данным элементом pRegions, должна быть областью, которая содержится в dstBuffer
  • Объединение всех исходных областей и объединение всех областей назначения, заданных элементами pRegions, не должны перекрываться в памяти
  • srcImage должен быть создан с флагом использования VK_IMAGE_USAGE_TRANSFER_SRC_BIT
  • Если srcImage не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • srcImage должен иметь количество выборок, равное VK_SAMPLE_COUNT_1_BIT
  • srcImageLayout должен указывать расположение подобъектов изображения srcImage, указанных в pRegions, в момент выполнения этой команды на VkDevice
  • srcImageLayout должен быть VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • dstBuffer должен быть создан с флагом использования VK_BUFFER_USAGE_TRANSFER_DST_BIT
  • Если dstBuffer не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
Правильное использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • srcImage должен быть допустимой дескриптором VkImage
  • srcImageLayout должен быть допустимым значением VkImageLayout
  • dstBuffer должен быть допустимой дескриптором VkBuffer
  • pRegions должен быть указателем на массив regionCount допустимых структур VkBufferImageCopy
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать операции передачи, графики или вычислений
  • Эта команда должна вызываться только за пределами экземпляра прохода рендеринга
  • regionCount должен быть больше 0
  • Каждый из commandBuffer, dstBuffer и srcImage должен быть создан, выделен или получен из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очереди Тип конвейера

Основной
Вторичный

Вне

Передача
графика
вычисления

Передача

См. также

VkBuffer, VkBufferImageCopy, VkCommandBuffer, VkImage, VkImageLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdCopyImageToBuffer

vkCmdCopyQueryPoolResults(3)

Имя

vkCmdCopyQueryPoolResults - Копирование результатов запросов в пуле запросов в объекте буфера

C Спецификация

Для копирования статусов запросов и числовых результатов непосредственно в память буфера, вызовите:

void vkCmdCopyQueryPoolResults(
    VkCommandBuffer                             commandBuffer,
    VkQueryPool                                 queryPool,
    uint32_t                                    firstQuery,
    uint32_t                                    queryCount,
    VkBuffer                                    dstBuffer,
    VkDeviceSize                                dstOffset,
    VkDeviceSize                                stride,
    VkQueryResultFlags                          flags);

Параметры

  • commandBuffer - буфер команд, в который будет записана эта команда.
  • queryPool - пул запросов, управляющий запросами, содержащими нужные результаты.
  • firstQuery - начальный индекс запроса.
  • queryCount - количество запросов. firstQuery и queryCount вместе определяют диапазон запросов.
  • dstBuffer - объект VkBuffer, который получит результаты команды копирования.
  • dstOffset - смещение в dstBuffer.
  • stride - шаг в байтах между результатами для отдельных запросов внутри dstBuffer. Требуемый размер резервной памяти для dstBuffer определяется, как описано выше для vkGetQueryPoolResults.
  • flags - битовая маска VkQueryResultFlagBits, указывающая, как и когда возвращаются результаты.

Описание

vkCmdCopyQueryPoolResults гарантированно увидит эффект предыдущих использований vkCmdResetQueryPool в той же очереди без дополнительной синхронизации. Таким образом, результаты всегда будут отражать самое последнее использование запроса.

flags имеет те же возможные значения, которые описаны выше для параметра flags vkGetQueryPoolResults, но другой стиль выполнения приводит к некоторым тонким различиям в поведении. Поскольку vkCmdCopyQueryPoolResults выполняется в порядке относительно других команд запроса, существует меньше неоднозначности относительно того, какое использование запроса запрашивается.

Если в flags не установлены биты, результаты для всех запрошенных запросов в доступном состоянии записываются как 32-битные беззнаковые целые значения, и ничего не записывается для запросов в недоступном состоянии.

Если установлен VK_QUERY_RESULT_64_BIT, результаты записываются как массив 64-битных беззнаковых целых значений, как описано для vkGetQueryPoolResults.

Если установлен VK_QUERY_RESULT_WAIT_BIT, реализация будет ожидать, пока статус каждого запроса не станет доступным, прежде чем извлекать числовые результаты для этого запроса. Это гарантированно отражает самое последнее использование запроса в той же очереди, при условии, что запрос не используется одновременно другими очередями. Если запрос не станет доступным за конечное время (например, из-за отсутствия запроса с момента последнего сброса), может возникнуть ошибка VK_ERROR_DEVICE_LOST.

Аналогично, если установлен VK_QUERY_RESULT_WITH_AVAILABILITY_BIT и не установлен VK_QUERY_RESULT_WAIT_BIT, доступность гарантированно отражает самое последнее использование запроса в той же очереди, при условии, что запрос не используется одновременно другими очередями. Как и в случае с vkGetQueryPoolResults, реализации должны гарантировать, что если они возвращают ненулевое значение доступности, то числовые результаты действительны.

Если установлен VK_QUERY_RESULT_PARTIAL_BIT, не установлен VK_QUERY_RESULT_WAIT_BIT, и статус запроса недоступен, для этого запроса записывается промежуточное значение результата между нулем и конечным значением результата.

VK_QUERY_RESULT_PARTIAL_BIT не должен использоваться, если queryType пула равен VK_QUERY_TYPE_TIMESTAMP.

vkCmdCopyQueryPoolResults считается операцией передачи, и его записи в память буфера должны быть синхронизированы с помощью VK_PIPELINE_STAGE_TRANSFER_BIT и VK_ACCESS_TRANSFER_WRITE_BIT перед использованием результатов.

Правильное использование
  • dstOffset должен быть меньше размера dstBuffer
  • firstQuery должен быть меньше количества запросов в queryPool
  • Сумма firstQuery и queryCount должна быть меньше или равна количеству запросов в queryPool
  • Если VK_QUERY_RESULT_64_BIT не установлен в flags, то dstOffset и stride должны быть кратными 4
  • Если VK_QUERY_RESULT_64_BIT установлен в flags, то dstOffset и stride должны быть кратными 8
  • dstBuffer должен иметь достаточно памяти, начиная с dstOffset, чтобы содержать результат каждого запроса, как описано здесь
  • dstBuffer должен быть создан с флагом использования VK_BUFFER_USAGE_TRANSFER_DST_BIT
  • Если dstBuffer не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • Если queryType, использованный для создания queryPool, был VK_QUERY_TYPE_TIMESTAMP, flags не должен содержать VK_QUERY_RESULT_PARTIAL_BIT
Правильное использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • queryPool должен быть допустимой дескриптором VkQueryPool
  • dstBuffer должен быть допустимой дескриптором VkBuffer
  • flags должен быть допустимым сочетанием значений VkQueryResultFlagBits
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
  • Каждый из commandBuffer, dstBuffer и queryPool должен быть создан, выделен или получен из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очереди Тип конвейера

Основной
Вторичный

Вне

Графический
вычислительный

Передача

См. также

VkBuffer, VkCommandBuffer, VkDeviceSize, VkQueryPool, VkQueryResultFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdCopyQueryPoolResults

vkCmdDispatch(3)

Имя

vkCmdDispatch - Отправка вычислительных рабочих элементов

Спецификация C

Для записи отправки вызовите:

void vkCmdDispatch(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    groupCountX,
    uint32_t                                    groupCountY,
    uint32_t                                    groupCountZ);

Параметры

  • commandBuffer - это буфер команд, в который будет записана команда.
  • groupCountX - это количество локальных рабочих групп для отправки в измерении X.
  • groupCountY - это количество локальных рабочих групп для отправки в измерении Y.
  • groupCountZ - это количество локальных рабочих групп для отправки в измерении Z.

Описание

Когда команда выполняется, собирается глобальная рабочая группа, состоящая из groupCountX × groupCountY × groupCountZ локальных рабочих групп.

Правильное использование
  • groupCountX должен быть меньше или равен VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0]
  • groupCountY должен быть меньше или равен VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1]
  • groupCountZ должен быть меньше или равен VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2]
  • Для каждого набора n, который статически используется VkPipeline, в настоящее время связанным с VK_PIPELINE_BIND_POINT_COMPUTE, набор дескрипторов должен быть связан с n в VK_PIPELINE_BIND_POINT_COMPUTE, с VkPipelineLayout, совместимым для набора n, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Дескрипторы в каждом связанном наборе дескрипторов, указанные через vkCmdBindDescriptorSets, должны быть допустимыми, если они статически используются текущим связанным объектом VkPipeline, указанным через vkCmdBindPipeline
  • Должен быть связан допустимый вычислительный конвейер с текущим буфером команд с помощью VK_PIPELINE_BIND_POINT_COMPUTE
  • Для каждой константы push, которая статически используется VkPipeline, в настоящее время связанным с VK_PIPELINE_BIND_POINT_COMPUTE, значение константы push должно быть установлено для VK_PIPELINE_BIND_POINT_COMPUTE, с VkPipelineLayout, совместимым для констант push с тем, который использовался для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в настоящее время связанным с VK_PIPELINE_BIND_POINT_COMPUTE, использует ненормализованные координаты, он не должен использоваться для выборки из любого VkImage с VkImageView типа VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, VK_IMAGE_VIEW_TYPE_1D_ARRAY, VK_IMAGE_VIEW_TYPE_2D_ARRAY или VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в настоящее время связанным с VK_PIPELINE_BIND_POINT_COMPUTE, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample* с ImplicitLod, Dref или Proj в их именах, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в настоящее время связанным с VK_PIPELINE_BIND_POINT_COMPUTE, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample*, которые включают смещение LOD или любые значения смещения, в любой стадии шейдера
  • Если функция доступа к буферу с высокой устойчивостью не включена, и любая стадия шейдера в объекте VkPipeline, в настоящее время связанном с VK_PIPELINE_BIND_POINT_COMPUTE, обращается к буферу униформ, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в текущем связанном наборе дескрипторов
  • Если функция доступа к буферу с высокой устойчивостью не включена, и любая стадия шейдера в объекте VkPipeline, в настоящее время связанном с VK_PIPELINE_BIND_POINT_COMPUTE, обращается к буферу хранения, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в текущем связанном наборе дескрипторов
  • Любой VkImageView, выборка из которого выполняется с помощью VK_FILTER_LINEAR в результате этой команды, должен иметь формат, который поддерживает линейную фильтрацию, как указано флагом VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT в VkFormatProperties::linearTilingFeatures (для линейного изображения) или VkFormatProperties::optimalTilingFeatures (для оптимально чередующегося изображения), возвращаемого vkGetPhysicalDeviceFormatProperties
Правильное использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать вычислительные операции
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очереди Тип конвейера

Основной
Вторичный

Вне

Вычислительный

Вычислительный

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdDispatch

vkCmdDispatchIndirect(3)

Имя

vkCmdDispatchIndirect - Отправка вычислительных рабочих элементов с использованием косвенных параметров

Спецификация C

Для записи косвенной отправки команд, вызовите:

void vkCmdDispatchIndirect(
    VkCommandBuffer                             commandBuffer,
    VkBuffer                                    buffer,
    VkDeviceSize                                offset);

Параметры

  • commandBuffer — буфер команд, в который будет записана команда.
  • buffer — буфер, содержащий параметры отправки.
  • offset — смещение в байтах в buffer, где начинаются параметры.

Описание

vkCmdDispatchIndirect работает аналогично vkCmdDispatch, за исключением того, что параметры считываются устройством из буфера во время выполнения. Параметры отправки закодированы в структуре VkDispatchIndirectCommand, взятой из buffer начиная с offset.

Допустимое использование
  • Если buffer не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • Для каждого набора n, который статически используется VkPipeline, в настоящее время привязанным к VK_PIPELINE_BIND_POINT_COMPUTE, набор дескрипторов должен быть привязан к n в VK_PIPELINE_BIND_POINT_COMPUTE, с VkPipelineLayout, который совместим для набора n, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Дескрипторы в каждом связанном наборе дескрипторов, указанные через vkCmdBindDescriptorSets, должны быть действительными, если они статически используются текущим привязанным объектом VkPipeline, указанным через vkCmdBindPipeline
  • Действительный конвейер вычислений должен быть привязан к текущему буферу команд с помощью VK_PIPELINE_BIND_POINT_COMPUTE
  • buffer должен быть создан с установленным битом VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
  • offset должен быть кратен 4
  • Сумма offset и размер VkDispatchIndirectCommand должна быть меньше или равна размеру buffer
  • Для каждой константы, передаваемой в функцию, которая статически используется VkPipeline, в настоящее время привязанным к VK_PIPELINE_BIND_POINT_COMPUTE, значение константы, передаваемой в функцию, должно быть установлено для VK_PIPELINE_BIND_POINT_COMPUTE, с VkPipelineLayout, который совместим для констант, передаваемых в функцию, с тем, который использовался для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Если любой объект VkSampler, доступ к которому осуществляется из шейдера VkPipeline, в настоящее время привязанным к VK_PIPELINE_BIND_POINT_COMPUTE, использует ненормализованные координаты, он не должен использоваться для выборки из любого VkImage с VkImageView типа VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, VK_IMAGE_VIEW_TYPE_1D_ARRAY, VK_IMAGE_VIEW_TYPE_2D_ARRAY или VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, в любой стадии шейдера
  • Если любой объект VkSampler, доступ к которому осуществляется из шейдера VkPipeline, в настоящее время привязанным к VK_PIPELINE_BIND_POINT_COMPUTE, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample* с ImplicitLod, Dref или Proj в их именах, в любой стадии шейдера
  • Если любой объект VkSampler, доступ к которому осуществляется из шейдера VkPipeline, в настоящее время привязанным к VK_PIPELINE_BIND_POINT_COMPUTE, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample*, которые включают смещение LOD или любые значения смещения, в любой стадии шейдера
  • Если функция устойчивого доступа к буферу не включена, и любая стадия шейдера в объекте VkPipeline, в настоящее время привязанном к VK_PIPELINE_BIND_POINT_COMPUTE, обращается к буферу униформ, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в текущем привязанном наборе дескрипторов
  • Если функция устойчивого доступа к буферу не включена, и любая стадия шейдера в объекте VkPipeline, в настоящее время привязанном к VK_PIPELINE_BIND_POINT_COMPUTE, обращается к буферу хранения, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в текущем привязанном наборе дескрипторов
  • Любой VkImageView, выборка которого производится с помощью VK_FILTER_LINEAR в результате этой команды, должен иметь формат, который поддерживает линейную фильтрацию, как указано флагом VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT в VkFormatProperties::linearTilingFeatures (для линейного изображения) или VkFormatProperties::optimalTilingFeatures (для оптимально чередующегося изображения), возвращаемого vkGetPhysicalDeviceFormatProperties
Допустимое использование (неявное)
  • commandBuffer должен быть действительной дескриптором VkCommandBuffer
  • buffer должен быть действительной дескриптором VkBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать операции вычислений
  • Эта команда должна вызываться только за пределами экземпляра прохода рендеринга
  • И buffer, и commandBuffer должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Вне

Вычисления

Вычисления

См. также

VkBuffer, VkCommandBuffer, VkDeviceSize

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdDispatchIndirect

vkCmdDraw(3)

Имя

vkCmdDraw - Рисование примитивов

Спецификация C

Для записи неиндексированного вызова, вызовите:

void vkCmdDraw(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    vertexCount,
    uint32_t                                    instanceCount,
    uint32_t                                    firstVertex,
    uint32_t                                    firstInstance);

Параметры

  • commandBuffer — буфер команд, в который записывается команда.
  • vertexCount — количество вершин для отрисовки.
  • instanceCount — количество экземпляров для отрисовки.
  • firstVertex — индекс первой вершины для отрисовки.
  • firstInstance — ID экземпляра первого экземпляра для отрисовки.

Описание

Когда команда выполняется, примитивы собираются с использованием текущей топологии примитива и vertexCount последовательных индексов вершин, при этом первое значение vertexIndex равно firstVertex. Примитивы рисуются instanceCount раз с instanceIndex, начиная с firstInstance и увеличиваясь последовательно для каждого экземпляра. Собранные примитивы выполняют текущий привязанный графический конвейер.

Допустимое использование
  • Текущий проход рендеринга должен быть совместим с членом renderPass структуры VkGraphicsPipelineCreateInfo, указанной при создании VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS.
  • Индекс подпрохода текущего прохода рендеринга должен быть равен члену subpass структуры VkGraphicsPipelineCreateInfo, указанной при создании VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS.
  • Для каждого набора n, статически используемого VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS, набор дескрипторов должен быть связан с n в VK_PIPELINE_BIND_POINT_GRAPHICS, с VkPipelineLayout, совместимым для набора n, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Для каждой константы push, статически используемой VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS, значение константы push должно быть установлено для VK_PIPELINE_BIND_POINT_GRAPHICS, с VkPipelineLayout, совместимым для констант push, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Дескрипторы в каждом связанном наборе дескрипторов, указанные через vkCmdBindDescriptorSets, должны быть валидными, если они статически используются объектом VkPipeline, в данный момент связанным, указанным через vkCmdBindPipeline
  • Все привязки входных данных вершин, доступные через переменные входных данных вершин, объявленные в интерфейсе точки входа вершинного шейдера, должны иметь привязанные валидные буферы
  • Для данной привязки буфера вершин любые извлекаемые данные атрибутов должны полностью содержаться в соответствующей привязке буфера вершин, как описано в html/vkspec.html#fxvertex-input
  • Валидный конвейер графики должен быть привязан к текущему буферу команд с VK_PIPELINE_BIND_POINT_GRAPHICS
  • Если объект VkPipeline, в данный момент связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, требует любого динамического состояния, это состояние должно быть установлено в текущем буфере команд
  • Каждый входной вложение, используемый текущим подпроходом, должен быть привязан к конвейеру через набор дескрипторов
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в данный момент связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться для выборки из любого VkImage с VkImageView типа VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, VK_IMAGE_VIEW_TYPE_1D_ARRAY, VK_IMAGE_VIEW_TYPE_2D_ARRAY или VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в данный момент связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample* с ImplicitLod, Dref или Proj в их имени, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в данный момент связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample*, которая включает смещение LOD или любые значения смещения, в любой стадии шейдера
  • Если функция доступа к буферу robust buffer access не включена, и любая стадия шейдера в объекте VkPipeline, в данный момент связанном с VK_PIPELINE_BIND_POINT_GRAPHICS, обращается к буферу униформ, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в текущем связанном наборе дескрипторов
  • Если функция доступа к буферу robust buffer access не включена, и любая стадия шейдера в объекте VkPipeline, в данный момент связанном с VK_PIPELINE_BIND_POINT_GRAPHICS, обращается к буферу хранения, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в текущем связанном наборе дескрипторов
  • Любой VkImageView, используемый с VK_FILTER_LINEAR в результате этой команды, должен иметь формат, поддерживающий линейную фильтрацию, как указано флагом VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT в VkFormatProperties::linearTilingFeatures (для линейного изображения) или VkFormatProperties::optimalTilingFeatures (для оптимально чередуемого изображения), возвращаемого vkGetPhysicalDeviceFormatProperties
  • Подресурсы изображений, используемые в качестве вложений в текущем проходе рендеринга, не должны быть доступны каким-либо образом, кроме как в качестве вложения этой командой.
Допустимое использование (неявное)
  • commandBuffer должен быть валидной дескриптором VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только внутри экземпляра прохода рендеринга
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область действия прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внутри

Графический

Графический

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdDraw

vkCmdDrawIndexed(3)

Имя

vkCmdDrawIndexed - Выполнить индексированный проход в буфер команд

C-спецификация

Для записи индексированного прохода вызовите:

void vkCmdDrawIndexed(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    indexCount,
    uint32_t                                    instanceCount,
    uint32_t                                    firstIndex,
    int32_t                                     vertexOffset,
    uint32_t                                    firstInstance);

Параметры

  • commandBuffer - буфер команд, в который записывается команда.
  • indexCount - количество вершин для отрисовки.
  • instanceCount - количество экземпляров для отрисовки.
  • firstIndex - базовый индекс в буфере индексов.
  • vertexOffset - значение, добавляемое к индексу вершины перед индексированием в буфер вершин.
  • firstInstance - идентификатор экземпляра первого экземпляра для отрисовки.

Описание

При выполнении команды примитивы собираются с использованием текущей топологии примитивов и indexCount вершин, индексы которых извлекаются из буфера индексов. Буфер индексов обрабатывается как массив плотно упакованных целых беззнаковых чисел размера, определенного параметром vkCmdBindIndexBuffer::indexType, с помощью которого буфер был привязан.

Первый индекс вершины находится со смещением firstIndex * indexSize + offset в пределах текущего связанного буфера индексов, где offset - смещение, указанное vkCmdBindIndexBuffer, а indexSize - размер в байтах типа, указанного indexType. Последующие значения индексов извлекаются из последовательных позиций в буфере индексов. Индексы сначала сравниваются со значением перезапуска примитива, затем расширяются до 32 бит (если indexType равно VK_INDEX_TYPE_UINT16) и к ним добавляется vertexOffset, прежде чем предоставляться в качестве значения vertexIndex.

Примитивы отрисовываются instanceCount раз с instanceIndex, начиная с firstInstance и увеличиваясь последовательно для каждого экземпляра. Собранные примитивы выполняют текущий связанный графический конвейер.

Допустимое использование
  • Текущий проход рендеринга должен быть совместим с членом renderPass структуры VkGraphicsPipelineCreateInfo, указанной при создании VkPipeline, в настоящее время связанного с VK_PIPELINE_BIND_POINT_GRAPHICS.
  • Индекс подпрохода текущего прохода рендеринга должен быть равен члену subpass структуры VkGraphicsPipelineCreateInfo, указанной при создании VkPipeline, в настоящее время связанного с VK_PIPELINE_BIND_POINT_GRAPHICS.
  • Для каждого набора n, статически используемого VkPipeline, в настоящее время связанного с VK_PIPELINE_BIND_POINT_GRAPHICS, набор дескрипторов должен быть привязан к n в VK_PIPELINE_BIND_POINT_GRAPHICS, с VkPipelineLayout, который совместим для набора n, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Для каждой константы push, статически используемой VkPipeline, в настоящее время связанного с VK_PIPELINE_BIND_POINT_GRAPHICS, значение константы push должно быть установлено для VK_PIPELINE_BIND_POINT_GRAPHICS, с VkPipelineLayout, который совместим для констант push, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Дескрипторы в каждом связанном наборе дескрипторов, указанные через vkCmdBindDescriptorSets, должны быть действительными, если они статически используются объектом VkPipeline, в настоящее время связанным, указанным через vkCmdBindPipeline
  • Все привязки входных данных вершин, доступные через переменные входных данных вершин, объявленные в интерфейсе точки входа вершинного шейдера, должны иметь связанные действительные буферы
  • Для данной привязки буфера вершин любые извлекаемые данные атрибутов должны полностью содержаться в соответствующей привязке буфера вершин, как описано в html/vkspec.html#fxvertex-input
  • Действительный графический конвейер должен быть привязан к текущему буферу команд с помощью VK_PIPELINE_BIND_POINT_GRAPHICS
  • Если объект VkPipeline, в настоящее время связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, требует любого динамического состояния, это состояние должно быть установлено в текущем буфере команд
  • (indexSize * (firstIndex + indexCount) + offset) должно быть меньше или равно размеру в настоящее время связанного буфера индексов, при этом indexSize основан на типе, указанном indexType, где буфер индексов, indexType и offset указаны через vkCmdBindIndexBuffer
  • Каждый входной вложение, используемый текущим подпроходом, должен быть привязан к конвейеру через набор дескрипторов
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в настоящее время связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться для выборки из любого VkImage с VkImageView типа VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, VK_IMAGE_VIEW_TYPE_1D_ARRAY, VK_IMAGE_VIEW_TYPE_2D_ARRAY или VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в настоящее время связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample* с ImplicitLod, Dref или Proj в их имени, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в настоящее время связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample*, которые включают смещение LOD или любые значения смещения, в любой стадии шейдера
  • Если функция доступа к буферу robust buffer access не включена, и любая стадия шейдера в объекте VkPipeline, в настоящее время связанном с VK_PIPELINE_BIND_POINT_GRAPHICS, обращается к буферу униформ, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в в настоящее время связанном наборе дескрипторов
  • Если функция доступа к буферу robust buffer access не включена, и любая стадия шейдера в объекте VkPipeline, в настоящее время связанном с VK_PIPELINE_BIND_POINT_GRAPHICS, обращается к буферу хранения, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в в настоящее время связанном наборе дескрипторов
  • Любой VkImageView, выборочно используемый с VK_FILTER_LINEAR в результате этой команды, должен иметь формат, который поддерживает линейную фильтрацию, как указано флагом VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT в VkFormatProperties::linearTilingFeatures (для линейного изображения) или VkFormatProperties::optimalTilingFeatures (для оптимально чередующегося изображения), возвращаемого vkGetPhysicalDeviceFormatProperties
  • Подресурсы изображений, используемые в качестве вложений в текущем проходе рендеринга, не должны быть доступны каким-либо образом, кроме как в качестве вложения этой командой.
Допустимое использование (неявное)
  • commandBuffer должен быть действительной дескриптором VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только внутри экземпляра прохода рендеринга
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Свойства команд
Уровни буферов команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внутри

Графический

Графический

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdDrawIndexed

vkCmdDrawIndexedIndirect(3)

Имя

vkCmdDrawIndexedIndirect - Выполнить косвенный индексированный проход

C-спецификация

Для записи косвенного индексированного прохода вызовите:

void vkCmdDrawIndexedIndirect(
    VkCommandBuffer                             commandBuffer,
    VkBuffer                                    buffer,
    VkDeviceSize                                offset,
    uint32_t                                    drawCount,
    uint32_t                                    stride);

Параметры

  • commandBuffer - это буфер команд, в который записывается команда.
  • buffer - это буфер, содержащий параметры прохода.
  • offset - это смещение в байтах в buffer, где начинаются параметры.
  • drawCount - это количество проходов для выполнения и может быть равно нулю.
  • stride - это байтовый шаг между последовательными наборами параметров прохода.

Описание

vkCmdDrawIndexedIndirect ведет себя аналогично vkCmdDrawIndexed, за исключением того, что параметры считываются устройством из буфера во время выполнения. drawCount проходов выполняются командой, при этом параметры берутся из buffer, начиная с offset и увеличиваясь на stride байт для каждого последующего прохода. Параметры каждого прохода закодированы в массиве структур VkDrawIndexedIndirectCommand. Если drawCount меньше или равно единице, stride игнорируется.

Правильное использование
  • Если buffer не разрежен, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • offset должен быть кратным 4
  • Если drawCount больше 1, stride должен быть кратным 4 и должен быть больше или равен sizeof(VkDrawIndexedIndirectCommand)
  • Если функция multi-draw indirect не включена, drawCount должен быть 0 или 1
  • Если функция drawIndirectFirstInstance не включена, все члены firstInstance структур VkDrawIndexedIndirectCommand, доступных этой команде, должны быть 0
  • Текущий проход рендеринга должен быть совместим с членом renderPass структуры VkGraphicsPipelineCreateInfo, указанной при создании VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS.
  • Индекс подпрохода текущего прохода рендеринга должен быть равен члену subpass структуры VkGraphicsPipelineCreateInfo, указанной при создании VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS.
  • Для каждого набора n, который статически используется VkPipeline, в данный момент связанным с VK_PIPELINE_BIND_POINT_GRAPHICS, набор дескрипторов должен быть связан с n в VK_PIPELINE_BIND_POINT_GRAPHICS, с VkPipelineLayout, который совместим для набора n, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Для каждой константы push, которая статически используется VkPipeline, в данный момент связанным с VK_PIPELINE_BIND_POINT_GRAPHICS, значение константы push должно быть установлено для VK_PIPELINE_BIND_POINT_GRAPHICS, с VkPipelineLayout, который совместим для констант push, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Дескрипторы в каждом связанном наборе дескрипторов, указанные через vkCmdBindDescriptorSets, должны быть валидными, если они статически используются текущим связанным объектом VkPipeline, указанным через vkCmdBindPipeline
  • Все привязки входных данных вершин, доступные через переменные входных данных вершин, объявленные в интерфейсе точки входа вершинного шейдера, должны иметь связанные валидные буферы
  • Валидный графический конвейер должен быть связан с текущим буфером команд с помощью VK_PIPELINE_BIND_POINT_GRAPHICS
  • Если объект VkPipeline, в данный момент связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, требует какого-либо динамического состояния, это состояние должно быть установлено в текущем буфере команд
  • Если drawCount равен 1, (offset + sizeof(VkDrawIndexedIndirectCommand)) должен быть меньше или равен размеру buffer
  • Если drawCount больше 1, (stride × (drawCount - 1) + offset + sizeof(VkDrawIndexedIndirectCommand)) должен быть меньше или равен размеру buffer
  • drawCount должен быть меньше или равен VkPhysicalDeviceLimits::maxDrawIndirectCount
  • Каждое входное вложение, используемое текущим подпроходом, должно быть связано с конвейером через набор дескрипторов
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в данный момент связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться для выборки из любого VkImage с VkImageView типа VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, VK_IMAGE_VIEW_TYPE_1D_ARRAY, VK_IMAGE_VIEW_TYPE_2D_ARRAY или VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в данный момент связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample* с ImplicitLod, Dref или Proj в их имени, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в данный момент связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample*, которые включают смещение LOD или любые значения смещения, в любой стадии шейдера
  • Если функция robust buffer access не включена, и любая стадия шейдера в объекте VkPipeline, в данный момент связанном с VK_PIPELINE_BIND_POINT_GRAPHICS, обращается к буферу uniform, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в текущем связанном наборе дескрипторов
  • Если функция robust buffer access не включена, и любая стадия шейдера в объекте VkPipeline, в данный момент связанном с VK_PIPELINE_BIND_POINT_GRAPHICS, обращается к буферу хранения, она не должна обращаться к значениям за пределами диапазона этого буфера, указанного в текущем связанном наборе дескрипторов
  • Любой VkImageView, выборка которого выполняется с помощью VK_FILTER_LINEAR в результате этой команды, должен иметь формат, который поддерживает линейную фильтрацию, как указано флагом VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT в VkFormatProperties::linearTilingFeatures (для линейного изображения) или VkFormatProperties::optimalTilingFeatures (для оптимально чередующегося изображения), возвращаемого vkGetPhysicalDeviceFormatProperties
  • Подресурсы изображений, используемые в качестве вложений в текущем проходе рендеринга, не должны каким-либо образом, кроме как в качестве вложения, использоваться этой командой.
Правильное использование (Неявное)
  • commandBuffer должен быть валидной дескрипторной ссылкой VkCommandBuffer
  • buffer должен быть валидной дескрипторной ссылкой VkBuffer
  • commandBuffer должен быть в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только внутри экземпляра прохода рендеринга
  • И buffer, и commandBuffer должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация узла
  • Доступ узла к commandBuffer должен быть внешне синхронизирован
  • Доступ узла к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внутри

Графический

Графический

См. также

VkBuffer, VkCommandBuffer, VkDeviceSize

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdDrawIndexedIndirect

vkCmdDrawIndirect(3)

Имя

vkCmdDrawIndirect - Выполнить косвенный прорисовку в буфер команд

C-спецификация

Для записи неиндексированной косвенной прорисовки, вызовите:

void vkCmdDrawIndirect(
    VkCommandBuffer                             commandBuffer,
    VkBuffer                                    buffer,
    VkDeviceSize                                offset,
    uint32_t                                    drawCount,
    uint32_t                                    stride);

Параметры

  • commandBuffer - это буфер команд, в который записывается команда.
  • buffer - это буфер, содержащий параметры прорисовки.
  • offset - это байтовый смещение в buffer, где начинаются параметры.
  • drawCount - это количество прорисовок для выполнения, и может быть равно нулю.
  • stride - это байтовый шаг между последующими наборами параметров прорисовки.

Описание

vkCmdDrawIndirect ведет себя аналогично vkCmdDraw, за исключением того, что параметры считываются устройством из буфера во время выполнения. drawCount прорисовки выполняются командой, с параметрами, взятыми из buffer, начиная с offset и увеличиваясь на stride байт для каждой последующей прорисовки. Параметры каждой прорисовки закодированы в массиве структур VkDrawIndirectCommand. Если drawCount меньше или равно единице, stride игнорируется.

Допустимое использование
  • Если buffer не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • offset должен быть кратным 4
  • Если drawCount больше, чем 1, stride должен быть кратным 4 и должен быть больше или равен sizeof(VkDrawIndirectCommand)
  • Если функция multi-draw indirect не включена, drawCount должен быть 0 или 1
  • Если функция drawIndirectFirstInstance не включена, все элементы firstInstance структур VkDrawIndirectCommand, доступных этой команде, должны быть 0
  • Текущий проход отрисовки должен быть совместим с элементом renderPass структуры VkGraphicsPipelineCreateInfo, указанной при создании VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS.
  • Индекс подпрохода текущего прохода отрисовки должен быть равен элементу subpass структуры VkGraphicsPipelineCreateInfo, указанной при создании VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS.
  • Для каждого набора n, который статически используется VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS, набор дескрипторов должен быть связан с n в VK_PIPELINE_BIND_POINT_GRAPHICS, с VkPipelineLayout, который совместим для набора n, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Для каждой константы push, которая статически используется VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS, значение константы push должно быть установлено для VK_PIPELINE_BIND_POINT_GRAPHICS, с VkPipelineLayout, который совместим для констант push, с VkPipelineLayout, используемым для создания текущего VkPipeline, как описано в html/vkspec.html#descriptorsets-compatibility
  • Дескрипторы в каждом связанном наборе дескрипторов, указанные через vkCmdBindDescriptorSets, должны быть действительны, если они статически используются в данный момент связанным объектом VkPipeline, указанным через vkCmdBindPipeline
  • Все привязки входных данных вершин, доступные через переменные входных данных вершин, объявленные в интерфейсе точки входа вершинного шейдера, должны иметь связанные действительные буферы
  • Действительный графический конвейер должен быть связан с текущим буфером команд с помощью VK_PIPELINE_BIND_POINT_GRAPHICS
  • Если объект VkPipeline, в данный момент связанный с VK_PIPELINE_BIND_POINT_GRAPHICS, требует любого динамического состояния, это состояние должно быть установлено в текущем буфере команд
  • Если drawCount равно 1, (offset + sizeof(VkDrawIndirectCommand)) должно быть меньше или равно размеру buffer
  • Если drawCount больше 1, (stride × (drawCount - 1) + offset + sizeof(VkDrawIndirectCommand)) должно быть меньше или равно размеру buffer
  • drawCount должен быть меньше или равен VkPhysicalDeviceLimits::maxDrawIndirectCount
  • Каждое входное вложение, используемое текущим подпроходом, должно быть связано с конвейером через набор дескрипторов
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться для выборки из любого VkImage с VkImageView типа VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, VK_IMAGE_VIEW_TYPE_1D_ARRAY, VK_IMAGE_VIEW_TYPE_2D_ARRAY или VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample* с ImplicitLod, Dref или Proj в их именах, в любой стадии шейдера
  • Если любой объект VkSampler, доступный из шейдера VkPipeline, в данный момент связанного с VK_PIPELINE_BIND_POINT_GRAPHICS, использует ненормализованные координаты, он не должен использоваться ни с одной из инструкций SPIR-V OpImageSample* или OpImageSparseSample*, которые включают смещение LOD или любые значения смещения, в любой стадии шейдера
  • Если функция robust buffer access не включена, и любая стадия шейдера в объекте VkPipeline, в данный момент связанном с VK_PIPELINE_BIND_POINT_GRAPHICS, обращается к буферу униформ, он не должен обращаться к значениям за пределами диапазона этого буфера, указанного в в данный момент связанном наборе дескрипторов
  • Если функция robust buffer access не включена, и любая стадия шейдера в объекте VkPipeline, в данный момент связанном с VK_PIPELINE_BIND_POINT_GRAPHICS, обращается к буферу хранения, он не должен обращаться к значениям за пределами диапазона этого буфера, указанного в в данный момент связанном наборе дескрипторов
  • Любой VkImageView, выбираемый с помощью VK_FILTER_LINEAR в результате этой команды, должен иметь формат, который поддерживает линейную фильтрацию, как указано флагом VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT в VkFormatProperties::linearTilingFeatures (для линейного изображения) или VkFormatProperties::optimalTilingFeatures (для оптимально черепичного изображения), возвращаемого vkGetPhysicalDeviceFormatProperties
  • Подресурсы изображений, используемые в качестве вложений в текущем проходе отрисовки, не должны каким-либо образом, кроме как в качестве вложения, использоваться этой командой.
Допустимое использование (Неявное)
  • commandBuffer должен быть действительной дескриптором VkCommandBuffer
  • buffer должен быть действительной дескриптором VkBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только внутри экземпляра прохода отрисовки
  • И buffer, и commandBuffer должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область действия прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внутри

Графический

Графический

См. также

VkBuffer, VkCommandBuffer, VkDeviceSize

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdDrawIndirect

vkCmdEndQuery(3)

Имя

vkCmdEndQuery - Завершает запрос

C Спецификация

Чтобы завершить запрос после выполнения набора необходимых команд отрисовки или диспетчеризации, вызовите:

void vkCmdEndQuery(
    VkCommandBuffer                             commandBuffer,
    VkQueryPool                                 queryPool,
    uint32_t                                    query);

Параметры

  • commandBuffer is the command buffer into which this command will be recorded.
  • queryPool is the query pool that is managing the results of the query.
  • query is the query index within the query pool where the result is stored.

Описание

Поскольку запросы работают асинхронно, завершение запроса не приводит к немедленному установке состояния запроса как доступного. Запрос считается завершенным, когда окончательные результаты запроса готовы к извлечению с помощью vkGetQueryPoolResults и vkCmdCopyQueryPoolResults, и именно тогда состояние запроса устанавливается как доступное.

После завершения запроса запрос должен завершиться за конечное время, если только состояние запроса не изменится с помощью других команд, например, путем выполнения сброса запроса.

Допустимое использование
  • Запрос, идентифицированный с помощью queryPool и query, должен в данный момент быть активным
  • query должен быть меньше числа запросов в queryPool
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • queryPool должен быть допустимой дескриптором VkQueryPool
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • И commandBuffer, и queryPool должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический
вычислительный

См. также

VkCommandBuffer, VkQueryPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdEndQuery

vkCmdEndRenderPass(3)

Имя

vkCmdEndRenderPass - Завершение текущего прохода отрисовки

Спецификация C

Чтобы записать команду для завершения экземпляра прохода отрисовки после записи команд для последнего подпрохода, вызовите:

void vkCmdEndRenderPass(
    VkCommandBuffer                             commandBuffer);

Параметры

  • commandBuffer is the command buffer in which to end the current render pass instance.

Описание

Завершение экземпляра прохода отрисовки выполняет любые операции многовыборочного разрешения в финальном подпроходе.

Допустимое использование
  • Текущий индекс подпрохода должен быть равен количеству подпроходов в проходе отрисовки минус один
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только внутри экземпляра прохода отрисовки
  • commandBuffer должен быть основным VkCommandBuffer
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной

Внутри

Графический

Графический

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdEndRenderPass

vkCmdExecuteCommands(3)

Имя

vkCmdExecuteCommands - Выполнение вторичного буфера команд из основного буфера команд

Спецификация C

Вторичный буфер команд не должен напрямую отправляться в очередь. Вместо этого вторичные буферы команд записываются для выполнения как часть основного буфера команд с помощью команды:

void vkCmdExecuteCommands(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    commandBufferCount,
    const VkCommandBuffer*                      pCommandBuffers);

Параметры

  • commandBuffer is a handle to a primary command buffer that the secondary command buffers are executed in.
  • commandBufferCount is the length of the pCommandBuffers array.
  • pCommandBuffers is an array of secondary command buffer handles, which are recorded to execute in the primary command buffer in the order they are listed in the array.

Описание

Если любой элемент pCommandBuffers не был записан с флагом VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, и он был записан в любой другой основной буфер команд, который в настоящее время находится в исполнимом или записываемом состоянии, этот основной буфер команд становится недействительным.

Допустимое использование
  • commandBuffer должен быть выделен с level VK_COMMAND_BUFFER_LEVEL_PRIMARY
  • Любой заданный элемент pCommandBuffers должен быть выделен с level VK_COMMAND_BUFFER_LEVEL_SECONDARY
  • Любой заданный элемент pCommandBuffers должен находиться в состоянии ожидания или готовности к выполнению.
  • Если любой элемент pCommandBuffers не был записан с флагом VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, и он был записан в любой другой первичный буфер команд, этот первичный буфер команд не должен находиться в состоянии ожидания
  • Если любой заданный элемент pCommandBuffers не был записан с флагом VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, он не должен находиться в состоянии ожидания.
  • Если любой заданный элемент pCommandBuffers не был записан с флагом VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, он не должен быть уже записан в commandBuffer.
  • Если любой заданный элемент pCommandBuffers не был записан с флагом VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, он не должен появляться более одного раза в pCommandBuffers.
  • Любой заданный элемент pCommandBuffers должен быть выделен из VkCommandPool, который был создан для того же семейства очередей, что и VkCommandPool, из которого был выделен commandBuffer
  • Если vkCmdExecuteCommands вызывается в пределах экземпляра прохода отрисовки, этот экземпляр прохода отрисовки должен быть начат с параметром contents vkCmdBeginRenderPass , установленным в VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
  • Если vkCmdExecuteCommands вызывается в пределах экземпляра прохода отрисовки, любой заданный элемент pCommandBuffers должен быть записан с VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
  • Если vkCmdExecuteCommands вызывается в пределах экземпляра прохода отрисовки, любой заданный элемент pCommandBuffers должен быть записан с VkCommandBufferInheritanceInfo::subpass , установленным в индекс подпрохода, в котором будет выполнен данный буфер команд
  • Если vkCmdExecuteCommands вызывается в пределах экземпляра прохода отрисовки, проходы отрисовки, указанные в членах pname::pBeginInfo::pInheritanceInfo::renderPass команд vkBeginCommandBuffer, используемых для начала записи каждого элемента pCommandBuffers, должны быть совместимы с текущим проходом отрисовки.
  • Если vkCmdExecuteCommands вызывается в пределах экземпляра прохода отрисовки, и любой заданный элемент pCommandBuffers был записан с VkCommandBufferInheritanceInfo::framebuffer , не равным VK_NULL_HANDLE, этот VkFramebuffer должен соответствовать VkFramebuffer, используемому в текущем экземпляре прохода отрисовки
  • Если vkCmdExecuteCommands не вызывается в пределах экземпляра прохода отрисовки, любой заданный элемент pCommandBuffers не должен быть записан с VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
  • Если функция inherited queries не включена, commandBuffer не должен иметь никаких запросов активных
  • Если commandBuffer имеет запрос VK_QUERY_TYPE_OCCLUSION активный, то каждый элемент pCommandBuffers должен быть записан с VkCommandBufferInheritanceInfo::occlusionQueryEnable , установленным в VK_TRUE
  • Если commandBuffer имеет запрос VK_QUERY_TYPE_OCCLUSION активный, то каждый элемент pCommandBuffers должен быть записан с VkCommandBufferInheritanceInfo::queryFlags , имеющим установленные все биты, которые установлены для запроса
  • Если commandBuffer имеет запрос VK_QUERY_TYPE_PIPELINE_STATISTICS активный, то каждый элемент pCommandBuffers должен быть записан с VkCommandBufferInheritanceInfo::pipelineStatistics , имеющим установленные все биты, которые установлены в VkQueryPool, используемом запросом
  • Любой заданный элемент pCommandBuffers не должен начинать какие-либо типы запросов, которые активны в commandBuffer
Допустимое использование (Неявное)
  • commandBuffer должен быть допустимой дескрипторной ссылкой VkCommandBuffer
  • pCommandBuffers должен быть указателем на массив commandBufferCount допустимых дескрипторных ссылок VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать операции передачи, графики или вычислений
  • commandBuffer должен быть первичным VkCommandBuffer
  • commandBufferCount должен быть больше 0
  • И commandBuffer, и элементы pCommandBuffers должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команд
Уровни буферов команд Область действия прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Первичный

Оба

Передача
графика
вычисления

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdExecuteCommands

vkCmdFillBuffer(3)

Имя

vkCmdFillBuffer - Заполнить область буфера фиксированным значением

C Спецификация

Чтобы очистить данные буфера, вызовите:

void vkCmdFillBuffer(
    VkCommandBuffer                             commandBuffer,
    VkBuffer                                    dstBuffer,
    VkDeviceSize                                dstOffset,
    VkDeviceSize                                size,
    uint32_t                                    data);

Параметры

  • commandBuffer - буфер команд, в который будет записана команда.
  • dstBuffer - буфер, который нужно заполнить.
  • dstOffset - смещение в байтах в буфере, с которого нужно начать заполнение, и должно быть кратно 4.
  • size - количество байт для заполнения, и должно быть либо кратно 4, либо VK_WHOLE_SIZE, чтобы заполнить диапазон от offset до конца буфера. Если используется VK_WHOLE_SIZE и оставшийся размер буфера не кратен 4, то используется ближайшее меньшее кратное.
  • data - 4-байтовое слово, которое записывается многократно в буфер для заполнения size байт данных. Слово данных записывается в память в соответствии с порядком байтов хоста.

Описание

vkCmdFillBuffer рассматривается как операция «передачи» для целей барьеров синхронизации. VK_BUFFER_USAGE_TRANSFER_DST_BIT должен быть указан в usage VkBufferCreateInfo, чтобы буфер был совместим с vkCmdFillBuffer.

Допустимое использование
  • dstOffset должно быть меньше размера dstBuffer
  • dstOffset должно быть кратно 4
  • Если size не равно VK_WHOLE_SIZE, size должно быть больше 0
  • Если size не равно VK_WHOLE_SIZE, size должно быть меньше или равно размеру dstBuffer минус dstOffset
  • Если size не равно VK_WHOLE_SIZE, size должно быть кратно 4
  • dstBuffer должно быть создано с флагом использования VK_BUFFER_USAGE_TRANSFER_DST_BIT
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • Если dstBuffer не разрежен, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
Допустимое использование (неявное)
  • commandBuffer должно быть допустимой дескриптором VkCommandBuffer
  • dstBuffer должно быть допустимой дескриптором VkBuffer
  • commandBuffer должно находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
  • И commandBuffer, и dstBuffer должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Вне

Графический
Вычислительный

Передача

См. также

VkBuffer, VkCommandBuffer, VkDeviceSize

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdFillBuffer

vkCmdNextSubpass(3)

Название

vkCmdNextSubpass - Переход к следующему подпроходу прохода отрисовки

C-спецификация

Для перехода к следующему подпроходу в экземпляре прохода отрисовки после записи команд для подпрохода, вызовите:

void vkCmdNextSubpass(
    VkCommandBuffer                             commandBuffer,
    VkSubpassContents                           contents);

Параметры

  • commandBuffer - это буфер команд, в котором необходимо записать команду.
  • contents указывает, как будут предоставлены команды в следующем подпроходе, аналогично соответствующему параметру vkCmdBeginRenderPass.

Описание

Индекс подпрохода для прохода отрисовки начинается с нуля при записи vkCmdBeginRenderPass и увеличивается каждый раз при записи vkCmdNextSubpass.

Переход к следующему подпроходу автоматически выполняет любые операции многовыборочного разрешения в завершающемся подпроходе. Многовыборочные разрешения в конце подпрохода рассматриваются как записи цветных вложений для целей синхронизации. То есть, считается, что они выполняются на этапе конвейера VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, и их записи синхронизируются с VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT. Синхронизация между рендерингом внутри подпрохода и любыми операциями разрешения в конце подпрохода происходит автоматически, без необходимости явных зависимостей или барьеров конвейера. Однако, если вложение разрешения также используется в другом подпроходе, необходима явная зависимость.

После перехода к следующему подпроходу приложение может записывать команды для этого подпрохода.

Допустимое использование
  • Текущий индекс подпрохода должен быть меньше числа подпроходов в проходе отрисовки минус один
Допустимое использование (неявное)
  • commandBuffer должно быть допустимой дескриптором VkCommandBuffer
  • contents должно быть допустимым значением VkSubpassContents
  • commandBuffer должно находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только внутри экземпляра прохода отрисовки
  • commandBuffer должен быть основным VkCommandBuffer
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной

Внутри

Графический

Графический

См. также

VkCommandBuffer, VkSubpassContents

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdNextSubpass

vkCmdPipelineBarrier(3)

Название

vkCmdPipelineBarrier - Вставка зависимости памяти

C-спецификация

Для записи барьера конвейера, вызовите:

void vkCmdPipelineBarrier(
    VkCommandBuffer                             commandBuffer,
    VkPipelineStageFlags                        srcStageMask,
    VkPipelineStageFlags                        dstStageMask,
    VkDependencyFlags                           dependencyFlags,
    uint32_t                                    memoryBarrierCount,
    const VkMemoryBarrier*                      pMemoryBarriers,
    uint32_t                                    bufferMemoryBarrierCount,
    const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
    uint32_t                                    imageMemoryBarrierCount,
    const VkImageMemoryBarrier*                 pImageMemoryBarriers);

Параметры

  • commandBuffer - это буфер команд, в который записывается команда.
  • srcStageMask - это битовая маска VkPipelineStageFlagBits, указывающая маску исходной стадии.
  • dstStageMask - это битовая маска VkPipelineStageFlagBits, указывающая маску целевой стадии.
  • dependencyFlags - это битовая маска VkDependencyFlagBits, указывающая, как формируются зависимости выполнения и памяти.
  • memoryBarrierCount - это длина массива pMemoryBarriers.
  • pMemoryBarriers - это указатель на массив структур VkMemoryBarrier.
  • bufferMemoryBarrierCount - это длина массива pBufferMemoryBarriers.
  • pBufferMemoryBarriers - это указатель на массив структур VkBufferMemoryBarrier.
  • imageMemoryBarrierCount - это длина массива pImageMemoryBarriers.
  • pImageMemoryBarriers - это указатель на массив структур VkImageMemoryBarrier.

Описание

Когда vkCmdPipelineBarrier отправляется в очередь, он определяет зависимость памяти между командами, которые были отправлены до него, и теми, которые отправлены после него.

Если vkCmdPipelineBarrier был записан вне экземпляра прохода рендеринга, первый область синхронизации включает каждую команду, отправленную в ту же очередь перед ним, включая те, которые находятся в том же буфере команд и пакете. Если vkCmdPipelineBarrier был записан внутри экземпляра прохода рендеринга, первая область синхронизации включает только команды, отправленные перед ним в пределах того же подпрохода. В любом случае, первая область синхронизации ограничена операциями на этапах конвейера, определяемых маской исходного этапа, указанной srcStageMask.

Если vkCmdPipelineBarrier был записан вне экземпляра прохода рендеринга, вторая область синхронизации включает каждую команду, отправленную в ту же очередь после него, включая те, которые находятся в том же буфере команд и пакете. Если vkCmdPipelineBarrier был записан внутри экземпляра прохода рендеринга, вторая область синхронизации включает только команды, отправленные после него в пределах того же подпрохода. В любом случае, вторая область синхронизации ограничена операциями на этапах конвейера, определяемых маской целевого этапа, указанной dstStageMask.

Первая область доступа ограничена доступом на этапах конвейера, определяемых маской исходного этапа, указанной srcStageMask. Внутри этого, первая область доступа включает только первые области доступа, определенные элементами массивов pMemoryBarriers, pBufferMemoryBarriers и pImageMemoryBarriers, каждый из которых определяет набор барьеров памяти. Если барьеры памяти не указаны, то первая область доступа не включает никаких доступов.

Вторая область доступа ограничена доступом на этапах конвейера, определяемых маской целевого этапа, указанной dstStageMask. Внутри этого, вторая область доступа включает только вторые области доступа, определенные элементами массивов pMemoryBarriers, pBufferMemoryBarriers и pImageMemoryBarriers, каждый из которых определяет набор барьеров памяти. Если барьеры памяти не указаны, то вторая область доступа не включает никаких доступов.

Если dependencyFlags включает VK_DEPENDENCY_BY_REGION_BIT, то любая зависимость между этапами конвейера в пространстве фреймбуфера является локальной для фреймбуфера - в противном случае она является глобальной для фреймбуфера.

Допустимое использование
  • Если функция геометрических шейдеров не включена, srcStageMask не должен содержать VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  • Если функция геометрических шейдеров не включена, dstStageMask не должен содержать VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  • Если функция тесселяционных шейдеров не включена, srcStageMask не должен содержать VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT или VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
  • Если функция тесселяционных шейдеров не включена, dstStageMask не должен содержать VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT или VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, проход рендеринга должен быть создан с экземпляром VkSubpassDependency в pDependencies, который выражает зависимость от текущего подпрохода к самому себе.
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, srcStageMask должен содержать подмножество битовых значений в элементе srcStageMask этого экземпляра VkSubpassDependency
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, dstStageMask должен содержать подмножество битовых значений в элементе dstStageMask этого экземпляра VkSubpassDependency
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, srcAccessMask любого элемента pMemoryBarriers или pImageMemoryBarriers должен содержать подмножество битовых значений элемента srcAccessMask этого экземпляра VkSubpassDependency
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, dstAccessMask любого элемента pMemoryBarriers или pImageMemoryBarriers должен содержать подмножество битовых значений элемента dstAccessMask этого экземпляра VkSubpassDependency
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, dependencyFlags должен быть равен элементу dependencyFlags этого экземпляра VkSubpassDependency
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, bufferMemoryBarrierCount должен быть 0
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, элемент image любого элемента pImageMemoryBarriers должен быть равен одному из элементов pAttachments, с которым был создан текущий framebuffer, который также упоминается одним из элементов элементов pColorAttachments, pResolveAttachments или pDepthStencilAttachment элементов экземпляра VkSubpassDescription, с которым был создан текущий подпроход
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, элементы oldLayout и newLayout любого элемента pImageMemoryBarriers должны быть равны элементу layout элемента элементов pColorAttachments, pResolveAttachments или pDepthStencilAttachment элементов экземпляра VkSubpassDescription, с которым был создан текущий подпроход, который ссылается на тот же image
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, элементы oldLayout и newLayout элемента pImageMemoryBarriers должны быть равны
  • Если vkCmdPipelineBarrier вызывается внутри экземпляра прохода рендеринга, элементы srcQueueFamilyIndex и dstQueueFamilyIndex любого элемента pImageMemoryBarriers должны быть VK_QUEUE_FAMILY_IGNORED
  • Любой этап конвейера, включенный в srcStageMask или dstStageMask, должен поддерживаться возможностями очереди, указанной элементом queueFamilyIndex структуры VkCommandPoolCreateInfo, которая использовалась для создания VkCommandPool, из которого был выделен commandBuffer, как указано в таблице поддерживаемых этапов конвейера.
  • Любой заданный элемент pMemoryBarriers, pBufferMemoryBarriers или pImageMemoryBarriers не должен иметь ни одного флага доступа, включенного в его элемент srcAccessMask, если этот бит не поддерживается ни одним из этапов конвейера в srcStageMask, как указано в таблице поддерживаемых типов доступа.
  • Любой заданный элемент pMemoryBarriers, pBufferMemoryBarriers или pImageMemoryBarriers не должен иметь ни одного флага доступа, включенного в его элемент dstAccessMask, если этот бит не поддерживается ни одним из этапов конвейера в dstStageMask, как указано в таблице поддерживаемых типов доступа.
END_OF_DOCUMENT_MARKER
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • srcStageMask должен быть допустимым сочетанием значений VkPipelineStageFlagBits
  • srcStageMask не должен быть 0
  • dstStageMask должен быть допустимым сочетанием значений VkPipelineStageFlagBits
  • dstStageMask не должен быть 0
  • dependencyFlags должен быть допустимым сочетанием значений VkDependencyFlagBits
  • Если memoryBarrierCount не 0, pMemoryBarriers должен быть указателем на массив из memoryBarrierCount допустимых структур VkMemoryBarrier
  • Если bufferMemoryBarrierCount не 0, pBufferMemoryBarriers должен быть указателем на массив из bufferMemoryBarrierCount допустимых структур VkBufferMemoryBarrier
  • Если imageMemoryBarrierCount не 0, pImageMemoryBarriers должен быть указателем на массив из imageMemoryBarrierCount допустимых структур VkImageMemoryBarrier
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать операции передачи, графики или вычислений
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Передача
графика
вычисления

См. также

VkBufferMemoryBarrier, VkCommandBuffer, VkDependencyFlags, VkImageMemoryBarrier, VkMemoryBarrier, VkPipelineStageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdPipelineBarrier

vkCmdPushConstants(3)

Имя

vkCmdPushConstants - Обновление значений констант push

C-спецификация

Для обновления констант push вызовите:

void vkCmdPushConstants(
    VkCommandBuffer                             commandBuffer,
    VkPipelineLayout                            layout,
    VkShaderStageFlags                          stageFlags,
    uint32_t                                    offset,
    uint32_t                                    size,
    const void*                                 pValues);

Параметры

  • commandBuffer - это буфер команд, в котором будет записано обновление константы push.
  • layout - это макет конвейера, используемый для программирования обновлений констант push.
  • stageFlags - это битовая маска VkShaderStageFlagBits, указывающая этапы шейдера, которые будут использовать константы push в обновленном диапазоне.
  • offset - это начальный смещение диапазона констант push для обновления, в байтах.
  • size - это размер диапазона констант push для обновления, в байтах.
  • pValues - это массив из size байтов, содержащий новые значения констант push.

Описание

Допустимое использование
  • stageFlags должен точно соответствовать этапам шейдера, используемым в layout для диапазона, указанного offset и size
  • offset должен быть кратным 4
  • size должен быть кратным 4
  • offset должен быть меньше VkPhysicalDeviceLimits::maxPushConstantsSize
  • size должен быть меньше или равен VkPhysicalDeviceLimits::maxPushConstantsSize минус offset
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • layout должен быть допустимой дескриптором VkPipelineLayout
  • stageFlags должен быть допустимым сочетанием значений VkShaderStageFlagBits
  • stageFlags не должен быть 0
  • pValues должен быть указателем на массив из size байтов
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать операции графики или вычислений
  • size должен быть больше 0
  • Оба commandBuffer и layout должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графика
вычисления

См. также

VkCommandBuffer, VkPipelineLayout, VkShaderStageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdPushConstants

vkCmdResetEvent(3)

Имя

vkCmdResetEvent - Сброс объекта события в несигнализированное состояние

C-спецификация

Чтобы установить состояние события в несигнализированное с устройства, вызовите:

void vkCmdResetEvent(
    VkCommandBuffer                             commandBuffer,
    VkEvent                                     event,
    VkPipelineStageFlags                        stageMask);

Параметры

  • commandBuffer - это буфер команд, в который записывается команда.
  • event - это событие, которое будет несигнализировано.
  • stageMask - это битовая маска VkPipelineStageFlagBits, указывающая маску исходной стадии, используемую для определения того, когда event несигнализируется.

Описание

Когда vkCmdResetEvent отправляется в очередь, он определяет зависимость выполнения от команд, которые были отправлены до него, и определяет операцию отмены сигнала события, которая сбрасывает событие в несигнализированное состояние.

Первая область синхронизации включает каждую команду, ранее отправленную в ту же очередь, включая те, которые находятся в одном буфере команд и пакете. Область синхронизации ограничена операциями на этапах конвейера, определяемых маской исходной стадии, указанной stageMask.

Вторая область синхронизации включает только операцию отмены сигнала события.

Если event уже находится в несигнализированном состоянии, когда vkCmdResetEvent выполняется на устройстве, то vkCmdResetEvent не оказывает никакого эффекта, операция снятия сигнала события не происходит, и зависимость выполнения не генерируется.

Допустимое использование
  • stageMask не должен включать VK_PIPELINE_STAGE_HOST_BIT
  • Если функция geometry shaders не включена, stageMask не должен содержать VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  • Если функция tessellation shaders не включена, stageMask не должен содержать VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT или VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
  • Когда эта команда выполняется, event не должен ожидать команду vkCmdWaitEvents, которая выполняется в данный момент
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • event должен быть допустимой дескриптором VkEvent
  • stageMask должен быть допустимым сочетанием значений VkPipelineStageFlagBits
  • stageMask не должен быть 0
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
  • И commandBuffer, и event должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внешний

Графический
вычислительный

См. также

VkCommandBuffer, VkEvent, VkPipelineStageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdResetEvent

vkCmdResetQueryPool(3)

Имя

vkCmdResetQueryPool - Сброс запросов в пуле запросов

Спецификация C

Чтобы сбросить диапазон запросов в пуле запросов, вызовите:

void vkCmdResetQueryPool(
    VkCommandBuffer                             commandBuffer,
    VkQueryPool                                 queryPool,
    uint32_t                                    firstQuery,
    uint32_t                                    queryCount);

Параметры

  • commandBuffer - буфер команд, в который будет записана эта команда.
  • queryPool - дескриптор пула запросов, управляющего сбрасываемыми запросами.
  • firstQuery - начальный индекс запроса для сброса.
  • queryCount - количество запросов для сброса.

Описание

При выполнении в очереди эта команда устанавливает состояние индексов запросов [firstQuery, firstQuery + queryCount - 1] как недоступное.

Допустимое использование
  • firstQuery должен быть меньше, чем количество запросов в queryPool
  • Сумма firstQuery и queryCount должна быть меньше или равна количеству запросов в queryPool
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • queryPool должен быть допустимой дескриптором VkQueryPool
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
  • И commandBuffer, и queryPool должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Внешний

Графический
вычислительный

См. также

VkCommandBuffer, VkQueryPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdResetQueryPool

vkCmdResolveImage(3)

Имя

vkCmdResolveImage - Разрешение областей изображения

Спецификация C

Чтобы разрешить многовыборочное изображение в не многовыборочное изображение, вызовите:

void vkCmdResolveImage(
    VkCommandBuffer                             commandBuffer,
    VkImage                                     srcImage,
    VkImageLayout                               srcImageLayout,
    VkImage                                     dstImage,
    VkImageLayout                               dstImageLayout,
    uint32_t                                    regionCount,
    const VkImageResolve*                       pRegions);

Параметры

  • commandBuffer - буфер команд, в который будет записана команда.
  • srcImage - исходное изображение.
  • srcImageLayout - макет подресурсов исходного изображения для разрешения.
  • dstImage - целевое изображение.
  • dstImageLayout - макет подресурсов целевого изображения для разрешения.
  • regionCount - количество областей для разрешения.
  • pRegions - указатель на массив структур VkImageResolve, указывающих области для разрешения.

Описание

Во время разрешения образцы, соответствующие каждому расположению пикселя в источнике, преобразуются в один образец, прежде чем быть записанными в место назначения. Если исходные форматы являются типами с плавающей запятой или нормализованными типами, значения образцов для каждого пикселя разрешаются способом, зависящим от реализации. Если исходные форматы являются целочисленными типами, для каждого пикселя выбирается значение одного образца.

srcOffset и dstOffset выбирают начальные смещения x, y и z в текселях подобластей данных исходного и целевого изображения. extent - размер в текселях исходного изображения для разрешения в width, height и depth.

Разрешения выполняются слой за слоем, начиная с члена baseArrayLayer для источника и dstSubresource для назначения. layerCount слоёв разрешаются на целевом изображении.

Допустимое использование
  • Указанный регион источника, заданный данным элементом pRegions, должен быть регионом, который содержится внутри srcImage
  • Указанный регион назначения, заданный данным элементом pRegions, должен быть регионом, который содержится внутри dstImage
  • Объединение всех регионов источника и объединение всех регионов назначения, указанных элементами pRegions, не должны перекрываться в памяти
  • Если srcImage не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • srcImage должен иметь количество выборок, равное любому допустимому значению количества выборок, кроме VK_SAMPLE_COUNT_1_BIT
  • Если dstImage не является разреженным, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • dstImage должен иметь количество выборок, равное VK_SAMPLE_COUNT_1_BIT
  • srcImageLayout должен указывать компоновку подобъектов изображения srcImage, указанных в pRegions, в момент выполнения этой команды на VkDevice
  • srcImageLayout должен быть VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • dstImageLayout должен указывать компоновку подобъектов изображения dstImage, указанных в pRegions, в момент выполнения этой команды на VkDevice
  • dstImageLayout должен быть VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • Если dstImage был создан с tiling, равным VK_IMAGE_TILING_LINEAR, dstImage должен быть создан с format, который поддерживает использование в качестве цветового вложения, как указано флагом VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT в VkFormatProperties::linearTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties
  • Если dstImage был создан с tiling, равным VK_IMAGE_TILING_OPTIMAL, dstImage должен быть создан с format, который поддерживает использование в качестве цветового вложения, как указано флагом VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT в VkFormatProperties::optimalTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties
  • srcImage и dstImage должны быть созданы с одним и тем же форматом изображения
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • srcImage должен быть допустимой дескриптором VkImage
  • srcImageLayout должен быть допустимым значением VkImageLayout
  • dstImage должен быть допустимой дескриптором VkImage
  • dstImageLayout должен быть допустимым значением VkImageLayout
  • pRegions должен быть указателем на массив из regionCount допустимых структур VkImageResolve
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • Эта команда должна вызываться только за пределами экземпляра прохода рендеринга
  • regionCount должен быть больше 0
  • Каждый из commandBuffer, dstImage и srcImage должен быть создан, выделен или получен из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Вне

Графический

Передача

См. также

VkCommandBuffer, VkImage, VkImageLayout, VkImageResolve

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdResolveImage

vkCmdSetBlendConstants(3)

Имя

vkCmdSetBlendConstants - Установка значений констант смешивания

Спецификация C

В противном случае, для динамической установки и изменения константы смешивания вызовите:

void vkCmdSetBlendConstants(
    VkCommandBuffer                             commandBuffer,
    const float                                 blendConstants[4]);

Параметры

  • commandBuffer - буфер команд, в который будет записана команда.
  • blendConstants - массив из четырех значений, указывающих компоненты R, G, B и A цвета константы смешивания, используемого при смешивании, в зависимости от коэффициента смешивания.

Описание

Допустимое использование
  • Текущий связанный графический конвейер должен быть создан с включенным динамическим состоянием VK_DYNAMIC_STATE_BLEND_CONSTANTS
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetBlendConstants

vkCmdSetDepthBias(3)

Имя

vkCmdSetDepthBias - Установка динамического состояния смещения глубины

Спецификация C

Значения глубины всех фрагментов, генерируемых растеризацией полигона, могут быть смещены на одно значение, вычисляемое для этого полигона. Это поведение контролируется членами depthBiasEnable, depthBiasConstantFactor, depthBiasClamp и depthBiasSlopeFactor VkPipelineRasterizationStateCreateInfo, или соответствующими параметрами команды vkCmdSetDepthBias, если состояние смещения глубины является динамическим.

void vkCmdSetDepthBias(
    VkCommandBuffer                             commandBuffer,
    float                                       depthBiasConstantFactor,
    float                                       depthBiasClamp,
    float                                       depthBiasSlopeFactor);

Параметры

  • commandBuffer - буфер команд, в который будет записана команда.
  • depthBiasConstantFactor - скалярный множитель, управляющий постоянным значением глубины, добавляемым к каждому фрагменту.
  • depthBiasClamp - максимальное (или минимальное) смещение глубины фрагмента.
  • depthBiasSlopeFactor - скалярный множитель, применяемый к наклону фрагмента в вычислениях смещения глубины.

Описание

Если depthBiasEnable равно VK_FALSE, смещение глубины не применяется, и значения глубины фрагмента не изменяются.

depthBiasSlopeFactor масштабирует максимальный наклон глубины многоугольника, а depthBiasConstantFactor масштабирует зависящую от реализации константу, которая связана с допустимым разрешением буфера глубины. Результирующие значения суммируются для получения значения смещения глубины, которое затем ограничивается минимальным или максимальным значением, заданным depthBiasClamp. depthBiasSlopeFactor, depthBiasConstantFactor и depthBiasClamp могут быть положительными, отрицательными или равными нулю.

Максимальный наклон глубины m треугольника равен

\[m = \sqrt{ \left({{\partial z_f} \over {\partial x_f}}\right)^2 + \left({{\partial z_f} \over {\partial y_f}}\right)^2}\]

где (xf, yf, zf) — точка на треугольнике. m может быть приближенно вычислен как

\[m = \max\left( \left| { {\partial z_f} \over {\partial x_f} } \right|, \left| { {\partial z_f} \over {\partial y_f} } \right| \right).\]

Минимальное различимое различие r — это зависящий от реализации параметр, который зависит от представления буфера глубины. Это наименьшая разница в значениях координаты z буфера кадра, которая гарантированно останется различимой в процессе растеризации многоугольников и в буфере глубины. Все пары фрагментов, сгенерированных растеризацией двух многоугольников с в остальном идентичными вершинами, но значениями zf, которые отличаются на $r$, будут иметь различные значения глубины.

Для буферов глубины с фиксированной точкой r является константой во всем диапазоне буфера глубины. Для буферов глубины с плавающей точкой нет одного минимального различимого различия. В этом случае минимальное различимое различие для данного многоугольника зависит от максимального показателя степени e в диапазоне значений z, охватываемом примитивом. Если n — количество битов в мантиссе с плавающей точкой, минимальное различимое различие r для данного примитива определяется как

r = 2e-n

Если буфер глубины отсутствует, r не определено.

Значение смещения o для многоугольника равно

\[o = \begin{cases} m \times depthBiasSlopeFactor + r \times depthBiasConstantFactor & depthBiasClamp = 0\ or\ NaN \\ \min(m \times depthBiasSlopeFactor + r \times depthBiasConstantFactor, depthBiasClamp) & depthBiasClamp > 0 \\ \max(m \times depthBiasSlopeFactor + r \times depthBiasConstantFactor, depthBiasClamp) & depthBiasClamp < 0 \\ \end{cases}\]

m вычисляется, как описано выше. Если буфер глубины использует представление с фиксированной точкой, m является функцией значений глубины в диапазоне [0,1], и o применяется к значениям глубины в том же диапазоне.

Для буферов глубины с фиксированной точкой значения глубины фрагмента всегда ограничиваются диапазоном [0,1] путем обрезания после выполнения сложения смещения глубины. Значения глубины фрагмента обрезаются даже тогда, когда буфер глубины использует представление с плавающей точкой.

Правильное использование
  • Текущий привязанный графический конвейер должен быть создан с включенным динамическим состоянием VK_DYNAMIC_STATE_DEPTH_BIAS
  • Если функция обрезания смещения глубины depth bias clamping не включена, depthBiasClamp должно быть 0.0
Правильное использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetDepthBias

vkCmdSetDepthBounds(3)

Название

vkCmdSetDepthBounds - Установка значений теста границ глубины для буфера команд

C-спецификация

Тест границ глубины условно отключает покрытие выборки на основе результата сравнения значения za в приложении глубины в местоположении (xf,yf) (для соответствующей выборки) и диапазона значений. Тест включается или выключается членом depthBoundsTestEnable VkPipelineDepthStencilStateCreateInfo: Если объект состояния конвейера создается без включенного динамического состояния VK_DYNAMIC_STATE_DEPTH_BOUNDS, то диапазон значений, используемых в тесте границ глубины, определяется членами minDepthBounds и maxDepthBounds структуры VkPipelineDepthStencilStateCreateInfo. В противном случае, для динамической установки значений диапазона границ глубины вызовите:

void vkCmdSetDepthBounds(
    VkCommandBuffer                             commandBuffer,
    float                                       minDepthBounds,
    float                                       maxDepthBounds);

Параметры

  • commandBuffer — буфер команд, в который будет записана команда.
  • minDepthBounds — нижняя граница диапазона значений глубины, используемых в тесте границ глубины.
  • maxDepthBounds — верхняя граница диапазона.

Описание

Правильное использование
  • Текущий привязанный графический конвейер должен быть создан с включенным динамическим состоянием VK_DYNAMIC_STATE_DEPTH_BOUNDS
  • minDepthBounds должно быть в диапазоне от 0.0 до 1.0, включительно
  • maxDepthBounds должно быть в диапазоне от 0.0 до 1.0, включительно
Правильное использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetDepthBounds

vkCmdSetEvent(3)

Название

vkCmdSetEvent - Установка объекта события в сигнализируемое состояние

C-спецификация

Чтобы установить состояние события в сигнализируемое состояние с устройства, вызовите:

void vkCmdSetEvent(
    VkCommandBuffer                             commandBuffer,
    VkEvent                                     event,
    VkPipelineStageFlags                        stageMask);

Параметры

  • commandBuffer — буфер команд, в который записывается команда.
  • event — событие, которое будет установлено в сигнализируемое состояние.
  • stageMask задает маску исходной стадии, используемую для определения момента, когда event устанавливается в сигнализируемое состояние.

Описание

Когда vkCmdSetEvent отправляется в очередь, он определяет зависимость выполнения от команд, отправленных до него, и определяет операцию сигнала события, которая устанавливает событие в сигнализируемое состояние.

Первый объем синхронизации включает каждую команду, ранее отправленную в ту же очередь, включая те, что находятся в одном буфере команд и пакете. Объем синхронизации ограничен операциями на этапах конвейера, определяемых маской исходного этапа, указанной stageMask.

Второй объем синхронизации включает только операцию сигнала события.

Если event уже находится в сигнальном состоянии, когда vkCmdSetEvent выполняется на устройстве, то vkCmdSetEvent не оказывает никакого действия, операция сигнала события не происходит, и зависимость выполнения не генерируется.

Допустимое использование
  • stageMask не должен включать VK_PIPELINE_STAGE_HOST_BIT
  • Если функция геометрических шейдеров не включена, stageMask не должен содержать VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  • Если функция тесселяционных шейдеров не включена, stageMask не должен содержать VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT или VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • event должен быть допустимой дескриптором VkEvent
  • stageMask должен быть допустимой комбинацией значений VkPipelineStageFlagBits
  • stageMask не должен быть 0
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • Эта команда должна вызываться только за пределами экземпляра прохода рендеринга
  • И commandBuffer, и event должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • К commandBuffer должен осуществляться внешний синхронный доступ хоста
  • К VkCommandPool, из которого был выделен commandBuffer, должен осуществляться внешний синхронный доступ хоста
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вспомогательный

Внешний

Графический
вычислительный

См. также

VkCommandBuffer, VkEvent, VkPipelineStageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetEvent

vkCmdSetLineWidth(3)

Имя

vkCmdSetLineWidth - Установка динамического состояния ширины линии

C-спецификация

Ширина линии задается свойством VkPipelineRasterizationStateCreateInfo::lineWidth текущего активного конвейера, если конвейер не был создан с включенным VK_DYNAMIC_STATE_LINE_WIDTH.

В противном случае ширина линии устанавливается путем вызова vkCmdSetLineWidth:

void vkCmdSetLineWidth(
    VkCommandBuffer                             commandBuffer,
    float                                       lineWidth);

Параметры

  • commandBuffer - буфер команд, в который будет записана команда.
  • lineWidth - ширина растеризованных линейных сегментов.

Описание

Допустимое использование
  • Текущий связанный графический конвейер должен быть создан с включенным динамическим состоянием VK_DYNAMIC_STATE_LINE_WIDTH
  • Если функция широких линий не включена, lineWidth должен быть 1.0
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
Синхронизация хоста
  • К commandBuffer должен осуществляться внешний синхронный доступ хоста
  • К VkCommandPool, из которого был выделен commandBuffer, должен осуществляться внешний синхронный доступ хоста
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вспомогательный

Оба

Графический

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetLineWidth

vkCmdSetScissor(3)

Имя

vkCmdSetScissor - Установка динамических прямоугольников отсечения в буфере команд

C-спецификация

Тест отсечения определяет, находятся ли координаты фреймбуфера фрагмента (xf,yf) внутри прямоугольника отсечения, соответствующего индексу видового окна (см. Управление видовым окном), используемому примитивом, который сгенерировал фрагмент. Если объект состояния конвейера создается без включенного VK_DYNAMIC_STATE_SCISSOR, то прямоугольники отсечения устанавливаются состоянием VkPipelineViewportStateCreateInfo объекта состояния конвейера. В противном случае для динамической установки прямоугольников отсечения вызовите:

void vkCmdSetScissor(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    firstScissor,
    uint32_t                                    scissorCount,
    const VkRect2D*                             pScissors);

Параметры

  • commandBuffer - буфер команд, в который будет записана команда.
  • firstScissor - индекс первого отсечения, состояние которого обновляется командой.
  • scissorCount - количество отсечений, прямоугольники которых обновляются командой.
  • pScissors - указатель на массив структур VkRect2D, определяющих прямоугольники отсечения.

Описание

Прямоугольники отсечения, взятые из элемента i pScissors, заменяют текущее состояние для индекса отсечения firstScissor + i, для i в [0, scissorCount).

Каждый прямоугольник отсечения описывается структурой VkRect2D, где значения offset.x и offset.y определяют левый верхний угол прямоугольника отсечения, а значения extent.width и extent.height определяют размер в пикселях.

Допустимое использование
  • Текущий привязанный графический конвейер должен быть создан с включенным динамическим состоянием VK_DYNAMIC_STATE_SCISSOR
  • firstScissor должен быть меньше, чем VkPhysicalDeviceLimits::maxViewports
  • Сумма firstScissor и scissorCount должна быть в диапазоне от 1 до VkPhysicalDeviceLimits::maxViewports, включительно
  • Если функция multiple viewports не включена, firstScissor должен быть 0
  • Если функция multiple viewports не включена, scissorCount должен быть 1
  • Элементы x и y offset должны быть больше или равны 0
  • Вычисление (offset.x + extent.width) не должно вызывать переполнение при сложении целых чисел со знаком
  • Вычисление (offset.y + extent.height) не должно вызывать переполнение при сложении целых чисел со знаком
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • pScissors должен быть указателем на массив структур scissorCount VkRect2D
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • scissorCount должен быть больше 0
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вспомогательный

Оба

Графический

См. также

VkCommandBuffer, VkRect2D

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetScissor

vkCmdSetStencilCompareMask(3)

Имя

vkCmdSetStencilCompareMask - Установка динамического состояния маски сравнения трафарета

C-спецификация

Если объект состояния конвейера создан с включенным динамическим состоянием VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK, то для динамической установки маски сравнения трафарета вызовите:

void vkCmdSetStencilCompareMask(
    VkCommandBuffer                             commandBuffer,
    VkStencilFaceFlags                          faceMask,
    uint32_t                                    compareMask);

Параметры

  • commandBuffer — буфер команд, в который будет записана команда.
  • faceMask — это битовая маска VkStencilFaceFlagBits, указывающая набор состояний трафарета, для которых нужно обновить маску сравнения.
  • compareMask — новое значение для использования в качестве маски сравнения трафарета.

Описание

Допустимое использование
  • Текущий привязанный графический конвейер должен быть создан с включенным динамическим состоянием VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • faceMask должен быть допустимым сочетанием значений VkStencilFaceFlagBits
  • faceMask не должен быть 0
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вспомогательный

Оба

Графический

См. также

VkCommandBuffer, VkStencilFaceFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetStencilCompareMask

vkCmdSetStencilReference(3)

Имя

vkCmdSetStencilReference - Установка динамического состояния ссылочного значения трафарета

C-спецификация

Если объект состояния конвейера создан с включенным динамическим состоянием VK_DYNAMIC_STATE_STENCIL_REFERENCE, то для динамической установки ссылочного значения трафарета вызовите:

void vkCmdSetStencilReference(
    VkCommandBuffer                             commandBuffer,
    VkStencilFaceFlags                          faceMask,
    uint32_t                                    reference);

Параметры

  • commandBuffer — буфер команд, в который будет записана команда.
  • faceMask — это битовая маска VkStencilFaceFlagBits, указывающая набор состояний трафарета, для которых нужно обновить ссылочное значение, как описано выше для vkCmdSetStencilCompareMask.
  • reference — новое значение для использования в качестве ссылочного значения трафарета.

Описание

Допустимое использование
  • Текущий привязанный графический конвейер должен быть создан с включенным динамическим состоянием VK_DYNAMIC_STATE_STENCIL_REFERENCE
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • faceMask должен быть допустимым сочетанием значений VkStencilFaceFlagBits
  • faceMask не должен быть 0
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команд
Уровни буфера команд Область действия прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический

См. также

VkCommandBuffer, VkStencilFaceFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetStencilReference

vkCmdSetStencilWriteMask(3)

Имя

vkCmdSetStencilWriteMask - Установка динамического состояния маски записи трафарета

Спецификация C

Если объект состояния конвейера создан с включенным динамическим состоянием VK_DYNAMIC_STATE_STENCIL_WRITE_MASK, то для динамической установки маски записи трафарета вызовите:

void vkCmdSetStencilWriteMask(
    VkCommandBuffer                             commandBuffer,
    VkStencilFaceFlags                          faceMask,
    uint32_t                                    writeMask);

Параметры

  • commandBuffer — это буфер команд, в который будет записана команда.
  • faceMask — это битовая маска VkStencilFaceFlagBits, указывающая набор состояний трафарета, для которых необходимо обновить маску записи, как описано выше для vkCmdSetStencilCompareMask.
  • writeMask — это новое значение, которое будет использоваться в качестве маски записи трафарета.

Описание

Допустимое использование
  • Текущий привязанный графический конвейер должен быть создан с включенным динамическим состоянием VK_DYNAMIC_STATE_STENCIL_WRITE_MASK
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • faceMask должен быть допустимым сочетанием значений VkStencilFaceFlagBits
  • faceMask не должен быть 0
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
Синхронизация узла
  • Доступ узла к commandBuffer должен быть внешне синхронизирован
  • Доступ узла к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команд
Уровни буфера команд Область действия прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический

См. также

VkCommandBuffer, VkStencilFaceFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetStencilWriteMask

vkCmdSetViewport(3)

Имя

vkCmdSetViewport - Установка области просмотра в буфере команд

Спецификация C

Если привязанный объект состояния конвейера не был создан с включенным динамическим состоянием VK_DYNAMIC_STATE_VIEWPORT, параметры преобразования области просмотра указываются с использованием элемента pViewports VkPipelineViewportStateCreateInfo в объекте состояния конвейера. Если объект состояния конвейера был создан с включенным динамическим состоянием VK_DYNAMIC_STATE_VIEWPORT, параметры преобразования области просмотра устанавливаются и изменяются динамически с помощью команды:

void vkCmdSetViewport(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    firstViewport,
    uint32_t                                    viewportCount,
    const VkViewport*                           pViewports);

Параметры

  • commandBuffer — это буфер команд, в который будет записана команда.
  • firstViewport — это индекс первой области просмотра, параметры которой обновляются командой.
  • viewportCount — это количество областей просмотра, параметры которых обновляются командой.
  • pViewports — это указатель на массив структур VkViewport, указывающих параметры области просмотра.

Описание

Параметры области просмотра, взятые из элемента i pViewports, заменяют текущее состояние для индекса области просмотра firstViewport + i, для i в [0, viewportCount).

Допустимое использование
  • Текущий привязанный графический конвейер должен быть создан с включенным динамическим состоянием VK_DYNAMIC_STATE_VIEWPORT
  • firstViewport должен быть меньше, чем VkPhysicalDeviceLimits::maxViewports
  • Сумма firstViewport и viewportCount должна находиться в диапазоне от 1 до VkPhysicalDeviceLimits::maxViewports, включительно
  • Если функция множественных областей просмотра не включена, firstViewport должен быть 0
  • Если функция множественных областей просмотра не включена, viewportCount должен быть 1
  • pViewports должен быть указателем на массив viewportCount допустимых структур VkViewport
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические операции
  • viewportCount должен быть больше, чем 0
Синхронизация узла
  • Доступ узла к commandBuffer должен быть внешне синхронизирован
  • Доступ узла к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команд
Уровни буфера команд Область действия прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический

См. также

VkCommandBuffer, VkViewport

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdSetViewport

vkCmdUpdateBuffer(3)

Имя

vkCmdUpdateBuffer - Обновление содержимого буфера из памяти узла

Спецификация C

Для обновления данных буфера встроенным способом в буфере команд вызовите:

void vkCmdUpdateBuffer(
    VkCommandBuffer                             commandBuffer,
    VkBuffer                                    dstBuffer,
    VkDeviceSize                                dstOffset,
    VkDeviceSize                                dataSize,
    const void*                                 pData);

Параметры

  • commandBuffer — это буфер команд, в который будет записана команда.
  • dstBuffer — это дескриптор буфера, который нужно обновить.
  • dstOffset — это смещение в байтах в буфере, с которого начинается обновление, и должно быть кратно 4.
  • dataSize — это количество байтов для обновления, и должно быть кратно 4.
  • pData — это указатель на исходные данные для обновления буфера, и должен иметь размер не менее dataSize байтов.

Описание

dataSize должен быть меньше или равен 65536 байтам. Для больших обновлений приложения могут использовать буферную копию copies.

Исходные данные копируются из указателя пользователя в буфер команд при вызове команды.

vkCmdUpdateBuffer разрешен только за пределами прохода отрисовки. Эта команда рассматривается как операция «передачи» для целей барьеров синхронизации. VK_BUFFER_USAGE_TRANSFER_DST_BIT должен быть указан в usage VkBufferCreateInfo, чтобы буфер был совместим с vkCmdUpdateBuffer.

Допустимое использование
  • dstOffset должен быть меньше размера dstBuffer
  • dataSize должен быть меньше или равен размеру dstBuffer минус dstOffset
  • dstBuffer должен быть создан с флагом использования VK_BUFFER_USAGE_TRANSFER_DST_BIT
  • Если dstBuffer не разрежен, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • dstOffset должен быть кратным 4
  • dataSize должен быть меньше или равен 65536
  • dataSize должен быть кратным 4
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • dstBuffer должен быть допустимой дескриптором VkBuffer
  • pData должен быть указателем на массив из dataSize байт
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать операции передачи, графики или вычислений
  • Эта команда должна вызываться только за пределами экземпляра прохода отрисовки
  • dataSize должен быть больше 0
  • И commandBuffer, и dstBuffer должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Вне

Передача
графика
вычисления

Передача

См. также

VkBuffer, VkCommandBuffer, VkDeviceSize

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdUpdateBuffer

vkCmdWaitEvents(3)

Название

vkCmdWaitEvents - Ожидание одного или нескольких событий и вставка набора памяти

Спецификация C

Чтобы дождаться перехода одного или нескольких событий в сигнальное состояние на устройстве, вызовите:

void vkCmdWaitEvents(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    eventCount,
    const VkEvent*                              pEvents,
    VkPipelineStageFlags                        srcStageMask,
    VkPipelineStageFlags                        dstStageMask,
    uint32_t                                    memoryBarrierCount,
    const VkMemoryBarrier*                      pMemoryBarriers,
    uint32_t                                    bufferMemoryBarrierCount,
    const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
    uint32_t                                    imageMemoryBarrierCount,
    const VkImageMemoryBarrier*                 pImageMemoryBarriers);

Параметры

  • commandBuffer — буфер команд, в который записывается команда.
  • eventCount — длина массива pEvents.
  • pEvents — массив дескрипторов объектов событий, ожидания которых необходимы.
  • srcStageMask — битовая маска VkPipelineStageFlagBits, указывающая маску исходной стадии.
  • dstStageMask — битовая маска VkPipelineStageFlagBits, указывающая маску целевой стадии.
  • memoryBarrierCount — длина массива pMemoryBarriers.
  • pMemoryBarriers — указатель на массив структур VkMemoryBarrier.
  • bufferMemoryBarrierCount — длина массива pBufferMemoryBarriers.
  • pBufferMemoryBarriers — указатель на массив структур VkBufferMemoryBarrier.
  • imageMemoryBarrierCount — длина массива pImageMemoryBarriers.
  • pImageMemoryBarriers — указатель на массив структур VkImageMemoryBarrier.

Описание

Когда vkCmdWaitEvents отправляется в очередь, он определяет зависимость памяти между предыдущими операциями сигнализации событий и последующими командами.

Первая область синхронизации включает только операции сигнализации событий, которые работают с членами pEvents, и операции, которые произошли до операций сигнализации событий. Операции сигнализации событий, выполняемые vkCmdSetEvent, которые ранее были отправлены в ту же очередь, включены в первую область синхронизации, если логически последняя стадия конвейера в их параметре stageMask логически раньше или равна логически последней стадии конвейера в srcStageMask. Операции сигнализации событий, выполняемые vkSetEvent, включаются в первую область синхронизации только в том случае, если VK_PIPELINE_STAGE_HOST_BIT включен в srcStageMask.

Вторая область синхронизации включает команды, позже отправленные в ту же очередь, включая те, которые находятся в одном буфере команд и пакете. Вторая область синхронизации ограничена операциями на стадиях конвейера, определяемых маской целевой стадии, указанной dstStageMask.

Первая область доступа ограничена доступом на стадиях конвейера, определяемых маской исходной стадии, указанной srcStageMask. В пределах этого, первая область доступа включает только первые области доступа, определенные элементами массивов pMemoryBarriers, pBufferMemoryBarriers и pImageMemoryBarriers, каждый из которых определяет набор барьеров памяти. Если барьеры памяти не указаны, то первая область доступа не включает никаких доступов.

Вторая область доступа ограничена доступом на стадиях конвейера, определяемых маской целевой стадии, указанной dstStageMask. В пределах этого, вторая область доступа включает только вторые области доступа, определенные элементами массивов pMemoryBarriers, pBufferMemoryBarriers и pImageMemoryBarriers, каждый из которых определяет набор барьеров памяти. Если барьеры памяти не указаны, то вторая область доступа не включает никаких доступов.

Примечание

vkCmdWaitEvents используется с vkCmdSetEvent для определения зависимости памяти между двумя наборами команд действий, примерно так же, как барьеры конвейера, но разделенные на две команды, так что работа между ними может выполняться беспрепятственно.

Примечание

Приложения должны быть осторожны, чтобы избежать гонок данных при использовании событий. Нет прямой гарантии упорядочения между командой vkCmdResetEvent и командой vkCmdWaitEvents, отправленной после нее, поэтому между этими командами должна быть включена какая-либо другая зависимость выполнения (например, семафор).

END_OF_DOCUMENT_MARKER
Правильное использование
  • srcStageMask должен быть побитовым ИЛИ параметра stageMask , используемого в предыдущих вызовах vkCmdSetEvent , с любым из элементов pEvents и VK_PIPELINE_STAGE_HOST_BIT , если любой из элементов pEvents был установлен с помощью vkSetEvent
  • Если функция geometry shaders не включена, srcStageMask не должен содержать VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  • Если функция geometry shaders не включена, dstStageMask не должен содержать VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  • Если функция tessellation shaders не включена, srcStageMask не должен содержать VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT или VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
  • Если функция tessellation shaders не включена, dstStageMask не должен содержать VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT или VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
  • Если pEvents включает одно или несколько событий, которые будут сигнализированы vkSetEvent после того, как commandBuffer будет отправлен в очередь, то vkCmdWaitEvents не должен вызываться внутри экземпляра прохода рендеринга
  • Любая стадия конвейера, включенная в srcStageMask или dstStageMask должна поддерживаться возможностями семейства очередей, указанного членом queueFamilyIndex структуры VkCommandPoolCreateInfo, которая использовалась для создания VkCommandPool , из которого был выделен commandBuffer , как указано в таблице поддерживаемых стадий конвейера.
  • Любой заданный элемент pMemoryBarriers, pBufferMemoryBarriers или pImageMemoryBarriers не должен иметь ни одного флага доступа, включенного в его член srcAccessMask , если этот бит не поддерживается ни одной из стадий конвейера в srcStageMask, как указано в таблице поддерживаемых типов доступа.
  • Любой заданный элемент pMemoryBarriers, pBufferMemoryBarriers или pImageMemoryBarriers не должен иметь ни одного флага доступа, включенного в его член dstAccessMask , если этот бит не поддерживается ни одной из стадий конвейера в dstStageMask, как указано в таблице поддерживаемых типов доступа.
Правильное использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • pEvents должен быть указателем на массив eventCount допустимых дескрипторов VkEvent
  • srcStageMask должен быть допустимой комбинацией значений VkPipelineStageFlagBits
  • srcStageMask не должен быть 0
  • dstStageMask должен быть допустимой комбинацией значений VkPipelineStageFlagBits
  • dstStageMask не должен быть 0
  • Если memoryBarrierCount не 0, pMemoryBarriers должен быть указателем на массив memoryBarrierCount допустимых структур VkMemoryBarrier
  • Если bufferMemoryBarrierCount не 0, pBufferMemoryBarriers должен быть указателем на массив bufferMemoryBarrierCount допустимых структур VkBufferMemoryBarrier
  • Если imageMemoryBarrierCount не 0, pImageMemoryBarriers должен быть указателем на массив imageMemoryBarrierCount допустимых структур VkImageMemoryBarrier
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool , из которого был выделен commandBuffer должен поддерживать графические или вычислительные операции
  • eventCount должен быть больше 0
  • И commandBuffer, и элементы pEvents должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool , из которого был выделен commandBuffer должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода рендеринга Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический
вычислительный

См. также

VkBufferMemoryBarrier, VkCommandBuffer, VkEvent, VkImageMemoryBarrier, VkMemoryBarrier, VkPipelineStageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdWaitEvents

vkCmdWriteTimestamp(3)

Имя

vkCmdWriteTimestamp - Запись временной метки устройства в объект запроса

C-спецификация

Чтобы запросить временную метку, вызовите:

void vkCmdWriteTimestamp(
    VkCommandBuffer                             commandBuffer,
    VkPipelineStageFlagBits                     pipelineStage,
    VkQueryPool                                 queryPool,
    uint32_t                                    query);

Параметры

  • commandBuffer - это буфер команд, в который будет записана команда.
  • pipelineStage - это один из VkPipelineStageFlagBits, указывающий на стадию конвейера.
  • queryPool - это пул запросов, который будет управлять временной меткой.
  • query - это запрос в пуле запросов, который будет содержать временную метку.

Описание

vkCmdWriteTimestamp фиксирует значение таймера, когда все предыдущие команды завершили выполнение до указанной стадии конвейера, и записывает значение временной метки в память. Когда значение временной метки записано, статус доступности запроса устанавливается как доступный.

Примечание

Если реализация не может обнаружить завершение и зафиксировать таймер на любой конкретной стадии конвейера, она может вместо этого сделать это на любой логически более поздней стадии.

vkCmdCopyQueryPoolResults может быть затем вызван для копирования значения временной метки из пула запросов в буферную память, с поведением упорядочения и синхронизации, эквивалентным тому, как работают другие запросы. Значения временных меток также могут быть получены из пула запросов с помощью vkGetQueryPoolResults. Как и в случае с другими запросами, запрос должен быть сброшен с помощью vkCmdResetQueryPool перед запросом записи значения временной метки в него.

Хотя vkCmdWriteTimestamp может вызываться внутри или вне экземпляра прохода рендеринга, vkCmdCopyQueryPoolResults должен вызываться только за пределами экземпляра прохода рендеринга.

Правильное использование
  • queryPool должен быть создан с queryType равным VK_QUERY_TYPE_TIMESTAMP
  • Запрос, идентифицированный queryPool и query должен быть недоступен
  • Семейство очередей пула команд должно поддерживать ненулевое значение timestampValidBits
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • pipelineStage должен быть допустимым значением VkPipelineStageFlagBits
  • queryPool должен быть допустимой дескриптором VkQueryPool
  • commandBuffer должен находиться в состоянии записи
  • VkCommandPool, из которого был выделен commandBuffer, должен поддерживать графические или вычислительные операции
  • И commandBuffer, и queryPool должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть внешне синхронизирован
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть внешне синхронизирован
Свойства команды
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

Основной
Вторичный

Оба

Графический
вычислительный

Передача

См. также

VkCommandBuffer, VkPipelineStageFlagBits, VkQueryPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCmdWriteTimestamp

vkCreateBuffer(3)

Имя

vkCreateBuffer - Создание нового объекта буфера

C-спецификация

Для создания буферов вызовите:

VkResult vkCreateBuffer(
    VkDevice                                    device,
    const VkBufferCreateInfo*                   pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkBuffer*                                   pBuffer);

Параметры

  • device — логическое устройство, создающее объект буфера.
  • pCreateInfo — указатель на экземпляр структуры VkBufferCreateInfo, содержащий параметры, влияющие на создание буфера.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pBuffer указывает на дескриптор VkBuffer, в котором возвращается результирующий объект буфера.

Описание

Допустимое использование
  • Если член flags структуры pCreateInfo включает VK_BUFFER_CREATE_SPARSE_BINDING_BIT, создание этого VkBuffer не должно приводить к тому, чтобы общая необходимая разреженная память для всех текущих допустимых разреженных ресурсов на устройстве превышала VkPhysicalDeviceLimits::sparseAddressSpaceSize
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkBufferCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pBuffer должен быть указателем на дескриптор VkBuffer
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkBuffer, VkBufferCreateInfo, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateBuffer

vkCreateBufferView(3)

Имя

vkCreateBufferView - Создание нового объекта представления буфера

C-спецификация

Для создания представления буфера вызовите:

VkResult vkCreateBufferView(
    VkDevice                                    device,
    const VkBufferViewCreateInfo*               pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkBufferView*                               pView);

Параметры

  • device — логическое устройство, создающее представление буфера.
  • pCreateInfo — указатель на экземпляр структуры VkBufferViewCreateInfo, содержащий параметры, используемые для создания буфера.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pView указывает на дескриптор VkBufferView, в котором возвращается результирующий объект представления буфера.

Описание

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkBufferViewCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pView должен быть указателем на дескриптор VkBufferView
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkBufferView, VkBufferViewCreateInfo, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateBufferView

vkCreateCommandPool(3)

Имя

vkCreateCommandPool - Создание нового объекта пула команд

C-спецификация

Для создания пула команд вызовите:

VkResult vkCreateCommandPool(
    VkDevice                                    device,
    const VkCommandPoolCreateInfo*              pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkCommandPool*                              pCommandPool);

Параметры

  • device — логическое устройство, создающее пул команд.
  • pCreateInfo содержит информацию, используемую для создания пула команд.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pCommandPool указывает на дескриптор VkCommandPool, в котором возвращается созданный пул.

Описание

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkCommandPoolCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pCommandPool должен быть указателем на дескриптор VkCommandPool
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkCommandPool, VkCommandPoolCreateInfo, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateCommandPool

vkCreateComputePipelines(3)

Имя

vkCreateComputePipelines - Создает новый объект конвейера вычислений

C-спецификация

Для создания конвейеров вычислений вызовите:

VkResult vkCreateComputePipelines(
    VkDevice                                    device,
    VkPipelineCache                             pipelineCache,
    uint32_t                                    createInfoCount,
    const VkComputePipelineCreateInfo*          pCreateInfos,
    const VkAllocationCallbacks*                pAllocator,
    VkPipeline*                                 pPipelines);

Параметры

  • device is the logical device that creates the compute pipelines.
  • pipelineCache is either VK_NULL_HANDLE, indicating that pipeline caching is disabled; or the handle of a valid pipeline cache object, in which case use of that cache is enabled for the duration of the command.
  • createInfoCount is the length of the pCreateInfos and pPipelines arrays.
  • pCreateInfos is an array of VkComputePipelineCreateInfo structures.
  • pAllocator controls host memory allocation as described in the Memory Allocation chapter.
  • pPipelines is a pointer to an array in which the resulting compute pipeline objects are returned.

Описание

Допустимое использование
  • If the flags member of any given element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the basePipelineIndex member of that same element is not -1, basePipelineIndex must be less than the index into pCreateInfos that corresponds to that element
  • If the flags member of any given element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline must have been created with the VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
Допустимое использование (неявное)
  • device must be a valid VkDevice handle
  • If pipelineCache is not VK_NULL_HANDLE, pipelineCache must be a valid VkPipelineCache handle
  • pCreateInfos must be a pointer to an array of createInfoCount valid VkComputePipelineCreateInfo structures
  • If pAllocator is not NULL, pAllocator must be a pointer to a valid VkAllocationCallbacks structure
  • pPipelines must be a pointer to an array of createInfoCount VkPipeline handles
  • createInfoCount must be greater than 0
  • If pipelineCache is a valid handle, it must have been created, allocated, or retrieved from device
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkComputePipelineCreateInfo, VkDevice, VkPipeline, VkPipelineCache

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateComputePipelines

vkCreateDescriptorPool(3)

Имя

vkCreateDescriptorPool - Создает объект пула дескрипторов

C Спецификация

To create a descriptor pool object, call:

VkResult vkCreateDescriptorPool(
    VkDevice                                    device,
    const VkDescriptorPoolCreateInfo*           pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkDescriptorPool*                           pDescriptorPool);

Параметры

  • device is the logical device that creates the descriptor pool.
  • pCreateInfo is a pointer to an instance of the VkDescriptorPoolCreateInfo structure specifying the state of the descriptor pool object.
  • pAllocator controls host memory allocation as described in the Memory Allocation chapter.
  • pDescriptorPool points to a VkDescriptorPool handle in which the resulting descriptor pool object is returned.

Описание

pAllocator controls host memory allocation as described in the Memory Allocation chapter.

The created descriptor pool is returned in pDescriptorPool.

Допустимое использование (неявное)
  • device must be a valid VkDevice handle
  • pCreateInfo must be a pointer to a valid VkDescriptorPoolCreateInfo structure
  • If pAllocator is not NULL, pAllocator must be a pointer to a valid VkAllocationCallbacks structure
  • pDescriptorPool must be a pointer to a VkDescriptorPool handle
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDescriptorPool, VkDescriptorPoolCreateInfo, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateDescriptorPool

vkCreateDescriptorSetLayout(3)

Имя

vkCreateDescriptorSetLayout - Создает новый макет набора дескрипторов

C Спецификация

To create descriptor set layout objects, call:

VkResult vkCreateDescriptorSetLayout(
    VkDevice                                    device,
    const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkDescriptorSetLayout*                      pSetLayout);

Параметры

  • device is the logical device that creates the descriptor set layout.
  • pCreateInfo is a pointer to an instance of the VkDescriptorSetLayoutCreateInfo structure specifying the state of the descriptor set layout object.
  • pAllocator controls host memory allocation as described in the Memory Allocation chapter.
  • pSetLayout points to a VkDescriptorSetLayout handle in which the resulting descriptor set layout object is returned.

Описание

Допустимое использование (неявное)
  • device must be a valid VkDevice handle
  • pCreateInfo must be a pointer to a valid VkDescriptorSetLayoutCreateInfo structure
  • If pAllocator is not NULL, pAllocator must be a pointer to a valid VkAllocationCallbacks structure
  • pSetLayout must be a pointer to a VkDescriptorSetLayout handle
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDescriptorSetLayout, VkDescriptorSetLayoutCreateInfo, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateDescriptorSetLayout

vkCreateDevice(3)

Имя

vkCreateDevice - Создает новый экземпляр устройства

C Спецификация

A logical device is created as a connection to a physical device. To create a logical device, call:

VkResult vkCreateDevice(
    VkPhysicalDevice                            physicalDevice,
    const VkDeviceCreateInfo*                   pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkDevice*                                   pDevice);

Параметры

  • physicalDevice must be one of the device handles returned from a call to vkEnumeratePhysicalDevices (see Physical Device Enumeration).
  • pCreateInfo is a pointer to a VkDeviceCreateInfo structure containing information about how to create the device.
  • pAllocator controls host memory allocation as described in the Memory Allocation chapter.
  • pDevice points to a handle in which the created VkDevice is returned.

Описание

vkCreateDevice verifies that extensions and features requested in the ppEnabledExtensionNames and pEnabledFeatures members of pCreateInfo, respectively, are supported by the implementation. If any requested extension is not supported, vkCreateDevice must return VK_ERROR_EXTENSION_NOT_PRESENT. If any requested feature is not supported, vkCreateDevice must return VK_ERROR_FEATURE_NOT_PRESENT. Support for extensions can be checked before creating a device by querying vkEnumerateDeviceExtensionProperties. Support for features can similarly be checked by querying vkGetPhysicalDeviceFeatures.

После проверки и включения расширений создается объект VkDevice и возвращается приложению. Если запрашиваемое расширение поддерживается только слоем, для успешного создания необходимо указать как слой, так и расширение в момент vkCreateInstance.

Из одного физического устройства можно создать несколько логических устройств. Создание логического устройства может завершиться неудачей из-за нехватки ресурсов, специфичных для устройства (в дополнение к другим ошибкам). В этом случае vkCreateDevice вернет VK_ERROR_TOO_MANY_OBJECTS.

Допустимое использование
  • Все необходимые расширения для каждого расширения в списке VkDeviceCreateInfo::ppEnabledExtensionNames также должны присутствовать в этом списке.
Допустимое использование (неявное)
  • physicalDevice должен быть допустимой дескриптором VkPhysicalDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkDeviceCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pDevice должен быть указателем на дескриптор VkDevice
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_INITIALIZATION_FAILED
  • VK_ERROR_EXTENSION_NOT_PRESENT
  • VK_ERROR_FEATURE_NOT_PRESENT
  • VK_ERROR_TOO_MANY_OBJECTS
  • VK_ERROR_DEVICE_LOST

См. также

VkAllocationCallbacks, VkDevice, VkDeviceCreateInfo, VkPhysicalDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateDevice

vkCreateEvent(3)

Имя

vkCreateEvent - Создание нового объекта события

Спецификация C

Для создания события вызовите:

VkResult vkCreateEvent(
    VkDevice                                    device,
    const VkEventCreateInfo*                    pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkEvent*                                    pEvent);

Параметры

  • device — логическое устройство, создающее событие.
  • pCreateInfo — указатель на экземпляр структуры VkEventCreateInfo, содержащий информацию о том, как должно быть создано событие.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pEvent указывает на дескриптор, в котором возвращается результирующий объект события.

Описание

При создании объект события находится в несигнализированном состоянии.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkEventCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pEvent должен быть указателем на дескриптор VkEvent
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkEvent, VkEventCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateEvent

vkCreateFence(3)

Имя

vkCreateFence - Создание нового объекта забора

Спецификация C

Для создания забора вызовите:

VkResult vkCreateFence(
    VkDevice                                    device,
    const VkFenceCreateInfo*                    pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkFence*                                    pFence);

Параметры

  • device — логическое устройство, создающее забор.
  • pCreateInfo — указатель на экземпляр структуры VkFenceCreateInfo, содержащий информацию о том, как должен быть создан забор.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pFence указывает на дескриптор, в котором возвращается результирующий объект забора.

Описание

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkFenceCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pFence должен быть указателем на дескриптор VkFence
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkFence, VkFenceCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateFence

vkCreateFramebuffer(3)

Имя

vkCreateFramebuffer - Создание нового объекта фреймбуфера

Спецификация C

Для создания фреймбуфера вызовите:

VkResult vkCreateFramebuffer(
    VkDevice                                    device,
    const VkFramebufferCreateInfo*              pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkFramebuffer*                              pFramebuffer);

Параметры

  • device — логическое устройство, создающее фреймбуфер.
  • pCreateInfo указывает на структуру VkFramebufferCreateInfo, которая описывает дополнительную информацию о создании фреймбуфера.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pFramebuffer указывает на дескриптор VkFramebuffer, в котором возвращается результирующий объект фреймбуфера.

Описание

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkFramebufferCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pFramebuffer должен быть указателем на дескриптор VkFramebuffer
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkFramebuffer, VkFramebufferCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateFramebuffer

vkCreateGraphicsPipelines(3)

Имя

vkCreateGraphicsPipelines - Создание графических конвейеров

Спецификация C

Для создания графических конвейеров вызовите:

VkResult vkCreateGraphicsPipelines(
    VkDevice                                    device,
    VkPipelineCache                             pipelineCache,
    uint32_t                                    createInfoCount,
    const VkGraphicsPipelineCreateInfo*         pCreateInfos,
    const VkAllocationCallbacks*                pAllocator,
    VkPipeline*                                 pPipelines);

Параметры

  • device — логическое устройство, создающее графические конвейеры.
  • pipelineCache — либо VK_NULL_HANDLE, указывающий на то, что кэширование конвейеров отключено; либо дескриптор допустимого объекта кэша конвейеров, в этом случае использование этого кэша включено на время выполнения команды.
  • createInfoCount — длина массивов pCreateInfos и pPipelines.
  • pCreateInfos — массив структур VkGraphicsPipelineCreateInfo.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pPipelines — указатель на массив, в котором возвращаются результирующие объекты графических конвейеров.

Описание

Структура VkGraphicsPipelineCreateInfo включает в себя массив структур информации о создании шейдера, содержащих все желаемые активные этапы шейдера, а также информацию о создании для определения всех соответствующих этапов с фиксированной функцией и макет конвейера.

Допустимое использование
  • Если член flags любого заданного элемента pCreateInfos содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, а член basePipelineIndex того же элемента не -1, basePipelineIndex должен быть меньше индекса в pCreateInfos, который соответствует этому элементу
  • Если член flags любого заданного элемента pCreateInfos содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, базовый конвейер должен быть создан с установленным флагом VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если pipelineCache не VK_NULL_HANDLE, pipelineCache должен быть допустимой дескриптором VkPipelineCache
  • pCreateInfos должен быть указателем на массив из createInfoCount допустимых структур VkGraphicsPipelineCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pPipelines должен быть указателем на массив createInfoCount дескрипторов VkPipeline
  • createInfoCount должен быть больше 0
  • Если pipelineCache является допустимым дескриптором, он должен быть создан, выделен или получен из device
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkGraphicsPipelineCreateInfo, VkPipeline, VkPipelineCache

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateGraphicsPipelines

vkCreateImage(3)

Имя

vkCreateImage - Создание нового объекта изображения

C Спецификация

Для создания изображений, вызовите:

VkResult vkCreateImage(
    VkDevice                                    device,
    const VkImageCreateInfo*                    pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkImage*                                    pImage);

Параметры

  • device - это логическое устройство, которое создает изображение.
  • pCreateInfo - указатель на экземпляр структуры VkImageCreateInfo, содержащий параметры, которые будут использоваться для создания изображения.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pImage указывает на дескриптор VkImage, в который возвращается результирующий объект изображения.

Описание

Допустимое использование
  • Если член flags pCreateInfo включает VK_IMAGE_CREATE_SPARSE_BINDING_BIT, создание этого VkImage не должно приводить к тому, что общая необходимая разреженная память для всех текущих допустимых разреженных ресурсов на устройстве превысит VkPhysicalDeviceLimits::sparseAddressSpaceSize
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkImageCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pImage должен быть указателем на дескриптор VkImage
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkImage, VkImageCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateImage

vkCreateImageView(3)

Имя

vkCreateImageView - Создание представления изображения из существующего изображения

C Спецификация

Для создания представления изображения, вызовите:

VkResult vkCreateImageView(
    VkDevice                                    device,
    const VkImageViewCreateInfo*                pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkImageView*                                pView);

Параметры

  • device - это логическое устройство, которое создает представление изображения.
  • pCreateInfo - указатель на экземпляр структуры VkImageViewCreateInfo, содержащий параметры, которые будут использоваться для создания представления изображения.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pView указывает на дескриптор VkImageView, в который возвращается результирующий объект представления изображения.

Описание

Некоторые параметры создания изображения наследуются представлением. Остальные параметры содержатся в pCreateInfo.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkImageViewCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pView должен быть указателем на дескриптор VkImageView
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkImageView, VkImageViewCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateImageView

vkCreateInstance(3)

Имя

vkCreateInstance - Создание нового экземпляра Vulkan

C Спецификация

Для создания объекта экземпляра, вызовите:

VkResult vkCreateInstance(
    const VkInstanceCreateInfo*                 pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkInstance*                                 pInstance);

Параметры

  • pCreateInfo указывает на экземпляр VkInstanceCreateInfo, управляющий созданием экземпляра.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pInstance указывает на дескриптор VkInstance, в который возвращается результирующий экземпляр.

Описание

vkCreateInstance проверяет, существуют ли запрошенные слои. Если нет, vkCreateInstance вернет VK_ERROR_LAYER_NOT_PRESENT. Далее vkCreateInstance проверяет, поддерживаются ли запрошенные расширения (например, в реализации или в любом включенном слое экземпляра), и если какое-либо запрошенное расширение не поддерживается, vkCreateInstance должен вернуть VK_ERROR_EXTENSION_NOT_PRESENT. После проверки и включения слоев и расширений экземпляра создается объект VkInstance и возвращается приложению. Если запрошенное расширение поддерживается только слоем, для успешного создания необходимо указать как слой, так и расширение во время vkCreateInstance.

Допустимое использование
  • Все необходимые расширения для каждого расширения в списке VkInstanceCreateInfo::ppEnabledExtensionNames также должны присутствовать в этом списке.
Допустимое использование (неявное)
  • pCreateInfo должен быть указателем на допустимую структуру VkInstanceCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pInstance должен быть указателем на дескриптор VkInstance
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_INITIALIZATION_FAILED
  • VK_ERROR_LAYER_NOT_PRESENT
  • VK_ERROR_EXTENSION_NOT_PRESENT
  • VK_ERROR_INCOMPATIBLE_DRIVER

См. также

VkAllocationCallbacks, VkInstance, VkInstanceCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateInstance

vkCreatePipelineCache(3)

Имя

vkCreatePipelineCache - Создает новый кэш конвейеров

C Спецификация

Для создания объектов кэша конвейеров вызовите:

VkResult vkCreatePipelineCache(
    VkDevice                                    device,
    const VkPipelineCacheCreateInfo*            pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkPipelineCache*                            pPipelineCache);

Параметры

  • device - это логическое устройство, создающее объект кэша конвейеров.
  • pCreateInfo - указатель на структуру VkPipelineCacheCreateInfo, содержащую начальные параметры для объекта кэша конвейеров.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pPipelineCache - указатель на дескриптор VkPipelineCache, в который возвращается результирующий объект кэша конвейеров.

Описание

Примечание

Приложения могут отслеживать и управлять общим размером памяти хоста объекта кэша конвейеров с помощью pAllocator. Приложения могут ограничивать объем данных, извлекаемых из объекта кэша конвейеров в vkGetPipelineCacheData. Реализации не должны внутренне ограничивать общее количество записей, добавляемых в объект кэша конвейеров, или общий объем используемой памяти хоста.

После создания кэш конвейеров может быть передан командам vkCreateGraphicsPipelines и vkCreateComputePipelines. Если кэш конвейеров, переданный в эти команды, не равен VK_NULL_HANDLE, реализация запросит его на предмет возможных возможностей повторного использования и обновит его новым содержимым. Использование объекта кэша конвейеров в этих командах синхронизируется внутренне, и один и тот же объект кэша конвейеров может использоваться в нескольких потоках одновременно.

Примечание

Реализации следует приложить все усилия, чтобы ограничить критические секции фактическим доступом к кэшу, который, как ожидается, будет значительно короче, чем длительность команд vkCreateGraphicsPipelines и vkCreateComputePipelines.

Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkPipelineCacheCreateInfo
  • Если pAllocator не равен NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pPipelineCache должен быть указателем на дескриптор VkPipelineCache
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkPipelineCache, VkPipelineCacheCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreatePipelineCache

vkCreatePipelineLayout(3)

Имя

vkCreatePipelineLayout - Создает новый объект компоновки конвейера

C Спецификация

Для создания компоновки конвейера вызовите:

VkResult vkCreatePipelineLayout(
    VkDevice                                    device,
    const VkPipelineLayoutCreateInfo*           pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkPipelineLayout*                           pPipelineLayout);

Параметры

  • device - это логическое устройство, создающее компоновку конвейера.
  • pCreateInfo - указатель на экземпляр структуры VkPipelineLayoutCreateInfo, указывающий состояние объекта компоновки конвейера.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pPipelineLayout указывает на дескриптор VkPipelineLayout, в который возвращается результирующий объект компоновки конвейера.

Описание

Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkPipelineLayoutCreateInfo
  • Если pAllocator не равен NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pPipelineLayout должен быть указателем на дескриптор VkPipelineLayout
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkPipelineLayout, VkPipelineLayoutCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreatePipelineLayout

vkCreateQueryPool(3)

Имя

vkCreateQueryPool - Создает новый объект пула запросов

C Спецификация

Для создания пула запросов вызовите:

VkResult vkCreateQueryPool(
    VkDevice                                    device,
    const VkQueryPoolCreateInfo*                pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkQueryPool*                                pQueryPool);

Параметры

  • device - это логическое устройство, создающее пул запросов.
  • pCreateInfo - указатель на экземпляр структуры VkQueryPoolCreateInfo, содержащий количество и тип запросов, которые будут управляться пулом.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pQueryPool - указатель на дескриптор VkQueryPool, в который возвращается результирующий объект пула запросов.

Описание

Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkQueryPoolCreateInfo
  • Если pAllocator не равен NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pQueryPool должен быть указателем на дескриптор VkQueryPool
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkQueryPool, VkQueryPoolCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateQueryPool

vkCreateRenderPass(3)

Имя

vkCreateRenderPass - Создает новый объект прохода рендеринга

C Спецификация

Для создания прохода рендеринга вызовите:

VkResult vkCreateRenderPass(
    VkDevice                                    device,
    const VkRenderPassCreateInfo*               pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkRenderPass*                               pRenderPass);

Параметры

  • device - это логическое устройство, создающее проход рендеринга.
  • pCreateInfo - указатель на экземпляр структуры VkRenderPassCreateInfo, которая описывает параметры прохода рендеринга.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pRenderPass указывает на дескриптор VkRenderPass, в который возвращается результирующий объект прохода рендеринга.

Описание

Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkRenderPassCreateInfo
  • Если pAllocator не равен NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pRenderPass должен быть указателем на дескриптор VkRenderPass
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkRenderPass, VkRenderPassCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateRenderPass

vkCreateSampler(3)

Имя

vkCreateSampler - Создание нового объекта семплера

C Спецификация

Для создания объекта семплера, вызовите:

VkResult vkCreateSampler(
    VkDevice                                    device,
    const VkSamplerCreateInfo*                  pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkSampler*                                  pSampler);

Параметры

  • device - это логическое устройство, создающее семплер.
  • pCreateInfo - указатель на экземпляр структуры VkSamplerCreateInfo, указывающий состояние объекта семплера.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pSampler указывает на дескриптор VkSampler, в который возвращается результирующий объект семплера.

Описание

Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkSamplerCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pSampler должен быть указателем на дескриптор VkSampler
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_TOO_MANY_OBJECTS

См. также

VkAllocationCallbacks, VkDevice, VkSampler, VkSamplerCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateSampler

vkCreateSemaphore(3)

Имя

vkCreateSemaphore - Создание нового объекта семафора очереди

C Спецификация

Для создания семафора, вызовите:

VkResult vkCreateSemaphore(
    VkDevice                                    device,
    const VkSemaphoreCreateInfo*                pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkSemaphore*                                pSemaphore);

Параметры

  • device - это логическое устройство, создающее семафор.
  • pCreateInfo - указатель на экземпляр структуры VkSemaphoreCreateInfo, которая содержит информацию о том, как должен быть создан семафор.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pSemaphore указывает на дескриптор, в который возвращается результирующий объект семафора.

Описание

После создания семафор находится в несигнализированном состоянии.

Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkSemaphoreCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pSemaphore должен быть указателем на дескриптор VkSemaphore
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkSemaphore, VkSemaphoreCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateSemaphore

vkCreateShaderModule(3)

Имя

vkCreateShaderModule - Создает новый объект модуля шейдера

C Спецификация

Для создания модуля шейдера, вызовите:

VkResult vkCreateShaderModule(
    VkDevice                                    device,
    const VkShaderModuleCreateInfo*             pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkShaderModule*                             pShaderModule);

Параметры

  • device - это логическое устройство, создающее модуль шейдера.
  • pCreateInfo параметр - указатель на экземпляр структуры VkShaderModuleCreateInfo.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.
  • pShaderModule указывает на дескриптор VkShaderModule, в который возвращается результирующий объект модуля шейдера.

Описание

После создания модуля шейдера, любые точки входа, которые он содержит, могут использоваться в этапах шейдера конвейера, как описано в Вычислительных конвейерах и Графических конвейерах.

Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pCreateInfo должен быть указателем на допустимую структуру VkShaderModuleCreateInfo
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • pShaderModule должен быть указателем на дескриптор VkShaderModule
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkAllocationCallbacks, VkDevice, VkShaderModule, VkShaderModuleCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkCreateShaderModule

vkDestroyBuffer(3)

Имя

vkDestroyBuffer - Уничтожение объекта буфера

C Спецификация

Для уничтожения буфера, вызовите:

void vkDestroyBuffer(
    VkDevice                                    device,
    VkBuffer                                    buffer,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - это логическое устройство, уничтожающее буфер.
  • buffer - буфер для уничтожения.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Допустимое использование
  • Все отправленные команды, которые ссылаются на buffer, либо напрямую, либо через VkBufferView, должны завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании buffer, совместимый набор обратных вызовов должен быть предоставлен здесь
  • Если ни один VkAllocationCallbacks не был предоставлен при создании buffer, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • Если buffer не VK_NULL_HANDLE, buffer должен быть допустимым дескриптором VkBuffer
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если buffer является допустимым дескриптором, он должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к buffer должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkBuffer, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyBuffer

vkDestroyBufferView(3)

Имя

vkDestroyBufferView - Уничтожение объекта представления буфера

C Спецификация

Для уничтожения представления буфера, вызовите:

void vkDestroyBufferView(
    VkDevice                                    device,
    VkBufferView                                bufferView,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - это логическое устройство, уничтожающее представление буфера.
  • bufferView - представление буфера для уничтожения.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Допустимое использование
  • Все отправленные команды, которые ссылаются на bufferView должны быть выполнены
  • Если VkAllocationCallbacks были предоставлены при создании bufferView, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если ни один VkAllocationCallbacks не был предоставлен при создании bufferView, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если bufferView не VK_NULL_HANDLE, bufferView должен быть допустимой дескриптором VkBufferView
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если bufferView является допустимой дескриптором, она должна быть создана, выделена или получена из device
Синхронизация узла
  • Доступ узла к bufferView должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkBufferView, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyBufferView

vkDestroyCommandPool(3)

Имя

vkDestroyCommandPool - Уничтожение объекта пула команд

Спецификация C

Для уничтожения пула команд вызовите:

void vkDestroyCommandPool(
    VkDevice                                    device,
    VkCommandPool                               commandPool,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее пул команд.
  • commandPool - дескриптор пула команд, который нужно уничтожить.
  • pAllocator управляет выделением памяти узла, как описано в главе Выделение памяти.

Описание

При уничтожении пула все буферы команд, выделенные из пула, освобождаются.

Любой основной буфер команд, выделенный из другого VkCommandPool, который находится в состоянии записи или выполнения и имеет вторичный буфер команд, выделенный из commandPool, записанный в него, становится недействительным.

Допустимое использование
  • Все объекты VkCommandBuffer, выделенные из commandPool, не должны находиться в ожидающем состоянии.
  • Если VkAllocationCallbacks были предоставлены при создании commandPool, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если ни один VkAllocationCallbacks не был предоставлен при создании commandPool, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если commandPool не VK_NULL_HANDLE, commandPool должен быть допустимой дескриптором VkCommandPool
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если commandPool является допустимой дескриптором, она должна быть создана, выделена или получена из device
Синхронизация узла
  • Доступ узла к commandPool должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkCommandPool, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyCommandPool

vkDestroyDescriptorPool(3)

Имя

vkDestroyDescriptorPool - Уничтожение объекта пула дескрипторов

Спецификация C

Для уничтожения пула дескрипторов вызовите:

void vkDestroyDescriptorPool(
    VkDevice                                    device,
    VkDescriptorPool                            descriptorPool,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее пул дескрипторов.
  • descriptorPool - пул дескрипторов, который нужно уничтожить.
  • pAllocator управляет выделением памяти узла, как описано в главе Выделение памяти.

Описание

Когда пул уничтожается, все наборы дескрипторов, выделенные из пула, неявно освобождаются и становятся недействительными. Наборы дескрипторов, выделенные из данного пула, не нужно освобождать перед уничтожением этого пула дескрипторов.

Допустимое использование
  • Все отправленные команды, которые ссылаются на descriptorPool (через любые выделенные наборы дескрипторов), должны быть выполнены
  • Если VkAllocationCallbacks были предоставлены при создании descriptorPool, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если ни один VkAllocationCallbacks не был предоставлен при создании descriptorPool, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если descriptorPool не VK_NULL_HANDLE, descriptorPool должен быть допустимой дескриптором VkDescriptorPool
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если descriptorPool является допустимой дескриптором, она должна быть создана, выделена или получена из device
Синхронизация узла
  • Доступ узла к descriptorPool должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDescriptorPool, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyDescriptorPool

vkDestroyDescriptorSetLayout(3)

Имя

vkDestroyDescriptorSetLayout - Уничтожение объекта компоновки набора дескрипторов

Спецификация C

Для уничтожения компоновки набора дескрипторов вызовите:

void vkDestroyDescriptorSetLayout(
    VkDevice                                    device,
    VkDescriptorSetLayout                       descriptorSetLayout,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее компоновку набора дескрипторов.
  • descriptorSetLayout - компоновка набора дескрипторов, которую нужно уничтожить.
  • pAllocator управляет выделением памяти узла, как описано в главе Выделение памяти.

Описание

Допустимое использование
  • Если VkAllocationCallbacks были предоставлены при создании descriptorSetLayout, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если ни один VkAllocationCallbacks не был предоставлен при создании descriptorSetLayout, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если descriptorSetLayout не VK_NULL_HANDLE, descriptorSetLayout должен быть допустимой дескриптором VkDescriptorSetLayout
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если descriptorSetLayout является допустимой дескриптором, она должна быть создана, выделена или получена из device
Синхронизация узла
  • Доступ узла к descriptorSetLayout должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDescriptorSetLayout, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyDescriptorSetLayout

vkDestroyDevice(3)

Имя

vkDestroyDevice - Уничтожение логического устройства

C Спецификация

Для уничтожения устройства, вызовите:

void vkDestroyDevice(
    VkDevice                                    device,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство для уничтожения.
  • pAllocator - управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Для обеспечения отсутствия активной работы на устройстве, vkDeviceWaitIdle может использоваться для блокировки уничтожения устройства. Перед уничтожением устройства, приложение отвечает за уничтожение/освобождение любых объектов Vulkan, которые были созданы с использованием этого устройства в качестве первого параметра соответствующей команды vkCreate* или vkAllocate*.

Примечание

Время жизни каждого из этих объектов привязан к времени жизни объекта VkDevice. Поэтому, чтобы избежать утечек ресурсов, крайне важно, чтобы приложение явно освободило все эти ресурсы перед вызовом vkDestroyDevice.

Правильное использование
  • Все дочерние объекты, созданные на device, должны быть уничтожены до уничтожения device
  • Если VkAllocationCallbacks были предоставлены при создании device, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании device не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Правильное использование (неявное)
  • Если device не NULL, device должен быть допустимой дескрипторной ссылкой VkDevice
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
Синхронизация хоста
  • Доступ хоста к device должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyDevice

vkDestroyEvent(3)

Имя

vkDestroyEvent - Уничтожение объекта события

C Спецификация

Для уничтожения события, вызовите:

void vkDestroyEvent(
    VkDevice                                    device,
    VkEvent                                     event,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее событие.
  • event - дескриптор события для уничтожения.
  • pAllocator - управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Правильное использование
  • Все отправленные команды, которые ссылаются на event, должны были завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании event, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании event не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Правильное использование (неявное)
  • device должен быть допустимой дескрипторной ссылкой VkDevice
  • Если event не VK_NULL_HANDLE, event должен быть допустимой дескрипторной ссылкой VkEvent
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если event является допустимой дескрипторной ссылкой, она должна быть создана, выделена или получена из device
Синхронизация хоста
  • Доступ хоста к event должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkEvent

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyEvent

vkDestroyFence(3)

Имя

vkDestroyFence - Уничтожение объекта забора

C Спецификация

Для уничтожения забора, вызовите:

void vkDestroyFence(
    VkDevice                                    device,
    VkFence                                     fence,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее забор.
  • fence - дескриптор забора для уничтожения.
  • pAllocator - управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Правильное использование
  • Все команды отправки в очередь, которые ссылаются на fence, должны были завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании fence, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании fence не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Правильное использование (неявное)
  • device должен быть допустимой дескрипторной ссылкой VkDevice
  • Если fence не VK_NULL_HANDLE, fence должен быть допустимой дескрипторной ссылкой VkFence
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если fence является допустимой дескрипторной ссылкой, она должна быть создана, выделена или получена из device
Синхронизация хоста
  • Доступ хоста к fence должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkFence

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyFence

vkDestroyFramebuffer(3)

Имя

vkDestroyFramebuffer - Уничтожение объекта фреймбуфера

C Спецификация

Для уничтожения фреймбуфера, вызовите:

void vkDestroyFramebuffer(
    VkDevice                                    device,
    VkFramebuffer                               framebuffer,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее фреймбуфер.
  • framebuffer - дескриптор фреймбуфера для уничтожения.
  • pAllocator - управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Правильное использование
  • Все отправленные команды, которые ссылаются на framebuffer, должны были завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании framebuffer, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании framebuffer не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Правильное использование (неявное)
  • device должен быть допустимой дескрипторной ссылкой VkDevice
  • Если framebuffer не VK_NULL_HANDLE, framebuffer должен быть допустимой дескрипторной ссылкой VkFramebuffer
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если framebuffer является допустимой дескрипторной ссылкой, она должна быть создана, выделена или получена из device
Синхронизация хоста
  • Доступ хоста к framebuffer должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkFramebuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyFramebuffer

vkDestroyImage(3)

Имя

vkDestroyImage - Уничтожение объекта изображения

Спецификация C

Для уничтожения изображения, вызовите:

void vkDestroyImage(
    VkDevice                                    device,
    VkImage                                     image,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее изображение.
  • image - изображение для уничтожения.
  • pAllocator - управляет выделением памяти хоста, как описано в главе Memory Allocation.

Описание

Допустимое использование
  • Все отправленные команды, ссылающиеся на image, либо напрямую, либо через VkImageView, должны были завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании image, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании image не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если image не равно VK_NULL_HANDLE, image должен быть допустимой дескриптором VkImage
  • Если pAllocator не равно NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если image является допустимым дескриптором, он должен был быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к image должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyImage

vkDestroyImageView(3)

Имя

vkDestroyImageView - Уничтожение объекта представления изображения

Спецификация C

Для уничтожения представления изображения, вызовите:

void vkDestroyImageView(
    VkDevice                                    device,
    VkImageView                                 imageView,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее представление изображения.
  • imageView - представление изображения для уничтожения.
  • pAllocator - управляет выделением памяти хоста, как описано в главе Memory Allocation.

Описание

Допустимое использование
  • Все отправленные команды, ссылающиеся на imageView, должны были завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании imageView, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании imageView не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если imageView не равно VK_NULL_HANDLE, imageView должен быть допустимой дескриптором VkImageView
  • Если pAllocator не равно NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если imageView является допустимым дескриптором, он должен был быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к imageView должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkImageView

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyImageView

vkDestroyInstance(3)

Имя

vkDestroyInstance - Уничтожение экземпляра Vulkan

Спецификация C

Для уничтожения экземпляра, вызовите:

void vkDestroyInstance(
    VkInstance                                  instance,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • instance - дескриптор экземпляра для уничтожения.
  • pAllocator - управляет выделением памяти хоста, как описано в главе Memory Allocation.

Описание

Допустимое использование
  • Все дочерние объекты, созданные с помощью instance, должны быть уничтожены до уничтожения instance
  • Если VkAllocationCallbacks были предоставлены при создании instance, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании instance не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • Если instance не равно NULL, instance должен быть допустимой дескриптором VkInstance
  • Если pAllocator не равно NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
Синхронизация хоста
  • Доступ хоста к instance должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkInstance

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyInstance

vkDestroyPipeline(3)

Имя

vkDestroyPipeline - Уничтожение объекта конвейера

Спецификация C

Для уничтожения графического или вычислительного конвейера, вызовите:

void vkDestroyPipeline(
    VkDevice                                    device,
    VkPipeline                                  pipeline,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее конвейер.
  • pipeline - дескриптор конвейера для уничтожения.
  • pAllocator - управляет выделением памяти хоста, как описано в главе Memory Allocation.

Описание

Допустимое использование
  • Все отправленные команды, ссылающиеся на pipeline, должны были завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании pipeline, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании pipeline не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если pipeline не равно VK_NULL_HANDLE, pipeline должен быть допустимой дескриптором VkPipeline
  • Если pAllocator не равно NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если pipeline является допустимым дескриптором, он должен был быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к pipeline должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkPipeline

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyPipeline

vkDestroyPipelineCache(3)

Имя

vkDestroyPipelineCache - Уничтожение объекта кэша конвейеров

Спецификация C

Для уничтожения кэша конвейеров, вызовите:

void vkDestroyPipelineCache(
    VkDevice                                    device,
    VkPipelineCache                             pipelineCache,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее объект кэша конвейеров.
  • pipelineCache - дескриптор кэша конвейеров для уничтожения.
  • pAllocator - управляет выделением памяти хоста, как описано в главе Memory Allocation.

Описание

Допустимое использование
  • Если VkAllocationCallbacks были предоставлены при создании pipelineCache, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании pipelineCache не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если pipelineCache не является VK_NULL_HANDLE, pipelineCache должен быть допустимой дескриптором VkPipelineCache
  • Если pAllocator не является NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если pipelineCache является допустимой дескриптором, она должна быть создана, выделена или получена из device
Синхронизация хоста
  • Доступ хоста к pipelineCache должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkPipelineCache

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyPipelineCache

vkDestroyPipelineLayout(3)

Имя

vkDestroyPipelineLayout - Уничтожение объекта макета конвейера

Спецификация C

Чтобы уничтожить макет конвейера, вызовите:

void vkDestroyPipelineLayout(
    VkDevice                                    device,
    VkPipelineLayout                            pipelineLayout,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее макет конвейера.
  • pipelineLayout - макет конвейера, который нужно уничтожить.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Допустимое использование
  • Если VkAllocationCallbacks были предоставлены при создании pipelineLayout, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании pipelineLayout не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если pipelineLayout не является VK_NULL_HANDLE, pipelineLayout должен быть допустимой дескриптором VkPipelineLayout
  • Если pAllocator не является NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если pipelineLayout является допустимой дескриптором, она должна быть создана, выделена или получена из device
Синхронизация хоста
  • Доступ хоста к pipelineLayout должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkPipelineLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyPipelineLayout

vkDestroyQueryPool(3)

Имя

vkDestroyQueryPool - Уничтожение объекта пула запросов

Спецификация C

Чтобы уничтожить пул запросов, вызовите:

void vkDestroyQueryPool(
    VkDevice                                    device,
    VkQueryPool                                 queryPool,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее пул запросов.
  • queryPool - пул запросов, который нужно уничтожить.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Допустимое использование
  • Все отправленные команды, которые ссылаются на queryPool, должны завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании queryPool, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании queryPool не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если queryPool не является VK_NULL_HANDLE, queryPool должен быть допустимой дескриптором VkQueryPool
  • Если pAllocator не является NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если queryPool является допустимой дескриптором, она должна быть создана, выделена или получена из device
Синхронизация хоста
  • Доступ хоста к queryPool должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkQueryPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyQueryPool

vkDestroyRenderPass(3)

Имя

vkDestroyRenderPass - Уничтожение объекта прохода отрисовки

Спецификация C

Чтобы уничтожить проход отрисовки, вызовите:

void vkDestroyRenderPass(
    VkDevice                                    device,
    VkRenderPass                                renderPass,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее проход отрисовки.
  • renderPass - дескриптор прохода отрисовки, который нужно уничтожить.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Допустимое использование
  • Все отправленные команды, которые ссылаются на renderPass, должны завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании renderPass, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании renderPass не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если renderPass не является VK_NULL_HANDLE, renderPass должен быть допустимой дескриптором VkRenderPass
  • Если pAllocator не является NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если renderPass является допустимой дескриптором, она должна быть создана, выделена или получена из device
Синхронизация хоста
  • Доступ хоста к renderPass должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkRenderPass

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyRenderPass

vkDestroySampler(3)

Имя

vkDestroySampler - Уничтожение объекта сэмплера

Спецификация C

Чтобы уничтожить сэмплер, вызовите:

void vkDestroySampler(
    VkDevice                                    device,
    VkSampler                                   sampler,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - логическое устройство, уничтожающее сэмплер.
  • sampler - сэмплер, который нужно уничтожить.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Допустимое использование
  • Все отправленные команды, которые ссылаются на sampler, должны завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании sampler, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании sampler не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если sampler не VK_NULL_HANDLE, sampler должен быть допустимой дескриптором VkSampler
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если sampler является допустимой дескриптором, он должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к sampler должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkSampler

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroySampler

vkDestroySemaphore(3)

Имя

vkDestroySemaphore - Уничтожение объекта семафора

Спецификация C

Для уничтожения семафора вызовите:

void vkDestroySemaphore(
    VkDevice                                    device,
    VkSemaphore                                 semaphore,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - это логическое устройство, которое уничтожает семафор.
  • semaphore - это дескриптор семафора, который необходимо уничтожить.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Допустимое использование
  • Все отправленные пакеты, которые ссылаются на semaphore, должны завершить выполнение
  • Если VkAllocationCallbacks были предоставлены при создании semaphore, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании semaphore не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если semaphore не VK_NULL_HANDLE, semaphore должен быть допустимой дескриптором VkSemaphore
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если semaphore является допустимой дескриптором, он должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к semaphore должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkSemaphore

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroySemaphore

vkDestroyShaderModule(3)

Имя

vkDestroyShaderModule - Уничтожение модуля шейдера

Спецификация C

Для уничтожения модуля шейдера вызовите:

void vkDestroyShaderModule(
    VkDevice                                    device,
    VkShaderModule                              shaderModule,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - это логическое устройство, которое уничтожает модуль шейдера.
  • shaderModule - это дескриптор модуля шейдера, который необходимо уничтожить.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Модуль шейдера может быть уничтожен, пока конвейеры, созданные с использованием его шейдеров, все еще используются.

Допустимое использование
  • Если VkAllocationCallbacks были предоставлены при создании shaderModule, здесь должен быть предоставлен совместимый набор обратных вызовов
  • Если при создании shaderModule не было предоставлено VkAllocationCallbacks, pAllocator должен быть NULL
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если shaderModule не VK_NULL_HANDLE, shaderModule должен быть допустимой дескриптором VkShaderModule
  • Если pAllocator не NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если shaderModule является допустимой дескриптором, он должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к shaderModule должен быть синхронизирован внешним образом

См. также

VkAllocationCallbacks, VkDevice, VkShaderModule

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDestroyShaderModule

vkDeviceWaitIdle(3)

Имя

vkDeviceWaitIdle - Ожидание простоя устройства

Спецификация C

Чтобы дождаться на хосте завершения незавершенных операций очереди для всех очередей на данном логическом устройстве, вызовите:

VkResult vkDeviceWaitIdle(
    VkDevice                                    device);

Параметры

  • device - это логическое устройство, которое должно быть в состоянии простоя.

Описание

vkDeviceWaitIdle эквивалентно вызову vkQueueWaitIdle для всех очередей, принадлежащих device.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
Синхронизация хоста
  • Доступ хоста ко всем объектам VkQueue, созданным из device, должен быть синхронизирован внешним образом
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_DEVICE_LOST

См. также

VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkDeviceWaitIdle

vkEndCommandBuffer(3)

Имя

vkEndCommandBuffer - Завершение записи буфера команд

Спецификация C

Для завершения записи буфера команд вызовите:

VkResult vkEndCommandBuffer(
    VkCommandBuffer                             commandBuffer);

Параметры

  • commandBuffer - это буфер команд, запись которого необходимо завершить.

Описание

Если во время записи произошла ошибка, приложение получит уведомление в виде неудачного кода возврата, возвращаемого vkEndCommandBuffer. Если приложение хочет использовать буфер команд дальше, буфер команд должен быть сброшен. Буфер команд должен находиться в состоянии записи, и он переводится в исполнимое состояние.

Допустимое использование
  • commandBuffer должен находиться в состоянии записи.
  • Если commandBuffer является основным буфером команд, не должно быть активного экземпляра прохода отрисовки
  • Все запросы, сделанные активными во время записи commandBuffer, должны быть сделаны неактивными
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
  • Доступ хоста к VkCommandPool, из которого был выделен commandBuffer, должен быть синхронизирован внешним образом
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkEndCommandBuffer

vkEnumerateDeviceExtensionProperties(3)

Имя

vkEnumerateDeviceExtensionProperties - Возвращает свойства доступных расширений физического устройства

C Спецификация

Для запроса расширений, доступных для данного физического устройства, вызовите:

VkResult vkEnumerateDeviceExtensionProperties(
    VkPhysicalDevice                            physicalDevice,
    const char*                                 pLayerName,
    uint32_t*                                   pPropertyCount,
    VkExtensionProperties*                      pProperties);

Параметры

  • physicalDevice - это физическое устройство, которое будет запрошено.
  • pLayerName - это либо NULL или указатель на завершающуюся нулём строку UTF-8, которая указывает имя слоя, из которого нужно получить расширения.
  • pPropertyCount - это указатель на целое число, связанное с количеством доступных или запрашиваемых свойств расширения, и обрабатывается так же, как параметр vkEnumerateInstanceExtensionProperties::pPropertyCount.
  • pProperties - это либо NULL или указатель на массив структур VkExtensionProperties.

Описание

Когда параметр pLayerName равен NULL, возвращаются только расширения, предоставленные реализацией Vulkan или неявно включёнными слоями. Когда pLayerName является именем слоя, возвращаются расширения устройства, предоставленные этим слоем.

Правильное использование (неявное)
  • physicalDevice должен быть допустимой дескриптором VkPhysicalDevice
  • Если pLayerName не NULL, pLayerName должен быть строкой UTF-8, завершающейся нулём
  • pPropertyCount должен быть указателем на значение uint32_t
  • Если значение, на которое ссылается pPropertyCount, не 0, и pProperties не NULL, pProperties должен быть указателем на массив структур pPropertyCount VkExtensionProperties
Коды возврата
Успех
  • VK_SUCCESS
  • VK_INCOMPLETE
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_LAYER_NOT_PRESENT

См. также

VkExtensionProperties, VkPhysicalDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkEnumerateDeviceExtensionProperties

vkEnumerateDeviceLayerProperties(3)

Имя

vkEnumerateDeviceLayerProperties - Возвращает свойства доступных слоёв физического устройства

C Спецификация

Для перечисления слоёв устройства вызовите:

VkResult vkEnumerateDeviceLayerProperties(
    VkPhysicalDevice                            physicalDevice,
    uint32_t*                                   pPropertyCount,
    VkLayerProperties*                          pProperties);

Параметры

  • pPropertyCount - это указатель на целое число, связанное с количеством доступных или запрашиваемых свойств слоя.
  • pProperties - это либо NULL или указатель на массив структур VkLayerProperties.

Описание

Если pProperties равно NULL, то количество доступных свойств слоя возвращается в pPropertyCount. В противном случае, pPropertyCount должен указывать на переменную, установленную пользователем на количество элементов в массиве pProperties, а по возвращении переменная перезаписывается количеством структур, фактически записанных в pProperties. Если pPropertyCount меньше, чем количество доступных свойств слоя, будет записано не более pPropertyCount структур. Если pPropertyCount меньше, чем количество доступных слоёв, будет возвращено VK_INCOMPLETE вместо VK_SUCCESS, чтобы указать, что не все доступные свойства слоя были возвращены.

Список слоёв, перечисленных vkEnumerateDeviceLayerProperties, должен быть точно такой же последовательностью слоёв, включённых для экземпляра. Элементы VkLayerProperties для каждого перечисленного слоя должны быть такими же, как свойства, когда слой был перечислен vkEnumerateInstanceLayerProperties.

Правильное использование (неявное)
  • physicalDevice должен быть допустимой дескриптором VkPhysicalDevice
  • pPropertyCount должен быть указателем на значение uint32_t
  • Если значение, на которое ссылается pPropertyCount, не 0, и pProperties не NULL, pProperties должен быть указателем на массив структур pPropertyCount VkLayerProperties
Коды возврата
Успех
  • VK_SUCCESS
  • VK_INCOMPLETE
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkLayerProperties, VkPhysicalDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkEnumerateDeviceLayerProperties

vkEnumerateInstanceExtensionProperties(3)

Имя

vkEnumerateInstanceExtensionProperties - Возвращает до запрошенного количества глобальных свойств расширения

C Спецификация

Для запроса доступных расширений экземпляра вызовите:

VkResult vkEnumerateInstanceExtensionProperties(
    const char*                                 pLayerName,
    uint32_t*                                   pPropertyCount,
    VkExtensionProperties*                      pProperties);

Параметры

  • pLayerName - это либо NULL или указатель на завершающуюся нулём строку UTF-8, которая указывает имя слоя, из которого нужно получить расширения.
  • pPropertyCount - это указатель на целое число, связанное с количеством доступных или запрашиваемых свойств расширения, как описано ниже.
  • pProperties - это либо NULL или указатель на массив структур VkExtensionProperties.

Описание

Когда параметр pLayerName равен NULL, возвращаются только расширения, предоставленные реализацией Vulkan или неявно включёнными слоями. Когда pLayerName является именем слоя, возвращаются расширения экземпляра, предоставленные этим слоем.

Если pProperties равно NULL, то количество доступных свойств расширения возвращается в pPropertyCount. В противном случае, pPropertyCount должен указывать на переменную, установленную пользователем на количество элементов в массиве pProperties, а по возвращении переменная перезаписывается количеством структур, фактически записанных в pProperties. Если pPropertyCount меньше, чем количество доступных свойств расширения, будет записано не более pPropertyCount структур. Если pPropertyCount меньше, чем количество доступных расширений, будет возвращено VK_INCOMPLETE вместо VK_SUCCESS, чтобы указать, что не все доступные свойства были возвращены.

Поскольку список доступных слоёв может изменяться внешне между вызовами vkEnumerateInstanceExtensionProperties, два вызова могут возвращать разные результаты, если pLayerName доступен в одном вызове, но не в другом. Расширения, поддерживаемые слоем, также могут изменяться между двумя вызовами, например, если реализация слоя заменяется другой версией между этими вызовами.

Правильное использование (неявное)
  • Если pLayerName не NULL, pLayerName должен быть строкой UTF-8, завершающейся нулём
  • pPropertyCount должен быть указателем на значение uint32_t
  • Если значение, на которое ссылается pPropertyCount, не 0, и pProperties не NULL, pProperties должен быть указателем на массив структур pPropertyCount VkExtensionProperties
Коды возврата
Успех
  • VK_SUCCESS
  • VK_INCOMPLETE
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_LAYER_NOT_PRESENT

См. также

VkExtensionProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkEnumerateInstanceExtensionProperties

vkEnumerateInstanceLayerProperties(3)

Имя

vkEnumerateInstanceLayerProperties - Возвращает до запрошенного количества глобальных свойств слоя

C Спецификация

Для запроса доступных слоёв вызовите:

VkResult vkEnumerateInstanceLayerProperties(
    uint32_t*                                   pPropertyCount,
    VkLayerProperties*                          pProperties);

Параметры

  • pPropertyCount - это указатель на целое число, связанное с количеством доступных или запрашиваемых свойств слоя, как описано ниже.
  • pProperties - это либо NULL или указатель на массив структур VkLayerProperties.

Описание

Если pProperties равно NULL, то количество доступных свойств слоя возвращается в pPropertyCount. В противном случае, pPropertyCount должен указывать на переменную, установленную пользователем на число элементов в массиве pProperties, и по возвращении переменная перезаписывается количеством структур, фактически записанных в pProperties. Если pPropertyCount меньше, чем количество доступных свойств слоя, будет записано не более pPropertyCount структур. Если pPropertyCount меньше, чем количество доступных слоев, будет возвращено VK_INCOMPLETE вместо VK_SUCCESS, чтобы указать, что не все доступные свойства слоя были возвращены.

Список доступных слоев может изменяться в любое время из-за действий вне реализации Vulkan, поэтому два вызова vkEnumerateInstanceLayerProperties с одинаковыми параметрами могут возвращать разные результаты или получать разные значения pPropertyCount или содержимое pProperties. После создания экземпляра включенные для этого экземпляра слои будут оставаться включенными и действительными в течение всего срока существования этого экземпляра, даже если некоторые из них станут недоступны для будущих экземпляров.

Допустимое использование (неявное)
  • pPropertyCount должен быть указателем на значение uint32_t
  • Если значение, на которое ссылается pPropertyCount, не равно 0, и pProperties не равно NULL, pProperties должен быть указателем на массив структур pPropertyCount VkLayerProperties
Коды возврата
Успех
  • VK_SUCCESS
  • VK_INCOMPLETE
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkLayerProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkEnumerateInstanceLayerProperties

vkEnumeratePhysicalDevices(3)

Название

vkEnumeratePhysicalDevices - Перечисление физических устройств, доступных для экземпляра Vulkan

C-спецификация

Для получения списка объектов физических устройств, представляющих физические устройства, установленные в системе, вызовите:

VkResult vkEnumeratePhysicalDevices(
    VkInstance                                  instance,
    uint32_t*                                   pPhysicalDeviceCount,
    VkPhysicalDevice*                           pPhysicalDevices);

Параметры

  • instance - это дескриптор экземпляра Vulkan, ранее созданного с помощью vkCreateInstance.
  • pPhysicalDeviceCount - это указатель на целое число, связанное с количеством доступных или запрошенных физических устройств, как описано ниже.
  • pPhysicalDevices - это либо NULL, либо указатель на массив дескрипторов VkPhysicalDevice.

Описание

Если pPhysicalDevices равно NULL, то количество доступных физических устройств возвращается в pPhysicalDeviceCount. В противном случае, pPhysicalDeviceCount должен указывать на переменную, установленную пользователем на число элементов в массиве pPhysicalDevices, и по возвращении переменная перезаписывается количеством дескрипторов, фактически записанных в pPhysicalDevices. Если pPhysicalDeviceCount меньше, чем количество доступных физических устройств, будет записано не более pPhysicalDeviceCount структур. Если pPhysicalDeviceCount меньше, чем количество доступных физических устройств, будет возвращено VK_INCOMPLETE вместо VK_SUCCESS, чтобы указать, что не все доступные физические устройства были возвращены.

Допустимое использование (неявное)
  • instance должен быть допустимым дескриптором VkInstance
  • pPhysicalDeviceCount должен быть указателем на значение uint32_t
  • Если значение, на которое ссылается pPhysicalDeviceCount, не равно 0, и pPhysicalDevices не равно NULL, pPhysicalDevices должен быть указателем на массив дескрипторов pPhysicalDeviceCount VkPhysicalDevice
Коды возврата
Успех
  • VK_SUCCESS
  • VK_INCOMPLETE
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_INITIALIZATION_FAILED

См. также

VkInstance, VkPhysicalDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkEnumeratePhysicalDevices

vkFlushMappedMemoryRanges(3)

Название

vkFlushMappedMemoryRanges - Сброс отображаемых диапазонов памяти

C-спецификация

Чтобы сбросить диапазоны некогерентной памяти из кэшей хоста, вызовите:

VkResult vkFlushMappedMemoryRanges(
    VkDevice                                    device,
    uint32_t                                    memoryRangeCount,
    const VkMappedMemoryRange*                  pMemoryRanges);

Параметры

  • device - это логическое устройство, которому принадлежат диапазоны памяти.
  • memoryRangeCount - это длина массива pMemoryRanges.
  • pMemoryRanges - это указатель на массив структур VkMappedMemoryRange, описывающих диапазоны памяти для сброса.

Описание

vkFlushMappedMemoryRanges гарантирует, что записи хоста в диапазоны памяти, описанные pMemoryRanges, могут быть предоставлены для доступа к устройству, с помощью операций доступности операций доступности из типа доступа VK_ACCESS_HOST_WRITE_BIT типа доступа.

Отмена отображения некогерентной памяти не приводит к неявной очистке отображаемой памяти, и записи хоста, которые не были очищены, могут никогда не стать видимыми для устройства. Однако реализации должны гарантировать, что записи, которые не были очищены, не станут видимыми для другой памяти.

Примечание

Вышеуказанная гарантия позволяет избежать потенциального повреждения памяти в сценариях, когда записи хоста в отображаемый объект памяти не были очищены до отмены отображения (или освобождения) памяти, а диапазон виртуальных адресов впоследствии повторно используется для другого отображения (или выделения памяти).

Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • pMemoryRanges должен быть указателем на массив memoryRangeCount допустимых структур VkMappedMemoryRange
  • memoryRangeCount должен быть больше 0
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDevice, VkMappedMemoryRange

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkFlushMappedMemoryRanges

vkFreeCommandBuffers(3)

Название

vkFreeCommandBuffers - Освобождение буферов команд

C-спецификация

Для освобождения буферов команд вызовите:

void vkFreeCommandBuffers(
    VkDevice                                    device,
    VkCommandPool                               commandPool,
    uint32_t                                    commandBufferCount,
    const VkCommandBuffer*                      pCommandBuffers);

Параметры

  • device - это логическое устройство, которому принадлежит пул команд.
  • commandPool - это пул команд, из которого были выделены буферы команд.
  • commandBufferCount - это длина массива pCommandBuffers.
  • pCommandBuffers - это массив дескрипторов буферов команд для освобождения.

Описание

Любой основной буфер команд, находящийся в состоянии записи или выполнения и имеющий любой элемент pCommandBuffers, записанный в него, становится недействительным.

Допустимое использование
  • Все элементы pCommandBuffers не должны находиться в ожидающем состоянии
  • pCommandBuffers должен быть указателем на массив дескрипторов commandBufferCount VkCommandBuffer, каждый элемент которого должен быть либо допустимым дескриптором, либо NULL
Допустимое использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • commandPool должен быть допустимым дескриптором VkCommandPool
  • commandBufferCount должен быть больше 0
  • commandPool должен быть создан, выделен или получен из device
  • Каждый элемент pCommandBuffers, являющийся допустимым дескриптором, должен быть создан, выделен или получен из commandPool
END_OF_DOCUMENT_MARKER
Синхронизация хоста
  • Доступ хоста к commandPool должен быть внешне синхронизирован
  • Доступ хоста к каждому элементу pCommandBuffers должен быть внешне синхронизирован

См. также

VkCommandBuffer, VkCommandPool, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkFreeCommandBuffers

vkFreeDescriptorSets(3)

Имя

vkFreeDescriptorSets - Освобождение одного или нескольких наборов дескрипторов

Спецификация C

Для освобождения выделенных наборов дескрипторов вызовите:

VkResult vkFreeDescriptorSets(
    VkDevice                                    device,
    VkDescriptorPool                            descriptorPool,
    uint32_t                                    descriptorSetCount,
    const VkDescriptorSet*                      pDescriptorSets);

Параметры

  • device - это логическое устройство, которому принадлежит пул дескрипторов.
  • descriptorPool - это пул дескрипторов, из которого были выделены наборы дескрипторов.
  • descriptorSetCount - это число элементов в массиве pDescriptorSets.
  • pDescriptorSets - это массив дескрипторов объектов VkDescriptorSet.

Описание

После успешного вызова vkFreeDescriptorSets, все наборы дескрипторов в pDescriptorSets становятся недействительными.

Правильное использование
  • Все отправленные команды, которые ссылаются на любой элемент pDescriptorSets, должны быть выполнены
  • pDescriptorSets должен быть указателем на массив descriptorSetCount VkDescriptorSet дескрипторов, каждый элемент которого должен быть либо допустимым дескриптором, либо VK_NULL_HANDLE
  • Каждый допустимый дескриптор в pDescriptorSets должен быть выделен из descriptorPool
  • descriptorPool должен быть создан с флагом VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
Правильное использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • descriptorPool должен быть допустимым дескриптором VkDescriptorPool
  • descriptorSetCount должен быть больше 0
  • descriptorPool должен быть создан, выделен или получен из device
  • Каждый элемент pDescriptorSets, являющийся допустимым дескриптором, должен быть создан, выделен или получен из descriptorPool
Синхронизация хоста
  • Доступ хоста к descriptorPool должен быть внешне синхронизирован
  • Доступ хоста к каждому элементу pDescriptorSets должен быть внешне синхронизирован
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDescriptorPool, VkDescriptorSet, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkFreeDescriptorSets

vkFreeMemory(3)

Имя

vkFreeMemory - Освобождение памяти GPU

Спецификация C

Для освобождения объекта памяти вызовите:

void vkFreeMemory(
    VkDevice                                    device,
    VkDeviceMemory                              memory,
    const VkAllocationCallbacks*                pAllocator);

Параметры

  • device - это логическое устройство, которому принадлежит память.
  • memory - это объект VkDeviceMemory, который будет освобожден.
  • pAllocator управляет выделением памяти хоста, как описано в главе Выделение памяти.

Описание

Перед освобождением объекта памяти приложение должно убедиться, что объект памяти больше не используется устройством — например, буферами команд, помещенными в очередь на выполнение. Память может оставаться связанной с изображениями или буферами в момент освобождения объекта памяти, но любое дальнейшее использование их (на хосте или устройстве) для чего-либо, кроме уничтожения этих объектов, приведет к неопределенному поведению. Если все еще существуют какие-либо связанные изображения или буферы, память может не быть немедленно освобождена реализацией, но должна быть освобождена к тому времени, когда все связанные изображения и буферы будут уничтожены. После освобождения памяти она возвращается в кучу, из которой она была выделена.

Как объекты памяти связываются с изображениями и буферами, подробно описано в разделе Связывание памяти ресурсов.

Если объект памяти отображен в момент его освобождения, он неявно отключается от отображения.

Примечание

Как описано ниже, записи хоста не очищаются неявно, когда объект памяти отключается от отображения, но реализация должна гарантировать, что записи, которые не были очищены, не повлияют на другую память.

Правильное использование
  • Все отправленные команды, которые ссылаются на memory (через изображения или буферы), должны быть выполнены
Правильное использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • Если memory не равен VK_NULL_HANDLE, memory должен быть допустимым дескриптором VkDeviceMemory
  • Если pAllocator не равен NULL, pAllocator должен быть указателем на допустимую структуру VkAllocationCallbacks
  • Если memory является допустимым дескриптором, он должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к memory должен быть внешне синхронизирован

См. также

VkAllocationCallbacks, VkDevice, VkDeviceMemory

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkFreeMemory

vkGetBufferMemoryRequirements(3)

Имя

vkGetBufferMemoryRequirements - Возвращает требования к памяти для указанного объекта Vulkan

Спецификация C

Для определения требований к памяти для буферного ресурса вызовите:

void vkGetBufferMemoryRequirements(
    VkDevice                                    device,
    VkBuffer                                    buffer,
    VkMemoryRequirements*                       pMemoryRequirements);

Параметры

  • device - это логическое устройство, которому принадлежит буфер.
  • buffer - это буфер для запроса.
  • pMemoryRequirements указывает на экземпляр структуры VkMemoryRequirements, в котором возвращаются требования к памяти объекта буфера.

Описание

Правильное использование (неявное)
  • device должен быть допустимым дескриптором VkDevice
  • buffer должен быть допустимым дескриптором VkBuffer
  • pMemoryRequirements должен быть указателем на структуру VkMemoryRequirements
  • buffer должен быть создан, выделен или получен из device

См. также

VkBuffer, VkDevice, VkMemoryRequirements

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetBufferMemoryRequirements

vkGetDeviceMemoryCommitment(3)

Имя

vkGetDeviceMemoryCommitment - Запрос текущего объёма выделенной памяти для VkDeviceMemory

Спецификация C

Для определения объёма лениво выделенной памяти, которая в настоящее время выделена для объекта памяти, вызовите:

void vkGetDeviceMemoryCommitment(
    VkDevice                                    device,
    VkDeviceMemory                              memory,
    VkDeviceSize*                               pCommittedMemoryInBytes);

Параметры

  • device - это логическое устройство, которому принадлежит память.
  • memory - это запрашиваемый объект памяти.
  • pCommittedMemoryInBytes - это указатель на значение VkDeviceSize, в котором возвращается количество байтов, выделенных в настоящее время, при успехе.

Описание

Реализация может обновлять выделение в любое время, и значение, возвращаемое этим запросом, может быть устаревшим.

Реализация гарантирует выделение любой выделенной памяти из heapIndex, указанного типом памяти, с которым был создан объект памяти.

Правильное использование
  • memory должен быть создан с типом памяти, который сообщает VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • memory должен быть допустимой дескриптором VkDeviceMemory
  • pCommittedMemoryInBytes должен быть указателем на значение VkDeviceSize
  • memory должен быть создан, выделен или получен из device

См. также

VkDevice, VkDeviceMemory, VkDeviceSize

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetDeviceMemoryCommitment

vkGetDeviceProcAddr(3)

Имя

vkGetDeviceProcAddr - Возвращает указатель на функцию для команды

C-спецификация

Для поддержки систем с несколькими реализациями Vulkan, включающими неоднородные наборы аппаратного и программного обеспечения, указатели на функции, возвращаемые vkGetInstanceProcAddr, могут указывать на код диспетчеризации, который вызывает другую реальную реализацию для разных объектов VkDevice (и объектов, созданных из них). Накладные расходы этой внутренней диспетчеризации могут быть избежаны путем получения указателей на функции, зависящих от устройства, для любых команд, которые используют устройство или дочерний объект устройства в качестве отправляемого объекта. Такие указатели на функции могут быть получены с помощью команды:

PFN_vkVoidFunction vkGetDeviceProcAddr(
    VkDevice                                    device,
    const char*                                 pName);

Параметры

В таблице ниже определены различные варианты использования для vkGetDeviceProcAddr и ожидаемое возвращаемое значение для каждого случая.

Описание

Возвращаемый указатель на функцию имеет тип PFN_vkVoidFunction и должен быть приведен к типу запрашиваемой команды.

Таблица 1. Поведение vkGetDeviceProcAddr
device pName возвращаемое значение

NULL

*

неопределено

недопустимое устройство

*

неопределено

устройство

NULL

неопределено

устройство

базовая команда Vulkan

fp1

устройство

включенные команды расширения

fp1

устройство

* (любая pName не охваченная выше)

NULL

1
Возвращаемый указатель на функцию должен вызываться только с отправляемым объектом (первый параметр), который является device или дочерним элементом device. Например, VkDevice, VkQueue или VkCommandBuffer.
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pName должен быть строкой UTF-8, завершающейся нулем

См. также

PFN_vkVoidFunction, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetDeviceProcAddr

vkGetDeviceQueue(3)

Имя

vkGetDeviceQueue - Получить дескриптор очереди из устройства

C-спецификация

Чтобы получить дескриптор объекта VkQueue, вызовите:

void vkGetDeviceQueue(
    VkDevice                                    device,
    uint32_t                                    queueFamilyIndex,
    uint32_t                                    queueIndex,
    VkQueue*                                    pQueue);

Параметры

  • device - это логическое устройство, которому принадлежит очередь.
  • queueFamilyIndex - это индекс семейства очередей, к которому принадлежит очередь.
  • queueIndex - это индекс в этом семействе очередей очереди, которую нужно получить.
  • pQueue - это указатель на объект VkQueue, который будет заполнен дескриптором запрашиваемой очереди.

Описание

Допустимое использование
  • queueFamilyIndex должен быть одним из индексов семейства очередей, указанных при создании device, через структуру VkDeviceQueueCreateInfo
  • queueIndex должен быть меньше числа очередей, созданных для указанного индекса семейства очередей при создании device, через член queueCount структуры VkDeviceQueueCreateInfo
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pQueue должен быть указателем на дескриптор VkQueue

См. также

VkDevice, VkQueue

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetDeviceQueue

vkGetEventStatus(3)

Имя

vkGetEventStatus - Получить состояние объекта события

C-спецификация

Чтобы запросить состояние события от хоста, вызовите:

VkResult vkGetEventStatus(
    VkDevice                                    device,
    VkEvent                                     event);

Параметры

  • device - это логическое устройство, которому принадлежит событие.
  • event - это дескриптор события для запроса.

Описание

В случае успеха vkGetEventStatus возвращает состояние объекта события со следующими кодами возврата:

Таблица 2. Коды состояния объекта события
Состояние Значение

VK_EVENT_SET

Событие, указанное event, установлено.

VK_EVENT_RESET

Событие, указанное event, не установлено.

Если команда vkCmdSetEvent или vkCmdResetEvent находится в буфере команд, который находится в состоянии ожидания, то значение, возвращаемое этой командой, может немедленно устареть.

Состояние события может быть обновлено хостом. Состояние события изменяется немедленно, и последующие вызовы vkGetEventStatus будут возвращать новое состояние. Если событие уже находится в требуемом состоянии, то обновление его до того же состояния не оказывает никакого эффекта.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • event должен быть допустимой дескриптором VkEvent
  • event должен быть создан, выделен или получен из device
Коды возврата
Успех
  • VK_EVENT_SET
  • VK_EVENT_RESET
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_DEVICE_LOST

См. также

VkDevice, VkEvent

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetEventStatus

vkGetFenceStatus(3)

Имя

vkGetFenceStatus - Возвращает состояние забора

C-спецификация

Чтобы запросить состояние забора от хоста, вызовите:

VkResult vkGetFenceStatus(
    VkDevice                                    device,
    VkFence                                     fence);

Параметры

  • device - это логическое устройство, которому принадлежит забор.
  • fence - это дескриптор забора для запроса.

Описание

В случае успеха, vkGetFenceStatus возвращает состояние объекта забора, со следующими кодами возврата:

Таблица 3. Коды состояния объекта забора
Состояние Значение

VK_SUCCESS

Забор, указанный fence, сигнализирован.

VK_NOT_READY

Забор, указанный fence, не сигнализирован.

VK_DEVICE_LOST

Устройство потеряно. Смотрите Lost Device.

Если команда отправки в очередь ожидает выполнения, то значение, возвращаемое этой командой, может немедленно устареть.

Если устройство потеряно (смотрите Lost Device), vkGetFenceStatus может вернуть любой из указанных выше кодов состояния. Если устройство потеряно и vkGetFenceStatus вызывается неоднократно, оно в конечном итоге вернет либо VK_SUCCESS, либо VK_DEVICE_LOST.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • fence должен быть допустимой дескриптором VkFence
  • fence должен быть создан, выделен или получен из device
Коды возврата
Успех
  • VK_SUCCESS
  • VK_NOT_READY
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_DEVICE_LOST

См. также

VkDevice, VkFence

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetFenceStatus

vkGetImageMemoryRequirements(3)

Имя

vkGetImageMemoryRequirements - Возвращает требования к памяти для указанного объекта Vulkan

C Спецификация

Чтобы определить требования к памяти для ресурса изображения, вызовите:

void vkGetImageMemoryRequirements(
    VkDevice                                    device,
    VkImage                                     image,
    VkMemoryRequirements*                       pMemoryRequirements);

Параметры

  • device - это логическое устройство, которому принадлежит изображение.
  • image - это изображение для запроса.
  • pMemoryRequirements указывает на экземпляр структуры VkMemoryRequirements, в которой возвращаются требования к памяти объекта изображения.

Описание

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • image должен быть допустимой дескриптором VkImage
  • pMemoryRequirements должен быть указателем на структуру VkMemoryRequirements
  • image должен быть создан, выделен или получен из device

См. также

VkDevice, VkImage, VkMemoryRequirements

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetImageMemoryRequirements

vkGetImageSparseMemoryRequirements(3)

Имя

vkGetImageSparseMemoryRequirements - Запрос требований к памяти для разреженного изображения

C Спецификация

Чтобы запросить требования к разреженной памяти для изображения, вызовите:

void vkGetImageSparseMemoryRequirements(
    VkDevice                                    device,
    VkImage                                     image,
    uint32_t*                                   pSparseMemoryRequirementCount,
    VkSparseImageMemoryRequirements*            pSparseMemoryRequirements);

Параметры

  • device - это логическое устройство, которому принадлежит изображение.
  • image - это объект VkImage, для которого необходимо получить требования к памяти.
  • pSparseMemoryRequirementCount - это указатель на целое число, связанное с количеством доступных или запрошенных требований к разреженной памяти, как описано ниже.
  • pSparseMemoryRequirements - это либо NULL, либо указатель на массив структур VkSparseImageMemoryRequirements.

Описание

Если pSparseMemoryRequirements равно NULL, то количество доступных требований к разреженной памяти возвращается в pSparseMemoryRequirementCount. В противном случае, pSparseMemoryRequirementCount должен указывать на переменную, установленную пользователем на количество элементов в массиве pSparseMemoryRequirements, а по возвращении переменная перезаписывается количеством структур, фактически записанных в pSparseMemoryRequirements. Если pSparseMemoryRequirementCount меньше, чем количество доступных требований к разреженной памяти, будет записано не более pSparseMemoryRequirementCount структур.

Если изображение не было создано с VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, то pSparseMemoryRequirementCount будет установлен в ноль, и в pSparseMemoryRequirements ничего не будет записано.

Примечание

Для реализации допустимо сообщать большее значение в VkMemoryRequirements::size, чем было бы получено путем суммирования размеров памяти для всех VkSparseImageMemoryRequirements, возвращаемых vkGetImageSparseMemoryRequirements. Это может произойти, когда оборудование требует неиспользуемого заполнения в диапазоне адресов, описывающем ресурс.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • image должен быть допустимой дескриптором VkImage
  • pSparseMemoryRequirementCount должен быть указателем на значение uint32_t
  • Если значение, на которое ссылается pSparseMemoryRequirementCount, не равно 0, и pSparseMemoryRequirements не равно NULL, pSparseMemoryRequirements должен быть указателем на массив структур pSparseMemoryRequirementCount VkSparseImageMemoryRequirements
  • image должен быть создан, выделен или получен из device

См. также

VkDevice, VkImage, VkSparseImageMemoryRequirements

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetImageSparseMemoryRequirements

vkGetImageSubresourceLayout(3)

Имя

vkGetImageSubresourceLayout - Получение информации о подресурсе изображения

C Спецификация

Чтобы запросить макет доступа к хосту подресурса изображения, для изображения, созданного с линейной плиткой, вызовите:

void vkGetImageSubresourceLayout(
    VkDevice                                    device,
    VkImage                                     image,
    const VkImageSubresource*                   pSubresource,
    VkSubresourceLayout*                        pLayout);

Параметры

  • device - это логическое устройство, которому принадлежит изображение.
  • image - это изображение, макет которого запрашивается.
  • pSubresource - это указатель на структуру VkImageSubresource, выбирающую определенное изображение для подресурса изображения.
  • pLayout указывает на структуру VkSubresourceLayout, в которой возвращается макет.

Описание

vkGetImageSubresourceLayout инвариантен для времени существования одного изображения.

Допустимое использование
  • image должен быть создан с tiling, равным VK_IMAGE_TILING_LINEAR
  • Элемент aspectMask pSubresource должен иметь только один установленный бит
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • image должен быть допустимой дескриптором VkImage
  • pSubresource должен быть указателем на допустимую структуру VkImageSubresource
  • pLayout должен быть указателем на структуру VkSubresourceLayout
  • image должен быть создан, выделен или получен из device

См. также

VkDevice, VkImage, VkImageSubresource, VkSubresourceLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetImageSubresourceLayout

vkGetInstanceProcAddr(3)

Имя

vkGetInstanceProcAddr - Возвращает указатель на функцию для команды

Спецификация C

Команды Vulkan не обязательно экспортируются статически на платформе. Указатели на функции для всех команд Vulkan можно получить с помощью команды:

PFN_vkVoidFunction vkGetInstanceProcAddr(
    VkInstance                                  instance,
    const char*                                 pName);

Параметры

  • instance - это экземпляр, с которым будет совместим указатель на функцию, или NULL для команд, не зависящих от какого-либо экземпляра.
  • pName - это имя команды, которую нужно получить.

Описание

vkGetInstanceProcAddr сама по себе получается платформо- и загрузчикозависимым способом. Как правило, библиотека загрузчика экспортирует эту команду как символ функции, поэтому приложения могут связаться с библиотекой загрузчика или загрузить её динамически и найти символ с помощью API, зависящих от платформы. Загрузчики рекомендуется экспортировать символы функций для всех остальных основных команд Vulkan; если это сделано, то приложения, использующие только основные команды Vulkan, не нуждаются в использовании vkGetInstanceProcAddr.

Таблица ниже определяет различные варианты использования vkGetInstanceProcAddr и ожидаемое возвращаемое значение («fp» — указатель на функцию) для каждого случая.

Возвращаемый указатель на функцию имеет тип PFN_vkVoidFunction и должен быть приведен к типу запрашиваемой команды.

Таблица 4. Поведение vkGetInstanceProcAddr
instance pName возвращаемое значение

*

NULL

неопределено

неверный экземпляр

*

неопределено

NULL

vkEnumerateInstanceExtensionProperties

fp

NULL

vkEnumerateInstanceLayerProperties

fp

NULL

vkCreateInstance

fp

NULL

* (любая pName, не указанная выше)

NULL

экземпляр

основная команда Vulkan

fp1

экземпляр

включенные команды расширений экземпляра для instance

fp1

экземпляр

доступные команды расширения устройства2 для instance

fp1

экземпляр

* (любая pName, не указанная выше)

NULL

1
Возвращаемый указатель на функцию должен вызываться только с отправляемым объектом (первый параметр), который является instance или дочерним элементом instance. Например, VkInstance, VkPhysicalDevice, VkDevice, VkQueue или VkCommandBuffer.
2
«Доступное расширение» — это функция расширения, поддерживаемая любым из загрузчика, драйвера или уровня.
Правильное использование (неявное)
  • Если instance не NULL, instance должен быть допустимой дескриптором VkInstance
  • pName должен быть строкой UTF-8 с завершающим нулем

См. также

PFN_vkVoidFunction, VkInstance

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetInstanceProcAddr

vkGetPhysicalDeviceFeatures(3)

Имя

vkGetPhysicalDeviceFeatures - Сообщает о возможностях физического устройства

Спецификация C

Чтобы запросить поддерживаемые функции, вызовите:

void vkGetPhysicalDeviceFeatures(
    VkPhysicalDevice                            physicalDevice,
    VkPhysicalDeviceFeatures*                   pFeatures);

Параметры

  • physicalDevice - это физическое устройство, у которого запрашиваются поддерживаемые функции.
  • pFeatures - это указатель на структуру VkPhysicalDeviceFeatures, в которую возвращаются функции физического устройства. Для каждой функции значение VK_TRUE указывает на то, что функция поддерживается на этом физическом устройстве, а VK_FALSE указывает на то, что функция не поддерживается.

Описание

Правильное использование (неявное)
  • physicalDevice должен быть допустимой дескриптором VkPhysicalDevice
  • pFeatures должен быть указателем на структуру VkPhysicalDeviceFeatures

См. также

VkPhysicalDevice, VkPhysicalDeviceFeatures

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetPhysicalDeviceFeatures

vkGetPhysicalDeviceFormatProperties(3)

Имя

vkGetPhysicalDeviceFormatProperties - Перечисляет возможности формата физического устройства

Спецификация C

Чтобы запросить поддерживаемые функции формата, которые являются свойствами физического устройства, вызовите:

void vkGetPhysicalDeviceFormatProperties(
    VkPhysicalDevice                            physicalDevice,
    VkFormat                                    format,
    VkFormatProperties*                         pFormatProperties);

Параметры

  • physicalDevice - это физическое устройство, у которого запрашиваются свойства формата.
  • format - это формат, свойства которого запрашиваются.
  • pFormatProperties - это указатель на структуру VkFormatProperties, в которую возвращаются свойства физического устройства для format.

Описание

Правильное использование (неявное)
  • physicalDevice должен быть допустимой дескриптором VkPhysicalDevice
  • format должен быть допустимым значением VkFormat
  • pFormatProperties должен быть указателем на структуру VkFormatProperties

См. также

VkFormat, VkFormatProperties, VkPhysicalDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetPhysicalDeviceFormatProperties

vkGetPhysicalDeviceImageFormatProperties(3)

Имя

vkGetPhysicalDeviceImageFormatProperties - Перечисляет возможности формата изображения физического устройства

Спецификация C

Чтобы запросить дополнительные возможности, специфичные для типов изображений, вызовите:

VkResult vkGetPhysicalDeviceImageFormatProperties(
    VkPhysicalDevice                            physicalDevice,
    VkFormat                                    format,
    VkImageType                                 type,
    VkImageTiling                               tiling,
    VkImageUsageFlags                           usage,
    VkImageCreateFlags                          flags,
    VkImageFormatProperties*                    pImageFormatProperties);

Параметры

  • physicalDevice is the physical device from which to query the image capabilities.
  • format is a VkFormat value specifying the image format, corresponding to VkImageCreateInfo::format.
  • type is a VkImageType value specifying the image type, corresponding to VkImageCreateInfo::imageType.
  • tiling is a VkImageTiling value specifying the image tiling, corresponding to VkImageCreateInfo::tiling.
  • usage is a bitmask of VkImageUsageFlagBits specifying the intended usage of the image, corresponding to VkImageCreateInfo::usage.
  • flags is a bitmask of VkImageCreateFlagBits specifying additional parameters of the image, corresponding to VkImageCreateInfo::flags.
  • pImageFormatProperties points to an instance of the VkImageFormatProperties structure in which capabilities are returned.

Описание

Параметры format, type, tiling, usage и flags соответствуют параметрам, которые использовались бы функцией vkCreateImage (как члены VkImageCreateInfo).

Если format не является поддерживаемым форматом изображения, или если комбинация format, type, tiling, usage и flags не поддерживается для изображений, то vkGetPhysicalDeviceImageFormatProperties возвращает VK_ERROR_FORMAT_NOT_SUPPORTED.

Ограничения формата изображения, которые сообщаются функцией vkGetPhysicalDeviceImageFormatProperties, обладают следующим свойством: если usage1 и usage2 типа VkImageUsageFlags таковы, что биты, установленные в usage1, являются подмножеством битов, установленных в usage2, и flags1 и flags2 типа VkImageCreateFlags таковы, что биты, установленные в flags1, являются подмножеством битов, установленных в flags2, то ограничения для usage1 и flags1 должны быть не более строгими, чем ограничения для usage2 и flags2, для всех значений format, type и tiling.

Правильное использование (неявное)
  • physicalDevice должен быть допустимой дескриптором VkPhysicalDevice
  • format должен быть допустимым значением VkFormat
  • type должен быть допустимым значением VkImageType
  • tiling должен быть допустимым значением VkImageTiling
  • usage должен быть допустимой комбинацией значений VkImageUsageFlagBits
  • usage не должен быть 0
  • flags должен быть допустимой комбинацией значений VkImageCreateFlagBits
  • pImageFormatProperties должен быть указателем на структуру VkImageFormatProperties
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_FORMAT_NOT_SUPPORTED

См. также

VkFormat, VkImageCreateFlags, VkImageFormatProperties, VkImageTiling, VkImageType, VkImageUsageFlags, VkPhysicalDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetPhysicalDeviceImageFormatProperties

vkGetPhysicalDeviceMemoryProperties(3)

Имя

vkGetPhysicalDeviceMemoryProperties - Отчет о информации о памяти для указанного физического устройства

Спецификация C

Для запроса свойств памяти вызовите:

void vkGetPhysicalDeviceMemoryProperties(
    VkPhysicalDevice                            physicalDevice,
    VkPhysicalDeviceMemoryProperties*           pMemoryProperties);

Параметры

  • physicalDevice is the handle to the device to query.
  • pMemoryProperties points to an instance of VkPhysicalDeviceMemoryProperties structure in which the properties are returned.

Описание

Правильное использование (неявное)
  • physicalDevice должен быть допустимой дескриптором VkPhysicalDevice
  • pMemoryProperties должен быть указателем на структуру VkPhysicalDeviceMemoryProperties

См. также

VkPhysicalDevice, VkPhysicalDeviceMemoryProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetPhysicalDeviceMemoryProperties

vkGetPhysicalDeviceProperties(3)

Имя

vkGetPhysicalDeviceProperties - Возвращает свойства физического устройства

Спецификация C

Для запроса общих свойств физических устройств после их перечисления вызовите:

void vkGetPhysicalDeviceProperties(
    VkPhysicalDevice                            physicalDevice,
    VkPhysicalDeviceProperties*                 pProperties);

Параметры

  • physicalDevice is the handle to the physical device whose properties will be queried.
  • pProperties points to an instance of the VkPhysicalDeviceProperties structure, that will be filled with returned information.

Описание

Правильное использование (неявное)
  • physicalDevice должен быть допустимой дескриптором VkPhysicalDevice
  • pProperties должен быть указателем на структуру VkPhysicalDeviceProperties

См. также

VkPhysicalDevice, VkPhysicalDeviceProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetPhysicalDeviceProperties

vkGetPhysicalDeviceQueueFamilyProperties(3)

Имя

vkGetPhysicalDeviceQueueFamilyProperties - Отчет о свойствах очередей указанного физического устройства

Спецификация C

Для запроса свойств очередей, доступных на физическом устройстве, вызовите:

void vkGetPhysicalDeviceQueueFamilyProperties(
    VkPhysicalDevice                            physicalDevice,
    uint32_t*                                   pQueueFamilyPropertyCount,
    VkQueueFamilyProperties*                    pQueueFamilyProperties);

Параметры

  • physicalDevice is the handle to the physical device whose properties will be queried.
  • pQueueFamilyPropertyCount is a pointer to an integer related to the number of queue families available or queried, as described below.
  • pQueueFamilyProperties is either NULL or a pointer to an array of VkQueueFamilyProperties structures.

Описание

Если pQueueFamilyProperties is NULL, then the number of queue families available is returned in pQueueFamilyPropertyCount. Otherwise, pQueueFamilyPropertyCount must point to a variable set by the user to the number of elements in the pQueueFamilyProperties array, and on return the variable is overwritten with the number of structures actually written to pQueueFamilyProperties. If pQueueFamilyPropertyCount is less than the number of queue families available, at most pQueueFamilyPropertyCount structures will be written.

Правильное использование (неявное)
  • physicalDevice должен быть допустимой дескриптором VkPhysicalDevice
  • pQueueFamilyPropertyCount должен быть указателем на значение uint32_t
  • If the value referenced by pQueueFamilyPropertyCount is not 0, and pQueueFamilyProperties is not NULL, pQueueFamilyProperties must be a pointer to an array of pQueueFamilyPropertyCount VkQueueFamilyProperties structures

См. также

VkPhysicalDevice, VkQueueFamilyProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetPhysicalDeviceQueueFamilyProperties

vkGetPhysicalDeviceSparseImageFormatProperties(3)

Имя

vkGetPhysicalDeviceSparseImageFormatProperties - Получение свойств формата изображения, применённого к разреженным изображениям

Спецификация C

vkGetPhysicalDeviceSparseImageFormatProperties возвращает массив VkSparseImageFormatProperties. Каждый элемент будет описывать свойства для одного набора аспектов изображения, которые связаны одновременно в изображении. Обычно это один элемент для каждого аспекта изображения, но для чередующихся изображений глубины/трафарета существует только один элемент, описывающий объединенные аспекты.

void vkGetPhysicalDeviceSparseImageFormatProperties(
    VkPhysicalDevice                            physicalDevice,
    VkFormat                                    format,
    VkImageType                                 type,
    VkSampleCountFlagBits                       samples,
    VkImageUsageFlags                           usage,
    VkImageTiling                               tiling,
    uint32_t*                                   pPropertyCount,
    VkSparseImageFormatProperties*              pProperties);

Параметры

  • physicalDevice - это физическое устройство, у которого запрашиваются возможности разреженного формата изображения.
  • format - это формат изображения.
  • type - это размерность изображения.
  • samples - это количество выборок на пиксель, как определено в VkSampleCountFlagBits.
  • usage - это битовая маска, описывающая предполагаемое использование изображения.
  • tiling - это схема размещения элементов данных в памяти.
  • pPropertyCount - это указатель на целое число, связанное с количеством доступных или запрошенных свойств разреженного формата, как описано ниже.
  • pProperties - это NULL или указатель на массив структур VkSparseImageFormatProperties.

Описание

Если pProperties равно NULL, то количество доступных свойств разреженного формата возвращается в pPropertyCount. В противном случае, pPropertyCount должен указывать на переменную, установленную пользователем для количества элементов в массиве pProperties, и по возвращении переменная перезаписывается количеством структур, фактически записанных в pProperties. Если pPropertyCount меньше, чем количество доступных свойств разреженного формата, будет записано не более pPropertyCount структур.

Если VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT не поддерживается для заданных аргументов, pPropertyCount будет установлен в ноль по возвращении, и данные не будут записаны в pProperties.

Для изображений глубины/трафарета, которые реализованы как отдельные плоскости, возвращаются несколько аспектов. Плоскости данных глубины и трафарета имеют уникальные данные VkSparseImageFormatProperties.

Изображения глубины/трафарета с данными глубины и трафарета, чередующимися в одной плоскости, вернут одну структуру VkSparseImageFormatProperties с aspectMask, установленным в VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT.

Правильное использование
  • samples должно быть битовым значением, установленным в VkImageFormatProperties::sampleCounts, возвращаемым vkGetPhysicalDeviceImageFormatProperties с format, type, tiling, и usage равными тем, что в этой команде, и flags равным значению, установленному в VkImageCreateInfo::flags при создании изображения
Правильное использование (неявное)
  • physicalDevice должно быть допустимой дескриптором VkPhysicalDevice
  • format должно быть допустимым значением VkFormat
  • type должно быть допустимым значением VkImageType
  • samples должно быть допустимым значением VkSampleCountFlagBits
  • usage должно быть допустимой комбинацией значений VkImageUsageFlagBits
  • usage не должно быть 0
  • tiling должно быть допустимым значением VkImageTiling
  • pPropertyCount должно быть указателем на значение uint32_t
  • Если значение, на которое ссылается pPropertyCount, не 0, и pProperties не NULL, pProperties должно быть указателем на массив pPropertyCount VkSparseImageFormatProperties структур

См. также

VkFormat, VkImageTiling, VkImageType, VkImageUsageFlags, VkPhysicalDevice, VkSampleCountFlagBits, VkSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetPhysicalDeviceSparseImageFormatProperties

vkGetPipelineCacheData(3)

Имя

vkGetPipelineCacheData - Получение хранилища данных из кэша конвейеров

C Спецификация

Данные могут быть извлечены из объекта кэша конвейеров с использованием команды:

VkResult vkGetPipelineCacheData(
    VkDevice                                    device,
    VkPipelineCache                             pipelineCache,
    size_t*                                     pDataSize,
    void*                                       pData);

Параметры

  • device - это логическое устройство, которому принадлежит кэш конвейеров.
  • pipelineCache - это кэш конвейеров, из которого извлекаются данные.
  • pDataSize - это указатель на значение, связанное с объемом данных в кэше конвейеров, как описано ниже.
  • pData - это NULL или указатель на буфер.

Описание

Если pData равно NULL, то максимальный размер данных, которые могут быть извлечены из кэша конвейеров, в байтах, возвращается в pDataSize. В противном случае, pDataSize должен указывать на переменную, установленную пользователем для размера буфера, в байтах, на который указывает pData, и по возвращении переменная перезаписывается объемом данных, фактически записанных в pData.

Если pDataSize меньше, чем максимальный размер, который может быть извлечен кэшем конвейеров, в pData будет записано не более pDataSize байт, и vkGetPipelineCacheData вернет VK_INCOMPLETE. Любые данные, записанные в pData, действительны и могут быть предоставлены в качестве члена pInitialData структуры VkPipelineCacheCreateInfo, переданной в vkCreatePipelineCache.

Два вызова vkGetPipelineCacheData с одинаковыми параметрами должны извлекать одни и те же данные, если между ними не вызывается команда, изменяющая содержимое кэша.

Приложения могут хранить данные, извлеченные из кэша конвейеров, и использовать эти данные, возможно, в будущем запуске приложения, для заполнения новых объектов кэша конвейеров. Однако результаты компиляции конвейеров могут зависеть от идентификатора поставщика, идентификатора устройства, версии драйвера и других деталей устройства. Чтобы позволить приложениям обнаруживать, когда ранее извлеченные данные несовместимы с устройством, начальные байты, записанные в pData, должны представлять собой заголовок, состоящий из следующих элементов:

Таблица 5. Макет для заголовка кэша конвейеров версии VK_PIPELINE_CACHE_HEADER_VERSION_ONE
Смещение Размер Значение

0

4

длина в байтах всего заголовка кэша конвейеров, записанная как поток байтов, с наименее значимым байтом первым

4

4

значение VkPipelineCacheHeaderVersion, записанное как поток байтов, с наименее значимым байтом первым

8

4

идентификатор поставщика, равный VkPhysicalDeviceProperties::vendorID, записанный как поток байтов, с наименее значимым байтом первым

12

4

идентификатор устройства, равный VkPhysicalDeviceProperties::deviceID, записанный как поток байтов, с наименее значимым байтом первым

16

VK_UUID_SIZE

идентификатор кэша конвейеров, равный VkPhysicalDeviceProperties::pipelineCacheUUID

Первые четыре байта кодируют длину всего заголовка конвейера в байтах. Это значение включает все поля в заголовке, включая поле версии кэша конвейера и размер поля длины.

Следующие четыре байта кодируют версию кэша конвейера, как описано для VkPipelineCacheHeaderVersion. Потребитель кэша конвейера должен использовать версию кэша для интерпретации остальной части заголовка кэша.

Если pDataSize меньше, чем необходимо для хранения этого заголовка, ничего не будет записано в pData, и ноль будет записан в pDataSize.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pipelineCache должен быть допустимой дескриптором VkPipelineCache
  • pDataSize должен быть указателем на значение size_t
  • Если значение, на которое ссылается pDataSize, не 0, и pData не NULL, pData должен быть указателем на массив из pDataSize байтов
  • pipelineCache должен быть создан, выделен или получен из device
Коды возврата
Успех
  • VK_SUCCESS
  • VK_INCOMPLETE
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDevice, VkPipelineCache

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetPipelineCacheData

vkGetQueryPoolResults(3)

Имя

vkGetQueryPoolResults - Копирование результатов запросов в пуле запросов в область памяти хоста

C спецификация

Для получения состояния и результатов набора запросов, вызовите:

VkResult vkGetQueryPoolResults(
    VkDevice                                    device,
    VkQueryPool                                 queryPool,
    uint32_t                                    firstQuery,
    uint32_t                                    queryCount,
    size_t                                      dataSize,
    void*                                       pData,
    VkDeviceSize                                stride,
    VkQueryResultFlags                          flags);

Параметры

  • device - это логическое устройство, которому принадлежит пул запросов.
  • queryPool - это пул запросов, управляющий запросами, содержащими необходимые результаты.
  • firstQuery - это начальный индекс запроса.
  • queryCount - это количество запросов. firstQuery и queryCount вместе определяют диапазон запросов. Для запросов статистики конвейера каждый индекс запроса в пуле содержит одно целочисленное значение для каждого бита, который включен в VkQueryPoolCreateInfo::pipelineStatistics при создании пула.
  • dataSize - это размер в байтах буфера, на который указывает pData.
  • pData - это указатель на буфер, выделенный пользователем, куда будут записаны результаты
  • stride - это шаг в байтах между результатами для отдельных запросов внутри pData.
  • flags - это битовая маска VkQueryResultFlagBits, указывающая, как и когда возвращаются результаты.

Описание

Если в flags не установлено ни одного бита, и все запрошенные запросы находятся в доступном состоянии, результаты записываются как массив 32-битных беззнаковых целых чисел. Поведение, когда не все запросы доступны, описано ниже.

Если VK_QUERY_RESULT_64_BIT не установлен и результат переполняет 32-битное значение, значение может либо переполниться, либо насытиться. Аналогично, если установлен VK_QUERY_RESULT_64_BIT и результат переполняет 64-битное значение, значение может либо переполниться, либо насытиться.

Если установлен VK_QUERY_RESULT_WAIT_BIT, Vulkan будет ждать, пока каждый запрос не окажется в доступном состоянии, прежде чем извлекать числовые результаты для этого запроса. В этом случае vkGetQueryPoolResults гарантированно завершится успешно и вернет VK_SUCCESS, если запросы станут доступны в конечное время (т. е. если они были отправлены и не сброшены). Если запросы никогда не завершатся (например, из-за сброса, но не отправки), то vkGetQueryPoolResults может не вернуться в конечное время.

Если VK_QUERY_RESULT_WAIT_BIT и VK_QUERY_RESULT_PARTIAL_BIT не установлены, то значения результатов не записываются в pData для запросов, которые находятся в недоступном состоянии во время вызова, и vkGetQueryPoolResults возвращает VK_NOT_READY. Однако состояние доступности все еще записывается в pData для этих запросов, если установлен VK_QUERY_RESULT_WITH_AVAILABILITY_BIT.

Примечание

Приложения должны следить за тем, чтобы использование бита VK_QUERY_RESULT_WAIT_BIT имело желаемый эффект.

Например, если запрос использовался ранее, и буфер команд записывает команды vkCmdResetQueryPool, vkCmdBeginQuery и vkCmdEndQuery для этого запроса, то запрос останется в доступном состоянии до тех пор, пока команда vkCmdResetQueryPool не выполнится в очереди. Приложения могут использовать заборы или события, чтобы убедиться, что запрос уже сброшен перед проверкой его результатов или состояния доступности. В противном случае устаревшее значение может быть возвращено из предыдущего использования запроса.

Вышесказанное также относится к случаю, когда VK_QUERY_RESULT_WAIT_BIT используется в сочетании с VK_QUERY_RESULT_WITH_AVAILABILITY_BIT. В этом случае возвращаемое состояние доступности может отражать результат предыдущего использования запроса, если команда vkCmdResetQueryPool не была выполнена после последнего использования запроса.

Примечание

Приложения могут использовать двойную буферизацию использования пула запросов, с одним пулом на кадр, и сбрасывать запросы в конце кадра, в котором они читаются.

Если установлен VK_QUERY_RESULT_PARTIAL_BIT, VK_QUERY_RESULT_WAIT_BIT не установлен, и состояние запроса недоступно, промежуточное значение результата между нулем и окончательным значением результата записывается в pData для этого запроса.

VK_QUERY_RESULT_PARTIAL_BIT не должен использоваться, если queryType пула равен VK_QUERY_TYPE_TIMESTAMP.

Если установлен VK_QUERY_RESULT_WITH_AVAILABILITY_BIT, окончательное целочисленное значение, записанное для каждого запроса, отлично от нуля, если состояние запроса было доступно, или равно нулю, если состояние было недоступно. При использовании VK_QUERY_RESULT_WITH_AVAILABILITY_BIT реализации должны гарантировать, что если они возвращают ненулевое значение доступности, то числовые результаты должны быть действительными, предполагая, что результаты не сброшены последующей командой.

Примечание

Выполнение этой гарантии может потребовать тщательного упорядочивания приложением, например, для чтения состояния доступности перед чтением результатов.

Допустимое использование
  • firstQuery должен быть меньше числа запросов в queryPool
  • Если VK_QUERY_RESULT_64_BIT не установлен в flags, то pData и stride должны быть кратными 4
  • Если VK_QUERY_RESULT_64_BIT установлен в flags, то pData и stride должны быть кратными 8
  • Сумма firstQuery и queryCount должна быть меньше или равна числу запросов в queryPool
  • dataSize должен быть достаточно большим, чтобы содержать результат каждого запроса, как описано здесь
  • Если queryType, используемый для создания queryPool, был VK_QUERY_TYPE_TIMESTAMP, flags не должен содержать VK_QUERY_RESULT_PARTIAL_BIT
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • queryPool должен быть допустимой дескриптором VkQueryPool
  • pData должен быть указателем на массив из dataSize байтов
  • flags должен быть допустимым сочетанием значений VkQueryResultFlagBits
  • dataSize должен быть больше 0
  • queryPool должен быть создан, выделен или получен из device
Коды возврата
Успех
  • VK_SUCCESS
  • VK_NOT_READY
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_DEVICE_LOST

См. также

VkDevice, VkDeviceSize, VkQueryPool, VkQueryResultFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetQueryPoolResults

vkGetRenderAreaGranularity(3)

Имя

vkGetRenderAreaGranularity - Возвращает гранулярность для оптимальной области рендеринга

C спецификация

Для запроса гранулярности области рендеринга, вызовите:

void vkGetRenderAreaGranularity(
    VkDevice                                    device,
    VkRenderPass                                renderPass,
    VkExtent2D*                                 pGranularity);

Параметры

  • device - это логическое устройство, которому принадлежит проход рендеринга.
  • renderPass - это дескриптор прохода рендеринга.
  • pGranularity указывает на структуру VkExtent2D, в которой возвращается гранулярность.

Описание

Условия, приводящие к оптимальной renderArea, следующие:

  • член offset.x в renderArea является кратным члену width возвращаемого VkExtent2D (горизонтальное зерно).
  • член offset.y в renderArea является кратным члену height возвращаемого VkExtent2D (вертикальное зерно).
  • либо член offset.width в renderArea является кратным горизонтальному зерну, либо offset.x+offset.width равно width framebuffer в VkRenderPassBeginInfo.
  • либо член offset.height в renderArea является кратным вертикальному зерну, либо offset.y+offset.height равно height framebuffer в VkRenderPassBeginInfo.

Зависимости подпроходов не затрагиваются областью отрисовки и применяются ко всем подобъектам изображений, прикреплённым к буферу кадра, как указано в описании автоматических переходов макета. Аналогично, барьеры конвейера действительны, даже если их эффект выходит за пределы области отрисовки.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • renderPass должен быть допустимой дескриптором VkRenderPass
  • pGranularity должен быть указателем на структуру VkExtent2D
  • renderPass должен быть создан, выделен или получен из device

См. также

VkDevice, VkExtent2D, VkRenderPass

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkGetRenderAreaGranularity

vkInvalidateMappedMemoryRanges(3)

Имя

vkInvalidateMappedMemoryRanges - Привести к недействительности диапазоны отображаемых объектов памяти

Спецификация C

Чтобы привести к недействительности диапазоны некогерентной памяти из кэшей хоста, вызовите:

VkResult vkInvalidateMappedMemoryRanges(
    VkDevice                                    device,
    uint32_t                                    memoryRangeCount,
    const VkMappedMemoryRange*                  pMemoryRanges);

Параметры

  • device - это логическое устройство, которому принадлежат диапазоны памяти.
  • memoryRangeCount - это длина массива pMemoryRanges.
  • pMemoryRanges - это указатель на массив структур VkMappedMemoryRange, описывающих диапазоны памяти, которые необходимо сделать недействительными.

Описание

vkInvalidateMappedMemoryRanges гарантирует, что записи устройства в диапазоны памяти, описанные pMemoryRanges, которые стали видимыми для VK_ACCESS_HOST_WRITE_BIT и VK_ACCESS_HOST_READ_BIT типов доступа, становятся видимыми для хоста. Если диапазон некогерентной памяти записывается хостом, а затем приводится к недействительности без предварительной очистки, его содержимое не определено.

Примечание

Отображение некогерентной памяти не приводит к неявной недействительности отображаемой памяти, и записи устройства, которые не были приведены к недействительности, должны быть сделаны видимыми, прежде чем хост будет их читать или перезаписывать.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pMemoryRanges должен быть указателем на массив memoryRangeCount допустимых структур VkMappedMemoryRange
  • memoryRangeCount должен быть больше 0
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDevice, VkMappedMemoryRange

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkInvalidateMappedMemoryRanges

vkMapMemory(3)

Имя

vkMapMemory - Отобразить объект памяти в адресное пространство приложения

Спецификация C

Чтобы получить указатель на виртуальный адрес хоста в область отображаемого объекта памяти, вызовите:

VkResult vkMapMemory(
    VkDevice                                    device,
    VkDeviceMemory                              memory,
    VkDeviceSize                                offset,
    VkDeviceSize                                size,
    VkMemoryMapFlags                            flags,
    void**                                      ppData);

Параметры

  • device - это логическое устройство, которому принадлежит память.
  • memory - это объект VkDeviceMemory, который нужно отобразить.
  • offset - это смещение в байтах от начала объекта памяти, отсчитываемое от нуля.
  • size - это размер отображаемого диапазона памяти или VK_WHOLE_SIZE для отображения от offset до конца выделения.
  • flags зарезервировано для будущего использования.
  • ppData указывает на указатель, в котором возвращается указатель, доступный хосту, на начало отображаемого диапазона. Этот указатель минус offset должен быть выровнен, как минимум, до VkPhysicalDeviceLimits::minMemoryMapAlignment.

Описание

Вызов vkMapMemory для объекта памяти, который уже отображен, является ошибкой приложения.

Примечание

vkMapMemory завершится неудачей, если реализация не сможет выделить достаточно большой непрерывный диапазон виртуальных адресов, например, из-за фрагментации виртуального адресного пространства или ограничений платформы. В таких случаях vkMapMemory должен возвращать VK_ERROR_MEMORY_MAP_FAILED. Приложение может повысить вероятность успеха, уменьшив размер отображаемого диапазона и/или удалив ненужные отображения с помощью VkUnmapMemory.

vkMapMemory не проверяет, используется ли память устройства в данный момент, прежде чем возвращать указатель, доступный хосту. Приложение должно гарантировать, что любая ранее отправленная команда, которая записывает в этот диапазон, завершилась до того, как хост начнет чтение или запись в этот диапазон, и что любая ранее отправленная команда, которая считывает из этого диапазона, завершилась до того, как хост начнет запись в эту область (см. здесь подробности о выполнении такой гарантии). Если память устройства была выделена без установленного VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, эти гарантии должны быть выполнены для расширенного диапазона: приложение должно округлить начало диапазона вниз до ближайшего кратного VkPhysicalDeviceLimits::nonCoherentAtomSize, и округлить конец диапазона вверх до ближайшего кратного VkPhysicalDeviceLimits::nonCoherentAtomSize.

Пока диапазон памяти устройства отображается для доступа хоста, приложение отвечает за синхронизацию как доступа устройства, так и доступа хоста к этому диапазону памяти.

Примечание

Разработчику приложения важно тщательно ознакомиться со всеми механизмами, описанными в главе о синхронизации и управлении кэшем, поскольку они имеют решающее значение для поддержания порядка доступа к памяти.

Допустимое использование
  • memory не должен быть в данный момент отображен
  • offset должен быть меньше размера memory
  • Если size не равно VK_WHOLE_SIZE, size должен быть больше 0
  • Если size не равно VK_WHOLE_SIZE, size должен быть меньше или равен размеру memory минус offset
  • memory должен быть создан с типом памяти, который сообщает VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • memory должен быть допустимой дескриптором VkDeviceMemory
  • flags должен быть 0
  • ppData должен быть указателем на указатель
  • memory должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к memory должен быть синхронизирован внешним образом
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_MEMORY_MAP_FAILED

См. также

VkDevice, VkDeviceMemory, VkDeviceSize, VkMemoryMapFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkMapMemory

vkMergePipelineCaches(3)

Имя

vkMergePipelineCaches - Объединить хранилища данных кэшей конвейеров

Спецификация C

Объекты кэша конвейера могут быть объединены с помощью команды:

VkResult vkMergePipelineCaches(
    VkDevice                                    device,
    VkPipelineCache                             dstCache,
    uint32_t                                    srcCacheCount,
    const VkPipelineCache*                      pSrcCaches);

Параметры

  • device is the logical device that owns the pipeline cache objects.
  • dstCache is the handle of the pipeline cache to merge results into.
  • srcCacheCount is the length of the pSrcCaches array.
  • pSrcCaches is an array of pipeline cache handles, which will be merged into dstCache. The previous contents of dstCache are included after the merge.

Описание

Примечание

Подробности операции слияния зависят от реализации, но реализации должны объединять содержимое указанных конвейеров и удалять дубликаты.

Допустимое использование
  • dstCache не должно присутствовать в списке исходных кешей
Допустимое использование (неявное)
  • device должна быть допустимой дескриптором VkDevice
  • dstCache должен быть допустимой дескриптором VkPipelineCache
  • pSrcCaches должен быть указателем на массив из srcCacheCount допустимых дескрипторов VkPipelineCache
  • srcCacheCount должно быть больше 0
  • dstCache должен быть создан, выделен или получен из device
  • Каждый элемент pSrcCaches должен быть создан, выделен или получен из device
Синхронизация узла
  • Доступ узла к dstCache должен быть внешне синхронизирован
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDevice, VkPipelineCache

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkMergePipelineCaches

vkQueueBindSparse(3)

Имя

vkQueueBindSparse - Привязка памяти устройства к объекту разреженного ресурса

C-спецификация

Для отправки операций разреженной привязки в очередь, вызовите:

VkResult vkQueueBindSparse(
    VkQueue                                     queue,
    uint32_t                                    bindInfoCount,
    const VkBindSparseInfo*                     pBindInfo,
    VkFence                                     fence);

Параметры

  • queue is the queue that the sparse binding operations will be submitted to.
  • bindInfoCount is the number of elements in the pBindInfo array.
  • pBindInfo is an array of VkBindSparseInfo structures, each specifying a sparse binding submission batch.
  • fence is an optional handle to a fence to be signaled. If fence is not VK_NULL_HANDLE, it defines a fence signal operation.

Описание

vkQueueBindSparse is a queue submission command, with each batch defined by an element of pBindInfo as an instance of the VkBindSparseInfo structure. Batches begin execution in the order they appear in pBindInfo, but may complete out of order.

Within a batch, a given range of a resource must not be bound more than once. Across batches, if a range is to be bound to one allocation and offset and then to another allocation and offset, then the application must guarantee (usually using semaphores) that the binding operations are executed in the correct order, as well as to order binding operations against the execution of command buffer submissions.

As no operation to vkQueueBindSparse causes any pipeline stage to access memory, synchronization primitives used in this command effectively only define execution dependencies.

Дополнительная информация о работе с ограждениями и семафорами описана в главе о синхронизации.

Допустимое использование
  • If fence is not VK_NULL_HANDLE, fence must be unsignaled
  • If fence is not VK_NULL_HANDLE, fence must not be associated with any other queue command that has not yet completed execution on that queue
  • Any given element of the pSignalSemaphores member of any element of pBindInfo must be unsignaled when the semaphore signal operation it defines is executed on the device
  • When a semaphore unsignal operation defined by any element of the pWaitSemaphores member of any element of pBindInfo executes on queue, no other queue must be waiting on the same semaphore.
  • All elements of the pWaitSemaphores member of all elements of pBindInfo must be semaphores that are signaled, or have semaphore signal operations previously submitted for execution.
Допустимое использование (неявное)
  • queue must be a valid VkQueue handle
  • If bindInfoCount is not 0, pBindInfo must be a pointer to an array of bindInfoCount valid VkBindSparseInfo structures
  • If fence is not VK_NULL_HANDLE, fence must be a valid VkFence handle
  • The queue must support sparse binding operations
  • Both of fence, and queue that are valid handles must have been created, allocated, or retrieved from the same VkDevice
Синхронизация узла
  • Host access to queue must be externally synchronized
  • Host access to pBindInfo[].pWaitSemaphores[] must be externally synchronized
  • Host access to pBindInfo[].pSignalSemaphores[] must be externally synchronized
  • Host access to pBindInfo[].pBufferBinds[].buffer must be externally synchronized
  • Host access to pBindInfo[].pImageOpaqueBinds[].image must be externally synchronized
  • Host access to pBindInfo[].pImageBinds[].image must be externally synchronized
  • Host access to fence must be externally synchronized
Свойства команд
Уровни буфера команд Область прохода отрисовки Поддерживаемые типы очередей Тип конвейера

-

-

SPARSE_BINDING

-

Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_DEVICE_LOST

См. также

VkBindSparseInfo, VkFence, VkQueue

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkQueueBindSparse

vkQueueSubmit(3)

Имя

vkQueueSubmit - Отправляет последовательность семафоров или буферов команд в очередь

C-спецификация

Для отправки буферов команд в очередь, вызовите:

VkResult vkQueueSubmit(
    VkQueue                                     queue,
    uint32_t                                    submitCount,
    const VkSubmitInfo*                         pSubmits,
    VkFence                                     fence);

Параметры

  • queue is the queue that the command buffers will be submitted to.
  • submitCount is the number of elements in the pSubmits array.
  • pSubmits is a pointer to an array of VkSubmitInfo structures, each specifying a command buffer submission batch.
  • fence is an optional handle to a fence to be signaled. If fence is not VK_NULL_HANDLE, it defines a fence signal operation.

Описание

Примечание

Отправка может быть операцией с высокой накладкой, и приложениям следует пытаться объединять работу в как можно меньшее количество вызовов vkQueueSubmit.

vkQueueSubmit является командой отправки очереди, причём каждая партия определяется элементом pSubmits как экземпляр структуры VkSubmitInfo. Партии начинают выполняться в порядке их появления в pSubmits, но могут завершаться не по порядку.

Операции с ограждениями и семафорами, отправленные с помощью vkQueueSubmit, имеют дополнительные ограничения порядка по сравнению с другими командами отправки, с зависимостями, включающими предыдущие и последующие операции очереди. Информация об этих дополнительных ограничениях может быть найдена в разделах семафора и ограждения главы о синхронизации.

Подробности о взаимодействии pWaitDstStageMask с синхронизацией описаны в разделе операции ожидания семафора главы о синхронизации.

Порядок, в котором партии появляются в pSubmits, используется для определения порядка отправки, и, таким образом, всех неявных гарантий упорядочивания, которые его соблюдают. Помимо этих неявных гарантий упорядочивания и любых явных примитивов синхронизации, эти партии могут перекрываться или иным образом выполняться не по порядку.

Если какой-либо буфер команд, отправленный в эту очередь, находится в выполняемом состоянии, он переводится в ожидающем состоянии. После завершения выполнения всех отправлений буфера команд он переходит из ожидающего состояния обратно в выполняемое состояние. Если буфер команд был записан с флагом VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, он вместо этого переходит обратно в недействительное состояние.

Если vkQueueSubmit завершается неудачей, он может вернуть VK_ERROR_OUT_OF_HOST_MEMORY или VK_ERROR_OUT_OF_DEVICE_MEMORY. В этом случае реализация должна гарантировать, что состояние и содержимое любых ресурсов или примитивов синхронизации, на которые ссылаются отправленные буферы команд, и любых семафоров, на которые ссылается pSubmits, не затрагиваются вызовом или его ошибкой. Если vkQueueSubmit завершается неудачей таким образом, что реализация не может дать такую гарантию, реализация должна вернуть VK_ERROR_DEVICE_LOST. См. Потерянное устройство.

Допустимое использование
  • Если fence не равно VK_NULL_HANDLE, fence должно быть несигнализированным
  • Если fence не равно VK_NULL_HANDLE, fence не должно быть связано ни с какой другой командой очереди, выполнение которой ещё не завершено в этой очереди
  • Любые вызовы vkCmdSetEvent, vkCmdResetEvent или vkCmdWaitEvents, которые были записаны в любой из элементов буфера команд члена pCommandBuffers любого элемента pSubmits, не должны ссылаться ни на один VkEvent, на который ссылаются какие-либо из этих команд в буфере команд, который был отправлен в другую очередь и всё ещё находится в ожидающем состоянии.
  • Любой флаг этапа, включённый в любой элемент члена pWaitDstStageMask любого элемента pSubmits, должен быть этапом конвейера, поддерживаемым одной из возможностей queue, как указано в таблице поддерживаемых этапов конвейера.
  • Любой заданный элемент члена pSignalSemaphores любого элемента pSubmits должен быть несигнализированным, когда операция сигнализации семафора, которую он определяет, выполняется на устройстве
  • Когда операция отмены сигнализации семафора, определяемая любым элементом члена pWaitSemaphores любого элемента pSubmits, выполняется на queue, ни одна другая очередь не должна ожидать тот же семафор.
  • Все элементы члена pWaitSemaphores всех элементов pSubmits должны быть семафорами, которые сигнализированы или имеют операции сигнализации семафора, ранее отправленные для выполнения.
  • Любой заданный элемент члена pCommandBuffers любого элемента pSubmits должен находиться в ожидающем или выполняемом состоянии.
  • Если любой заданный элемент члена pCommandBuffers любого элемента pSubmits не был записан с VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, он не должен находиться в ожидающем состоянии.
  • Любые записанные вторичные буферы команд в любой заданный элемент члена pCommandBuffers любого элемента pSubmits должны находиться в ожидающем или выполняемом состоянии.
  • Если какие-либо записанные вторичные буферы команд в любой заданный элемент члена pCommandBuffers любого элемента pSubmits не были записаны с VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, он не должен находиться в ожидающем состоянии.
  • Любой заданный элемент члена pCommandBuffers любого элемента pSubmits должен быть выделен из VkCommandPool, который был создан для того же семейства очередей, к которому принадлежит queue.
Допустимое использование (Неявное)
  • queue должен быть допустимой дескриптором VkQueue
  • Если submitCount не равно 0, pSubmits должен быть указателем на массив из submitCount допустимых структур VkSubmitInfo
  • Если fence не равно VK_NULL_HANDLE, fence должен быть допустимой дескриптором VkFence
  • И fence, и queue, являющиеся допустимыми дескрипторами, должны быть созданы, выделены или получены из одного и того же VkDevice
Синхронизация хоста
  • Доступ хоста к queue должен быть внешне синхронизирован
  • Доступ хоста к pSubmits[].pWaitSemaphores[] должен быть внешне синхронизирован
  • Доступ хоста к pSubmits[].pSignalSemaphores[] должен быть внешне синхронизирован
  • Доступ хоста к fence должен быть внешне синхронизирован
Свойства команд
Уровни буфера команд Область действия прохода отрисовки Поддерживаемые типы очередей Тип конвейера

-

-

Любой

-

Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_DEVICE_LOST

См. также

VkFence, VkQueue, VkSubmitInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkQueueSubmit

vkQueueWaitIdle(3)

Имя

vkQueueWaitIdle - Ожидание простоя очереди

C Спецификация

Чтобы дождаться на хосте завершения ожидающих операций очереди для данной очереди, вызовите:

VkResult vkQueueWaitIdle(
    VkQueue                                     queue);

Параметры

  • queue — очередь, ожидания которой необходимо дождаться.

Описание

vkQueueWaitIdle эквивалентно отправке забора в очередь и ожиданию с бесконечным тайм-аутом сигнала от этого забора.

Допустимое использование (неявное)
  • queue должен быть допустимой дескриптором VkQueue
Свойства команд
Уровни буфера команд Область действия прохода отрисовки Поддерживаемые типы очередей Тип конвейера

-

-

Любой

-

Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_DEVICE_LOST

См. также

VkQueue

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkQueueWaitIdle

vkResetCommandBuffer(3)

Название

vkResetCommandBuffer - Сброс буфера команд в исходное состояние

C спецификация

Для сброса буферов команд вызовите:

VkResult vkResetCommandBuffer(
    VkCommandBuffer                             commandBuffer,
    VkCommandBufferResetFlags                   flags);

Параметры

  • commandBuffer - буфер команд для сброса. Буфер команд может находиться в любом состоянии, кроме pending, и переводится в состояние initial state.
  • flags - это битовая маска VkCommandBufferResetFlagBits, управляющая операцией сброса.

Описание

Любой первичный буфер команд, находящийся в состоянии записи или выполнимого состояния и имеющий commandBuffer записанный в него, становится недействительным.

Допустимое использование
  • commandBuffer не должен находиться в состоянии pending state
  • commandBuffer должен быть выделен из пула, созданного с помощью VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
Допустимое использование (неявное)
  • commandBuffer должен быть допустимой дескриптором VkCommandBuffer
  • flags должен быть допустимым сочетанием значений VkCommandBufferResetFlagBits
Синхронизация хоста
  • Доступ хоста к commandBuffer должен быть синхронизирован внешним образом
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkCommandBuffer, VkCommandBufferResetFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkResetCommandBuffer

vkResetCommandPool(3)

Название

vkResetCommandPool - Сброс пула команд

C спецификация

Для сброса пула команд вызовите:

VkResult vkResetCommandPool(
    VkDevice                                    device,
    VkCommandPool                               commandPool,
    VkCommandPoolResetFlags                     flags);

Параметры

  • device - логическое устройство, которому принадлежит пул команд.
  • commandPool - пул команд для сброса.
  • flags - это битовая маска VkCommandPoolResetFlagBits, управляющая операцией сброса.

Описание

Сброс пула команд возвращает все ресурсы из всех буферов команд, выделенных из пула команд, обратно в пул команд. Все буферы команд, выделенные из пула команд, переводятся в состояние initial state.

Любой первичный буфер команд, выделенный из другого VkCommandPool, находящийся в состоянии записи или выполнимого состояния и имеющий вторичный буфер команд, выделенный из commandPool записанный в него, становится недействительным.

Допустимое использование
  • Все объекты VkCommandBuffer, выделенные из commandPool, не должны находиться в состоянии pending state
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • commandPool должен быть допустимой дескриптором VkCommandPool
  • flags должен быть допустимым сочетанием значений VkCommandPoolResetFlagBits
  • commandPool должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к commandPool должен быть синхронизирован внешним образом
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkCommandPool, VkCommandPoolResetFlags, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkResetCommandPool

vkResetDescriptorPool(3)

Название

vkResetDescriptorPool - Сброс объекта пула дескрипторов

C спецификация

Чтобы вернуть все наборы дескрипторов, выделенные из данного пула, в пул, а не освобождать отдельные наборы дескрипторов, вызовите:

VkResult vkResetDescriptorPool(
    VkDevice                                    device,
    VkDescriptorPool                            descriptorPool,
    VkDescriptorPoolResetFlags                  flags);

Параметры

  • device - логическое устройство, которому принадлежит пул дескрипторов.
  • descriptorPool - пул дескрипторов, который будет сброшен.
  • flags - зарезервировано для будущего использования.

Описание

Сброс пула дескрипторов возвращает все ресурсы из всех наборов дескрипторов, выделенных из пула дескрипторов, обратно в пул дескрипторов, и наборы дескрипторов неявно освобождаются.

Допустимое использование
  • Все использования descriptorPool (через любые выделенные наборы дескрипторов) должны быть завершены
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • descriptorPool должен быть допустимой дескриптором VkDescriptorPool
  • flags должен быть 0
  • descriptorPool должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к descriptorPool должен быть синхронизирован внешним образом
  • Доступ хоста к любым объектам VkDescriptorSet, выделенным из descriptorPool, должен быть синхронизирован внешним образом
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDescriptorPool, VkDescriptorPoolResetFlags, VkDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkResetDescriptorPool

vkResetEvent(3)

Название

vkResetEvent - Сброс события в несигнализируемое состояние

Спецификация C

Для установки состояния события в несигнализируемое состояние с хоста, вызовите:

VkResult vkResetEvent(
    VkDevice                                    device,
    VkEvent                                     event);

Параметры

  • device - это логическое устройство, которому принадлежит событие.
  • event - это событие для сброса.

Описание

Когда vkResetEvent выполняется на хосте, он определяет операцию снятия сигнала события, которая сбрасывает событие в несигнализируемое состояние.

Если event уже находится в несигнализируемом состоянии, когда выполняется vkResetEvent, то vkResetEvent не оказывает никакого действия, и операция снятия сигнала события не происходит.

Допустимое использование
  • event не должно ожидать команду vkCmdWaitEvents, которая в данный момент выполняется
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • event должен быть допустимой дескриптором VkEvent
  • event должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к event должен быть синхронизирован внешним образом
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDevice, VkEvent

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkResetEvent

vkResetFences(3)

Имя

vkResetFences - Сбрасывает один или несколько объектов забора

Спецификация C

Для установки состояния заборов в несигнализируемое состояние с хоста, вызовите:

VkResult vkResetFences(
    VkDevice                                    device,
    uint32_t                                    fenceCount,
    const VkFence*                              pFences);

Параметры

  • device - это логическое устройство, которому принадлежат заборы.
  • fenceCount - это количество заборов для сброса.
  • pFences - это указатель на массив дескрипторов заборов для сброса.

Описание

Когда vkResetFences выполняется на хосте, он определяет операцию снятия сигнала забора для каждого забора, которая сбрасывает забор в несигнализируемое состояние.

Если любой член pFences уже находится в несигнализируемом состоянии, когда выполняется vkResetFences, то vkResetFences не оказывает никакого действия на этот забор.

Допустимое использование
  • Любой заданный элемент pFences не должен в данный момент быть связан ни с одной командой очереди, которая еще не завершила выполнение в этой очереди
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pFences должен быть указателем на массив fenceCount допустимых VkFence дескрипторов
  • fenceCount должен быть больше чем 0
  • Каждый элемент pFences должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к каждому члену pFences должен быть синхронизирован внешним образом
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDevice, VkFence

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkResetFences

vkSetEvent(3)

Имя

vkSetEvent - Установка события в сигнализируемое состояние

Спецификация C

Для установки состояния события в сигнализируемое состояние с хоста, вызовите:

VkResult vkSetEvent(
    VkDevice                                    device,
    VkEvent                                     event);

Параметры

  • device - это логическое устройство, которому принадлежит событие.
  • event - это событие для установки.

Описание

Когда vkSetEvent выполняется на хосте, он определяет операцию установки сигнала события, которая устанавливает событие в сигнализируемое состояние.

Если event уже находится в сигнализируемом состоянии, когда выполняется vkSetEvent, то vkSetEvent не оказывает никакого действия, и операция установки сигнала события не происходит.

Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • event должен быть допустимой дескриптором VkEvent
  • event должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к event должен быть синхронизирован внешним образом
Коды возврата
Успех
  • VK_SUCCESS
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY

См. также

VkDevice, VkEvent

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkSetEvent

vkUnmapMemory(3)

Имя

vkUnmapMemory - Отмена отображения ранее отображенного объекта памяти

Спецификация C

Для отмены отображения объекта памяти, когда доступ к нему с хоста больше не нужен приложению, вызовите:

void vkUnmapMemory(
    VkDevice                                    device,
    VkDeviceMemory                              memory);

Параметры

  • device - это логическое устройство, которому принадлежит память.
  • memory - это объект памяти, отображение которого необходимо отменить.

Описание

Допустимое использование
  • memory должен в данный момент быть отображен
Допустимое использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • memory должен быть допустимой дескриптором VkDeviceMemory
  • memory должен быть создан, выделен или получен из device
Синхронизация хоста
  • Доступ хоста к memory должен быть синхронизирован внешним образом

См. также

VkDevice, VkDeviceMemory

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkUnmapMemory

vkUpdateDescriptorSets(3)

Имя

vkUpdateDescriptorSets - Обновление содержимого объекта набора дескрипторов

Спецификация C

После выделения наборы дескрипторов могут быть обновлены с помощью комбинации операций записи и копирования. Для обновления наборов дескрипторов вызовите:

void vkUpdateDescriptorSets(
    VkDevice                                    device,
    uint32_t                                    descriptorWriteCount,
    const VkWriteDescriptorSet*                 pDescriptorWrites,
    uint32_t                                    descriptorCopyCount,
    const VkCopyDescriptorSet*                  pDescriptorCopies);

Параметры

  • device - это логическое устройство, которое обновляет наборы дескрипторов.
  • descriptorWriteCount - это количество элементов в массиве pDescriptorWrites.
  • pDescriptorWrites - это указатель на массив структур VkWriteDescriptorSet, описывающих наборы дескрипторов для записи.
  • descriptorCopyCount - это количество элементов в массиве pDescriptorCopies.
  • pDescriptorCopies - это указатель на массив структур VkCopyDescriptorSet, описывающих наборы дескрипторов для копирования между ними.

Описание

Операции, описанные pDescriptorWrites, выполняются первыми, за которыми следуют операции, описанные pDescriptorCopies. Внутри каждого массива операции выполняются в том порядке, в котором они появляются в массиве.

Каждый элемент в массиве pDescriptorWrites описывает операцию обновления набора дескрипторов с использованием дескрипторов для ресурсов, указанных в структуре.

Каждый элемент в массиве pDescriptorCopies представляет собой структуру VkCopyDescriptorSet, описывающую операцию копирования дескрипторов между наборами.

Если член dstSet любого заданного элемента pDescriptorWrites или pDescriptorCopies связан, доступен или изменен любой командой, которая была записана в буфер команд, который в данный момент находится в состоянии записи или выполнении, этот буфер команд становится недействительным.

Правильное использование
  • Элемент dstSet любого данного элемента pDescriptorWrites или pDescriptorCopies не должен использоваться ни одной командой, которая была записана в буфер команд, находящийся в состоянии ожидания.
Правильное использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • Если descriptorWriteCount не 0, pDescriptorWrites должен быть указателем на массив из descriptorWriteCount допустимых структур VkWriteDescriptorSet
  • Если descriptorCopyCount не 0, pDescriptorCopies должен быть указателем на массив из descriptorCopyCount допустимых структур VkCopyDescriptorSet
Синхронизация хоста
  • Доступ хоста к pDescriptorWrites[].dstSet должен быть внешне синхронизирован
  • Доступ хоста к pDescriptorCopies[].dstSet должен быть внешне синхронизирован

См. также

VkCopyDescriptorSet, VkDevice, VkWriteDescriptorSet

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkUpdateDescriptorSets

vkWaitForFences(3)

Имя

vkWaitForFences - Ожидание сигнализации одного или нескольких ограждений

Спецификация C

Чтобы дождаться перехода одного или нескольких ограждений в сигнализированное состояние на хосте, вызовите:

VkResult vkWaitForFences(
    VkDevice                                    device,
    uint32_t                                    fenceCount,
    const VkFence*                              pFences,
    VkBool32                                    waitAll,
    uint64_t                                    timeout);

Параметры

  • device — логическое устройство, которому принадлежат ограждения.
  • fenceCount — количество ограждений, ожидания которых необходимо дождаться.
  • pFences — указатель на массив дескрипторов ограждений fenceCount.
  • waitAll — условие, которое должно быть выполнено для успешного разблокирования ожидания. Если waitAll равно VK_TRUE, то условие состоит в том, что все ограждения в pFences сигнализированы. В противном случае условие состоит в том, что по крайней мере одно ограждение в pFences сигнализировано.
  • timeout — период ожидания в наносекундах. timeout корректируется до ближайшего значения, допустимого точностью времени ожидания, зависящей от реализации, которая может значительно превышать одну наносекунду и может быть больше запрошенного периода.

Описание

Если условие выполняется при вызове vkWaitForFences, то vkWaitForFences возвращается немедленно. Если условие не выполняется в момент вызова vkWaitForFences, то vkWaitForFences будет блокироваться и ожидать до timeout наносекунд выполнения условия.

Если timeout равно нулю, то vkWaitForFences не ждет, а просто возвращает текущее состояние ограждений. VK_TIMEOUT будет возвращено в этом случае, если условие не выполнено, даже если фактическое ожидание не выполнялось.

Если произошла потеря устройства (см. Потеря устройства) до истечения периода ожидания, vkWaitForFences должен возвратить значение за конечное время либо VK_SUCCESS, либо VK_DEVICE_LOST.

Примечание

Хотя мы гарантируем, что vkWaitForFences должен возвращаться за конечное время, никаких гарантий не дается, что он вернется немедленно после потери устройства. Тем не менее, клиент может обоснованно ожидать, что задержка будет порядка секунд, и что вызов vkWaitForFences не приведет к постоянно (или, по-видимому, постоянно) зависшему процессу.

Правильное использование (неявное)
  • device должен быть допустимой дескриптором VkDevice
  • pFences должен быть указателем на массив из fenceCount допустимых дескрипторов VkFence
  • fenceCount должен быть больше 0
  • Каждый элемент pFences должен быть создан, выделен или получен из device
Коды возврата
Успех
  • VK_SUCCESS
  • VK_TIMEOUT
Ошибка
  • VK_ERROR_OUT_OF_HOST_MEMORY
  • VK_ERROR_OUT_OF_DEVICE_MEMORY
  • VK_ERROR_DEVICE_LOST

См. также

VkBool32, VkDevice, VkFence

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#vkWaitForFences

Дескрипторы объектов

VkBuffer(3)

Имя

VkBuffer - Непрозрачный дескриптор объекта буфера

Спецификация C

Буферы представляют собой линейные массивы данных, которые используются для различных целей путем привязки их к графическому или вычислительному конвейеру через наборы дескрипторов или через определенные команды, или путем непосредственного указания их в качестве параметров для определенных команд.

Буферы представлены дескрипторами VkBuffer:

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)

См. также

VkBufferMemoryBarrier, VkBufferViewCreateInfo, VkDescriptorBufferInfo, VkSparseBufferMemoryBindInfo, vkBindBufferMemory, vkCmdBindIndexBuffer, vkCmdBindVertexBuffers, vkCmdCopyBuffer, vkCmdCopyBufferToImage, vkCmdCopyImageToBuffer, vkCmdCopyQueryPoolResults, vkCmdDispatchIndirect, vkCmdDrawIndexedIndirect, vkCmdDrawIndirect, vkCmdFillBuffer, vkCmdUpdateBuffer, vkCreateBuffer, vkDestroyBuffer, vkGetBufferMemoryRequirements

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBuffer

VkBufferView(3)

Имя

VkBufferView - Непрозрачный дескриптор объекта представления буфера

Спецификация C

Представление буфера представляет собой непрерывный диапазон буфера и определенный формат, который будет использоваться для интерпретации данных. Представления буферов используются для того, чтобы шейдеры могли получать доступ к содержимому буфера, интерпретируемому как данные с определенным форматом. Для создания допустимого представления буфера буфер должен быть создан по крайней мере с одним из следующих флагов использования:

  • VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
  • VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT

Представления буферов представлены дескрипторами VkBufferView:

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)

См. также

VkWriteDescriptorSet, vkCreateBufferView, vkDestroyBufferView

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferView

VkCommandBuffer(3)

Имя

VkCommandBuffer - Непрозрачный дескриптор объекта буфера команд

Спецификация C

Буферы команд — это объекты, используемые для записи команд, которые могут впоследствии отправляться в очередь устройства для выполнения. Существуют два уровня буферов команд — основные буферы команд, которые могут выполнять вспомогательные буферы команд и которые отправляются в очереди, и вспомогательные буферы команд, которые могут выполняться основными буферами команд и которые не отправляются непосредственно в очереди.

Буферы команд представлены дескрипторами VkCommandBuffer:

VK_DEFINE_HANDLE(VkCommandBuffer)

См. также

VkSubmitInfo, vkAllocateCommandBuffers, vkBeginCommandBuffer, vkCmdBeginQuery, vkCmdBeginRenderPass, vkCmdBindDescriptorSets, vkCmdBindIndexBuffer, vkCmdBindPipeline, vkCmdBindVertexBuffers, vkCmdBlitImage, vkCmdClearAttachments, vkCmdClearColorImage, vkCmdClearDepthStencilImage, vkCmdCopyBuffer, vkCmdCopyBufferToImage, vkCmdCopyImage, vkCmdCopyImageToBuffer, vkCmdCopyQueryPoolResults, vkCmdDispatch, vkCmdDispatchIndirect, vkCmdDraw, vkCmdDrawIndexed, vkCmdDrawIndexedIndirect, vkCmdDrawIndirect, vkCmdEndQuery, vkCmdEndRenderPass, vkCmdExecuteCommands, vkCmdFillBuffer, vkCmdNextSubpass, vkCmdPipelineBarrier, vkCmdPushConstants, vkCmdResetEvent, vkCmdResetQueryPool, vkCmdResolveImage, vkCmdSetBlendConstants, vkCmdSetDepthBias, vkCmdSetDepthBounds, vkCmdSetEvent, vkCmdSetLineWidth, vkCmdSetScissor, vkCmdSetStencilCompareMask, vkCmdSetStencilReference, vkCmdSetStencilWriteMask, vkCmdSetViewport, vkCmdUpdateBuffer, vkCmdWaitEvents, vkCmdWriteTimestamp, vkEndCommandBuffer, vkFreeCommandBuffers, vkResetCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandBuffer

VkCommandPool(3)

Имя

VkCommandPool - Непрозрачная дескрипторная ссылка на объект пула команд

C Спецификация

Пулы команд — это непрозрачные объекты, из которых выделяется память буфера команд, и которые позволяют реализации амортизировать затраты на создание ресурсов для нескольких буферов команд. Пулы команд являются внешне синхронизированными, а это значит, что пул команд не должен использоваться одновременно в нескольких потоках. Это включает использование с помощью записи команд в любых буферах команд, выделенных из пула, а также операции, которые выделяют, освобождают и сбрасывают буферы команд или сам пул.

Пулы команд представлены дескрипторами VkCommandPool:

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)

См. также

VkCommandBufferAllocateInfo, vkCreateCommandPool, vkDestroyCommandPool, vkFreeCommandBuffers, vkResetCommandPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandPool

VkDescriptorPool(3)

Имя

VkDescriptorPool - Непрозрачная дескрипторная ссылка на объект пула дескрипторов

C Спецификация

Пул дескрипторов поддерживает пул дескрипторов, из которого выделяются наборы дескрипторов. Пулы дескрипторов являются внешне синхронизированными, а это значит, что приложение не должно выделять и/или освобождать наборы дескрипторов из одного и того же пула в нескольких потоках одновременно.

Пулы дескрипторов представлены дескрипторами VkDescriptorPool:

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)

См. также

VkDescriptorSetAllocateInfo, vkCreateDescriptorPool, vkDestroyDescriptorPool, vkFreeDescriptorSets, vkResetDescriptorPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorPool

VkDescriptorSet(3)

Имя

VkDescriptorSet - Непрозрачная дескрипторная ссылка на объект набора дескрипторов

C Спецификация

Наборы дескрипторов выделяются из объектов пула дескрипторов и представлены дескрипторами VkDescriptorSet:

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)

См. также

VkCopyDescriptorSet, VkWriteDescriptorSet, vkAllocateDescriptorSets, vkCmdBindDescriptorSets, vkFreeDescriptorSets

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorSet

VkDescriptorSetLayout(3)

Имя

VkDescriptorSetLayout - Непрозрачная дескрипторная ссылка на объект компоновки набора дескрипторов

C Спецификация

Объект компоновки набора дескрипторов определяется массивом из нуля или более привязок дескрипторов. Каждая отдельная привязка дескриптора задается типом дескриптора, количеством (размером массива) дескрипторов в привязке, набором этапов шейдера, которые могут получить доступ к привязке, и (при использовании неизменяемых семплеров) массивом дескрипторов семплеров.

Объекты компоновки набора дескрипторов представлены дескрипторами VkDescriptorSetLayout:

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)

См. также

VkDescriptorSetAllocateInfo, VkPipelineLayoutCreateInfo, vkCreateDescriptorSetLayout, vkDestroyDescriptorSetLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorSetLayout

VkDevice(3)

Имя

VkDevice - Непрозрачная дескрипторная ссылка на объект устройства

C Спецификация

Логические устройства представлены дескрипторами VkDevice:

VK_DEFINE_HANDLE(VkDevice)

См. также

vkAllocateCommandBuffers, vkAllocateDescriptorSets, vkAllocateMemory, vkBindBufferMemory, vkBindImageMemory, vkCreateBuffer, vkCreateBufferView, vkCreateCommandPool, vkCreateComputePipelines, vkCreateDescriptorPool, vkCreateDescriptorSetLayout, vkCreateDevice, vkCreateEvent, vkCreateFence, vkCreateFramebuffer, vkCreateGraphicsPipelines, vkCreateImage, vkCreateImageView, vkCreatePipelineCache, vkCreatePipelineLayout, vkCreateQueryPool, vkCreateRenderPass, vkCreateSampler, vkCreateSemaphore, vkCreateShaderModule, vkDestroyBuffer, vkDestroyBufferView, vkDestroyCommandPool, vkDestroyDescriptorPool, vkDestroyDescriptorSetLayout, vkDestroyDevice, vkDestroyEvent, vkDestroyFence, vkDestroyFramebuffer, vkDestroyImage, vkDestroyImageView, vkDestroyPipeline, vkDestroyPipelineCache, vkDestroyPipelineLayout, vkDestroyQueryPool, vkDestroyRenderPass, vkDestroySampler, vkDestroySemaphore, vkDestroyShaderModule, vkDeviceWaitIdle, vkFlushMappedMemoryRanges, vkFreeCommandBuffers, vkFreeDescriptorSets, vkFreeMemory, vkGetBufferMemoryRequirements, vkGetDeviceMemoryCommitment, vkGetDeviceProcAddr, vkGetDeviceQueue, vkGetEventStatus, vkGetFenceStatus, vkGetImageMemoryRequirements, vkGetImageSparseMemoryRequirements, vkGetImageSubresourceLayout, vkGetPipelineCacheData, vkGetQueryPoolResults, vkGetRenderAreaGranularity, vkInvalidateMappedMemoryRanges, vkMapMemory, vkMergePipelineCaches, vkResetCommandPool, vkResetDescriptorPool, vkResetEvent, vkResetFences, vkSetEvent, vkUnmapMemory, vkUpdateDescriptorSets, vkWaitForFences

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDevice

VkDeviceMemory(3)

Имя

VkDeviceMemory - Непрозрачная дескрипторная переменная объекта памяти устройства

C Спецификация

Устройство Vulkan работает с данными в памяти устройства через объекты памяти, которые представлены в API дескриптором VkDeviceMemory.

Объекты памяти представлены дескрипторами VkDeviceMemory;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)

См. также

VkMappedMemoryRange, VkSparseImageMemoryBind, VkSparseMemoryBind, vkAllocateMemory, vkBindBufferMemory, vkBindImageMemory, vkFreeMemory, vkGetDeviceMemoryCommitment, vkMapMemory, vkUnmapMemory

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDeviceMemory

VkEvent(3)

Имя

VkEvent - Непрозрачная дескрипторная переменная объекта события

C Спецификация

События — это примитив синхронизации, который может использоваться для вставки мелкозернистой зависимости между командами, отправленными в одну и ту же очередь, или между хостом и очередью. События имеют два состояния — сигнальное и несигнальное. Приложение может установить сигнальное событие или снять его сигнал на хосте или устройстве. Устройство может ожидать, пока событие не станет сигнальным, прежде чем выполнять дальнейшие операции. Команды ожидания события, пока оно не станет сигнальным на хосте, не существует, но текущее состояние события можно запросить.

События представлены дескрипторами VkEvent;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)

См. также

vkCmdResetEvent, vkCmdSetEvent, vkCmdWaitEvents, vkCreateEvent, vkDestroyEvent, vkGetEventStatus, vkResetEvent, vkSetEvent

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkEvent

VkFence(3)

Имя

VkFence - Непрозрачная дескрипторная переменная объекта ограждения

C Спецификация

Ограждения — это примитив синхронизации, который может использоваться для вставки зависимости от очереди к хосту. Ограждения имеют два состояния — сигнальное и несигнальное. Ограждение может быть установлено в сигнальное состояние как часть выполнения команды отправки в очередь. Сигнал ограждения можно снять на хосте с помощью vkResetFences. Хост может ожидать ограждения с помощью команды vkWaitForFences, а текущее состояние можно запросить с помощью vkGetFenceStatus.

Ограждения представлены дескрипторами VkFence;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)

См. также

vkCreateFence, vkDestroyFence, vkGetFenceStatus, vkQueueBindSparse, vkQueueSubmit, vkResetFences, vkWaitForFences

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFence

VkFramebuffer(3)

Имя

VkFramebuffer - Непрозрачная дескрипторная переменная объекта фреймбуфера

C Спецификация

Процессы отрисовки работают в сочетании с фреймбуферами. Фреймбуферы представляют собой набор конкретных вложений памяти, которые использует экземпляр процесса отрисовки.

Фреймбуферы представлены дескрипторами VkFramebuffer;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)

См. также

VkCommandBufferInheritanceInfo, VkRenderPassBeginInfo, vkCreateFramebuffer, vkDestroyFramebuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFramebuffer

VkImage(3)

Имя

VkImage - Непрозрачная дескрипторная переменная объекта изображения

C Спецификация

Изображения представляют собой многомерные — до 3 — массивы данных, которые могут использоваться для различных целей (например, вложения, текстуры), связывая их с графическим или вычислительным конвейером через наборы дескрипторов или напрямую указывая их в качестве параметров для определенных команд.

Изображения представлены дескрипторами VkImage;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)

См. также

VkImageMemoryBarrier, VkImageViewCreateInfo, VkSparseImageMemoryBindInfo, VkSparseImageOpaqueMemoryBindInfo, vkBindImageMemory, vkCmdBlitImage, vkCmdClearColorImage, vkCmdClearDepthStencilImage, vkCmdCopyBufferToImage, vkCmdCopyImage, vkCmdCopyImageToBuffer, vkCmdResolveImage, vkCreateImage, vkDestroyImage, vkGetImageMemoryRequirements, vkGetImageSparseMemoryRequirements, vkGetImageSubresourceLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImage

VkImageView(3)

Имя

VkImageView - Непрозрачная дескрипторная переменная объекта представления изображения

C Спецификация

Объекты изображений не доступны напрямую шейдерам конвейера для чтения или записи данных изображения. Вместо этого для этой цели используются представления изображений, представляющие собой непрерывные диапазоны подобъектов изображения и содержащие дополнительные метаданные. Представления должны быть созданы на изображениях совместимых типов и должны представлять собой допустимое подмножество подобъектов изображения.

Представления изображений представлены дескрипторами VkImageView;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)

См. также

VkDescriptorImageInfo, VkFramebufferCreateInfo, vkCreateImageView, vkDestroyImageView

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageView

VkInstance(3)

Имя

VkInstance - Непрозрачный дескриптор объекта экземпляра

C-спецификация

В Vulkan отсутствует глобальное состояние, и все состояние на уровне приложения хранится в объекте VkInstance. Создание объекта VkInstance инициализирует библиотеку Vulkan и позволяет приложению передавать информацию о себе в реализацию.

Экземпляры представлены дескрипторами VkInstance;

VK_DEFINE_HANDLE(VkInstance)

См. также

vkCreateInstance, vkDestroyInstance, vkEnumeratePhysicalDevices, vkGetInstanceProcAddr

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkInstance

VkPhysicalDevice(3)

Имя

VkPhysicalDevice - Непрозрачный дескриптор объекта физического устройства

C-спецификация

Vulkan разделяет концепции физических и логических устройств. Физическое устройство обычно представляет собой одно устройство в системе (возможно, состоящее из нескольких отдельных аппаратных устройств, работающих вместе), количество которых конечно. Логическое устройство представляет собой представление устройства приложением.

Физические устройства представлены дескрипторами VkPhysicalDevice;

VK_DEFINE_HANDLE(VkPhysicalDevice)

См. также

vkCreateDevice, vkEnumerateDeviceExtensionProperties, vkEnumerateDeviceLayerProperties, vkEnumeratePhysicalDevices, vkGetPhysicalDeviceFeatures, vkGetPhysicalDeviceFormatProperties, vkGetPhysicalDeviceImageFormatProperties, vkGetPhysicalDeviceMemoryProperties, vkGetPhysicalDeviceProperties, vkGetPhysicalDeviceQueueFamilyProperties, vkGetPhysicalDeviceSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPhysicalDevice

VkPipeline(3)

Имя

VkPipeline - Непрозрачный дескриптор объекта конвейера

C-спецификация

Вычислительные и графические конвейеры представлены дескрипторами VkPipeline;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)

См. также

VkComputePipelineCreateInfo, VkGraphicsPipelineCreateInfo, vkCmdBindPipeline, vkCreateComputePipelines, vkCreateGraphicsPipelines, vkDestroyPipeline

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipeline

VkPipelineCache(3)

Имя

VkPipelineCache - Непрозрачный дескриптор объекта кэша конвейеров

C-спецификация

Объекты кэша конвейеров позволяют повторно использовать результат построения конвейера между конвейерами и между запусками приложения. Повторное использование между конвейерами достигается путем передачи одного и того же объекта кэша конвейеров при создании нескольких связанных конвейеров. Повторное использование между запусками приложения достигается путем извлечения содержимого кэша конвейеров в одном запуске приложения, сохранения содержимого и использования его для предварительной инициализации кэша конвейеров при последующем запуске. Содержимое объектов кэша конвейеров управляется реализацией. Приложения могут управлять памятью хоста, потребляемой объектом кэша конвейеров, и контролировать объем данных, извлекаемых из объекта кэша конвейеров.

Объекты кэша конвейеров представлены дескрипторами VkPipelineCache;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)

См. также

vkCreateComputePipelines, vkCreateGraphicsPipelines, vkCreatePipelineCache, vkDestroyPipelineCache, vkGetPipelineCacheData, vkMergePipelineCaches

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineCache

VkPipelineLayout(3)

Имя

VkPipelineLayout - Непрозрачный дескриптор объекта компоновки конвейера

C-спецификация

Доступ к наборам дескрипторов из конвейера осуществляется через компоновку конвейера. Нуль или более компоновок наборов дескрипторов и нуль или более диапазонов константных данных объединяются для формирования объекта компоновки конвейера, который описывает полный набор ресурсов, к которым можно получить доступ из конвейера. Компоновка конвейера представляет собой последовательность наборов дескрипторов, каждый из которых имеет определенную компоновку. Эта последовательность компоновок используется для определения интерфейса между этапами шейдера и ресурсами шейдера. Каждый конвейер создается с использованием компоновки конвейера.

Объекты компоновки конвейера представлены дескрипторами VkPipelineLayout;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)

См. также

VkComputePipelineCreateInfo, VkGraphicsPipelineCreateInfo, vkCmdBindDescriptorSets, vkCmdPushConstants, vkCreatePipelineLayout, vkDestroyPipelineLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineLayout

VkQueryPool(3)

Имя

VkQueryPool - Непрозрачный дескриптор объекта пула запросов

C-спецификация

Запросы управляются с помощью объектов пула запросов. Каждый пул запросов представляет собой набор определенного количества запросов определенного типа.

Пулы запросов представлены дескрипторами VkQueryPool;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)

См. также

vkCmdBeginQuery, vkCmdCopyQueryPoolResults, vkCmdEndQuery, vkCmdResetQueryPool, vkCmdWriteTimestamp, vkCreateQueryPool, vkDestroyQueryPool, vkGetQueryPoolResults

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryPool

VkQueue(3)

Имя

VkQueue - Непрозрачный дескриптор объекта очереди

C-спецификация

Создание логического устройства также создает очереди, связанные с этим устройством. Очереди для создания описываются набором структур VkDeviceQueueCreateInfo, которые передаются в vkCreateDevice в pQueueCreateInfos.

Очереди представлены дескрипторами VkQueue;

VK_DEFINE_HANDLE(VkQueue)

См. также

vkGetDeviceQueue, vkQueueBindSparse, vkQueueSubmit, vkQueueWaitIdle

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueue

VkRenderPass(3)

Имя

VkRenderPass - Непрозрачный дескриптор объекта прохода рендеринга

C-спецификация

Проход рендеринга представляет собой набор вложений, подпроходов и зависимостей между подпроходами и описывает, как используются вложения в течение подпроходов. Использование прохода рендеринга в буфере команд представляет собой экземпляр прохода рендеринга.

Проходы рендеринга представлены дескрипторами VkRenderPass;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)

См. также

VkCommandBufferInheritanceInfo, VkFramebufferCreateInfo, VkGraphicsPipelineCreateInfo, VkRenderPassBeginInfo, vkCreateRenderPass, vkDestroyRenderPass, vkGetRenderAreaGranularity

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkRenderPass

VkSampler(3)

Имя

VkSampler - Непрозрачная дескриптор объекта семплера

C Спецификация

VkSampler объекты представляют состояние семплера изображения, который используется реализацией для чтения данных изображения и применения фильтрации и других преобразований для шейдера.

Семплеры представлены дескрипторами VkSampler;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)

См. также

VkDescriptorImageInfo, VkDescriptorSetLayoutBinding, vkCreateSampler, vkDestroySampler

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSampler

VkSemaphore(3)

Имя

VkSemaphore - Непрозрачная дескриптор объекта семафора

C Спецификация

Семафоры — это примитив синхронизации, который может использоваться для вставки зависимости между пакетами, отправляемыми в очереди. Семафоры имеют два состояния — сигнальный и несигнальный. Состояние семафора может быть установлено в сигнальное после завершения выполнения пакета команд. Пакет может ожидать, пока семафор не станет сигнальным, прежде чем начать выполнение, и семафор также устанавливается в несигнальное состояние перед началом выполнения пакета.

Семафоры представлены дескрипторами VkSemaphore;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)

См. также

VkBindSparseInfo, VkSubmitInfo, vkCreateSemaphore, vkDestroySemaphore

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSemaphore

VkShaderModule(3)

Имя

VkShaderModule - Непрозрачная дескриптор объекта модуля шейдера

C Спецификация

Модули шейдеров содержат код шейдера и одну или несколько точек входа. Шейдеры выбираются из модуля шейдера путем указания точки входа в рамках создания конвейера. Этапы конвейера могут использовать шейдеры из разных модулей. Код шейдера, определяющий модуль шейдера, должен быть в формате SPIR-V, как описано в приложении Vulkan Environment for SPIR-V.

Модули шейдеров представлены дескрипторами VkShaderModule;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)

См. также

VkPipelineShaderStageCreateInfo, vkCreateShaderModule, vkDestroyShaderModule

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkShaderModule

Структуры

VkAllocationCallbacks(3)

Имя

VkAllocationCallbacks - Структура, содержащая указатели на функции обратного вызова для выделения памяти

C Спецификация

Выделители предоставляются приложением в виде указателя на структуру VkAllocationCallbacks;

typedef struct VkAllocationCallbacks {
    void*                                   pUserData;
    PFN_vkAllocationFunction                pfnAllocation;
    PFN_vkReallocationFunction              pfnReallocation;
    PFN_vkFreeFunction                      pfnFree;
    PFN_vkInternalAllocationNotification    pfnInternalAllocation;
    PFN_vkInternalFreeNotification          pfnInternalFree;
} VkAllocationCallbacks;

Члены

  • pUserData — это значение, которое должно интерпретироваться реализацией обратных вызовов. Когда вызывается любой из обратных вызовов в VkAllocationCallbacks, реализация Vulkan передаст это значение в качестве первого параметра обратного вызова. Это значение может изменяться каждый раз, когда выделятель передается в команду, даже когда один и тот же объект принимает выделятель в нескольких командах.
  • pfnAllocation — это указатель на функцию выделения памяти, определяемую приложением, типа PFN_vkAllocationFunction.
  • pfnReallocation — это указатель на функцию перераспределения памяти, определяемую приложением, типа PFN_vkReallocationFunction.
  • pfnFree — это указатель на функцию освобождения памяти, определяемую приложением, типа PFN_vkFreeFunction.
  • pfnInternalAllocation — это указатель на функцию, определяемую приложением, которая вызывается реализацией, когда реализация выполняет внутренние выделения, и она имеет тип PFN_vkInternalAllocationNotification.
  • pfnInternalFree — это указатель на функцию, определяемую приложением, которая вызывается реализацией, когда реализация освобождает внутренние выделения, и она имеет тип PFN_vkInternalFreeNotification.

Описание

Правильное использование
  • pfnAllocation должен быть указателем на допустимую определяемую пользователем функцию PFN_vkAllocationFunction
  • pfnReallocation должен быть указателем на допустимую определяемую пользователем функцию PFN_vkReallocationFunction
  • pfnFree должен быть указателем на допустимую определяемую пользователем функцию PFN_vkFreeFunction
  • Если ни pfnInternalAllocation, ни pfnInternalFree не является NULL, то оба должны быть допустимыми обратными вызовами

См. также

PFN_vkAllocationFunction, PFN_vkFreeFunction, PFN_vkInternalAllocationNotification, PFN_vkInternalFreeNotification, PFN_vkReallocationFunction, vkAllocateMemory, vkCreateBuffer, vkCreateBufferView, vkCreateCommandPool, vkCreateComputePipelines, vkCreateDescriptorPool, vkCreateDescriptorSetLayout, vkCreateDevice, vkCreateEvent, vkCreateFence, vkCreateFramebuffer, vkCreateGraphicsPipelines, vkCreateImage, vkCreateImageView, vkCreateInstance, vkCreatePipelineCache, vkCreatePipelineLayout, vkCreateQueryPool, vkCreateRenderPass, vkCreateSampler, vkCreateSemaphore, vkCreateShaderModule, vkDestroyBuffer, vkDestroyBufferView, vkDestroyCommandPool, vkDestroyDescriptorPool, vkDestroyDescriptorSetLayout, vkDestroyDevice, vkDestroyEvent, vkDestroyFence, vkDestroyFramebuffer, vkDestroyImage, vkDestroyImageView, vkDestroyInstance, vkDestroyPipeline, vkDestroyPipelineCache, vkDestroyPipelineLayout, vkDestroyQueryPool, vkDestroyRenderPass, vkDestroySampler, vkDestroySemaphore, vkDestroyShaderModule, vkFreeMemory

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkAllocationCallbacks

VkApplicationInfo(3)

Имя

VkApplicationInfo - Структура, указывающая информацию о приложении

C Спецификация

Структура VkApplicationInfo определена как:

typedef struct VkApplicationInfo {
    VkStructureType    sType;
    const void*        pNext;
    const char*        pApplicationName;
    uint32_t           applicationVersion;
    const char*        pEngineName;
    uint32_t           engineVersion;
    uint32_t           apiVersion;
} VkApplicationInfo;

Члены

  • sType — это тип этой структуры.
  • pNext — это NULL или указатель на структуру, специфичную для расширения.
  • pApplicationName — это NULL или указатель на завершающуюся нулём строку UTF-8, содержащую имя приложения.
  • applicationVersion — это переменная без знака целого числа, содержащая предоставленный разработчиком номер версии приложения.
  • pEngineName — это NULL или указатель на завершающуюся нулём строку UTF-8, содержащую имя движка (если таковой имеется), используемого для создания приложения.
  • engineVersion — это переменная без знака целого числа, содержащая предоставленный разработчиком номер версии движка, используемого для создания приложения.
  • apiVersion — это версия API Vulkan, с которой приложение ожидает работать, закодированная, как описано в разделе API Version Numbers and Semantics. Если apiVersion равно 0, реализация должна игнорировать его, в противном случае, если реализация не поддерживает запрашиваемую версию apiVersion, или эффективный заменитель для apiVersion, она должна вернуть VK_ERROR_INCOMPATIBLE_DRIVER. Номер версии патча, указанный в apiVersion, игнорируется при создании объекта экземпляра. Только основные и второстепенные версии экземпляра должны совпадать с теми, которые запрошены в apiVersion.

Описание

Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_APPLICATION_INFO
  • pNext должно быть NULL
  • Если pApplicationName не NULL, pApplicationName должно быть строкой UTF-8 с завершающим нулем
  • Если pEngineName не NULL, pEngineName должно быть строкой UTF-8 с завершающим нулем

См. также

VkInstanceCreateInfo, VkStructureType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkApplicationInfo

VkAttachmentDescription(3)

Имя

VkAttachmentDescription - Структура, определяющая описание вложения

C-спецификация

Структура VkAttachmentDescription определяется как:

typedef struct VkAttachmentDescription {
    VkAttachmentDescriptionFlags    flags;
    VkFormat                        format;
    VkSampleCountFlagBits           samples;
    VkAttachmentLoadOp              loadOp;
    VkAttachmentStoreOp             storeOp;
    VkAttachmentLoadOp              stencilLoadOp;
    VkAttachmentStoreOp             stencilStoreOp;
    VkImageLayout                   initialLayout;
    VkImageLayout                   finalLayout;
} VkAttachmentDescription;

Члены

  • flags - это битовая маска VkAttachmentDescriptionFlagBits, указывающая дополнительные свойства вложения.
  • format - это значение VkFormat, указывающее формат изображения, которое будет использоваться для вложения.
  • samples - это количество выборок изображения, как определено в VkSampleCountFlagBits.
  • loadOp - это значение VkAttachmentLoadOp, указывающее, как обрабатывается содержимое цветовых и глубинных компонентов вложения в начале подпрохода, где оно используется впервые.
  • storeOp - это значение VkAttachmentStoreOp, указывающее, как обрабатывается содержимое цветовых и глубинных компонентов вложения в конце подпрохода, где оно используется в последний раз.
  • stencilLoadOp - это значение VkAttachmentLoadOp, указывающее, как обрабатывается содержимое трафаретных компонентов вложения в начале подпрохода, где оно используется впервые.
  • stencilStoreOp - это значение VkAttachmentStoreOp, указывающее, как обрабатывается содержимое трафаретных компонентов вложения в конце последнего подпрохода, где оно используется.
  • initialLayout - это компоновка, в которой будет находиться подобъект изображения вложения, когда начинается экземпляр прохода рендеринга.
  • finalLayout - это компоновка, в которую будет переведен подобъект изображения вложения, когда заканчивается экземпляр прохода рендеринга. Во время экземпляра прохода рендеринга вложение может использовать другую компоновку в каждом подпроходе, если это необходимо.

Описание

Если вложение использует цветовой формат, то используются loadOp и storeOp, а stencilLoadOp и stencilStoreOp игнорируются. Если формат имеет компоненты глубины и/или трафарета, loadOp и storeOp применяются только к данным глубины, а stencilLoadOp и stencilStoreOp определяют, как обрабатываются данные трафарета. loadOp и stencilLoadOp определяют операции загрузки, которые выполняются как часть первого подпрохода, использующего вложение. storeOp и stencilStoreOp определяют операции хранения, которые выполняются как часть последнего подпрохода, использующего вложение.

Операция загрузки для каждой выборки во вложении происходит до любой записанной команды, которая обращается к выборке в первом подпроходе, где используется вложение. Операции загрузки для вложений с форматом глубины/трафарета выполняются на этапе конвейера VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT. Операции загрузки для вложений с цветовым форматом выполняются на этапе конвейера VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT.

Операция хранения для каждой выборки во вложении происходит после любой записанной команды, которая обращается к выборке в последнем подпроходе, где используется вложение. Операции хранения для вложений с форматом глубины/трафарета выполняются на этапе конвейера VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT. Операции хранения для вложений с цветовым форматом выполняются на этапе конвейера VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT.

Если вложение не используется ни одним подпроходом, то loadOp, storeOp, stencilStoreOp и stencilLoadOp игнорируются, и содержимое памяти вложения не будет изменено выполнением экземпляра прохода рендеринга.

Во время экземпляра прохода рендеринга входные/цветовые вложения с цветовыми форматами, имеющими размер компонента 8, 16 или 32 бита, должны быть представлены в формате вложения в течение всего экземпляра. Вложения с другими форматами цветов с плавающей или фиксированной точкой или с компонентами глубины могут быть представлены в формате с более высокой точностью, чем формат вложения, но должны быть представлены с тем же диапазоном. Когда такой компонент загружается с помощью loadOp, он будет преобразован в формат, зависящий от реализации, используемый проходом рендеринга. Такие компоненты должны быть преобразованы из формата прохода рендеринга в формат вложения, прежде чем они будут разрешены или сохранены в конце экземпляра прохода рендеринга через storeOp. Преобразования выполняются, как описано в Числовое представление и вычисления и Преобразования данных с фиксированной точкой.

Если flags включает VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT, то вложение обрабатывается так, как если бы оно совместно использовало физическую память с другим вложением в одном и том же проходе рендеринга. Эта информация ограничивает способность реализации переупорядочивать определенные операции (такие как переходы компоновки и loadOp) таким образом, чтобы она не была неправильно переупорядочена по отношению к другим использованиям той же физической памяти через другое вложение. Это описано более подробно ниже.

Допустимое использование
  • finalLayout не должно быть VK_IMAGE_LAYOUT_UNDEFINED или VK_IMAGE_LAYOUT_PREINITIALIZED
Допустимое использование (неявное)
  • flags должно быть допустимым сочетанием значений VkAttachmentDescriptionFlagBits
  • format должно быть допустимым значением VkFormat
  • samples должно быть допустимым значением VkSampleCountFlagBits
  • loadOp должно быть допустимым значением VkAttachmentLoadOp
  • storeOp должно быть допустимым значением VkAttachmentStoreOp
  • stencilLoadOp должно быть допустимым значением VkAttachmentLoadOp
  • stencilStoreOp должно быть допустимым значением VkAttachmentStoreOp
  • initialLayout должно быть допустимым значением VkImageLayout
  • finalLayout должно быть допустимым значением VkImageLayout

См. также

VkAttachmentDescriptionFlags, VkAttachmentLoadOp, VkAttachmentStoreOp, VkFormat, VkImageLayout, VkRenderPassCreateInfo, VkSampleCountFlagBits

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkAttachmentDescription

VkAttachmentReference(3)

Имя

VkAttachmentReference - Структура, определяющая ссылку на вложение

C-спецификация

Структура VkAttachmentReference определяется как:

typedef struct VkAttachmentReference {
    uint32_t         attachment;
    VkImageLayout    layout;
} VkAttachmentReference;

Члены

  • attachment - это индекс вложения прохода рендеринга, и соответствует индексу соответствующего элемента в массиве pAttachments структуры VkRenderPassCreateInfo. Если какие-либо цветовые или глубинные/трафаретные вложения VK_ATTACHMENT_UNUSED, то для этих вложений не происходит записи.
  • layout - это значение VkImageLayout, указывающее компоновку, используемую вложением во время подпрохода.

Описание

Допустимое использование
  • layout не должно быть VK_IMAGE_LAYOUT_UNDEFINED или VK_IMAGE_LAYOUT_PREINITIALIZED
Допустимое использование (неявное)
  • layout должно быть допустимым значением VkImageLayout

См. также

VkImageLayout, VkSubpassDescription

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkAttachmentReference

VkBindSparseInfo(3)

Имя

VkBindSparseInfo - Структура, определяющая операцию разреженного связывания

C-спецификация

Структура VkBindSparseInfo определяется как:

typedef struct VkBindSparseInfo {
    VkStructureType                             sType;
    const void*                                 pNext;
    uint32_t                                    waitSemaphoreCount;
    const VkSemaphore*                          pWaitSemaphores;
    uint32_t                                    bufferBindCount;
    const VkSparseBufferMemoryBindInfo*         pBufferBinds;
    uint32_t                                    imageOpaqueBindCount;
    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds;
    uint32_t                                    imageBindCount;
    const VkSparseImageMemoryBindInfo*          pImageBinds;
    uint32_t                                    signalSemaphoreCount;
    const VkSemaphore*                          pSignalSemaphores;
} VkBindSparseInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • waitSemaphoreCount is the number of semaphores upon which to wait before executing the sparse binding operations for the batch.
  • pWaitSemaphores is a pointer to an array of semaphores upon which to wait on before the sparse binding operations for this batch begin execution. If semaphores to wait on are provided, they define a semaphore wait operation.
  • bufferBindCount is the number of sparse buffer bindings to perform in the batch.
  • pBufferBinds is a pointer to an array of VkSparseBufferMemoryBindInfo structures.
  • imageOpaqueBindCount is the number of opaque sparse image bindings to perform.
  • pImageOpaqueBinds is a pointer to an array of VkSparseImageOpaqueMemoryBindInfo structures, indicating opaque sparse image bindings to perform.
  • imageBindCount is the number of sparse image bindings to perform.
  • pImageBinds is a pointer to an array of VkSparseImageMemoryBindInfo structures, indicating sparse image bindings to perform.
  • signalSemaphoreCount is the number of semaphores to be signaled once the sparse binding operations specified by the structure have completed execution.
  • pSignalSemaphores is a pointer to an array of semaphores which will be signaled when the sparse binding operations for this batch have completed execution. If semaphores to be signaled are provided, they define a semaphore signal operation.

Описание

Правильное использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_BIND_SPARSE_INFO
  • pNext должно быть NULL
  • Если waitSemaphoreCount не 0, pWaitSemaphores должно быть указателем на массив из waitSemaphoreCount допустимых VkSemaphore дескрипторов
  • Если bufferBindCount не 0, pBufferBinds должно быть указателем на массив из bufferBindCount допустимых VkSparseBufferMemoryBindInfo структур
  • Если imageOpaqueBindCount не 0, pImageOpaqueBinds должно быть указателем на массив из imageOpaqueBindCount допустимых VkSparseImageOpaqueMemoryBindInfo структур
  • Если imageBindCount не 0, pImageBinds должно быть указателем на массив из imageBindCount допустимых VkSparseImageMemoryBindInfo структур
  • Если signalSemaphoreCount не 0, pSignalSemaphores должно быть указателем на массив из signalSemaphoreCount допустимых VkSemaphore дескрипторов
  • Оба элемента pSignalSemaphores, и элементы pWaitSemaphores, являющиеся допустимыми дескрипторами, должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkSemaphore, VkSparseBufferMemoryBindInfo, VkSparseImageMemoryBindInfo, VkSparseImageOpaqueMemoryBindInfo, VkStructureType, vkQueueBindSparse

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBindSparseInfo

VkBufferCopy(3)

Имя

VkBufferCopy - Структура, определяющая операцию копирования буфера

C Спецификация

Структура VkBufferCopy определяется как:

typedef struct VkBufferCopy {
    VkDeviceSize    srcOffset;
    VkDeviceSize    dstOffset;
    VkDeviceSize    size;
} VkBufferCopy;

Члены

  • srcOffset is the starting offset in bytes from the start of srcBuffer.
  • dstOffset is the starting offset in bytes from the start of dstBuffer.
  • size is the number of bytes to copy.

См. также

VkDeviceSize, vkCmdCopyBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferCopy

VkBufferCreateInfo(3)

Имя

VkBufferCreateInfo - Структура, определяющая параметры вновь созданного объекта буфера

C Спецификация

Структура VkBufferCreateInfo определяется как:

typedef struct VkBufferCreateInfo {
    VkStructureType        sType;
    const void*            pNext;
    VkBufferCreateFlags    flags;
    VkDeviceSize           size;
    VkBufferUsageFlags     usage;
    VkSharingMode          sharingMode;
    uint32_t               queueFamilyIndexCount;
    const uint32_t*        pQueueFamilyIndices;
} VkBufferCreateInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • flags is a bitmask of VkBufferCreateFlagBits specifying additional parameters of the buffer.
  • size is the size in bytes of the buffer to be created.
  • usage is a bitmask of VkBufferUsageFlagBits specifying allowed usages of the buffer.
  • sharingMode is a VkSharingMode value specifying the sharing mode of the buffer when it will be accessed by multiple queue families.
  • queueFamilyIndexCount is the number of entries in the pQueueFamilyIndices array.
  • pQueueFamilyIndices is a list of queue families that will access this buffer (ignored if sharingMode is not VK_SHARING_MODE_CONCURRENT).

Описание

Правильное использование
  • size должно быть больше 0
  • Если sharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices должно быть указателем на массив из queueFamilyIndexCount uint32_t значений
  • Если sharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount должно быть больше 1
  • Если sharingMode is VK_SHARING_MODE_CONCURRENT, каждый элемент pQueueFamilyIndices должен быть уникальным и должен быть меньше pQueueFamilyPropertyCount возвращаемого vkGetPhysicalDeviceQueueFamilyProperties для physicalDevice, который был использован для создания device
  • Если функция sparse bindings не включена, flags не должно содержать VK_BUFFER_CREATE_SPARSE_BINDING_BIT
  • Если функция sparse buffer residency не включена, flags не должно содержать VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
  • Если функция sparse aliased residency не включена, flags не должно содержать VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
  • Если flags содержит VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT или VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, он также должен содержать VK_BUFFER_CREATE_SPARSE_BINDING_BIT
Правильное использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть допустимым сочетанием значений VkBufferCreateFlagBits
  • usage должно быть допустимым сочетанием значений VkBufferUsageFlagBits
  • usage не должно быть 0
  • sharingMode должно быть допустимым значением VkSharingMode

См. также

VkBufferCreateFlags, VkBufferUsageFlags, VkDeviceSize, VkSharingMode, VkStructureType, vkCreateBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferCreateInfo

VkBufferImageCopy(3)

Имя

VkBufferImageCopy - Структура, определяющая операцию копирования буфера изображения

C Спецификация

Для обоих vkCmdCopyBufferToImage и vkCmdCopyImageToBuffer, каждый элемент pRegions является структурой, определенной как:

typedef struct VkBufferImageCopy {
    VkDeviceSize                bufferOffset;
    uint32_t                    bufferRowLength;
    uint32_t                    bufferImageHeight;
    VkImageSubresourceLayers    imageSubresource;
    VkOffset3D                  imageOffset;
    VkExtent3D                  imageExtent;
} VkBufferImageCopy;

Члены

  • bufferOffset is the offset in bytes from the start of the buffer object where the image data is copied from or to.
  • bufferRowLength and bufferImageHeight specify the data in buffer memory as a subregion of a larger two- or three-dimensional image, and control the addressing calculations of data in buffer memory. If either of these values is zero, that aspect of the buffer memory is considered to be tightly packed according to the imageExtent.
  • imageSubresource is a VkImageSubresourceLayers used to specify the specific image subresources of the image used for the source or destination image data.
  • imageOffset selects the initial x, y, z offsets in texels of the sub-region of the source or destination image data.
  • imageExtent is the size in texels of the image to copy in width, height and depth.

Описание

При копировании в аспект глубины или трафарета, или из него, данные в буферной памяти используют макет, который представляет собой (в основном) плотно упакованное представление данных глубины или трафарета. В частности:

  • данные, копируемые в аспект трафарета любого формата глубины/трафарета или из него, плотно упакованы с одним значением VK_FORMAT_S8_UINT на тексел.
  • данные, копируемые в аспект глубины формата VK_FORMAT_D16_UNORM или VK_FORMAT_D16_UNORM_S8_UINT или из него, плотно упакованы с одним значением VK_FORMAT_D16_UNORM на тексел.
  • данные, копируемые в аспект глубины формата VK_FORMAT_D32_SFLOAT или VK_FORMAT_D32_SFLOAT_S8_UINT или из него, плотно упакованы с одним значением VK_FORMAT_D32_SFLOAT на тексел.
  • данные, копируемые в аспект глубины формата VK_FORMAT_X8_D24_UNORM_PACK32 или VK_FORMAT_D24_UNORM_S8_UINT или из него, упакованы с одним 32-битным словом на тексел, со значением D24 в младших битах слова и неопределенными значениями в восьми старших битах.
Примечание

Для копирования аспектов как глубины, так и трафарета формата глубины/трафарета можно использовать две записи в pRegions, где одна указывает аспект глубины в imageSubresource, а другая указывает аспект трафарета.

Поскольку копирование буфера аспекта глубины или трафарета в изображение может потребовать преобразования форматов на некоторых реализациях, они не поддерживаются в очередях, которые не поддерживают графику. При копировании в аспект глубины данные в буферной памяти должны находиться в диапазоне [0,1], иначе возникнут неопределенные результаты.

Копирование выполняется послойно, начиная со слоя изображения baseArrayLayer члена imageSubresource. Копируется layerCount слоев из исходного изображения или в целевое изображение.

Правильное использование
  • Если формат параметра VkImage вызывающей команды не является форматом глубины/трафарета, то bufferOffset должен быть кратен размеру элемента формата
  • bufferOffset должен быть кратен 4
  • bufferRowLength должен быть 0, или больше или равен члену width структуры imageExtent
  • bufferImageHeight должен быть 0, или больше или равен члену height структуры imageExtent
  • imageOffset.x и (imageExtent.width + imageOffset.x) должны быть больше или равны 0 и меньше или равны ширине подуровня изображения
  • imageOffset.y и (imageExtent.height + imageOffset.y) должны быть больше или равны 0 и меньше или равны высоте подуровня изображения
  • Если srcImage (vkCmdCopyImageToBuffer) или dstImage (vkCmdCopyBufferToImage) вызывающей команды имеет тип VK_IMAGE_TYPE_1D, то imageOffset.y должен быть 0, а imageExtent.height должен быть 1.
  • imageOffset.z и (imageExtent.depth + imageOffset.z) должны быть больше или равны 0 и меньше или равны глубине подуровня изображения
  • Если srcImage (vkCmdCopyImageToBuffer) или dstImage (vkCmdCopyBufferToImage) вызывающей команды имеет тип VK_IMAGE_TYPE_1D или VK_IMAGE_TYPE_2D, то imageOffset.z должен быть 0, а imageExtent.depth должен быть 1.
  • Если параметр VkImage вызывающей команды является изображением в сжатом формате, bufferRowLength должен быть кратен ширине сжатого блока текселей
  • Если параметр VkImage вызывающей команды является изображением в сжатом формате, bufferImageHeight должен быть кратен высоте сжатого блока текселей
  • Если параметр VkImage вызывающей команды является изображением в сжатом формате, все члены imageOffset должны быть кратны соответствующим размерам сжатого блока текселей
  • Если параметр VkImage вызывающей команды является изображением в сжатом формате, bufferOffset должен быть кратен размеру сжатого блока текселей в байтах
  • Если параметр VkImage вызывающей команды является изображением в сжатом формате, imageExtent.width должен быть кратен ширине сжатого блока текселей или (imageExtent.width + imageOffset.x) должны быть равны ширине подуровня изображения
  • Если параметр VkImage вызывающей команды является изображением в сжатом формате, imageExtent.height должен быть кратен высоте сжатого блока текселей или (imageExtent.height + imageOffset.y) должны быть равны высоте подуровня изображения
  • Если параметр VkImage вызывающей команды является изображением в сжатом формате, imageExtent.depth должен быть кратен глубине сжатого блока текселей или (imageExtent.depth + imageOffset.z) должны быть равны глубине подуровня изображения
  • bufferOffset, bufferRowLength, bufferImageHeight и все члены imageOffset и imageExtent должны соответствовать требованиям к гранулярности передачи изображений семейства очередей, против которого будет отправлена команда, как описано в Physical Device Enumeration
  • Член aspectMask структуры imageSubresource должен указывать аспекты, присутствующие в параметре VkImage вызывающей команды
  • Член aspectMask структуры imageSubresource должен иметь только один установленный бит
  • Если параметр VkImage вызывающей команды имеет тип VkImageType VK_IMAGE_TYPE_3D, члены baseArrayLayer и layerCount структуры imageSubresource должны быть 0 и 1, соответственно
  • При копировании в аспект глубины подуровня изображения данные в исходном буфере должны находиться в диапазоне [0,1]
Правильное использование (явное)
  • imageSubresource должен быть допустимой структурой VkImageSubresourceLayers

См. также

VkDeviceSize, VkExtent3D, VkImageSubresourceLayers, VkOffset3D, vkCmdCopyBufferToImage, vkCmdCopyImageToBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferImageCopy

VkBufferMemoryBarrier(3)

Имя

VkBufferMemoryBarrier - Структура, определяющая барьер памяти буфера

C-спецификация

Структура VkBufferMemoryBarrier определяется следующим образом:

typedef struct VkBufferMemoryBarrier {
    VkStructureType    sType;
    const void*        pNext;
    VkAccessFlags      srcAccessMask;
    VkAccessFlags      dstAccessMask;
    uint32_t           srcQueueFamilyIndex;
    uint32_t           dstQueueFamilyIndex;
    VkBuffer           buffer;
    VkDeviceSize       offset;
    VkDeviceSize       size;
} VkBufferMemoryBarrier;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • srcAccessMask is a bitmask of VkAccessFlagBits specifying a source access mask.
  • dstAccessMask is a bitmask of VkAccessFlagBits specifying a destination access mask.
  • srcQueueFamilyIndex is the source queue family for a queue family ownership transfer.
  • dstQueueFamilyIndex is the destination queue family for a queue family ownership transfer.
  • buffer is a handle to the buffer whose backing memory is affected by the barrier.
  • offset is an offset in bytes into the backing memory for buffer; this is relative to the base offset as bound to the buffer (see vkBindBufferMemory).
  • size is a size in bytes of the affected area of backing memory for buffer, or VK_WHOLE_SIZE to use the range from offset to the end of the buffer.

Описание

Первый область доступа ограничен доступом к памяти через указанный диапазон буфера, через типы доступа в маске исходного доступа, указанной srcAccessMask. Если srcAccessMask включает VK_ACCESS_HOST_WRITE_BIT, операции записи в память, выполняемые этим типом доступа, также становятся видимыми, поскольку этот тип доступа не выполняется через ресурс.

Вторая область доступа ограничен доступом к памяти через указанный диапазон буфера, через типы доступа в маске целевого доступа, указанной dstAccessMask. Если dstAccessMask включает VK_ACCESS_HOST_WRITE_BIT или VK_ACCESS_HOST_READ_BIT, доступные записи в память также становятся видимыми для доступов этих типов, поскольку эти типы доступа не выполняются через ресурс.

Если srcQueueFamilyIndex не равно dstQueueFamilyIndex, и srcQueueFamilyIndex равно текущему семейству очередей, то барьер памяти определяет операцию освобождения семейства очередей для указанного диапазона буфера, и вторая область доступа не включает доступ, как если бы dstAccessMask было 0.

Если dstQueueFamilyIndex не равно srcQueueFamilyIndex, и dstQueueFamilyIndex равно текущему семейству очередей, то барьер памяти определяет операцию приобретения семейства очередей для указанного диапазона буфера, и первая область доступа не включает доступ, как если бы srcAccessMask было 0.

Допустимое использование
  • offset должно быть меньше размера buffer
  • Если size не равно VK_WHOLE_SIZE, size должно быть больше 0
  • Если size не равно VK_WHOLE_SIZE, size должно быть меньше или равно размеру buffer минус offset
  • Если buffer был создан с режимом общего доступа VK_SHARING_MODE_CONCURRENT, srcQueueFamilyIndex и dstQueueFamilyIndex должны быть VK_QUEUE_FAMILY_IGNORED
  • Если buffer был создан с режимом общего доступа VK_SHARING_MODE_EXCLUSIVE, srcQueueFamilyIndex и dstQueueFamilyIndex должны быть либо оба VK_QUEUE_FAMILY_IGNORED, либо оба являться допустимым семейством очередей (см. html/vkspec.html#devsandqueues-queueprops)
  • Если buffer был создан с режимом общего доступа VK_SHARING_MODE_EXCLUSIVE, и srcQueueFamilyIndex и dstQueueFamilyIndex не являются VK_QUEUE_FAMILY_IGNORED, по крайней мере один из них должен быть таким же, как семейство очереди, которая выполнит этот барьер
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
  • pNext должно быть NULL
  • srcAccessMask должно быть допустимой комбинацией значений VkAccessFlagBits
  • dstAccessMask должно быть допустимой комбинацией значений VkAccessFlagBits
  • buffer должно быть допустимой дескриптором VkBuffer

См. также

VkAccessFlags, VkBuffer, VkDeviceSize, VkStructureType, vkCmdPipelineBarrier, vkCmdWaitEvents

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferMemoryBarrier

VkBufferViewCreateInfo(3)

Имя

VkBufferViewCreateInfo - Структура, указывающая параметры вновь создаваемого представления буфера

C Спецификация

Структура VkBufferViewCreateInfo определяется как:

typedef struct VkBufferViewCreateInfo {
    VkStructureType            sType;
    const void*                pNext;
    VkBufferViewCreateFlags    flags;
    VkBuffer                   buffer;
    VkFormat                   format;
    VkDeviceSize               offset;
    VkDeviceSize               range;
} VkBufferViewCreateInfo;

Члены

  • sType это тип этой структуры.
  • pNext это NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущих использований.
  • buffer это VkBuffer, на основе которого будет создано представление.
  • format это VkFormat, описывающий формат элементов данных в буфере.
  • offset это смещение в байтах от базового адреса буфера. Доступы к представлению буфера из шейдеров используют адресацию, которая является относительной к этому начальному смещению.
  • range это размер в байтах представления буфера. Если range равно VK_WHOLE_SIZE, используется диапазон от offset до конца буфера. Если используется VK_WHOLE_SIZE и оставшийся размер буфера не кратен размеру элемента format, то используется ближайший меньший кратный.

Описание

Допустимое использование
  • offset должно быть меньше размера buffer
  • offset должно быть кратно VkPhysicalDeviceLimits::minTexelBufferOffsetAlignment
  • Если range не равно VK_WHOLE_SIZE, range должно быть больше 0
  • Если range не равно VK_WHOLE_SIZE, range должно быть кратно размеру элемента format
  • Если range не равно VK_WHOLE_SIZE, range деленное на размер элемента format должно быть меньше или равно VkPhysicalDeviceLimits::maxTexelBufferElements
  • Если range не равно VK_WHOLE_SIZE, сумма offset и range должна быть меньше или равна размеру buffer
  • buffer должно быть создано со значением usage, содержащим по крайней мере одно из VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT или VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
  • Если buffer было создано с usage, содержащим VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, format должно поддерживаться для униформных буферов текстур, как указано флагом VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT в VkFormatProperties::bufferFeatures, возвращаемым vkGetPhysicalDeviceFormatProperties
  • Если buffer было создано с usage, содержащим VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, format должно поддерживаться для буферов текстур хранения, как указано флагом VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT в VkFormatProperties::bufferFeatures, возвращаемым vkGetPhysicalDeviceFormatProperties
  • Если buffer не разреженный, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • buffer должно быть допустимой дескриптором VkBuffer
  • format должно быть допустимым значением VkFormat

См. также

VkBuffer, VkBufferViewCreateFlags, VkDeviceSize, VkFormat, VkStructureType, vkCreateBufferView

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferViewCreateInfo

VkClearAttachment(3)

Имя

VkClearAttachment - Структура, указывающая вложение очистки

C Спецификация

Структура VkClearAttachment определяется как:

typedef struct VkClearAttachment {
    VkImageAspectFlags    aspectMask;
    uint32_t              colorAttachment;
    VkClearValue          clearValue;
} VkClearAttachment;

Члены

  • aspectMask is a mask selecting the color, depth and/or stencil aspects of the attachment to be cleared. aspectMask может include VK_IMAGE_ASPECT_COLOR_BIT for color attachments, VK_IMAGE_ASPECT_DEPTH_BIT for depth/stencil attachments with a depth component, and VK_IMAGE_ASPECT_STENCIL_BIT for depth/stencil attachments with a stencil component. If the subpass’s depth/stencil attachment is VK_ATTACHMENT_UNUSED, then the clear has no effect.
  • colorAttachment is only meaningful if VK_IMAGE_ASPECT_COLOR_BIT is set in aspectMask, in which case it is an index to the pColorAttachments array in the VkSubpassDescription structure of the current subpass which selects the color attachment to clear. If colorAttachment is VK_ATTACHMENT_UNUSED then the clear has no effect.
  • clearValue is the color or depth/stencil value to clear the attachment to, as described in Clear Values below.

Описание

Нет необходимости в барьерах памяти между vkCmdClearAttachments и предшествующими или последующими командами отрисовки или очистки вложений в одном и том же подпроходе.

Команда vkCmdClearAttachments не зависит от привязанного состояния конвейера.

Вложения могут также очищаться в начале экземпляра прохода рендеринга, установив loadOp (или stencilLoadOp) of VkAttachmentDescription to VK_ATTACHMENT_LOAD_OP_CLEAR, as described for vkCreateRenderPass.

Допустимое использование
  • If aspectMask includes VK_IMAGE_ASPECT_COLOR_BIT, it должно not include VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT
  • aspectMask должно not include VK_IMAGE_ASPECT_METADATA_BIT
  • clearValue должно be a valid VkClearValue union
Допустимое использование (неявное)
  • aspectMask должно be a valid combination of VkImageAspectFlagBits values
  • aspectMask не должно be 0

См. также

VkClearValue, VkImageAspectFlags, vkCmdClearAttachments

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkClearAttachment

VkClearColorValue(3)

Имя

VkClearColorValue - Структура, определяющая значение цвета очистки

C-спецификация

Структура VkClearColorValue определяется как:

typedef union VkClearColorValue {
    float       float32[4];
    int32_t     int32[4];
    uint32_t    uint32[4];
} VkClearColorValue;

Члены

  • float32 are the color clear values when the format of the image or attachment is one of the formats in the Interpretation of Numeric Format table other than signed integer (SINT) or unsigned integer (UINT). Floating point values are automatically converted to the format of the image, with the clear value being treated as linear if the image is sRGB.
  • int32 are the color clear values when the format of the image or attachment is signed integer (SINT). Signed integer values are converted to the format of the image by casting to the smaller type (with negative 32-bit values mapping to negative values in the smaller type). If the integer clear value is not representable in the target type (e.g. would overflow in conversion to that type), the clear value is undefined.
  • uint32 are the color clear values when the format of the image or attachment is unsigned integer (UINT). Unsigned integer values are converted to the format of the image by casting to the integer type with fewer bits.

Описание

Четыре элемента массива цвета очистки соответствуют компонентам R, G, B и A форматов изображения в указанном порядке.

Если изображение имеет более одного образца, одно и то же значение записывается во все образцы для любых очищаемых пикселей.

См. также

VkClearValue, vkCmdClearColorImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkClearColorValue

VkClearDepthStencilValue(3)

Имя

VkClearDepthStencilValue - Структура, определяющая значение очистки глубины и трафарета

C-спецификация

Структура VkClearDepthStencilValue определяется как:

typedef struct VkClearDepthStencilValue {
    float       depth;
    uint32_t    stencil;
} VkClearDepthStencilValue;

Члены

  • depth is the clear value for the depth aspect of the depth/stencil attachment. It is a floating-point value which is automatically converted to the attachment’s format.
  • stencil is the clear value for the stencil aspect of the depth/stencil attachment. It is a 32-bit integer value which is converted to the attachment’s format by taking the appropriate number of LSBs.

Описание

Допустимое использование
  • depth должно be between 0.0 and 1.0, inclusive

См. также

VkClearValue, vkCmdClearDepthStencilImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkClearDepthStencilValue

VkClearRect(3)

Имя

VkClearRect - Структура, определяющая прямоугольник очистки

C-спецификация

Структура VkClearRect определяется как:

typedef struct VkClearRect {
    VkRect2D    rect;
    uint32_t    baseArrayLayer;
    uint32_t    layerCount;
} VkClearRect;

Члены

  • rect is the two-dimensional region to be cleared.
  • baseArrayLayer is the first layer to be cleared.
  • layerCount is the number of layers to clear.

Описание

Очищаются слои [baseArrayLayer, baseArrayLayer + layerCount) начиная с базового слоя представления изображения вложения.

См. также

VkRect2D, vkCmdClearAttachments

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkClearRect

VkClearValue(3)

Имя

VkClearValue - Структура, определяющая значение очистки

C-спецификация

Объединение VkClearValue определяется как:

typedef union VkClearValue {
    VkClearColorValue           color;
    VkClearDepthStencilValue    depthStencil;
} VkClearValue;

Члены

  • color specifies the color image clear values to use when clearing a color image or attachment.
  • depthStencil specifies the depth and stencil clear values to use when clearing a depth/stencil image or attachment.

Описание

Это объединение используется там, где часть API требует значений очистки цвета или глубины/трафарета в зависимости от вложения, и определяет начальные значения очистки в структуре VkRenderPassBeginInfo.

Допустимое использование
  • depthStencil должно be a valid VkClearDepthStencilValue structure

См. также

VkClearAttachment, VkClearColorValue, VkClearDepthStencilValue, VkRenderPassBeginInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkClearValue

VkCommandBufferAllocateInfo(3)

Имя

VkCommandBufferAllocateInfo - Структура, определяющая параметры выделения для объекта буфера команд

C-спецификация

Структура VkCommandBufferAllocateInfo определяется как:

typedef struct VkCommandBufferAllocateInfo {
    VkStructureType         sType;
    const void*             pNext;
    VkCommandPool           commandPool;
    VkCommandBufferLevel    level;
    uint32_t                commandBufferCount;
} VkCommandBufferAllocateInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • commandPool is the command pool from which the command buffers are allocated.
  • level is an VkCommandBufferLevel value specifying the command buffer level.
  • commandBufferCount is the number of command buffers to allocate from the pool.

Описание

Допустимое использование
  • commandBufferCount должно be greater than 0
Допустимое использование (неявное)
  • sType должно be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO
  • pNext должно be NULL
  • commandPool должно be a valid VkCommandPool handle
  • level должно be a valid VkCommandBufferLevel value

См. также

VkCommandBufferLevel, VkCommandPool, VkStructureType, vkAllocateCommandBuffers

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandBufferAllocateInfo

VkCommandBufferBeginInfo(3)

Имя

VkCommandBufferBeginInfo - Структура, определяющая операцию начала буфера команд

C-спецификация

Структура VkCommandBufferBeginInfo определяется как:

typedef struct VkCommandBufferBeginInfo {
    VkStructureType                          sType;
    const void*                              pNext;
    VkCommandBufferUsageFlags                flags;
    const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
} VkCommandBufferBeginInfo;

Члены

  • sType - это тип этой структуры.
  • pNext - это NULL или указатель на структуру, специфичную для расширения.
  • flags - это битовая маска VkCommandBufferUsageFlagBits, указывающая поведение использования для буфера команд.
  • pInheritanceInfo - это указатель на структуру VkCommandBufferInheritanceInfo, которая используется, если commandBuffer является вторичным буфером команд. Если это основной буфер команд, то это значение игнорируется.

Описание

Допустимое использование
  • Если flags содержит VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, член renderPass структуры pInheritanceInfo должен быть допустимым VkRenderPass
  • Если flags содержит VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, член subpass структуры pInheritanceInfo должен быть допустимым индексом подпрохода в члене renderPass структуры pInheritanceInfo
  • Если flags содержит VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, член framebuffer структуры pInheritanceInfo должен быть либо VK_NULL_HANDLE, либо допустимым VkFramebuffer, совместимым с членом renderPass структуры pInheritanceInfo
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
  • pNext должен быть NULL
  • flags должен быть допустимым сочетанием значений VkCommandBufferUsageFlagBits

См. также

VkCommandBufferInheritanceInfo, VkCommandBufferUsageFlags, VkStructureType, vkBeginCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandBufferBeginInfo

VkCommandBufferInheritanceInfo(3)

Имя

VkCommandBufferInheritanceInfo - Структура, определяющая информацию о наследовании буфера команд

C-спецификация

Если буфер команд является вторичным буфером команд, то структура VkCommandBufferInheritanceInfo определяет любое состояние, которое будет унаследовано от основного буфера команд:

typedef struct VkCommandBufferInheritanceInfo {
    VkStructureType                  sType;
    const void*                      pNext;
    VkRenderPass                     renderPass;
    uint32_t                         subpass;
    VkFramebuffer                    framebuffer;
    VkBool32                         occlusionQueryEnable;
    VkQueryControlFlags              queryFlags;
    VkQueryPipelineStatisticFlags    pipelineStatistics;
} VkCommandBufferInheritanceInfo;

Члены

  • sType - это тип этой структуры.
  • pNext - это NULL или указатель на структуру, специфичную для расширения.
  • renderPass - это объект VkRenderPass, определяющий, с какими проходами рендеринга VkCommandBuffer будет совместим и может быть выполнен. Если VkCommandBuffer не будет выполняться в экземпляре прохода рендеринга, renderPass игнорируется.
  • subpass - это индекс подпрохода в экземпляре прохода рендеринга, в котором будет выполняться VkCommandBuffer. Если VkCommandBuffer не будет выполняться в экземпляре прохода рендеринга, subpass игнорируется.
  • framebuffer необязательно ссылается на объект VkFramebuffer, в который будет осуществляться рендеринг VkCommandBuffer, если он выполняется в экземпляре прохода рендеринга. Он может быть VK_NULL_HANDLE, если буфер кадра неизвестен или если VkCommandBuffer не будет выполняться в экземпляре прохода рендеринга.

    Примечание

    Указание точного буфера кадра, с которым будет выполняться вторичный буфер команд, может привести к повышению производительности во время выполнения буфера команд.

  • occlusionQueryEnable указывает, может ли буфер команд выполняться, когда запрос на затенение активен в основном буфере команд. Если это VK_TRUE, то этот буфер команд может выполняться независимо от того, есть ли активный запрос на затенение в основном буфере команд или нет. Если это VK_FALSE, то в основном буфере команд не должно быть активного запроса на затенение.
  • queryFlags указывает флаги запроса, которые могут использоваться активным запросом на затенение в основном буфере команд при выполнении этого вторичного буфера команд. Если это значение включает бит VK_QUERY_CONTROL_PRECISE_BIT, то активный запрос может возвращать булевы результаты или фактические числа выборок. Если этот бит не установлен, то активный запрос не должен использовать бит VK_QUERY_CONTROL_PRECISE_BIT.
  • pipelineStatistics - это битовая маска VkQueryPipelineStatisticFlagBits, указывающая набор статистических данных конвейера, которые могут подсчитываться активным запросом в основном буфере команд при выполнении этого вторичного буфера команд. Если это значение включает данный бит, то этот буфер команд может выполняться независимо от того, есть ли в основном буфере команд активный запрос статистики конвейера, включающий этот бит или нет. Если это значение исключает данный бит, то активный запрос статистики конвейера не должен поступать из пула запросов, который подсчитывает эту статистику.

Описание

Допустимое использование
  • Если функция inherited queries не включена, occlusionQueryEnable должен быть VK_FALSE
  • Если функция inherited queries включена, queryFlags должен быть допустимым сочетанием значений VkQueryControlFlagBits
  • Если функция pipeline statistics queries не включена, pipelineStatistics должен быть 0
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO
  • pNext должен быть NULL
  • Оба framebuffer, и renderPass, являющиеся допустимыми дескрипторами, должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkBool32, VkCommandBufferBeginInfo, VkFramebuffer, VkQueryControlFlags, VkQueryPipelineStatisticFlags, VkRenderPass, VkStructureType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandBufferInheritanceInfo

VkCommandPoolCreateInfo(3)

Имя

VkCommandPoolCreateInfo - Структура, определяющая параметры вновь создаваемого пула команд

C-спецификация

Структура VkCommandPoolCreateInfo определяется как:

typedef struct VkCommandPoolCreateInfo {
    VkStructureType             sType;
    const void*                 pNext;
    VkCommandPoolCreateFlags    flags;
    uint32_t                    queueFamilyIndex;
} VkCommandPoolCreateInfo;

Члены

  • sType - это тип этой структуры.
  • pNext - это NULL или указатель на структуру, специфичную для расширения.
  • flags - это битовая маска VkCommandPoolCreateFlagBits, указывающая поведение использования для пула и буферов команд, выделяемых из него.
  • queueFamilyIndex указывает семейство очередей, как описано в разделе Queue Family Properties. Все буферы команд, выделяемые из этого пула команд, должны отправляться в очереди из того же семейства очередей.

Описание

Допустимое использование
  • queueFamilyIndex должен быть индексом семейства очередей, доступного в параметре device вызывающей команды
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
  • pNext должен быть NULL
  • flags должен быть допустимым сочетанием значений VkCommandPoolCreateFlagBits

См. также

VkCommandPoolCreateFlags, VkStructureType, vkCreateCommandPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandPoolCreateInfo

VkComponentMapping(3)

Имя

VkComponentMapping - Структура, определяющая сопоставление цветовых компонентов

C-спецификация

Структура VkComponentMapping определяется как:

typedef struct VkComponentMapping {
    VkComponentSwizzle    r;
    VkComponentSwizzle    g;
    VkComponentSwizzle    b;
    VkComponentSwizzle    a;
} VkComponentMapping;

Члены

  • r является VkComponentSwizzle, указывающим значение компонента, помещаемое в компонент R выходного вектора.
  • g является VkComponentSwizzle, указывающим значение компонента, помещаемое в компонент G выходного вектора.
  • b является VkComponentSwizzle, указывающим значение компонента, помещаемое в компонент B выходного вектора.
  • A является VkComponentSwizzle, указывающим значение компонента, помещаемое в компонент A выходного вектора.

Описание

Допустимое использование (неявное)
  • r должен быть допустимым значением VkComponentSwizzle
  • g должен быть допустимым значением VkComponentSwizzle
  • b должен быть допустимым значением VkComponentSwizzle
  • a должен быть допустимым значением VkComponentSwizzle

См. также

VkComponentSwizzle, VkImageViewCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkComponentMapping

VkComputePipelineCreateInfo(3)

Имя

VkComputePipelineCreateInfo - Структура, определяющая параметры вновь созданного конвейера вычислений

Спецификация C

Структура VkComputePipelineCreateInfo определяется как:

typedef struct VkComputePipelineCreateInfo {
    VkStructureType                    sType;
    const void*                        pNext;
    VkPipelineCreateFlags              flags;
    VkPipelineShaderStageCreateInfo    stage;
    VkPipelineLayout                   layout;
    VkPipeline                         basePipelineHandle;
    int32_t                            basePipelineIndex;
} VkComputePipelineCreateInfo;

Члены

  • sType это тип этой структуры.
  • pNext это NULL или указатель на структуру, специфичную для расширения.
  • flags это битовая маска VkPipelineCreateFlagBits, указывающая, как будет создан конвейер.
  • stage это VkPipelineShaderStageCreateInfo, описывающая шейдер вычислений.
  • layout это описание мест связывания, используемых как конвейером, так и наборами дескрипторов, используемых с конвейером.
  • basePipelineHandle это конвейер для получения.
  • basePipelineIndex это индекс в параметр pCreateInfos, используемый в качестве конвейера для получения.

Описание

Параметры basePipelineHandle и basePipelineIndex описаны более подробно в Производные конвейеры.

stage указывает на структуру типа VkPipelineShaderStageCreateInfo.

Допустимое использование
  • Если flags содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, и basePipelineIndex равен -1, basePipelineHandle должен быть допустимой дескриптором конвейера вычислений VkPipeline
  • Если flags содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, и basePipelineHandle равен VK_NULL_HANDLE, basePipelineIndex должен быть допустимым индексом в параметре вызывающей команды pCreateInfos
  • Если flags содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, и basePipelineIndex не равен -1, basePipelineHandle должен быть VK_NULL_HANDLE
  • Если flags содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, и basePipelineHandle не равен VK_NULL_HANDLE, basePipelineIndex должен быть -1
  • Член stage в stage должен быть VK_SHADER_STAGE_COMPUTE_BIT
  • Код шейдера для точки входа, идентифицированной stage, и остальное состояние, идентифицированное этой структурой, должны соответствовать правилам компоновки конвейера, описанным в главе Интерфейсы шейдера
  • layout должен быть согласованным с макетом шейдера вычислений, указанным в stage
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
  • pNext должен быть NULL
  • flags должен быть допустимым сочетанием значений VkPipelineCreateFlagBits
  • stage должен быть допустимой структурой VkPipelineShaderStageCreateInfo
  • layout должен быть допустимой дескриптором VkPipelineLayout
  • И basePipelineHandle, и layout, являющиеся допустимыми дескрипторами, должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkPipeline, VkPipelineCreateFlags, VkPipelineLayout, VkPipelineShaderStageCreateInfo, VkStructureType, vkCreateComputePipelines

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkComputePipelineCreateInfo

VkCopyDescriptorSet(3)

Имя

VkCopyDescriptorSet - Структура, определяющая операцию копирования набора дескрипторов

Спецификация C

Структура VkCopyDescriptorSet определяется как:

typedef struct VkCopyDescriptorSet {
    VkStructureType    sType;
    const void*        pNext;
    VkDescriptorSet    srcSet;
    uint32_t           srcBinding;
    uint32_t           srcArrayElement;
    VkDescriptorSet    dstSet;
    uint32_t           dstBinding;
    uint32_t           dstArrayElement;
    uint32_t           descriptorCount;
} VkCopyDescriptorSet;

Члены

  • sType это тип этой структуры.
  • pNext это NULL или указатель на структуру, специфичную для расширения.
  • srcSet, srcBinding и srcArrayElement это исходный набор, место связывания и элемент массива соответственно.
  • dstSet, dstBinding и dstArrayElement это целевой набор, место связывания и элемент массива соответственно.
  • descriptorCount это количество дескрипторов для копирования из источника в назначение. Если descriptorCount больше, чем количество оставшихся элементов массива в исходном или целевом месте связывания, это влияет на последующие места связывания аналогично VkWriteDescriptorSet выше.

Описание

Допустимое использование
  • srcBinding должен быть допустимым местом связывания в srcSet
  • Сумма srcArrayElement и descriptorCount должна быть меньше или равна количеству элементов массива в место связывания набора дескрипторов, указанного srcBinding, и всех применимых последующих мест связывания, как описано в html/vkspec.html#descriptorsets-updates-consecutive
  • dstBinding должен быть допустимым местом связывания в dstSet
  • Сумма dstArrayElement и descriptorCount должна быть меньше или равна количеству элементов массива в место связывания набора дескрипторов, указанного dstBinding, и всех применимых последующих мест связывания, как описано в html/vkspec.html#descriptorsets-updates-consecutive
  • Если srcSet равно dstSet, то диапазоны исходных и целевых дескрипторов не должны перекрываться, при этом диапазоны могут включать элементы массива из последующих мест связывания, как описано в html/vkspec.html#descriptorsets-updates-consecutive
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
  • pNext должен быть NULL
  • srcSet должен быть допустимой дескриптором VkDescriptorSet
  • dstSet должен быть допустимой дескриптором VkDescriptorSet
  • И dstSet, и srcSet должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkDescriptorSet, VkStructureType, vkUpdateDescriptorSets

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCopyDescriptorSet

VkDescriptorBufferInfo(3)

Имя

VkDescriptorBufferInfo - Структура, определяющая информацию о буфере дескрипторов

Спецификация C

Структура VkDescriptorBufferInfo определяется как:

typedef struct VkDescriptorBufferInfo {
    VkBuffer        buffer;
    VkDeviceSize    offset;
    VkDeviceSize    range;
} VkDescriptorBufferInfo;

Члены

  • buffer является ресурсом буфера.
  • offset это смещение в байтах от начала buffer. Доступ к памяти буфера через этот дескриптор использует адресацию, которая является относительной к этому начальному смещению.
  • range это размер в байтах, который используется для этого обновления дескриптора, или VK_WHOLE_SIZE для использования диапазона от offset до конца буфера.

Описание

Примечание

При установке range на VK_WHOLE_SIZE, эффективный диапазон не должен быть больше, чем максимальный диапазон для типа дескриптора (maxUniformBufferRange или maxStorageBufferRange). Это означает, что VK_WHOLE_SIZE обычно не полезен в распространенном случае, когда дескрипторы буфера униформы выделяются из буфера, который намного больше, чем maxUniformBufferRange.

Для VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC и VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC типов дескрипторов, offset это базовое смещение, из которого применяется динамическое смещение, а range - это статический размер, используемый для всех динамических смещений.

Допустимое использование
  • offset должно быть меньше размера buffer
  • Если range не равно VK_WHOLE_SIZE, range должно быть больше 0
  • Если range не равно VK_WHOLE_SIZE, range должно быть меньше или равно размеру buffer минус offset
Допустимое использование (неявное)
  • buffer должно быть допустимой дескриптором VkBuffer

См. также

VkBuffer, VkDeviceSize, VkWriteDescriptorSet

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorBufferInfo

VkDescriptorImageInfo(3)

Имя

VkDescriptorImageInfo - Структура, определяющая информацию о дескрипторе изображения

C Спецификация

Структура VkDescriptorImageInfo определяется как:

typedef struct VkDescriptorImageInfo {
    VkSampler        sampler;
    VkImageView      imageView;
    VkImageLayout    imageLayout;
} VkDescriptorImageInfo;

Члены

  • sampler это дескриптор семплера и используется в обновлениях дескрипторов для типов VK_DESCRIPTOR_TYPE_SAMPLER и VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, если привязка, которая обновляется, не использует неизменяемые семплеры.
  • imageView это дескриптор представления изображения и используется в обновлениях дескрипторов для типов VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER и VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT.
  • imageLayout это макет, в котором будут находиться подресурсы изображения, доступные из imageView, в момент доступа к этому дескриптору. imageLayout используется в обновлениях дескрипторов для типов VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER и VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT.

Описание

Члены VkDescriptorImageInfo, которые не используются в обновлении (как описано выше), игнорируются.

Допустимое использование
  • imageLayout должен соответствовать фактическому VkImageLayout каждого подресурса, доступного из imageView, в момент доступа к этому дескриптору
Допустимое использование (неявное)
  • Оба imageView и sampler, которые являются допустимыми дескрипторами, должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkImageLayout, VkImageView, VkSampler, VkWriteDescriptorSet

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorImageInfo

VkDescriptorPoolCreateInfo(3)

Имя

VkDescriptorPoolCreateInfo - Структура, определяющая параметры вновь создаваемого пула дескрипторов

C Спецификация

Дополнительная информация о пуле передается в экземпляре структуры VkDescriptorPoolCreateInfo:

typedef struct VkDescriptorPoolCreateInfo {
    VkStructureType                sType;
    const void*                    pNext;
    VkDescriptorPoolCreateFlags    flags;
    uint32_t                       maxSets;
    uint32_t                       poolSizeCount;
    const VkDescriptorPoolSize*    pPoolSizes;
} VkDescriptorPoolCreateInfo;

Члены

  • sType это тип этой структуры.
  • pNext это NULL или указатель на структуру, специфичную для расширения.
  • flags это битовая маска VkDescriptorPoolCreateFlagBits, определяющая некоторые поддерживаемые операции над пулом.
  • maxSets это максимальное количество наборов дескрипторов, которые могут быть выделены из пула.
  • poolSizeCount это количество элементов в pPoolSizes.
  • pPoolSizes это указатель на массив структур VkDescriptorPoolSize, каждая из которых содержит тип дескриптора и количество дескрипторов этого типа, которые будут выделены в пуле.

Описание

Если в массиве pPoolSizes присутствуют несколько структур VkDescriptorPoolSize, то пул будет создан с достаточным объемом памяти для общего количества дескрипторов каждого типа.

Фрагментация пула дескрипторов возможна и может привести к ошибкам выделения наборов дескрипторов. Ошибка из-за фрагментации определяется как сбой выделения набора дескрипторов, несмотря на то, что сумма всех незавершенных выделений наборов дескрипторов из пула плюс запрашиваемое выделение требуют не более общего количества дескрипторов, запрошенных при создании пула. Реализации предоставляют определенные гарантии того, когда фрагментация не должна вызывать сбой выделения, как описано ниже.

Если в пуле дескрипторов не было освобождено ни одного набора дескрипторов с момента его создания или последней перезагрузки, то фрагментация не должна вызывать сбой выделения (обратите внимание, что это всегда так для пула, созданного без установленного бита VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT). Кроме того, если все наборы, выделенные из пула с момента его создания или последней перезагрузки, используют одинаковое количество дескрипторов (каждого типа), и запрашиваемое выделение также использует это же количество дескрипторов (каждого типа), то фрагментация не должна вызывать сбой выделения.

Если происходит сбой выделения из-за фрагментации, приложение может создать дополнительный пул дескрипторов для выполнения дальнейших выделений наборов дескрипторов.

Допустимое использование
  • maxSets должно быть больше 0
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть допустимым сочетанием значений VkDescriptorPoolCreateFlagBits
  • pPoolSizes должно быть указателем на массив из poolSizeCount допустимых структур VkDescriptorPoolSize
  • poolSizeCount должно быть больше 0

См. также

VkDescriptorPoolCreateFlags, VkDescriptorPoolSize, VkStructureType, vkCreateDescriptorPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorPoolCreateInfo

VkDescriptorPoolSize(3)

Имя

VkDescriptorPoolSize - Структура, определяющая размер пула дескрипторов

C Спецификация

Структура VkDescriptorPoolSize определяется как:

typedef struct VkDescriptorPoolSize {
    VkDescriptorType    type;
    uint32_t            descriptorCount;
} VkDescriptorPoolSize;

Члены

  • type это тип дескриптора.
  • descriptorCount это количество дескрипторов этого типа для выделения.

Описание

Допустимое использование
  • descriptorCount должно быть больше 0
Допустимое использование (неявное)
  • type должно быть допустимым значением VkDescriptorType

См. также

VkDescriptorPoolCreateInfo, VkDescriptorType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorPoolSize

VkDescriptorSetAllocateInfo(3)

Имя

VkDescriptorSetAllocateInfo - Структура, определяющая параметры выделения для наборов дескрипторов

C Спецификация

Структура VkDescriptorSetAllocateInfo определяется как:

typedef struct VkDescriptorSetAllocateInfo {
    VkStructureType                 sType;
    const void*                     pNext;
    VkDescriptorPool                descriptorPool;
    uint32_t                        descriptorSetCount;
    const VkDescriptorSetLayout*    pSetLayouts;
} VkDescriptorSetAllocateInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • descriptorPool is the pool which the sets will be allocated from.
  • descriptorSetCount determines the number of descriptor sets to be allocated from the pool.
  • pSetLayouts is an array of descriptor set layouts, with each member specifying how the corresponding descriptor set is allocated.

Описание

Правильное использование
  • descriptorSetCount должно быть не больше, чем количество наборов, которые в данный момент доступны для распределения в descriptorPool
  • descriptorPool должно иметь достаточно свободного места для описателей, чтобы выделить наборы описателей указанных макетов
Правильное использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
  • pNext должно быть NULL
  • descriptorPool должно быть допустимой дескрипторной областью VkDescriptorPool
  • pSetLayouts должно быть указателем на массив descriptorSetCount допустимых VkDescriptorSetLayout дескрипторов
  • descriptorSetCount должно быть больше 0
  • И descriptorPool, и элементы pSetLayouts должны быть созданы, выделены или получены из одной и той же VkDevice

См. также

VkDescriptorPool, VkDescriptorSetLayout, VkStructureType, vkAllocateDescriptorSets

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorSetAllocateInfo

VkDescriptorSetLayoutBinding(3)

Имя

VkDescriptorSetLayoutBinding - Структура, определяющая привязку макета набора описателей

C-спецификация

Структура VkDescriptorSetLayoutBinding определяется следующим образом:

typedef struct VkDescriptorSetLayoutBinding {
    uint32_t              binding;
    VkDescriptorType      descriptorType;
    uint32_t              descriptorCount;
    VkShaderStageFlags    stageFlags;
    const VkSampler*      pImmutableSamplers;
} VkDescriptorSetLayoutBinding;

Члены

  • binding — это номер привязки этой записи и соответствует ресурсу с тем же номером привязки на этапах шейдера.
  • descriptorType — это VkDescriptorType, указывающий, какой тип описателей ресурсов используется для этой привязки.
  • descriptorCount — это количество описателей, содержащихся в привязке, доступных в шейдере как массив. Если descriptorCount равно нулю, эта запись привязки зарезервирована, и к ресурсу нельзя обращаться ни на каком этапе через эту привязку в любом конвейере, использующем макет набора.
  • Член stageFlags — это битовая маска VkShaderStageFlagBits, указывающая, какие этапы шейдера конвейера могут обращаться к ресурсу для этой привязки. VK_SHADER_STAGE_ALL — это сокращение, указывающее, что ко всем определенным этапам шейдера, включая любые дополнительные этапы, определенные расширениями, можно получить доступ к ресурсу.

    Если этап шейдера не включен в stageFlags, то к ресурсу нельзя обращаться с этого этапа через эту привязку в любом конвейере, использующем макет набора. За исключением входных вложений, которые ограничены фрагментным шейдером, нет ограничений на то, какие комбинации этапов могут использоваться привязкой описателя, и, в частности, привязку можно использовать как графическими этапами, так и вычислительным этапом.

Описание

  • pImmutableSamplers влияет на инициализацию семплеров. Если descriptorType указывает описатель типа VK_DESCRIPTOR_TYPE_SAMPLER или VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, то pImmutableSamplers может использоваться для инициализации набора неизменяемых семплеров. Неизменяемые семплеры постоянно привязаны к макету набора; последующая привязка семплера в слот неизменяемого семплера в наборе описателей не допускается. Если pImmutableSamplers не NULL, то он считается указателем на массив дескрипторов семплеров, которые будут использоваться макетом набора для соответствующей привязки. Если pImmutableSamplers равно NULL, то слоты семплера являются динамическими, и дескрипторы семплеров должны быть привязаны к наборам описателей с использованием этого макета. Если descriptorType не является одним из этих типов описателей, то pImmutableSamplers игнорируется.

Приведенное выше определение макета позволяет задавать привязки описателей разреженно, так что не все номера привязки между 0 и максимальным номером привязки должны быть указаны в массиве pBindings. Привязки, которые не указаны, имеют descriptorCount и stageFlags равные нулю, а descriptorType считается неопределенным. Однако все номера привязки между 0 и максимальным номером привязки в массиве VkDescriptorSetLayoutCreateInfo::pBindings могут потреблять память в макете набора описателей, даже если не все привязки описателей используются, хотя не следует потреблять дополнительную память из пула описателей.

Примечание

Максимальный указанный номер привязки следует выбирать как можно более компактным, чтобы избежать потери памяти.

Правильное использование
  • Если descriptorType равно VK_DESCRIPTOR_TYPE_SAMPLER или VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, и descriptorCount не 0 и pImmutableSamplers не NULL, pImmutableSamplers должно быть указателем на массив descriptorCount допустимых VkSampler дескрипторов
  • Если descriptorCount не 0, stageFlags должно быть допустимой комбинацией значений VkShaderStageFlagBits
  • Если descriptorType равно VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT и descriptorCount не 0, то stageFlags должно быть 0 или VK_SHADER_STAGE_FRAGMENT_BIT
Правильное использование (неявное)
  • descriptorType должно быть допустимым значением VkDescriptorType

См. также

VkDescriptorSetLayoutCreateInfo, VkDescriptorType, VkSampler, VkShaderStageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorSetLayoutBinding

VkDescriptorSetLayoutCreateInfo(3)

Имя

VkDescriptorSetLayoutCreateInfo - Структура, определяющая параметры вновь созданного макета набора описателей

C-спецификация

Информация о макете набора описателей передается в экземпляре структуры VkDescriptorSetLayoutCreateInfo:

typedef struct VkDescriptorSetLayoutCreateInfo {
    VkStructureType                        sType;
    const void*                            pNext;
    VkDescriptorSetLayoutCreateFlags       flags;
    uint32_t                               bindingCount;
    const VkDescriptorSetLayoutBinding*    pBindings;
} VkDescriptorSetLayoutCreateInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • flags is a bitmask specifying options for descriptor set layout creation.
  • bindingCount is the number of elements in pBindings.
  • pBindings is a pointer to an array of VkDescriptorSetLayoutBinding structures.

Описание

Правильное использование
  • Члены VkDescriptorSetLayoutBinding::binding элементов массива pBindings должны иметь разные значения.
Правильное использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть допустимой комбинацией значений VkDescriptorSetLayoutCreateFlagBits
  • Если bindingCount не 0, pBindings должно быть указателем на массив bindingCount допустимых VkDescriptorSetLayoutBinding структур

См. также

VkDescriptorSetLayoutBinding, VkDescriptorSetLayoutCreateFlags, VkStructureType, vkCreateDescriptorSetLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorSetLayoutCreateInfo

VkDeviceCreateInfo(3)

Имя

VkDeviceCreateInfo - Структура, определяющая параметры вновь созданного устройства

C-спецификация

Структура VkDeviceCreateInfo определяется следующим образом:

typedef struct VkDeviceCreateInfo {
    VkStructureType                    sType;
    const void*                        pNext;
    VkDeviceCreateFlags                flags;
    uint32_t                           queueCreateInfoCount;
    const VkDeviceQueueCreateInfo*     pQueueCreateInfos;
    uint32_t                           enabledLayerCount;
    const char* const*                 ppEnabledLayerNames;
    uint32_t                           enabledExtensionCount;
    const char* const*                 ppEnabledExtensionNames;
    const VkPhysicalDeviceFeatures*    pEnabledFeatures;
} VkDeviceCreateInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • flags is reserved for future use.
  • queueCreateInfoCount is the unsigned integer size of the pQueueCreateInfos array. Refer to the Queue Creation section below for further details.
  • pQueueCreateInfos is a pointer to an array of VkDeviceQueueCreateInfo structures describing the queues that are requested to be created along with the logical device. Refer to the Queue Creation section below for further details.
  • enabledLayerCount is deprecated and ignored.
  • ppEnabledLayerNames is deprecated and ignored. See Device Layer Deprecation.
  • enabledExtensionCount is the number of device extensions to enable.
  • ppEnabledExtensionNames is a pointer to an array of enabledExtensionCount null-terminated UTF-8 strings containing the names of extensions to enable for the created device. See the Extensions section for further details.
  • pEnabledFeatures is NULL or a pointer to a VkPhysicalDeviceFeatures structure that contains boolean indicators of all the features to be enabled. Refer to the Features section for further details.

Описание

Допустимое использование
  • Элемент queueFamilyIndex любого заданного элемента pQueueCreateInfos должен быть уникальным в pQueueCreateInfos
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
  • pNext должен быть NULL
  • flags должен быть 0
  • pQueueCreateInfos должен быть указателем на массив из queueCreateInfoCount допустимых VkDeviceQueueCreateInfo структур
  • Если enabledLayerCount не 0, ppEnabledLayerNames должен быть указателем на массив из enabledLayerCount null-terminated UTF-8 строк
  • Если enabledExtensionCount не 0, ppEnabledExtensionNames должен быть указателем на массив из enabledExtensionCount null-terminated UTF-8 строк
  • Если pEnabledFeatures не NULL, pEnabledFeatures должен быть указателем на допустимую VkPhysicalDeviceFeatures структуру
  • queueCreateInfoCount должен быть больше 0

См. также

VkDeviceCreateFlags, VkDeviceQueueCreateInfo, VkPhysicalDeviceFeatures, VkStructureType, vkCreateDevice

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDeviceCreateInfo

VkDeviceQueueCreateInfo(3)

Имя

VkDeviceQueueCreateInfo - Структура, определяющая параметры вновь созданной очереди устройства

C спецификация

Структура VkDeviceQueueCreateInfo определяется как:

typedef struct VkDeviceQueueCreateInfo {
    VkStructureType             sType;
    const void*                 pNext;
    VkDeviceQueueCreateFlags    flags;
    uint32_t                    queueFamilyIndex;
    uint32_t                    queueCount;
    const float*                pQueuePriorities;
} VkDeviceQueueCreateInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • flags is reserved for future use.
  • queueFamilyIndex is an unsigned integer indicating the index of the queue family to create on this device. This index corresponds to the index of an element of the pQueueFamilyProperties array that was returned by vkGetPhysicalDeviceQueueFamilyProperties.
  • queueCount is an unsigned integer specifying the number of queues to create in the queue family indicated by queueFamilyIndex.
  • pQueuePriorities is an array of queueCount normalized floating point values, specifying priorities of work that will be submitted to each created queue. See Queue Priority for more information.

Описание

Допустимое использование
  • queueFamilyIndex должен быть меньше pQueueFamilyPropertyCount, возвращаемого vkGetPhysicalDeviceQueueFamilyProperties
  • queueCount должен быть меньше или равен элементу queueCount структуры VkQueueFamilyProperties, возвращаемого vkGetPhysicalDeviceQueueFamilyProperties в pQueueFamilyProperties[queueFamilyIndex]
  • Каждый элемент pQueuePriorities должен находиться в диапазоне от 0.0 до 1.0 включительно
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
  • pNext должен быть NULL
  • flags должен быть 0
  • pQueuePriorities должен быть указателем на массив из queueCount float значений
  • queueCount должен быть больше 0

См. также

VkDeviceCreateInfo, VkDeviceQueueCreateFlags, VkStructureType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDeviceQueueCreateInfo

VkDispatchIndirectCommand(3)

Имя

VkDispatchIndirectCommand - Структура, определяющая косвенную команду диспетчеризации

C спецификация

Структура VkDispatchIndirectCommand определяется как:

typedef struct VkDispatchIndirectCommand {
    uint32_t    x;
    uint32_t    y;
    uint32_t    z;
} VkDispatchIndirectCommand;

Члены

  • x is the number of local workgroups to dispatch in the X dimension.
  • y is the number of local workgroups to dispatch in the Y dimension.
  • z is the number of local workgroups to dispatch in the Z dimension.

Описание

Члены VkDispatchIndirectCommand имеют то же значение, что и соответствующие параметры vkCmdDispatch.

Допустимое использование
  • x должен быть меньше или равен VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0]
  • y должен быть меньше или равен VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1]
  • z должен быть меньше или равен VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2]

См. также

vkCmdDispatchIndirect

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDispatchIndirectCommand

VkDrawIndexedIndirectCommand(3)

Имя

VkDrawIndexedIndirectCommand - Структура, определяющая косвенную команду отрисовки с индексами

C спецификация

Структура VkDrawIndexedIndirectCommand определяется как:

typedef struct VkDrawIndexedIndirectCommand {
    uint32_t    indexCount;
    uint32_t    instanceCount;
    uint32_t    firstIndex;
    int32_t     vertexOffset;
    uint32_t    firstInstance;
} VkDrawIndexedIndirectCommand;

Члены

  • indexCount is the number of vertices to draw.
  • instanceCount is the number of instances to draw.
  • firstIndex is the base index within the index buffer.
  • vertexOffset is the value added to the vertex index before indexing into the vertex buffer.
  • firstInstance is the instance ID of the first instance to draw.

Описание

Члены VkDrawIndexedIndirectCommand имеют то же значение, что и одноимённые параметры vkCmdDrawIndexed.

Допустимое использование
  • Для заданного связывания буфера вершин любые извлекаемые данные атрибутов должны полностью содержаться в соответствующем связывании буфера вершин, как описано в html/vkspec.html#fxvertex-input
  • (indexSize * (firstIndex + indexCount) + offset) должен быть меньше или равен размеру текущего связанного буфера индексов, при этом indexSize основывается на типе, указанном indexType, где буфер индексов, indexType, и offset указываются через vkCmdBindIndexBuffer
  • Если функция drawIndirectFirstInstance не включена, firstInstance должен быть 0

См. также

vkCmdDrawIndexedIndirect

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDrawIndexedIndirectCommand

VkDrawIndirectCommand(3)

Имя

VkDrawIndirectCommand - Структура, определяющая команду непрямого вывода

C-спецификация

Структура VkDrawIndirectCommand определяется следующим образом:

typedef struct VkDrawIndirectCommand {
    uint32_t    vertexCount;
    uint32_t    instanceCount;
    uint32_t    firstVertex;
    uint32_t    firstInstance;
} VkDrawIndirectCommand;

Члены

  • vertexCount — количество вершин для отрисовки.
  • instanceCount — количество экземпляров для отрисовки.
  • firstVertex — индекс первой вершины для отрисовки.
  • firstInstance — ID экземпляра первого экземпляра для отрисовки.

Описание

Члены VkDrawIndirectCommand имеют то же значение, что и одноимённые параметры vkCmdDraw.

Допустимое использование
  • Для заданного связывания буфера вершин любые извлекаемые данные атрибутов должны полностью содержаться в соответствующем связывании буфера вершин, как описано в html/vkspec.html#fxvertex-input
  • Если функция drawIndirectFirstInstance не включена, firstInstance должно быть 0

См. также

vkCmdDrawIndirect

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDrawIndirectCommand

VkEventCreateInfo(3)

Имя

VkEventCreateInfo - Структура, определяющая параметры вновь созданного события

C-спецификация

Структура VkEventCreateInfo определяется следующим образом:

typedef struct VkEventCreateInfo {
    VkStructureType       sType;
    const void*           pNext;
    VkEventCreateFlags    flags;
} VkEventCreateInfo;

Члены

  • sType — тип этой структуры.
  • pNext — NULL или указатель на структуру, зависящую от расширения.
  • flags — зарезервировано для будущих использований.

Описание

Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0

См. также

VkEventCreateFlags, VkStructureType, vkCreateEvent

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkEventCreateInfo

VkExtensionProperties(3)

Имя

VkExtensionProperties - Структура, определяющая свойства расширения

C-спецификация

Структура VkExtensionProperties определяется следующим образом:

typedef struct VkExtensionProperties {
    char        extensionName[VK_MAX_EXTENSION_NAME_SIZE];
    uint32_t    specVersion;
} VkExtensionProperties;

Члены

  • extensionName — строка, завершающаяся нулём, указывающая имя расширения.
  • specVersion — версия этого расширения. Это целое число, увеличивающееся при изменениях, обратно совместимых.

См. также

vkEnumerateDeviceExtensionProperties, vkEnumerateInstanceExtensionProperties

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkExtensionProperties

VkExtent2D(3)

Имя

VkExtent2D - Структура, определяющая двумерную протяжённость

C-спецификация

Двумерная протяжённость определяется структурой:

typedef struct VkExtent2D {
    uint32_t    width;
    uint32_t    height;
} VkExtent2D;

Члены

  • width — ширина протяжённости.
  • height — высота протяжённости.

См. также

VkRect2D, vkGetRenderAreaGranularity

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkExtent2D

VkExtent3D(3)

Имя

VkExtent3D - Структура, определяющая трёхмерную протяжённость

C-спецификация

Трёхмерная протяжённость определяется структурой:

typedef struct VkExtent3D {
    uint32_t    width;
    uint32_t    height;
    uint32_t    depth;
} VkExtent3D;

Члены

  • width — ширина протяжённости.
  • height — высота протяжённости.
  • depth — глубина протяжённости.

См. также

VkBufferImageCopy, VkImageCopy, VkImageCreateInfo, VkImageFormatProperties, VkImageResolve, VkQueueFamilyProperties, VkSparseImageFormatProperties, VkSparseImageMemoryBind

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkExtent3D

VkFenceCreateInfo(3)

Имя

VkFenceCreateInfo - Структура, определяющая параметры вновь созданного забора

C-спецификация

Структура VkFenceCreateInfo определяется следующим образом:

typedef struct VkFenceCreateInfo {
    VkStructureType       sType;
    const void*           pNext;
    VkFenceCreateFlags    flags;
} VkFenceCreateInfo;

Члены

  • sType — тип этой структуры.
  • pNext — NULL или указатель на структуру, зависящую от расширения.
  • flags — битовая маска VkFenceCreateFlagBits, определяющая начальное состояние и поведение забора.

Описание

Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть допустимым сочетанием значений VkFenceCreateFlagBits

См. также

VkFenceCreateFlags, VkStructureType, vkCreateFence

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFenceCreateInfo

VkFormatProperties(3)

Имя

VkFormatProperties - Структура, определяющая свойства формата изображения

C-спецификация

Структура VkFormatProperties определяется следующим образом:

typedef struct VkFormatProperties {
    VkFormatFeatureFlags    linearTilingFeatures;
    VkFormatFeatureFlags    optimalTilingFeatures;
    VkFormatFeatureFlags    bufferFeatures;
} VkFormatProperties;

Члены

  • linearTilingFeatures — битовая маска VkFormatFeatureFlagBits, определяющая функции, поддерживаемые изображениями, созданными с параметром tiling VK_IMAGE_TILING_LINEAR.
  • optimalTilingFeatures — битовая маска VkFormatFeatureFlagBits, определяющая функции, поддерживаемые изображениями, созданными с параметром tiling VK_IMAGE_TILING_OPTIMAL.
  • bufferFeatures — битовая маска VkFormatFeatureFlagBits, определяющая функции, поддерживаемые буферами.

Описание

Примечание

Если не поддерживаются флаги функций формата, единственным возможным использованием будет перенос изображений — которые сами по себе не полезны. Таким образом, если не поддерживаются флаги функций формата, сам формат не поддерживается, и изображения этого формата не могут быть созданы.

Если format — это формат блочной компрессии, то буферы не должны поддерживать какие-либо функции для этого формата.

См. также

VkFormatFeatureFlags, vkGetPhysicalDeviceFormatProperties

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFormatProperties

VkFramebufferCreateInfo(3)

Имя

VkFramebufferCreateInfo - Структура, определяющая параметры вновь созданного буфера кадра

C-спецификация

Структура VkFramebufferCreateInfo определяется следующим образом:

typedef struct VkFramebufferCreateInfo {
    VkStructureType             sType;
    const void*                 pNext;
    VkFramebufferCreateFlags    flags;
    VkRenderPass                renderPass;
    uint32_t                    attachmentCount;
    const VkImageView*          pAttachments;
    uint32_t                    width;
    uint32_t                    height;
    uint32_t                    layers;
} VkFramebufferCreateInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • flags is reserved for future use.
  • renderPass is a render pass that defines what render passes the framebuffer will be compatible with. See Render Pass Compatibility for details.
  • attachmentCount is the number of attachments.
  • pAttachments is an array of VkImageView handles, each of which will be used as the corresponding attachment in a render pass instance.
  • width, height and layers define the dimensions of the framebuffer.

Описание

Используемые в качестве прикреплений подобъекты изображения не должны каким-либо иным образом использоваться в течение времени существования экземпляра прохода отрисовки.

Примечание

Это ограничение означает, что проход отрисовки имеет полное представление обо всех использованиях всех прикреплений, поэтому реализация может принимать правильные решения о том, когда и как выполнять переходы компоновки, когда перекрывать выполнение подобъектов и т. д.

Допускается, чтобы подобъект не использовал цветные или глубину/трафарет прикрепления, а вместо этого использовал побочные эффекты шейдера, такие как запись изображений и атомарные операции, для создания выходных данных. В этом случае подобъект продолжает использовать width, height, и layers буфера кадра для определения размеров области отрисовки, и rasterizationSamples из VkPipelineMultisampleStateCreateInfo каждого конвейера для определения количества выборок, используемых при растеризации; однако, если VkPhysicalDeviceFeatures::variableMultisampleRate is VK_FALSE, then all pipelines to be bound with a given zero-attachment subpass must have the same value for VkPipelineMultisampleStateCreateInfo::rasterizationSamples.

Допустимое использование
  • attachmentCount должно быть равно количеству прикреплений, указанному в renderPass
  • Любой заданный элемент pAttachments, используемый в качестве цветного прикрепления или прикрепления разрешения renderPass, должен быть создан со значением usage, включающим VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
  • Любой заданный элемент pAttachments, используемый в качестве прикрепления глубины/трафарета renderPass, должен быть создан со значением usage, включающим VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
  • Любой заданный элемент pAttachments, используемый в качестве входного прикрепления renderPass, должен быть создан со значением usage, включающим VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
  • Любой заданный элемент pAttachments должен быть создан со значением VkFormat, совпадающим со значением VkFormat, указанным соответствующим VkAttachmentDescription в renderPass
  • Любой заданный элемент pAttachments должен быть создан со значением samples, совпадающим со значением samples, указанным соответствующим VkAttachmentDescription в renderPass
  • Любой заданный элемент pAttachments должен иметь размеры не меньше соответствующего размера буфера кадра
  • Любой заданный элемент pAttachments должен указывать только один уровень mip
  • Любой заданный элемент pAttachments должен быть создан с тождественным преобразованием
  • width должно быть больше 0.
  • width должно быть меньше или равно VkPhysicalDeviceLimits::maxFramebufferWidth
  • height должно быть больше 0.
  • height должно быть меньше или равно VkPhysicalDeviceLimits::maxFramebufferHeight
  • layers должно быть больше 0.
  • layers должно быть меньше или равно VkPhysicalDeviceLimits::maxFramebufferLayers
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • renderPass должно быть допустимым дескриптором VkRenderPass
  • Если attachmentCount не 0, pAttachments должно быть указателем на массив из attachmentCount допустимых дескрипторов VkImageView
  • И renderPass, и элементы pAttachments, являющиеся допустимыми дескрипторами, должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkFramebufferCreateFlags, VkImageView, VkRenderPass, VkStructureType, vkCreateFramebuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFramebufferCreateInfo

VkGraphicsPipelineCreateInfo(3)

Имя

VkGraphicsPipelineCreateInfo - Структура, задающая параметры вновь созданного графического конвейера

C Спецификация

Структура VkGraphicsPipelineCreateInfo определяется как:

typedef struct VkGraphicsPipelineCreateInfo {
    VkStructureType                                  sType;
    const void*                                      pNext;
    VkPipelineCreateFlags                            flags;
    uint32_t                                         stageCount;
    const VkPipelineShaderStageCreateInfo*           pStages;
    const VkPipelineVertexInputStateCreateInfo*      pVertexInputState;
    const VkPipelineInputAssemblyStateCreateInfo*    pInputAssemblyState;
    const VkPipelineTessellationStateCreateInfo*     pTessellationState;
    const VkPipelineViewportStateCreateInfo*         pViewportState;
    const VkPipelineRasterizationStateCreateInfo*    pRasterizationState;
    const VkPipelineMultisampleStateCreateInfo*      pMultisampleState;
    const VkPipelineDepthStencilStateCreateInfo*     pDepthStencilState;
    const VkPipelineColorBlendStateCreateInfo*       pColorBlendState;
    const VkPipelineDynamicStateCreateInfo*          pDynamicState;
    VkPipelineLayout                                 layout;
    VkRenderPass                                     renderPass;
    uint32_t                                         subpass;
    VkPipeline                                       basePipelineHandle;
    int32_t                                          basePipelineIndex;
} VkGraphicsPipelineCreateInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • flags is a bitmask of VkPipelineCreateFlagBits specifying how the pipeline will be generated.
  • stageCount is the number of entries in the pStages array.
  • pStages is an array of size stageCount structures of type VkPipelineShaderStageCreateInfo describing the set of the shader stages to be included in the graphics pipeline.
  • pVertexInputState is a pointer to an instance of the VkPipelineVertexInputStateCreateInfo structure.
  • pInputAssemblyState is a pointer to an instance of the VkPipelineInputAssemblyStateCreateInfo structure which determines input assembly behavior, as described in Drawing Commands.
  • pTessellationState is a pointer to an instance of the VkPipelineTessellationStateCreateInfo structure, and is ignored if the pipeline does not include a tessellation control shader stage and tessellation evaluation shader stage.
  • pViewportState is a pointer to an instance of the VkPipelineViewportStateCreateInfo structure, and is ignored if the pipeline has rasterization disabled.
  • pRasterizationState is a pointer to an instance of the VkPipelineRasterizationStateCreateInfo structure.
  • pMultisampleState is a pointer to an instance of the VkPipelineMultisampleStateCreateInfo, and is ignored if the pipeline has rasterization disabled.
  • pDepthStencilState is a pointer to an instance of the VkPipelineDepthStencilStateCreateInfo structure, and is ignored if the pipeline has rasterization disabled or if the subpass of the render pass the pipeline is created against does not use a depth/stencil attachment.
  • pColorBlendState is a pointer to an instance of the VkPipelineColorBlendStateCreateInfo structure, and is ignored if the pipeline has rasterization disabled or if the subpass of the render pass the pipeline is created against does not use any color attachments.
  • pDynamicState is a pointer to VkPipelineDynamicStateCreateInfo and is used to indicate which properties of the pipeline state object are dynamic and can be changed independently of the pipeline state. This can be NULL, which means no state in the pipeline is considered dynamic.
  • layout is the description of binding locations used by both the pipeline and descriptor sets used with the pipeline.
  • renderPass is a handle to a render pass object describing the environment in which the pipeline will be used; the pipeline must only be used with an instance of any render pass compatible with the one provided. See Render Pass Compatibility for more information.
  • subpass is the index of the subpass in the render pass where this pipeline will be used.
  • basePipelineHandle is a pipeline to derive from.
  • basePipelineIndex is an index into the pCreateInfos parameter to use as a pipeline to derive from.

Описание

Параметры basePipelineHandle и basePipelineIndex описаны более подробно в Pipeline Derivatives.

pStages указывает на массив структур VkPipelineShaderStageCreateInfo, которые были описаны ранее в разделе Compute Pipelines.

pDynamicState указывает на структуру типа VkPipelineDynamicStateCreateInfo.

Допустимое использование
  • Если flags содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, и basePipelineIndex равно -1, basePipelineHandle должен быть действительной дескриптором графического VkPipeline
  • Если flags содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, и basePipelineHandle равно VK_NULL_HANDLE, basePipelineIndex должен быть действительным индексом в параметре pCreateInfos вызывающей команды
  • Если flags содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, и basePipelineIndex не равно -1, basePipelineHandle должен быть VK_NULL_HANDLE
  • Если flags содержит флаг VK_PIPELINE_CREATE_DERIVATIVE_BIT, и basePipelineHandle не равно VK_NULL_HANDLE, basePipelineIndex должен быть -1
  • Член stage каждого элемента pStages должен быть уникальным
  • Член stage одного элемента pStages должен быть VK_SHADER_STAGE_VERTEX_BIT
  • Член stage любого данного элемента pStages не должен быть VK_SHADER_STAGE_COMPUTE_BIT
  • Если pStages включает этап шейдера управления тесселяцией, он должен включать этап шейдера оценки тесселяции
  • Если pStages включает этап шейдера оценки тесселяции, он должен включать этап шейдера управления тесселяцией
  • Если pStages включает этап шейдера управления тесселяцией и этап шейдера оценки тесселяции, pTessellationState должен быть указателем на действительную структуру VkPipelineTessellationStateCreateInfo
  • Если pStages включает этапы шейдера тесселяции, код шейдера хотя бы одного этапа должен содержать инструкцию OpExecutionMode, которая указывает тип подразделения в конвейере
  • Если pStages включает этапы шейдера тесселяции, и код шейдера обоих этапов содержит инструкцию OpExecutionMode, которая указывает тип подразделения в конвейере, они должны оба указывать один и тот же режим подразделения
  • Если pStages включает этапы шейдера тесселяции, код шейдера хотя бы одного этапа должен содержать инструкцию OpExecutionMode, которая указывает размер выходного патча в конвейере
  • Если pStages включает этапы шейдера тесселяции, и код шейдера обоих содержит инструкцию OpExecutionMode, которая указывает размер выходного патча в конвейере, они должны оба указывать один и тот же размер патча
  • Если pStages включает этапы шейдера тесселяции, член topology pInputAssembly должен быть VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
  • Если член topology pInputAssembly равен VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, pStages должен включать этапы шейдера тесселяции
  • Если pStages включает этап шейдера геометрии и не включает никаких этапов шейдера тесселяции, его код шейдера должен содержать инструкцию OpExecutionMode, которая указывает тип примитива ввода, совместимый с топологией примитива, указанной в pInputAssembly
  • Если pStages включает этап шейдера геометрии, а также включает этапы шейдера тесселяции, его код шейдера должен содержать инструкцию OpExecutionMode, которая указывает тип примитива ввода, совместимый с топологией примитива, которая выводится этапами тесселяции
  • Если pStages включает этап шейдера фрагментов и этап шейдера геометрии, и код шейдера фрагментов считывает из входной переменной, которая декорирована PrimitiveID, то код шейдера геометрии должен записывать в соответствующую выходную переменную, декорированную PrimitiveID, по всем путям выполнения
  • Если pStages включает этап шейдера фрагментов, его код шейдера не должен считывать из любого вложенного ввода, который определен как VK_ATTACHMENT_UNUSED в subpass
  • Код шейдера для точек входа, идентифицированных pStages, и остальное состояние, идентифицированное этой структурой, должны соответствовать правилам связывания конвейера, описанным в главе Интерфейсы шейдера
  • Если растеризация не отключена и subpass использует вложение глубины/трафарета в renderpass, которое имеет компоновку VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL в VkAttachmentReference, определенном subpass, член depthWriteEnable pDepthStencilState должен быть VK_FALSE
  • Если растеризация не отключена и subpass использует вложение глубины/трафарета в renderpass, которое имеет компоновку VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL в VkAttachmentReference, определенном subpass, члены failOp, passOp и depthFailOp каждого из членов front и back pDepthStencilState должны быть VK_STENCIL_OP_KEEP
  • Если растеризация не отключена и подпроход использует цветовые вложения, то для каждого цветового вложения в подпроходе член blendEnable соответствующего элемента члена pAttachment pColorBlendState должен быть VK_FALSE, если format вложения не поддерживает операции смешивания цветов, как указано флагом VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT в VkFormatProperties::linearTilingFeatures или VkFormatProperties::optimalTilingFeatures, возвращаемым vkGetPhysicalDeviceFormatProperties
  • Если растеризация не отключена и подпроход использует цветовые вложения, член attachmentCount pColorBlendState должен быть равен colorAttachmentCount, используемому для создания subpass
  • Если ни один элемент члена pDynamicStates pDynamicState не равен VK_DYNAMIC_STATE_VIEWPORT, член pViewports pViewportState должен быть указателем на массив структур pViewportState::viewportCount VkViewport
  • Если ни один элемент члена pDynamicStates pDynamicState не равен VK_DYNAMIC_STATE_SCISSOR, член pScissors pViewportState должен быть указателем на массив структур pViewportState::scissorCount VkRect2D
  • Если функция широких линий не включена, и ни один элемент члена pDynamicStates pDynamicState не равен VK_DYNAMIC_STATE_LINE_WIDTH, член lineWidth pRasterizationState должен быть 1.0
  • Если член rasterizerDiscardEnable pRasterizationState равен VK_FALSE, pViewportState должен быть указателем на действительную структуру VkPipelineViewportStateCreateInfo
  • Если член rasterizerDiscardEnable pRasterizationState равен VK_FALSE, pMultisampleState должен быть указателем на действительную структуру VkPipelineMultisampleStateCreateInfo
  • Если член rasterizerDiscardEnable pRasterizationState равен VK_FALSE, и subpass использует вложение глубины/трафарета, pDepthStencilState должен быть указателем на действительную структуру VkPipelineDepthStencilStateCreateInfo
  • Если член rasterizerDiscardEnable pRasterizationState равен VK_FALSE, и subpass использует цветовые вложения, pColorBlendState должен быть указателем на действительную структуру VkPipelineColorBlendStateCreateInfo
  • Если функция ограничения смещения глубины не включена, ни один элемент члена pDynamicStates pDynamicState не равен VK_DYNAMIC_STATE_DEPTH_BIAS, и член depthBiasEnable pDepthStencil равен VK_TRUE, член depthBiasClamp pDepthStencil должен быть 0.0
  • Если ни один элемент члена pDynamicStates pDynamicState не равен VK_DYNAMIC_STATE_DEPTH_BOUNDS, и член depthBoundsTestEnable pDepthStencil равен VK_TRUE, члены minDepthBounds и maxDepthBounds pDepthStencil должны находиться в диапазоне от 0.0 до 1.0, включительно
  • layout должен быть согласованным со всеми шейдерами, указанными в pStages
  • Если subpass использует цветовые и/или вложения глубины/трафарета, то член rasterizationSamples pMultisampleState должен быть таким же, как количество выборок для этих вложений подпрохода
  • Если subpass не использует никаких цветовых и/или вложений глубины/трафарета, то член rasterizationSamples pMultisampleState должен следовать правилам для подпрохода без вложений
  • subpass должен быть допустимым подпроходом внутри renderpass
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
  • pNext должен быть NULL
  • flags должен быть допустимым сочетанием значений VkPipelineCreateFlagBits
  • pStages должен быть указателем на массив из stageCount допустимых VkPipelineShaderStageCreateInfo структур
  • pVertexInputState должен быть указателем на допустимую VkPipelineVertexInputStateCreateInfo структуру
  • pInputAssemblyState должен быть указателем на допустимую VkPipelineInputAssemblyStateCreateInfo структуру
  • pRasterizationState должен быть указателем на допустимую VkPipelineRasterizationStateCreateInfo структуру
  • Если pDynamicState не NULL, pDynamicState должен быть указателем на допустимую VkPipelineDynamicStateCreateInfo структуру
  • layout должен быть допустимой VkPipelineLayout дескриптором
  • renderPass должен быть допустимой VkRenderPass дескриптором
  • stageCount должен быть больше 0
  • Каждый из basePipelineHandle, layout и renderPass, являющиеся допустимыми дескрипторами, должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkPipeline, VkPipelineColorBlendStateCreateInfo, VkPipelineCreateFlags, VkPipelineDepthStencilStateCreateInfo, VkPipelineDynamicStateCreateInfo, VkPipelineInputAssemblyStateCreateInfo, VkPipelineLayout, VkPipelineMultisampleStateCreateInfo, VkPipelineRasterizationStateCreateInfo, VkPipelineShaderStageCreateInfo, VkPipelineTessellationStateCreateInfo, VkPipelineVertexInputStateCreateInfo, VkPipelineViewportStateCreateInfo, VkRenderPass, VkStructureType, vkCreateGraphicsPipelines

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkGraphicsPipelineCreateInfo

VkImageBlit(3)

Имя

VkImageBlit - Структура, определяющая операцию копирования изображения

C-спецификация

Структура VkImageBlit определяется как:

typedef struct VkImageBlit {
    VkImageSubresourceLayers    srcSubresource;
    VkOffset3D                  srcOffsets[2];
    VkImageSubresourceLayers    dstSubresource;
    VkOffset3D                  dstOffsets[2];
} VkImageBlit;

Члены

  • srcSubresource является подресурсом для копирования.
  • srcOffsets является массивом из двух структур VkOffset3D, определяющих границы исходной области внутри srcSubresource.
  • dstSubresource является подресурсом для записи.
  • dstOffsets является массивом из двух структур VkOffset3D, определяющих границы целевой области внутри dstSubresource.

Описание

Для каждого элемента массива pRegions выполняется операция копирования в указанные исходную и целевую области.

Допустимое использование
  • Член aspectMask srcSubresource и dstSubresource должны совпадать
  • Член layerCount srcSubresource и dstSubresource должны совпадать
  • Если любой из параметров srcImage или dstImage вызывающей команды имеет тип VkImageType VK_IMAGE_TYPE_3D, то члены baseArrayLayer и layerCount как srcSubresource, так и dstSubresource должны быть 0 и 1, соответственно
  • Член aspectMask srcSubresource должен указывать на аспекты, присутствующие в srcImage вызывающей команды
  • Член aspectMask dstSubresource должен указывать на аспекты, присутствующие в dstImage вызывающей команды
  • srcOffset[0].x и srcOffset[1].x должны быть больше или равны 0 и меньше или равны ширине подресурса исходного изображения
  • srcOffset[0].y и srcOffset[1].y должны быть больше или равны 0 и меньше или равны высоте подресурса исходного изображения
  • Если srcImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D, то srcOffset[0].y должен быть 0 и srcOffset[1].y должен быть 1.
  • srcOffset[0].z и srcOffset[1].z должны быть больше или равны 0 и меньше или равны глубине подресурса исходного изображения
  • Если srcImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D или VK_IMAGE_TYPE_2D, то srcOffset[0].z должен быть 0 и srcOffset[1].z должен быть 1.
  • dstOffset[0].x и dstOffset[1].x должны быть больше или равны 0 и меньше или равны ширине подресурса целевого изображения
  • dstOffset[0].y и dstOffset[1].y должны быть больше или равны 0 и меньше или равны высоте подресурса целевого изображения
  • Если dstImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D, то dstOffset[0].y должен быть 0 и dstOffset[1].y должен быть 1.
  • dstOffset[0].z и dstOffset[1].z должны быть больше или равны 0 и меньше или равны глубине подресурса целевого изображения
  • Если dstImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D или VK_IMAGE_TYPE_2D, то dstOffset[0].z должен быть 0 и dstOffset[1].z должен быть 1.
Допустимое использование (неявное)
  • srcSubresource должен быть допустимой VkImageSubresourceLayers структурой
  • dstSubresource должен быть допустимой VkImageSubresourceLayers структурой

См. также

VkImageSubresourceLayers, VkOffset3D, vkCmdBlitImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageBlit

VkImageCopy(3)

Имя

VkImageCopy - Структура, определяющая операцию копирования изображения

C-спецификация

Структура VkImageCopy определяется как:

typedef struct VkImageCopy {
    VkImageSubresourceLayers    srcSubresource;
    VkOffset3D                  srcOffset;
    VkImageSubresourceLayers    dstSubresource;
    VkOffset3D                  dstOffset;
    VkExtent3D                  extent;
} VkImageCopy;

Члены

  • srcSubresource и dstSubresource являются структурами VkImageSubresourceLayers, определяющими подресурсы изображений, используемые для исходных и целевых данных изображения, соответственно.
  • srcOffset и dstOffset выбирают начальные смещения x, y и z в текселях подобластей исходных и целевых данных изображения.
  • extent является размером в текселях исходного изображения для копирования в width, height и depth.

Описание

Копирование выполняется слой за слоем, начиная с члена baseArrayLayer srcSubresource для источника и dstSubresource для назначения. layerCount слоев копируются в целевое изображение.

Правильное использование
  • Элемент aspectMask srcSubresource и dstSubresource должны совпадать
  • Элемент layerCount srcSubresource и dstSubresource должны совпадать
  • Если любой из параметров srcImage или dstImage вызывающей команды имеет тип VkImageType VK_IMAGE_TYPE_3D, элементы baseArrayLayer и layerCount как в srcSubresource, так и в dstSubresource должны быть 0 и 1, соответственно
  • Элемент aspectMask srcSubresource должен указывать на аспекты, присутствующие в srcImage вызывающей команды
  • Элемент aspectMask dstSubresource должен указывать на аспекты, присутствующие в dstImage вызывающей команды
  • srcOffset.x и (extent.width + srcOffset.x) должны быть больше или равны 0 и меньше или равны ширине подресурса исходного изображения
  • srcOffset.y и (extent.height + srcOffset.y) должны быть больше или равны 0 и меньше или равны высоте подресурса исходного изображения
  • Если srcImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D, то srcOffset.y должен быть 0, а extent.height должен быть 1.
  • srcOffset.z и (extent.depth + srcOffset.z) должны быть больше или равны 0 и меньше или равны глубине подресурса исходного изображения
  • Если srcImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D или VK_IMAGE_TYPE_2D, то srcOffset.z должен быть 0, а extent.depth должен быть 1.
  • srcSubresource.baseArrayLayer должен быть меньше, а (srcSubresource.layerCount + srcSubresource.baseArrayLayer) должен быть меньше или равен количеству слоев в исходном изображении
  • dstOffset.x и (extent.width + dstOffset.x) должны быть больше или равны 0 и меньше или равны ширине подресурса целевого изображения
  • dstOffset.y и (extent.height + dstOffset.y) должны быть больше или равны 0 и меньше или равны высоте подресурса целевого изображения
  • Если dstImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D, то dstOffset.y должен быть 0, а extent.height должен быть 1.
  • dstOffset.z и (extent.depth + dstOffset.z) должны быть больше или равны 0 и меньше или равны глубине подресурса целевого изображения
  • Если dstImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D или VK_IMAGE_TYPE_2D, то dstOffset.z должен быть 0, а extent.depth должен быть 1.
  • dstSubresource.baseArrayLayer должен быть меньше, а (dstSubresource.layerCount + dstSubresource.baseArrayLayer) должен быть меньше или равен количеству слоев в целевом изображении
  • Если srcImage вызывающей команды является изображением в сжатом формате, все члены srcOffset должны быть кратными соответствующим размерам сжатого блока текстур
  • Если srcImage вызывающей команды является изображением в сжатом формате, extent.width должен быть кратным ширине сжатого блока текстур, или (extent.width + srcOffset.x) должен быть равен ширине подресурса исходного изображения
  • Если srcImage вызывающей команды является изображением в сжатом формате, extent.height должен быть кратным высоте сжатого блока текстур, или (extent.height + srcOffset.y) должен быть равен высоте подресурса исходного изображения
  • Если srcImage вызывающей команды является изображением в сжатом формате, extent.depth должен быть кратным глубине сжатого блока текстур, или (extent.depth + srcOffset.z) должен быть равен глубине подресурса исходного изображения
  • Если dstImage вызывающей команды является изображением в сжатом формате, все члены dstOffset должны быть кратными соответствующим размерам сжатого блока текстур
  • Если dstImage вызывающей команды является изображением в сжатом формате, extent.width должен быть кратным ширине сжатого блока текстур, или (extent.width + dstOffset.x) должен быть равен ширине подресурса целевого изображения
  • Если dstImage вызывающей команды является изображением в сжатом формате, extent.height должен быть кратным высоте сжатого блока текстур, или (extent.height + dstOffset.y) должен быть равен высоте подресурса целевого изображения
  • Если dstImage вызывающей команды является изображением в сжатом формате, extent.depth должен быть кратным глубине сжатого блока текстур, или (extent.depth + dstOffset.z) должен быть равен глубине подресурса целевого изображения
  • srcOffset, dstOffset и extent должны соответствовать требованиям к гранулярности передачи изображений семейства очередей, к которому они будут отправлены, как описано в Physical Device Enumeration
Правильное использование (неявное)
  • srcSubresource должен быть допустимой структурой VkImageSubresourceLayers
  • dstSubresource должен быть допустимой структурой VkImageSubresourceLayers

См. также

VkExtent3D, VkImageSubresourceLayers, VkOffset3D, vkCmdCopyImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageCopy

VkImageCreateInfo(3)

Имя

VkImageCreateInfo - Структура, определяющая параметры вновь созданного объекта изображения

C-спецификация

Структура VkImageCreateInfo определяется как:

typedef struct VkImageCreateInfo {
    VkStructureType          sType;
    const void*              pNext;
    VkImageCreateFlags       flags;
    VkImageType              imageType;
    VkFormat                 format;
    VkExtent3D               extent;
    uint32_t                 mipLevels;
    uint32_t                 arrayLayers;
    VkSampleCountFlagBits    samples;
    VkImageTiling            tiling;
    VkImageUsageFlags        usage;
    VkSharingMode            sharingMode;
    uint32_t                 queueFamilyIndexCount;
    const uint32_t*          pQueueFamilyIndices;
    VkImageLayout            initialLayout;
} VkImageCreateInfo;

Члены

  • sType - это тип этой структуры.
  • pNext - это NULL или указатель на структуру, специфичную для расширения.
  • flags - это битовая маска VkImageCreateFlagBits, описывающая дополнительные параметры изображения.
  • imageType - это значение VkImageType, указывающее базовую размерность изображения. Слои в текстурах массива не считаются размерностью для целей типа изображения.
  • format - это VkFormat, описывающий формат и тип элементов данных, которые будут содержаться в изображении.
  • extent - это VkExtent3D, описывающий количество элементов данных в каждом измерении базового уровня.
  • mipLevels описывает количество уровней детализации, доступных для уменьшенного сэмплирования изображения.
  • arrayLayers - это количество слоев в изображении.
  • samples - это количество подвыборок элементов данных в изображении, как определено в VkSampleCountFlagBits. См. Multisampling.
  • tiling - это значение VkImageTiling, указывающее на расположение элементов данных в памяти.
  • usage - это битовая маска VkImageUsageFlagBits, описывающая предполагаемое использование изображения.
  • sharingMode - это значение VkSharingMode, указывающее режим общего доступа к изображению, когда к нему будут обращаться несколько семейств очередей.
  • queueFamilyIndexCount - это количество записей в массиве pQueueFamilyIndices.
  • pQueueFamilyIndices - это список семейств очередей, которые будут получать доступ к этому изображению (игнорируется, если sharingMode не VK_SHARING_MODE_CONCURRENT).
  • initialLayout - это значение VkImageLayout, указывающее начальный VkImageLayout всех подресурсов изображения. См. Image Layouts.

Описание

Изображения, созданные с tiling равным VK_IMAGE_TILING_LINEAR, имеют дополнительные ограничения на их пределы и возможности по сравнению с изображениями, созданными с tiling равным VK_IMAGE_TILING_OPTIMAL. Создание изображений с чередованием VK_IMAGE_TILING_LINEAR может не поддерживаться, если другие параметры не удовлетворяют всем ограничениям:

  • imageType есть VK_IMAGE_TYPE_2D
  • format не является форматом глубины/трафарета
  • mipLevels равно 1
  • arrayLayers равно 1
  • samples есть VK_SAMPLE_COUNT_1_BIT
  • usage включает только VK_IMAGE_USAGE_TRANSFER_SRC_BIT и/или VK_IMAGE_USAGE_TRANSFER_DST_BIT

Реализации могут поддерживать дополнительные ограничения и возможности, помимо перечисленных выше.

Для запроса конкретных возможностей реализации для данной комбинации format, imageType, tiling, usage и flags, вызовите vkGetPhysicalDeviceImageFormatProperties. Возвращаемое значение указывает, поддерживается ли данная комбинация настроек изображения. В случае успеха выходной параметр VkImageFormatProperties указывает набор допустимых битов samples и ограничения для extent, mipLevels и arrayLayers.

Чтобы определить набор допустимых битов usage для данного формата, вызовите vkGetPhysicalDeviceFormatProperties.

Допустимое использование
  • Сочетание format, imageType, tiling, usage, и flags должно поддерживаться, как указано возвращаемым значением VK_SUCCESS из vkGetPhysicalDeviceImageFormatProperties, вызванного с теми же значениями, переданными соответствующим параметрам.
  • Если sharingMode равно VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices должен быть указателем на массив значений queueFamilyIndexCount uint32_t
  • Если sharingMode равно VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount должен быть больше 1
  • Если sharingMode равно VK_SHARING_MODE_CONCURRENT, каждый элемент pQueueFamilyIndices должен быть уникальным и должен быть меньше pQueueFamilyPropertyCount, возвращаемого vkGetPhysicalDeviceQueueFamilyProperties для physicalDevice, который использовался для создания device
  • format не должен быть VK_FORMAT_UNDEFINED
  • extent::width должен быть больше 0.
  • extent::height должен быть больше 0.
  • extent::depth должен быть больше 0.
  • mipLevels должен быть больше 0
  • arrayLayers должен быть больше 0
  • Если flags содержит VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, imageType должен быть VK_IMAGE_TYPE_2D
  • Если imageType равно VK_IMAGE_TYPE_1D, extent.width должен быть меньше или равен VkPhysicalDeviceLimits::maxImageDimension1D, или VkImageFormatProperties::maxExtent.width (как возвращается vkGetPhysicalDeviceImageFormatProperties с format, imageType, tiling, usage, и flags равными тем, что в этой структуре) - в зависимости от того, какое значение больше
  • Если imageType равно VK_IMAGE_TYPE_2D и flags не содержит VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, extent.width и extent.height должны быть меньше или равны VkPhysicalDeviceLimits::maxImageDimension2D, или VkImageFormatProperties::maxExtent.width/height (как возвращается vkGetPhysicalDeviceImageFormatProperties с format, imageType, tiling, usage, и flags равными тем, что в этой структуре) - в зависимости от того, какое значение больше
  • Если imageType равно VK_IMAGE_TYPE_2D и flags содержит VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, extent.width и extent.height должны быть меньше или равны VkPhysicalDeviceLimits::maxImageDimensionCube, или VkImageFormatProperties::maxExtent.width/height (как возвращается vkGetPhysicalDeviceImageFormatProperties с format, imageType, tiling, usage, и flags равными тем, что в этой структуре) - в зависимости от того, какое значение больше
  • Если imageType равно VK_IMAGE_TYPE_2D и flags содержит VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, extent.width и extent.height должны быть равны, и arrayLayers должен быть больше или равен 6
  • Если imageType равно VK_IMAGE_TYPE_3D, extent.width, extent.height и extent.depth должны быть меньше или равны VkPhysicalDeviceLimits::maxImageDimension3D, или VkImageFormatProperties::maxExtent.width/height/depth (как возвращается vkGetPhysicalDeviceImageFormatProperties с format, imageType, tiling, usage, и flags равными тем, что в этой структуре) - в зависимости от того, какое значение больше
  • Если imageType равно VK_IMAGE_TYPE_1D, и extent.height и extent.depth должны быть 1
  • Если imageType равно VK_IMAGE_TYPE_2D, extent.depth должен быть 1
  • mipLevels должен быть меньше или равен ⌊log2(max(extent.width, extent.height, extent.depth))⌋ + 1.
  • Если любой из extent.width, extent.height, или extent.depth больше, чем одноимённые члены VkPhysicalDeviceLimits::maxImageDimension3D, mipLevels должен быть меньше или равен VkImageFormatProperties::maxMipLevels (как возвращается vkGetPhysicalDeviceImageFormatProperties с format, imageType, tiling, usage, и flags равными тем, что в этой структуре)
  • arrayLayers должен быть меньше или равен VkImageFormatProperties::maxArrayLayers (как возвращается vkGetPhysicalDeviceImageFormatProperties с format, imageType, tiling, usage, и flags равными тем, что в этой структуре)
  • Если imageType равно VK_IMAGE_TYPE_3D, arrayLayers должен быть 1.
  • Если samples не равно VK_SAMPLE_COUNT_1_BIT, imageType должен быть VK_IMAGE_TYPE_2D, flags не должен содержать VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, tiling должен быть VK_IMAGE_TILING_OPTIMAL, и mipLevels должен быть равен 1
  • Если usage включает VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, то биты, отличные от VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, и VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, не должны быть установлены
  • Если usage включает VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, или VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, extent.width должен быть меньше или равен VkPhysicalDeviceLimits::maxFramebufferWidth
  • Если usage включает VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, или VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, extent.height должен быть меньше или равен VkPhysicalDeviceLimits::maxFramebufferHeight
  • Если usage включает VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, usage также должен содержать по крайней мере один из VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, или VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT.
  • samples должен быть битовым значением, установленным в VkImageFormatProperties::sampleCounts, возвращаемым vkGetPhysicalDeviceImageFormatProperties с format, imageType, tiling, usage, и flags равными тем, что в этой структуре
  • Если функция multisampled storage images не включена, и usage содержит VK_IMAGE_USAGE_STORAGE_BIT, samples должен быть VK_SAMPLE_COUNT_1_BIT
  • Если функция sparse bindings не включена, flags не должен содержать VK_IMAGE_CREATE_SPARSE_BINDING_BIT
  • Если imageType равно VK_IMAGE_TYPE_1D, flags не должен содержать VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
  • Если функция sparse residency for 2D images не включена, и imageType равно VK_IMAGE_TYPE_2D, flags не должен содержать VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
  • Если функция sparse residency for 3D images не включена, и imageType равно VK_IMAGE_TYPE_3D, flags не должен содержать VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
  • Если функция sparse residency for images with 2 samples не включена, imageType равно VK_IMAGE_TYPE_2D, и samples равно VK_SAMPLE_COUNT_2_BIT, flags не должен содержать VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
  • Если функция sparse residency for images with 4 samples не включена, imageType равно VK_IMAGE_TYPE_2D, и samples равно VK_SAMPLE_COUNT_4_BIT, flags не должен содержать VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
  • Если функция sparse residency for images with 8 samples не включена, imageType равно VK_IMAGE_TYPE_2D, и samples равно VK_SAMPLE_COUNT_8_BIT, flags не должен содержать VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
  • Если функция sparse residency for images with 16 samples не включена, imageType равно VK_IMAGE_TYPE_2D, и samples равно VK_SAMPLE_COUNT_16_BIT, flags не должен содержать VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
  • Если tiling есть VK_IMAGE_TILING_LINEAR, format должен быть форматом, который имеет по крайней мере один поддерживаемый бит признака, присутствующий в значении VkFormatProperties::linearTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если tiling есть VK_IMAGE_TILING_LINEAR, и VkFormatProperties::linearTilingFeatures (как возвращается vkGetPhysicalDeviceFormatProperties с тем же значением format) не включает VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, usage не должен содержать VK_IMAGE_USAGE_SAMPLED_BIT
  • Если tiling есть VK_IMAGE_TILING_LINEAR, и VkFormatProperties::linearTilingFeatures (как возвращается vkGetPhysicalDeviceFormatProperties с тем же значением format) не включает VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, usage не должен содержать VK_IMAGE_USAGE_STORAGE_BIT
  • Если tiling есть VK_IMAGE_TILING_LINEAR, и VkFormatProperties::linearTilingFeatures (как возвращается vkGetPhysicalDeviceFormatProperties с тем же значением format) не включает VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, usage не должен содержать VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
  • Если tiling есть VK_IMAGE_TILING_LINEAR, и VkFormatProperties::linearTilingFeatures (как возвращается vkGetPhysicalDeviceFormatProperties с тем же значением format) не включает VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, usage не должен содержать VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
  • Если tiling есть VK_IMAGE_TILING_OPTIMAL, format должен быть форматом, который имеет по крайней мере один поддерживаемый бит признака, присутствующий в значении VkFormatProperties::optimalTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если tiling есть VK_IMAGE_TILING_OPTIMAL, и VkFormatProperties::optimalTilingFeatures (как возвращается vkGetPhysicalDeviceFormatProperties с тем же значением format) не включает VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, usage не должен содержать VK_IMAGE_USAGE_SAMPLED_BIT
  • Если tiling есть VK_IMAGE_TILING_OPTIMAL, и VkFormatProperties::optimalTilingFeatures (как возвращается vkGetPhysicalDeviceFormatProperties с тем же значением format) не включает VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, usage не должен содержать VK_IMAGE_USAGE_STORAGE_BIT
  • Если tiling есть VK_IMAGE_TILING_OPTIMAL, и VkFormatProperties::optimalTilingFeatures (как возвращается vkGetPhysicalDeviceFormatProperties с тем же значением format) не включает VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, usage не должен содержать VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
  • Если tiling есть VK_IMAGE_TILING_OPTIMAL, и VkFormatProperties::optimalTilingFeatures (как возвращается vkGetPhysicalDeviceFormatProperties с тем же значением format) не включает VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, usage не должен содержать VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
  • Если flags содержит VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT или VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, он также должен содержать VK_IMAGE_CREATE_SPARSE_BINDING_BIT
  • initialLayout должен быть VK_IMAGE_LAYOUT_UNDEFINED или VK_IMAGE_LAYOUT_PREINITIALIZED.
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
  • pNext должен быть NULL
  • flags должен быть допустимым сочетанием значений VkImageCreateFlagBits
  • imageType должен быть допустимым значением VkImageType
  • format должен быть допустимым значением VkFormat
  • samples должен быть допустимым значением VkSampleCountFlagBits
  • tiling должен быть допустимым значением VkImageTiling
  • usage должен быть допустимым сочетанием значений VkImageUsageFlagBits
  • usage не должен быть 0
  • sharingMode должен быть допустимым значением VkSharingMode
  • initialLayout должен быть допустимым значением VkImageLayout

См. также

VkExtent3D, VkFormat, VkImageCreateFlags, VkImageLayout, VkImageTiling, VkImageType, VkImageUsageFlags, VkSampleCountFlagBits, VkSharingMode, VkStructureType, vkCreateImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageCreateInfo

VkImageFormatProperties(3)

Имя

VkImageFormatProperties - Структура, указывающая свойства формата изображения

C Спецификация

Структура VkImageFormatProperties определяется как:

typedef struct VkImageFormatProperties {
    VkExtent3D            maxExtent;
    uint32_t              maxMipLevels;
    uint32_t              maxArrayLayers;
    VkSampleCountFlags    sampleCounts;
    VkDeviceSize          maxResourceSize;
} VkImageFormatProperties;

Члены

  • maxExtent являются максимальными размерами изображения. См. раздел Разрешённые значения Extent ниже, чтобы узнать, как эти значения ограничиваются type.
  • maxMipLevels - это максимальное количество уровней mipmap. maxMipLevels должен быть либо равен 1 (допустимо только если tiling есть VK_IMAGE_TILING_LINEAR) или быть равным ⌈log2(max(width, height, depth))⌉ + 1. width, height, и depth берутся из соответствующих элементов maxExtent.
  • maxArrayLayers - это максимальное количество слоев массива. maxArrayLayers должен быть либо равен 1, либо быть больше или равен элементу maxImageArrayLayers VkPhysicalDeviceLimits. Значение 1 допустимо только если tiling есть VK_IMAGE_TILING_LINEAR или если type есть VK_IMAGE_TYPE_3D.
  • sampleCounts - это битовая маска VkSampleCountFlagBits, указывающая все поддерживаемые подсчёты выборок для этого изображения, как описано ниже.
  • maxResourceSize - это верхняя граница общего размера изображения в байтах, включая все подобласти изображения. Реализации могут иметь ограничение адресного пространства на общий размер ресурса, которое объявляется этим свойством. maxResourceSize должен быть не менее 231.

Описание

Примечание

Нет механизма для запроса размера изображения перед его созданием, чтобы сравнить этот размер с maxResourceSize. Если приложение пытается создать изображение, которое превышает этот предел, создание завершится неудачей или изображение будет недействительным. Хотя объявленный предел должен быть не менее 231, может быть невозможно создать изображение, размер которого приближается к этому значению, особенно для VK_IMAGE_TYPE_1D.

Если сочетание параметров для vkGetPhysicalDeviceImageFormatProperties не поддерживается реализацией для использования в vkCreateImage, то все элементы VkImageFormatProperties будут заполнены нулями.

См. также

VkDeviceSize, VkExtent3D, VkSampleCountFlags, vkGetPhysicalDeviceImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageFormatProperties

VkImageMemoryBarrier(3)

Имя

VkImageMemoryBarrier - Структура, указывающая параметры барьера памяти изображения

C Спецификация

Структура VkImageMemoryBarrier определяется как:

typedef struct VkImageMemoryBarrier {
    VkStructureType            sType;
    const void*                pNext;
    VkAccessFlags              srcAccessMask;
    VkAccessFlags              dstAccessMask;
    VkImageLayout              oldLayout;
    VkImageLayout              newLayout;
    uint32_t                   srcQueueFamilyIndex;
    uint32_t                   dstQueueFamilyIndex;
    VkImage                    image;
    VkImageSubresourceRange    subresourceRange;
} VkImageMemoryBarrier;

Члены

  • sType является типом этой структуры.
  • pNext является NULL или указателем на структуру, специфичную для расширения.
  • srcAccessMask является битовой маской VkAccessFlagBits, указывающей маску исходного доступа.
  • dstAccessMask является битовой маской VkAccessFlagBits, указывающей маску целевого доступа.
  • oldLayout является старой компоновкой в переходе компоновки изображения.
  • newLayout является новой компоновкой в переходе компоновки изображения.
  • srcQueueFamilyIndex является исходным семейством очередей для передачи владения семейством очередей.
  • dstQueueFamilyIndex является целевым семейством очередей для передачи владения семейством очередей.
  • image является дескриптором изображения, затронутого этим барьером.
  • subresourceRange описывает диапазон подобъектов изображения внутри image, который затронут этим барьером.

Описание

Первый объем доступа ограничен доступом к памяти через указанный диапазон подобъектов изображения, через типы доступа в маске исходного доступа, указанной srcAccessMask. Если srcAccessMask включает VK_ACCESS_HOST_WRITE_BIT, то записи в память, выполненные этим типом доступа, также становятся видимыми, поскольку этот тип доступа не выполняется через ресурс.

Второй объем доступа ограничен доступом к памяти через указанный диапазон подобъектов изображения, через типы доступа в маске целевого доступа, указанной dstAccessMask. Если dstAccessMask включает VK_ACCESS_HOST_WRITE_BIT или VK_ACCESS_HOST_READ_BIT, то доступные записи в память также становятся видимыми для доступов этих типов, поскольку эти типы доступа не выполняются через ресурс.

Если srcQueueFamilyIndex не равно dstQueueFamilyIndex, и srcQueueFamilyIndex равно текущему семейству очередей, то барьер памяти определяет операцию освобождения семейства очередей для указанного диапазона подобъектов изображения, и второй объем доступа не включает никакого доступа, как если бы dstAccessMask было 0.

Если dstQueueFamilyIndex не равно srcQueueFamilyIndex, и dstQueueFamilyIndex равно текущему семейству очередей, то барьер памяти определяет операцию получения семейства очередей для указанного диапазона подобъектов изображения, и первый объем доступа не включает никакого доступа, как если бы srcAccessMask было 0.

Если oldLayout не равно newLayout, то барьер памяти определяет переход компоновки изображения для указанного диапазона подобъектов изображения.

Переходы компоновки, которые выполняются через барьеры памяти изображения, выполняются полностью в порядке отправки, относительно других переходов компоновки изображения, отправленных в ту же очередь, включая те, которые выполняются проходами рендеринга. Фактически существует неявная зависимость выполнения от каждого такого перехода компоновки ко всем переходам компоновки, ранее отправленным в ту же очередь.

Допустимое использование
  • oldLayout должно быть VK_IMAGE_LAYOUT_UNDEFINED или текущей компоновкой подобъектов изображения, затронутых барьером
  • newLayout не должно быть VK_IMAGE_LAYOUT_UNDEFINED или VK_IMAGE_LAYOUT_PREINITIALIZED
  • Если image было создано с режимом обмена VK_SHARING_MODE_CONCURRENT, srcQueueFamilyIndex и dstQueueFamilyIndex должны быть оба VK_QUEUE_FAMILY_IGNORED
  • Если image было создано с режимом обмена VK_SHARING_MODE_EXCLUSIVE, srcQueueFamilyIndex и dstQueueFamilyIndex должны быть либо оба VK_QUEUE_FAMILY_IGNORED, либо оба действительными семействами очередей (см. html/vkspec.html#devsandqueues-queueprops).
  • Если image было создано с режимом обмена VK_SHARING_MODE_EXCLUSIVE, и srcQueueFamilyIndex и dstQueueFamilyIndex не являются VK_QUEUE_FAMILY_IGNORED, по крайней мере один из них должен быть таким же, как семейство очереди, которая будет выполнять этот барьер
  • subresourceRange::baseMipLevel должно быть меньше mipLevels, указанного в VkImageCreateInfo, когда было создано image
  • Если subresourceRange::levelCount не VK_REMAINING_MIP_LEVELS, subresourceRange::levelCount должно быть не нулевым, и subresourceRange::baseMipLevel + subresourceRange::levelCount должно быть меньше или равно mipLevels, указанному в VkImageCreateInfo, когда было создано image
  • subresourceRange::baseArrayLayer должно быть меньше arrayLayers, указанного в VkImageCreateInfo, когда было создано image
  • Если subresourceRange::layerCount не VK_REMAINING_ARRAY_LAYERS, subresourceRange::layerCount должно быть не нулевым, и subresourceRange::baseArrayLayer + subresourceRange::layerCount должно быть меньше или равно arrayLayers, указанному в VkImageCreateInfo, когда было создано image
  • Если image имеет формат глубины/трафарета с компонентами как глубины, так и трафарета, то член aspectMask subresourceRange должен включать оба VK_IMAGE_ASPECT_DEPTH_BIT и VK_IMAGE_ASPECT_STENCIL_BIT
  • Если oldLayout или newLayout является VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, то image должно быть создано с установленным VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
  • Если oldLayout или newLayout является VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, то image должно быть создано с установленным VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
  • Если oldLayout или newLayout является VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, то image должно быть создано с установленным VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
  • Если oldLayout или newLayout является VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, то image должно быть создано с установленным VK_IMAGE_USAGE_SAMPLED_BIT или VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
  • Если oldLayout или newLayout является VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, то image должно быть создано с установленным VK_IMAGE_USAGE_TRANSFER_SRC_BIT
  • Если oldLayout или newLayout является VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, то image должно быть создано с установленным VK_IMAGE_USAGE_TRANSFER_DST_BIT
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
  • pNext должно быть NULL
  • srcAccessMask должно быть допустимым сочетанием значений VkAccessFlagBits
  • dstAccessMask должно быть допустимым сочетанием значений VkAccessFlagBits
  • oldLayout должно быть допустимым значением VkImageLayout
  • newLayout должно быть допустимым значением VkImageLayout
  • image должно быть допустимым дескриптором VkImage
  • subresourceRange должно быть допустимой структурой VkImageSubresourceRange

См. также

VkAccessFlags, VkImage, VkImageLayout, VkImageSubresourceRange, VkStructureType, vkCmdPipelineBarrier, vkCmdWaitEvents

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageMemoryBarrier

VkImageResolve(3)

Имя

VkImageResolve - Структура, указывающая операцию разрешения изображения

C-спецификация

Структура VkImageResolve определяется как:

typedef struct VkImageResolve {
    VkImageSubresourceLayers    srcSubresource;
    VkOffset3D                  srcOffset;
    VkImageSubresourceLayers    dstSubresource;
    VkOffset3D                  dstOffset;
    VkExtent3D                  extent;
} VkImageResolve;

Члены

  • srcSubresource и dstSubresource являются VkImageSubresourceLayers структурами, определяющими подресурсы изображений, используемые для исходных и целевых данных изображения соответственно. Разрешение изображений глубины/трафарета не поддерживается.
  • srcOffset и dstOffset выбирают начальные смещения x, y и z в текселях подобластей исходных и целевых данных изображения.
  • extent - это размер в текселях исходного изображения для разрешения в width, height и depth.

Описание

Допустимое использование
  • Элемент aspectMask srcSubresource и dstSubresource должен содержать только VK_IMAGE_ASPECT_COLOR_BIT
  • Элемент layerCount srcSubresource и dstSubresource должны совпадать
  • Если любой из параметров srcImage или dstImage вызывающей команды имеет тип VkImageType VK_IMAGE_TYPE_3D, то элементы baseArrayLayer и layerCount как srcSubresource, так и dstSubresource должны быть 0 и 1 соответственно
  • srcOffset.x и (extent.width + srcOffset.x) должны быть больше или равны 0 и меньше или равны ширине подресурса исходного изображения
  • srcOffset.y и (extent.height + srcOffset.y) должны быть больше или равны 0 и меньше или равны высоте подресурса исходного изображения
  • Если srcImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D, то srcOffset.y должен быть 0, а extent.height должен быть 1.
  • srcOffset.z и (extent.depth + srcOffset.z) должны быть больше или равны 0 и меньше или равны глубине подресурса исходного изображения
  • Если srcImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D или VK_IMAGE_TYPE_2D, то srcOffset.z должен быть 0, а extent.depth должен быть 1.
  • dstOffset.x и (extent.width + dstOffset.x) должны быть больше или равны 0 и меньше или равны ширине подресурса целевого изображения
  • dstOffset.y и (extent.height + dstOffset.y) должны быть больше или равны 0 и меньше или равны высоте подресурса целевого изображения
  • Если dstImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D, то dstOffset.y должен быть 0, а extent.height должен быть 1.
  • dstOffset.z и (extent.depth + dstOffset.z) должны быть больше или равны 0 и меньше или равны глубине подресурса целевого изображения
  • Если dstImage вызывающей команды имеет тип VK_IMAGE_TYPE_1D или VK_IMAGE_TYPE_2D, то dstOffset.z должен быть 0, а extent.depth должен быть 1.
Допустимое использование (неявное)
  • srcSubresource должна быть допустимой структурой VkImageSubresourceLayers
  • dstSubresource должна быть допустимой структурой VkImageSubresourceLayers

См. также

VkExtent3D, VkImageSubresourceLayers, VkOffset3D, vkCmdResolveImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageResolve

VkImageSubresource(3)

Имя

VkImageSubresource - Структура, определяющая подресурс изображения

C-спецификация

Структура VkImageSubresource определяется как:

typedef struct VkImageSubresource {
    VkImageAspectFlags    aspectMask;
    uint32_t              mipLevel;
    uint32_t              arrayLayer;
} VkImageSubresource;

Члены

  • aspectMask является VkImageAspectFlags, выбирающим аспект изображения.
  • mipLevel выбирает уровень mipmap.
  • arrayLayer выбирает слой массива.

Описание

Допустимое использование
  • mipLevel должен быть меньше, чем mipLevels, указанный в VkImageCreateInfo при создании изображения
  • arrayLayer должен быть меньше, чем arrayLayers, указанный в VkImageCreateInfo при создании изображения
Допустимое использование (неявное)
  • aspectMask должно быть допустимым сочетанием значений VkImageAspectFlagBits
  • aspectMask не должно быть 0

См. также

VkImageAspectFlags, VkSparseImageMemoryBind, vkGetImageSubresourceLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageSubresource

VkImageSubresourceLayers(3)

Имя

VkImageSubresourceLayers - Структура, определяющая слои подресурса изображения

C-спецификация

Структура VkImageSubresourceLayers определяется как:

typedef struct VkImageSubresourceLayers {
    VkImageAspectFlags    aspectMask;
    uint32_t              mipLevel;
    uint32_t              baseArrayLayer;
    uint32_t              layerCount;
} VkImageSubresourceLayers;

Члены

  • aspectMask - это сочетание VkImageAspectFlagBits, выбирающее цветовые, глубинные и/или трафаретные аспекты для копирования.
  • mipLevel - это уровень mipmap для копирования.
  • baseArrayLayer и layerCount - это начальный слой и количество слоев для копирования.

Описание

Допустимое использование
  • Если aspectMask содержит VK_IMAGE_ASPECT_COLOR_BIT, он не должен содержать ни VK_IMAGE_ASPECT_DEPTH_BIT, ни VK_IMAGE_ASPECT_STENCIL_BIT
  • aspectMask не должен содержать VK_IMAGE_ASPECT_METADATA_BIT
  • mipLevel должен быть меньше, чем mipLevels, указанный в VkImageCreateInfo при создании изображения
  • (baseArrayLayer + layerCount) должно быть меньше или равно arrayLayers, указанному в VkImageCreateInfo при создании изображения
Допустимое использование (неявное)
  • aspectMask должно быть допустимым сочетанием значений VkImageAspectFlagBits
  • aspectMask не должно быть 0

См. также

VkBufferImageCopy, VkImageAspectFlags, VkImageBlit, VkImageCopy, VkImageResolve

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageSubresourceLayers

VkImageSubresourceRange(3)

Имя

VkImageSubresourceRange - Структура, определяющая диапазон подресурсов изображения

C-спецификация

Структура VkImageSubresourceRange определяется как:

typedef struct VkImageSubresourceRange {
    VkImageAspectFlags    aspectMask;
    uint32_t              baseMipLevel;
    uint32_t              levelCount;
    uint32_t              baseArrayLayer;
    uint32_t              layerCount;
} VkImageSubresourceRange;

Члены

  • aspectMask - это битовая маска VkImageAspectFlagBits, указывающая, какие аспекты(ы) изображения включены в представление.
  • baseMipLevel - это первый уровень mipmap, доступный для представления.
  • levelCount - это количество уровней mipmap (начиная с baseMipLevel), доступных для представления.
  • baseArrayLayer - это первый слой массива, доступный для представления.
  • layerCount - это количество слоев массива (начиная с baseArrayLayer), доступных для представления.

Описание

Количество уровней mipmap и слоев массива должно быть подмножеством подресурсов изображения в изображении. Если приложение хочет использовать все уровни mip или слои в изображении после baseMipLevel или baseArrayLayer, оно может установить levelCount и layerCount в специальные значения VK_REMAINING_MIP_LEVELS и VK_REMAINING_ARRAY_LAYERS без знания точного количества уровней mip или слоев.

Для представлений изображений в виде куба и массива кубов, слои представления изображения, начиная с baseArrayLayer, соответствуют граням в порядке +X, -X, +Y, -Y, +Z, -Z. Для массивов кубов каждый набор из шести последовательных слоев представляет собой один куб, поэтому количество куб-карт в представлении массива куб-карт равно layerCount / 6, а слой массива изображений (baseArrayLayer + i) — это индекс грани (i mod 6) куба i / 6. Если количество слоев в представлении, заданное явно в layerCount или неявно в VK_REMAINING_ARRAY_LAYERS, не кратно 6, поведение при индексировании последнего куба не определено.

aspectMask должен быть только VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_ASPECT_DEPTH_BIT или VK_IMAGE_ASPECT_STENCIL_BIT, если format является форматом цвета, только глубины или только трафарета соответственно. При использовании формата глубины/трафарета с компонентами как глубины, так и трафарета, aspectMask должен включать как минимум один из VK_IMAGE_ASPECT_DEPTH_BIT и VK_IMAGE_ASPECT_STENCIL_BIT, и может включать оба.

При использовании imageView изображения глубины/трафарета для заполнения набора дескрипторов (например, для выборки в шейдере или для использования в качестве входного вложения), aspectMask должен включать только один бит и выбирать, используется ли imageView для чтения глубины (т.е. с использованием плавающего сэмплера или входного вложения в шейдере) или чтения трафарета (т.е. с использованием безнакового целочисленного сэмплера или входного вложения в шейдере). Когда imageView изображения глубины/трафарета используется как вложение буфера кадра глубины/трафарета, aspectMask игнорируется, и используются как подресурсы изображения глубины, так и трафарета.

Элемент components имеет тип VkComponentMapping и описывает переназначение компонентов изображения компонентам вектора, возвращаемого инструкциями изображения шейдера. Это переназначение должно быть тождественным для дескрипторов хранилища изображений, дескрипторов входных вложений и вложений буфера кадра.

Допустимое использование (неявное)
  • aspectMask должен быть допустимым сочетанием значений VkImageAspectFlagBits
  • aspectMask не должен быть 0

См. также

VkImageAspectFlags, VkImageMemoryBarrier, VkImageViewCreateInfo, vkCmdClearColorImage, vkCmdClearDepthStencilImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageSubresourceRange

VkImageViewCreateInfo(3)

Имя

VkImageViewCreateInfo - Структура, определяющая параметры вновь созданного представления изображения

C-спецификация

Структура VkImageViewCreateInfo определяется как:

typedef struct VkImageViewCreateInfo {
    VkStructureType            sType;
    const void*                pNext;
    VkImageViewCreateFlags     flags;
    VkImage                    image;
    VkImageViewType            viewType;
    VkFormat                   format;
    VkComponentMapping         components;
    VkImageSubresourceRange    subresourceRange;
} VkImageViewCreateInfo;

Члены

  • sType — это тип этой структуры.
  • pNext — это NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущего использования.
  • image — это VkImage, на основе которого будет создано представление.
  • viewType — это значение VkImageViewType, указывающее тип представления изображения.
  • format — это VkFormat, описывающий формат и тип, используемые для интерпретации элементов данных в изображении.
  • components — это VkComponentMapping, указывающий переназначение цветовых компонентов (или компонентов глубины или трафарета после их преобразования в цветовые компоненты).
  • subresourceRange — это VkImageSubresourceRange, выбирающий набор уровней mipmap и слоев массива, которые будут доступны для представления.

Описание

Если image был создан с флагом VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, format может отличаться от формата изображения, но если они не равны, они должны быть совместимы. Совместимость форматов изображений определяется в разделе Классы совместимости форматов. Представления совместимых форматов будут иметь одно и то же отображение между координатами текстур и местоположениями в памяти независимо от format, при этом будет меняться только интерпретация битовой последовательности.

Примечание

Значения, предназначенные для использования с одним форматом представления, могут не сохраняться точно при записи или чтении через другой формат. Например, целочисленное значение, которое случайно имеет битовую последовательность числа с плавающей точкой, близкого к нулю, или NaN, может быть очищено или канонизировано при записи или чтении через представление с форматом с плавающей точкой. Аналогично, значение, записанное через подписанный нормализованный формат, имеющее битовую последовательность, точно равную -2b, может быть изменено на -2b + 1, как описано в Преобразование из нормализованной фиксированной точки в число с плавающей точкой.

Таблица 6. Требования к совместимости параметров изображений и представлений изображений
Dim, Arrayed, MS Параметры изображения Параметры представления

imageType = ci.imageType
width = ci.extent.width
height = ci.extent.height
depth = ci.extent.depth
arrayLayers = ci.arrayLayers
samples = ci.samples
flags = ci.flags
где ci — это VkImageCreateInfo, используемый для создания image.

baseArrayLayer и layerCount являются членами элемента subresourceRange.

1D, 0, 0

imageType = VK_IMAGE_TYPE_1D
width ≥ 1
height = 1
depth = 1
arrayLayers ≥ 1
samples = 1

viewType = VK_IMAGE_VIEW_TYPE_1D
baseArrayLayer ≥ 0
layerCount = 1

1D, 1, 0

imageType = VK_IMAGE_TYPE_1D
width ≥ 1
height = 1
depth = 1
arrayLayers ≥ 1
samples = 1

viewType = VK_IMAGE_VIEW_TYPE_1D_ARRAY
baseArrayLayer ≥ 0
layerCount ≥ 1

2D, 0, 0

imageType = VK_IMAGE_TYPE_2D
width ≥ 1
height ≥ 1
depth = 1
arrayLayers ≥ 1
samples = 1

viewType = VK_IMAGE_VIEW_TYPE_2D
baseArrayLayer ≥ 0
layerCount = 1

2D, 1, 0

imageType = VK_IMAGE_TYPE_2D
width ≥ 1
height ≥ 1
depth = 1
arrayLayers ≥ 1
samples = 1

viewType = VK_IMAGE_VIEW_TYPE_2D_ARRAY
baseArrayLayer ≥ 0
layerCount ≥ 1

2D, 0, 1

imageType = VK_IMAGE_TYPE_2D
width ≥ 1
height ≥ 1
depth = 1
arrayLayers ≥ 1
samples > 1

viewType = VK_IMAGE_VIEW_TYPE_2D
baseArrayLayer ≥ 0
layerCount = 1

2D, 1, 1

imageType = VK_IMAGE_TYPE_2D
width ≥ 1
height ≥ 1
depth = 1
arrayLayers ≥ 1
samples > 1

viewType = VK_IMAGE_VIEW_TYPE_2D_ARRAY
baseArrayLayer ≥ 0
layerCount ≥ 1

CUBE, 0, 0

imageType = VK_IMAGE_TYPE_2D
width ≥ 1
height = width
depth = 1
arrayLayers ≥ 6
samples = 1
flags включает VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT

viewType = VK_IMAGE_VIEW_TYPE_CUBE
baseArrayLayer ≥ 0
layerCount = 6

CUBE, 1, 0

imageType = VK_IMAGE_TYPE_2D
width ≥ 1
height = width
depth = 1
N ≥ 1
arrayLayers ≥ 6 × N
samples = 1
flags включает VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT

viewType = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
baseArrayLayer ≥ 0
layerCount = 6 × N, N ≥ 1

3D, 0, 0

imageType = VK_IMAGE_TYPE_3D
width ≥ 1
height ≥ 1
depth ≥ 1
arrayLayers = 1
samples = 1

viewType = VK_IMAGE_VIEW_TYPE_3D
baseArrayLayer = 0
layerCount = 1

Допустимое использование
  • Если image не был создан с помощью VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, то viewType должен быть не VK_IMAGE_VIEW_TYPE_CUBE и не VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
  • Если функция image cubemap arrays не включена, viewType не должен быть VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
  • Если image был создан с помощью VK_IMAGE_TILING_LINEAR, format должен быть форматом, имеющим хотя бы один бит поддерживаемой функции, присутствующий в значении VkFormatProperties::linearTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • image должен быть создан со значением usage, содержащим хотя бы один из VK_IMAGE_USAGE_SAMPLED_BIT, VK_IMAGE_USAGE_STORAGE_BIT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT или VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
  • Если image был создан с помощью VK_IMAGE_TILING_LINEAR и usage содержит VK_IMAGE_USAGE_SAMPLED_BIT, format должен поддерживаться для выборочных изображений, как указано флагом VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT в VkFormatProperties::linearTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если image был создан с помощью VK_IMAGE_TILING_LINEAR и usage содержит VK_IMAGE_USAGE_STORAGE_BIT, format должен поддерживаться для хранилищ изображений, как указано флагом VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT в VkFormatProperties::linearTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если image был создан с помощью VK_IMAGE_TILING_LINEAR и usage содержит VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, format должен поддерживаться для цветовых вложений, как указано флагом VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT в VkFormatProperties::linearTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если image был создан с помощью VK_IMAGE_TILING_LINEAR и usage содержит VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, format должен поддерживаться для вложений глубины/трафарета, как указано флагом VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT в VkFormatProperties::linearTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если image был создан с помощью VK_IMAGE_TILING_OPTIMAL, format должен быть форматом, имеющим хотя бы один бит поддерживаемой функции, присутствующий в значении VkFormatProperties::optimalTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если image был создан с помощью VK_IMAGE_TILING_OPTIMAL и usage содержит VK_IMAGE_USAGE_SAMPLED_BIT, format должен поддерживаться для выборочных изображений, как указано флагом VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT в VkFormatProperties::optimalTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если image был создан с помощью VK_IMAGE_TILING_OPTIMAL и usage содержит VK_IMAGE_USAGE_STORAGE_BIT, format должен поддерживаться для хранилищ изображений, как указано флагом VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT в VkFormatProperties::optimalTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если image был создан с помощью VK_IMAGE_TILING_OPTIMAL и usage содержит VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, format должен поддерживаться для цветовых вложений, как указано флагом VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT в VkFormatProperties::optimalTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • Если image был создан с помощью VK_IMAGE_TILING_OPTIMAL и usage содержит VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, format должен поддерживаться для вложений глубины/трафарета, как указано флагом VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT в VkFormatProperties::optimalTilingFeatures, возвращаемом vkGetPhysicalDeviceFormatProperties с тем же значением format
  • subresourceRange::baseMipLevel должно быть меньше mipLevels, указанного в VkImageCreateInfo, когда был создан image
  • Если subresourceRange::levelCount не VK_REMAINING_MIP_LEVELS, subresourceRange::levelCount должно быть не нулевым, и subresourceRange::baseMipLevel + subresourceRange::levelCount должно быть меньше или равно mipLevels, указанному в VkImageCreateInfo, когда был создан image
  • subresourceRange::baseArrayLayer должно быть меньше arrayLayers, указанного в VkImageCreateInfo, когда был создан image
  • Если subresourceRange::layerCount не VK_REMAINING_ARRAY_LAYERS, subresourceRange::layerCount должно быть не нулевым, и subresourceRange::baseArrayLayer + subresourceRange::layerCount должно быть меньше или равно arrayLayers, указанному в VkImageCreateInfo, когда был создан image
  • Если image был создан с флагом VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, format должен быть совместим с format, используемым для создания image, как определено в Format Compatibility Classes
  • Если image не был создан с флагом VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, format должен быть идентичен format, используемому для создания image
  • Если image не разреженный, то он должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • subresourceRange и viewType должны быть совместимы с изображением, как описано в таблице совместимости
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
  • pNext должен быть NULL
  • flags должен быть 0
  • image должен быть допустимой дескрипторной ссылкой VkImage
  • viewType должен быть допустимым значением VkImageViewType
  • format должен быть допустимым значением VkFormat
  • components должен быть допустимой структурой VkComponentMapping
  • subresourceRange должен быть допустимой структурой VkImageSubresourceRange

См. также

VkComponentMapping, VkFormat, VkImage, VkImageSubresourceRange, VkImageViewCreateFlags, VkImageViewType, VkStructureType, vkCreateImageView

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageViewCreateInfo

VkInstanceCreateInfo(3)

Имя

VkInstanceCreateInfo - Структура, задающая параметры вновь созданного экземпляра

C-спецификация

Структура VkInstanceCreateInfo определяется как:

typedef struct VkInstanceCreateInfo {
    VkStructureType             sType;
    const void*                 pNext;
    VkInstanceCreateFlags       flags;
    const VkApplicationInfo*    pApplicationInfo;
    uint32_t                    enabledLayerCount;
    const char* const*          ppEnabledLayerNames;
    uint32_t                    enabledExtensionCount;
    const char* const*          ppEnabledExtensionNames;
} VkInstanceCreateInfo;

Члены

  • sType - тип этой структуры.
  • pNext - NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущего использования.
  • pApplicationInfo - NULL или указатель на экземпляр VkApplicationInfo. Если не NULL, эта информация помогает реализациям распознать поведение, присущее классам приложений. VkApplicationInfo подробно описан ниже.
  • enabledLayerCount - количество глобальных слоев для включения.
  • ppEnabledLayerNames - указатель на массив enabledLayerCount завершающихся нулем строк UTF-8, содержащих имена слоев, которые необходимо включить для созданного экземпляра. Дополнительные сведения см. в разделе Слои.
  • enabledExtensionCount - количество глобальных расширений для включения.
  • ppEnabledExtensionNames - указатель на массив enabledExtensionCount завершающихся нулем строк UTF-8, содержащих имена расширений для включения.

Описание

Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • Если pApplicationInfo не NULL, pApplicationInfo должно быть указателем на допустимую структуру VkApplicationInfo
  • Если enabledLayerCount не 0, ppEnabledLayerNames должно быть указателем на массив из enabledLayerCount завершающихся нулём строк UTF-8
  • Если enabledExtensionCount не 0, ppEnabledExtensionNames должно быть указателем на массив из enabledExtensionCount завершающихся нулём строк UTF-8

См. также

VkApplicationInfo, VkInstanceCreateFlags, VkStructureType, vkCreateInstance

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkInstanceCreateInfo

VkLayerProperties(3)

Имя

VkLayerProperties - Структура, указывающая свойства слоя

C-спецификация

Структура VkLayerProperties определяется как:

typedef struct VkLayerProperties {
    char        layerName[VK_MAX_EXTENSION_NAME_SIZE];
    uint32_t    specVersion;
    uint32_t    implementationVersion;
    char        description[VK_MAX_DESCRIPTION_SIZE];
} VkLayerProperties;

Члены

  • layerName — это завершающаяся нулём строка UTF-8, указывающая имя слоя. Используйте это имя в массиве ppEnabledLayerNames, переданном в структуру VkInstanceCreateInfo, чтобы включить этот слой для экземпляра.
  • specVersion — это версия Vulkan, для которой был написан слой, закодированная, как описано в разделе Номера и семантика версий API.
  • implementationVersion — это версия этого слоя. Это целое число, увеличивающееся с обратными совместимыми изменениями.
  • description — это завершающаяся нулём строка UTF-8, предоставляющая дополнительные сведения, которые могут использоваться приложением для идентификации слоя.

См. также

vkEnumerateDeviceLayerProperties, vkEnumerateInstanceLayerProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkLayerProperties

VkMappedMemoryRange(3)

Имя

VkMappedMemoryRange - Структура, указывающая сопоставленный диапазон памяти

C-спецификация

Структура VkMappedMemoryRange определяется как:

typedef struct VkMappedMemoryRange {
    VkStructureType    sType;
    const void*        pNext;
    VkDeviceMemory     memory;
    VkDeviceSize       offset;
    VkDeviceSize       size;
} VkMappedMemoryRange;

Члены

  • sType — это тип этой структуры.
  • pNext — это NULL или указатель на структуру, зависящую от расширения.
  • memory — это объект памяти, которому принадлежит этот диапазон.
  • offset — это смещение в байтах от начала объекта памяти, отсчитываемое от нуля.
  • size — это либо размер диапазона, либо VK_WHOLE_SIZE, чтобы повлиять на диапазон от offset до конца текущего сопоставления выделения.

Описание

Допустимое использование
  • memory должно в данный момент быть сопоставлено
  • Если size не равно VK_WHOLE_SIZE, offset и size должны указывать диапазон, содержащийся в текущем сопоставленном диапазоне memory
  • Если size равно VK_WHOLE_SIZE, offset должно находиться в текущем сопоставленном диапазоне memory
  • Если size равно VK_WHOLE_SIZE, конец текущего сопоставления memory должен быть кратным VkPhysicalDeviceLimits::nonCoherentAtomSize байтам от начала объекта памяти.
  • offset должно быть кратным VkPhysicalDeviceLimits::nonCoherentAtomSize
  • Если size не равно VK_WHOLE_SIZE, size должно быть либо кратным VkPhysicalDeviceLimits::nonCoherentAtomSize, либо offset плюс size должно равняться размеру memory.
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
  • pNext должно быть NULL
  • memory должно быть допустимой дескриптором VkDeviceMemory

См. также

VkDeviceMemory, VkDeviceSize, VkStructureType, vkFlushMappedMemoryRanges, vkInvalidateMappedMemoryRanges

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMappedMemoryRange

VkMemoryAllocateInfo(3)

Имя

VkMemoryAllocateInfo - Структура, содержащая параметры выделения памяти

C-спецификация

Структура VkMemoryAllocateInfo определяется как:

typedef struct VkMemoryAllocateInfo {
    VkStructureType    sType;
    const void*        pNext;
    VkDeviceSize       allocationSize;
    uint32_t           memoryTypeIndex;
} VkMemoryAllocateInfo;

Члены

  • sType — это тип этой структуры.
  • pNext — это NULL или указатель на структуру, зависящую от расширения.
  • allocationSize — это размер выделения в байтах.
  • memoryTypeIndex — это индекс типа памяти, который выбирает свойства памяти, которая будет выделена, а также кучу, из которой будет взята память.

Описание

Допустимое использование
  • allocationSize должно быть меньше или равно количеству памяти, доступному для VkMemoryHeap, указанного memoryTypeIndex и VkDevice вызывающей команды
  • allocationSize должно быть больше 0
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
  • pNext должно быть NULL

См. также

VkDeviceSize, VkStructureType, vkAllocateMemory

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryAllocateInfo

VkMemoryBarrier(3)

Имя

VkMemoryBarrier - Структура, указывающая глобальный барьер памяти

C-спецификация

Структура VkMemoryBarrier определяется как:

typedef struct VkMemoryBarrier {
    VkStructureType    sType;
    const void*        pNext;
    VkAccessFlags      srcAccessMask;
    VkAccessFlags      dstAccessMask;
} VkMemoryBarrier;

Члены

  • sType — это тип этой структуры.
  • pNext — это NULL или указатель на структуру, зависящую от расширения.
  • srcAccessMask — это битовая маска VkAccessFlagBits, указывающая маску исходного доступа.
  • dstAccessMask — это битовая маска VkAccessFlagBits, указывающая маску целевого доступа.

Описание

Первый объём доступа ограничен типами доступа в маске исходного доступа, указанной srcAccessMask.

Второй объём доступа ограничен типами доступа в маске целевого доступа, указанной dstAccessMask.

Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_MEMORY_BARRIER
  • pNext должно быть NULL
  • srcAccessMask должно быть допустимой комбинацией значений VkAccessFlagBits
  • dstAccessMask должно быть допустимой комбинацией значений VkAccessFlagBits

См. также

VkAccessFlags, VkStructureType, vkCmdPipelineBarrier, vkCmdWaitEvents

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryBarrier

VkMemoryHeap(3)

Name

VkMemoryHeap - Структура, определяющая кучу памяти

C Specification

Структура VkMemoryHeap определяется как:

typedef struct VkMemoryHeap {
    VkDeviceSize         size;
    VkMemoryHeapFlags    flags;
} VkMemoryHeap;

Members

  • size - общий размер памяти в байтах в куче.
  • flags - это битовая маска VkMemoryHeapFlagBits, указывающая атрибуты флагов для кучи.

See Also

VkDeviceSize, VkMemoryHeapFlags, VkPhysicalDeviceMemoryProperties

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryHeap

VkMemoryRequirements(3)

Name

VkMemoryRequirements - Структура, определяющая требования к памяти

C Specification

Структура VkMemoryRequirements определяется как:

typedef struct VkMemoryRequirements {
    VkDeviceSize    size;
    VkDeviceSize    alignment;
    uint32_t        memoryTypeBits;
} VkMemoryRequirements;

Members

  • size - размер в байтах выделения памяти, необходимый для ресурса.
  • alignment - выравнивание в байтах смещения в выделении памяти, необходимое для ресурса.
  • memoryTypeBits - это битовая маска, содержащая один установленный бит для каждого поддерживаемого типа памяти для ресурса. Бит i установлен тогда и только тогда, когда тип памяти i в структуре VkPhysicalDeviceMemoryProperties для физического устройства поддерживается для ресурса.

See Also

VkDeviceSize, vkGetBufferMemoryRequirements, vkGetImageMemoryRequirements

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryRequirements

VkMemoryType(3)

Name

VkMemoryType - Структура, определяющая тип памяти

C Specification

Структура VkMemoryType определяется как:

typedef struct VkMemoryType {
    VkMemoryPropertyFlags    propertyFlags;
    uint32_t                 heapIndex;
} VkMemoryType;

Members

  • heapIndex описывает, к какой куче памяти относится этот тип памяти, и должно быть меньше, чем memoryHeapCount из структуры VkPhysicalDeviceMemoryProperties.
  • propertyFlags - это битовая маска VkMemoryPropertyFlagBits свойств для этого типа памяти.

See Also

VkMemoryPropertyFlags, VkPhysicalDeviceMemoryProperties

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryType

VkOffset2D(3)

Name

VkOffset2D - Структура, определяющая двумерное смещение

C Specification

Двумерные смещения определяются структурой:

typedef struct VkOffset2D {
    int32_t    x;
    int32_t    y;
} VkOffset2D;

Members

  • x - смещение по оси x.
  • y - смещение по оси y.

See Also

VkRect2D

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkOffset2D

VkOffset3D(3)

Name

VkOffset3D - Структура, определяющая трехмерное смещение

C Specification

Трехмерное смещение определяется структурой:

typedef struct VkOffset3D {
    int32_t    x;
    int32_t    y;
    int32_t    z;
} VkOffset3D;

Members

  • x - смещение по оси x.
  • y - смещение по оси y.
  • z - смещение по оси z.

See Also

VkBufferImageCopy, VkImageBlit, VkImageCopy, VkImageResolve, VkSparseImageMemoryBind

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkOffset3D

VkPhysicalDeviceFeatures(3)

Name

VkPhysicalDeviceFeatures - Структура, описывающая детализированные возможности, которые могут поддерживаться реализацией

C Specification

Структура VkPhysicalDeviceFeatures определяется как:

typedef struct VkPhysicalDeviceFeatures {
    VkBool32    robustBufferAccess;
    VkBool32    fullDrawIndexUint32;
    VkBool32    imageCubeArray;
    VkBool32    independentBlend;
    VkBool32    geometryShader;
    VkBool32    tessellationShader;
    VkBool32    sampleRateShading;
    VkBool32    dualSrcBlend;
    VkBool32    logicOp;
    VkBool32    multiDrawIndirect;
    VkBool32    drawIndirectFirstInstance;
    VkBool32    depthClamp;
    VkBool32    depthBiasClamp;
    VkBool32    fillModeNonSolid;
    VkBool32    depthBounds;
    VkBool32    wideLines;
    VkBool32    largePoints;
    VkBool32    alphaToOne;
    VkBool32    multiViewport;
    VkBool32    samplerAnisotropy;
    VkBool32    textureCompressionETC2;
    VkBool32    textureCompressionASTC_LDR;
    VkBool32    textureCompressionBC;
    VkBool32    occlusionQueryPrecise;
    VkBool32    pipelineStatisticsQuery;
    VkBool32    vertexPipelineStoresAndAtomics;
    VkBool32    fragmentStoresAndAtomics;
    VkBool32    shaderTessellationAndGeometryPointSize;
    VkBool32    shaderImageGatherExtended;
    VkBool32    shaderStorageImageExtendedFormats;
    VkBool32    shaderStorageImageMultisample;
    VkBool32    shaderStorageImageReadWithoutFormat;
    VkBool32    shaderStorageImageWriteWithoutFormat;
    VkBool32    shaderUniformBufferArrayDynamicIndexing;
    VkBool32    shaderSampledImageArrayDynamicIndexing;
    VkBool32    shaderStorageBufferArrayDynamicIndexing;
    VkBool32    shaderStorageImageArrayDynamicIndexing;
    VkBool32    shaderClipDistance;
    VkBool32    shaderCullDistance;
    VkBool32    shaderFloat64;
    VkBool32    shaderInt64;
    VkBool32    shaderInt16;
    VkBool32    shaderResourceResidency;
    VkBool32    shaderResourceMinLod;
    VkBool32    sparseBinding;
    VkBool32    sparseResidencyBuffer;
    VkBool32    sparseResidencyImage2D;
    VkBool32    sparseResidencyImage3D;
    VkBool32    sparseResidency2Samples;
    VkBool32    sparseResidency4Samples;
    VkBool32    sparseResidency8Samples;
    VkBool32    sparseResidency16Samples;
    VkBool32    sparseResidencyAliased;
    VkBool32    variableMultisampleRate;
    VkBool32    inheritedQueries;
} VkPhysicalDeviceFeatures;

Members

Члены структуры VkPhysicalDeviceFeatures описывают следующие возможности:

Description

  • robustBufferAccess указывает, что доступы к буферам проверяются на соответствие границам дескриптора буфера (как определено в VkDescriptorBufferInfo::range, VkBufferViewCreateInfo::range, или размеру буфера). Доступы за пределами границ не должны приводить к завершению работы приложения, а эффекты загрузки, сохранения и атомарных операций шейдера должны соответствовать зависящему от реализации поведению, описанному ниже.

    • Доступ к буферу считается выходящим за границы, если выполняется любое из следующих условий:

      • Указатель был сформирован с помощью OpImageTexelPointer, и координата меньше нуля или больше или равна количеству целых элементов в связанном диапазоне.
      • Указатель не был сформирован с помощью OpImageTexelPointer, и указанный объект не полностью содержится в связанном диапазоне.

        Примечание

        Если инструкция SPIR-V OpLoad загружает структуру, а конец структуры выходит за границы, то все члены структуры считаются выходящими за границы, даже если члены в конце не используются статически.

      • Если какой-либо доступ к буферу в данном блоке SPIR-V определяется как выходящий за границы, то любой другой доступ того же типа (загрузка, сохранение или атомарная операция) в том же блоке SPIR-V, который обращается к адресу менее чем на 16 байт от адреса, выходящего за границы, может также считаться выходящим за границы.
    • Загрузки из буфера за пределами границ будут возвращать любое из следующих значений:

      • Значения из любого диапазона памяти, связанного с буфером (возможно, включая байты памяти за концом буфера, вплоть до конца связанного диапазона).
      • Нулевые значения или векторы (0,0,0,x) для векторных чтений, где x — это допустимое значение, представленное в типе компонентов вектора и может быть любым из:

        • 0, 1 или максимальное представимое положительное целое значение для знаковых или беззнаковых целочисленных компонентов
        • 0.0 или 1.0 для компонентов с плавающей точкой
    • Записи за пределами границ могут изменять значения в диапазоне памяти, связанном с буфером, но не должны изменять другую память.
    • Атомарные операции за пределами границ могут изменять значения в диапазоне памяти, связанном с буфером, но не должны изменять другую память и возвращать неопределенное значение.
    • Атрибуты входных данных вершин считаются выходящими за границы, если адрес атрибута плюс размер атрибута больше размера связанного буфера. Кроме того, если любой атрибут входных данных вершин, использующий конкретное связывание входных данных вершин, выходит за границы, то все атрибуты входных данных вершин, использующие это связывание входных данных вершин для этого вызова шейдера вершин, считаются выходящими за границы.

      • Если атрибут входных данных вершин выходит за границы, ему будет присвоено одно из следующих значений:

        • Значения из любого диапазона памяти, связанного с буфером, преобразованные в соответствии с форматом атрибута.
        • Нулевые значения, преобразованные в соответствии с форматом атрибута.
        • Нулевые значения или векторы (0,0,0,x), как описано выше.
    • Если robustBufferAccess не включен, доступы за пределами границ могут повредить любую память в процессе и привести к неопределенному поведению вплоть до и включая завершение работы приложения.
  • fullDrawIndexUint32 указывает, что поддерживается полный 32-битный диапазон индексов для вызовов индексированного рисования при использовании VkIndexType VK_INDEX_TYPE_UINT32. maxDrawIndexedIndexValue — это максимальное значение индекса, которое может использоваться (помимо индекса перезапуска примитива, который всегда равен 232-1, когда VkIndexType равен VK_INDEX_TYPE_UINT32). Если эта функция поддерживается, maxDrawIndexedIndexValue должно быть равно 232-1; в противном случае оно должно быть не меньше 224-1. См. maxDrawIndexedIndexValue.
  • imageCubeArray указывает, могут ли быть созданы представления изображений с VkImageViewType VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, и что соответствующие возможности SPIR-V SampledCubeArray и ImageCubeArray могут использоваться в коде шейдера.
  • independentBlend указывает, управляются ли параметры VkPipelineColorBlendAttachmentState независимо для каждого вложения. Если эта функция не включена, параметры VkPipelineColorBlendAttachmentState для всех цветовых вложений должны быть идентичны. В противном случае для каждого связанного цветового вложения может быть предоставлен другой VkPipelineColorBlendAttachmentState.
  • geometryShader указывает, поддерживаются ли геометрические шейдеры. Если эта функция не включена, значения перечисления VK_SHADER_STAGE_GEOMETRY_BIT и VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT не должны использоваться. Это также указывает, могут ли модули шейдера объявлять возможность Geometry.
  • tessellationShader указывает, поддерживаются ли шейдеры управления и оценки тесселяции. Если эта функция не включена, значения перечисления VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT и VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO не должны использоваться. Это также указывает, могут ли модули шейдера объявлять возможность Tessellation.
  • sampleRateShading указывает, поддерживаются ли затенение на основе частоты дискретизации и многовыборочная интерполяция. Если эта функция не включена, член sampleShadingEnable структуры VkPipelineMultisampleStateCreateInfo должен быть установлен в VK_FALSE, а член minSampleShading игнорируется. Это также указывает, могут ли модули шейдера объявлять возможность SampleRateShading.
  • dualSrcBlend указывает, поддерживаются ли операции смешивания, которые принимают два источника. Если эта функция не включена, значения перечисления VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA и VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA не должны использоваться в качестве исходных или целевых коэффициентов смешивания. См. html/vkspec.html#framebuffer-dsb.
  • logicOp указывает, поддерживаются ли логические операции. Если эта функция не включена, член logicOpEnable структуры VkPipelineColorBlendStateCreateInfo должен быть установлен в VK_FALSE, а член logicOp игнорируется.
  • multiDrawIndirect указывает, поддерживается ли множественное косвенное рисование. Если эта функция не включена, параметр drawCount команд vkCmdDrawIndirect и vkCmdDrawIndexedIndirect должен быть равен 0 или 1. Член maxDrawIndirectCount структуры VkPhysicalDeviceLimits также должен быть равен 1, если эта функция не поддерживается. См. maxDrawIndirectCount.
  • drawIndirectFirstInstance указывает, поддерживают ли косвенные вызовы рисования параметр firstInstance. Если эта функция не включена, член firstInstance всех структур VkDrawIndirectCommand и VkDrawIndexedIndirectCommand, которые предоставляются командам vkCmdDrawIndirect и vkCmdDrawIndexedIndirect, должен быть равен 0.
  • depthClamp указывает, поддерживается ли зажим глубины. Если эта функция не включена, член depthClampEnable структуры VkPipelineRasterizationStateCreateInfo должен быть установлен в VK_FALSE. В противном случае установка depthClampEnable в VK_TRUE включит зажим глубины.
  • depthBiasClamp указывает, поддерживается ли зажим смещения глубины. Если эта функция не включена, член depthBiasClamp структуры VkPipelineRasterizationStateCreateInfo должен быть установлен в 0.0, если только динамическое состояние VK_DYNAMIC_STATE_DEPTH_BIAS не включено, а параметр depthBiasClamp для vkCmdSetDepthBias должен быть установлен в 0.0.
  • fillModeNonSolid указывает, поддерживаются ли режимы заливки точками и проволочной сеткой. Если эта функция не включена, значения перечисления VK_POLYGON_MODE_POINT и VK_POLYGON_MODE_LINE не должны использоваться.
  • depthBounds указывает, поддерживаются ли тесты границ глубины. Если эта функция не включена, член depthBoundsTestEnable структуры VkPipelineDepthStencilStateCreateInfo должен быть установлен в VK_FALSE. Когда depthBoundsTestEnable установлен в VK_FALSE, члены minDepthBounds и maxDepthBounds структуры VkPipelineDepthStencilStateCreateInfo игнорируются.
  • wideLines указывает, поддерживаются ли линии с шириной, отличной от 1.0. Если эта функция не включена, член lineWidth структуры VkPipelineRasterizationStateCreateInfo должен быть установлен в 1.0, если только динамическое состояние VK_DYNAMIC_STATE_LINE_WIDTH не включено, а параметр lineWidth для vkCmdSetLineWidth должен быть установлен в 1.0. Когда эта функция поддерживается, диапазон и гранулярность поддерживаемых ширин линий указываются членами lineWidthRange и lineWidthGranularity структуры VkPhysicalDeviceLimits, соответственно.
  • largePoints указывает, поддерживаются ли точки размером более 1.0. Если эта функция не включена, поддерживается только размер точки 1.0, записанный шейдером. Диапазон и гранулярность поддерживаемых размеров точек указываются членами pointSizeRange и pointSizeGranularity структуры VkPhysicalDeviceLimits, соответственно.
  • alphaToOne указывает, может ли реализация заменить значение альфа цветового фрагмента, выводимого из фрагментного шейдера, на максимальное представимое значение альфа для цветов с фиксированной точкой или 1.0 для цветов с плавающей точкой. Если эта функция не включена, то член alphaToOneEnable структуры VkPipelineMultisampleStateCreateInfo должен быть установлен в VK_FALSE. В противном случае установка alphaToOneEnable в VK_TRUE включит поведение альфа-в-единицу.
  • multiViewport указывает, поддерживается ли более одного видового окна. Если эта функция не включена, члены viewportCount и scissorCount структуры VkPipelineViewportStateCreateInfo должны быть установлены в 1. Аналогично, параметр viewportCount команды vkCmdSetViewport и параметр scissorCount команды vkCmdSetScissor должны быть равны 1, а параметр firstViewport команды vkCmdSetViewport и параметр firstScissor команды vkCmdSetScissor должны быть равны 0.
  • samplerAnisotropy указывает, поддерживается ли анизотропная фильтрация. Если эта функция не включена, член maxAnisotropy структуры VkSamplerCreateInfo должен быть равен 1.0.
  • textureCompressionETC2 указывает, поддерживаются ли все сжатые текстурные форматы ETC2 и EAC. Если эта функция включена, то функции VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, VK_FORMAT_FEATURE_BLIT_SRC_BIT и VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT должны поддерживаться в optimalTilingFeatures для следующих форматов:

    • VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
    • VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
    • VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
    • VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
    • VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
    • VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
    • VK_FORMAT_EAC_R11_UNORM_BLOCK
    • VK_FORMAT_EAC_R11_SNORM_BLOCK
    • VK_FORMAT_EAC_R11G11_UNORM_BLOCK
    • VK_FORMAT_EAC_R11G11_SNORM_BLOCK

    vkGetPhysicalDeviceFormatProperties и vkGetPhysicalDeviceImageFormatProperties могут использоваться для проверки дополнительных поддерживаемых свойств отдельных форматов.

  • textureCompressionASTC_LDR указывает, поддерживаются ли все сжатые текстурные форматы ASTC LDR. Если эта функция включена, то функции VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, VK_FORMAT_FEATURE_BLIT_SRC_BIT и VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT должны поддерживаться в optimalTilingFeatures для следующих форматов:

    • VK_FORMAT_ASTC_4x4_UNORM_BLOCK
    • VK_FORMAT_ASTC_4x4_SRGB_BLOCK
    • VK_FORMAT_ASTC_5x4_UNORM_BLOCK
    • VK_FORMAT_ASTC_5x4_SRGB_BLOCK
    • VK_FORMAT_ASTC_5x5_UNORM_BLOCK
    • VK_FORMAT_ASTC_5x5_SRGB_BLOCK
    • VK_FORMAT_ASTC_6x5_UNORM_BLOCK
    • VK_FORMAT_ASTC_6x5_SRGB_BLOCK
    • VK_FORMAT_ASTC_6x6_UNORM_BLOCK
    • VK_FORMAT_ASTC_6x6_SRGB_BLOCK
    • VK_FORMAT_ASTC_8x5_UNORM_BLOCK
    • VK_FORMAT_ASTC_8x5_SRGB_BLOCK
    • VK_FORMAT_ASTC_8x6_UNORM_BLOCK
    • VK_FORMAT_ASTC_8x6_SRGB_BLOCK
    • VK_FORMAT_ASTC_8x8_UNORM_BLOCK
    • VK_FORMAT_ASTC_8x8_SRGB_BLOCK
    • VK_FORMAT_ASTC_10x5_UNORM_BLOCK
    • VK_FORMAT_ASTC_10x5_SRGB_BLOCK
    • VK_FORMAT_ASTC_10x6_UNORM_BLOCK
    • VK_FORMAT_ASTC_10x6_SRGB_BLOCK
    • VK_FORMAT_ASTC_10x8_UNORM_BLOCK
    • VK_FORMAT_ASTC_10x8_SRGB_BLOCK
    • VK_FORMAT_ASTC_10x10_UNORM_BLOCK
    • VK_FORMAT_ASTC_10x10_SRGB_BLOCK
    • VK_FORMAT_ASTC_12x10_UNORM_BLOCK
    • VK_FORMAT_ASTC_12x10_SRGB_BLOCK
    • VK_FORMAT_ASTC_12x12_UNORM_BLOCK
    • VK_FORMAT_ASTC_12x12_SRGB_BLOCK

    vkGetPhysicalDeviceFormatProperties и vkGetPhysicalDeviceImageFormatProperties могут использоваться для проверки дополнительных поддерживаемых свойств отдельных форматов.

  • textureCompressionBC указывает, поддерживаются ли все сжатые текстурные форматы BC. Если эта функция включена, то функции VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, VK_FORMAT_FEATURE_BLIT_SRC_BIT и VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT должны поддерживаться в optimalTilingFeatures для следующих форматов:

    • VK_FORMAT_BC1_RGB_UNORM_BLOCK
    • VK_FORMAT_BC1_RGB_SRGB_BLOCK
    • VK_FORMAT_BC1_RGBA_UNORM_BLOCK
    • VK_FORMAT_BC1_RGBA_SRGB_BLOCK
    • VK_FORMAT_BC2_UNORM_BLOCK
    • VK_FORMAT_BC2_SRGB_BLOCK
    • VK_FORMAT_BC3_UNORM_BLOCK
    • VK_FORMAT_BC3_SRGB_BLOCK
    • VK_FORMAT_BC4_UNORM_BLOCK
    • VK_FORMAT_BC4_SNORM_BLOCK
    • VK_FORMAT_BC5_UNORM_BLOCK
    • VK_FORMAT_BC5_SNORM_BLOCK
    • VK_FORMAT_BC6H_UFLOAT_BLOCK
    • VK_FORMAT_BC6H_SFLOAT_BLOCK
    • VK_FORMAT_BC7_UNORM_BLOCK
    • VK_FORMAT_BC7_SRGB_BLOCK

    vkGetPhysicalDeviceFormatProperties и vkGetPhysicalDeviceImageFormatProperties могут использоваться для проверки дополнительных поддерживаемых свойств отдельных форматов.

  • occlusionQueryPrecise указывает, поддерживаются ли запросы на затенение, возвращающие фактическое количество выборок. Запросы на затенение создаются в VkQueryPool путем указания queryType VK_QUERY_TYPE_OCCLUSION в структуре VkQueryPoolCreateInfo, которая передается в vkCreateQueryPool. Если эта функция включена, запросы этого типа могут включать VK_QUERY_CONTROL_PRECISE_BIT в параметре flags для vkCmdBeginQuery. Если эта функция не поддерживается, реализация поддерживает только булевы запросы на затенение. Когда передаются какие-либо выборки, булевы запросы возвращают ненулевое значение результата, в противном случае возвращается значение результата, равное нулю. Когда эта функция включена и установлен VK_QUERY_CONTROL_PRECISE_BIT, запросы на затенение будут сообщать фактическое количество переданных выборок.
  • pipelineStatisticsQuery указывает, поддерживаются ли запросы статистики конвейера. Если эта функция не включена, запросы типа VK_QUERY_TYPE_PIPELINE_STATISTICS не могут быть созданы, и ни один из битов VkQueryPipelineStatisticFlagBits не может быть установлен в члене pipelineStatistics структуры VkQueryPoolCreateInfo.
  • vertexPipelineStoresAndAtomics указывает, поддерживают ли буферы и изображения хранилища операции записи и атомарные операции на этапах вершинного, тесселяционного и геометрического шейдера. Если эта функция не включена, все переменные буферов хранилища изображений, буферов текселей хранилища и буферов хранилища, используемые этими этапами в модулях шейдера, должны быть помечены декорированием NonWriteable (или квалификатором памяти readonly в GLSL).
  • fragmentStoresAndAtomics указывает, поддерживают ли буферы и изображения хранилища операции записи и атомарные операции на этапе фрагментного шейдера. Если эта функция не включена, все переменные буферов хранилища изображений, буферов текселей хранилища и буферов хранилища, используемые фрагментным этапом в модулях шейдера, должны быть помечены декорированием NonWriteable (или квалификатором памяти readonly в GLSL).
  • shaderTessellationAndGeometryPointSize указывает, доступно ли встроенное декорирование PointSize на этапах управления тесселяцией, оценки тесселяции и геометрического шейдера. Если эта функция не включена, члены, помеченные встроенным декорированием PointSize, не должны считываться или записываться, и все точки, записанные из тесселяционного или геометрического шейдера, будут иметь размер 1.0. Это также указывает, могут ли модули шейдера объявлять возможность TessellationPointSize для шейдеров управления и оценки тесселяции или могут ли модули шейдера объявлять возможность GeometryPointSize для геометрических шейдеров. Реализация, поддерживающая эту функцию, также должна поддерживать одну или обе функции tessellationShader или geometryShader.
  • shaderImageGatherExtended указывает, доступен ли расширенный набор инструкций сбора изображений в коде шейдера. Если эта функция не включена, инструкции OpImage*Gather не поддерживают операнды Offset и ConstOffsets. Это также указывает, могут ли модули шейдера объявлять возможность ImageGatherExtended.
  • shaderStorageImageExtendedFormats указывает, доступны ли расширенные форматы изображений хранилища в коде шейдера. Если эта функция не включена, форматы, требующие возможности StorageImageExtendedFormats, не поддерживаются для изображений хранилища. Это также указывает, могут ли модули шейдера объявлять возможность StorageImageExtendedFormats.
  • shaderStorageImageMultisample указывает, поддерживаются ли многовыборочные изображения хранилища. Если эта функция не включена, изображения, созданные с usage, включающим VK_IMAGE_USAGE_STORAGE_BIT, должны быть созданы с samples, равным VK_SAMPLE_COUNT_1_BIT. Это также указывает, могут ли модули шейдера объявлять возможность StorageImageMultisample.
  • shaderStorageImageReadWithoutFormat указывает, требуют ли изображения хранилища квалификатора формата при чтении из изображений хранилища. Если эта функция не включена, инструкция OpImageRead не должна иметь OpTypeImage Unknown. Это также указывает, могут ли модули шейдера объявлять возможность StorageImageReadWithoutFormat.
  • shaderStorageImageWriteWithoutFormat указывает, требуют ли изображения хранилища квалификатора формата при записи в изображения хранилища. Если эта функция не включена, инструкция OpImageWrite не должна иметь OpTypeImage Unknown. Это также указывает, могут ли модули шейдера объявлять возможность StorageImageWriteWithoutFormat.
  • shaderUniformBufferArrayDynamicIndexing указывает, могут ли массивы униформных буферов индексироваться динамически однородными целочисленными выражениями в коде шейдера. Если эта функция не включена, ресурсы с типом дескриптора VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER или VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC должны индексироваться только константными целочисленными выражениями при агрегации в массивы в коде шейдера. Это также указывает, могут ли модули шейдера объявлять возможность UniformBufferArrayDynamicIndexing.
  • shaderSampledImageArrayDynamicIndexing указывает, могут ли массивы семплеров или выборочных изображений индексироваться динамически однородными целочисленными выражениями в коде шейдера. Если эта функция не включена, ресурсы с типом дескриптора VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER или VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE должны индексироваться только константными целочисленными выражениями при агрегации в массивы в коде шейдера. Это также указывает, могут ли модули шейдера объявлять возможность SampledImageArrayDynamicIndexing.
  • shaderStorageBufferArrayDynamicIndexing указывает, можно ли индексировать массивы буферов хранения с помощью динамически равномерных целочисленных выражений в коде шейдера. Если эта функция не включена, ресурсы с типом дескриптора VK_DESCRIPTOR_TYPE_STORAGE_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC должны индексироваться только константными целочисленными выражениями при агрегировании в массивы в коде шейдера. Это также указывает, могут ли шейдерные модули объявлять возможность StorageBufferArrayDynamicIndexing.
  • shaderStorageImageArrayDynamicIndexing указывает, можно ли индексировать массивы изображений хранения с помощью динамически равномерных целочисленных выражений в коде шейдера. Если эта функция не включена, ресурсы с типом дескриптора VK_DESCRIPTOR_TYPE_STORAGE_IMAGE должны индексироваться только константными целочисленными выражениями при агрегировании в массивы в коде шейдера. Это также указывает, могут ли шейдерные модули объявлять возможность StorageImageArrayDynamicIndexing.
  • shaderClipDistance указывает, поддерживаются ли расстояния отсечения в коде шейдера. Если эта функция не включена, любые члены, помеченные встроенным декоратором ClipDistance, не должны считываться или записываться в шейдерных модулях. Это также указывает, могут ли шейдерные модули объявлять возможность ClipDistance.
  • shaderCullDistance указывает, поддерживаются ли расстояния отбрасывания в коде шейдера. Если эта функция не включена, любые члены, помеченные встроенным декоратором CullDistance, не должны считываться или записываться в шейдерных модулях. Это также указывает, могут ли шейдерные модули объявлять возможность CullDistance.
  • shaderFloat64 указывает, поддерживаются ли 64-битные числа с плавающей запятой (числа с двойной точностью) в коде шейдера. Если эта функция не включена, 64-битные типы с плавающей запятой не должны использоваться в коде шейдера. Это также указывает, могут ли шейдерные модули объявлять возможность Float64.
  • shaderInt64 указывает, поддерживаются ли 64-битные целые числа (со знаком и без знака) в коде шейдера. Если эта функция не включена, 64-битные целочисленные типы не должны использоваться в коде шейдера. Это также указывает, могут ли шейдерные модули объявлять возможность Int64.
  • shaderInt16 указывает, поддерживаются ли 16-битные целые числа (со знаком и без знака) в коде шейдера. Если эта функция не включена, 16-битные целочисленные типы не должны использоваться в коде шейдера. Это также указывает, могут ли шейдерные модули объявлять возможность Int16.
  • shaderResourceResidency указывает, поддерживаются ли в коде шейдера операции с изображениями, которые возвращают информацию о резидентности ресурса. Если эта функция не включена, инструкции OpImageSparse* не должны использоваться в коде шейдера. Это также указывает, могут ли шейдерные модули объявлять возможность SparseResidency. Функция требует поддержки как минимум одной из функций sparseResidency*.
  • shaderResourceMinLod указывает, поддерживаются ли в коде шейдера операции с изображениями, которые задают минимальный уровень детализации (LOD) ресурса. Если эта функция не включена, операнд изображения MinLod не должен использоваться в коде шейдера. Это также указывает, могут ли шейдерные модули объявлять возможность MinLod.
  • sparseBinding указывает, можно ли управлять памятью ресурсов на уровне непрозрачных разреженных блоков, а не на уровне объекта. Если эта функция не включена, память ресурсов должна связываться только на основе каждого объекта с помощью команд vkBindBufferMemory и vkBindImageMemory. В этом случае буферы и изображения не должны создаваться с установленным VK_BUFFER_CREATE_SPARSE_BINDING_BIT и VK_IMAGE_CREATE_SPARSE_BINDING_BIT в члене flags структур VkBufferCreateInfo и VkImageCreateInfo соответственно. В противном случае памятью ресурсов можно управлять, как описано в Sparse Resource Features.
  • sparseResidencyBuffer указывает, может ли устройство получать доступ к частично резидентным буферам. Если эта функция не включена, буферы не должны создаваться с установленным VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT в члене flags структуры VkBufferCreateInfo.
  • sparseResidencyImage2D указывает, может ли устройство получать доступ к частично резидентным 2D-изображениям с 1 образцом на пиксель. Если эта функция не включена, изображения с imageType равным VK_IMAGE_TYPE_2D и samples, установленным в VK_SAMPLE_COUNT_1_BIT, не должны создаваться с установленным VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT в члене flags структуры VkImageCreateInfo.
  • sparseResidencyImage3D указывает, может ли устройство получать доступ к частично резидентным 3D-изображениям. Если эта функция не включена, изображения с imageType равным VK_IMAGE_TYPE_3D не должны создаваться с установленным VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT в члене flags структуры VkImageCreateInfo.
  • sparseResidency2Samples указывает, может ли физическое устройство получать доступ к частично резидентным 2D-изображениям с 2 образцами на пиксель. Если эта функция не включена, изображения с imageType равным VK_IMAGE_TYPE_2D и samples, установленным в VK_SAMPLE_COUNT_2_BIT, не должны создаваться с установленным VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT в члене flags структуры VkImageCreateInfo.
  • sparseResidency4Samples указывает, может ли физическое устройство получать доступ к частично резидентным 2D-изображениям с 4 образцами на пиксель. Если эта функция не включена, изображения с imageType равным VK_IMAGE_TYPE_2D и samples, установленным в VK_SAMPLE_COUNT_4_BIT, не должны создаваться с установленным VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT в члене flags структуры VkImageCreateInfo.
  • sparseResidency8Samples указывает, может ли физическое устройство получать доступ к частично резидентным 2D-изображениям с 8 образцами на пиксель. Если эта функция не включена, изображения с imageType равным VK_IMAGE_TYPE_2D и samples, установленным в VK_SAMPLE_COUNT_8_BIT, не должны создаваться с установленным VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT в члене flags структуры VkImageCreateInfo.
  • sparseResidency16Samples указывает, может ли физическое устройство получать доступ к частично резидентным 2D-изображениям с 16 образцами на пиксель. Если эта функция не включена, изображения с imageType равным VK_IMAGE_TYPE_2D и samples, установленным в VK_SAMPLE_COUNT_16_BIT, не должны создаваться с установленным VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT в члене flags структуры VkImageCreateInfo.
  • sparseResidencyAliased указывает, может ли физическое устройство корректно получать доступ к данным, имеющим алиасы в нескольких местах. Если эта функция не включена, значения перечисления VK_BUFFER_CREATE_SPARSE_ALIASED_BIT и VK_IMAGE_CREATE_SPARSE_ALIASED_BIT не должны использоваться в членах flags структур VkBufferCreateInfo и VkImageCreateInfo соответственно.
  • variableMultisampleRate указывает, должны ли все конвейеры, которые будут связаны с буфером команд во время подпрохода без вложений, иметь одно и то же значение для VkPipelineMultisampleStateCreateInfo::rasterizationSamples. Если установлено в VK_TRUE, реализация поддерживает переменные скорости многовыборки в подпроходе без вложений. Если установлено в VK_FALSE, то все конвейеры, связанные в таком подпроходе, должны иметь одинаковую скорость многовыборки. Это не оказывает влияния в ситуациях, когда подпроход использует какие-либо вложения.
  • inheritedQueries указывает, может ли выполняться вторичный буфер команд, пока активен запрос.

См. также

VkBool32, VkDeviceCreateInfo, vkGetPhysicalDeviceFeatures

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPhysicalDeviceFeatures

VkPhysicalDeviceLimits(3)

Имя

VkPhysicalDeviceLimits - Структура, сообщающая о зависящих от реализации физических ограничениях устройства

C-спецификация

Структура VkPhysicalDeviceLimits определяется как:

typedef struct VkPhysicalDeviceLimits {
    uint32_t              maxImageDimension1D;
    uint32_t              maxImageDimension2D;
    uint32_t              maxImageDimension3D;
    uint32_t              maxImageDimensionCube;
    uint32_t              maxImageArrayLayers;
    uint32_t              maxTexelBufferElements;
    uint32_t              maxUniformBufferRange;
    uint32_t              maxStorageBufferRange;
    uint32_t              maxPushConstantsSize;
    uint32_t              maxMemoryAllocationCount;
    uint32_t              maxSamplerAllocationCount;
    VkDeviceSize          bufferImageGranularity;
    VkDeviceSize          sparseAddressSpaceSize;
    uint32_t              maxBoundDescriptorSets;
    uint32_t              maxPerStageDescriptorSamplers;
    uint32_t              maxPerStageDescriptorUniformBuffers;
    uint32_t              maxPerStageDescriptorStorageBuffers;
    uint32_t              maxPerStageDescriptorSampledImages;
    uint32_t              maxPerStageDescriptorStorageImages;
    uint32_t              maxPerStageDescriptorInputAttachments;
    uint32_t              maxPerStageResources;
    uint32_t              maxDescriptorSetSamplers;
    uint32_t              maxDescriptorSetUniformBuffers;
    uint32_t              maxDescriptorSetUniformBuffersDynamic;
    uint32_t              maxDescriptorSetStorageBuffers;
    uint32_t              maxDescriptorSetStorageBuffersDynamic;
    uint32_t              maxDescriptorSetSampledImages;
    uint32_t              maxDescriptorSetStorageImages;
    uint32_t              maxDescriptorSetInputAttachments;
    uint32_t              maxVertexInputAttributes;
    uint32_t              maxVertexInputBindings;
    uint32_t              maxVertexInputAttributeOffset;
    uint32_t              maxVertexInputBindingStride;
    uint32_t              maxVertexOutputComponents;
    uint32_t              maxTessellationGenerationLevel;
    uint32_t              maxTessellationPatchSize;
    uint32_t              maxTessellationControlPerVertexInputComponents;
    uint32_t              maxTessellationControlPerVertexOutputComponents;
    uint32_t              maxTessellationControlPerPatchOutputComponents;
    uint32_t              maxTessellationControlTotalOutputComponents;
    uint32_t              maxTessellationEvaluationInputComponents;
    uint32_t              maxTessellationEvaluationOutputComponents;
    uint32_t              maxGeometryShaderInvocations;
    uint32_t              maxGeometryInputComponents;
    uint32_t              maxGeometryOutputComponents;
    uint32_t              maxGeometryOutputVertices;
    uint32_t              maxGeometryTotalOutputComponents;
    uint32_t              maxFragmentInputComponents;
    uint32_t              maxFragmentOutputAttachments;
    uint32_t              maxFragmentDualSrcAttachments;
    uint32_t              maxFragmentCombinedOutputResources;
    uint32_t              maxComputeSharedMemorySize;
    uint32_t              maxComputeWorkGroupCount[3];
    uint32_t              maxComputeWorkGroupInvocations;
    uint32_t              maxComputeWorkGroupSize[3];
    uint32_t              subPixelPrecisionBits;
    uint32_t              subTexelPrecisionBits;
    uint32_t              mipmapPrecisionBits;
    uint32_t              maxDrawIndexedIndexValue;
    uint32_t              maxDrawIndirectCount;
    float                 maxSamplerLodBias;
    float                 maxSamplerAnisotropy;
    uint32_t              maxViewports;
    uint32_t              maxViewportDimensions[2];
    float                 viewportBoundsRange[2];
    uint32_t              viewportSubPixelBits;
    size_t                minMemoryMapAlignment;
    VkDeviceSize          minTexelBufferOffsetAlignment;
    VkDeviceSize          minUniformBufferOffsetAlignment;
    VkDeviceSize          minStorageBufferOffsetAlignment;
    int32_t               minTexelOffset;
    uint32_t              maxTexelOffset;
    int32_t               minTexelGatherOffset;
    uint32_t              maxTexelGatherOffset;
    float                 minInterpolationOffset;
    float                 maxInterpolationOffset;
    uint32_t              subPixelInterpolationOffsetBits;
    uint32_t              maxFramebufferWidth;
    uint32_t              maxFramebufferHeight;
    uint32_t              maxFramebufferLayers;
    VkSampleCountFlags    framebufferColorSampleCounts;
    VkSampleCountFlags    framebufferDepthSampleCounts;
    VkSampleCountFlags    framebufferStencilSampleCounts;
    VkSampleCountFlags    framebufferNoAttachmentsSampleCounts;
    uint32_t              maxColorAttachments;
    VkSampleCountFlags    sampledImageColorSampleCounts;
    VkSampleCountFlags    sampledImageIntegerSampleCounts;
    VkSampleCountFlags    sampledImageDepthSampleCounts;
    VkSampleCountFlags    sampledImageStencilSampleCounts;
    VkSampleCountFlags    storageImageSampleCounts;
    uint32_t              maxSampleMaskWords;
    VkBool32              timestampComputeAndGraphics;
    float                 timestampPeriod;
    uint32_t              maxClipDistances;
    uint32_t              maxCullDistances;
    uint32_t              maxCombinedClipAndCullDistances;
    uint32_t              discreteQueuePriorities;
    float                 pointSizeRange[2];
    float                 lineWidthRange[2];
    float                 pointSizeGranularity;
    float                 lineWidthGranularity;
    VkBool32              strictLines;
    VkBool32              standardSampleLocations;
    VkDeviceSize          optimalBufferCopyOffsetAlignment;
    VkDeviceSize          optimalBufferCopyRowPitchAlignment;
    VkDeviceSize          nonCoherentAtomSize;
} VkPhysicalDeviceLimits;

Члены

  • maxImageDimension1D is the maximum dimension (width) supported for all images created with an imageType of VK_IMAGE_TYPE_1D.
  • maxImageDimension2D is the maximum dimension (width or height) supported for all images created with an imageType of VK_IMAGE_TYPE_2D and without VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in flags.
  • maxImageDimension3D is the maximum dimension (width, height, or depth) supported for all images created with an imageType of VK_IMAGE_TYPE_3D.
  • maxImageDimensionCube is the maximum dimension (width or height) supported for all images created with an imageType of VK_IMAGE_TYPE_2D and with VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in flags.
  • maxImageArrayLayers is the maximum number of layers (arrayLayers) for an image.
  • maxTexelBufferElements is the maximum number of addressable texels for a buffer view created on a buffer which was created with the VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the usage member of the VkBufferCreateInfo structure.
  • maxUniformBufferRange is the maximum value that можно be specified in the range member of any VkDescriptorBufferInfo structures passed to a call to vkUpdateDescriptorSets for descriptors of type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
  • maxStorageBufferRange is the maximum value that можно be specified in the range member of any VkDescriptorBufferInfo structures passed to a call to vkUpdateDescriptorSets for descriptors of type VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
  • maxPushConstantsSize is the maximum size, in bytes, of the pool of push constant memory. For each of the push constant ranges indicated by the pPushConstantRanges member of the VkPipelineLayoutCreateInfo structure, (offset + size) должно be less than or equal to this limit.
  • maxMemoryAllocationCount is the maximum number of device memory allocations, as created by vkAllocateMemory, which можно simultaneously exist.
  • maxSamplerAllocationCount is the maximum number of sampler objects, as created by vkCreateSampler, which можно simultaneously exist on a device.
  • bufferImageGranularity is the granularity, in bytes, at which buffer or linear image resources, and optimal image resources можно be bound to adjacent offsets in the same VkDeviceMemory object without aliasing. See Buffer-Image Granularity for more details.
  • sparseAddressSpaceSize is the total amount of address space available, in bytes, for sparse memory resources. This is an upper bound on the sum of the size of all sparse resources, regardless of whether any memory is bound to them.
  • maxBoundDescriptorSets is the maximum number of descriptor sets that можно be simultaneously used by a pipeline. All DescriptorSet decorations in shader modules должны have a value less than maxBoundDescriptorSets. See html/vkspec.html#descriptorsets-sets.
  • maxPerStageDescriptorSamplers is the maximum number of samplers that можно be accessible to a single shader stage in a pipeline layout. Descriptors with a type of VK_DESCRIPTOR_TYPE_SAMPLER or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this limit. A descriptor is accessible to a shader stage when the stageFlags member of the VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See html/vkspec.html#descriptorsets-sampler and html/vkspec.html#descriptorsets-combinedimagesampler.
  • maxPerStageDescriptorUniformBuffers is the maximum number of uniform buffers that можно be accessible to a single shader stage in a pipeline layout. Descriptors with a type of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this limit. A descriptor is accessible to a shader stage when the stageFlags member of the VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See html/vkspec.html#descriptorsets-uniformbuffer and html/vkspec.html#descriptorsets-uniformbufferdynamic.
  • maxPerStageDescriptorStorageBuffers is the maximum number of storage buffers that можно be accessible to a single shader stage in a pipeline layout. Descriptors with a type of VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this limit. A descriptor is accessible to a pipeline shader stage when the stageFlags member of the VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See html/vkspec.html#descriptorsets-storagebuffer and html/vkspec.html#descriptorsets-storagebufferdynamic.
  • maxPerStageDescriptorSampledImages is the maximum number of sampled images that можно be accessible to a single shader stage in a pipeline layout. Descriptors with a type of VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit. A descriptor is accessible to a pipeline shader stage when the stageFlags member of the VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See html/vkspec.html#descriptorsets-combinedimagesampler, html/vkspec.html#descriptorsets-sampledimage, and html/vkspec.html#descriptorsets-uniformtexelbuffer.
  • maxPerStageDescriptorStorageImages is the maximum number of storage images that можно be accessible to a single shader stage in a pipeline layout. Descriptors with a type of VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit. A descriptor is accessible to a pipeline shader stage when the stageFlags member of the VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. See html/vkspec.html#descriptorsets-storageimage, and html/vkspec.html#descriptorsets-storagetexelbuffer.
  • maxPerStageDescriptorInputAttachments is the maximum number of input attachments that можно be accessible to a single shader stage in a pipeline layout. Descriptors with a type of VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit. A descriptor is accessible to a pipeline shader stage when the stageFlags member of the VkDescriptorSetLayoutBinding structure has the bit for that shader stage set. These are only supported for the fragment stage. See html/vkspec.html#descriptorsets-inputattachment.
  • maxPerStageResources is the maximum number of resources that можно be accessible to a single shader stage in a pipeline layout. Descriptors with a type of VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit. For the fragment shader stage the framebuffer color attachments also count against this limit.
  • maxDescriptorSetSamplers is the maximum number of samplers that можно be included in descriptor bindings in a pipeline layout across all pipeline shader stages and descriptor set numbers. Descriptors with a type of VK_DESCRIPTOR_TYPE_SAMPLER or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this limit. See html/vkspec.html#descriptorsets-sampler and html/vkspec.html#descriptorsets-combinedimagesampler.
  • maxDescriptorSetUniformBuffers is the maximum number of uniform buffers that можно be included in descriptor bindings in a pipeline layout across all pipeline shader stages and descriptor set numbers. Descriptors with a type of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this limit. See html/vkspec.html#descriptorsets-uniformbuffer and html/vkspec.html#descriptorsets-uniformbufferdynamic.
  • maxDescriptorSetUniformBuffersDynamic is the maximum number of dynamic uniform buffers that можно be included in descriptor bindings in a pipeline layout across all pipeline shader stages and descriptor set numbers. Descriptors with a type of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this limit. See html/vkspec.html#descriptorsets-uniformbufferdynamic.
  • maxDescriptorSetStorageBuffers — это максимальное количество буферов хранения, которые можно включить в привязки дескрипторов в макете конвейера во всех этапах шейдера конвейера и номерах наборов дескрипторов. Дескрипторы типа VK_DESCRIPTOR_TYPE_STORAGE_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC учитываются в этом ограничении. См. html/vkspec.html#descriptorsets-storagebuffer и html/vkspec.html#descriptorsets-storagebufferdynamic.
  • maxDescriptorSetStorageBuffersDynamic — это максимальное количество динамических буферов хранения, которые можно включить в привязки дескрипторов в макете конвейера во всех этапах шейдера конвейера и номерах наборов дескрипторов. Дескрипторы типа VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC учитываются в этом ограничении. См. html/vkspec.html#descriptorsets-storagebufferdynamic.
  • maxDescriptorSetSampledImages — это максимальное количество выборочных изображений, которые можно включить в привязки дескрипторов в макете конвейера во всех этапах шейдера конвейера и номерах наборов дескрипторов. Дескрипторы типа VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE или VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER учитываются в этом ограничении. См. html/vkspec.html#descriptorsets-combinedimagesampler, html/vkspec.html#descriptorsets-sampledimage и html/vkspec.html#descriptorsets-uniformtexelbuffer.
  • maxDescriptorSetStorageImages — это максимальное количество изображений хранения, которые можно включить в привязки дескрипторов в макете конвейера во всех этапах шейдера конвейера и номерах наборов дескрипторов. Дескрипторы типа VK_DESCRIPTOR_TYPE_STORAGE_IMAGE или VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER учитываются в этом ограничении. См. html/vkspec.html#descriptorsets-storageimage и html/vkspec.html#descriptorsets-storagetexelbuffer.
  • maxDescriptorSetInputAttachments — это максимальное количество входных вложений, которые можно включить в привязки дескрипторов в макете конвейера во всех этапах шейдера конвейера и номерах наборов дескрипторов. Дескрипторы типа VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT учитываются в этом ограничении. См. html/vkspec.html#descriptorsets-inputattachment.
  • maxVertexInputAttributes — это максимальное количество атрибутов входных данных вершин, которые можно указать для графического конвейера. Они описаны в массиве структур VkVertexInputAttributeDescription, которые предоставляются при создании графического конвейера через элемент pVertexAttributeDescriptions структуры VkPipelineVertexInputStateCreateInfo. См. html/vkspec.html#fxvertex-attrib и html/vkspec.html#fxvertex-input.
  • maxVertexInputBindings — это максимальное количество буферов вершин, которые можно указать для предоставления атрибутов вершин графическому конвейеру. Они описаны в массиве структур VkVertexInputBindingDescription, которые предоставляются при создании графического конвейера через элемент pVertexBindingDescriptions структуры VkPipelineVertexInputStateCreateInfo. Элемент binding структуры VkVertexInputBindingDescription должен быть меньше этого предела. См. html/vkspec.html#fxvertex-input.
  • maxVertexInputAttributeOffset — это максимальный сдвиг атрибута входных данных вершин, который можно добавить к шагу привязки входных данных вершин. Элемент offset структуры VkVertexInputAttributeDescription должен быть меньше или равен этому пределу. См. html/vkspec.html#fxvertex-input.
  • maxVertexInputBindingStride — это максимальный шаг привязки входных данных вершин, который можно указать в привязке входных данных вершин. Элемент stride структуры VkVertexInputBindingDescription должен быть меньше или равен этому пределу. См. html/vkspec.html#fxvertex-input.
  • maxVertexOutputComponents — это максимальное количество компонентов выходных переменных, которые можно вывести шейдером вершин. См. html/vkspec.html#shaders-vertex.
  • maxTessellationGenerationLevel — это максимальный уровень генерации тесселяции, поддерживаемый генератором примитивов тесселяции с фиксированной функцией. См. html/vkspec.html#tessellation.
  • maxTessellationPatchSize — это максимальный размер патча, в вершинах, патчей, которые можно обработать шейдером управления тесселяцией и генератором примитивов тесселяции. Элемент patchControlPoints структуры VkPipelineTessellationStateCreateInfo, указанный при создании конвейера, и значение, указанное в режиме выполнения OutputVertices модулей шейдера, должны быть меньше или равны этому пределу. См. html/vkspec.html#tessellation.
  • maxTessellationControlPerVertexInputComponents — это максимальное количество компонентов входных переменных, которые можно предоставить в качестве входных данных на вершину для этапа шейдера управления тесселяцией.
  • maxTessellationControlPerVertexOutputComponents — это максимальное количество компонентов выходных переменных на вершину, которые можно вывести из этапа шейдера управления тесселяцией.
  • maxTessellationControlPerPatchOutputComponents — это максимальное количество компонентов выходных переменных на патч, которые можно вывести из этапа шейдера управления тесселяцией.
  • maxTessellationControlTotalOutputComponents — это максимальное общее количество компонентов выходных переменных на вершину и на патч, которые можно вывести из этапа шейдера управления тесселяцией.
  • maxTessellationEvaluationInputComponents — это максимальное количество компонентов входных переменных, которые можно предоставить в качестве входных данных на вершину для этапа шейдера оценки тесселяции.
  • maxTessellationEvaluationOutputComponents — это максимальное количество компонентов выходных переменных на вершину, которые можно вывести из этапа шейдера оценки тесселяции.
  • maxGeometryShaderInvocations — это максимальное количество вызовов, поддерживаемых для экземпляров геометрических шейдеров. Значение, указанное в режиме выполнения Invocations модулей шейдера, должно быть меньше или равно этому пределу. См. html/vkspec.html#geometry.
  • maxGeometryInputComponents — это максимальное количество компонентов входных переменных, которые можно предоставить в качестве входных данных для этапа геометрического шейдера.
  • maxGeometryOutputComponents — это максимальное количество компонентов выходных переменных, которые можно вывести из этапа геометрического шейдера.
  • maxGeometryOutputVertices — это максимальное количество вершин, которые можно выдать любым геометрическим шейдером.
  • maxGeometryTotalOutputComponents — это максимальное общее количество компонентов вывода, по всем выданным вершинам, которые можно вывести из этапа геометрического шейдера.
  • maxFragmentInputComponents — это максимальное количество компонентов входных переменных, которые можно предоставить в качестве входных данных для этапа фрагментного шейдера.
  • maxFragmentOutputAttachments — это максимальное количество выходных вложений, в которые можно записывать с помощью этапа фрагментного шейдера.
  • maxFragmentDualSrcAttachments — это максимальное количество выходных вложений, в которые можно записывать с помощью этапа фрагментного шейдера, когда включено смешивание и используется один из режимов смешивания с двумя источниками. См. html/vkspec.html#framebuffer-dsb и dualSrcBlend.
  • maxFragmentCombinedOutputResources — это общее количество буферов хранения, изображений хранения и выходных буферов, которые можно использовать на этапе фрагментного шейдера.
  • maxComputeSharedMemorySize — это максимальный общий размер хранилища, в байтах, всех переменных, объявленных с классом хранения WorkgroupLocal в модулях шейдера (или с квалификатором хранения shared в GLSL) на этапе вычислительного шейдера.
  • maxComputeWorkGroupCount[3] — это максимальное количество локальных рабочих групп, которые можно отправить одной командой отправки. Эти три значения представляют максимальное количество локальных рабочих групп для измерений X, Y и Z соответственно. Параметры количества рабочих групп для команд отправки должны быть меньше или равны соответствующему пределу. См. html/vkspec.html#dispatch.
  • maxComputeWorkGroupInvocations — это максимальное общее количество вызовов вычислительного шейдера в одной локальной рабочей группе. Произведение размеров X, Y и Z, как указано в режиме выполнения LocalSize в модулях шейдеров и объектом, помеченным декорацией WorkgroupSize, должно быть меньше или равно этому ограничению.
  • maxComputeWorkGroupSize[3] — это максимальный размер локальной вычислительной рабочей группы для каждого измерения. Эти три значения представляют максимальный размер локальной рабочей группы в измерениях X, Y и Z соответственно. Размеры x, y и z, указанные в режиме выполнения LocalSize и объектом, помеченным декорацией WorkgroupSize в модулях шейдеров, должны быть меньше или равны соответствующему ограничению.
  • subPixelPrecisionBits — это количество битов субпиксельной точности в координатах фреймбуфера xf и yf. См. html/vkspec.html#primsrast.
  • subTexelPrecisionBits — это количество битов точности в делении вдоль оси изображения, используемого для фильтров уменьшения и увеличения. 2subTexelPrecisionBits — это фактическое количество делений вдоль каждой оси изображения. Аппаратное обеспечение фильтрации будет привязываться к этим местоположениям при вычислении отфильтрованных результатов.
  • mipmapPrecisionBits — это количество битов деления, к которым привязывается вычисление LOD для извлечения mipmap при определении вклада каждого уровня mip в отфильтрованные результаты mip. 2mipmapPrecisionBits — это фактическое количество делений.

    Примечание

    Например, если это значение равно 2 битам, то при линейной фильтрации между двумя уровнями каждый уровень может вносить вклад: 0%, 33%, 66% или 100% (это всего лишь пример, и объем вклада должен быть охвачен различными уравнениями в спецификации).

  • maxDrawIndexedIndexValue — это максимальное значение индекса, которое можно использовать для индексированных вызовов отрисовки при использовании 32-битных индексов. Это исключает значение перезапуска примитива 0xFFFFFFFF. См. fullDrawIndexUint32.
  • maxDrawIndirectCount — это максимальное количество отрисовок, поддерживаемое для косвенных вызовов отрисовки. См. multiDrawIndirect.
  • maxSamplerLodBias — это максимальное абсолютное смещение уровня детализации семплера. Сумма элемента mipLodBias структуры VkSamplerCreateInfo и операнда Bias операций выборки изображений в модулях шейдеров (или 0, если операнд Bias не предоставлен для операции выборки изображения) ограничиваются диапазоном [-maxSamplerLodBias,+maxSamplerLodBias]. См. html/vkspec.html#samplers-mipLodBias.
  • maxSamplerAnisotropy — это максимальная степень анизотропии семплера. Максимальная степень анизотропной фильтрации, используемая для операции выборки изображения, — это минимум элемента maxAnisotropy структуры VkSamplerCreateInfo и этого ограничения. См. html/vkspec.html#samplers-maxAnisotropy.
  • maxViewports — это максимальное количество активных видовых экранов. Элемент viewportCount структуры VkPipelineViewportStateCreateInfo, предоставляемый при создании конвейера, должен быть меньше или равен этому ограничению.
  • maxViewportDimensions[2] — это максимальные размеры видового экрана в измерениях X (ширина) и Y (высота) соответственно. Максимальные размеры видового экрана должны быть больше или равны наибольшему изображению, которое можно создать и использовать в качестве вложения фреймбуфера. См. Управление видовым экраном.
  • viewportBoundsRange[2] — это диапазон [минимум, максимум], в котором должны находиться углы видового экрана. Этот диапазон должен быть по крайней мере [-2 × size, 2 × size - 1], где size = max(maxViewportDimensions[0], maxViewportDimensions[1]). См. Управление видовым экраном.

    Примечание

    Назначение ограничения viewportBoundsRange — разрешить произвольный сдвиг видового экрана максимального размера относительно целевого объекта вывода, при условии, что по крайней мере какая-то часть пересекается. Это дало бы предел границ [-size + 1, 2 × size - 1], что позволило бы все возможные непустые пересечения целевого объекта вывода и видового экрана. Поскольку эти числа обычно являются степенями двойки, выбор знакового числового диапазона с использованием наименьшего возможного количества битов приводит к указанному диапазону.

  • viewportSubPixelBits — это количество битов субпиксельной точности для границ видового экрана. Точность субпикселей, с которой интерпретируются границы видового экрана с плавающей запятой, определяется этим ограничением.
  • minMemoryMapAlignment — это минимальное требуемое выравнивание в байтах выделений памяти, видимой хостом, в адресном пространстве хоста. При сопоставлении выделения памяти с помощью vkMapMemory вычитание offset байтов из возвращаемого указателя всегда будет давать целое кратное этому ограничению. См. html/vkspec.html#memory-device-hostaccess.
  • minTexelBufferOffsetAlignment — это минимальное требуемое выравнивание в байтах для элемента offset структуры VkBufferViewCreateInfo для буферов текселей. При создании представления буфера для буфера, созданного с помощью VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT или VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, установленных в элементе usage структуры VkBufferCreateInfo, offset должен быть целым кратным этому ограничению.
  • minUniformBufferOffsetAlignment — это минимальное требуемое выравнивание в байтах для элемента offset структуры VkDescriptorBufferInfo для униформных буферов. При обновлении дескриптора типа VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER или VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, offset должен быть целым кратным этому ограничению. Аналогично, динамические смещения для униформных буферов должны быть кратными этому ограничению.
  • minStorageBufferOffsetAlignment — это минимальное требуемое выравнивание в байтах для элемента offset структуры VkDescriptorBufferInfo для буферов хранения. При обновлении дескриптора типа VK_DESCRIPTOR_TYPE_STORAGE_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, offset должен быть целым кратным этому ограничению. Аналогично, динамические смещения для буферов хранения должны быть кратными этому ограничению.
  • minTexelOffset — это минимальное значение смещения для операнда изображения ConstOffset любой из инструкций изображения OpImageSample* или OpImageFetch*.
  • maxTexelOffset — это максимальное значение смещения для операнда изображения ConstOffset любой из инструкций изображения OpImageSample* или OpImageFetch*.
  • minTexelGatherOffset — это минимальное значение смещения для операндов изображения Offset или ConstOffsets любой из инструкций изображения OpImage*Gather.
  • maxTexelGatherOffset — это максимальное значение смещения для операндов изображения Offset или ConstOffsets любой из инструкций изображения OpImage*Gather.
  • minInterpolationOffset — это минимальное отрицательное значение смещения для операнда offset расширенной инструкции InterpolateAtOffset.
  • maxInterpolationOffset — это максимальное положительное значение смещения для операнда offset расширенной инструкции InterpolateAtOffset.
  • subPixelInterpolationOffsetBits — это количество дробных субпиксельных битов, к которым могут быть округлены смещения x и y для расширенной инструкции InterpolateAtOffset в виде значений с фиксированной точкой.
  • maxFramebufferWidth — это максимальная ширина фреймбуфера. Элемент width структуры VkFramebufferCreateInfo должен быть меньше или равен этому ограничению.
  • maxFramebufferHeight — это максимальная высота фреймбуфера. Элемент height структуры VkFramebufferCreateInfo должен быть меньше или равен этому ограничению.
  • maxFramebufferLayers — это максимальное количество слоев для многослойного фреймбуфера. Элемент layers структуры VkFramebufferCreateInfo должен быть меньше или равен этому ограничению.
  • framebufferColorSampleCounts — это битовая маска1 VkSampleCountFlagBits, указывающая на количество образцов цвета, поддерживаемых для всех цветовых вложений фреймбуфера с форматами с плавающей или фиксированной точкой. Нет ограничения, указывающего на количество образцов цвета, поддерживаемых для всех цветовых вложений с целочисленными форматами.
  • framebufferDepthSampleCounts — это битовая маска1 VkSampleCountFlagBits, указывающая на поддерживаемые количества образцов глубины для всех вложений глубины/трафарета фреймбуфера, когда формат включает компонент глубины.
  • framebufferStencilSampleCounts — это битовая маска1 VkSampleCountFlagBits, указывающая на поддерживаемые количества образцов трафарета для всех вложений глубины/трафарета фреймбуфера, когда формат включает компонент трафарета.
  • framebufferNoAttachmentsSampleCounts — это битовая маска1 VkSampleCountFlagBits, указывающая на поддерживаемые количества образцов для фреймбуфера без вложений.
  • maxColorAttachments — это максимальное количество цветовых вложений, которые могут использоваться подпроходом в проходе рендеринга. Элемент colorAttachmentCount структуры VkSubpassDescription должен быть меньше или равен этому ограничению.
  • sampledImageColorSampleCounts — это битовая маска1 VkSampleCountFlagBits, указывающая на количества выборок, поддерживаемые для всех 2D-изображений, созданных с помощью VK_IMAGE_TILING_OPTIMAL, usage, содержащих VK_IMAGE_USAGE_SAMPLED_BIT, и нецелочисленный цветовой формат.
  • sampledImageIntegerSampleCounts — это битовая маска1 VkSampleCountFlagBits, указывающая на количества выборок, поддерживаемые для всех 2D-изображений, созданных с помощью VK_IMAGE_TILING_OPTIMAL, usage, содержащих VK_IMAGE_USAGE_SAMPLED_BIT, и целочисленный цветовой формат.
  • sampledImageDepthSampleCounts — это битовая маска1 VkSampleCountFlagBits, указывающая на количества выборок, поддерживаемые для всех 2D-изображений, созданных с помощью VK_IMAGE_TILING_OPTIMAL, usage, содержащих VK_IMAGE_USAGE_SAMPLED_BIT, и формат глубины.
  • sampledImageStencilSampleCounts — это битовая маска1 VkSampleCountFlagBits, указывающая на поддерживаемые выборки для всех 2D-изображений, созданных с помощью VK_IMAGE_TILING_OPTIMAL, usage, содержащих VK_IMAGE_USAGE_SAMPLED_BIT, и формат трафарета.
  • storageImageSampleCounts — это битовая маска1 VkSampleCountFlagBits, указывающая на количества выборок, поддерживаемые для всех 2D-изображений, созданных с помощью VK_IMAGE_TILING_OPTIMAL, и usage, содержащих VK_IMAGE_USAGE_STORAGE_BIT.
  • maxSampleMaskWords — это максимальное количество элементов массива переменной, декорированной встроенным декоратором SampleMask.
  • timestampComputeAndGraphics указывает на поддержку меток времени во всех графических и вычислительных очередях. Если это ограничение установлено в VK_TRUE, все очереди, которые объявляют VK_QUEUE_GRAPHICS_BIT или VK_QUEUE_COMPUTE_BIT в VkQueueFamilyProperties::queueFlags, поддерживают VkQueueFamilyProperties::timestampValidBits не менее 36. См. Запросы меток времени.
  • timestampPeriod — это количество наносекунд, необходимых для увеличения запроса метки времени на 1. См. Запросы меток времени.
  • maxClipDistances — это максимальное количество расстояний отсечения, которые могут использоваться на одном этапе шейдера. Размер любого массива, объявленного с помощью встроенного декоратора ClipDistance в модуле шейдера, должен быть меньше или равен этому ограничению.
  • maxCullDistances — это максимальное количество расстояний отбраковки, которые могут использоваться на одном этапе шейдера. Размер любого массива, объявленного с помощью встроенного декоратора CullDistance в модуле шейдера, должен быть меньше или равен этому ограничению.
  • maxCombinedClipAndCullDistances — это максимальное комбинированное количество расстояний отсечения и отбраковки, которые могут использоваться на одном этапе шейдера. Сумма размеров любых пар массивов, объявленных с помощью встроенных декораторов ClipDistance и CullDistance, используемых одним этапом шейдера в модуле шейдера, должна быть меньше или равна этому ограничению.
  • discreteQueuePriorities — это количество дискретных приоритетов, которые могут быть назначены очереди на основе значения каждого элемента VkDeviceQueueCreateInfo::pQueuePriorities. Это должно быть не менее 2, и уровни должны быть равномерно распределены по диапазону, по крайней мере, с одним уровнем на 1,0 и другим на 0,0. См. html/vkspec.html#devsandqueues-priority.
  • pointSizeRange[2] — это диапазон [minimum,maximum] поддерживаемых размеров для точек. Значения, записанные в переменные, декорированные встроенным декоратором PointSize, ограничиваются этим диапазоном.
  • lineWidthRange[2] — это диапазон [minimum,maximum] поддерживаемых ширин для линий. Значения, указанные членом lineWidth структуры VkPipelineRasterizationStateCreateInfo или параметром lineWidth для vkCmdSetLineWidth, ограничиваются этим диапазоном.
  • pointSizeGranularity — это гранулярность поддерживаемых размеров точек. Не все размеры точек в диапазоне, определенном pointSizeRange, поддерживаются. Это ограничение указывает гранулярность (или приращение) между последовательными поддерживаемыми размерами точек.
  • lineWidthGranularity — это гранулярность поддерживаемых ширин линий. Не все ширины линий в диапазоне, определенном lineWidthRange, поддерживаются. Это ограничение указывает гранулярность (или приращение) между последовательными поддерживаемыми ширинами линий.
  • strictLines указывает, растризуются ли линии в соответствии с предпочтительным методом растризации. Если установлено значение VK_FALSE, линии могут растризоваться по ослабленному набору правил. Если установлено значение VK_TRUE, линии растризуются в соответствии со строгим определением. См. Основная растризация отрезков линий.
  • standardSampleLocations указывает, используются ли при растризации стандартные расположения выборок, как описано в Многовыборке. Если установлено значение VK_TRUE, реализация использует документированные расположения выборок. Если установлено значение VK_FALSE, реализация может использовать другие расположения выборок.
  • optimalBufferCopyOffsetAlignment — это оптимальное выравнивание смещения буфера в байтах для vkCmdCopyBufferToImage и vkCmdCopyImageToBuffer. Требования к выравниванию на тексель соблюдаются, но приложениям следует использовать оптимальное выравнивание для достижения оптимальной производительности и энергопотребления.
  • optimalBufferCopyRowPitchAlignment — это оптимальное выравнивание шага строки буфера в байтах для vkCmdCopyBufferToImage и vkCmdCopyImageToBuffer. Шаг строки — это количество байтов между текселями с одинаковой координатой X в смежных строках (координаты Y отличаются на единицу). Требования к выравниванию на тексель соблюдаются, но приложениям следует использовать оптимальное выравнивание для достижения оптимальной производительности и энергопотребления.
  • nonCoherentAtomSize — это размер и выравнивание в байтах, которые ограничивают одновременный доступ к отображаемой хостом памяти устройства.

Описание

1
Для всех битовых масок VkSampleCountFlagBits пределы количества выборок, определенные выше, представляют минимальные поддерживаемые количества выборок для каждого типа изображения. Отдельные изображения могут поддерживать дополнительные количества выборок, которые запрашиваются с помощью vkGetPhysicalDeviceImageFormatProperties, как описано в Поддерживаемые количества выборок.

См. также

VkBool32, VkDeviceSize, VkPhysicalDeviceProperties, VkSampleCountFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPhysicalDeviceLimits

VkPhysicalDeviceMemoryProperties(3)

Имя

VkPhysicalDeviceMemoryProperties - Структура, указывающая свойства памяти физического устройства

C-спецификация

Структура VkPhysicalDeviceMemoryProperties определяется как:

typedef struct VkPhysicalDeviceMemoryProperties {
    uint32_t        memoryTypeCount;
    VkMemoryType    memoryTypes[VK_MAX_MEMORY_TYPES];
    uint32_t        memoryHeapCount;
    VkMemoryHeap    memoryHeaps[VK_MAX_MEMORY_HEAPS];
} VkPhysicalDeviceMemoryProperties;

Члены

  • memoryTypeCount — это количество допустимых элементов в массиве memoryTypes.
  • memoryTypes — это массив структур VkMemoryType, описывающих типы памяти, которые могут использоваться для доступа к памяти, выделенной из куч, указанных memoryHeaps.
  • memoryHeapCount — это количество допустимых элементов в массиве memoryHeaps.
  • memoryHeaps — это массив структур VkMemoryHeap, описывающих кучи памяти, из которых могут выделяться память.

Описание

Структура VkPhysicalDeviceMemoryProperties описывает несколько куч памяти, а также несколько типов памяти, которые могут использоваться для доступа к памяти, выделенной в этих кучах. Каждая куча описывает ресурс памяти определенного размера, а каждый тип памяти описывает набор свойств памяти (например, кэшированная хостом или некэшированная), которые могут использоваться с данной кучей памяти. Выделения, использующие определенный тип памяти, будут потреблять ресурсы из кучи, указанной индексом кучи этого типа памяти. Более одного типа памяти могут совместно использовать каждую кучу, а кучи и типы памяти предоставляют механизм для объявления точного размера ресурсов физической памяти, позволяя при этом использовать память с различными свойствами.

Количество куч памяти задается memoryHeapCount и меньше или равно VK_MAX_MEMORY_HEAPS. Каждая куча описывается элементом массива memoryHeaps как структура VkMemoryHeap. Количество типов памяти, доступных во всех кучах памяти, задается memoryTypeCount и меньше или равно VK_MAX_MEMORY_TYPES. Каждый тип памяти описывается элементом массива memoryTypes как структура VkMemoryType.

По крайней мере, одна куча должна включать VK_MEMORY_HEAP_DEVICE_LOCAL_BIT в VkMemoryHeap::flags. Если есть несколько куч, все из которых имеют схожие характеристики производительности, они могут все включать VK_MEMORY_HEAP_DEVICE_LOCAL_BIT. В системе унифицированной архитектуры памяти (UMA) часто существует только одна куча памяти, которая считается одинаково «локальной» для хоста и устройства, и такая реализация должна объявлять кучу как локальную для устройства.

Каждый тип памяти, возвращаемый функцией vkGetPhysicalDeviceMemoryProperties, должен иметь значение propertyFlags , равное одному из следующих:

  • 0
  • VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
  • VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT
  • VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
  • VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
  • VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
  • VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT
  • VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
  • VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT

Должен существовать как минимум один тип памяти, у которого установлены биты VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT и VK_MEMORY_PROPERTY_HOST_COHERENT_BIT в propertyFlags. Должен существовать как минимум один тип памяти, у которого установлен бит VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT в propertyFlags.

Типы памяти отсортированы в соответствии с порядком обхода, который помогает легко выбрать подходящий тип памяти. Для двух типов памяти X и Y порядок обхода определяет X ≤ Y, если:

  • биты свойств памяти, установленные для X, являются строгим подмножеством битов свойств памяти, установленных для Y. Или,
  • биты свойств памяти, установленные для X, совпадают с битами свойств памяти, установленными для Y, и X использует кучу памяти с большей или равной производительностью (определяется специфичным для реализации способом).

Типы памяти упорядочены в списке так, что X присваивается меньшее значение memoryTypeIndex, чем Y, если (X ≤ Y) ∧ ¬ (Y ≤ X) согласно порядку обхода. Обратите внимание, что список всех допустимых комбинаций флагов свойств памяти выше удовлетворяет этому порядку обхода, но возможны и другие порядки. Цель этой сортировки — позволить приложениям использовать простой цикл поиска при выборе подходящего типа памяти, например:

// Find a memory type in "memoryTypeBits" that includes all of "properties"
int32_t FindProperties(uint32_t memoryTypeBits, VkMemoryPropertyFlags properties)
{
    for (int32_t i = 0; i < memoryTypeCount; ++i)
    {
        if ((memoryTypeBits & (1 << i)) &&
            ((memoryTypes[i].propertyFlags & properties) == properties))
            return i;
    }
    return -1;
}

// Try to find an optimal memory type, or if it does not exist
// find any compatible memory type
VkMemoryRequirements memoryRequirements;
vkGetImageMemoryRequirements(device, image, &memoryRequirements);
int32_t memoryType = FindProperties(memoryRequirements.memoryTypeBits, optimalProperties);
if (memoryType == -1)
    memoryType = FindProperties(memoryRequirements.memoryTypeBits, requiredProperties);

Цикл найдет первый поддерживаемый тип памяти, у которого установлены все запрашиваемые в properties биты. Если точного совпадения нет, он найдет наиболее близкое совпадение (т. е. тип памяти с наименьшим количеством дополнительных установленных битов), у которого установлены некоторые дополнительные биты, но которые не вредны для поведения, запрашиваемого properties. Приложение может сначала искать оптимальные свойства, например, тип памяти, который является локальным для устройства или поддерживает согласованные кэшированные доступы, в зависимости от предполагаемого использования, и если такой тип памяти отсутствует, может перейти к поиску менее оптимального, но гарантированного набора свойств, таких как "0" или "видимый и согласованный хостом".

См. также

VkMemoryHeap, VkMemoryType, vkGetPhysicalDeviceMemoryProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPhysicalDeviceMemoryProperties

VkPhysicalDeviceProperties(3)

Имя

VkPhysicalDeviceProperties - Структура, указывающая свойства физического устройства

C-спецификация

Структура VkPhysicalDeviceProperties определяется следующим образом:

typedef struct VkPhysicalDeviceProperties {
    uint32_t                            apiVersion;
    uint32_t                            driverVersion;
    uint32_t                            vendorID;
    uint32_t                            deviceID;
    VkPhysicalDeviceType                deviceType;
    char                                deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
    uint8_t                             pipelineCacheUUID[VK_UUID_SIZE];
    VkPhysicalDeviceLimits              limits;
    VkPhysicalDeviceSparseProperties    sparseProperties;
} VkPhysicalDeviceProperties;

Члены

  • apiVersion — версия Vulkan, поддерживаемая устройством, закодированная, как описано в разделе API Version Numbers and Semantics.
  • driverVersion — версия драйвера, указанная поставщиком.
  • vendorID — уникальный идентификатор поставщика (см. ниже) физического устройства.
  • deviceID — уникальный идентификатор физического устройства среди устройств, доступных от поставщика.
  • deviceType — VkPhysicalDeviceType, указывающий тип устройства.
  • deviceName — завершающаяся нулем строка UTF-8, содержащая имя устройства.
  • pipelineCacheUUID — массив размером VK_UUID_SIZE, содержащий 8-битные значения, представляющие собой универсальный уникальный идентификатор устройства.
  • limits — структура VkPhysicalDeviceLimits, которая указывает специфичные для устройства ограничения физического устройства. См. Limits для подробной информации.
  • sparseProperties — структура VkPhysicalDeviceSparseProperties, которая указывает различные свойства, связанные с разреженностью, физического устройства. См. Sparse Properties для подробной информации.

Описание

Поля vendorID и deviceID предоставляются для того, чтобы приложения могли адаптироваться к характеристикам устройства, которые неадекватно отображаются другими запросами Vulkan. Они могут включать профили производительности, ошибки оборудования или другие характеристики. В реализациях на основе PCI младшие шестнадцать битов vendorID и deviceID должны содержать (соответственно) идентификаторы поставщика и устройства PCI, связанные с аппаратным устройством, а остальные биты должны быть установлены в ноль. В не-PCI реализациях выбор возвращаемых значений может определяться политиками операционной системы или платформы. В противном случае это находится на усмотрение разработчика, с учетом следующих ограничений и рекомендаций:

  • Для целей идентификации физического устройства поставщиком физического устройства является субъект, ответственный за наиболее важные характеристики оборудования, представленного дескриптором физического устройства. В случае дискретного графического процессора это должен быть поставщик чипсета графического процессора. В случае графического процессора или другого ускорителя, интегрированного в систему на кристалле (SoC), это должен быть поставщик кремниевой IP, используемой для создания графического процессора или другого ускорителя.
  • Если у поставщика физического устройства есть действительный идентификатор поставщика PCI, выданный PCI-SIG, этот идентификатор должен использоваться для построения vendorID, как описано выше для реализаций на основе PCI. Реализации, которые не возвращают идентификатор поставщика PCI в vendorID, должны возвращать действительный идентификатор поставщика Khronos, полученный, как описано в документе Vulkan Documentation and Extensions в разделе “Registering a Vendor ID with Khronos”. Идентификаторы поставщиков Khronos выделяются начиная с 0x10000, чтобы отличать их от пространства имен идентификаторов поставщиков PCI.
  • Поставщик физического устройства отвечает за выбор deviceID. Выбранное значение должно однозначно идентифицировать как версию устройства, так и любые основные параметры конфигурации (например, количество ядер в случае многоядерных устройств). Один и тот же идентификатор устройства должен использоваться для всех физических реализаций этой версии и конфигурации устройства. Например, все использования конкретной версии и конфигурации кремниевой IP GPU должны использовать один и тот же идентификатор устройства, даже если эти использования происходят в разных SoC.

См. также

VkPhysicalDeviceLimits, VkPhysicalDeviceSparseProperties, VkPhysicalDeviceType, vkGetPhysicalDeviceProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPhysicalDeviceProperties

VkPhysicalDeviceSparseProperties(3)

Имя

VkPhysicalDeviceSparseProperties - Структура, указывающая свойства разреженной памяти физического устройства

C-спецификация

Структура VkPhysicalDeviceSparseProperties определяется следующим образом:

typedef struct VkPhysicalDeviceSparseProperties {
    VkBool32    residencyStandard2DBlockShape;
    VkBool32    residencyStandard2DMultisampleBlockShape;
    VkBool32    residencyStandard3DBlockShape;
    VkBool32    residencyAlignedMipSize;
    VkBool32    residencyNonResidentStrict;
} VkPhysicalDeviceSparseProperties;

Члены

  • residencyStandard2DBlockShape равно VK_TRUE, если физическое устройство будет получать доступ ко всем одновыборочным 2D разреженным ресурсам, используя стандартные формы блоков разреженного изображения (на основе формата изображения), как описано в таблице Standard Sparse Image Block Shapes (Single Sample). Если это свойство не поддерживается, значение, возвращаемое в члене imageGranularity структуры VkSparseImageFormatProperties для одновыборочных 2D изображений, не обязано совпадать со стандартными размерами блоков разреженного изображения, указанными в таблице.
  • residencyStandard2DMultisampleBlockShape равно VK_TRUE, если физическое устройство будет получать доступ ко всем многовыборочным 2D разреженным ресурсам, используя стандартные формы блоков разреженного изображения (на основе формата изображения), как описано в таблице Standard Sparse Image Block Shapes (MSAA). Если это свойство не поддерживается, значение, возвращаемое в члене imageGranularity структуры VkSparseImageFormatProperties для многовыборочных 2D изображений, не обязано совпадать со стандартными размерами блоков разреженного изображения, указанными в таблице.
  • residencyStandard3DBlockShape равно VK_TRUE, если физическое устройство будет получать доступ ко всем 3D разреженным ресурсам, используя стандартные формы блоков разреженного изображения (на основе формата изображения), как описано в таблице Standard Sparse Image Block Shapes (Single Sample). Если это свойство не поддерживается, значение, возвращаемое в члене imageGranularity структуры VkSparseImageFormatProperties для 3D изображений, не обязано совпадать со стандартными размерами блоков разреженного изображения, указанными в таблице.
  • residencyAlignedMipSize равно VK_TRUE, если изображения с размерами уровня mip, которые не являются целыми кратными соответствующим размерам блока разреженного изображения, могут быть размещены в хвосте mip. Если это свойство не указано, только уровни mip с размерами меньше, чем член imageGranularity структуры VkSparseImageFormatProperties, будут размещены в хвосте mip. Если это свойство указано, реализация может возвращать VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT в члене flags структуры VkSparseImageFormatProperties, указывая, что размеры уровня mip, которые не являются целыми кратными соответствующим размерам блока разреженного изображения, будут размещены в хвосте mip.
  • residencyNonResidentStrict указывает, может ли физическое устройство последовательно получать доступ к нерезидентным областям ресурса. Если это свойство равно VK_TRUE, доступ к нерезидентным областям ресурсов будет гарантированно возвращать значения, как если бы ресурс был заполнен 0; записи в нерезидентные области будут отброшены.

См. также

VkBool32, VkPhysicalDeviceProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPhysicalDeviceSparseProperties

VkPipelineCacheCreateInfo(3)

Имя

VkPipelineCacheCreateInfo - Структура, определяющая параметры вновь создаваемого кэша конвейеров

Спецификация C

Структура VkPipelineCacheCreateInfo определяется как:

typedef struct VkPipelineCacheCreateInfo {
    VkStructureType               sType;
    const void*                   pNext;
    VkPipelineCacheCreateFlags    flags;
    size_t                        initialDataSize;
    const void*                   pInitialData;
} VkPipelineCacheCreateInfo;

Члены

  • sType - тип этой структуры.
  • pNext - NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущего использования.
  • initialDataSize - количество байтов в pInitialData. Если initialDataSize равно нулю, кэш конвейеров изначально будет пустым.
  • pInitialData - указатель на ранее извлеченные данные кэша конвейеров. Если данные кэша конвейеров несовместимы (как определено ниже) с устройством, кэш конвейеров будет изначально пустым. Если initialDataSize равно нулю, pInitialData игнорируется.

Описание

Правильное использование
  • Если initialDataSize не 0, он должен быть равен размеру pInitialData, возвращаемому vkGetPipelineCacheData, когда pInitialData был изначально извлечен
  • Если initialDataSize не 0, pInitialData должен был быть извлечен из предыдущего вызова vkGetPipelineCacheData
Правильное использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
  • pNext должен быть NULL
  • flags должен быть 0
  • Если initialDataSize не 0, pInitialData должен быть указателем на массив из initialDataSize байтов

См. также

VkPipelineCacheCreateFlags, VkStructureType, vkCreatePipelineCache

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineCacheCreateInfo

VkPipelineColorBlendAttachmentState(3)

Имя

VkPipelineColorBlendAttachmentState - Структура, определяющая состояние вложения цвета конвейера

Спецификация C

Структура VkPipelineColorBlendAttachmentState определяется как:

typedef struct VkPipelineColorBlendAttachmentState {
    VkBool32                 blendEnable;
    VkBlendFactor            srcColorBlendFactor;
    VkBlendFactor            dstColorBlendFactor;
    VkBlendOp                colorBlendOp;
    VkBlendFactor            srcAlphaBlendFactor;
    VkBlendFactor            dstAlphaBlendFactor;
    VkBlendOp                alphaBlendOp;
    VkColorComponentFlags    colorWriteMask;
} VkPipelineColorBlendAttachmentState;

Члены

  • blendEnable управляет тем, включено ли смешение для соответствующего вложения цвета. Если смешение не включено, цвет фрагмента источника для этого вложения передается без изменений.
  • srcColorBlendFactor выбирает, какой фактор смешения используется для определения исходных факторов (Sr,Sg,Sb).
  • dstColorBlendFactor выбирает, какой фактор смешения используется для определения целевых факторов (Dr,Dg,Db).
  • colorBlendOp выбирает, какая операция смешения используется для вычисления значений RGB для записи в вложение цвета.
  • srcAlphaBlendFactor выбирает, какой фактор смешения используется для определения исходного фактора Sa.
  • dstAlphaBlendFactor выбирает, какой фактор смешения используется для определения целевого фактора Da.
  • alphaBlendOp выбирает, какая операция смешения используется для вычисления альфа-значений для записи в вложение цвета.
  • colorWriteMask - это битовая маска VkColorComponentFlagBits, указывающая, какие компоненты R, G, B и/или A включены для записи, как описано для Color Write Mask.

Описание

Правильное использование
  • Если функция dual source blending не включена, srcColorBlendFactor не должно быть VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA или VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
  • Если функция dual source blending не включена, dstColorBlendFactor не должно быть VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA или VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
  • Если функция dual source blending не включена, srcAlphaBlendFactor не должно быть VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA или VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
  • Если функция dual source blending не включена, dstAlphaBlendFactor не должно быть VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA или VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
Правильное использование (неявное)
  • srcColorBlendFactor должен быть допустимым значением VkBlendFactor
  • dstColorBlendFactor должен быть допустимым значением VkBlendFactor
  • colorBlendOp должен быть допустимым значением VkBlendOp
  • srcAlphaBlendFactor должен быть допустимым значением VkBlendFactor
  • dstAlphaBlendFactor должен быть допустимым значением VkBlendFactor
  • alphaBlendOp должен быть допустимым значением VkBlendOp
  • colorWriteMask должен быть допустимым сочетанием значений VkColorComponentFlagBits

См. также

VkBlendFactor, VkBlendOp, VkBool32, VkColorComponentFlags, VkPipelineColorBlendStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineColorBlendAttachmentState

VkPipelineColorBlendStateCreateInfo(3)

Имя

VkPipelineColorBlendStateCreateInfo - Структура, определяющая параметры вновь создаваемого состояния смешения цвета конвейера

Спецификация C

Структура VkPipelineColorBlendStateCreateInfo определяется как:

typedef struct VkPipelineColorBlendStateCreateInfo {
    VkStructureType                               sType;
    const void*                                   pNext;
    VkPipelineColorBlendStateCreateFlags          flags;
    VkBool32                                      logicOpEnable;
    VkLogicOp                                     logicOp;
    uint32_t                                      attachmentCount;
    const VkPipelineColorBlendAttachmentState*    pAttachments;
    float                                         blendConstants[4];
} VkPipelineColorBlendStateCreateInfo;

Члены

  • sType - тип этой структуры.
  • pNext - NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущего использования.
  • logicOpEnable управляет применением Логических операций.
  • logicOp выбирает, какую логическую операцию применить.
  • attachmentCount - количество элементов VkPipelineColorBlendAttachmentState в pAttachments. Это значение должно быть равно colorAttachmentCount для подпрохода, в котором используется этот конвейер.
  • pAttachments: указатель на массив состояний вложения на каждый целевой объект.
  • blendConstants - массив из четырех значений, используемых в качестве компонентов R, G, B и A константы смешения, которые используются при смешении в зависимости от blend factor.

Описание

Каждый элемент массива pAttachments представляет собой структуру VkPipelineColorBlendAttachmentState, определяющую состояние смешения для каждого отдельного вложения цвета. Если функция independent blending не включена на устройстве, все элементы VkPipelineColorBlendAttachmentState в массиве pAttachments должны быть идентичными.

Правильное использование
  • Если функция independent blending не включена, все элементы pAttachments должны быть идентичными
  • Если функция logic operations не включена, logicOpEnable должен быть VK_FALSE
  • Если logicOpEnable есть VK_TRUE, logicOp должен быть допустимым значением VkLogicOp
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • Если attachmentCount не 0, pAttachments должно быть указателем на массив из attachmentCount допустимых VkPipelineColorBlendAttachmentState структур

См. также

VkBool32, VkGraphicsPipelineCreateInfo, VkLogicOp, VkPipelineColorBlendAttachmentState, VkPipelineColorBlendStateCreateFlags, VkStructureType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineColorBlendStateCreateInfo

VkPipelineDepthStencilStateCreateInfo(3)

Имя

VkPipelineDepthStencilStateCreateInfo - Структура, определяющая параметры вновь созданного состояния трафарета глубины конвейера

C-спецификация

Структура VkPipelineDepthStencilStateCreateInfo определяется следующим образом:

typedef struct VkPipelineDepthStencilStateCreateInfo {
    VkStructureType                           sType;
    const void*                               pNext;
    VkPipelineDepthStencilStateCreateFlags    flags;
    VkBool32                                  depthTestEnable;
    VkBool32                                  depthWriteEnable;
    VkCompareOp                               depthCompareOp;
    VkBool32                                  depthBoundsTestEnable;
    VkBool32                                  stencilTestEnable;
    VkStencilOpState                          front;
    VkStencilOpState                          back;
    float                                     minDepthBounds;
    float                                     maxDepthBounds;
} VkPipelineDepthStencilStateCreateInfo;

Члены

  • sType - тип этой структуры.
  • pNext - NULL или указатель на структуру, зависящую от расширения.
  • flags зарезервировано для использования в будущем.
  • depthTestEnable управляет включением тестирования глубины.
  • depthWriteEnable управляет включением записи глубины, когда depthTestEnable равно VK_TRUE. Запись глубины всегда отключена, когда depthTestEnable равно VK_FALSE.
  • depthCompareOp - оператор сравнения, используемый в тесте глубины.
  • depthBoundsTestEnable управляет включением тестирования границ глубины.
  • stencilTestEnable управляет включением тестирования трафарета.
  • front и back управляют параметрами теста трафарета.
  • minDepthBounds и maxDepthBounds определяют диапазон значений, используемых в тесте границ глубины.

Описание

Допустимое использование
  • Если функция тестирования границ глубины не включена, depthBoundsTestEnable должно быть VK_FALSE
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • depthCompareOp должно быть допустимым значением VkCompareOp
  • front должно быть допустимой структурой VkStencilOpState
  • back должно быть допустимой структурой VkStencilOpState

См. также

VkBool32, VkCompareOp, VkGraphicsPipelineCreateInfo, VkPipelineDepthStencilStateCreateFlags, VkStencilOpState, VkStructureType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineDepthStencilStateCreateInfo

VkPipelineDynamicStateCreateInfo(3)

Имя

VkPipelineDynamicStateCreateInfo - Структура, определяющая параметры вновь созданного динамического состояния конвейера

C-спецификация

Структура VkPipelineDynamicStateCreateInfo определяется следующим образом:

typedef struct VkPipelineDynamicStateCreateInfo {
    VkStructureType                      sType;
    const void*                          pNext;
    VkPipelineDynamicStateCreateFlags    flags;
    uint32_t                             dynamicStateCount;
    const VkDynamicState*                pDynamicStates;
} VkPipelineDynamicStateCreateInfo;

Члены

  • sType - тип этой структуры.
  • pNext - NULL или указатель на структуру, зависящую от расширения.
  • flags зарезервировано для использования в будущем.
  • dynamicStateCount - количество элементов в массиве pDynamicStates.
  • pDynamicStates - массив значений VkDynamicState, указывающих, какие части состояния конвейера будут использовать значения из команд динамического состояния, а не из информации о создании состояния конвейера.

Описание

Допустимое использование
  • Каждый элемент pDynamicStates должен быть уникальным
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • pDynamicStates должно быть указателем на массив из dynamicStateCount допустимых значений VkDynamicState
  • dynamicStateCount должно быть больше 0

См. также

VkDynamicState, VkGraphicsPipelineCreateInfo, VkPipelineDynamicStateCreateFlags, VkStructureType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineDynamicStateCreateInfo

VkPipelineInputAssemblyStateCreateInfo(3)

Имя

VkPipelineInputAssemblyStateCreateInfo - Структура, определяющая параметры вновь созданного состояния сборки входных данных конвейера

C-спецификация

Каждый проход состоит из нуля или более вершин и нуля или более экземпляров, которые обрабатываются устройством и приводят к сборке примитивов. Примитивы собираются в соответствии с членом pInputAssemblyState структуры VkGraphicsPipelineCreateInfo, который имеет тип VkPipelineInputAssemblyStateCreateInfo:

typedef struct VkPipelineInputAssemblyStateCreateInfo {
    VkStructureType                            sType;
    const void*                                pNext;
    VkPipelineInputAssemblyStateCreateFlags    flags;
    VkPrimitiveTopology                        topology;
    VkBool32                                   primitiveRestartEnable;
} VkPipelineInputAssemblyStateCreateInfo;

Члены

  • sType - тип этой структуры.
  • pNext - NULL или указатель на структуру, зависящую от расширения.
  • flags зарезервировано для использования в будущем.
  • topology - VkPrimitiveTopology, определяющий топологию примитива, как описано ниже.
  • primitiveRestartEnable управляет тем, будет ли специальное значение индекса вершины рассматриваться как перезапуск сборки примитивов. Это включение применяется только к индексированным проходам (vkCmdDrawIndexed и vkCmdDrawIndexedIndirect), и специальное значение индекса равно 0xFFFFFFFF, когда параметр indexType vkCmdBindIndexBuffer равен VK_INDEX_TYPE_UINT32, или 0xFFFF, когда indexType равно VK_INDEX_TYPE_UINT16. Перезапуск примитива не допускается для топологий «списка».

Описание

Перезапуск сборки примитивов отбрасывает последние значения индексов, если эти элементы образовали неполный примитив, и перезапускает сборку примитива, используя последующие индексы, но собирая только непосредственно следующий элемент до конца первоначально указанных элементов. Сравнение значения индекса перезапуска примитива выполняется перед добавлением значения vertexOffset к значению индекса.

Допустимое использование
  • Если topology равно VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY или VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, primitiveRestartEnable должно быть VK_FALSE
  • Если функция геометрических шейдеров не включена, topology не должно быть ни одним из VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY или VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
  • Если функция тесселяционных шейдеров не включена, topology не должно быть VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • topology должно быть допустимым значением VkPrimitiveTopology

См. также

VkBool32, VkGraphicsPipelineCreateInfo, VkPipelineInputAssemblyStateCreateFlags, VkPrimitiveTopology, VkStructureType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineInputAssemblyStateCreateInfo

VkPipelineLayoutCreateInfo(3)

Имя

VkPipelineLayoutCreateInfo - Структура, определяющая параметры вновь создаваемого объекта макета конвейера

C-спецификация

Структура VkPipelineLayoutCreateInfo определяется следующим образом:

typedef struct VkPipelineLayoutCreateInfo {
    VkStructureType                 sType;
    const void*                     pNext;
    VkPipelineLayoutCreateFlags     flags;
    uint32_t                        setLayoutCount;
    const VkDescriptorSetLayout*    pSetLayouts;
    uint32_t                        pushConstantRangeCount;
    const VkPushConstantRange*      pPushConstantRanges;
} VkPipelineLayoutCreateInfo;

Члены

  • sType — тип этой структуры.
  • pNext — это NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущих использований.
  • setLayoutCount — количество наборов дескрипторов, включенных в макет конвейера.
  • pSetLayouts — указатель на массив объектов VkDescriptorSetLayout.
  • pushConstantRangeCount — количество диапазонов констант, передаваемых в конвейер, включенных в макет конвейера.
  • pPushConstantRanges — указатель на массив структур VkPushConstantRange, определяющих набор диапазонов констант, передаваемых в конвейер, для использования в одном макете конвейера. В дополнение к макетам наборов дескрипторов макет конвейера также описывает, к скольким константам, передаваемым в конвейер, можно получить доступ каждой стадии конвейера.

    Примечание

    Константы, передаваемые в конвейер, представляют собой высокоскоростной путь для изменения постоянных данных в конвейерах, который, как ожидается, будет работать быстрее, чем обновления ресурсов, поддерживаемые памятью.

Описание

Допустимое использование
  • setLayoutCount должно быть меньше или равно VkPhysicalDeviceLimits::maxBoundDescriptorSets
  • Общее количество дескрипторов типа VK_DESCRIPTOR_TYPE_SAMPLER и VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, доступных для любой заданной стадии шейдера во всех элементах pSetLayouts, должно быть меньше или равно VkPhysicalDeviceLimits::maxPerStageDescriptorSamplers
  • Общее количество дескрипторов типа VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER и VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, доступных для любой заданной стадии шейдера во всех элементах pSetLayouts, должно быть меньше или равно VkPhysicalDeviceLimits::maxPerStageDescriptorUniformBuffers
  • Общее количество дескрипторов типа VK_DESCRIPTOR_TYPE_STORAGE_BUFFER и VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, доступных для любой заданной стадии шейдера во всех элементах pSetLayouts, должно быть меньше или равно VkPhysicalDeviceLimits::maxPerStageDescriptorStorageBuffers
  • Общее количество дескрипторов типа VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE и VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, доступных для любой заданной стадии шейдера во всех элементах pSetLayouts, должно быть меньше или равно VkPhysicalDeviceLimits::maxPerStageDescriptorSampledImages
  • Общее количество дескрипторов типа VK_DESCRIPTOR_TYPE_STORAGE_IMAGE и VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, доступных для любой заданной стадии шейдера во всех элементах pSetLayouts, должно быть меньше или равно VkPhysicalDeviceLimits::maxPerStageDescriptorStorageImages
  • Любые два элемента pPushConstantRanges не должны включать одну и ту же стадию в stageFlags
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • Если setLayoutCount не 0, pSetLayouts должно быть указателем на массив setLayoutCount допустимых дескрипторов VkDescriptorSetLayout
  • Если pushConstantRangeCount не 0, pPushConstantRanges должно быть указателем на массив pushConstantRangeCount допустимых структур VkPushConstantRange

См. также

VkDescriptorSetLayout, VkPipelineLayoutCreateFlags, VkPushConstantRange, VkStructureType, vkCreatePipelineLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineLayoutCreateInfo

VkPipelineMultisampleStateCreateInfo(3)

Имя

VkPipelineMultisampleStateCreateInfo - Структура, определяющая параметры вновь созданного состояния многовыборки конвейера

C-спецификация

Структура VkPipelineMultisampleStateCreateInfo определяется следующим образом:

typedef struct VkPipelineMultisampleStateCreateInfo {
    VkStructureType                          sType;
    const void*                              pNext;
    VkPipelineMultisampleStateCreateFlags    flags;
    VkSampleCountFlagBits                    rasterizationSamples;
    VkBool32                                 sampleShadingEnable;
    float                                    minSampleShading;
    const VkSampleMask*                      pSampleMask;
    VkBool32                                 alphaToCoverageEnable;
    VkBool32                                 alphaToOneEnable;
} VkPipelineMultisampleStateCreateInfo;

Члены

  • sType — тип этой структуры.
  • pNext — это NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущих использований.
  • rasterizationSamples — это VkSampleCountFlagBits, указывающий количество выборок на пиксель, используемых при растеризации.
  • sampleShadingEnable указывает, что затенение фрагментов выполняется на выборку, если VK_TRUE, или на фрагмент, если VK_FALSE, как описано в Затенение выборок.
  • minSampleShading — минимальная доля затенения выборок, как описано в Затенение выборок.
  • pSampleMask — это битовая маска статической информации о покрытии, которая применяется побитовым И с информацией о покрытии, сгенерированной во время растеризации, как описано в Маска выборок.
  • alphaToCoverageEnable управляет тем, генерируется ли временное значение покрытия на основе альфа-компонента первого выходного цвета фрагмента, как указано в разделе Многовыборочное покрытие.
  • alphaToOneEnable управляет тем, заменяется ли альфа-компонент первого выходного цвета фрагмента на единицу, как описано в Многовыборочное покрытие.

Описание

Допустимое использование
  • Если функция затенения с частотой выборок не включена, sampleShadingEnable должно быть VK_FALSE
  • Если функция альфа в единицу не включена, alphaToOneEnable должно быть VK_FALSE
  • minSampleShading должно находиться в диапазоне [0,1]
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • rasterizationSamples должно быть допустимым значением VkSampleCountFlagBits
  • Если pSampleMask не NULL, pSampleMask должно быть указателем на массив \(\lceil{\mathit{rasterizationSamples} \over 32}\rceil\) значений VkSampleMask

См. также

VkBool32, VkGraphicsPipelineCreateInfo, VkPipelineMultisampleStateCreateFlags, VkSampleCountFlagBits, VkSampleMask, VkStructureType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineMultisampleStateCreateInfo

VkPipelineRasterizationStateCreateInfo(3)

Имя

VkPipelineRasterizationStateCreateInfo - Структура, определяющая параметры вновь созданного состояния растеризации конвейера

C-спецификация

Структура VkPipelineRasterizationStateCreateInfo определяется следующим образом:

typedef struct VkPipelineRasterizationStateCreateInfo {
    VkStructureType                            sType;
    const void*                                pNext;
    VkPipelineRasterizationStateCreateFlags    flags;
    VkBool32                                   depthClampEnable;
    VkBool32                                   rasterizerDiscardEnable;
    VkPolygonMode                              polygonMode;
    VkCullModeFlags                            cullMode;
    VkFrontFace                                frontFace;
    VkBool32                                   depthBiasEnable;
    float                                      depthBiasConstantFactor;
    float                                      depthBiasClamp;
    float                                      depthBiasSlopeFactor;
    float                                      lineWidth;
} VkPipelineRasterizationStateCreateInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • flags is reserved for future use.
  • depthClampEnable controls whether to clamp the fragment’s depth values instead of clipping primitives to the z planes of the frustum, as described in Primitive Clipping.
  • rasterizerDiscardEnable controls whether primitives are discarded immediately before the rasterization stage.
  • polygonMode is the triangle rendering mode. See VkPolygonMode.
  • cullMode is the triangle facing direction used for primitive culling. See VkCullModeFlagBits.
  • frontFace is a VkFrontFace value specifying the front-facing triangle orientation to be used for culling.
  • depthBiasEnable controls whether to bias fragment depth values.
  • depthBiasConstantFactor is a scalar factor controlling the constant depth value added to each fragment.
  • depthBiasClamp is the maximum (or minimum) depth bias of a fragment.
  • depthBiasSlopeFactor is a scalar factor applied to a fragment’s slope in depth bias calculations.
  • lineWidth is the width of rasterized line segments.

Описание

Правильное использование
  • If the depth clamping feature is not enabled, depthClampEnable должно быть VK_FALSE
  • If the non-solid fill modes feature is not enabled, polygonMode должно быть VK_POLYGON_MODE_FILL
Правильное использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • polygonMode должно быть допустимым значением VkPolygonMode
  • cullMode должно быть допустимой комбинацией значений VkCullModeFlagBits
  • frontFace должно быть допустимым значением VkFrontFace

См. также

VkBool32, VkCullModeFlags, VkFrontFace, VkGraphicsPipelineCreateInfo, VkPipelineRasterizationStateCreateFlags, VkPolygonMode, VkStructureType

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineRasterizationStateCreateInfo

VkPipelineShaderStageCreateInfo(3)

Имя

VkPipelineShaderStageCreateInfo - Структура, задающая параметры вновь созданного этапа шейдера конвейера

C Спецификация

Структура VkPipelineShaderStageCreateInfo определена как:

typedef struct VkPipelineShaderStageCreateInfo {
    VkStructureType                     sType;
    const void*                         pNext;
    VkPipelineShaderStageCreateFlags    flags;
    VkShaderStageFlagBits               stage;
    VkShaderModule                      module;
    const char*                         pName;
    const VkSpecializationInfo*         pSpecializationInfo;
} VkPipelineShaderStageCreateInfo;

Элементы

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • flags is reserved for future use.
  • stage is a VkShaderStageFlagBits value specifying a single pipeline stage.
  • module is a VkShaderModule object that contains the shader for this stage.
  • pName is a pointer to a null-terminated UTF-8 string specifying the entry point name of the shader for this stage.
  • pSpecializationInfo is a pointer to VkSpecializationInfo, as described in Specialization Constants, and can be NULL.

Описание

Правильное использование
  • If the geometry shaders feature is not enabled, stage не должно быть VK_SHADER_STAGE_GEOMETRY_BIT
  • If the tessellation shaders feature is not enabled, stage не должно быть VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
  • stage не должно быть VK_SHADER_STAGE_ALL_GRAPHICS, or VK_SHADER_STAGE_ALL
  • pName должно быть именем OpEntryPoint в module с моделью выполнения, которая соответствует stage
  • If the identified entry point includes any variable in its interface that is declared with the ClipDistance BuiltIn decoration, that variable must not have an array size greater than VkPhysicalDeviceLimits::maxClipDistances
  • If the identified entry point includes any variable in its interface that is declared with the CullDistance BuiltIn decoration, that variable must not have an array size greater than VkPhysicalDeviceLimits::maxCullDistances
  • If the identified entry point includes any variables in its interface that are declared with the ClipDistance or CullDistance BuiltIn decoration, those variables must not have array sizes which sum to more than VkPhysicalDeviceLimits::maxCombinedClipAndCullDistances
  • If the identified entry point includes any variable in its interface that is declared with the SampleMask BuiltIn decoration, that variable must not have an array size greater than VkPhysicalDeviceLimits::maxSampleMaskWords
  • If stage is VK_SHADER_STAGE_VERTEX_BIT, the identified entry point must not include any input variable in its interface that is decorated with CullDistance
  • If stage is VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and the identified entry point has an OpExecutionMode instruction that specifies a patch size with OutputVertices, the patch size must be greater than 0 and less than or equal to VkPhysicalDeviceLimits::maxTessellationPatchSize
  • If stage is VK_SHADER_STAGE_GEOMETRY_BIT, the identified entry point must have an OpExecutionMode instruction that specifies a maximum output vertex count that is greater than 0 and less than or equal to VkPhysicalDeviceLimits::maxGeometryOutputVertices
  • If stage is VK_SHADER_STAGE_GEOMETRY_BIT, the identified entry point must have an OpExecutionMode instruction that specifies an invocation count that is greater than 0 and less than or equal to VkPhysicalDeviceLimits::maxGeometryShaderInvocations
  • If stage is VK_SHADER_STAGE_GEOMETRY_BIT, and the identified entry point writes to Layer for any primitive, it must write the same value to Layer for all vertices of a given primitive
  • If stage is VK_SHADER_STAGE_GEOMETRY_BIT, and the identified entry point writes to ViewportIndex for any primitive, it must write the same value to ViewportIndex for all vertices of a given primitive
  • If stage is VK_SHADER_STAGE_FRAGMENT_BIT, the identified entry point must not include any output variables in its interface decorated with CullDistance
  • If stage is VK_SHADER_STAGE_FRAGMENT_BIT, and the identified entry point writes to FragDepth in any execution path, it must write to FragDepth in all execution paths
Правильное использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • stage должно быть допустимым значением VkShaderStageFlagBits
  • module должно быть допустимой дескриптором VkShaderModule
  • pName должно быть строкой UTF-8, завершающейся нулевым символом
  • If pSpecializationInfo is not NULL, pSpecializationInfo must be a pointer to a valid VkSpecializationInfo structure

См. также

VkComputePipelineCreateInfo, VkGraphicsPipelineCreateInfo, VkPipelineShaderStageCreateFlags, VkShaderModule, VkShaderStageFlagBits, VkSpecializationInfo, VkStructureType

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineShaderStageCreateInfo

VkPipelineTessellationStateCreateInfo(3)

Имя

VkPipelineTessellationStateCreateInfo - Структура, указывающая параметры вновь созданного состояния растеризации конвейера

Спецификация C

Структура VkPipelineTessellationStateCreateInfo определяется следующим образом:

typedef struct VkPipelineTessellationStateCreateInfo {
    VkStructureType                           sType;
    const void*                               pNext;
    VkPipelineTessellationStateCreateFlags    flags;
    uint32_t                                  patchControlPoints;
} VkPipelineTessellationStateCreateInfo;

Члены

  • sType — тип этой структуры.
  • pNext — это NULL или указатель на структуру, зависящую от расширения.
  • flags зарезервировано для будущих версий.
  • patchControlPoints — количество контрольных точек на патч.

Описание

Допустимое использование
  • patchControlPoints должно быть больше нуля и меньше или равно VkPhysicalDeviceLimits::maxTessellationPatchSize
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0

См. также

VkGraphicsPipelineCreateInfo, VkPipelineTessellationStateCreateFlags, VkStructureType

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineTessellationStateCreateInfo

VkPipelineVertexInputStateCreateInfo(3)

Имя

VkPipelineVertexInputStateCreateInfo - Структура, указывающая параметры вновь созданного состояния входных данных вершин конвейера

Спецификация C

Структура VkPipelineVertexInputStateCreateInfo определяется следующим образом:

typedef struct VkPipelineVertexInputStateCreateInfo {
    VkStructureType                             sType;
    const void*                                 pNext;
    VkPipelineVertexInputStateCreateFlags       flags;
    uint32_t                                    vertexBindingDescriptionCount;
    const VkVertexInputBindingDescription*      pVertexBindingDescriptions;
    uint32_t                                    vertexAttributeDescriptionCount;
    const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions;
} VkPipelineVertexInputStateCreateInfo;

Члены

  • sType — тип этой структуры.
  • pNext — это NULL или указатель на структуру, зависящую от расширения.
  • flags зарезервировано для будущих версий.
  • vertexBindingDescriptionCount — количество описаний привязки вершин, предоставленных в pVertexBindingDescriptions.
  • pVertexBindingDescriptions — указатель на массив структур VkVertexInputBindingDescription.
  • vertexAttributeDescriptionCount — количество описаний атрибутов вершин, предоставленных в pVertexAttributeDescriptions.
  • pVertexAttributeDescriptions — указатель на массив структур VkVertexInputAttributeDescription.

Описание

Допустимое использование
  • vertexBindingDescriptionCount должно быть меньше или равно VkPhysicalDeviceLimits::maxVertexInputBindings
  • vertexAttributeDescriptionCount должно быть меньше или равно VkPhysicalDeviceLimits::maxVertexInputAttributes
  • Для каждой binding, указанной любым элементом pVertexAttributeDescriptions, VkVertexInputBindingDescription должно существовать в pVertexBindingDescriptions с тем же значением binding
  • Все элементы pVertexBindingDescriptions должны описывать различные номера привязки
  • Все элементы pVertexAttributeDescriptions должны описывать различные расположения атрибутов
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • Если vertexBindingDescriptionCount не 0, pVertexBindingDescriptions должно быть указателем на массив из vertexBindingDescriptionCount допустимых структур VkVertexInputBindingDescription
  • Если vertexAttributeDescriptionCount не 0, pVertexAttributeDescriptions должно быть указателем на массив из vertexAttributeDescriptionCount допустимых структур VkVertexInputAttributeDescription

См. также

VkGraphicsPipelineCreateInfo, VkPipelineVertexInputStateCreateFlags, VkStructureType, VkVertexInputAttributeDescription, VkVertexInputBindingDescription

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineVertexInputStateCreateInfo

VkPipelineViewportStateCreateInfo(3)

Имя

VkPipelineViewportStateCreateInfo - Структура, указывающая параметры вновь созданного состояния видового окна конвейера

Спецификация C

Структура VkPipelineViewportStateCreateInfo определяется следующим образом:

typedef struct VkPipelineViewportStateCreateInfo {
    VkStructureType                       sType;
    const void*                           pNext;
    VkPipelineViewportStateCreateFlags    flags;
    uint32_t                              viewportCount;
    const VkViewport*                     pViewports;
    uint32_t                              scissorCount;
    const VkRect2D*                       pScissors;
} VkPipelineViewportStateCreateInfo;

Члены

  • sType — тип этой структуры.
  • pNext — это NULL или указатель на структуру, зависящую от расширения.
  • flags зарезервировано для будущих версий.
  • viewportCount — количество видовых окон, используемых конвейером.
  • pViewports — указатель на массив структур VkViewport, определяющих преобразования видового окна. Если состояние видового окна является динамическим, этот член игнорируется.
  • scissorCount — количество ножниц и должно соответствовать количеству видовых окон.
  • pScissors — указатель на массив структур VkRect2D, которые определяют прямоугольные границы ножниц для соответствующего видового окна. Если состояние ножниц является динамическим, этот член игнорируется.

Описание

Допустимое использование
  • Если функция множественных видовых окон не включена, viewportCount должно быть 1
  • Если функция множественных видовых окон не включена, scissorCount должно быть 1
  • viewportCount должно быть в диапазоне от 1 до VkPhysicalDeviceLimits::maxViewports, включительно
  • scissorCount должно быть в диапазоне от 1 до VkPhysicalDeviceLimits::maxViewports, включительно
  • scissorCount и viewportCount должны быть идентичны
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • viewportCount должно быть больше 0
  • scissorCount должно быть больше 0

См. также

VkGraphicsPipelineCreateInfo, VkPipelineViewportStateCreateFlags, VkRect2D, VkStructureType, VkViewport

Заметки к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineViewportStateCreateInfo

VkPushConstantRange(3)

Имя

VkPushConstantRange - Структура, указывающая диапазон констант push

Спецификация C

Структура VkPushConstantRange определяется следующим образом:

typedef struct VkPushConstantRange {
    VkShaderStageFlags    stageFlags;
    uint32_t              offset;
    uint32_t              size;
} VkPushConstantRange;

Члены

  • stageFlags представляет собой набор флагов этапов, описывающих этапы шейдера, которые будут получать доступ к диапазону констант push. Если определенный этап не включен в диапазон, то доступ к элементам этого диапазона констант push из соответствующего этапа шейдера приведет к чтению неопределенных данных.
  • offset и size — это начальный смещение и размер, соответственно, потребляемые диапазоном. offset и size измеряются в байтах и должны быть кратными 4. Размещение переменных констант push указывается в шейдере.

Описание

Допустимое использование
  • offset должен быть меньше, чем VkPhysicalDeviceLimits::maxPushConstantsSize
  • offset должен быть кратным 4
  • size должен быть больше 0
  • size должен быть кратным 4
  • size должен быть меньше или равен VkPhysicalDeviceLimits::maxPushConstantsSize минус offset
Допустимое использование (неявное)
  • stageFlags должен быть допустимой комбинацией значений VkShaderStageFlagBits
  • stageFlags не должен быть 0

См. также

VkPipelineLayoutCreateInfo, VkShaderStageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPushConstantRange

VkQueryPoolCreateInfo(3)

Имя

VkQueryPoolCreateInfo - Структура, определяющая параметры вновь создаваемого пула запросов

C-спецификация

Структура VkQueryPoolCreateInfo определяется следующим образом:

typedef struct VkQueryPoolCreateInfo {
    VkStructureType                  sType;
    const void*                      pNext;
    VkQueryPoolCreateFlags           flags;
    VkQueryType                      queryType;
    uint32_t                         queryCount;
    VkQueryPipelineStatisticFlags    pipelineStatistics;
} VkQueryPoolCreateInfo;

Члены

  • sType — это тип этой структуры.
  • pNext — это NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущего использования.
  • queryType — это значение VkQueryType, указывающее тип запросов, управляемых пулом.
  • queryCount — это количество запросов, управляемых пулом.
  • pipelineStatistics — это битовая маска VkQueryPipelineStatisticFlagBits, указывающая, какие счетчики будут возвращены в запросах к новому пулу, как описано ниже в html/vkspec.html#queries-pipestats.

Описание

pipelineStatistics игнорируется, если queryType не является VK_QUERY_TYPE_PIPELINE_STATISTICS.

Допустимое использование
  • Если функция запросов статистики конвейера не включена, queryType не должен быть VK_QUERY_TYPE_PIPELINE_STATISTICS
  • Если queryType является VK_QUERY_TYPE_PIPELINE_STATISTICS, pipelineStatistics должен быть допустимой комбинацией значений VkQueryPipelineStatisticFlagBits
Допустимое использование (неявное)
  • sType должен быть VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
  • pNext должен быть NULL
  • flags должен быть 0
  • queryType должен быть допустимым значением VkQueryType

См. также

VkQueryPipelineStatisticFlags, VkQueryPoolCreateFlags, VkQueryType, VkStructureType, vkCreateQueryPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryPoolCreateInfo

VkQueueFamilyProperties(3)

Имя

VkQueueFamilyProperties - Структура, предоставляющая информацию о семействе очередей

C-спецификация

Структура VkQueueFamilyProperties определяется следующим образом:

typedef struct VkQueueFamilyProperties {
    VkQueueFlags    queueFlags;
    uint32_t        queueCount;
    uint32_t        timestampValidBits;
    VkExtent3D      minImageTransferGranularity;
} VkQueueFamilyProperties;

Члены

  • queueFlags — это битовая маска VkQueueFlagBits, указывающая возможности очередей в этом семействе очередей.
  • queueCount — это количество очередей в этом семействе очередей (беззнаковое целое число).
  • timestampValidBits — это количество значимых битов (беззнаковое целое число) в метках времени, записанных через vkCmdWriteTimestamp. Допустимый диапазон для количества составляет 36…64 бита или значение 0, указывающее на отсутствие поддержки меток времени. Биты за пределами допустимого диапазона гарантированно будут нулями.
  • minImageTransferGranularity — это минимальная поддерживаемая гранулярность для операций передачи изображений в очередях этого семейства очередей.

Описание

Значение, возвращаемое в minImageTransferGranularity, имеет единицу измерения сжатых блоков текстурных элементов для изображений с блочно-сжатым форматом и единицу измерения текстурных элементов в противном случае.

Возможные значения minImageTransferGranularity:

  • (0,0,0), что указывает на то, что только целые уровни mip должны передаваться с помощью операций передачи изображений в соответствующих очередях. В этом случае к всем параметрам смещения и протяженности операций передачи изображений применяются следующие ограничения:

    • Члены x, y и z параметра VkOffset3D всегда должны быть равны нулю.
    • Члены width, height и depth параметра VkExtent3D всегда должны соответствовать ширине, высоте и глубине соответствующего параметру подуровня изображения.
  • (Ax, Ay, Az), где Ax, Ay и Az — это степени двойки. В этом случае к всем операциям передачи изображений применяются следующие ограничения:

    • x, y и z параметра VkOffset3D должны быть кратными Ax, Ay и Az соответственно.
    • width параметра VkExtent3D должен быть кратным Ax, или x + width должны быть равны ширине соответствующего параметру подуровня изображения.
    • height параметра VkExtent3D должен быть кратным Ay, или y + height должны быть равны высоте соответствующего параметру подуровня изображения.
    • depth параметра VkExtent3D должен быть кратным Az, или z + depth должны быть равны глубине соответствующего параметру подуровня изображения.
    • Если формат изображения, соответствующего параметрам, является одним из блочно-сжатых форматов, то для целей вышеуказанных вычислений гранулярность должна быть увеличена в соответствии с размерами сжатого блока текстурных элементов.

Очереди, поддерживающие графические и/или вычислительные операции, должны сообщать (1,1,1) в minImageTransferGranularity, что означает отсутствие дополнительных ограничений на гранулярность операций передачи изображений для этих очередей. Другие очереди, поддерживающие операции передачи изображений, обязаны только поддерживать передачу целых уровней mip, поэтому minImageTransferGranularity для очередей, принадлежащих таким семействам очередей, может быть (0,0,0).

В разделе Память устройства описываются свойства памяти, запрашиваемые у физического устройства.

Для запросов функций физического устройства см. главу Функции.

См. также

VkExtent3D, VkQueueFlags, vkGetPhysicalDeviceQueueFamilyProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueueFamilyProperties

VkRect2D(3)

Имя

VkRect2D - Структура, определяющая двумерный подрегион

C-спецификация

Прямоугольники используются для описания заданного прямоугольного региона пикселей в изображении или буфере кадра. Прямоугольники включают как смещение, так и протяженность той же размерности, как описано выше. Двумерные прямоугольники определяются структурой

typedef struct VkRect2D {
    VkOffset2D    offset;
    VkExtent2D    extent;
} VkRect2D;

Члены

  • offset — это VkOffset2D, определяющий смещение прямоугольника.
  • extent — это VkExtent2D, определяющий протяженность прямоугольника.

См. также

VkClearRect, VkExtent2D, VkOffset2D, VkPipelineViewportStateCreateInfo, VkRenderPassBeginInfo, vkCmdSetScissor

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkRect2D

VkRenderPassBeginInfo(3)

Имя

VkRenderPassBeginInfo - Структура, задающая информацию о начале прохода отрисовки

C Спецификация

Структура VkRenderPassBeginInfo определяется как:

typedef struct VkRenderPassBeginInfo {
    VkStructureType        sType;
    const void*            pNext;
    VkRenderPass           renderPass;
    VkFramebuffer          framebuffer;
    VkRect2D               renderArea;
    uint32_t               clearValueCount;
    const VkClearValue*    pClearValues;
} VkRenderPassBeginInfo;

Члены

  • sType - тип этой структуры.
  • pNext - это NULL или указатель на структуру, специфичную для расширения.
  • renderPass - проход отрисовки, для которого нужно начать экземпляр.
  • framebuffer - фреймбуфер, содержащий вложения, используемые с проходом отрисовки.
  • renderArea - область отрисовки, которая затрагивается экземпляром прохода отрисовки, и более подробно описана ниже.
  • clearValueCount - количество элементов в pClearValues.
  • pClearValues - массив структур VkClearValue, который содержит значения очистки для каждого вложения, если вложение использует значение loadOp равное VK_ATTACHMENT_LOAD_OP_CLEAR или если вложение имеет формат глубины/трафарета и использует значение stencilLoadOp равное VK_ATTACHMENT_LOAD_OP_CLEAR. Массив индексируется по номеру вложения. Используются только элементы, соответствующие очищенным вложениям. Другие элементы pClearValues игнорируются.

Описание

renderArea - это область отрисовки, которая затрагивается экземпляром прохода отрисовки. Эффекты операций загрузки, сохранения и разрешения мультивыборки вложений ограничены пикселями, координаты x и y которых попадают в область отрисовки на всех вложениях. Область отрисовки распространяется на все слои framebuffer. Приложение должно гарантировать (используя ножницы, если необходимо), что вся отрисовка содержится в области отрисовки, иначе пиксели за пределами области отрисовки становятся неопределенными, и побочные эффекты шейдера могут возникнуть для фрагментов за пределами области отрисовки. Область отрисовки должна находиться в пределах размеров фреймбуфера.

Примечание

Может быть потеря производительности при использовании области отрисовки меньшего размера, чем фреймбуфер, если только она не соответствует гранулярности области отрисовки для прохода отрисовки.

Допустимое использование
  • clearValueCount должно быть больше, чем наибольший индекс вложения в renderPass, который задаёт loadOp (или stencilLoadOp, если вложение имеет формат глубины/трафарета) равное VK_ATTACHMENT_LOAD_OP_CLEAR
  • Если clearValueCount не 0, pClearValues должен быть указателем на массив из clearValueCount допустимых объединений VkClearValue
  • renderPass должен быть совместим с членом renderPass структуры VkFramebufferCreateInfo, указанной при создании framebuffer.
Допустимое использование (Неявное)
  • sType должно быть VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
  • pNext должно быть NULL
  • renderPass должно быть допустимой дескриптором VkRenderPass
  • framebuffer должно быть допустимой дескриптором VkFramebuffer
  • И framebuffer, и renderPass должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkClearValue, VkFramebuffer, VkRect2D, VkRenderPass, VkStructureType, vkCmdBeginRenderPass

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkRenderPassBeginInfo

VkRenderPassCreateInfo(3)

Имя

VkRenderPassCreateInfo - Структура, задающая параметры вновь создаваемого прохода отрисовки

C Спецификация

Структура VkRenderPassCreateInfo определяется как:

typedef struct VkRenderPassCreateInfo {
    VkStructureType                   sType;
    const void*                       pNext;
    VkRenderPassCreateFlags           flags;
    uint32_t                          attachmentCount;
    const VkAttachmentDescription*    pAttachments;
    uint32_t                          subpassCount;
    const VkSubpassDescription*       pSubpasses;
    uint32_t                          dependencyCount;
    const VkSubpassDependency*        pDependencies;
} VkRenderPassCreateInfo;

Члены

  • sType - тип этой структуры.
  • pNext - это NULL или указатель на структуру, специфичную для расширения.
  • flags - зарезервировано для будущего использования.
  • attachmentCount - количество вложений, используемых этим проходом отрисовки, или ноль, указывающий на отсутствие вложений. Вложения ссылаются на индексы, основанные на нуле, в диапазоне [0,attachmentCount).
  • pAttachments указывает на массив из attachmentCount структур VkAttachmentDescription, описывающих свойства вложений, или NULL, если attachmentCount равно нулю.
  • subpassCount - количество подпроходов, которые нужно создать для этого прохода отрисовки. Подпроходы ссылаются на индексы, основанные на нуле, в диапазоне [0,subpassCount). Проход отрисовки должен иметь хотя бы один подпроход.
  • pSubpasses указывает на массив из subpassCount структур VkSubpassDescription, описывающих свойства подпроходов.
  • dependencyCount - количество зависимостей между парами подпроходов или ноль, указывающий на отсутствие зависимостей.
  • pDependencies указывает на массив из dependencyCount структур VkSubpassDependency, описывающих зависимости между парами подпроходов, или NULL, если dependencyCount равно нулю.

Описание

Допустимое использование
  • Если два подпрохода работают с вложениями, имеющими перекрывающиеся диапазоны одного и того же объекта VkDeviceMemory, и по крайней мере один подпроход записывает в эту область VkDeviceMemory, должна быть включена зависимость подпрохода (либо напрямую, либо через некоторые промежуточные подпроходы) между ними
  • Если член attachment любого элемента pInputAttachments, pColorAttachments, pResolveAttachments или pDepthStencilAttachment, или вложение, проиндексированное любым элементом pPreserveAttachments в любом данном элементе pSubpasses, привязано к диапазону объекта VkDeviceMemory, который перекрывается с любым другим вложением в любом подпроходе (включая тот же подпроход), структуры VkAttachmentDescription, описывающие их, должны включать VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT в flags
  • Если член attachment любого элемента pInputAttachments, pColorAttachments, pResolveAttachments или pDepthStencilAttachment, или любой элемент pPreserveAttachments в любом данном элементе pSubpasses не VK_ATTACHMENT_UNUSED, он должен быть меньше attachmentCount
  • Значение любого элемента члена pPreserveAttachments в любом данном элементе pSubpasses не должно быть VK_ATTACHMENT_UNUSED
  • Для любого члена pAttachments с loadOp равным VK_ATTACHMENT_LOAD_OP_CLEAR, первое использование этого вложения не должно задавать layout равное VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL или VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL.
  • Для любого элемента pDependencies, если srcSubpass не VK_SUBPASS_EXTERNAL, все флаги этапов, включенные в член srcStageMask этой зависимости, должны быть этапом конвейера, поддерживаемым конвейером, определенным членом pipelineBindPoint исходного подпрохода.
  • Для любого элемента pDependencies, если dstSubpass не VK_SUBPASS_EXTERNAL, все флаги этапов, включенные в член dstStageMask этой зависимости, должны быть этапом конвейера, поддерживаемым конвейером, определенным членом pipelineBindPoint исходного подпрохода.
Допустимое использование (Неявное)
  • sType должно быть VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • Если attachmentCount не 0, pAttachments должен быть указателем на массив из attachmentCount допустимых структур VkAttachmentDescription
  • pSubpasses должен быть указателем на массив из subpassCount допустимых структур VkSubpassDescription
  • Если dependencyCount не 0, pDependencies должен быть указателем на массив из dependencyCount допустимых структур VkSubpassDependency
  • subpassCount должно быть больше 0

См. также

VkAttachmentDescription, VkRenderPassCreateFlags, VkStructureType, VkSubpassDependency, VkSubpassDescription, vkCreateRenderPass

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkRenderPassCreateInfo

VkSamplerCreateInfo(3)

Имя

VkSamplerCreateInfo - Структура, определяющая параметры вновь создаваемого семплера

C Спецификация

Структура VkSamplerCreateInfo определяется следующим образом:

typedef struct VkSamplerCreateInfo {
    VkStructureType         sType;
    const void*             pNext;
    VkSamplerCreateFlags    flags;
    VkFilter                magFilter;
    VkFilter                minFilter;
    VkSamplerMipmapMode     mipmapMode;
    VkSamplerAddressMode    addressModeU;
    VkSamplerAddressMode    addressModeV;
    VkSamplerAddressMode    addressModeW;
    float                   mipLodBias;
    VkBool32                anisotropyEnable;
    float                   maxAnisotropy;
    VkBool32                compareEnable;
    VkCompareOp             compareOp;
    float                   minLod;
    float                   maxLod;
    VkBorderColor           borderColor;
    VkBool32                unnormalizedCoordinates;
} VkSamplerCreateInfo;

Члены

  • sType - тип этой структуры.
  • pNext - NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущих использований.
  • magFilter - значение VkFilter, определяющее фильтр увеличения, применяемый к поиску.
  • minFilter - значение VkFilter, определяющее фильтр уменьшения, применяемый к поиску.
  • mipmapMode - значение VkSamplerMipmapMode, определяющее фильтр mipmap, применяемый к поиску.
  • addressModeU - значение VkSamplerAddressMode, определяющее режим адресации для области вне [0..1] для координаты U.
  • addressModeV - значение VkSamplerAddressMode, определяющее режим адресации для области вне [0..1] для координаты V.
  • addressModeW - значение VkSamplerAddressMode, определяющее режим адресации для области вне [0..1] для координаты W.
  • mipLodBias - смещение, которое должно быть добавлено к вычислению уровня mipmap LOD и смещению, предоставляемому функциями выборки изображений в SPIR-V, как описано в разделе Операция уровня детализации.
  • anisotropyEnable - VK_TRUE для включения анизотропной фильтрации, как описано в разделе Анизотропная фильтрация текселей, или VK_FALSE в противном случае.
  • maxAnisotropy - ограничение значения анизотропии.
  • compareEnable - VK_TRUE для включения сравнения со справочным значением во время поиска или VK_FALSE в противном случае.

    • Примечание: Некоторые реализации будут использовать состояние шейдера по умолчанию, если этот член не совпадает.
  • compareOp - значение VkCompareOp, определяющее функцию сравнения, применяемую к извлеченным данным перед фильтрацией, как описано в разделе Операция сравнения глубины.
  • minLod и maxLod - значения, используемые для ограничения вычисленного значения уровня детализации, как описано в разделе Операция уровня детализации. maxLod должно быть больше или равно minLod.
  • borderColor - значение VkBorderColor, определяющее предварительно определенный цвет границы для использования.
  • unnormalizedCoordinates управляет использованием ненормированных или нормированных координат текселей для адресации текселей изображения. При установке в VK_TRUE, диапазон координат изображения, используемых для поиска текселя, находится в диапазоне от нуля до размеров изображения для x, y и z. При установке в VK_FALSE диапазон координат изображения равен от нуля до единицы. Когда unnormalizedCoordinates равно VK_TRUE, семплеры имеют следующие требования:

    • minFilter и magFilter должны быть равны.
    • mipmapMode должно быть VK_SAMPLER_MIPMAP_MODE_NEAREST.
    • minLod и maxLod должны быть нулями.
    • addressModeU и addressModeV должны быть либо VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, либо VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER.
    • anisotropyEnable должно быть VK_FALSE.
    • compareEnable должно быть VK_FALSE.
  • Когда unnormalizedCoordinates равно VK_TRUE, изображения, используемые семплером в шейдере, имеют следующие требования:

    • viewType должно быть либо VK_IMAGE_VIEW_TYPE_1D, либо VK_IMAGE_VIEW_TYPE_2D.
    • Представление изображения должно иметь один слой и один уровень mip.
  • Когда unnormalizedCoordinates равно VK_TRUE, встроенные функции изображения в шейдере, использующие семплер, имеют следующие требования:

    • Функции не должны использовать проекцию.
    • Функции не должны использовать смещения.

Описание

Сопоставление режимов фильтрации OpenGL с Vulkan

Значения VK_FILTER_NEAREST и VK_FILTER_LINEAR magFilter напрямую соответствуют фильтрам увеличения GL_NEAREST и GL_LINEAR. minFilter и mipmapMode в комбинации соответствуют аналогично названному фильтру уменьшения OpenGL GL_minFilter_MIPMAP_mipmapMode (например, minFilter из VK_FILTER_LINEAR и mipmapMode из VK_SAMPLER_MIPMAP_MODE_NEAREST соответствуют GL_LINEAR_MIPMAP_NEAREST).

Нет режимов фильтрации Vulkan, которые напрямую соответствуют фильтрам уменьшения OpenGL GL_LINEAR или GL_NEAREST, но их можно эмулировать с помощью VK_SAMPLER_MIPMAP_MODE_NEAREST, minLod = 0 и maxLod = 0.25, и используя minFilter = VK_FILTER_LINEAR или minFilter = VK_FILTER_NEAREST, соответственно.

Обратите внимание, что использование maxLod равного нулю приведет к тому, что увеличение будет всегда выполняться, и всегда будет использоваться magFilter. Это допустимо, но не является точным соответствием поведению OpenGL. Ограничение максимального LOD до 0.25 позволяет значению λ быть ненулевым и выполняется уменьшение, при этом все еще всегда происходит округление вниз до базового уровня. Если minFilter и magFilter равны, то использование maxLod равного нулю также работает.

Максимальное количество объектов семплера, которые могут быть одновременно созданы на устройстве, зависит от реализации и задается членом maxSamplerAllocationCount структуры VkPhysicalDeviceLimits. Если maxSamplerAllocationCount превышено, vkCreateSampler вернет VK_ERROR_TOO_MANY_OBJECTS.

Так как VkSampler является неотправляемым типом дескриптора, реализации могут возвращать один и тот же дескриптор для векторов состояния семплера, которые идентичны. В таких случаях все такие объекты будут учитываться только один раз в отношении ограничения maxSamplerAllocationCount.

Допустимое использование
  • Абсолютное значение mipLodBias должно быть меньше или равно VkPhysicalDeviceLimits::maxSamplerLodBias
  • Если функция анизотропной выборки не включена, anisotropyEnable должно быть VK_FALSE
  • Если anisotropyEnable равно VK_TRUE, maxAnisotropy должно быть в диапазоне от 1.0 до VkPhysicalDeviceLimits::maxSamplerAnisotropy, включительно
  • Если unnormalizedCoordinates равно VK_TRUE, minFilter и magFilter должны быть равны
  • Если unnormalizedCoordinates равно VK_TRUE, mipmapMode должно быть VK_SAMPLER_MIPMAP_MODE_NEAREST
  • Если unnormalizedCoordinates равно VK_TRUE, minLod и maxLod должны быть нулями
  • Если unnormalizedCoordinates равно VK_TRUE, addressModeU и addressModeV должны быть либо VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, либо VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
  • Если unnormalizedCoordinates равно VK_TRUE, anisotropyEnable должно быть VK_FALSE
  • Если unnormalizedCoordinates равно VK_TRUE, compareEnable должно быть VK_FALSE
  • Если любой из addressModeU, addressModeV или addressModeW равны VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, borderColor должно быть допустимым значением VkBorderColor
  • Если расширение VK_KHR_sampler_mirror_clamp_to_edge не включено, addressModeU, addressModeV и addressModeW не должны быть VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
  • Если compareEnable равно VK_TRUE, compareOp должно быть допустимым значением VkCompareOp
Допустимое использование (Неявное)
  • sType должно быть VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • magFilter должно быть допустимым значением VkFilter
  • minFilter должно быть допустимым значением VkFilter
  • mipmapMode должно быть допустимым значением VkSamplerMipmapMode
  • addressModeU должно быть допустимым значением VkSamplerAddressMode
  • addressModeV должно быть допустимым значением VkSamplerAddressMode
  • addressModeW должно быть допустимым значением VkSamplerAddressMode

См. также

VkBool32, VkBorderColor, VkCompareOp, VkFilter, VkSamplerAddressMode, VkSamplerCreateFlags, VkSamplerMipmapMode, VkStructureType, vkCreateSampler

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSamplerCreateInfo

VkSemaphoreCreateInfo(3)

Имя

VkSemaphoreCreateInfo - Структура, указывающая параметры вновь создаваемого семафора

C-спецификация

Структура VkSemaphoreCreateInfo определяется следующим образом:

typedef struct VkSemaphoreCreateInfo {
    VkStructureType           sType;
    const void*               pNext;
    VkSemaphoreCreateFlags    flags;
} VkSemaphoreCreateInfo;

Члены

  • sType — тип этой структуры.
  • pNext — NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущего использования.

Описание

Правильное использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0

См. также

VkSemaphoreCreateFlags, VkStructureType, vkCreateSemaphore

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSemaphoreCreateInfo

VkShaderModuleCreateInfo(3)

Имя

VkShaderModuleCreateInfo - Структура, указывающая параметры вновь создаваемого модуля шейдера

C-спецификация

Структура VkShaderModuleCreateInfo определяется следующим образом:

typedef struct VkShaderModuleCreateInfo {
    VkStructureType              sType;
    const void*                  pNext;
    VkShaderModuleCreateFlags    flags;
    size_t                       codeSize;
    const uint32_t*              pCode;
} VkShaderModuleCreateInfo;

Члены

  • sType — тип этой структуры.
  • pNext — NULL или указатель на структуру, специфичную для расширения.
  • flags зарезервировано для будущего использования.
  • codeSize — размер в байтах кода, на который указывает pCode.
  • pCode указывает на код, который используется для создания модуля шейдера. Тип и формат кода определяются из содержимого памяти по адресу pCode.

Описание

Правильное использование
  • codeSize должно быть больше 0
  • codeSize должно быть кратно 4
  • pCode должно указывать на допустимый код SPIR-V, отформатированный и упакованный, как описано в Спецификации Khronos SPIR-V
  • pCode должно соответствовать правилам проверки, описанным в разделе Правила проверки в модуле приложения SPIR-V Environment
  • pCode должно объявлять возможность Shader для кода SPIR-V
  • pCode не должно объявлять возможности, которые не поддерживаются API, как описано в разделе Возможности приложения SPIR-V Environment
  • Если pCode объявляет какие-либо возможности, которые не требуются реализацией, соответствующая функция должна быть включена, как указано в приложении SPIR-V Environment
Правильное использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
  • pNext должно быть NULL
  • flags должно быть 0
  • pCode должно быть указателем на массив из \(codeSize \over 4\) значений uint32_t

См. также

VkShaderModuleCreateFlags, VkStructureType, vkCreateShaderModule

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkShaderModuleCreateInfo

VkSparseBufferMemoryBindInfo(3)

Имя

VkSparseBufferMemoryBindInfo - Структура, указывающая операцию привязки памяти разреженного буфера

C-спецификация

Память привязывается к объектам VkBuffer, созданным с флагом VK_BUFFER_CREATE_SPARSE_BINDING_BIT, используя следующую структуру:

typedef struct VkSparseBufferMemoryBindInfo {
    VkBuffer                     buffer;
    uint32_t                     bindCount;
    const VkSparseMemoryBind*    pBinds;
} VkSparseBufferMemoryBindInfo;

Члены

  • buffer — объект VkBuffer, который будет привязан.
  • bindCount — количество структур VkSparseMemoryBind в массиве pBinds.
  • pBinds — указатель на массив структур VkSparseMemoryBind.

Описание

Правильное использование (неявное)
  • buffer должно быть допустимой дескриптором VkBuffer
  • pBinds должно быть указателем на массив из bindCount допустимых структур VkSparseMemoryBind
  • bindCount должно быть больше 0

См. также

VkBindSparseInfo, VkBuffer, VkSparseMemoryBind

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseBufferMemoryBindInfo

VkSparseImageFormatProperties(3)

Имя

VkSparseImageFormatProperties - Структура, указывающая свойства формата разреженного изображения

C-спецификация

Структура VkSparseImageFormatProperties определяется следующим образом:

typedef struct VkSparseImageFormatProperties {
    VkImageAspectFlags          aspectMask;
    VkExtent3D                  imageGranularity;
    VkSparseImageFormatFlags    flags;
} VkSparseImageFormatProperties;

Члены

  • aspectMask — это битовая маска VkImageAspectFlagBits, указывающая, к каким аспектам изображения применяются свойства.
  • imageGranularity — ширина, высота и глубина блока разреженного изображения в текстурах или сжатых блоках текстур.
  • flags — битовая маска VkSparseImageFormatFlagBits, указывающая дополнительную информацию о разреженном ресурсе.

См. также

VkExtent3D, VkImageAspectFlags, VkSparseImageFormatFlags, VkSparseImageMemoryRequirements, vkGetPhysicalDeviceSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseImageFormatProperties

VkSparseImageMemoryBind(3)

Имя

VkSparseImageMemoryBind - Структура, указывающая привязку памяти разреженного изображения

C-спецификация

Структура VkSparseImageMemoryBind определяется следующим образом:

typedef struct VkSparseImageMemoryBind {
    VkImageSubresource         subresource;
    VkOffset3D                 offset;
    VkExtent3D                 extent;
    VkDeviceMemory             memory;
    VkDeviceSize               memoryOffset;
    VkSparseMemoryBindFlags    flags;
} VkSparseImageMemoryBind;

Члены

  • subresource — aspectMask и область интереса в изображении.
  • offset — координаты первого текстура в подресурсе изображения для привязки.
  • extent — размер в текстурах области в подресурсе изображения для привязки. Размер должен быть кратным размерам блока разреженного изображения, за исключением случаев привязки блоков разреженного изображения по краю подресурса изображения, в этом случае он может быть таким, чтобы любая координата offset + extent равнялась соответствующим размерам подресурса изображения.
  • memory — объект VkDeviceMemory, к которому привязаны блоки разреженного изображения изображения. Если memory равно VK_NULL_HANDLE, блоки разреженного изображения отвязываются.
  • memoryOffset — смещение в объекте VkDeviceMemory. Если memory равно VK_NULL_HANDLE, это значение игнорируется.
  • flags — флаги привязки разреженной памяти.

Описание

Правильное использование
  • Если функция sparse aliased residency не включена, и если какие-либо другие ресурсы связаны с диапазонами memory, диапазон memory , который связывается, не должен перекрываться с этими связанными диапазонами
  • memory и memoryOffset должны соответствовать требованиям к памяти вызывающей команды image, как описано в разделе html/vkspec.html#resources-association
  • subresource должен быть допустимым подресурсом изображения для image (см. html/vkspec.html#resources-image-views)
  • offset.x должен быть кратен ширине блока разреженного изображения (VkSparseImageFormatProperties::imageGranularity.width) изображения
  • extent.width должен быть либо кратен ширине блока разреженного изображения, либо (extent.width + offset.x) должно быть равно ширине подресурса изображения
  • offset.y должен быть кратен высоте блока разреженного изображения (VkSparseImageFormatProperties::imageGranularity.height) изображения
  • extent.height должен быть либо кратен высоте блока разреженного изображения, либо (extent.height + offset.y) должно быть равно высоте подресурса изображения
  • offset.z должен быть кратен глубине блока разреженного изображения (VkSparseImageFormatProperties::imageGranularity.depth) изображения
  • extent.depth должен быть либо кратен глубине блока разреженного изображения, либо (extent.depth + offset.z) должно быть равно глубине подресурса изображения
Правильное использование (неявное)
  • subresource должен быть допустимой структурой VkImageSubresource
  • Если memory не равно VK_NULL_HANDLE, memory должен быть допустимой дескриптором VkDeviceMemory
  • flags должен быть допустимым сочетанием значений VkSparseMemoryBindFlagBits

См. также

VkDeviceMemory, VkDeviceSize, VkExtent3D, VkImageSubresource, VkOffset3D, VkSparseImageMemoryBindInfo, VkSparseMemoryBindFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseImageMemoryBind

VkSparseImageMemoryBindInfo(3)

Название

VkSparseImageMemoryBindInfo - Структура, указывающая информацию о привязке памяти разреженного изображения

C Спецификация

Память может быть связана с блоками разреженного изображения объектов VkImage , созданных с флагом VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT , используя следующую структуру:

typedef struct VkSparseImageMemoryBindInfo {
    VkImage                           image;
    uint32_t                          bindCount;
    const VkSparseImageMemoryBind*    pBinds;
} VkSparseImageMemoryBindInfo;

Члены

  • image это объект VkImage , который будет связан
  • bindCount это количество структур VkSparseImageMemoryBind в массиве pBinds
  • pBinds это указатель на массив структур VkSparseImageMemoryBind

Описание

Правильное использование (неявное)
  • image должен быть допустимым дескриптором VkImage
  • pBinds должен быть указателем на массив bindCount допустимых структур VkSparseImageMemoryBind
  • bindCount должен быть больше 0

См. также

VkBindSparseInfo, VkImage, VkSparseImageMemoryBind

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseImageMemoryBindInfo

VkSparseImageMemoryRequirements(3)

Название

VkSparseImageMemoryRequirements - Структура, указывающая требования к памяти разреженного изображения

C Спецификация

Структура VkSparseImageMemoryRequirements определена как:

typedef struct VkSparseImageMemoryRequirements {
    VkSparseImageFormatProperties    formatProperties;
    uint32_t                         imageMipTailFirstLod;
    VkDeviceSize                     imageMipTailSize;
    VkDeviceSize                     imageMipTailOffset;
    VkDeviceSize                     imageMipTailStride;
} VkSparseImageMemoryRequirements;

Члены

  • formatProperties.aspectMask это набор аспектов изображения, к которым применяется это требование к разреженной памяти. Обычно указывается один аспект. Однако изображения глубины/трафарета могут иметь данные глубины и трафарета, перемежающиеся в одном и том же разреженном блоке, в этом случае будут присутствовать как VK_IMAGE_ASPECT_DEPTH_BIT, так и VK_IMAGE_ASPECT_STENCIL_BIT .
  • formatProperties.imageGranularity описывает размеры одного связываемого блока разреженного изображения в пикселях. Для аспекта VK_IMAGE_ASPECT_METADATA_BIT все размеры будут равны нулю пикселей. Все метаданные расположены в области хвоста mip-уровней.
  • formatProperties.flags это битовая маска VkSparseImageFormatFlagBits:

    • Если установлен VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT , изображение использует один регион хвоста mip-уровней для всех слоев массива.
    • Если установлен VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT , размеры уровней mip должны быть кратны соответствующим размерам блока разреженного изображения для уровней, не расположенных в хвосте mip-уровней.
    • Если установлен VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT , изображение использует нестандартные размеры блоков разреженного изображения. Значения formatProperties.imageGranularity не соответствуют стандартным размерам блока разреженного изображения, соответствующим пиксельному формату изображения.
  • imageMipTailFirstLod это первый уровень mip, на котором подресурсы изображения включены в область хвоста mip-уровней.
  • imageMipTailSize это размер памяти (в байтах) области хвоста mip-уровней. Если formatProperties.flags содержит VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, это размер всего хвоста mip-уровней, в противном случае это размер хвоста mip-уровней одного слоя массива. Гарантируется, что это значение кратно размеру блока в байтах.
  • imageMipTailOffset это непрозрачный смещение памяти, используемое с VkSparseImageOpaqueMemoryBindInfo для связывания области(ей) хвоста mip-уровней.
  • imageMipTailStride это шаг смещения между хвостами mip-уровней каждого слоя массива, если formatProperties.flags не содержит VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT (в противном случае значение не определено).

См. также

VkDeviceSize, VkSparseImageFormatProperties, vkGetImageSparseMemoryRequirements

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseImageMemoryRequirements

VkSparseImageOpaqueMemoryBindInfo(3)

Название

VkSparseImageOpaqueMemoryBindInfo - Структура, указывающая информацию о привязке непрозрачной памяти разреженного изображения

C Спецификация

Память связывается с непрозрачными областями объектов VkImage , созданных с флагом VK_IMAGE_CREATE_SPARSE_BINDING_BIT , используя следующую структуру:

typedef struct VkSparseImageOpaqueMemoryBindInfo {
    VkImage                      image;
    uint32_t                     bindCount;
    const VkSparseMemoryBind*    pBinds;
} VkSparseImageOpaqueMemoryBindInfo;

Члены

  • image это объект VkImage , который будет связан.
  • bindCount это количество структур VkSparseMemoryBind в массиве pBinds .
  • pBinds это указатель на массив структур VkSparseMemoryBind .

Описание

Правильное использование
  • Для любого заданного элемента pBinds, если член flags этого элемента содержит VK_SPARSE_MEMORY_BIND_METADATA_BIT, определенный диапазон привязки должен находиться в области хвоста mip-уровней аспекта метаданных image
Правильное использование (неявное)
  • image должен быть допустимым дескриптором VkImage
  • pBinds должен быть указателем на массив bindCount допустимых структур VkSparseMemoryBind
  • bindCount должен быть больше 0

См. также

VkBindSparseInfo, VkImage, VkSparseMemoryBind

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseImageOpaqueMemoryBindInfo

VkSparseMemoryBind(3)

Название

VkSparseMemoryBind - Структура, указывающая операцию привязки разреженной памяти

C Спецификация

Структура VkSparseMemoryBind определена как:

typedef struct VkSparseMemoryBind {
    VkDeviceSize               resourceOffset;
    VkDeviceSize               size;
    VkDeviceMemory             memory;
    VkDeviceSize               memoryOffset;
    VkSparseMemoryBindFlags    flags;
} VkSparseMemoryBind;

Члены

  • resourceOffset is the offset into the resource.
  • size is the size of the memory region to be bound.
  • memory is the VkDeviceMemory object that the range of the resource is bound to. If memory is VK_NULL_HANDLE, the range is unbound.
  • memoryOffset is the offset into the VkDeviceMemory object to bind the resource range to. If memory is VK_NULL_HANDLE, this value is ignored.
  • flags is a bitmask of VkSparseMemoryBindFlagBits specifying usage of the binding operation.

Описание

Диапазон связывания [resourceOffset, resourceOffset + size) имеет различные ограничения в зависимости от flags. Если flags содержит VK_SPARSE_MEMORY_BIND_METADATA_BIT, диапазон связывания должен находиться в области хвоста mip метаданных аспекта. Эта область метаданных определяется:

metadataRegion = [base, base + imageMipTailSize)
base = imageMipTailOffset + imageMipTailStride × n

и значения imageMipTailOffset, imageMipTailSize и imageMipTailStride взяты из VkSparseImageMemoryRequirements, соответствующие аспекту метаданных изображения, а n - это допустимый индекс уровня массива для изображения,

imageMipTailStride считается равным нулю для аспектов, где VkSparseImageMemoryRequirements::formatProperties.flags содержит VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT.

Если flags не содержит VK_SPARSE_MEMORY_BIND_METADATA_BIT, диапазон связывания должен находиться в диапазоне [0,VkMemoryRequirements::size).

Допустимое использование
  • Если memory не равно VK_NULL_HANDLE, memory и memoryOffset должны соответствовать требованиям к памяти ресурса, как описано в разделе html/vkspec.html#resources-association
  • Если memory не равно VK_NULL_HANDLE, memory не должен был создан с типом памяти, который сообщает о установленном бите VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
  • size должен быть больше 0
  • resourceOffset должен быть меньше размера ресурса
  • size должен быть меньше или равен размеру ресурса минус resourceOffset
  • memoryOffset должен быть меньше размера memory
  • size должен быть меньше или равен размеру memory минус memoryOffset
Допустимое использование (неявное)
  • Если memory не равно VK_NULL_HANDLE, memory должен быть допустимой дескриптором VkDeviceMemory
  • flags должен быть допустимым сочетанием значений VkSparseMemoryBindFlagBits

См. также

VkDeviceMemory, VkDeviceSize, VkSparseBufferMemoryBindInfo, VkSparseImageOpaqueMemoryBindInfo, VkSparseMemoryBindFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseMemoryBind

VkSpecializationInfo(3)

Имя

VkSpecializationInfo - Структура, указывающая информацию о специализации

C Спецификация

Структура VkSpecializationInfo определяется как:

typedef struct VkSpecializationInfo {
    uint32_t                           mapEntryCount;
    const VkSpecializationMapEntry*    pMapEntries;
    size_t                             dataSize;
    const void*                        pData;
} VkSpecializationInfo;

Члены

  • mapEntryCount is the number of entries in the pMapEntries array.
  • pMapEntries is a pointer to an array of VkSpecializationMapEntry which maps constant IDs to offsets in pData.
  • dataSize is the byte size of the pData buffer.
  • pData contains the actual constant values to specialize with.

Описание

pMapEntries указывает на структуру типа VkSpecializationMapEntry.

Допустимое использование
  • Член offset любого данного элемента pMapEntries должен быть меньше dataSize
  • Для любого данного элемента pMapEntries, size должен быть меньше или равен dataSize минус offset
  • Если mapEntryCount не равно 0, pMapEntries должен быть указателем на массив из mapEntryCount допустимых структур VkSpecializationMapEntry
Допустимое использование (неявное)
  • Если dataSize не равно 0, pData должен быть указателем на массив из dataSize байт

См. также

VkPipelineShaderStageCreateInfo, VkSpecializationMapEntry

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSpecializationInfo

VkSpecializationMapEntry(3)

Имя

VkSpecializationMapEntry - Структура, указывающая элемент отображения специализации

C Спецификация

Структура VkSpecializationMapEntry определяется как:

typedef struct VkSpecializationMapEntry {
    uint32_t    constantID;
    uint32_t    offset;
    size_t      size;
} VkSpecializationMapEntry;

Члены

  • constantID is the ID of the specialization constant in SPIR-V.
  • offset is the byte offset of the specialization constant value within the supplied data buffer.
  • size is the byte size of the specialization constant value within the supplied data buffer.

Описание

Если значение constantID не является идентификатором константы специализации, используемым в шейдере, эта запись отображения не влияет на поведение конвейера.

Допустимое использование
  • Для константы специализации constantID, объявленной в шейдере, size должен соответствовать размеру в байтах constantID. Если константа специализации имеет тип boolean, size должен быть размером в байтах VkBool32

См. также

VkSpecializationInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSpecializationMapEntry

VkStencilOpState(3)

Имя

VkStencilOpState - Структура, указывающая состояние операции трафарета

C Спецификация

Структура VkStencilOpState определяется как:

typedef struct VkStencilOpState {
    VkStencilOp    failOp;
    VkStencilOp    passOp;
    VkStencilOp    depthFailOp;
    VkCompareOp    compareOp;
    uint32_t       compareMask;
    uint32_t       writeMask;
    uint32_t       reference;
} VkStencilOpState;

Члены

  • failOp is a VkStencilOp value specifying the action performed on samples that fail the stencil test.
  • passOp is a VkStencilOp value specifying the action performed on samples that pass both the depth and stencil tests.
  • depthFailOp is a VkStencilOp value specifying the action performed on samples that pass the stencil test and fail the depth test.
  • compareOp is a VkCompareOp value specifying the comparison operator used in the stencil test.
  • compareMask selects the bits of the unsigned integer stencil values participating in the stencil test.
  • writeMask selects the bits of the unsigned integer stencil values updated by the stencil test in the stencil framebuffer attachment.
  • reference is an integer reference value that is used in the unsigned stencil comparison.

Описание

Допустимое использование (неявное)
  • failOp должен быть допустимым значением VkStencilOp
  • passOp должен быть допустимым значением VkStencilOp
  • depthFailOp должен быть допустимым значением VkStencilOp
  • compareOp должен быть допустимым значением VkCompareOp

См. также

VkCompareOp, VkPipelineDepthStencilStateCreateInfo, VkStencilOp

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkStencilOpState

VkSubmitInfo(3)

Имя

VkSubmitInfo - Структура, указывающая операцию отправки очереди

C Спецификация

Структура VkSubmitInfo определяется как:

typedef struct VkSubmitInfo {
    VkStructureType                sType;
    const void*                    pNext;
    uint32_t                       waitSemaphoreCount;
    const VkSemaphore*             pWaitSemaphores;
    const VkPipelineStageFlags*    pWaitDstStageMask;
    uint32_t                       commandBufferCount;
    const VkCommandBuffer*         pCommandBuffers;
    uint32_t                       signalSemaphoreCount;
    const VkSemaphore*             pSignalSemaphores;
} VkSubmitInfo;

Члены

  • sType is the type of this structure.
  • pNext is NULL or a pointer to an extension-specific structure.
  • waitSemaphoreCount is the number of semaphores upon which to wait before executing the command buffers for the batch.
  • pWaitSemaphores is a pointer to an array of semaphores upon which to wait before the command buffers for this batch begin execution. If semaphores to wait on are provided, they define a semaphore wait operation.
  • pWaitDstStageMask is a pointer to an array of pipeline stages at which each corresponding semaphore wait will occur.
  • commandBufferCount is the number of command buffers to execute in the batch.
  • pCommandBuffers is a pointer to an array of command buffers to execute in the batch.
  • signalSemaphoreCount is the number of semaphores to be signaled once the commands specified in pCommandBuffers have completed execution.
  • pSignalSemaphores is a pointer to an array of semaphores which will be signaled when the command buffers for this batch have completed execution. If semaphores to be signaled are provided, they define a semaphore signal operation.

Описание

Порядок, в котором буферы команд появляются в pCommandBuffers, используется для определения порядка отправки, и, таким образом, всех неявных гарантий упорядочивания, которые его учитывают. Помимо этих неявных гарантий упорядочивания и любых явных примитивов синхронизации, эти буферы команд могут перекрываться или выполняться не по порядку.

Допустимое использование
  • Любой заданный элемент pCommandBuffers не должен был быть выделен с помощью VK_COMMAND_BUFFER_LEVEL_SECONDARY
  • Если функция геометрических шейдеров не включена, любой заданный элемент pWaitDstStageMask не должен содержать VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  • Если функция тесселяционных шейдеров не включена, любой заданный элемент pWaitDstStageMask не должен содержать VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT или VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
  • Любой заданный элемент pWaitDstStageMask не должен включать VK_PIPELINE_STAGE_HOST_BIT.
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_SUBMIT_INFO
  • pNext должно быть NULL
  • Если waitSemaphoreCount не 0, pWaitSemaphores должно быть указателем на массив из waitSemaphoreCount допустимых дескрипторов VkSemaphore
  • Если waitSemaphoreCount не 0, pWaitDstStageMask должно быть указателем на массив из waitSemaphoreCount допустимых комбинаций значений VkPipelineStageFlagBits
  • Каждый элемент pWaitDstStageMask не должен быть 0
  • Если commandBufferCount не 0, pCommandBuffers должно быть указателем на массив из commandBufferCount допустимых дескрипторов VkCommandBuffer
  • Если signalSemaphoreCount не 0, pSignalSemaphores должно быть указателем на массив из signalSemaphoreCount допустимых дескрипторов VkSemaphore
  • Каждый из элементов pCommandBuffers, элементы pSignalSemaphores и элементы pWaitSemaphores, являющиеся допустимыми дескрипторами, должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkCommandBuffer, VkPipelineStageFlags, VkSemaphore, VkStructureType, vkQueueSubmit

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSubmitInfo

VkSubpassDependency(3)

Имя

VkSubpassDependency - Структура, определяющая зависимость подпрохода

C-спецификация

Структура VkSubpassDependency определяется как:

typedef struct VkSubpassDependency {
    uint32_t                srcSubpass;
    uint32_t                dstSubpass;
    VkPipelineStageFlags    srcStageMask;
    VkPipelineStageFlags    dstStageMask;
    VkAccessFlags           srcAccessMask;
    VkAccessFlags           dstAccessMask;
    VkDependencyFlags       dependencyFlags;
} VkSubpassDependency;

Члены

  • srcSubpass is the subpass index of the first subpass in the dependency, or VK_SUBPASS_EXTERNAL.
  • dstSubpass is the subpass index of the second subpass in the dependency, or VK_SUBPASS_EXTERNAL.
  • srcStageMask is a bitmask of VkPipelineStageFlagBits specifying the source stage mask.
  • dstStageMask is a bitmask of VkPipelineStageFlagBits specifying the destination stage mask
  • srcAccessMask is a bitmask of VkAccessFlagBits specifying a source access mask.
  • dstAccessMask is a bitmask of VkAccessFlagBits specifying a destination access mask.
  • dependencyFlags is a bitmask of VkDependencyFlagBits.

Описание

Если srcSubpass равно dstSubpass, то VkSubpassDependency описывает зависимость подпрохода от самого себя и ограничивает только разрешенные барьеры конвейера внутри экземпляра подпрохода. В противном случае, когда экземпляр прохода рендеринга, который включает зависимость подпрохода, отправляется в очередь, он определяет зависимость памяти между подпроходами, идентифицированными srcSubpass и dstSubpass.

Если srcSubpass равно VK_SUBPASS_EXTERNAL, первая область синхронизации включает команды, отправленные в очередь до начала экземпляра прохода рендеринга. В противном случае первый набор команд включает все команды, отправленные как часть экземпляра подпрохода, идентифицированного srcSubpass, и любые операции загрузки, сохранения или многовыборочного разрешения на вложениях, используемых в srcSubpass. В любом случае, первая область синхронизации ограничивается операциями на этапах конвейера, определяемых маской исходного этапа, указанной srcStageMask.

Если dstSubpass равно VK_SUBPASS_EXTERNAL, вторая область синхронизации включает команды, отправленные после завершения экземпляра прохода рендеринга. В противном случае второй набор команд включает все команды, отправленные как часть экземпляра подпрохода, идентифицированного dstSubpass, и любые операции загрузки, сохранения или многовыборочного разрешения на вложениях, используемых в dstSubpass. В любом случае, вторая область синхронизации ограничивается операциями на этапах конвейера, определяемых маской целевого этапа, указанной dstStageMask.

Первая область доступа ограничивается доступом на этапах конвейера, определяемых маской исходного этапа, указанной srcStageMask. Она также ограничивается типами доступа в маске исходного доступа, указанной srcAccessMask.

Вторая область доступа ограничивается доступом на этапах конвейера, определяемых маской целевого этапа, указанной dstStageMask. Она также ограничивается типами доступа в маске целевого доступа, указанной dstAccessMask.

Операции доступности и видимости, определяемые зависимостью подпрохода, влияют на выполнение переходов макета изображения внутри прохода рендеринга.

Примечание

Для ресурсов без вложений зависимость памяти, выраженная зависимостью подпрохода, практически идентична зависимости памяти VkMemoryBarrier (с совпадающими параметрами srcAccessMask/dstAccessMask) отправленной как часть vkCmdPipelineBarrier (с совпадающими параметрами srcStageMask/dstStageMask). Единственное отличие состоит в том, что её области действия ограничены указанными подпроходами, а не потенциально влияют на всё до и после.

Однако для вложений зависимости подпрохода работают больше как VkImageMemoryBarrier, определённый аналогично VkMemoryBarrier, указанные выше, индексы очереди семейств установлены в VK_QUEUE_FAMILY_IGNORED, и макеты следующие:

  • Эквивалент oldLayout — это макет вложения в соответствии с описанием подпрохода для srcSubpass.
  • Эквивалент newLayout — это макет вложения в соответствии с описанием подпрохода для dstSubpass.
Допустимое использование
  • Если srcSubpass не VK_SUBPASS_EXTERNAL, srcStageMask не должно включать VK_PIPELINE_STAGE_HOST_BIT
  • Если dstSubpass не VK_SUBPASS_EXTERNAL, dstStageMask не должно включать VK_PIPELINE_STAGE_HOST_BIT
  • Если функция геометрических шейдеров не включена, srcStageMask не должен содержать VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  • Если функция геометрических шейдеров не включена, dstStageMask не должен содержать VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  • Если функция тесселяционных шейдеров не включена, srcStageMask не должен содержать VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT или VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
  • Если функция тесселяционных шейдеров не включена, dstStageMask не должен содержать VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT или VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
  • srcSubpass должен быть меньше или равен dstSubpass, если только один из них не VK_SUBPASS_EXTERNAL, чтобы избежать циклических зависимостей и обеспечить корректный порядок выполнения
  • srcSubpass и dstSubpass не должны оба быть равны VK_SUBPASS_EXTERNAL
  • Если srcSubpass равен dstSubpass, srcStageMask и dstStageMask должны содержать только один из VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, или VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT
  • Если srcSubpass равен dstSubpass и не все этапы в srcStageMask и dstStageMask являются этапами пространства фреймбуфера, логически последний этап конвейера в srcStageMask должен быть логически раньше или равен логически самому раннему этапу конвейера в dstStageMask
  • Любой флаг доступа, включенный в srcAccessMask, должен поддерживаться одним из этапов конвейера в srcStageMask, как указано в таблице поддерживаемых типов доступа.
  • Любой флаг доступа, включенный в dstAccessMask, должен поддерживаться одним из этапов конвейера в dstStageMask, как указано в таблице поддерживаемых типов доступа.
Допустимое использование (неявное)
  • srcStageMask должен быть допустимым сочетанием значений VkPipelineStageFlagBits
  • srcStageMask не должен быть 0
  • dstStageMask должен быть допустимым сочетанием значений VkPipelineStageFlagBits
  • dstStageMask не должен быть 0
  • srcAccessMask должен быть допустимым сочетанием значений VkAccessFlagBits
  • dstAccessMask должен быть допустимым сочетанием значений VkAccessFlagBits
  • dependencyFlags должен быть допустимым сочетанием значений VkDependencyFlagBits

См. также

VkAccessFlags, VkDependencyFlags, VkPipelineStageFlags, VkRenderPassCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSubpassDependency

VkSubpassDescription(3)

Название

VkSubpassDescription - Структура, определяющая описание подпрохода

C-спецификация

Структура VkSubpassDescription определяется следующим образом:

typedef struct VkSubpassDescription {
    VkSubpassDescriptionFlags       flags;
    VkPipelineBindPoint             pipelineBindPoint;
    uint32_t                        inputAttachmentCount;
    const VkAttachmentReference*    pInputAttachments;
    uint32_t                        colorAttachmentCount;
    const VkAttachmentReference*    pColorAttachments;
    const VkAttachmentReference*    pResolveAttachments;
    const VkAttachmentReference*    pDepthStencilAttachment;
    uint32_t                        preserveAttachmentCount;
    const uint32_t*                 pPreserveAttachments;
} VkSubpassDescription;

Элементы

  • flags — это битовая маска VkSubpassDescriptionFlagBits, указывающая использование подпрохода.
  • pipelineBindPoint — это значение VkPipelineBindPoint, указывающее, является ли это вычислительным или графическим подпроходом. В настоящее время поддерживаются только графические подпроходы.
  • inputAttachmentCount — это количество входных вложений.
  • pInputAttachments — это массив структур VkAttachmentReference (определённых ниже), который перечисляет, какие из вложений прохода рендеринга могут считываться в шейдере во время подпрохода, и какой макет будет иметь каждое вложение во время подпрохода. Каждый элемент массива соответствует номеру блока входного вложения в шейдере, т.е. если шейдер объявляет входную переменную layout(input_attachment_index=X, set=Y, binding=Z), то он использует вложение, предоставленное в pInputAttachments[X]. Входные вложения также должны быть связаны с конвейером с помощью набора дескрипторов, при этом дескриптор входного вложения записывается в местоположение (set=Y, binding=Z).
  • colorAttachmentCount — это количество цветовых вложений.
  • pColorAttachments — это массив из colorAttachmentCount структур VkAttachmentReference, который перечисляет, какие из вложений прохода рендеринга будут использоваться в качестве цветовых вложений в подпроходе, и какой макет будет иметь каждое вложение во время подпрохода. Каждый элемент массива соответствует местоположению выходных данных фрагментного шейдера, т.е. если шейдер объявил выходную переменную layout(location=X), то он использует вложение, предоставленное в pColorAttachments[X].
  • pResolveAttachments — это NULL или массив из colorAttachmentCount структур VkAttachmentReference, который перечисляет, к каким из вложений прохода рендеринга происходит разрешение в конце подпрохода, и какой макет будет иметь каждое вложение во время операции многовыборного разрешения. Если pResolveAttachments не NULL, каждый из его элементов соответствует цветовому вложению (элемент в pColorAttachments с тем же индексом), и для каждого вложения определяется операция многовыборного разрешения. В конце каждого подпрохода операции многовыборного разрешения считывают цветовые вложения подпрохода и разрешают выборки для каждого пикселя в то же местоположение пикселя в соответствующих разрешённых вложениях, если только индекс разрешённого вложения не VK_ATTACHMENT_UNUSED. Если первое использование вложения в проходе рендеринга является разрешённым вложением, то loadOp эффективно игнорируется, поскольку гарантируется, что разрешение перезапишет все пиксели в области рендеринга.
  • pDepthStencilAttachment — это указатель на VkAttachmentReference, указывающий, какое вложение будет использоваться для данных глубины/трафарета и какой макет оно будет иметь во время подпрохода. Установка индекса вложения в VK_ATTACHMENT_UNUSED или оставление этого указателя как NULL указывает на то, что в подпроходе не будет использоваться вложение глубины/трафарета.
  • preserveAttachmentCount — это количество сохранённых вложений.
  • pPreserveAttachments — это массив из preserveAttachmentCount индексов вложений прохода рендеринга, описывающих вложения, которые не используются подпроходом, но содержимое которых должно сохраняться в течение всего подпрохода.

Описание

Содержимое вложения в области рендеринга становится неопределённым в начале подпрохода S, если выполнены все следующие условия:

  • Вложение используется в качестве цветового, глубины/трафарета или разрешённого вложения в любом подпроходе в проходе рендеринга.
  • Существует подпроход S1, который использует или сохраняет вложение, и зависимость подпрохода от S1 до S.
  • Вложение не используется и не сохраняется в подпроходе S.

Как только содержимое вложения становится неопределенным в подпроходе S, оно остается неопределенным для подпроходов в цепочках зависимостей подпроходов, начиная с подпрохода S, пока оно не будет записано снова. Однако, оно остается допустимым для подпроходов в других цепочках зависимостей подпроходов, начиная с подпрохода S1, если эти подпроходы используют или сохраняют вложение.

Допустимое использование
  • pipelineBindPoint должно быть VK_PIPELINE_BIND_POINT_GRAPHICS
  • colorAttachmentCount должно быть меньше или равно VkPhysicalDeviceLimits::maxColorAttachments
  • Если первое использование вложения в этом проходе рендеринга является входным вложением, и вложение также не используется как цветное или глубины/трафарета вложение в том же подпроходе, то loadOp не должно быть VK_ATTACHMENT_LOAD_OP_CLEAR
  • Если pResolveAttachments не NULL, для каждого вложения разрешения, которое не имеет значения VK_ATTACHMENT_UNUSED, соответствующее цветное вложение не должно иметь значения VK_ATTACHMENT_UNUSED
  • Если pResolveAttachments не NULL, количество выборок каждого элемента pColorAttachments должно быть любым, кроме VK_SAMPLE_COUNT_1_BIT
  • Любой заданный элемент pResolveAttachments должен иметь количество выборок VK_SAMPLE_COUNT_1_BIT
  • Любой заданный элемент pResolveAttachments должен иметь тот же VkFormat, что и его соответствующее цветное вложение
  • Все вложения в pColorAttachments, которые не VK_ATTACHMENT_UNUSED, должны иметь одинаковое количество выборок
  • Если pDepthStencilAttachment не VK_ATTACHMENT_UNUSED и любые вложения в pColorAttachments не VK_ATTACHMENT_UNUSED, они должны иметь одинаковое количество выборок
  • Если какие-либо входные вложения VK_ATTACHMENT_UNUSED, то любые конвейеры, связанные во время подпрохода, не должны обращаться к этим входным вложениям из фрагментного шейдера
  • Член attachment любого элемента pPreserveAttachments не должен быть VK_ATTACHMENT_UNUSED
  • Любой заданный элемент pPreserveAttachments не должен также быть элементом любого другого члена описания подпрохода
  • Если любое вложение используется как входное вложение и как цветное или глубины/трафарета вложение, то каждое использование должно использовать тот же layout
Допустимое использование (неявное)
  • flags должно быть допустимой комбинацией значений VkSubpassDescriptionFlagBits
  • pipelineBindPoint должно быть допустимым значением VkPipelineBindPoint
  • Если inputAttachmentCount не 0, pInputAttachments должно быть указателем на массив из inputAttachmentCount допустимых VkAttachmentReference структур
  • Если colorAttachmentCount не 0, pColorAttachments должно быть указателем на массив из colorAttachmentCount допустимых VkAttachmentReference структур
  • Если colorAttachmentCount не 0, и pResolveAttachments не NULL, pResolveAttachments должно быть указателем на массив из colorAttachmentCount допустимых VkAttachmentReference структур
  • Если pDepthStencilAttachment не NULL, pDepthStencilAttachment должно быть указателем на допустимую VkAttachmentReference структуру
  • Если preserveAttachmentCount не 0, pPreserveAttachments должно быть указателем на массив из preserveAttachmentCount uint32_t значений

См. также

VkAttachmentReference, VkPipelineBindPoint, VkRenderPassCreateInfo, VkSubpassDescriptionFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSubpassDescription

VkSubresourceLayout(3)

Имя

VkSubresourceLayout - Структура, определяющая макет подресурса

C Спецификация

Информация о макете подресурса изображения возвращается в структуре VkSubresourceLayout:

typedef struct VkSubresourceLayout {
    VkDeviceSize    offset;
    VkDeviceSize    size;
    VkDeviceSize    rowPitch;
    VkDeviceSize    arrayPitch;
    VkDeviceSize    depthPitch;
} VkSubresourceLayout;

Члены

  • offset - это смещение в байтах от начала изображения, где начинается подресурс изображения.
  • size - это размер в байтах подресурса изображения. size включает любую дополнительную память, которая требуется на основе rowPitch.
  • rowPitch описывает количество байтов между каждой строкой текстур в изображении.
  • arrayPitch описывает количество байтов между каждым слоем массива изображения.
  • depthPitch описывает количество байтов между каждым срезом 3D изображения.

Описание

Для изображений, созданных с линейной разметкой, rowPitch, arrayPitch и depthPitch описывают макет подресурса изображения в линейной памяти. Для несжатых форматов, rowPitch - это количество байтов между текстурами с одинаковой координатой x в смежных строках (координаты y отличаются на один). arrayPitch - это количество байтов между текстурами с одинаковыми координатами x и y в смежных слоях массива изображения (значения слоя массива отличаются на один). depthPitch - это количество байтов между текстурами с одинаковыми координатами x и y в смежных срезах 3D изображения (координаты z отличаются на один). Выраженное в виде формулы адресации, начальный байт текстуры в подресурсе изображения имеет адрес:

// (x,y,z,layer) are in texel coordinates
address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*elementSize + offset

Для сжатых форматов, rowPitch - это количество байтов между сжатыми блоками текстур в смежных строках. arrayPitch - это количество байтов между сжатыми блоками текстур в смежных слоях массива. depthPitch - это количество байтов между сжатыми блоками текстур в смежных срезах 3D изображения.

// (x,y,z,layer) are in compressed texel block coordinates
address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*compressedTexelBlockByteSize + offset;

arrayPitch не определено для изображений, которые не были созданы как массивы. depthPitch определено только для 3D изображений.

Для цветовых форматов, член aspectMask VkImageSubresource должен быть VK_IMAGE_ASPECT_COLOR_BIT. Для форматов глубины/трафарета, aspectMask должен быть либо VK_IMAGE_ASPECT_DEPTH_BIT, либо VK_IMAGE_ASPECT_STENCIL_BIT. На реализациях, которые хранят аспекты глубины и трафарета отдельно, запрос каждого из этих макетов подресурсов изображения вернет разные offset и size, представляющие область памяти, используемую для этого аспекта. На реализациях, которые хранят аспекты глубины и трафарета в переплетенном виде, возвращаются одни и те же offset и size, представляющие переплетенное выделение памяти.

См. также

VkDeviceSize, vkGetImageSubresourceLayout

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSubresourceLayout

VkVertexInputAttributeDescription(3)

Имя

VkVertexInputAttributeDescription - Структура, определяющая описание атрибута входных вершин

C Спецификация

Каждый атрибут входных вершин задается экземпляром структуры VkVertexInputAttributeDescription.

Структура VkVertexInputAttributeDescription определяется как:

typedef struct VkVertexInputAttributeDescription {
    uint32_t    location;
    uint32_t    binding;
    VkFormat    format;
    uint32_t    offset;
} VkVertexInputAttributeDescription;

Члены

  • location - это номер места привязки шейдера для этого атрибута.
  • binding - это номер привязки, из которой этот атрибут берет свои данные.
  • format - это размер и тип данных атрибута вершины.
  • offset - это смещение в байтах этого атрибута относительно начала элемента в привязке входных вершин.

Описание

Допустимое использование
  • location должно быть меньше VkPhysicalDeviceLimits::maxVertexInputAttributes
  • binding должно быть меньше VkPhysicalDeviceLimits::maxVertexInputBindings
  • offset должно быть меньше или равно VkPhysicalDeviceLimits::maxVertexInputAttributeOffset
  • format должно быть разрешено как формат буфера вершин, как указано флагом VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT в VkFormatProperties::bufferFeatures, возвращаемым vkGetPhysicalDeviceFormatProperties
Допустимое использование (неявное)
  • format должно быть допустимым значением VkFormat

См. также

VkFormat, VkPipelineVertexInputStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkVertexInputAttributeDescription

VkVertexInputBindingDescription(3)

Имя

VkVertexInputBindingDescription - Структура, определяющая описание привязки входных вершин

C Спецификация

Структура VkVertexInputBindingDescription определяется как:

typedef struct VkVertexInputBindingDescription {
    uint32_t             binding;
    uint32_t             stride;
    VkVertexInputRate    inputRate;
} VkVertexInputBindingDescription;

Краткое описание полей

  • binding — это номер привязки, который описывает данная структура.
  • stride — это расстояние в байтах между двумя последовательными элементами внутри буфера.
  • inputRate — это значение VkVertexInputRate, указывающее, является ли адресация атрибутов вершин функцией индекса вершины или индекса экземпляра.

Описание

Допустимое использование
  • binding должно быть меньше, чем VkPhysicalDeviceLimits::maxVertexInputBindings
  • stride должно быть меньше или равно VkPhysicalDeviceLimits::maxVertexInputBindingStride
Допустимое использование (неявное)
  • inputRate должно быть допустимым значением VkVertexInputRate

См. также

VkPipelineVertexInputStateCreateInfo, VkVertexInputRate

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkVertexInputBindingDescription

VkViewport(3)

Имя

VkViewport - Структура, определяющая viewport

C-спецификация

Структура VkViewport определяется как:

typedef struct VkViewport {
    float    x;
    float    y;
    float    width;
    float    height;
    float    minDepth;
    float    maxDepth;
} VkViewport;

Краткое описание полей

  • x и y — это верхний левый угол (x,y) viewport.
  • width и height — это ширина и высота viewport соответственно.
  • minDepth и maxDepth — это диапазон глубины для viewport. Допустимо, чтобы minDepth было больше или равно maxDepth.

Описание

Координата глубины фреймбуфера zf может быть представлена либо в виде с фиксированной точкой, либо в виде с плавающей точкой. Однако представление с плавающей точкой должно использоваться, если вложение глубины/трафарета имеет компонент глубины с плавающей точкой. Если используется m-битное представление с фиксированной точкой, мы предполагаем, что оно представляет каждое значение \(\frac{k}{2^m - 1}\), где k ∈ { 0, 1, …​, 2m-1 }, как k (например, 1.0 представлено в двоичном виде как строка из одних единиц).

Параметры viewport, показанные в приведенных выше уравнениях, находятся из этих значений как

ox = x + width / 2
oy = y + height / 2
oz = minDepth
px = width
py = height
pz = maxDepth - minDepth.

Ширина и высота максимальных размеров viewport, зависящих от реализации, должны быть больше или равны ширине и высоте самого большого изображения, которое можно создать и прикрепить к фреймбуферу.

Границы viewport с плавающей точкой представлены с точностью, зависящей от реализации.

Допустимое использование
  • width должно быть больше 0.0 и меньше или равно VkPhysicalDeviceLimits::maxViewportDimensions[0]
  • height должно быть больше 0.0 и меньше или равно VkPhysicalDeviceLimits::maxViewportDimensions[1]
  • x и y должны находиться в диапазоне от viewportBoundsRange[0] до viewportBoundsRange[1] включительно
  • (x + width) должно быть меньше или равно viewportBoundsRange[1]
  • (y + height) должно быть меньше или равно viewportBoundsRange[1]
  • minDepth должно находиться в диапазоне от 0.0 до 1.0 включительно
  • maxDepth должно находиться в диапазоне от 0.0 до 1.0 включительно

См. также

VkPipelineViewportStateCreateInfo, vkCmdSetViewport

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL-адресу

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkViewport

VkWriteDescriptorSet(3)

Имя

VkWriteDescriptorSet - Структура, определяющая параметры операции записи набора дескрипторов

C-спецификация

Структура VkWriteDescriptorSet определяется как:

typedef struct VkWriteDescriptorSet {
    VkStructureType                  sType;
    const void*                      pNext;
    VkDescriptorSet                  dstSet;
    uint32_t                         dstBinding;
    uint32_t                         dstArrayElement;
    uint32_t                         descriptorCount;
    VkDescriptorType                 descriptorType;
    const VkDescriptorImageInfo*     pImageInfo;
    const VkDescriptorBufferInfo*    pBufferInfo;
    const VkBufferView*              pTexelBufferView;
} VkWriteDescriptorSet;

Краткое описание полей

  • sType — это тип данной структуры.
  • pNext — это NULL или указатель на структуру, специфичную для расширения.
  • dstSet — это целевой набор дескрипторов для обновления.
  • dstBinding — это привязка дескриптора в этом наборе.
  • dstArrayElement — это начальный элемент в этом массиве.
  • descriptorCount — это количество дескрипторов для обновления (количество элементов в pImageInfo, pBufferInfo или pTexelBufferView).
  • descriptorType — это VkDescriptorType, указывающий тип каждого дескриптора в pImageInfo, pBufferInfo или pTexelBufferView, как описано ниже. Он должен быть того же типа, что и указанный в VkDescriptorSetLayoutBinding для dstSet в dstBinding. Тип дескриптора также управляет тем, из какого массива берутся дескрипторы.
  • pImageInfo указывает на массив структур VkDescriptorImageInfo или игнорируется, как описано ниже.
  • pBufferInfo указывает на массив структур VkDescriptorBufferInfo или игнорируется, как описано ниже.
  • pTexelBufferView указывает на массив дескрипторов VkBufferView, как описано в разделе Представления буферов, или игнорируется, как описано ниже.

Описание

Только один из членов pImageInfo, pBufferInfo или pTexelBufferView используется в соответствии с типом дескриптора, указанным в члене descriptorType содержащей структуры VkWriteDescriptorSet, как указано ниже.

Если dstBinding имеет меньше, чем descriptorCount оставшихся элементов массива, начиная с dstArrayElement, то оставшиеся элементы будут использоваться для обновления последующей привязки - dstBinding+1, начиная с нулевого элемента массива. Если привязка имеет descriptorCount равное нулю, она пропускается. Это поведение применяется рекурсивно, при этом обновление затрагивает последовательные привязки по мере необходимости для обновления всех descriptorCount дескрипторов.

Допустимое использование
  • dstBinding должно быть меньше или равно максимальному значению binding всех структур VkDescriptorSetLayoutBinding, указанных при создании макета набора дескрипторов dstSet
  • dstBinding должно быть привязкой с ненулевым descriptorCount
  • Все последовательные привязки, обновляемые с помощью одной структуры VkWriteDescriptorSet, за исключением тех, у которых descriptorCount равно нулю, должны иметь одинаковые descriptorType и stageFlags.
  • Все последовательные привязки, обновляемые с помощью одной структуры VkWriteDescriptorSet, за исключением тех, у которых descriptorCount равно нулю, должны либо все использовать неизменяемые семплеры, либо все не использовать неизменяемые семплеры.
  • descriptorType должно соответствовать типу dstBinding внутри dstSet
  • dstSet должно быть допустимой дескрипторной ссылкой VkDescriptorSet
  • Сумма dstArrayElement и descriptorCount должна быть меньше или равна количеству элементов массива в привязке набора дескрипторов, указанной dstBinding, и всех применимых последовательных привязок, как описано в html/vkspec.html#descriptorsets-updates-consecutive
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE или VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pImageInfo должно быть указателем на массив из descriptorCount допустимых структур VkDescriptorImageInfo
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, pTexelBufferView должно быть указателем на массив из descriptorCount допустимых ссылок VkBufferView
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pBufferInfo должно быть указателем на массив из descriptorCount допустимых структур VkDescriptorBufferInfo
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_SAMPLER или VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, и dstSet не был выделен с макетом, который включал неизменяемые семплеры для dstBinding с descriptorType, член sampler любого заданного элемента pImageInfo должен быть допустимым объектом VkSampler
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE или VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, члены imageView и imageLayout любого заданного элемента pImageInfo должны быть допустимыми VkImageView и VkImageLayout соответственно
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, для каждого дескриптора, который будет доступен через операции загрузки или сохранения, член imageLayout для соответствующих элементов pImageInfo должен быть VK_IMAGE_LAYOUT_GENERAL
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER или VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, член offset любого заданного элемента pBufferInfo должен быть кратным VkPhysicalDeviceLimits::minUniformBufferOffsetAlignment
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_STORAGE_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, член offset любого заданного элемента pBufferInfo должен быть кратным VkPhysicalDeviceLimits::minStorageBufferOffsetAlignment
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, член buffer любого заданного элемента pBufferInfo, который не разрежен, должен быть полностью и непрерывно связан с одним объектом VkDeviceMemory
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER или VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, член buffer любого заданного элемента pBufferInfo должен быть создан с установленным VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_STORAGE_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, член buffer любого заданного элемента pBufferInfo должен быть создан с установленным VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER или VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, член range любого заданного элемента pBufferInfo, или эффективный диапазон, если range есть VK_WHOLE_SIZE, должен быть меньше или равен VkPhysicalDeviceLimits::maxUniformBufferRange
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_STORAGE_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, член range любого заданного элемента pBufferInfo, или эффективный диапазон, если range есть VK_WHOLE_SIZE, должен быть меньше или равен VkPhysicalDeviceLimits::maxStorageBufferRange
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, VkBuffer, из которого был создан любой заданный элемент pTexelBufferView, должен быть создан с установленным VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, VkBuffer, из которого был создан любой заданный элемент pTexelBufferView, должен быть создан с установленным VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_STORAGE_IMAGE или VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, член imageView любого заданного элемента pImageInfo должен быть создан с идентичным перемешиванием
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE или VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, член imageView любого заданного элемента pImageInfo должен быть создан с установленным VK_IMAGE_USAGE_SAMPLED_BIT
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE или VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, член imageLayout любого заданного элемента pImageInfo должен быть VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL или VK_IMAGE_LAYOUT_GENERAL
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, член imageView любого заданного элемента pImageInfo должен быть создан с установленным VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
  • Если descriptorType есть VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, член imageView любого заданного элемента pImageInfo должен быть создан с установленным VK_IMAGE_USAGE_STORAGE_BIT
Допустимое использование (неявное)
  • sType должно быть VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
  • pNext должно быть NULL
  • descriptorType должно быть допустимым значением VkDescriptorType
  • descriptorCount должно быть больше 0
  • И dstSet, и элементы pTexelBufferView, которые являются допустимыми дескрипторами, должны быть созданы, выделены или получены из одного и того же VkDevice

См. также

VkBufferView, VkDescriptorBufferInfo, VkDescriptorImageInfo, VkDescriptorSet, VkDescriptorType, VkStructureType, vkUpdateDescriptorSets

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkWriteDescriptorSet

Перечисления

VkAccessFlagBits(3)

Имя

VkAccessFlagBits - Битовая маска, указывающая типы доступа к памяти, которые будут участвовать в зависимости памяти

C-спецификация

Доступ к памяти в Vulkan может осуществляться из вызовов шейдеров и через некоторые этапы фиксированной функции конвейера. Тип доступа является функцией используемого типа дескриптора или того, как этап фиксированной функции обращается к памяти. Каждый тип доступа соответствует битовому флагу в VkAccessFlagBits.

Некоторые команды синхронизации принимают наборы типов доступа в качестве параметров для определения областей доступа зависимости памяти. Если команда синхронизации включает маску исходного доступа, её первая область доступа включает только доступ через типы доступа, указанные в этой маске. Аналогично, если команда синхронизации включает маску целевого доступа, её вторая область доступа включает только доступ через типы доступа, указанные в этой маске.

Типы доступа, которые могут быть установлены в маске доступа, включают:

typedef enum VkAccessFlagBits {
    VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
    VK_ACCESS_INDEX_READ_BIT = 0x00000002,
    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
    VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
    VK_ACCESS_SHADER_READ_BIT = 0x00000020,
    VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
    VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
    VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
    VK_ACCESS_HOST_READ_BIT = 0x00002000,
    VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
    VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
    VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
} VkAccessFlagBits;

Описание

  • VK_ACCESS_INDIRECT_COMMAND_READ_BIT specifies read access to an indirect command structure read as part of an indirect drawing or dispatch command.
  • VK_ACCESS_INDEX_READ_BIT specifies read access to an index buffer as part of an indexed drawing command, bound by vkCmdBindIndexBuffer.
  • VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT specifies read access to a vertex buffer as part of a drawing command, bound by vkCmdBindVertexBuffers.
  • VK_ACCESS_UNIFORM_READ_BIT specifies read access to a uniform buffer.
  • VK_ACCESS_INPUT_ATTACHMENT_READ_BIT specifies read access to an input attachment within a renderpass during fragment shading.
  • VK_ACCESS_SHADER_READ_BIT specifies read access to a storage buffer, uniform texel buffer, storage texel buffer, sampled image, or storage image.
  • VK_ACCESS_SHADER_WRITE_BIT specifies write access to a storage buffer, storage texel buffer, or storage image.
  • VK_ACCESS_COLOR_ATTACHMENT_READ_BIT specifies read access to a color attachment, such as via blending, logic operations, or via certain subpass load operations.
  • VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT specifies write access to a color or resolve attachment during a render pass or via certain subpass load and store operations.
  • VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT specifies read access to a depth/stencil attachment, via depth or stencil operations or via certain subpass load operations.
  • VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT specifies write access to a depth/stencil attachment, via depth or stencil operations or via certain subpass load and store operations.
  • VK_ACCESS_TRANSFER_READ_BIT specifies read access to an image or buffer in a copy operation.
  • VK_ACCESS_TRANSFER_WRITE_BIT specifies write access to an image or buffer in a clear or copy operation.
  • VK_ACCESS_HOST_READ_BIT specifies read access by a host operation. Accesses of this type are not performed through a resource, but directly on memory.
  • VK_ACCESS_HOST_WRITE_BIT specifies write access by a host operation. Accesses of this type are not performed through a resource, but directly on memory.
  • VK_ACCESS_MEMORY_READ_BIT specifies read access via non-specific entities. These entities include the Vulkan device and host, but may also include entities external to the Vulkan device or otherwise not part of the core Vulkan pipeline. When included in a destination access mask, makes all available writes visible to all future read accesses on entities known to the Vulkan device.
  • VK_ACCESS_MEMORY_WRITE_BIT specifies write access via non-specific entities. These entities include the Vulkan device and host, but may also include entities external to the Vulkan device or otherwise not part of the core Vulkan pipeline. When included in a source access mask, all writes that are performed by entities known to the Vulkan device are made available. When included in a destination access mask, makes all available writes visible to all future write accesses on entities known to the Vulkan device.

Определённые типы доступа выполняются только подмножеством этапов конвейера. Любая команда синхронизации, которая принимает как маски этапов, так и маски доступа, использует оба для определения областей доступа - только указанные типы доступа, выполняемые указанными этапами, включены в область доступа. Приложение не должно указывать флаг доступа в команде синхронизации, если он не включает этап конвейера в соответствующей маске этапов, который может выполнять доступы этого типа. В следующей таблице перечислены для каждого флага доступа этапы конвейера, которые могут выполнять этот тип доступа.

Таблица 7. Поддерживаемые типы доступа
Флаг доступа Поддерживаемые этапы конвейера

VK_ACCESS_INDIRECT_COMMAND_READ_BIT

VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT

VK_ACCESS_INDEX_READ_BIT

VK_PIPELINE_STAGE_VERTEX_INPUT_BIT

VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT

VK_PIPELINE_STAGE_VERTEX_INPUT_BIT

VK_ACCESS_UNIFORM_READ_BIT

VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, or VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT

VK_ACCESS_INPUT_ATTACHMENT_READ_BIT

VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT

VK_ACCESS_SHADER_READ_BIT

VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, or VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT

VK_ACCESS_SHADER_WRITE_BIT

VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, or VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT

VK_ACCESS_COLOR_ATTACHMENT_READ_BIT

VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT

VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT

VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT

VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT

VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, or VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT

VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT

VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, or VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT

VK_ACCESS_TRANSFER_READ_BIT

VK_PIPELINE_STAGE_TRANSFER_BIT

VK_ACCESS_TRANSFER_WRITE_BIT

VK_PIPELINE_STAGE_TRANSFER_BIT

VK_ACCESS_HOST_READ_BIT

VK_PIPELINE_STAGE_HOST_BIT

VK_ACCESS_HOST_WRITE_BIT

VK_PIPELINE_STAGE_HOST_BIT

VK_ACCESS_MEMORY_READ_BIT

N/A

VK_ACCESS_MEMORY_WRITE_BIT

N/A

Если объект памяти не имеет свойства VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, то должна быть вызвана функция vkFlushMappedMemoryRanges для гарантии того, что записи в объект памяти от хоста будут видны для типа доступа VK_ACCESS_HOST_WRITE_BIT access type, где они могут быть дополнительно предоставлены устройству с помощью команд синхронизации. Аналогично, должна быть вызвана функция vkInvalidateMappedMemoryRanges для гарантии того, что записи, видимые для типа доступа VK_ACCESS_HOST_READ_BIT access type, будут видны для операций хоста.

Если объект памяти имеет флаг свойства VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, записи в объект памяти от хоста автоматически становятся видимыми для типа доступа VK_ACCESS_HOST_WRITE_BIT access type. Аналогично, записи, видимые для типа доступа VK_ACCESS_HOST_READ_BIT access type, автоматически становятся видимыми для хоста.

Примечание

Команда vkQueueSubmit автоматически гарантирует, что записи хоста, отправленные в VK_ACCESS_HOST_WRITE_BIT, становятся доступными, если они были отправлены до выполнения команды, поэтому в большинстве случаев явный барьер памяти не требуется для этого случая. В немногих случаях, когда отправка не происходит между записью хоста и доступом к чтению устройства, доступ к записям может быть обеспечен с помощью явного барьера памяти.

См. также

VkAccessFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkAccessFlagBits

VkAttachmentDescriptionFlagBits(3)

Имя

VkAttachmentDescriptionFlagBits - Битовая маска, указывающая дополнительные свойства вложения

Спецификация C

Биты, которые могут быть установлены в VkAttachmentDescription::flags для описания дополнительных свойств вложения:

typedef enum VkAttachmentDescriptionFlagBits {
    VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
} VkAttachmentDescriptionFlagBits;

Описание

  • VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT указывает, что вложение использует ту же память устройства, что и другие вложения.

См. также

VkAttachmentDescriptionFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkAttachmentDescriptionFlagBits

VkAttachmentLoadOp(3)

Имя

VkAttachmentLoadOp - Указывает, как обрабатывается содержимое вложения в начале подпрохода

Спецификация C

Возможные значения VkAttachmentDescription::loadOp и stencilLoadOp, указывающие, как обрабатывается содержимое вложения:

typedef enum VkAttachmentLoadOp {
    VK_ATTACHMENT_LOAD_OP_LOAD = 0,
    VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
    VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
} VkAttachmentLoadOp;

Описание

  • VK_ATTACHMENT_LOAD_OP_LOAD указывает, что предыдущее содержимое изображения в области рендеринга будет сохранено. Для вложений с форматом глубины/трафарета используется тип доступа VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT. Для вложений с цветовым форматом используется тип доступа VK_ACCESS_COLOR_ATTACHMENT_READ_BIT.
  • VK_ATTACHMENT_LOAD_OP_CLEAR указывает, что содержимое в области рендеринга будет очищено до однородного значения, которое указывается при начале экземпляра прохода рендеринга. Для вложений с форматом глубины/трафарета используется тип доступа VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT. Для вложений с цветовым форматом используется тип доступа VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
  • VK_ATTACHMENT_LOAD_OP_DONT_CARE указывает, что предыдущее содержимое в области не обязательно должно сохраняться; содержимое вложения будет неопределенным внутри области рендеринга. Для вложений с форматом глубины/трафарета используется тип доступа VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT. Для вложений с цветовым форматом используется тип доступа VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.

См. также

VkAttachmentDescription

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkAttachmentLoadOp

VkAttachmentStoreOp(3)

Имя

VkAttachmentStoreOp - Указывает, как обрабатывается содержимое вложения в конце подпрохода

Спецификация C

Возможные значения VkAttachmentDescription::storeOp и stencilStoreOp, указывающие, как обрабатывается содержимое вложения:

typedef enum VkAttachmentStoreOp {
    VK_ATTACHMENT_STORE_OP_STORE = 0,
    VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
} VkAttachmentStoreOp;

Описание

  • VK_ATTACHMENT_STORE_OP_STORE указывает, что содержимое, сгенерированное во время прохода рендеринга и в области рендеринга, записывается в память. Для вложений с форматом глубины/трафарета используется тип доступа VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT. Для вложений с цветовым форматом используется тип доступа VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
  • VK_ATTACHMENT_STORE_OP_DONT_CARE указывает, что содержимое в области рендеринга не требуется после рендеринга и может быть отброшено; содержимое вложения будет неопределенным внутри области рендеринга. Для вложений с форматом глубины/трафарета используется тип доступа VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT. Для вложений с цветовым форматом используется тип доступа VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.

См. также

VkAttachmentDescription

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkAttachmentStoreOp

VkBlendFactor(3)

Имя

VkBlendFactor - Факторы смешивания буфера кадра

Спецификация C

Исходные и целевые факторы смешивания цвета и альфа-канала выбираются из перечисления:

typedef enum VkBlendFactor {
    VK_BLEND_FACTOR_ZERO = 0,
    VK_BLEND_FACTOR_ONE = 1,
    VK_BLEND_FACTOR_SRC_COLOR = 2,
    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
    VK_BLEND_FACTOR_DST_COLOR = 4,
    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
    VK_BLEND_FACTOR_SRC_ALPHA = 6,
    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
    VK_BLEND_FACTOR_DST_ALPHA = 8,
    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
    VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
    VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
    VK_BLEND_FACTOR_SRC1_COLOR = 15,
    VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
    VK_BLEND_FACTOR_SRC1_ALPHA = 17,
    VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
} VkBlendFactor;

Описание

Семантика каждого значения перечисления описана в таблице ниже:

Таблица 8. Коэффициенты смешивания
VkBlendFactor Коэффициенты смешивания RGB (Sr,Sg,Sb) или (Dr,Dg,Db) Коэффициент смешивания альфа-канала (Sa или Da)

VK_BLEND_FACTOR_ZERO

(0,0,0)

0

VK_BLEND_FACTOR_ONE

(1,1,1)

1

VK_BLEND_FACTOR_SRC_COLOR

(Rs0,Gs0,Bs0)

As0

VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR

(1-Rs0,1-Gs0,1-Bs0)

1-As0

VK_BLEND_FACTOR_DST_COLOR

(Rd,Gd,Bd)

Ad

VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR

(1-Rd,1-Gd,1-Bd)

1-Ad

VK_BLEND_FACTOR_SRC_ALPHA

(As0,As0,As0)

As0

VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA

(1-As0,1-As0,1-As0)

1-As0

VK_BLEND_FACTOR_DST_ALPHA

(Ad,Ad,Ad)

Ad

VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA

(1-Ad,1-Ad,1-Ad)

1-Ad

VK_BLEND_FACTOR_CONSTANT_COLOR

(Rc,Gc,Bc)

Ac

VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR

(1-Rc,1-Gc,1-Bc)

1-Ac

VK_BLEND_FACTOR_CONSTANT_ALPHA

(Ac,Ac,Ac)

Ac

VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA

(1-Ac,1-Ac,1-Ac)

1-Ac

VK_BLEND_FACTOR_SRC_ALPHA_SATURATE

(f,f,f); f = min(As0,1-Ad)

1

VK_BLEND_FACTOR_SRC1_COLOR

(Rs1,Gs1,Bs1)

As1

VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR

(1-Rs1,1-Gs1,1-Bs1)

1-As1

VK_BLEND_FACTOR_SRC1_ALPHA

(As1,As1,As1)

As1

VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA

(1-As1,1-As1,1-As1)

1-As1

В этой таблице используются следующие соглашения:

  • Rs0,Gs0,Bs0 и As0 представляют собой первый исходный цвет R, G, B и A компоненты соответственно, для местоположения выходного фрагмента, соответствующего смешиваемому цветовому вложению.
  • Rs1,Gs1,Bs1 и As1 представляют собой второй исходный цвет R, G, B и A компоненты соответственно, используемые в режимах смешивания двух источников, для местоположения выходного фрагмента, соответствующего смешиваемому цветовому вложению.
  • Rd,Gd,Bd и Ad представляют собой R, G, B и A компоненты цвета назначения. То есть, цвет, в настоящее время находящийся в соответствующем цветовом вложении для этого фрагмента/образца.
  • Rc,Gc,Bc и Ac представляют собой компоненты константы смешивания R, G, B и A соответственно.

См. также

VkPipelineColorBlendAttachmentState

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBlendFactor

VkBlendOp(3)

Название

VkBlendOp - Операции смешивания буфера кадра

Спецификация C

После того, как выбраны исходные и целевые коэффициенты смешивания, они вместе с исходными и целевыми компонентами передаются в операции смешивания. Компоненты RGB и альфа-канала могут использовать разные операции. Возможные значения VkBlendOp, указывающие операции, следующие:

typedef enum VkBlendOp {
    VK_BLEND_OP_ADD = 0,
    VK_BLEND_OP_SUBTRACT = 1,
    VK_BLEND_OP_REVERSE_SUBTRACT = 2,
    VK_BLEND_OP_MIN = 3,
    VK_BLEND_OP_MAX = 4,
} VkBlendOp;

Описание

Семантика каждой базовой операции смешивания описана в таблице ниже:

Таблица 9. Базовые операции смешивания
VkBlendOp Компоненты RGB Компонент альфа-канала

VK_BLEND_OP_ADD

R = Rs0 × Sr + Rd × Dr
G = Gs0 × Sg + Gd × Dg
B = Bs0 × Sb + Bd × Db

A = As0 × Sa + Ad × Da

VK_BLEND_OP_SUBTRACT

R = Rs0 × Sr - Rd × Dr
G = Gs0 × Sg - Gd × Dg
B = Bs0 × Sb - Bd × Db

A = As0 × Sa - Ad × Da

VK_BLEND_OP_REVERSE_SUBTRACT

R = Rd × Dr - Rs0 × Sr
G = Gd × Dg - Gs0 × Sg
B = Bd × Db - Bs0 × Sb

A = Ad × Da - As0 × Sa

VK_BLEND_OP_MIN

R = min(Rs0,Rd)
G = min(Gs0,Gd)
B = min(Bs0,Bd)

A = min(As0,Ad)

VK_BLEND_OP_MAX

R = max(Rs0,Rd)
G = max(Gs0,Gd)
B = max(Bs0,Bd)

A = max(As0,Ad)

В этой таблице используются следующие соглашения:

  • Rs0, Gs0, Bs0 и As0 представляют собой компоненты первого исходного цвета R, G, B и A соответственно.
  • Rd, Gd, Bd и Ad представляют собой компоненты R, G, B и A цвета назначения. То есть, цвет, в настоящее время находящийся в соответствующем цветовом приложении для этого фрагмента/образца.
  • Sr, Sg, Sb и Sa представляют собой компоненты коэффициента смешивания источника R, G, B и A соответственно.
  • Dr, Dg, Db и Da представляют собой компоненты коэффициента смешивания назначения R, G, B и A соответственно.

Операция смешивания создает новый набор значений R, G, B и A, которые записываются в приложение буфера кадра. Если смешивание не включено для этого приложения, то R, G, B и A назначаются Rs0, Gs0, Bs0 и As0 соответственно.

Если цветовое приложение является фиксированного размера, компоненты исходных и целевых значений и коэффициентов смешивания обрезаются до [0,1] или [-1,1] соответственно для неподписанного нормализованного или подписанного нормализованного цветового приложения перед вычислением операций смешивания. Если цветовое приложение имеет формат с плавающей запятой, обрезка не происходит.

См. также

VkPipelineColorBlendAttachmentState

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBlendOp

VkBorderColor(3)

Имя

VkBorderColor - Указывает цвет границы, используемый для поиска текстур

Спецификация C

Возможные значения VkSamplerCreateInfo::borderColor, указывающие цвет границы, используемый для поиска текстур, следующие:

typedef enum VkBorderColor {
    VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
    VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
    VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
    VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3,
    VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4,
    VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
} VkBorderColor;

Описание

  • VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK задает прозрачный черный цвет в формате с плавающей запятой.
  • VK_BORDER_COLOR_INT_TRANSPARENT_BLACK задает прозрачный черный цвет в целочисленном формате.
  • VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK задает непрозрачный черный цвет в формате с плавающей запятой.
  • VK_BORDER_COLOR_INT_OPAQUE_BLACK задает непрозрачный черный цвет в целочисленном формате.
  • VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE задает непрозрачный белый цвет в формате с плавающей запятой.
  • VK_BORDER_COLOR_INT_OPAQUE_WHITE задает непрозрачный белый цвет в целочисленном формате.

Эти цвета подробно описаны в Texel Replacement.

См. также

VkSamplerCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBorderColor

VkBufferCreateFlagBits(3)

Имя

VkBufferCreateFlagBits - Битовая маска, указывающая дополнительные параметры буфера

Спецификация C

Биты, которые могут быть установлены в VkBufferCreateInfo::flags, указывающие дополнительные параметры буфера, следующие:

typedef enum VkBufferCreateFlagBits {
    VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
} VkBufferCreateFlagBits;

Описание

  • VK_BUFFER_CREATE_SPARSE_BINDING_BIT указывает, что буфер будет поддерживаться с помощью разреженного связывания памяти.
  • VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT указывает, что буфер может частично поддерживаться с помощью разреженного связывания памяти. Буферы, созданные с этим флагом, также должны быть созданы с флагом VK_BUFFER_CREATE_SPARSE_BINDING_BIT.
  • VK_BUFFER_CREATE_SPARSE_ALIASED_BIT указывает, что буфер будет поддерживаться с помощью разреженного связывания памяти с диапазонами памяти, которые могут одновременно поддерживать другой буфер (или другую часть того же буфера). Буферы, созданные с этим флагом, также должны быть созданы с флагом VK_BUFFER_CREATE_SPARSE_BINDING_BIT.

См. Sparse Resource Features и Physical Device Features для получения подробной информации о функциях разреженной памяти, поддерживаемых на устройстве.

См. также

VkBufferCreateFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferCreateFlagBits

VkBufferUsageFlagBits(3)

Имя

VkBufferUsageFlagBits - Битовая маска, указывающая допустимое использование буфера

Спецификация C

Биты, которые могут быть установлены в VkBufferCreateInfo::usage, указывающие поведение использования буфера, следующие:

typedef enum VkBufferUsageFlagBits {
    VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
    VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
    VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
    VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
    VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
    VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040,
    VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
    VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
} VkBufferUsageFlagBits;

Описание

  • VK_BUFFER_USAGE_TRANSFER_SRC_BIT указывает, что буфер может использоваться в качестве источника команды передачи (см. определение VK_PIPELINE_STAGE_TRANSFER_BIT).
  • VK_BUFFER_USAGE_TRANSFER_DST_BIT указывает, что буфер может использоваться в качестве получателя команды передачи.
  • VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT указывает, что буфер может использоваться для создания VkBufferView, подходящего для размещения в слоте VkDescriptorSet типа VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER.
  • VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT указывает, что буфер может использоваться для создания VkBufferView, подходящего для размещения в слоте VkDescriptorSet типа VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER.
  • VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT указывает, что буфер может использоваться в VkDescriptorBufferInfo, подходящем для размещения в слоте VkDescriptorSet типа VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER или VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
  • VK_BUFFER_USAGE_STORAGE_BUFFER_BIT указывает, что буфер может использоваться в VkDescriptorBufferInfo, подходящем для размещения в слоте VkDescriptorSet типа VK_DESCRIPTOR_TYPE_STORAGE_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
  • VK_BUFFER_USAGE_INDEX_BUFFER_BIT указывает, что буфер подходит для передачи в качестве параметра buffer в vkCmdBindIndexBuffer.
  • VK_BUFFER_USAGE_VERTEX_BUFFER_BIT указывает, что буфер подходит для передачи в качестве элемента массива pBuffers в vkCmdBindVertexBuffers.
  • VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT указывает, что буфер подходит для передачи в качестве параметра buffer в vkCmdDrawIndirect, vkCmdDrawIndexedIndirect или vkCmdDispatchIndirect.

См. также

VkBufferUsageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferUsageFlagBits

VkColorComponentFlagBits(3)

Имя

VkColorComponentFlagBits - Битовая маска, управляющая тем, какие компоненты записываются в буфер кадра

Спецификация C

Биты, которые могут быть установлены в VkPipelineColorBlendAttachmentState::colorWriteMask для определения того, записываются ли окончательные цветовые значения R, G, B и A в приложение буфера кадра, следующие:

typedef enum VkColorComponentFlagBits {
    VK_COLOR_COMPONENT_R_BIT = 0x00000001,
    VK_COLOR_COMPONENT_G_BIT = 0x00000002,
    VK_COLOR_COMPONENT_B_BIT = 0x00000004,
    VK_COLOR_COMPONENT_A_BIT = 0x00000008,
} VkColorComponentFlagBits;

Описание

  • VK_COLOR_COMPONENT_R_BIT указывает, что значение R записывается в цветовое приложение для соответствующего образца. В противном случае значение в памяти не изменяется.
  • VK_COLOR_COMPONENT_G_BIT указывает, что значение G записывается в цветовое приложение для соответствующего образца. В противном случае значение в памяти не изменяется.
  • VK_COLOR_COMPONENT_B_BIT указывает, что значение B записывается в цветовое приложение для соответствующего образца. В противном случае значение в памяти не изменяется.
  • VK_COLOR_COMPONENT_A_BIT указывает, что значение A записывается в цветовое приложение для соответствующего образца. В противном случае значение в памяти не изменяется.

Операция маски записи цвета применяется независимо от того, включено ли смешивание.

См. также

VkColorComponentFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkColorComponentFlagBits

VkCommandBufferLevel(3)

Имя

VkCommandBufferLevel - Перечислитель, указывающий уровень буфера команд

Спецификация C

Возможные значения VkCommandBufferAllocateInfo::flags, указывающие уровень буфера команд, следующие:

typedef enum VkCommandBufferLevel {
    VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
    VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
} VkCommandBufferLevel;

Описание

  • VK_COMMAND_BUFFER_LEVEL_PRIMARY указывает основной буфер команд.
  • VK_COMMAND_BUFFER_LEVEL_SECONDARY указывает вторичный буфер команд.

См. также

VkCommandBufferAllocateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandBufferLevel

VkCommandBufferResetFlagBits(3)

Имя

VkCommandBufferResetFlagBits - Битовая маска, управляющая поведением сброса буфера команд

Спецификация C

Биты, которые могут быть установлены в vkResetCommandBuffer::flags для управления операцией сброса, следующие:

typedef enum VkCommandBufferResetFlagBits {
    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
} VkCommandBufferResetFlagBits;

Описание

  • VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT указывает, что большинство или все используемые в данный момент буфером команд ресурсы памяти должны быть возвращены в родительский пул команд. Если этот флаг не установлен, то буфер команд может удерживать ресурсы памяти и повторно использовать их при записи команд. commandBuffer перемещается в начальное состояние.

См. также

VkCommandBufferResetFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

END_OF_DOCUMENT_MARKER

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandBufferResetFlagBits

VkCommandBufferUsageFlagBits(3)

Имя

VkCommandBufferUsageFlagBits - Битовая маска, указывающая поведение использования буфера команд

C Спецификация

Биты, которые можно установить в VkCommandBufferBeginInfo::flags для указания поведения использования буфера команд:

typedef enum VkCommandBufferUsageFlagBits {
    VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
    VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
    VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
} VkCommandBufferUsageFlagBits;

Описание

  • VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT указывает, что каждая запись буфера команд будет отправлена только один раз, и буфер команд будет сброшен и записан снова между каждой отправкой.
  • VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT указывает, что вторичный буфер команд считается полностью находящимся внутри прохода отрисовки. Если это первичный буфер команд, то этот бит игнорируется.
  • VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT указывает, что буфер команд может быть повторно отправлен в очередь, пока он находится в состоянии ожидания, и записан в несколько первичных буферов команд.

См. также

VkCommandBufferUsageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandBufferUsageFlagBits

VkCommandPoolCreateFlagBits(3)

Имя

VkCommandPoolCreateFlagBits - Битовая маска, указывающая поведение использования пула команд

C Спецификация

Биты, которые можно установить в VkCommandPoolCreateInfo::flags для указания поведения использования пула команд:

typedef enum VkCommandPoolCreateFlagBits {
    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
} VkCommandPoolCreateFlagBits;

Описание

  • VK_COMMAND_POOL_CREATE_TRANSIENT_BIT указывает, что буферы команд, выделенные из пула, будут кратковременными, а это значит, что они будут сброшены или освобождены в относительно короткие сроки. Этот флаг может использоваться реализацией для управления поведением выделения памяти внутри пула.
  • VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT позволяет любому буферу команд, выделенному из пула, быть индивидуально сброшенным в начальное состояние; либо путем вызова vkResetCommandBuffer, либо путем неявного сброса при вызове vkBeginCommandBuffer. Если этот флаг не установлен в пуле, то vkResetCommandBuffer не должен вызываться ни для одного буфера команд, выделенного из этого пула.

См. также

VkCommandPoolCreateFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandPoolCreateFlagBits

VkCommandPoolResetFlagBits(3)

Имя

VkCommandPoolResetFlagBits - Битовая маска, контролирующая поведение сброса пула команд

C Спецификация

Биты, которые можно установить в vkResetCommandPool::flags для управления операцией сброса:

typedef enum VkCommandPoolResetFlagBits {
    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
} VkCommandPoolResetFlagBits;

Описание

  • VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT указывает, что сброс пула команд возвращает все ресурсы из пула команд обратно в систему.

См. также

VkCommandPoolResetFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandPoolResetFlagBits

VkCompareOp(3)

Имя

VkCompareOp - Функция сравнения трафарета

C Спецификация

Возможные значения VkStencilOpState::compareOp, указывающие функцию сравнения трафарета:

typedef enum VkCompareOp {
    VK_COMPARE_OP_NEVER = 0,
    VK_COMPARE_OP_LESS = 1,
    VK_COMPARE_OP_EQUAL = 2,
    VK_COMPARE_OP_LESS_OR_EQUAL = 3,
    VK_COMPARE_OP_GREATER = 4,
    VK_COMPARE_OP_NOT_EQUAL = 5,
    VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
    VK_COMPARE_OP_ALWAYS = 7,
} VkCompareOp;

Описание

  • VK_COMPARE_OP_NEVER указывает, что тест никогда не проходит.
  • VK_COMPARE_OP_LESS указывает, что тест проходит, когда R < S.
  • VK_COMPARE_OP_EQUAL указывает, что тест проходит, когда R = S.
  • VK_COMPARE_OP_LESS_OR_EQUAL указывает, что тест проходит, когда R ≤ S.
  • VK_COMPARE_OP_GREATER указывает, что тест проходит, когда R > S.
  • VK_COMPARE_OP_NOT_EQUAL указывает, что тест проходит, когда R ≠ S.
  • VK_COMPARE_OP_GREATER_OR_EQUAL указывает, что тест проходит, когда R ≥ S.
  • VK_COMPARE_OP_ALWAYS указывает, что тест всегда проходит.

См. также

VkPipelineDepthStencilStateCreateInfo, VkSamplerCreateInfo, VkStencilOpState

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCompareOp

VkComponentSwizzle(3)

Имя

VkComponentSwizzle - Указывает, как компонент перемешивается

C Спецификация

Возможные значения элементов VkComponentMapping, указывающие значения компонентов, размещаемые в каждом компоненте выходного вектора:

typedef enum VkComponentSwizzle {
    VK_COMPONENT_SWIZZLE_IDENTITY = 0,
    VK_COMPONENT_SWIZZLE_ZERO = 1,
    VK_COMPONENT_SWIZZLE_ONE = 2,
    VK_COMPONENT_SWIZZLE_R = 3,
    VK_COMPONENT_SWIZZLE_G = 4,
    VK_COMPONENT_SWIZZLE_B = 5,
    VK_COMPONENT_SWIZZLE_A = 6,
} VkComponentSwizzle;

Описание

  • VK_COMPONENT_SWIZZLE_IDENTITY указывает, что компонент устанавливается в тождественное перемешивание.
  • VK_COMPONENT_SWIZZLE_ZERO указывает, что компонент устанавливается в ноль.
  • VK_COMPONENT_SWIZZLE_ONE указывает, что компонент устанавливается в значение 1 или 1.0 в зависимости от того, является ли тип формата представления изображения целочисленным или с плавающей точкой соответственно, как определено в разделе Определение формата для каждого VkFormat.
  • VK_COMPONENT_SWIZZLE_R указывает, что компонент устанавливается в значение компонента R изображения.
  • VK_COMPONENT_SWIZZLE_G указывает, что компонент устанавливается в значение компонента G изображения.
  • VK_COMPONENT_SWIZZLE_B указывает, что компонент устанавливается в значение компонента B изображения.
  • VK_COMPONENT_SWIZZLE_A указывает, что компонент устанавливается в значение компонента A изображения.

Установка тождественного перемешивания на компонент эквивалентна установке тождественного отображения на этот компонент. То есть:

Таблица 10. Сопоставления компонентов, эквивалентные VK_COMPONENT_SWIZZLE_IDENTITY
Компонент Тождественное отображение

components.r

VK_COMPONENT_SWIZZLE_R

components.g

VK_COMPONENT_SWIZZLE_G

components.b

VK_COMPONENT_SWIZZLE_B

components.a

VK_COMPONENT_SWIZZLE_A

См. также

VkComponentMapping

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkComponentSwizzle

VkCullModeFlagBits(3)

Имя

VkCullModeFlagBits - Битовая маска, контролирующая отсечение треугольников

C Спецификация

После определения ориентации треугольников они отсекаются в соответствии со свойством VkPipelineRasterizationStateCreateInfo::cullMode текущего активного конвейера. Возможные значения:

typedef enum VkCullModeFlagBits {
    VK_CULL_MODE_NONE = 0,
    VK_CULL_MODE_FRONT_BIT = 0x00000001,
    VK_CULL_MODE_BACK_BIT = 0x00000002,
    VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
} VkCullModeFlagBits;

Описание

  • VK_CULL_MODE_NONE указывает, что треугольники не отбрасываются
  • VK_CULL_MODE_FRONT_BIT указывает, что треугольники с передней гранью отбрасываются
  • VK_CULL_MODE_BACK_BIT указывает, что треугольники с задней гранью отбрасываются
  • VK_CULL_MODE_FRONT_AND_BACK указывает, что все треугольники отбрасываются.

После отсечения фрагменты создаются для любых треугольников, которые не были отброшены.

См. также

VkCullModeFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCullModeFlagBits

VkDependencyFlagBits(3)

Имя

VkDependencyFlagBits - Битовая маска, указывающая, как формируются зависимости выполнения и памяти

C Спецификация

Биты, которые можно установить в vkCmdPipelineBarrier::dependencyFlags, указывающие, как формируются зависимости выполнения и памяти:

typedef enum VkDependencyFlagBits {
    VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
} VkDependencyFlagBits;

Описание

  • VK_DEPENDENCY_BY_REGION_BIT указывает, что зависимости будут локальными для буфера кадра.

См. также

VkDependencyFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDependencyFlagBits

VkDescriptorPoolCreateFlagBits(3)

Имя

VkDescriptorPoolCreateFlagBits - Битовая маска, определяющая определенные поддерживаемые операции в пуле дескрипторов

C Спецификация

Биты, которые можно установить в VkDescriptorPoolCreateInfo::flags для включения операций в пуле дескрипторов:

typedef enum VkDescriptorPoolCreateFlagBits {
    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
} VkDescriptorPoolCreateFlagBits;

Описание

  • VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT указывает, что наборы дескрипторов могут возвращать свои индивидуальные выделения в пул, т.е. разрешены все vkAllocateDescriptorSets, vkFreeDescriptorSets и vkResetDescriptorPool. В противном случае наборы дескрипторов, выделенные из пула, не должны быть индивидуально освобождены обратно в пул, т.е. разрешены только vkAllocateDescriptorSets и vkResetDescriptorPool.

См. также

VkDescriptorPoolCreateFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorPoolCreateFlagBits

VkDescriptorSetLayoutCreateFlagBits(3)

Имя

VkDescriptorSetLayoutCreateFlagBits - Битовая маска, определяющая свойства макета набора дескрипторов

C Спецификация

Биты, которые можно установить в VkDescriptorSetLayoutCreateInfo::flags для указания параметров макета набора дескрипторов:

typedef enum VkDescriptorSetLayoutCreateFlagBits {
} VkDescriptorSetLayoutCreateFlagBits;

См. также

VkDescriptorSetLayoutCreateFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorSetLayoutCreateFlagBits

VkDescriptorType(3)

Имя

VkDescriptorType - Указывает тип дескриптора в наборе дескрипторов

C Спецификация

Тип дескрипторов в наборе дескрипторов задается VkWriteDescriptorSet::descriptorType, который должен быть одним из значений:

typedef enum VkDescriptorType {
    VK_DESCRIPTOR_TYPE_SAMPLER = 0,
    VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
    VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
    VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
    VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
    VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
    VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
} VkDescriptorType;

Описание

  • VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, или VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC указывают, что элементы массива VkWriteDescriptorSet::pBufferInfo структур VkDescriptorBufferInfo будут использоваться для обновления дескрипторов, а другие массивы будут игнорироваться.
  • VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER или VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER указывают, что массив VkWriteDescriptorSet::pTexelBufferView будет использоваться для обновления дескрипторов, а другие массивы будут игнорироваться.
  • VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, или VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT указывают, что элементы массива VkWriteDescriptorSet::pImageInfo структур VkDescriptorImageInfo будут использоваться для обновления дескрипторов, а другие массивы будут игнорироваться.

См. также

VkDescriptorPoolSize, VkDescriptorSetLayoutBinding, VkWriteDescriptorSet

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorType

VkDynamicState(3)

Имя

VkDynamicState - Указывает, какое динамическое состояние берется из команд динамического состояния

C Спецификация

Источник различных частей динамического состояния задается свойством VkPipelineDynamicStateCreateInfo::pDynamicStates текущего активного конвейера, каждый элемент которого должен быть одним из значений:

typedef enum VkDynamicState {
    VK_DYNAMIC_STATE_VIEWPORT = 0,
    VK_DYNAMIC_STATE_SCISSOR = 1,
    VK_DYNAMIC_STATE_LINE_WIDTH = 2,
    VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
    VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
    VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
    VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
    VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
    VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
} VkDynamicState;

Описание

  • VK_DYNAMIC_STATE_VIEWPORT указывает, что состояние pViewports в VkPipelineViewportStateCreateInfo будет игнорироваться и должно устанавливаться динамически с помощью vkCmdSetViewport перед любыми командами отрисовки. Количество видовых экранов, используемых конвейером, по-прежнему задается членом viewportCount VkPipelineViewportStateCreateInfo.
  • VK_DYNAMIC_STATE_SCISSOR указывает, что состояние pScissors в VkPipelineViewportStateCreateInfo будет игнорироваться и должно устанавливаться динамически с помощью vkCmdSetScissor перед любыми командами отрисовки. Количество прямоугольников отсечения, используемых конвейером, по-прежнему задается членом scissorCount VkPipelineViewportStateCreateInfo.
  • VK_DYNAMIC_STATE_LINE_WIDTH указывает, что состояние lineWidth в VkPipelineRasterizationStateCreateInfo будет игнорироваться и должно устанавливаться динамически с помощью vkCmdSetLineWidth перед любыми командами отрисовки, которые генерируют примитивы линий для растеризатора.
  • VK_DYNAMIC_STATE_DEPTH_BIAS указывает, что состояния depthBiasConstantFactor, depthBiasClamp и depthBiasSlopeFactor в VkPipelineRasterizationStateCreateInfo будут игнорироваться и должны устанавливаться динамически с помощью vkCmdSetDepthBias перед выполнением любых отрисовок с depthBiasEnable в VkPipelineRasterizationStateCreateInfo установленным в VK_TRUE.
  • VK_DYNAMIC_STATE_BLEND_CONSTANTS указывает, что состояние blendConstants в VkPipelineColorBlendStateCreateInfo будет игнорироваться и должно устанавливаться динамически с помощью vkCmdSetBlendConstants перед выполнением любых отрисовок с состоянием конвейера, у которого член VkPipelineColorBlendAttachmentState blendEnable установлен в VK_TRUE, и любых функций смешивания, использующих постоянный цвет смешивания.
  • VK_DYNAMIC_STATE_DEPTH_BOUNDS указывает, что состояния minDepthBounds и maxDepthBounds VkPipelineDepthStencilStateCreateInfo будут игнорироваться и должны устанавливаться динамически с помощью vkCmdSetDepthBounds перед выполнением любых отрисовок с состоянием конвейера, у которого член VkPipelineDepthStencilStateCreateInfo depthBoundsTestEnable установлен в VK_TRUE.
  • VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK указывает, что состояние compareMask в VkPipelineDepthStencilStateCreateInfo как для front, так и для back будет игнорироваться и должно устанавливаться динамически с помощью vkCmdSetStencilCompareMask перед выполнением любых отрисовок с состоянием конвейера, у которого член VkPipelineDepthStencilStateCreateInfo stencilTestEnable установлен в VK_TRUE
  • VK_DYNAMIC_STATE_STENCIL_WRITE_MASK указывает, что состояние writeMask в VkPipelineDepthStencilStateCreateInfo как для front, так и для back будет игнорироваться и должно устанавливаться динамически с помощью vkCmdSetStencilWriteMask перед выполнением любых отрисовок с состоянием конвейера, у которого член VkPipelineDepthStencilStateCreateInfo stencilTestEnable установлен в VK_TRUE
  • VK_DYNAMIC_STATE_STENCIL_REFERENCE указывает, что состояние reference в VkPipelineDepthStencilStateCreateInfo как для front, так и для back будет игнорироваться и должно устанавливаться динамически с помощью vkCmdSetStencilReference перед выполнением любых отрисовок с состоянием конвейера, у которого член VkPipelineDepthStencilStateCreateInfo stencilTestEnable установлен в VK_TRUE

См. также

VkPipelineDynamicStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDynamicState

VkFenceCreateFlagBits(3)

Имя

VkFenceCreateFlagBits - Битовая маска, определяющая начальное состояние и поведение ограждения

C Спецификация

typedef enum VkFenceCreateFlagBits {
    VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
} VkFenceCreateFlagBits;

Описание

  • VK_FENCE_CREATE_SIGNALED_BIT указывает, что объект ограждения создается в установленном состоянии. В противном случае он создается в несброшенном состоянии.

См. также

VkFenceCreateFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFenceCreateFlagBits

VkFilter(3)

Имя

VkFilter - Указывает фильтры, используемые для поиска текстур

C Спецификация

Возможные значения параметров VkSamplerCreateInfo::magFilter и minFilter, указывающие фильтры, используемые для поиска текстур:

typedef enum VkFilter {
    VK_FILTER_NEAREST = 0,
    VK_FILTER_LINEAR = 1,
} VkFilter;

Описание

  • VK_FILTER_NEAREST указывает ближайшую фильтрацию.
  • VK_FILTER_LINEAR указывает линейную фильтрацию.

Эти фильтры подробно описаны в Texel Filtering.

См. также

VkSamplerCreateInfo, vkCmdBlitImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFilter

VkFormat(3)

Имя

VkFormat - Доступные форматы изображений

C Спецификация

Форматы изображений, которые можно передавать в команды Vulkan и которые могут возвращаться из них:

typedef enum VkFormat {
    VK_FORMAT_UNDEFINED = 0,
    VK_FORMAT_R4G4_UNORM_PACK8 = 1,
    VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
    VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
    VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
    VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
    VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
    VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
    VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
    VK_FORMAT_R8_UNORM = 9,
    VK_FORMAT_R8_SNORM = 10,
    VK_FORMAT_R8_USCALED = 11,
    VK_FORMAT_R8_SSCALED = 12,
    VK_FORMAT_R8_UINT = 13,
    VK_FORMAT_R8_SINT = 14,
    VK_FORMAT_R8_SRGB = 15,
    VK_FORMAT_R8G8_UNORM = 16,
    VK_FORMAT_R8G8_SNORM = 17,
    VK_FORMAT_R8G8_USCALED = 18,
    VK_FORMAT_R8G8_SSCALED = 19,
    VK_FORMAT_R8G8_UINT = 20,
    VK_FORMAT_R8G8_SINT = 21,
    VK_FORMAT_R8G8_SRGB = 22,
    VK_FORMAT_R8G8B8_UNORM = 23,
    VK_FORMAT_R8G8B8_SNORM = 24,
    VK_FORMAT_R8G8B8_USCALED = 25,
    VK_FORMAT_R8G8B8_SSCALED = 26,
    VK_FORMAT_R8G8B8_UINT = 27,
    VK_FORMAT_R8G8B8_SINT = 28,
    VK_FORMAT_R8G8B8_SRGB = 29,
    VK_FORMAT_B8G8R8_UNORM = 30,
    VK_FORMAT_B8G8R8_SNORM = 31,
    VK_FORMAT_B8G8R8_USCALED = 32,
    VK_FORMAT_B8G8R8_SSCALED = 33,
    VK_FORMAT_B8G8R8_UINT = 34,
    VK_FORMAT_B8G8R8_SINT = 35,
    VK_FORMAT_B8G8R8_SRGB = 36,
    VK_FORMAT_R8G8B8A8_UNORM = 37,
    VK_FORMAT_R8G8B8A8_SNORM = 38,
    VK_FORMAT_R8G8B8A8_USCALED = 39,
    VK_FORMAT_R8G8B8A8_SSCALED = 40,
    VK_FORMAT_R8G8B8A8_UINT = 41,
    VK_FORMAT_R8G8B8A8_SINT = 42,
    VK_FORMAT_R8G8B8A8_SRGB = 43,
    VK_FORMAT_B8G8R8A8_UNORM = 44,
    VK_FORMAT_B8G8R8A8_SNORM = 45,
    VK_FORMAT_B8G8R8A8_USCALED = 46,
    VK_FORMAT_B8G8R8A8_SSCALED = 47,
    VK_FORMAT_B8G8R8A8_UINT = 48,
    VK_FORMAT_B8G8R8A8_SINT = 49,
    VK_FORMAT_B8G8R8A8_SRGB = 50,
    VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
    VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
    VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
    VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
    VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
    VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
    VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
    VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
    VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
    VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
    VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
    VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
    VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
    VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
    VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
    VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
    VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
    VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
    VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
    VK_FORMAT_R16_UNORM = 70,
    VK_FORMAT_R16_SNORM = 71,
    VK_FORMAT_R16_USCALED = 72,
    VK_FORMAT_R16_SSCALED = 73,
    VK_FORMAT_R16_UINT = 74,
    VK_FORMAT_R16_SINT = 75,
    VK_FORMAT_R16_SFLOAT = 76,
    VK_FORMAT_R16G16_UNORM = 77,
    VK_FORMAT_R16G16_SNORM = 78,
    VK_FORMAT_R16G16_USCALED = 79,
    VK_FORMAT_R16G16_SSCALED = 80,
    VK_FORMAT_R16G16_UINT = 81,
    VK_FORMAT_R16G16_SINT = 82,
    VK_FORMAT_R16G16_SFLOAT = 83,
    VK_FORMAT_R16G16B16_UNORM = 84,
    VK_FORMAT_R16G16B16_SNORM = 85,
    VK_FORMAT_R16G16B16_USCALED = 86,
    VK_FORMAT_R16G16B16_SSCALED = 87,
    VK_FORMAT_R16G16B16_UINT = 88,
    VK_FORMAT_R16G16B16_SINT = 89,
    VK_FORMAT_R16G16B16_SFLOAT = 90,
    VK_FORMAT_R16G16B16A16_UNORM = 91,
    VK_FORMAT_R16G16B16A16_SNORM = 92,
    VK_FORMAT_R16G16B16A16_USCALED = 93,
    VK_FORMAT_R16G16B16A16_SSCALED = 94,
    VK_FORMAT_R16G16B16A16_UINT = 95,
    VK_FORMAT_R16G16B16A16_SINT = 96,
    VK_FORMAT_R16G16B16A16_SFLOAT = 97,
    VK_FORMAT_R32_UINT = 98,
    VK_FORMAT_R32_SINT = 99,
    VK_FORMAT_R32_SFLOAT = 100,
    VK_FORMAT_R32G32_UINT = 101,
    VK_FORMAT_R32G32_SINT = 102,
    VK_FORMAT_R32G32_SFLOAT = 103,
    VK_FORMAT_R32G32B32_UINT = 104,
    VK_FORMAT_R32G32B32_SINT = 105,
    VK_FORMAT_R32G32B32_SFLOAT = 106,
    VK_FORMAT_R32G32B32A32_UINT = 107,
    VK_FORMAT_R32G32B32A32_SINT = 108,
    VK_FORMAT_R32G32B32A32_SFLOAT = 109,
    VK_FORMAT_R64_UINT = 110,
    VK_FORMAT_R64_SINT = 111,
    VK_FORMAT_R64_SFLOAT = 112,
    VK_FORMAT_R64G64_UINT = 113,
    VK_FORMAT_R64G64_SINT = 114,
    VK_FORMAT_R64G64_SFLOAT = 115,
    VK_FORMAT_R64G64B64_UINT = 116,
    VK_FORMAT_R64G64B64_SINT = 117,
    VK_FORMAT_R64G64B64_SFLOAT = 118,
    VK_FORMAT_R64G64B64A64_UINT = 119,
    VK_FORMAT_R64G64B64A64_SINT = 120,
    VK_FORMAT_R64G64B64A64_SFLOAT = 121,
    VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
    VK_FORMAT_D16_UNORM = 124,
    VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
    VK_FORMAT_D32_SFLOAT = 126,
    VK_FORMAT_S8_UINT = 127,
    VK_FORMAT_D16_UNORM_S8_UINT = 128,
    VK_FORMAT_D24_UNORM_S8_UINT = 129,
    VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
    VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
    VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
    VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
    VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
    VK_FORMAT_BC2_UNORM_BLOCK = 135,
    VK_FORMAT_BC2_SRGB_BLOCK = 136,
    VK_FORMAT_BC3_UNORM_BLOCK = 137,
    VK_FORMAT_BC3_SRGB_BLOCK = 138,
    VK_FORMAT_BC4_UNORM_BLOCK = 139,
    VK_FORMAT_BC4_SNORM_BLOCK = 140,
    VK_FORMAT_BC5_UNORM_BLOCK = 141,
    VK_FORMAT_BC5_SNORM_BLOCK = 142,
    VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
    VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
    VK_FORMAT_BC7_UNORM_BLOCK = 145,
    VK_FORMAT_BC7_SRGB_BLOCK = 146,
    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
    VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
    VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
    VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
    VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
    VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
    VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
    VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
    VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
    VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
    VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
    VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
    VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
    VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
    VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
    VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
    VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
    VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
    VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
    VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
    VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
    VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
    VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
    VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
    VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
    VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
    VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
    VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
    VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
    VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
    VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
    VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
    VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
} VkFormat;

Описание

  • VK_FORMAT_UNDEFINED указывает, что формат не указан.
  • VK_FORMAT_R4G4_UNORM_PACK8 задаёт двухкомпонентный, 8-битный упакованный беззнаковый нормализованный формат, имеющий 4-битный R-компонент в битах 4..7 и 4-битный G-компонент в битах 0..3.
  • VK_FORMAT_R4G4B4A4_UNORM_PACK16 задаёт четырёхкомпонентный, 16-битный упакованный беззнаковый нормализованный формат, имеющий 4-битный R-компонент в битах 12..15, 4-битный G-компонент в битах 8..11, 4-битный B-компонент в битах 4..7 и 4-битный A-компонент в битах 0..3.
  • VK_FORMAT_B4G4R4A4_UNORM_PACK16 задаёт четырёхкомпонентный, 16-битный упакованный беззнаковый нормализованный формат, имеющий 4-битный B-компонент в битах 12..15, 4-битный G-компонент в битах 8..11, 4-битный R-компонент в битах 4..7 и 4-битный A-компонент в битах 0..3.
  • VK_FORMAT_R5G6B5_UNORM_PACK16 задаёт трёхкомпонентный, 16-битный упакованный беззнаковый нормализованный формат, имеющий 5-битный R-компонент в битах 11..15, 6-битный G-компонент в битах 5..10 и 5-битный B-компонент в битах 0..4.
  • VK_FORMAT_B5G6R5_UNORM_PACK16 задаёт трёхкомпонентный, 16-битный упакованный беззнаковый нормализованный формат, имеющий 5-битный B-компонент в битах 11..15, 6-битный G-компонент в битах 5..10 и 5-битный R-компонент в битах 0..4.
  • VK_FORMAT_R5G5B5A1_UNORM_PACK16 задаёт четырёхкомпонентный, 16-битный упакованный беззнаковый нормализованный формат, имеющий 5-битный R-компонент в битах 11..15, 5-битный G-компонент в битах 6..10, 5-битный B-компонент в битах 1..5 и 1-битный A-компонент в бите 0.
  • VK_FORMAT_B5G5R5A1_UNORM_PACK16 задаёт четырёхкомпонентный, 16-битный упакованный беззнаковый нормализованный формат, имеющий 5-битный B-компонент в битах 11..15, 5-битный G-компонент в битах 6..10, 5-битный R-компонент в битах 1..5 и 1-битный A-компонент в бите 0.
  • VK_FORMAT_A1R5G5B5_UNORM_PACK16 задаёт четырёхкомпонентный, 16-битный упакованный беззнаковый нормализованный формат, имеющий 1-битный A-компонент в бите 15, 5-битный R-компонент в битах 10..14, 5-битный G-компонент в битах 5..9 и 5-битный B-компонент в битах 0..4.
  • VK_FORMAT_R8_UNORM задаёт однокомпонентный, 8-битный беззнаковый нормализованный формат, имеющий один 8-битный R-компонент.
  • VK_FORMAT_R8_SNORM задаёт однокомпонентный, 8-битный знаковый нормализованный формат, имеющий один 8-битный R-компонент.
  • VK_FORMAT_R8_USCALED задаёт однокомпонентный, 8-битный беззнаковый масштабированный целочисленный формат, имеющий один 8-битный R-компонент.
  • VK_FORMAT_R8_SSCALED задаёт однокомпонентный, 8-битный знаковый масштабированный целочисленный формат, имеющий один 8-битный R-компонент.
  • VK_FORMAT_R8_UINT задаёт однокомпонентный, 8-битный беззнаковый целочисленный формат, имеющий один 8-битный R-компонент.
  • VK_FORMAT_R8_SINT задаёт однокомпонентный, 8-битный знаковый целочисленный формат, имеющий один 8-битный R-компонент.
  • VK_FORMAT_R8_SRGB задаёт однокомпонентный, 8-битный беззнаковый нормализованный формат, имеющий один 8-битный R-компонент, хранящийся с нелинейным кодированием sRGB.
  • VK_FORMAT_R8G8_UNORM задаёт двухкомпонентный, 16-битный беззнаковый нормализованный формат, имеющий 8-битный R-компонент в байте 0 и 8-битный G-компонент в байте 1.
  • VK_FORMAT_R8G8_SNORM задаёт двухкомпонентный, 16-битный знаковый нормализованный формат, имеющий 8-битный R-компонент в байте 0 и 8-битный G-компонент в байте 1.
  • VK_FORMAT_R8G8_USCALED задаёт двухкомпонентный, 16-битный беззнаковый масштабированный целочисленный формат, имеющий 8-битный R-компонент в байте 0 и 8-битный G-компонент в байте 1.
  • VK_FORMAT_R8G8_SSCALED задаёт двухкомпонентный, 16-битный знаковый масштабированный целочисленный формат, имеющий 8-битный R-компонент в байте 0 и 8-битный G-компонент в байте 1.
  • VK_FORMAT_R8G8_UINT задаёт двухкомпонентный, 16-битный беззнаковый целочисленный формат, имеющий 8-битный R-компонент в байте 0 и 8-битный G-компонент в байте 1.
  • VK_FORMAT_R8G8_SINT задаёт двухкомпонентный, 16-битный знаковый целочисленный формат, имеющий 8-битный R-компонент в байте 0 и 8-битный G-компонент в байте 1.
  • VK_FORMAT_R8G8_SRGB задаёт двухкомпонентный, 16-битный беззнаковый нормализованный формат, имеющий 8-битный R-компонент, хранящийся с нелинейным кодированием sRGB в байте 0, и 8-битный G-компонент, хранящийся с нелинейным кодированием sRGB в байте 1.
  • VK_FORMAT_R8G8B8_UNORM задаёт трёхкомпонентный, 24-битный беззнаковый нормализованный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный B-компонент в байте 2.
  • VK_FORMAT_R8G8B8_SNORM задаёт трёхкомпонентный, 24-битный знаковый нормализованный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный B-компонент в байте 2.
  • VK_FORMAT_R8G8B8_USCALED задаёт трёхкомпонентный, 24-битный беззнаковый масштабированный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный B-компонент в байте 2.
  • VK_FORMAT_R8G8B8_SSCALED задаёт трёхкомпонентный, 24-битный знаковый масштабированный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный B-компонент в байте 2.
  • VK_FORMAT_R8G8B8_UINT задаёт трёхкомпонентный, 24-битный беззнаковый целочисленный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный B-компонент в байте 2.
  • VK_FORMAT_R8G8B8_SINT задаёт трёхкомпонентный, 24-битный знаковый целочисленный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный B-компонент в байте 2.
  • VK_FORMAT_R8G8B8_SRGB задаёт трёхкомпонентный, 24-битный беззнаковый нормализованный формат, имеющий 8-битный R-компонент, хранящийся с нелинейным кодированием sRGB в байте 0, 8-битный G-компонент, хранящийся с нелинейным кодированием sRGB в байте 1, и 8-битный B-компонент, хранящийся с нелинейным кодированием sRGB в байте 2.
  • VK_FORMAT_B8G8R8_UNORM задаёт трёхкомпонентный, 24-битный беззнаковый нормализованный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный R-компонент в байте 2.
  • VK_FORMAT_B8G8R8_SNORM задаёт трёхкомпонентный, 24-битный знаковый нормализованный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный R-компонент в байте 2.
  • VK_FORMAT_B8G8R8_USCALED задаёт трёхкомпонентный, 24-битный беззнаковый масштабированный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный R-компонент в байте 2.
  • VK_FORMAT_B8G8R8_SSCALED задаёт трёхкомпонентный, 24-битный знаковый масштабированный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный R-компонент в байте 2.
  • VK_FORMAT_B8G8R8_UINT задаёт трёхкомпонентный, 24-битный беззнаковый целочисленный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный R-компонент в байте 2.
  • VK_FORMAT_B8G8R8_SINT задаёт трёхкомпонентный, 24-битный знаковый целочисленный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1 и 8-битный R-компонент в байте 2.
  • VK_FORMAT_B8G8R8_SRGB задаёт трёхкомпонентный, 24-битный беззнаковый нормализованный формат, имеющий 8-битный B-компонент, хранящийся с нелинейным кодированием sRGB в байте 0, 8-битный G-компонент, хранящийся с нелинейным кодированием sRGB в байте 1, и 8-битный R-компонент, хранящийся с нелинейным кодированием sRGB в байте 2.
  • VK_FORMAT_R8G8B8A8_UNORM задаёт четырёхкомпонентный, 32-битный беззнаковый нормализованный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный B-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_R8G8B8A8_SNORM задаёт четырёхкомпонентный, 32-битный знаковый нормализованный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный B-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_R8G8B8A8_USCALED задаёт четырёхкомпонентный, 32-битный беззнаковый масштабированный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный B-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_R8G8B8A8_SSCALED задаёт четырёхкомпонентный, 32-битный знаковый масштабированный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный B-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_R8G8B8A8_UINT задаёт четырёхкомпонентный, 32-битный беззнаковый целочисленный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный B-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_R8G8B8A8_SINT задаёт четырёхкомпонентный, 32-битный знаковый целочисленный формат, имеющий 8-битный R-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный B-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_R8G8B8A8_SRGB задаёт четырёхкомпонентный, 32-битный беззнаковый нормализованный формат, имеющий 8-битный R-компонент, хранящийся с нелинейным кодированием sRGB в байте 0, 8-битный G-компонент, хранящийся с нелинейным кодированием sRGB в байте 1, 8-битный B-компонент, хранящийся с нелинейным кодированием sRGB в байте 2, и 8-битный A-компонент в байте 3.
  • VK_FORMAT_B8G8R8A8_UNORM задаёт четырёхкомпонентный, 32-битный беззнаковый нормализованный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный R-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_B8G8R8A8_SNORM задаёт четырёхкомпонентный, 32-битный знаковый нормализованный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный R-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_B8G8R8A8_USCALED задаёт четырёхкомпонентный, 32-битный беззнаковый масштабированный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный R-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_B8G8R8A8_SSCALED задаёт четырёхкомпонентный, 32-битный знаковый масштабированный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный R-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_B8G8R8A8_UINT задаёт четырёхкомпонентный, 32-битный беззнаковый целочисленный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный R-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_B8G8R8A8_SINT задаёт четырёхкомпонентный, 32-битный знаковый целочисленный формат, имеющий 8-битный B-компонент в байте 0, 8-битный G-компонент в байте 1, 8-битный R-компонент в байте 2 и 8-битный A-компонент в байте 3.
  • VK_FORMAT_B8G8R8A8_SRGB задаёт четырёхкомпонентный, 32-битный беззнаковый нормализованный формат, имеющий 8-битный B-компонент, хранящийся с нелинейным кодированием sRGB в байте 0, 8-битный G-компонент, хранящийся с нелинейным кодированием sRGB в байте 1, 8-битный R-компонент, хранящийся с нелинейным кодированием sRGB в байте 2, и 8-битный A-компонент в байте 3.
  • VK_FORMAT_A8B8G8R8_UNORM_PACK32 задаёт четырёхкомпонентный, 32-битный упакованный беззнаковый нормализованный формат, имеющий 8-битный A-компонент в битах 24..31, 8-битный B-компонент в битах 16..23, 8-битный G-компонент в битах 8..15 и 8-битный R-компонент в битах 0..7.
  • VK_FORMAT_A8B8G8R8_SNORM_PACK32 задаёт четырёхкомпонентный, 32-битный упакованный знаковый нормализованный формат, имеющий 8-битный A-компонент в битах 24..31, 8-битный B-компонент в битах 16..23, 8-битный G-компонент в битах 8..15 и 8-битный R-компонент в битах 0..7.
  • VK_FORMAT_A8B8G8R8_USCALED_PACK32 задаёт четырёхкомпонентный, 32-битный упакованный беззнаковый масштабированный целочисленный формат, имеющий 8-битный A-компонент в битах 24..31, 8-битный B-компонент в битах 16..23, 8-битный G-компонент в битах 8..15 и 8-битный R-компонент в битах 0..7.
  • VK_FORMAT_A8B8G8R8_SSCALED_PACK32 задаёт четырёхкомпонентный, 32-битный упакованный знаковый масштабированный целочисленный формат, имеющий 8-битный A-компонент в битах 24..31, 8-битный B-компонент в битах 16..23, 8-битный G-компонент в битах 8..15 и 8-битный R-компонент в битах 0..7.
  • VK_FORMAT_A8B8G8R8_UINT_PACK32 specifies a four-component, 32-bit packed unsigned integer format that has an 8-bit A component in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in bits 8..15, and an 8-bit R component in bits 0..7.
  • VK_FORMAT_A8B8G8R8_SINT_PACK32 specifies a four-component, 32-bit packed signed integer format that has an 8-bit A component in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in bits 8..15, and an 8-bit R component in bits 0..7.
  • VK_FORMAT_A8B8G8R8_SRGB_PACK32 specifies a four-component, 32-bit packed unsigned normalized format that has an 8-bit A component in bits 24..31, an 8-bit B component stored with sRGB nonlinear encoding in bits 16..23, an 8-bit G component stored with sRGB nonlinear encoding in bits 8..15, and an 8-bit R component stored with sRGB nonlinear encoding in bits 0..7.
  • VK_FORMAT_A2R10G10B10_UNORM_PACK32 specifies a four-component, 32-bit packed unsigned normalized format that has a 2-bit A component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit B component in bits 0..9.
  • VK_FORMAT_A2R10G10B10_SNORM_PACK32 specifies a four-component, 32-bit packed signed normalized format that has a 2-bit A component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit B component in bits 0..9.
  • VK_FORMAT_A2R10G10B10_USCALED_PACK32 specifies a four-component, 32-bit packed unsigned scaled integer format that has a 2-bit A component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit B component in bits 0..9.
  • VK_FORMAT_A2R10G10B10_SSCALED_PACK32 specifies a four-component, 32-bit packed signed scaled integer format that has a 2-bit A component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit B component in bits 0..9.
  • VK_FORMAT_A2R10G10B10_UINT_PACK32 specifies a four-component, 32-bit packed unsigned integer format that has a 2-bit A component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit B component in bits 0..9.
  • VK_FORMAT_A2R10G10B10_SINT_PACK32 specifies a four-component, 32-bit packed signed integer format that has a 2-bit A component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit B component in bits 0..9.
  • VK_FORMAT_A2B10G10R10_UNORM_PACK32 specifies a four-component, 32-bit packed unsigned normalized format that has a 2-bit A component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit R component in bits 0..9.
  • VK_FORMAT_A2B10G10R10_SNORM_PACK32 specifies a four-component, 32-bit packed signed normalized format that has a 2-bit A component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit R component in bits 0..9.
  • VK_FORMAT_A2B10G10R10_USCALED_PACK32 specifies a four-component, 32-bit packed unsigned scaled integer format that has a 2-bit A component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit R component in bits 0..9.
  • VK_FORMAT_A2B10G10R10_SSCALED_PACK32 specifies a four-component, 32-bit packed signed scaled integer format that has a 2-bit A component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit R component in bits 0..9.
  • VK_FORMAT_A2B10G10R10_UINT_PACK32 specifies a four-component, 32-bit packed unsigned integer format that has a 2-bit A component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit R component in bits 0..9.
  • VK_FORMAT_A2B10G10R10_SINT_PACK32 specifies a four-component, 32-bit packed signed integer format that has a 2-bit A component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in bits 10..19, and a 10-bit R component in bits 0..9.
  • VK_FORMAT_R16_UNORM specifies a one-component, 16-bit unsigned normalized format that has a single 16-bit R component.
  • VK_FORMAT_R16_SNORM specifies a one-component, 16-bit signed normalized format that has a single 16-bit R component.
  • VK_FORMAT_R16_USCALED specifies a one-component, 16-bit unsigned scaled integer format that has a single 16-bit R component.
  • VK_FORMAT_R16_SSCALED specifies a one-component, 16-bit signed scaled integer format that has a single 16-bit R component.
  • VK_FORMAT_R16_UINT specifies a one-component, 16-bit unsigned integer format that has a single 16-bit R component.
  • VK_FORMAT_R16_SINT specifies a one-component, 16-bit signed integer format that has a single 16-bit R component.
  • VK_FORMAT_R16_SFLOAT specifies a one-component, 16-bit signed floating-point format that has a single 16-bit R component.
  • VK_FORMAT_R16G16_UNORM specifies a two-component, 32-bit unsigned normalized format that has a 16-bit R component in bytes 0..1, and a 16-bit G component in bytes 2..3.
  • VK_FORMAT_R16G16_SNORM specifies a two-component, 32-bit signed normalized format that has a 16-bit R component in bytes 0..1, and a 16-bit G component in bytes 2..3.
  • VK_FORMAT_R16G16_USCALED specifies a two-component, 32-bit unsigned scaled integer format that has a 16-bit R component in bytes 0..1, and a 16-bit G component in bytes 2..3.
  • VK_FORMAT_R16G16_SSCALED specifies a two-component, 32-bit signed scaled integer format that has a 16-bit R component in bytes 0..1, and a 16-bit G component in bytes 2..3.
  • VK_FORMAT_R16G16_UINT specifies a two-component, 32-bit unsigned integer format that has a 16-bit R component in bytes 0..1, and a 16-bit G component in bytes 2..3.
  • VK_FORMAT_R16G16_SINT specifies a two-component, 32-bit signed integer format that has a 16-bit R component in bytes 0..1, and a 16-bit G component in bytes 2..3.
  • VK_FORMAT_R16G16_SFLOAT specifies a two-component, 32-bit signed floating-point format that has a 16-bit R component in bytes 0..1, and a 16-bit G component in bytes 2..3.
  • VK_FORMAT_R16G16B16_UNORM specifies a three-component, 48-bit unsigned normalized format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes 4..5.
  • VK_FORMAT_R16G16B16_SNORM specifies a three-component, 48-bit signed normalized format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes 4..5.
  • VK_FORMAT_R16G16B16_USCALED specifies a three-component, 48-bit unsigned scaled integer format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes 4..5.
  • VK_FORMAT_R16G16B16_SSCALED specifies a three-component, 48-bit signed scaled integer format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes 4..5.
  • VK_FORMAT_R16G16B16_UINT specifies a three-component, 48-bit unsigned integer format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes 4..5.
  • VK_FORMAT_R16G16B16_SINT specifies a three-component, 48-bit signed integer format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes 4..5.
  • VK_FORMAT_R16G16B16_SFLOAT specifies a three-component, 48-bit signed floating-point format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes 4..5.
  • VK_FORMAT_R16G16B16A16_UNORM specifies a four-component, 64-bit unsigned normalized format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, and a 16-bit A component in bytes 6..7.
  • VK_FORMAT_R16G16B16A16_SNORM specifies a four-component, 64-bit signed normalized format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, and a 16-bit A component in bytes 6..7.
  • VK_FORMAT_R16G16B16A16_USCALED specifies a four-component, 64-bit unsigned scaled integer format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, and a 16-bit A component in bytes 6..7.
  • VK_FORMAT_R16G16B16A16_SSCALED specifies a four-component, 64-bit signed scaled integer format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, and a 16-bit A component in bytes 6..7.
  • VK_FORMAT_R16G16B16A16_UINT specifies a four-component, 64-bit unsigned integer format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, and a 16-bit A component in bytes 6..7.
  • VK_FORMAT_R16G16B16A16_SINT specifies a four-component, 64-bit signed integer format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, and a 16-bit A component in bytes 6..7.
  • VK_FORMAT_R16G16B16A16_SFLOAT specifies a four-component, 64-bit signed floating-point format that has a 16-bit R component in bytes 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, and a 16-bit A component in bytes 6..7.
  • VK_FORMAT_R32_UINT specifies a one-component, 32-bit unsigned integer format that has a single 32-bit R component.
  • VK_FORMAT_R32_SINT specifies a one-component, 32-bit signed integer format that has a single 32-bit R component.
  • VK_FORMAT_R32_SFLOAT specifies a one-component, 32-bit signed floating-point format that has a single 32-bit R component.
  • VK_FORMAT_R32G32_UINT specifies a two-component, 64-bit unsigned integer format that has a 32-bit R component in bytes 0..3, and a 32-bit G component in bytes 4..7.
  • VK_FORMAT_R32G32_SINT specifies a two-component, 64-bit signed integer format that has a 32-bit R component in bytes 0..3, and a 32-bit G component in bytes 4..7.
  • VK_FORMAT_R32G32_SFLOAT specifies a two-component, 64-bit signed floating-point format that has a 32-bit R component in bytes 0..3, and a 32-bit G component in bytes 4..7.
  • VK_FORMAT_R32G32B32_UINT specifies a three-component, 96-bit unsigned integer format that has a 32-bit R component in bytes 0..3, a 32-bit G component in bytes 4..7, and a 32-bit B component in bytes 8..11.
  • VK_FORMAT_R32G32B32_SINT specifies a three-component, 96-bit signed integer format that has a 32-bit R component in bytes 0..3, a 32-bit G component in bytes 4..7, and a 32-bit B component in bytes 8..11.
  • VK_FORMAT_R32G32B32_SFLOAT specifies a three-component, 96-bit signed floating-point format that has a 32-bit R component in bytes 0..3, a 32-bit G component in bytes 4..7, and a 32-bit B component in bytes 8..11.
  • VK_FORMAT_R32G32B32A32_UINT specifies a four-component, 128-bit unsigned integer format that has a 32-bit R component in bytes 0..3, a 32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11, and a 32-bit A component in bytes 12..15.
  • VK_FORMAT_R32G32B32A32_SINT specifies a four-component, 128-bit signed integer format that has a 32-bit R component in bytes 0..3, a 32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11, and a 32-bit A component in bytes 12..15.
  • VK_FORMAT_R32G32B32A32_SFLOAT specifies a four-component, 128-bit signed floating-point format that has a 32-bit R component in bytes 0..3, a 32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11, and a 32-bit A component in bytes 12..15.
  • VK_FORMAT_R64_UINT specifies a one-component, 64-bit unsigned integer format that has a single 64-bit R component.
  • VK_FORMAT_R64_SINT specifies a one-component, 64-bit signed integer format that has a single 64-bit R component.
  • VK_FORMAT_R64_SFLOAT specifies a one-component, 64-bit signed floating-point format that has a single 64-bit R component.
  • VK_FORMAT_R64G64_UINT specifies a two-component, 128-bit unsigned integer format that has a 64-bit R component in bytes 0..7, and a 64-bit G component in bytes 8..15.
  • VK_FORMAT_R64G64_SINT specifies a two-component, 128-bit signed integer format that has a 64-bit R component in bytes 0..7, and a 64-bit G component in bytes 8..15.
  • VK_FORMAT_R64G64_SFLOAT specifies a two-component, 128-bit signed floating-point format that has a 64-bit R component in bytes 0..7, and a 64-bit G component in bytes 8..15.
  • VK_FORMAT_R64G64B64_UINT specifies a three-component, 192-bit unsigned integer format that has a 64-bit R component in bytes 0..7, a 64-bit G component in bytes 8..15, and a 64-bit B component in bytes 16..23.
  • VK_FORMAT_R64G64B64_SINT specifies a three-component, 192-bit signed integer format that has a 64-bit R component in bytes 0..7, a 64-bit G component in bytes 8..15, and a 64-bit B component in bytes 16..23.
  • VK_FORMAT_R64G64B64_SFLOAT specifies a three-component, 192-bit signed floating-point format that has a 64-bit R component in bytes 0..7, a 64-bit G component in bytes 8..15, and a 64-bit B component in bytes 16..23.
  • VK_FORMAT_R64G64B64A64_UINT specifies a four-component, 256-bit unsigned integer format that has a 64-bit R component in bytes 0..7, a 64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23, and a 64-bit A component in bytes 24..31.
  • VK_FORMAT_R64G64B64A64_SINT specifies a four-component, 256-bit signed integer format that has a 64-bit R component in bytes 0..7, a 64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23, and a 64-bit A component in bytes 24..31.
  • VK_FORMAT_R64G64B64A64_SFLOAT specifies a four-component, 256-bit signed floating-point format that has a 64-bit R component in bytes 0..7, a 64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23, and a 64-bit A component in bytes 24..31.
  • VK_FORMAT_B10G11R11_UFLOAT_PACK32 specifies a three-component, 32-bit packed unsigned floating-point format that has a 10-bit B component in bits 22..31, an 11-bit G component in bits 11..21, an 11-bit R component in bits 0..10. See html/vkspec.html#fundamentals-fp10 and html/vkspec.html#fundamentals-fp11.
  • VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 specifies a three-component, 32-bit packed unsigned floating-point format that has a 5-bit shared exponent in bits 27..31, a 9-bit B component mantissa in bits 18..26, a 9-bit G component mantissa in bits 9..17, and a 9-bit R component mantissa in bits 0..8.
  • VK_FORMAT_D16_UNORM specifies a one-component, 16-bit unsigned normalized format that has a single 16-bit depth component.
  • VK_FORMAT_X8_D24_UNORM_PACK32 specifies a two-component, 32-bit format that has 24 unsigned normalized bits in the depth component and, optionally:, 8 bits that are unused.
  • VK_FORMAT_D32_SFLOAT specifies a one-component, 32-bit signed floating-point format that has 32-bits in the depth component.
  • VK_FORMAT_S8_UINT specifies a one-component, 8-bit unsigned integer format that has 8-bits in the stencil component.
  • VK_FORMAT_D16_UNORM_S8_UINT specifies a two-component, 24-bit format that has 16 unsigned normalized bits in the depth component and 8 unsigned integer bits in the stencil component.
  • VK_FORMAT_D24_UNORM_S8_UINT specifies a two-component, 32-bit packed format that has 8 unsigned integer bits in the stencil component, and 24 unsigned normalized bits in the depth component.
  • VK_FORMAT_D32_SFLOAT_S8_UINT specifies a two-component format that has 32 signed float bits in the depth component and 8 unsigned integer bits in the stencil component. There are optionally: 24-bits that are unused.
  • VK_FORMAT_BC1_RGB_UNORM_BLOCK specifies a three-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data. This format has no alpha and is considered opaque.
  • VK_FORMAT_BC1_RGB_SRGB_BLOCK specifies a three-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data with sRGB nonlinear encoding. This format has no alpha and is considered opaque.
  • VK_FORMAT_BC1_RGBA_UNORM_BLOCK specifies a four-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data, and provides 1 bit of alpha.
  • VK_FORMAT_BC1_RGBA_SRGB_BLOCK specifies a four-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data with sRGB nonlinear encoding, and provides 1 bit of alpha.
  • VK_FORMAT_BC2_UNORM_BLOCK specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with the first 64 bits encoding alpha values followed by 64 bits encoding RGB values.
  • VK_FORMAT_BC2_SRGB_BLOCK specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with the first 64 bits encoding alpha values followed by 64 bits encoding RGB values with sRGB nonlinear encoding.
  • VK_FORMAT_BC3_UNORM_BLOCK specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with the first 64 bits encoding alpha values followed by 64 bits encoding RGB values.
  • VK_FORMAT_BC3_SRGB_BLOCK specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with the first 64 bits encoding alpha values followed by 64 bits encoding RGB values with sRGB nonlinear encoding.
  • VK_FORMAT_BC4_UNORM_BLOCK specifies a one-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized red texel data.
  • VK_FORMAT_BC4_SNORM_BLOCK specifies a one-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of signed normalized red texel data.
  • VK_FORMAT_BC5_UNORM_BLOCK specifies a two-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RG texel data with the first 64 bits encoding red values followed by 64 bits encoding green values.
  • VK_FORMAT_BC5_SNORM_BLOCK specifies a two-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of signed normalized RG texel data with the first 64 bits encoding red values followed by 64 bits encoding green values.
  • VK_FORMAT_BC6H_UFLOAT_BLOCK specifies a three-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned floating-point RGB texel data.
  • VK_FORMAT_BC6H_SFLOAT_BLOCK specifies a three-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of signed floating-point RGB texel data.
  • VK_FORMAT_BC7_UNORM_BLOCK specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_BC7_SRGB_BLOCK specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK specifies a three-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data. This format has no alpha and is considered opaque.
  • VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK specifies a three-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data with sRGB nonlinear encoding. This format has no alpha and is considered opaque.
  • VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK specifies a four-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data, and provides 1 bit of alpha.
  • VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK specifies a four-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data with sRGB nonlinear encoding, and provides 1 bit of alpha.
  • VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK specifies a four-component, ETC2 compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with the first 64 bits encoding alpha values followed by 64 bits encoding RGB values.
  • VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK specifies a four-component, ETC2 compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with the first 64 bits encoding alpha values followed by 64 bits encoding RGB values with sRGB nonlinear encoding applied.
  • VK_FORMAT_EAC_R11_UNORM_BLOCK specifies a one-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized red texel data.
  • VK_FORMAT_EAC_R11_SNORM_BLOCK specifies a one-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of signed normalized red texel data.
  • VK_FORMAT_EAC_R11G11_UNORM_BLOCK specifies a two-component, ETC2 compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RG texel data with the first 64 bits encoding red values followed by 64 bits encoding green values.
  • VK_FORMAT_EAC_R11G11_SNORM_BLOCK specifies a two-component, ETC2 compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of signed normalized RG texel data with the first 64 bits encoding red values followed by 64 bits encoding green values.
  • VK_FORMAT_ASTC_4x4_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_4x4_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_5x4_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 5×4 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_5x4_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 5×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_5x5_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 5×5 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_5x5_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 5×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_6x5_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 6×5 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_6x5_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 6×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_6x6_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 6×6 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_6x6_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 6×6 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_8x5_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×5 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_8x5_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_8x6_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×6 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_8x6_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×6 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_8x8_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×8 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_8x8_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×8 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_10x5_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×5 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_10x5_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_10x6_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×6 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_10x6_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×6 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_10x8_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×8 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_10x8_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×8 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_10x10_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×10 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_10x10_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×10 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_12x10_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 12×10 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_12x10_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 12×10 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.
  • VK_FORMAT_ASTC_12x12_UNORM_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 12×12 rectangle of unsigned normalized RGBA texel data.
  • VK_FORMAT_ASTC_12x12_SRGB_BLOCK specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 12×12 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components.

См. также

VkAttachmentDescription, VkBufferViewCreateInfo, VkImageCreateInfo, VkImageViewCreateInfo, VkVertexInputAttributeDescription, vkGetPhysicalDeviceFormatProperties, vkGetPhysicalDeviceImageFormatProperties, vkGetPhysicalDeviceSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFormat

VkFormatFeatureFlagBits(3)

Название

VkFormatFeatureFlagBits - Битовая маска, указывающая на функции, поддерживаемые буфером

Спецификация C

Биты, которые могут быть установлены в VkFormatProperties features linearTilingFeatures, optimalTilingFeatures, и bufferFeatures are:

typedef enum VkFormatFeatureFlagBits {
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
    VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
    VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
    VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
    VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
    VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
    VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
    VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
} VkFormatFeatureFlagBits;

Описание

Следующие биты могут быть установлены в linearTilingFeatures и optimalTilingFeatures, указывая, что функции поддерживаются изображениями или представлениями изображений, созданными с запрошенным vkGetPhysicalDeviceFormatProperties::format:

  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT указывает, что представление изображения может быть использовано для выборки.
  • VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT указывает, что представление изображения может использоваться в качестве изображений хранения.
  • VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT указывает, что представление изображения может использоваться в качестве изображения хранения, поддерживающего атомарные операции.
  • VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT указывает, что представление изображения может использоваться в качестве цветового вложения фреймбуфера и в качестве входного вложения.
  • VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT указывает, что представление изображения может использоваться в качестве цветового вложения фреймбуфера, поддерживающего смешивание, и в качестве входного вложения.
  • VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT указывает, что представление изображения может использоваться в качестве вложения глубины/трафарета фреймбуфера и в качестве входного вложения.
  • VK_FORMAT_FEATURE_BLIT_SRC_BIT указывает, что изображение может использоваться как srcImage для команды vkCmdBlitImage.
  • VK_FORMAT_FEATURE_BLIT_DST_BIT указывает, что изображение может использоваться как dstImage для команды vkCmdBlitImage.
  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT указывает, что если также установлен VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, представление изображения может использоваться с семплером, имеющим либо magFilter или minFilter установленным в VK_FILTER_LINEAR, или mipmapMode установленным в VK_SAMPLER_MIPMAP_MODE_LINEAR. Если также установлен VK_FORMAT_FEATURE_BLIT_SRC_BIT, изображение может использоваться в качестве srcImage для vkCmdBlitImage с filter равным VK_FILTER_LINEAR. Этот бит должен быть доступен только для форматов, которые также поддерживают VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT или VK_FORMAT_FEATURE_BLIT_SRC_BIT.

    Если запрашиваемый формат является форматом глубины/трафарета, этот бит указывает только на то, что аспект глубины (а не аспект трафарета) изображения этого формата поддерживает линейную фильтрацию, и что линейная фильтрация аспекта глубины поддерживается независимо от того, включено ли сравнение глубины в семплере или нет. Если этот бит отсутствует, линейная фильтрация с отключенным сравнением глубины не поддерживается, а линейная фильтрация с включенным сравнением глубины поддерживается, но может вычислять отфильтрованное значение непредсказуемым образом, отличающимся от обычных правил линейной фильтрации. Результирующее значение должно находиться в диапазоне [0,1] и должно быть пропорционально или взвешенным средним значению количества проходов или сбоев сравнения.

Следующие биты могут быть установлены в bufferFeatures, указывая, что функции поддерживаются буферами или представлениями буферов, созданными с запрошенным vkGetPhysicalDeviceProperties::format:

  • VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT указывает, что формат может использоваться для создания представления буфера, которое может быть связано с дескриптором VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER.
  • VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT указывает, что формат может использоваться для создания представления буфера, которое может быть связано с дескриптором VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER.
  • VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT указывает, что атомарные операции поддерживаются на VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER с этим форматом.
  • VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT указывает, что формат может использоваться в качестве формата атрибута вершины (VkVertexInputAttributeDescription::format).

См. также

VkFormatFeatureFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFormatFeatureFlagBits

VkFrontFace(3)

Название

VkFrontFace - Интерпретация ориентации передней грани полигона

Спецификация C

Первым шагом растеризации полигонов является определение того, является ли треугольник обращенным назад или обращенным вперед. Это определение производится на основе знака площади (обрезанного или не обрезанного) полигона, вычисленной в координатах фреймбуфера. Одним из способов вычисления этой площади является:

\[a = -{1 \over 2}\sum_{i=0}^{n-1} x_f^i y_f^{i \oplus 1} - x_f^{i \oplus 1} y_f^i\]

где \(x_f^i\) и \(y_f^i\) — координаты x и y буфера кадра i-й вершины n-вершинного многоугольника (вершины нумеруются, начиная с нуля, для целей этого вычисления), а i ⊕ 1 — это (i + 1) mod n.

Интерпретация знака a определяется свойством VkPipelineRasterizationStateCreateInfo::frontFace активного в данный момент конвейера. Возможные значения:

typedef enum VkFrontFace {
    VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
    VK_FRONT_FACE_CLOCKWISE = 1,
} VkFrontFace;

Описание

  • VK_FRONT_FACE_COUNTER_CLOCKWISE указывает, что треугольник с положительной площадью считается передней гранью.
  • VK_FRONT_FACE_CLOCKWISE указывает, что треугольник с отрицательной площадью считается передней гранью.

Любой треугольник, который не является передней гранью, является задней гранью, включая треугольники с нулевой площадью.

См. также

VkPipelineRasterizationStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFrontFace

VkImageAspectFlagBits(3)

Имя

VkImageAspectFlagBits - Битовая маска, указывающая, какие аспекты изображения включены в представление

Спецификация C

Биты, которые можно установить в маске аспектов для указания аспектов изображения для таких целей, как идентификация подресурса, следующие:

typedef enum VkImageAspectFlagBits {
    VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
    VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
    VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
    VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
} VkImageAspectFlagBits;

Описание

  • VK_IMAGE_ASPECT_COLOR_BIT указывает цветовой аспект.
  • VK_IMAGE_ASPECT_DEPTH_BIT указывает аспект глубины.
  • VK_IMAGE_ASPECT_STENCIL_BIT указывает аспект трафарета.
  • VK_IMAGE_ASPECT_METADATA_BIT указывает аспект метаданных, используемый для операций с разреженными разреженными ресурсами.

См. также

VkImageAspectFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageAspectFlagBits

VkImageCreateFlagBits(3)

Имя

VkImageCreateFlagBits - Битовая маска, указывающая дополнительные параметры изображения

Спецификация C

Биты, которые можно установить в VkImageCreateInfo::flags, указывая дополнительные параметры изображения, следующие:

typedef enum VkImageCreateFlagBits {
    VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
    VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
    VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
} VkImageCreateFlagBits;

Описание

  • VK_IMAGE_CREATE_SPARSE_BINDING_BIT указывает, что изображение будет поддерживаться с помощью разреженного связывания памяти.
  • VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT указывает, что изображение может быть частично поддерживаться с помощью разреженного связывания памяти. Изображения, созданные с этим флагом, также должны быть созданы с флагом VK_IMAGE_CREATE_SPARSE_BINDING_BIT.
  • VK_IMAGE_CREATE_SPARSE_ALIASED_BIT указывает, что изображение будет поддерживаться с помощью разреженного связывания памяти с диапазонами памяти, которые также могут одновременно поддерживать другое изображение (или другую часть того же изображения). Изображения, созданные с этим флагом, также должны быть созданы с флагом VK_IMAGE_CREATE_SPARSE_BINDING_BIT
  • VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT указывает, что изображение может использоваться для создания VkImageView с другим форматом, чем у изображения.
  • VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT указывает, что изображение может использоваться для создания VkImageView типа VK_IMAGE_VIEW_TYPE_CUBE или VK_IMAGE_VIEW_TYPE_CUBE_ARRAY.

Если установлены какие-либо биты VK_IMAGE_CREATE_SPARSE_BINDING_BIT, VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT или VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT также не должен быть установлен.

См. Разреженные характеристики ресурсов и Разреженные характеристики физического устройства для получения дополнительной информации.

См. также

VkImageCreateFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageCreateFlagBits

VkImageLayout(3)

Имя

VkImageLayout - Макет изображения и его подресурсов

Спецификация C

Множество макетов изображений состоит из:

typedef enum VkImageLayout {
    VK_IMAGE_LAYOUT_UNDEFINED = 0,
    VK_IMAGE_LAYOUT_GENERAL = 1,
    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
    VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
    VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
} VkImageLayout;

Описание

Типы доступа к устройству, поддерживаемые каждым макетом, следующие:

  • VK_IMAGE_LAYOUT_UNDEFINED не поддерживает доступ к устройству. Этот макет должен использоваться только как член initialLayout VkImageCreateInfo или VkAttachmentDescription, или как oldLayout при переходе изображения. При переходе из этого макета содержимое памяти не гарантируется как сохраненное.
  • VK_IMAGE_LAYOUT_PREINITIALIZED не поддерживает доступ к устройству. Этот макет должен использоваться только как член initialLayout VkImageCreateInfo или VkAttachmentDescription, или как oldLayout при переходе изображения. При переходе из этого макета содержимое памяти сохраняется. Этот макет предназначен для использования в качестве начального макета для изображения, содержимое которого записывается узлом, и, следовательно, данные могут быть записаны в память немедленно, без предварительного выполнения перехода макета. В настоящее время, VK_IMAGE_LAYOUT_PREINITIALIZED полезен только с изображениями VK_IMAGE_TILING_LINEAR, поскольку стандартный макет для изображений VK_IMAGE_TILING_OPTIMAL не определен.
  • VK_IMAGE_LAYOUT_GENERAL поддерживает все типы доступа к устройству.
  • VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL должен использоваться только в качестве цветового или разрешающего вложения в VkFramebuffer. Этот макет действителен только для подресурсов изображений, созданных с включенным битом использования VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT.
  • VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL должен использоваться только в качестве вложения глубины/трафарета в VkFramebuffer. Этот макет действителен только для подресурсов изображений, созданных с включенным битом использования VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT.
  • VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL должен использоваться только в качестве вложения глубины/трафарета только для чтения в VkFramebuffer и/или в качестве изображения только для чтения в шейдере (которое может читаться как выборочное изображение, комбинированное изображение/выборщик и/или вложение ввода). Этот макет действителен только для подресурсов изображений, созданных с включенным битом использования VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT. Только подресурсы изображений, созданных с VK_IMAGE_USAGE_SAMPLED_BIT, могут использоваться как выборочное изображение или комбинированное изображение/выборщик в шейдере. Аналогично, только подресурсы изображений, созданные с VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, могут использоваться как вложения ввода.
  • VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL должен использоваться только в качестве изображения только для чтения в шейдере (которое может читаться как выборочное изображение, комбинированное изображение/выборщик и/или вложение ввода). Этот макет действителен только для подресурсов изображений, созданных с битом использования VK_IMAGE_USAGE_SAMPLED_BIT или VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT.
  • VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL должен использоваться только в качестве исходного изображения команды передачи (см. определение VK_PIPELINE_STAGE_TRANSFER_BIT). Этот макет действителен только для подресурсов изображений, созданных с включенным битом использования VK_IMAGE_USAGE_TRANSFER_SRC_BIT.
  • VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL должен использоваться только в качестве целевого изображения команды передачи. Этот макет действителен только для подресурсов изображений, созданных с включенным битом использования VK_IMAGE_USAGE_TRANSFER_DST_BIT.

Для каждого механизма доступа к изображению в API существует параметр или член структуры, который управляет макетом изображения, используемым для доступа к изображению. Для команд передачи это параметр команды (см. html/vkspec.html#clears и html/vkspec.html#copies). Для использования в качестве вложения буфера кадра это член в подструктурах VkRenderPassCreateInfo (см. Проход отрисовки). Для использования в наборе дескрипторов это член в структуре VkDescriptorImageInfo (см. html/vkspec.html#descriptorsets-updates). В момент выполнения любой команды буфера команд, обращающейся к изображению, на любой очереди макеты подресурсов изображения, к которым осуществляется доступ, должны соответствовать макету, указанному через API, управляющий этими доступами.

Макет изображения каждого подресурса изображения должен быть четко определен в каждой точке времени существования подресурса изображения. Это означает, что при выполнении перехода макета на подресурсе изображения старое значение макета должно либо равняться текущему макету подресурса изображения (в момент выполнения перехода), либо быть VK_IMAGE_LAYOUT_UNDEFINED (что подразумевает, что содержимое подресурса изображения не обязательно должно сохраняться). Новый макет, используемый при переходе, не должен быть VK_IMAGE_LAYOUT_UNDEFINED или VK_IMAGE_LAYOUT_PREINITIALIZED.

См. также

VkAttachmentDescription, VkAttachmentReference, VkDescriptorImageInfo, VkImageCreateInfo, VkImageMemoryBarrier, vkCmdBlitImage, vkCmdClearColorImage, vkCmdClearDepthStencilImage, vkCmdCopyBufferToImage, vkCmdCopyImage, vkCmdCopyImageToBuffer, vkCmdResolveImage

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageLayout

VkImageTiling(3)

Имя

VkImageTiling - Указывает расположение элементов данных в изображении

Спецификация C

Возможные значения VkImageCreateInfo::tiling, указывающие расположение элементов данных в изображении, следующие:

typedef enum VkImageTiling {
    VK_IMAGE_TILING_OPTIMAL = 0,
    VK_IMAGE_TILING_LINEAR = 1,
} VkImageTiling;

Описание

  • VK_IMAGE_TILING_OPTIMAL specifies optimal tiling (texels are laid out in an implementation-dependent arrangement, for more optimal memory access).
  • VK_IMAGE_TILING_LINEAR specifies linear tiling (texels are laid out in memory in row-major order, possibly with some padding on each row).

См. также

VkImageCreateInfo, vkGetPhysicalDeviceImageFormatProperties, vkGetPhysicalDeviceSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageTiling

VkImageType(3)

Имя

VkImageType - Указывает тип объекта изображения

C-спецификация

Возможные значения VkImageCreateInfo::imageType, указывающие базовую размерность изображения, следующие:

typedef enum VkImageType {
    VK_IMAGE_TYPE_1D = 0,
    VK_IMAGE_TYPE_2D = 1,
    VK_IMAGE_TYPE_3D = 2,
} VkImageType;

Описание

  • VK_IMAGE_TYPE_1D указывает одномерное изображение.
  • VK_IMAGE_TYPE_2D указывает двумерное изображение.
  • VK_IMAGE_TYPE_3D указывает трёхмерное изображение.

См. также

VkImageCreateInfo, vkGetPhysicalDeviceImageFormatProperties, vkGetPhysicalDeviceSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageType

VkImageUsageFlagBits(3)

Имя

VkImageUsageFlagBits - Битовая маска, указывающая предполагаемое использование изображения

C-спецификация

Биты, которые могут быть установлены в VkImageCreateInfo::usage, указывающие предполагаемое использование изображения, следующие:

typedef enum VkImageUsageFlagBits {
    VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
    VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
    VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
    VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
    VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
    VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
    VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
    VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
} VkImageUsageFlagBits;

Описание

  • VK_IMAGE_USAGE_TRANSFER_SRC_BIT указывает, что изображение может использоваться в качестве источника для команды передачи.
  • VK_IMAGE_USAGE_TRANSFER_DST_BIT указывает, что изображение может использоваться в качестве получателя для команды передачи.
  • VK_IMAGE_USAGE_SAMPLED_BIT указывает, что изображение может использоваться для создания VkImageView, подходящего для размещения в слоте VkDescriptorSet типа VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE или VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, и выборки шейдером.
  • VK_IMAGE_USAGE_STORAGE_BIT указывает, что изображение может использоваться для создания VkImageView, подходящего для размещения в слоте VkDescriptorSet типа VK_DESCRIPTOR_TYPE_STORAGE_IMAGE.
  • VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT указывает, что изображение может использоваться для создания VkImageView, подходящего для использования в качестве цветного или разрешающего вложения в VkFramebuffer.
  • VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT указывает, что изображение может использоваться для создания VkImageView, подходящего для использования в качестве вложения глубины/трафарета в VkFramebuffer.
  • VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT указывает, что память, привязанная к этому изображению, будет выделена с помощью VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT (см. html/vkspec.html#memory для получения дополнительной информации). Этот бит может быть установлен для любого изображения, которое может использоваться для создания VkImageView, подходящего для использования в качестве цветного, разрешающего, глубины/трафарета или входного вложения.
  • VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT указывает, что изображение может использоваться для создания VkImageView, подходящего для размещения в слоте VkDescriptorSet типа VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; чтения из шейдера как входного вложения; и использования как входного вложения во фреймбуфере.

См. также

VkImageUsageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageUsageFlagBits

VkImageViewType(3)

Имя

VkImageViewType - Типы представлений изображений

C-спецификация

Типы представлений изображений, которые могут быть созданы, следующие:

typedef enum VkImageViewType {
    VK_IMAGE_VIEW_TYPE_1D = 0,
    VK_IMAGE_VIEW_TYPE_2D = 1,
    VK_IMAGE_VIEW_TYPE_3D = 2,
    VK_IMAGE_VIEW_TYPE_CUBE = 3,
    VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
    VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
    VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
} VkImageViewType;

Описание

Точный тип представления изображения частично неявный, основанный на типе и количестве выборок изображения, а также на параметрах создания представления, как описано в таблице совместимости представлений изображений для vkCreateImageView. Эта таблица также показывает, какие параметры SPIR-V OpTypeImage Dim и Arrayed соответствуют каждому типу представления изображения.

См. также

VkImageViewCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageViewType

VkIndexType(3)

Имя

VkIndexType - Тип индексов буфера индексов

C-спецификация

Возможные значения vkCmdBindIndexBuffer::indexType, указывающие размер индексов, следующие:

typedef enum VkIndexType {
    VK_INDEX_TYPE_UINT16 = 0,
    VK_INDEX_TYPE_UINT32 = 1,
} VkIndexType;

Описание

  • VK_INDEX_TYPE_UINT16 указывает, что индексы являются 16-битными беззнаковыми целыми значениями.
  • VK_INDEX_TYPE_UINT32 указывает, что индексы являются 32-битными беззнаковыми целыми значениями.

См. также

vkCmdBindIndexBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkIndexType

VkInternalAllocationType(3)

Имя

VkInternalAllocationType - Тип выделения

C-спецификация

Параметр allocationType для функций pfnInternalAllocation и pfnInternalFree может иметь одно из следующих значений:

typedef enum VkInternalAllocationType {
    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
} VkInternalAllocationType;

Описание

  • VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE указывает, что выделение предназначено для выполнения хостом.

См. также

PFN_vkInternalAllocationNotification, PFN_vkInternalFreeNotification

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkInternalAllocationType

VkLogicOp(3)

Имя

VkLogicOp - Логические операции фреймбуфера

C-спецификация

Логические операции контролируются членами logicOpEnable и logicOp VkPipelineColorBlendStateCreateInfo. Если logicOpEnable равно VK_TRUE, то логическая операция, выбранная logicOp, применяется между каждым цветным вложением и соответствующим выходным значением фрагмента, а смешивание всех вложений рассматривается как отключенное. Любые вложения, использующие цветовые форматы, для которых логические операции не поддерживаются, просто передают цветовые значения без изменений. Логическая операция применяется независимо для каждого из красного, зеленого, синего и альфа-компонентов. logicOp выбирается из следующих операций:

typedef enum VkLogicOp {
    VK_LOGIC_OP_CLEAR = 0,
    VK_LOGIC_OP_AND = 1,
    VK_LOGIC_OP_AND_REVERSE = 2,
    VK_LOGIC_OP_COPY = 3,
    VK_LOGIC_OP_AND_INVERTED = 4,
    VK_LOGIC_OP_NO_OP = 5,
    VK_LOGIC_OP_XOR = 6,
    VK_LOGIC_OP_OR = 7,
    VK_LOGIC_OP_NOR = 8,
    VK_LOGIC_OP_EQUIVALENT = 9,
    VK_LOGIC_OP_INVERT = 10,
    VK_LOGIC_OP_OR_REVERSE = 11,
    VK_LOGIC_OP_COPY_INVERTED = 12,
    VK_LOGIC_OP_OR_INVERTED = 13,
    VK_LOGIC_OP_NAND = 14,
    VK_LOGIC_OP_SET = 15,
} VkLogicOp;

Описание

Логические операции, поддерживаемые Vulkan, суммированы в следующей таблице, в которой

  • ¬ - побитовое отрицание,
  • ∧ - побитовое И,
  • ∨ - побитовое ИЛИ,
  • ⊕ - побитовое исключающее ИЛИ,
  • s - значение компонента Rs0, Gs0, Bs0 или As0 фрагмента для выходных данных фрагмента, соответствующих обновляемому цветному вложению, и
  • d - значение компонента R, G, B или A цветного вложения:
Таблица 11. Логические операции
Режим Операция

VK_LOGIC_OP_CLEAR

0

VK_LOGIC_OP_AND

s ∧ d

VK_LOGIC_OP_AND_REVERSE

s ∧ ¬ d

VK_LOGIC_OP_COPY

s

VK_LOGIC_OP_AND_INVERTED

¬ s ∧ d

VK_LOGIC_OP_NO_OP

d

VK_LOGIC_OP_XOR

s ⊕ d

VK_LOGIC_OP_OR

s ∨ d

VK_LOGIC_OP_NOR

¬ (s ∨ d)

VK_LOGIC_OP_EQUIVALENT

¬ (s ⊕ d)

VK_LOGIC_OP_INVERT

¬ d

VK_LOGIC_OP_OR_REVERSE

s ∨ ¬ d

VK_LOGIC_OP_COPY_INVERTED

¬ s

VK_LOGIC_OP_OR_INVERTED

¬ s ∨ d

VK_LOGIC_OP_NAND

¬ (s ∧ d)

VK_LOGIC_OP_SET

all 1s

Результат логической операции затем записывается в цветовое приложение, в соответствии с управляемой компонентом маской записи, описанной в Операциях смешивания.

См. также

VkPipelineColorBlendStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkLogicOp

VkMemoryHeapFlagBits(3)

Имя

VkMemoryHeapFlagBits - Битовая маска, определяющая атрибуты флагов для кучи

C Спецификация

Биты, которые могут быть установлены в VkMemoryHeap::flags, указывающие атрибуты флагов для кучи, следующие:

typedef enum VkMemoryHeapFlagBits {
    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
} VkMemoryHeapFlagBits;

Описание

  • VK_MEMORY_HEAP_DEVICE_LOCAL_BIT указывает, что куча соответствует памяти, локальной для устройства. Память, локальная для устройства, может иметь разные характеристики производительности, чем память, локальная для хоста, и может поддерживать разные флаги свойств памяти.

См. также

VkMemoryHeapFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryHeapFlagBits

VkMemoryPropertyFlagBits(3)

Имя

VkMemoryPropertyFlagBits - Битовая маска, определяющая свойства для типа памяти

C Спецификация

Биты, которые могут быть установлены в VkMemoryType::propertyFlags, указывающие свойства кучи памяти, следующие:

typedef enum VkMemoryPropertyFlagBits {
    VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
    VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
    VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
} VkMemoryPropertyFlagBits;

Описание

  • VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT бит указывает, что память, выделенная с этим типом, является наиболее эффективной для доступа к устройству. Это свойство будет установлено только для типов памяти, принадлежащих к кучам с установленным VK_MEMORY_HEAP_DEVICE_LOCAL_BIT.
  • VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT бит указывает, что память, выделенная с этим типом, может быть сопоставлена для доступа к хосту с использованием vkMapMemory.
  • VK_MEMORY_PROPERTY_HOST_COHERENT_BIT бит указывает, что команды управления кэшем хоста vkFlushMappedMemoryRanges и vkInvalidateMappedMemoryRanges не нужны для очистки записей хоста на устройство или для обеспечения видимости записей устройства для хоста соответственно.
  • VK_MEMORY_PROPERTY_HOST_CACHED_BIT бит указывает, что память, выделенная с этим типом, кэшируется на хосте. Доступ к памяти хоста из некэшированной памяти медленнее, чем к кэшированной памяти, однако некэшированная память всегда согласована с хостом.
  • VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT бит указывает, что тип памяти допускает только доступ к памяти устройства. Типы памяти не должны иметь одновременно установленные VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT и VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT. Кроме того, поддерживающая память объекта может предоставляться реализацией лениво, как указано в лениво выделяемой памяти.

См. также

VkMemoryPropertyFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryPropertyFlagBits

VkObjectType(3)

Имя

VkObjectType - Укажите перечисление для отслеживания типов дескрипторов объектов

C Спецификация

Перечисление VkObjectType определяет значения, каждое из которых соответствует определенному типу дескриптора Vulkan. Эти значения могут использоваться для сопоставления информации отладки с конкретным типом объекта с помощью одного или нескольких расширений.

typedef enum VkObjectType {
    VK_OBJECT_TYPE_UNKNOWN = 0,
    VK_OBJECT_TYPE_INSTANCE = 1,
    VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
    VK_OBJECT_TYPE_DEVICE = 3,
    VK_OBJECT_TYPE_QUEUE = 4,
    VK_OBJECT_TYPE_SEMAPHORE = 5,
    VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
    VK_OBJECT_TYPE_FENCE = 7,
    VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
    VK_OBJECT_TYPE_BUFFER = 9,
    VK_OBJECT_TYPE_IMAGE = 10,
    VK_OBJECT_TYPE_EVENT = 11,
    VK_OBJECT_TYPE_QUERY_POOL = 12,
    VK_OBJECT_TYPE_BUFFER_VIEW = 13,
    VK_OBJECT_TYPE_IMAGE_VIEW = 14,
    VK_OBJECT_TYPE_SHADER_MODULE = 15,
    VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
    VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
    VK_OBJECT_TYPE_RENDER_PASS = 18,
    VK_OBJECT_TYPE_PIPELINE = 19,
    VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
    VK_OBJECT_TYPE_SAMPLER = 21,
    VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
    VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
    VK_OBJECT_TYPE_FRAMEBUFFER = 24,
    VK_OBJECT_TYPE_COMMAND_POOL = 25,
} VkObjectType;

Описание

Таблица 12. Соответствие VkObjectType и дескриптора Vulkan
VkObjectType Тип дескриптора Vulkan

VK_OBJECT_TYPE_UNKNOWN

Неизвестный/неопределённый дескриптор

VK_OBJECT_TYPE_INSTANCE

VkInstance

VK_OBJECT_TYPE_PHYSICAL_DEVICE

VkPhysicalDevice

VK_OBJECT_TYPE_DEVICE

VkDevice

VK_OBJECT_TYPE_QUEUE

VkQueue

VK_OBJECT_TYPE_SEMAPHORE

VkSemaphore

VK_OBJECT_TYPE_COMMAND_BUFFER

VkCommandBuffer

VK_OBJECT_TYPE_FENCE

VkFence

VK_OBJECT_TYPE_DEVICE_MEMORY

VkDeviceMemory

VK_OBJECT_TYPE_BUFFER

VkBuffer

VK_OBJECT_TYPE_IMAGE

VkImage

VK_OBJECT_TYPE_EVENT

VkEvent

VK_OBJECT_TYPE_QUERY_POOL

VkQueryPool

VK_OBJECT_TYPE_BUFFER_VIEW

VkBufferView

VK_OBJECT_TYPE_IMAGE_VIEW

VkImageView

VK_OBJECT_TYPE_SHADER_MODULE

VkShaderModule

VK_OBJECT_TYPE_PIPELINE_CACHE

VkPipelineCache

VK_OBJECT_TYPE_PIPELINE_LAYOUT

VkPipelineLayout

VK_OBJECT_TYPE_RENDER_PASS

VkRenderPass

VK_OBJECT_TYPE_PIPELINE

VkPipeline

VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT

VkDescriptorSetLayout

VK_OBJECT_TYPE_SAMPLER

VkSampler

VK_OBJECT_TYPE_DESCRIPTOR_POOL

VkDescriptorPool

VK_OBJECT_TYPE_DESCRIPTOR_SET

VkDescriptorSet

VK_OBJECT_TYPE_FRAMEBUFFER

VkFramebuffer

VK_OBJECT_TYPE_COMMAND_POOL

VkCommandPool

См. также

Перекрёстные ссылки отсутствуют

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkObjectType

VkPhysicalDeviceType(3)

Имя

VkPhysicalDeviceType - Поддерживаемые типы физических устройств

C-спецификация

Типы физических устройств, которые могут быть возвращены в VkPhysicalDeviceProperties::deviceType:

typedef enum VkPhysicalDeviceType {
    VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
    VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
    VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
    VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
    VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
} VkPhysicalDeviceType;

Описание

  • VK_PHYSICAL_DEVICE_TYPE_OTHER - устройство не соответствует ни одному из других доступных типов.
  • VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU - устройство обычно встроено в или тесно связано с хостом.
  • VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU - устройство обычно представляет собой отдельный процессор, подключенный к хосту через межсоединение.
  • VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU - устройство обычно представляет собой виртуальный узел в среде виртуализации.
  • VK_PHYSICAL_DEVICE_TYPE_CPU - устройство обычно работает на тех же процессорах, что и хост.

Тип физического устройства указывается только в информационных целях и не оказывает прямого влияния на работу системы. Однако тип устройства может коррелировать с другими объявленными свойствами или возможностями системы, например, с количеством куч памяти.

См. также

VkPhysicalDeviceProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPhysicalDeviceType

VkPipelineBindPoint(3)

Имя

VkPipelineBindPoint - Указание точки привязки объекта конвейера к буферу команд

C-спецификация

Возможные значения vkCmdBindPipeline::pipelineBindPoint, указывающие точку привязки объекта конвейера:

typedef enum VkPipelineBindPoint {
    VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
    VK_PIPELINE_BIND_POINT_COMPUTE = 1,
} VkPipelineBindPoint;

Описание

  • VK_PIPELINE_BIND_POINT_COMPUTE указывает привязку как вычислительный конвейер.
  • VK_PIPELINE_BIND_POINT_GRAPHICS указывает привязку как графический конвейер.

См. также

VkSubpassDescription, vkCmdBindDescriptorSets, vkCmdBindPipeline

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineBindPoint

VkPipelineCacheHeaderVersion(3)

Имя

VkPipelineCacheHeaderVersion - Кодирование версии кэша конвейеров

C-спецификация

Возможные значения второй группы из четырёх байтов в заголовке, возвращаемом функцией vkGetPipelineCacheData, кодирующие версию кэша конвейеров:

typedef enum VkPipelineCacheHeaderVersion {
    VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
} VkPipelineCacheHeaderVersion;

Описание

  • VK_PIPELINE_CACHE_HEADER_VERSION_ONE указывает первую версию кэша конвейеров.

См. также

vkCreatePipelineCache, vkGetPipelineCacheData

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineCacheHeaderVersion

VkPipelineCreateFlagBits(3)

Имя

VkPipelineCreateFlagBits - Битовая маска, управляющая созданием конвейера

C-спецификация

Возможные значения элемента flags структуры VkGraphicsPipelineCreateInfo и VkComputePipelineCreateInfo, указывающие, как создаётся конвейер:

typedef enum VkPipelineCreateFlagBits {
    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
} VkPipelineCreateFlagBits;

Описание

  • VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT указывает, что созданный конвейер не будет оптимизирован. Использование этого флага может сократить время, затрачиваемое на создание конвейера.
  • VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT указывает, что создаваемый конвейер может быть родителем конвейера, который будет создан в последующем вызове vkCreateGraphicsPipelines или vkCreateComputePipelines.
  • VK_PIPELINE_CREATE_DERIVATIVE_BIT указывает, что создаваемый конвейер будет дочерним по отношению к ранее созданному родительскому конвейеру.

Допустимо устанавливать как VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT, так и VK_PIPELINE_CREATE_DERIVATIVE_BIT. Это позволяет конвейеру быть одновременно и родительским, и, возможно, дочерним в иерархии конвейеров. Дополнительную информацию см. в разделе Pipeline Derivatives.

См. также

VkPipelineCreateFlags

Примечания к документу

Дополнительную информацию см. в спецификации Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineCreateFlagBits

VkPipelineStageFlagBits(3)

Имя

VkPipelineStageFlagBits - Битовая маска, указывающая этапы конвейера

C-спецификация

Несколько команд синхронизации включают параметры этапа конвейера, ограничивая области синхронизации для этой команды только этими этапами. Это позволяет точно управлять точными зависимостями выполнения и доступом, выполняемыми командами действия. Реализации должны использовать эти этапы конвейера, чтобы избежать ненужных пауз или очистки кэша.

Биты, которые могут быть установлены, указывающие этапы конвейера, следующие:

typedef enum VkPipelineStageFlagBits {
    VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
    VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
    VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
    VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
    VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
    VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
    VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
    VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
    VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
    VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
    VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
    VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
    VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
    VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
} VkPipelineStageFlagBits;

Описание

  • VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT указывает этап конвейера, на котором любые команды первоначально принимаются очередью.
  • VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT указывает этап конвейера, на котором используются структуры данных Draw/DispatchIndirect.
  • VK_PIPELINE_STAGE_VERTEX_INPUT_BIT указывает этап конвейера, на котором используются буферы вершин и индексов.
  • VK_PIPELINE_STAGE_VERTEX_SHADER_BIT указывает этап вершинного шейдера.
  • VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT указывает этап шейдера управления тесселяцией.
  • VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT указывает этап шейдера оценки тесселяции.
  • VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT указывает этап геометрического шейдера.
  • VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT указывает этап фрагментного шейдера.
  • VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT указывает этап конвейера, на котором выполняются ранние тесты фрагментов (тесты глубины и трафарета до затенения фрагментов). Этот этап также включает операции загрузки подпрохода для прикреплений фреймбуфера с форматом глубины/трафарета.
  • VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT указывает этап конвейера, на котором выполняются поздние тесты фрагментов (тесты глубины и трафарета после затенения фрагментов). Этот этап также включает операции сохранения подпрохода для прикреплений фреймбуфера с форматом глубины/трафарета.
  • VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT указывает этап конвейера после смешивания, на котором выходные значения цвета выводятся из конвейера. Этот этап также включает операции загрузки и сохранения подпрохода и операции разрешения многовыборки для прикреплений фреймбуфера с цветовым форматом.
  • VK_PIPELINE_STAGE_TRANSFER_BIT указывает выполнение команд копирования. Это включает операции, полученные в результате всех команд копирования, команд очистки (за исключением vkCmdClearAttachments) и vkCmdCopyQueryPoolResults.
  • VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT указывает выполнение вычислительного шейдера.
  • VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT указывает заключительный этап в конвейере, на котором операции, сгенерированные всеми командами, завершают выполнение.
  • VK_PIPELINE_STAGE_HOST_BIT указывает псевдоэтап, указывающий на выполнение на хосте операций чтения/записи памяти устройства. Этот этап не вызывается никакими командами, записанными в буфер команд.
  • VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT указывает выполнение всех этапов графического конвейера и эквивалентно логическому ИЛИ:

    • VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT
    • VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
    • VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
    • VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
    • VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
    • VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
    • VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
    • VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
    • VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
    • VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
    • VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
    • VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
  • VK_PIPELINE_STAGE_ALL_COMMANDS_BIT эквивалентен логическому ИЛИ каждого другого флага этапа конвейера, который поддерживается в очереди, с которой он используется.
Примечание

Зависимость выполнения только с VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT в маске целевого этапа будет только препятствовать выполнению этого этапа в последующих отправленных командах. Поскольку этот этап не выполняет никакого фактического выполнения, это не наблюдается - по сути, это не задерживает обработку последующих команд. Аналогично, зависимость выполнения только с VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT в маске исходного этапа фактически не будет ждать завершения каких-либо предыдущих команд.

При определении зависимости памяти использование только VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT или VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT никогда не сделает доступными и/или видимыми какие-либо доступы, поскольку эти этапы не обращаются к памяти.

VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT и VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT полезны для выполнения операций перехода макета и владения очередью, когда требуемая зависимость выполнения удовлетворяется другими способами - например, операциями семафора между очередями.

См. также

VkPipelineStageFlags, vkCmdWriteTimestamp

Примечания к документу

Дополнительную информацию см. в спецификации Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineStageFlagBits

VkPolygonMode(3)

Имя

VkPolygonMode - Режим растеризации полигонов

C-спецификация

Возможные значения свойства VkPipelineRasterizationStateCreateInfo::polygonMode текущего активного конвейера, указывающего метод растеризации полигонов, следующие:

typedef enum VkPolygonMode {
    VK_POLYGON_MODE_FILL = 0,
    VK_POLYGON_MODE_LINE = 1,
    VK_POLYGON_MODE_POINT = 2,
} VkPolygonMode;

Описание

  • VK_POLYGON_MODE_POINT указывает, что вершины полигонов рисуются как точки.
  • VK_POLYGON_MODE_LINE указывает, что края полигонов рисуются как отрезки линий.
  • VK_POLYGON_MODE_FILL указывает, что полигоны отображаются с использованием правил растеризации полигонов в этом разделе.

Эти режимы влияют только на окончательную растеризацию полигонов: в частности, вершины полигона затеняются, а полигон обрезается и, возможно, отбрасывается до применения этих режимов.

См. также

VkPipelineRasterizationStateCreateInfo

Примечания к документу

Дополнительную информацию см. в спецификации Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPolygonMode

VkPrimitiveTopology(3)

Имя

VkPrimitiveTopology - Поддерживаемые топологии примитивов

C-спецификация

Топология примитива определяет, как последовательные вершины организованы в примитивы, и определяет тип примитива, который используется в начале графического конвейера. Эффективная топология для последующих этапов конвейера изменяется тесселяцией или геометрическим затенением (если используется то или другое) и зависит от режимов выполнения этих шейдеров. Поддерживаемые топологии определяются VkPrimitiveTopology и включают:

typedef enum VkPrimitiveTopology {
    VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
    VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
    VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
} VkPrimitiveTopology;

См. также

VkPipelineInputAssemblyStateCreateInfo

Примечания к документу

Дополнительную информацию см. в спецификации Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPrimitiveTopology

VkQueryControlFlagBits(3)

Имя

VkQueryControlFlagBits - Битовая маска, указывающая ограничения на запрос

C-спецификация

Биты, которые могут быть установлены в vkCmdBeginQuery::flags, указывающие ограничения на типы запросов, которые могут быть выполнены, следующие:

typedef enum VkQueryControlFlagBits {
    VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
} VkQueryControlFlagBits;

Описание

  • VK_QUERY_CONTROL_PRECISE_BIT указывает точность запросов на затенение.

См. также

VkQueryControlFlags

Примечания к документу

Дополнительную информацию см. в спецификации Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryControlFlagBits

VkQueryPipelineStatisticFlagBits(3)

Имя

VkQueryPipelineStatisticFlagBits - Битовая маска, указывающая запрашиваемые статистики конвейера

C-спецификация

Биты, которые могут быть установлены для индивидуального включения счетчиков статистики конвейера для пулов запросов с VkQueryPoolCreateInfo::pipelineStatistics, и для вторичных буферов команд с VkCommandBufferInheritanceInfo::pipelineStatistics, следующие:

typedef enum VkQueryPipelineStatisticFlagBits {
    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
    VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
    VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
} VkQueryPipelineStatisticFlagBits;

Описание

  • VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT указывает, что запросы, управляемые пулом, будут учитывать количество вершин, обработанных этапом сборки входных данных. Вершины, соответствующие неполным примитивам, могут учитываться в подсчете.
  • VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT указывает, что запросы, управляемые пулом, будут учитывать количество примитивов, обработанных этапом сборки входных данных. Если включен перезапуск примитива, перезапуск топологии примитива не влияет на счетчик. Неполные примитивы могут учитываться.
  • VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT указывает, что запросы, управляемые пулом, будут учитывать количество вызовов вершинного шейдера. Значение этого счетчика увеличивается каждый раз, когда вызывается вершинный шейдер (вызов).
  • VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT указывает, что запросы, управляемые пулом, будут учитывать количество вызовов геометрического шейдера. Значение этого счетчика увеличивается каждый раз, когда вызывается геометрический шейдер (вызов). В случае экземпляризированных геометрических шейдеров, счетчик вызовов геометрического шейдера увеличивается для каждого отдельного экземпляризированного вызова.
  • VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT указывает, что запросы, управляемые пулом, будут учитывать количество примитивов, созданных вызовами геометрического шейдера. Значение счетчика увеличивается каждый раз, когда геометрический шейдер выдает примитив. Перезапуск топологии примитива с использованием инструкций SPIR-V OpEndPrimitive или OpEndStreamPrimitive не влияет на количество выходных примитивов геометрического шейдера.
  • VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT указывает, что запросы, управляемые пулом, будут учитывать количество примитивов, обработанных этапом обрезания примитива конвейера. Значение счетчика увеличивается каждый раз, когда примитив достигает этапа обрезания примитива.
  • VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT указывает, что запросы, управляемые пулом, будут учитывать количество примитивов, выдаваемых этапом обрезания примитива конвейера. Значение счетчика увеличивается каждый раз, когда примитив проходит этап обрезания примитива. Фактическое количество примитивов, выдаваемых этапом обрезания примитива для определенного входного примитива, зависит от реализации, но должно удовлетворять следующим условиям:

    • Если хотя бы одна вершина входного примитива находится внутри области отсечения, счетчик увеличивается на единицу или более.
    • В противном случае счетчик увеличивается на ноль или более.
  • VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT указывает, что запросы, управляемые пулом, будут учитывать количество вызовов фрагментного шейдера. Значение счетчика увеличивается каждый раз, когда вызывается фрагментный шейдер (вызов).
  • VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT указывает, что запросы, управляемые пулом, будут учитывать количество патчей, обработанных шейдером управления тесселяцией. Значение счетчика увеличивается один раз для каждого патча, для которого вызывается шейдер управления тесселяцией (вызов).
  • VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT указывает, что запросы, управляемые пулом, будут учитывать количество вызовов шейдера оценки тесселяции. Значение счетчика увеличивается каждый раз, когда вызывается шейдер оценки тесселяции (вызов).
  • VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT указывает, что запросы, управляемые пулом, будут учитывать количество вызовов вычислительного шейдера. Значение счетчика увеличивается каждый раз, когда вызывается вычислительный шейдер. Реализации могут пропускать выполнение некоторых вызовов вычислительного шейдера или выполнять дополнительные вызовы вычислительного шейдера по причинам, зависящим от реализации, при условии, что результаты рендеринга остаются неизменными.

Эти значения предназначены для измерения относительной статистики на одной реализации. Различные архитектуры устройств будут подсчитывать эти значения по-разному. Любые или все счетчики могут быть затронуты проблемами, описанными в разделе Операция запроса.

Примечание

Например, устройства рендеринга на основе тайлов могут нуждаться в многократном воспроизведении сцены, что влияет на некоторые значения счетчиков.

Если в конвейере включен rasterizerDiscardEnable, реализации могут отбрасывать примитивы после этапа окончательной обработки вершин. В результате, если включен rasterizerDiscardEnable, счетчики входных и выходных примитивов обрезания могут не увеличиваться.

Когда запрос статистики конвейера завершается, результат этого запроса помечается как доступный. Приложение может скопировать результат в буфер (через vkCmdCopyQueryPoolResults), или запросить его помещение в память хоста (через vkGetQueryPoolResults).

См. также

VkQueryPipelineStatisticFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryPipelineStatisticFlagBits

VkQueryResultFlagBits(3)

Имя

VkQueryResultFlagBits - Битовая маска, указывающая как и когда возвращаются результаты запроса

Спецификация C

Биты, которые могут быть установлены в vkGetQueryPoolResults::flags и vkCmdCopyQueryPoolResults::flags, указывающие как и когда возвращаются результаты, следующие:

typedef enum VkQueryResultFlagBits {
    VK_QUERY_RESULT_64_BIT = 0x00000001,
    VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
    VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
    VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
} VkQueryResultFlagBits;

Описание

  • VK_QUERY_RESULT_64_BIT указывает, что результаты будут записаны как массив 64-битных значений без знака. Если этот бит не установлен, результаты будут записаны как массив 32-битных значений без знака.
  • VK_QUERY_RESULT_WAIT_BIT указывает, что Vulkan будет ожидать, пока статус каждого запроса станет доступным, прежде чем извлекать его результаты.
  • VK_QUERY_RESULT_WITH_AVAILABILITY_BIT указывает, что статус доступности сопровождает результаты.
  • VK_QUERY_RESULT_PARTIAL_BIT указывает, что возврат частичных результатов допустим.

См. также

VkQueryResultFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryResultFlagBits

VkQueryType(3)

Имя

VkQueryType - Указывает тип запросов, управляемых пулом запросов

Спецификация C

Возможные значения VkQueryPoolCreateInfo::queryType, указывающие тип запросов, управляемых пулом, следующие:

typedef enum VkQueryType {
    VK_QUERY_TYPE_OCCLUSION = 0,
    VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
    VK_QUERY_TYPE_TIMESTAMP = 2,
} VkQueryType;

Описание

  • VK_QUERY_TYPE_OCCLUSION указывает на запрос на затенение.
  • VK_QUERY_TYPE_PIPELINE_STATISTICS указывает на запрос статистики конвейера.
  • VK_QUERY_TYPE_TIMESTAMP указывает на запрос временной метки.

См. также

VkQueryPoolCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryType

VkQueueFlagBits(3)

Имя

VkQueueFlagBits - Битовая маска, указывающая возможности очередей в семействе очередей

Спецификация C

Биты, которые могут быть установлены в VkQueueFamilyProperties::queueFlags, указывающие возможности очередей в семействе очередей, следующие:

typedef enum VkQueueFlagBits {
    VK_QUEUE_GRAPHICS_BIT = 0x00000001,
    VK_QUEUE_COMPUTE_BIT = 0x00000002,
    VK_QUEUE_TRANSFER_BIT = 0x00000004,
    VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
} VkQueueFlagBits;

Описание

  • VK_QUEUE_GRAPHICS_BIT указывает, что очереди в этом семействе очередей поддерживают графические операции.
  • VK_QUEUE_COMPUTE_BIT указывает, что очереди в этом семействе очередей поддерживают вычислительные операции.
  • VK_QUEUE_TRANSFER_BIT указывает, что очереди в этом семействе очередей поддерживают операции передачи.
  • VK_QUEUE_SPARSE_BINDING_BIT указывает, что очереди в этом семействе очередей поддерживают операции управления разреженной памятью (см. Разреженные ресурсы). Если включены какие-либо функции разреженных ресурсов, то по крайней мере одно семейство очередей должно поддерживать этот бит.

Если реализация предоставляет любое семейство очередей, которое поддерживает графические операции, то по крайней мере одно семейство очередей по крайней мере одного физического устройства, предоставляемого реализацией, должно поддерживать как графические, так и вычислительные операции.

Примечание

Все команды, которые разрешены в очереди, поддерживающей операции передачи, также разрешены в очереди, поддерживающей графические или вычислительные операции. Таким образом, если возможности семейства очередей включают VK_QUEUE_GRAPHICS_BIT или VK_QUEUE_COMPUTE_BIT, то отдельное сообщение о возможности VK_QUEUE_TRANSFER_BIT для этого семейства очередей является необязательным.

Для получения дополнительной информации см. Очереди.

См. также

VkQueueFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueueFlagBits

VkResult(3)

Имя

VkResult - Коды возврата команд Vulkan

Спецификация C

Хотя основной API Vulkan не предназначен для обнаружения неправильного использования, некоторые обстоятельства все еще требуют кодов возврата. Команды в Vulkan возвращают свой статус через коды возврата, которые относятся к одной из двух категорий:

  • Коды успешного завершения возвращаются, когда команде необходимо сообщить об успехе или информации о состоянии. Все коды успешного завершения являются неотрицательными значениями.
  • Коды ошибок времени выполнения возвращаются, когда команде необходимо сообщить об ошибке, которая может быть обнаружена только во время выполнения. Все коды ошибок времени выполнения являются отрицательными значениями.

Все кодовые возвраты в Vulkan сообщаются через возвращаемые значения VkResult. Возможные коды:

typedef enum VkResult {
    VK_SUCCESS = 0,
    VK_NOT_READY = 1,
    VK_TIMEOUT = 2,
    VK_EVENT_SET = 3,
    VK_EVENT_RESET = 4,
    VK_INCOMPLETE = 5,
    VK_ERROR_OUT_OF_HOST_MEMORY = -1,
    VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
    VK_ERROR_INITIALIZATION_FAILED = -3,
    VK_ERROR_DEVICE_LOST = -4,
    VK_ERROR_MEMORY_MAP_FAILED = -5,
    VK_ERROR_LAYER_NOT_PRESENT = -6,
    VK_ERROR_EXTENSION_NOT_PRESENT = -7,
    VK_ERROR_FEATURE_NOT_PRESENT = -8,
    VK_ERROR_INCOMPATIBLE_DRIVER = -9,
    VK_ERROR_TOO_MANY_OBJECTS = -10,
    VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
    VK_ERROR_FRAGMENTED_POOL = -12,
} VkResult;

Описание

Коды успеха
  • VK_SUCCESS Команда успешно завершена
  • VK_NOT_READY Ограда или запрос еще не завершены
  • VK_TIMEOUT Операция ожидания не завершена за указанное время
  • VK_EVENT_SET Событие установлено
  • VK_EVENT_RESET Событие сброшено
  • VK_INCOMPLETE Возвращаемый массив был слишком мал для результата
Коды ошибок
  • VK_ERROR_OUT_OF_HOST_MEMORY Возникла ошибка выделения памяти хоста.
  • VK_ERROR_OUT_OF_DEVICE_MEMORY Возникла ошибка выделения памяти устройства.
  • VK_ERROR_INITIALIZATION_FAILED Инициализацию объекта не удалось завершить по причинам, специфичным для реализации.
  • VK_ERROR_DEVICE_LOST Логическое или физическое устройство было потеряно. См. Потерянное устройство
  • VK_ERROR_MEMORY_MAP_FAILED Отображение объекта памяти не удалось.
  • VK_ERROR_LAYER_NOT_PRESENT Запрошенный слой отсутствует или не может быть загружен.
  • VK_ERROR_EXTENSION_NOT_PRESENT Запрошенное расширение не поддерживается.
  • VK_ERROR_FEATURE_NOT_PRESENT Запрошенная функция не поддерживается.
  • VK_ERROR_INCOMPATIBLE_DRIVER Запрошенная версия Vulkan не поддерживается драйвером или несовместима по причинам, специфичным для реализации.
  • VK_ERROR_TOO_MANY_OBJECTS Уже создано слишком много объектов данного типа.
  • VK_ERROR_FORMAT_NOT_SUPPORTED Запрошенный формат не поддерживается на этом устройстве.
  • VK_ERROR_FRAGMENTED_POOL Выделение пула памяти не удалось из-за фрагментации памяти пула. Это должно возвращаться только в том случае, если не было предпринято попытки выделить память хоста или устройства для размещения нового выделения.

Если команда возвращает ошибку времени выполнения, она оставит все указатели результатов без изменений, если иное поведение не определено явно в спецификации.

Ошибки нехватки памяти не повреждают существующие объекты Vulkan. Объекты, которые уже были успешно созданы, могут по-прежнему использоваться приложением.

Критически важные для производительности команды обычно не имеют кодов возврата. Если в таких командах возникает ошибка времени выполнения, реализация отложит сообщение об ошибке до указанного момента. Для команд, которые записывают в буферы команд (vkCmd*) ошибки времени выполнения сообщаются vkEndCommandBuffer.

См. также

Перекрестные ссылки отсутствуют

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkResult

VkSampleCountFlagBits(3)

Имя

VkSampleCountFlagBits - Битовая маска, указывающая на количество выборок, поддерживаемых для изображения, используемого для операций хранения

C Спецификация

Биты, которые могут быть установлены в пределах количества выборок, возвращаемых функцией VkPhysicalDeviceLimits, а также в других запросах и структурах, представляющих количество выборок изображения, следующие:

typedef enum VkSampleCountFlagBits {
    VK_SAMPLE_COUNT_1_BIT = 0x00000001,
    VK_SAMPLE_COUNT_2_BIT = 0x00000002,
    VK_SAMPLE_COUNT_4_BIT = 0x00000004,
    VK_SAMPLE_COUNT_8_BIT = 0x00000008,
    VK_SAMPLE_COUNT_16_BIT = 0x00000010,
    VK_SAMPLE_COUNT_32_BIT = 0x00000020,
    VK_SAMPLE_COUNT_64_BIT = 0x00000040,
} VkSampleCountFlagBits;

Описание

  • VK_SAMPLE_COUNT_1_BIT указывает изображение с одной выборкой на пиксель.
  • VK_SAMPLE_COUNT_2_BIT указывает изображение с 2 выборками на пиксель.
  • VK_SAMPLE_COUNT_4_BIT указывает изображение с 4 выборками на пиксель.
  • VK_SAMPLE_COUNT_8_BIT указывает изображение с 8 выборками на пиксель.
  • VK_SAMPLE_COUNT_16_BIT указывает изображение с 16 выборками на пиксель.
  • VK_SAMPLE_COUNT_32_BIT указывает изображение с 32 выборками на пиксель.
  • VK_SAMPLE_COUNT_64_BIT указывает изображение с 64 выборками на пиксель.

См. также

VkAttachmentDescription, VkImageCreateInfo, VkPipelineMultisampleStateCreateInfo, VkSampleCountFlags, vkGetPhysicalDeviceSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSampleCountFlagBits

VkSamplerAddressMode(3)

Имя

VkSamplerAddressMode - Указывает поведение выборки с текстурными координатами за пределами изображения

C Спецификация

Возможные значения параметров VkSamplerCreateInfo::addressMode*, указывающие поведение выборки с координатами за пределами диапазона [0,1] для соответствующих координат u, v или w, как определено в разделе Операция обёртывания, следующие:

typedef enum VkSamplerAddressMode {
    VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
    VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
} VkSamplerAddressMode;

Описание

  • VK_SAMPLER_ADDRESS_MODE_REPEAT указывает, что будет использоваться режим обёртывания повтора.
  • VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT указывает, что будет использоваться режим обёртывания зеркального повтора.
  • VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE указывает, что будет использоваться режим обёртывания привязки к краю.
  • VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER указывает, что будет использоваться режим обёртывания привязки к границе.
  • VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE указывает, что будет использоваться режим зеркальной привязки к краю. Это допустимо только в том случае, если включено расширение VK_KHR_mirror_clamp_to_edge.

См. также

VkSamplerCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSamplerAddressMode

VkSamplerMipmapMode(3)

Имя

VkSamplerMipmapMode - Указывает режим mipmap, используемый для поиска текстур

C Спецификация

Возможные значения VkSamplerCreateInfo::mipmapMode, указывающие режим mipmap, используемый для поиска текстур, следующие:

typedef enum VkSamplerMipmapMode {
    VK_SAMPLER_MIPMAP_MODE_NEAREST = 0,
    VK_SAMPLER_MIPMAP_MODE_LINEAR = 1,
} VkSamplerMipmapMode;

Описание

  • VK_SAMPLER_MIPMAP_MODE_NEAREST указывает ближайшую фильтрацию.
  • VK_SAMPLER_MIPMAP_MODE_LINEAR указывает линейную фильтрацию.

Эти режимы подробно описаны в разделе Фильтрация текстурных элементов.

См. также

VkSamplerCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSamplerMipmapMode

VkShaderStageFlagBits(3)

Имя

VkShaderStageFlagBits - Битовая маска, указывающая на этап конвейера

C Спецификация

Команды и структуры, которым необходимо указать один или несколько этапов шейдера, делают это с помощью битовой маски, биты которой соответствуют этапам. Биты, которые могут быть установлены для указания этапов шейдера, следующие:

typedef enum VkShaderStageFlagBits {
    VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
    VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
    VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
    VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
    VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
    VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
} VkShaderStageFlagBits;

Описание

  • VK_SHADER_STAGE_VERTEX_BIT указывает вершинный этап.
  • VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT указывает этап управления тесселяцией.
  • VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT указывает этап оценки тесселяции.
  • VK_SHADER_STAGE_GEOMETRY_BIT указывает геометрический этап.
  • VK_SHADER_STAGE_FRAGMENT_BIT указывает фрагментный этап.
  • VK_SHADER_STAGE_COMPUTE_BIT указывает вычислительный этап.
  • VK_SHADER_STAGE_ALL_GRAPHICS представляет собой комбинацию битов, используемых в качестве сокращения для указания всех графических этапов, определенных выше (за исключением вычислительного этапа).
  • VK_SHADER_STAGE_ALL представляет собой комбинацию битов, используемых в качестве сокращения для указания всех этапов шейдера, поддерживаемых устройством, включая все дополнительные этапы, которые вводятся расширениями.

См. также

VkPipelineShaderStageCreateInfo, VkShaderStageFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkShaderStageFlagBits

VkSharingMode(3)

Имя

VkSharingMode - Режимы совместного использования буферов и изображений

C Спецификация

Объекты буферов и изображений создаются с режимом совместного использования, определяющим, как они могут быть доступны из очередей. Поддерживаемые режимы совместного использования:

typedef enum VkSharingMode {
    VK_SHARING_MODE_EXCLUSIVE = 0,
    VK_SHARING_MODE_CONCURRENT = 1,
} VkSharingMode;

Описание

  • VK_SHARING_MODE_EXCLUSIVE указывает, что доступ к любому диапазону или подобласти изображения объекта будет эксклюзивным для одной очереди семейства за один раз.
  • VK_SHARING_MODE_CONCURRENT указывает, что поддерживается одновременный доступ к любому диапазону или подобласти изображения объекта из нескольких семейств очередей.
Примечание

VK_SHARING_MODE_CONCURRENT может привести к более низкой производительности доступа к буферу или изображению, чем VK_SHARING_MODE_EXCLUSIVE.

Диапазоны буферов и подобласти изображения объектов изображений, созданных с использованием VK_SHARING_MODE_EXCLUSIVE, должны быть доступны только очередям в одном семействе очередей в любой момент времени. Для того чтобы другое семейство очередей могло интерпретировать содержимое памяти диапазона или подобласти изображения, приложение должно выполнить передачу владения семейства очередей.

При создании ресурсы, использующие VK_SHARING_MODE_EXCLUSIVE, не принадлежат ни одному семейству очередей. Препятствие памяти буфера или изображения не требуется для приобретения владения, когда ни одно семейство очередей не владеет ресурсом - оно неявно приобретается при первом использовании в очереди.

Примечание

Изображения по-прежнему требуют перехода компоновки из VK_IMAGE_LAYOUT_UNDEFINED или VK_IMAGE_LAYOUT_PREINITIALIZED перед использованием в первой очереди.

END_OF_DOCUMENT_MARKER

Семейство очередей может взять на себя владение подобластью изображения или диапазоном буфера ресурса, созданного с помощью VK_SHARING_MODE_EXCLUSIVE, без передачи владения, так же, как и для только что созданного ресурса; однако, взятие владения таким образом приводит к тому, что содержимое подобласти изображения или диапазона буфера не определено.

Доступ к диапазонам буферов и подобластям изображений объектов изображений, созданных с помощью VK_SHARING_MODE_CONCURRENT, должен осуществляться только очередями из семейств очередей, указанных через члены queueFamilyIndexCount и pQueueFamilyIndices соответствующих структур информации о создании.

См. также

VkBufferCreateInfo, VkImageCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSharingMode

VkSparseImageFormatFlagBits(3)

Имя

VkSparseImageFormatFlagBits - Битовая маска, указывающая дополнительную информацию о разреженном ресурсе изображения

C Спецификация

Биты, которые могут быть установлены в VkSparseImageFormatProperties::flags, указывающие дополнительную информацию о разреженном ресурсе, следующие:

typedef enum VkSparseImageFormatFlagBits {
    VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
    VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
    VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
} VkSparseImageFormatFlagBits;

Описание

  • VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT указывает, что изображение использует один регион хвоста mip для всех слоев массива.
  • VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT указывает, что первый уровень mip, размеры которого не являются целыми кратными соответствующим размерам блока разреженного изображения, начинает регион хвоста mip.
  • VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT указывает, что изображение использует нестандартные размеры блока разреженного изображения, и значения imageGranularity не совпадают со стандартными размерами блока разреженного изображения для данного пиксельного формата.

См. также

VkSparseImageFormatFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseImageFormatFlagBits

VkSparseMemoryBindFlagBits(3)

Имя

VkSparseMemoryBindFlagBits - Битовая маска, указывающая использование операции привязки разреженной памяти

C Спецификация

Биты, которые могут быть установлены в VkSparseMemoryBind::flags, указывающие использование операции привязки разреженной памяти, следующие:

typedef enum VkSparseMemoryBindFlagBits {
    VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
} VkSparseMemoryBindFlagBits;

Описание

  • VK_SPARSE_MEMORY_BIND_METADATA_BIT указывает, что привязываемая память предназначена только для аспекта метаданных.

См. также

VkSparseMemoryBindFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseMemoryBindFlagBits

VkStencilFaceFlagBits(3)

Имя

VkStencilFaceFlagBits - Битовая маска, указывающая наборы состояний трафарета, для которых необходимо обновить маску сравнения

C Спецификация

Биты, которые могут быть установлены в параметре vkCmdSetStencilCompareMask::faceMask, и аналогичные параметры других команд, указывающие, для каких состояний трафарета обновлять маски трафарета, следующие:

typedef enum VkStencilFaceFlagBits {
    VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
    VK_STENCIL_FACE_BACK_BIT = 0x00000002,
    VK_STENCIL_FRONT_AND_BACK = 0x00000003,
} VkStencilFaceFlagBits;

Описание

  • VK_STENCIL_FACE_FRONT_BIT указывает, что обновляется только передний набор состояний трафарета.
  • VK_STENCIL_FACE_BACK_BIT указывает, что обновляется только задний набор состояний трафарета.
  • VK_STENCIL_FRONT_AND_BACK является комбинацией VK_STENCIL_FACE_FRONT_BIT и VK_STENCIL_FACE_BACK_BIT, и указывает, что обновляются оба набора состояний трафарета.

См. также

VkStencilFaceFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkStencilFaceFlagBits

VkStencilOp(3)

Имя

VkStencilOp - Функция сравнения трафарета

C Спецификация

Возможные значения членов failOp, passOp и depthFailOp структуры VkStencilOpState, указывающие, что происходит с сохраненным значением трафарета, если этот или некоторые последующие тесты завершаются неудачей или успешно, следующие:

typedef enum VkStencilOp {
    VK_STENCIL_OP_KEEP = 0,
    VK_STENCIL_OP_ZERO = 1,
    VK_STENCIL_OP_REPLACE = 2,
    VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
    VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
    VK_STENCIL_OP_INVERT = 5,
    VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
    VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
} VkStencilOp;

Описание

  • VK_STENCIL_OP_KEEP сохраняет текущее значение.
  • VK_STENCIL_OP_ZERO устанавливает значение в 0.
  • VK_STENCIL_OP_REPLACE устанавливает значение в reference.
  • VK_STENCIL_OP_INCREMENT_AND_CLAMP увеличивает текущее значение и ограничивает его максимальным представимым беззнаковым значением.
  • VK_STENCIL_OP_DECREMENT_AND_CLAMP уменьшает текущее значение и ограничивает его 0.
  • VK_STENCIL_OP_INVERT побитово инвертирует текущее значение.
  • VK_STENCIL_OP_INCREMENT_AND_WRAP увеличивает текущее значение и переносит его в 0, когда было бы превышено максимальное значение.
  • VK_STENCIL_OP_DECREMENT_AND_WRAP уменьшает текущее значение и переносит его в максимальное возможное значение, когда значение опускается ниже 0.

Для целей увеличения и уменьшения биты трафарета рассматриваются как беззнаковое целое число.

Если тест трафарета завершается неудачей, бит покрытия образца очищается во фрагменте. Если нет вложения буфера кадра трафарета, изменение трафарета не может произойти, и это так, как если бы тесты трафарета всегда проходили.

Если тест трафарета проходит, член writeMask структур VkStencilOpState управляет тем, как обновленное значение трафарета записывается во вложение буфера кадра трафарета.

Наименее значимые s биты writeMask, где s - это количество битов во вложении буфера кадра трафарета, указывают целочисленную маску. Там, где в этой маске появляется 1, записывается соответствующий бит в значении трафарета во вложении глубины/трафарета; там, где появляется 0, бит не записывается. Значение writeMask использует либо переднее, либо заднее состояние в зависимости от направленности фрагмента. Фрагменты, созданные передними примитивами, используют переднюю маску, а фрагменты, созданные задними примитивами, используют заднюю маску.

См. также

VkStencilOpState

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkStencilOp

VkStructureType(3)

Имя

VkStructureType - Типы структур Vulkan (stype)

C Спецификация

Структуры Vulkan, содержащие члены sType, должны иметь значение sType, соответствующее типу структуры, как более подробно описано в Правильное использование для типов структур. Типы структур, поддерживаемые API Vulkan, включают:

typedef enum VkStructureType {
    VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
    VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
    VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
    VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
} VkStructureType;

См. также

VkApplicationInfo, VkBindSparseInfo, VkBufferCreateInfo, VkBufferMemoryBarrier, VkBufferViewCreateInfo, VkCommandBufferAllocateInfo, VkCommandBufferBeginInfo, VkCommandBufferInheritanceInfo, VkCommandPoolCreateInfo, VkComputePipelineCreateInfo, VkCopyDescriptorSet, VkDescriptorPoolCreateInfo, VkDescriptorSetAllocateInfo, VkDescriptorSetLayoutCreateInfo, VkDeviceCreateInfo, VkDeviceQueueCreateInfo, VkEventCreateInfo, VkFenceCreateInfo, VkFramebufferCreateInfo, VkGraphicsPipelineCreateInfo, VkImageCreateInfo, VkImageMemoryBarrier, VkImageViewCreateInfo, VkInstanceCreateInfo, VkMappedMemoryRange, VkMemoryAllocateInfo, VkMemoryBarrier, VkPipelineCacheCreateInfo, VkPipelineColorBlendStateCreateInfo, VkPipelineDepthStencilStateCreateInfo, VkPipelineDynamicStateCreateInfo, VkPipelineInputAssemblyStateCreateInfo, VkPipelineLayoutCreateInfo, VkPipelineMultisampleStateCreateInfo, VkPipelineRasterizationStateCreateInfo, VkPipelineShaderStageCreateInfo, VkPipelineTessellationStateCreateInfo, VkPipelineVertexInputStateCreateInfo, VkPipelineViewportStateCreateInfo, VkQueryPoolCreateInfo, VkRenderPassBeginInfo, VkRenderPassCreateInfo, VkSamplerCreateInfo, VkSemaphoreCreateInfo, VkShaderModuleCreateInfo, VkSubmitInfo, VkWriteDescriptorSet

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkStructureType

VkSubpassContents(3)

Имя

VkSubpassContents - Указывает, как предоставляются команды в первом субпроходе render pass

C Спецификация

Возможные значения vkCmdBeginRenderPass::contents, указывающие, как будут предоставляться команды в первом субпроходе, следующие:

typedef enum VkSubpassContents {
    VK_SUBPASS_CONTENTS_INLINE = 0,
    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
} VkSubpassContents;

Описание

  • VK_SUBPASS_CONTENTS_INLINE указывает, что содержимое субпрохода будет записано встроенным образом в основной буфер команд, и вторичные буферы команд не должны выполняться в пределах субпрохода.
  • VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS указывает, что содержимое записывается во вторичные буферы команд, которые будут вызываться из основного буфера команд, и vkCmdExecuteCommands является единственной допустимой командой в буфере команд до vkCmdNextSubpass или vkCmdEndRenderPass.

См. также

vkCmdBeginRenderPass, vkCmdNextSubpass

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSubpassContents

VkSubpassDescriptionFlagBits(3)

Имя

VkSubpassDescriptionFlagBits - Битовая маска, указывающая использование субпрохода

C Спецификация

Биты, которые могут быть установлены в VkSubpassDescription::flags, указывающие использование субпрохода, следующие:

typedef enum VkSubpassDescriptionFlagBits {
} VkSubpassDescriptionFlagBits;

См. также

VkSubpassDescriptionFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSubpassDescriptionFlagBits

VkSystemAllocationScope(3)

Имя

VkSystemAllocationScope - Область выделения

C Спецификация

Каждое выделение имеет область выделения, которая определяет его срок службы и с каким объектом оно связано. Возможные значения, передаваемые параметру allocationScope функций обратного вызова, указанных VkAllocationCallbacks, указывающие область выделения, следующие:

typedef enum VkSystemAllocationScope {
    VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
    VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
    VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
    VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
} VkSystemAllocationScope;

Описание

  • VK_SYSTEM_ALLOCATION_SCOPE_COMMAND указывает, что выделение относится к длительности выполнения команды Vulkan.
  • VK_SYSTEM_ALLOCATION_SCOPE_OBJECT указывает, что выделение относится к сроку службы объекта Vulkan, который создается или используется.
  • VK_SYSTEM_ALLOCATION_SCOPE_CACHE указывает, что выделение относится к сроку службы объекта VkPipelineCache.
  • VK_SYSTEM_ALLOCATION_SCOPE_DEVICE указывает, что выделение относится к сроку службы устройства Vulkan.
  • VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE указывает, что выделение относится к сроку службы экземпляра Vulkan.

Большинство команд Vulkan работают с одним объектом, или существует единственный объект, который создается или изменяется. Когда выделение использует область выделения VK_SYSTEM_ALLOCATION_SCOPE_OBJECT или VK_SYSTEM_ALLOCATION_SCOPE_CACHE, выделение относится к объекту, который создается или изменяется.

Когда реализации требуется память хоста, она будет делать вызовы в приложение, используя наиболее конкретный доступный распределитель и область выделения:

  • Если выделение относится к длительности команды, распределитель будет использовать область выделения VK_SYSTEM_ALLOCATION_SCOPE_COMMAND. Используется наиболее конкретный доступный распределитель: если создаваемый или изменяемый объект имеет распределитель, будет использоваться распределитель этого объекта; иначе, если родительский VkDevice имеет распределитель, он будет использован; иначе, если родительский VkInstance имеет распределитель, он будет использован. В противном случае,
  • Если выделение связано с объектом типа VkPipelineCache, распределитель будет использовать область выделения VK_SYSTEM_ALLOCATION_SCOPE_CACHE. Используется наиболее конкретный доступный распределитель (кэш конвейеров, иначе устройство, иначе экземпляр). В противном случае,
  • Если выделение относится к сроку службы объекта, этот объект создается или изменяется командой, и тип этого объекта не VkDevice или VkInstance, распределитель будет использовать область выделения VK_SYSTEM_ALLOCATION_SCOPE_OBJECT. Используется наиболее конкретный доступный распределитель (объект, иначе устройство, иначе экземпляр). В противном случае,
  • Если выделение относится к сроку службы устройства, распределитель будет использовать область выделения VK_SYSTEM_ALLOCATION_SCOPE_DEVICE. Используется наиболее конкретный доступный распределитель (устройство, иначе экземпляр). В противном случае,
  • Если выделение относится к сроку службы экземпляра, и экземпляр имеет распределитель, его распределитель будет использоваться с областью выделения VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE.
  • В противном случае реализация будет выделять память через альтернативный механизм, который не указан.

См. также

VkAllocationCallbacks

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSystemAllocationScope

VkVertexInputRate(3)

Имя

VkVertexInputRate - Указывает скорость, с которой атрибуты вершин извлекаются из буферов

C Спецификация

Возможные значения VkVertexInputBindingDescription::inputRate, указывающие скорость, с которой атрибуты вершин извлекаются из буферов, следующие:

typedef enum VkVertexInputRate {
    VK_VERTEX_INPUT_RATE_VERTEX = 0,
    VK_VERTEX_INPUT_RATE_INSTANCE = 1,
} VkVertexInputRate;

Описание

  • VK_VERTEX_INPUT_RATE_VERTEX указывает, что адресация атрибутов вершин является функцией индекса вершины.
  • VK_VERTEX_INPUT_RATE_INSTANCE указывает, что адресация атрибутов вершин является функцией индекса экземпляра.

См. также

VkVertexInputBindingDescription

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkVertexInputRate

Флаги

VkAccessFlags(3)

Имя

VkAccessFlags - Битовая маска VkAccessFlagBits

C Спецификация

typedef VkFlags VkAccessFlags;

Описание

VkAccessFlags является маской из нуля или более VkAccessFlagBits. Она используется как член и/или параметр структур и команд в разделе «См. также» ниже.

См. также

VkAccessFlagBits, VkBufferMemoryBarrier, VkImageMemoryBarrier, VkMemoryBarrier, VkSubpassDependency

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkAccessFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не непосредственно.

VkAttachmentDescriptionFlags(3)

Имя

VkAttachmentDescriptionFlags - Битовая маска VkAttachmentDescriptionFlagBits

C Спецификация

typedef VkFlags VkAttachmentDescriptionFlags;

Описание

VkAttachmentDescriptionFlags является маской из нуля или более VkAttachmentDescriptionFlagBits. Она используется как член и/или параметр структур и команд в разделе «См. также» ниже.

См. также

VkAttachmentDescription, VkAttachmentDescriptionFlagBits

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkAttachmentDescriptionFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не непосредственно.

VkBufferCreateFlags(3)

Имя

VkBufferCreateFlags - Битовая маска VkBufferCreateFlagBits

C Спецификация

typedef VkFlags VkBufferCreateFlags;

Описание

VkBufferCreateFlags является маской из нуля или более VkBufferCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе «См. также» ниже.

См. также

VkBufferCreateFlagBits, VkBufferCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не непосредственно.

VkBufferUsageFlags(3)

Имя

VkBufferUsageFlags - Битовая маска VkBufferUsageFlagBits

C Спецификация

typedef VkFlags VkBufferUsageFlags;

Описание

VkBufferUsageFlags является маской из нуля или более VkBufferUsageFlagBits. Она используется как член и/или параметр структур и команд в разделе «См. также» ниже.

См. также

VkBufferCreateInfo, VkBufferUsageFlagBits

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferUsageFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не непосредственно.

VkBufferViewCreateFlags(3)

Имя

VkBufferViewCreateFlags - Битовая маска VkBufferViewCreateFlagBits

C Спецификация

typedef VkFlags VkBufferViewCreateFlags;

Описание

VkBufferViewCreateFlags представляет собой маску из нуля или более VkBufferViewCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkBufferViewCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBufferViewCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkColorComponentFlags(3)

Имя

VkColorComponentFlags - Битовая маска VkColorComponentFlagBits

C Спецификация

typedef VkFlags VkColorComponentFlags;

Описание

VkColorComponentFlags представляет собой маску из нуля или более VkColorComponentFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkColorComponentFlagBits, VkPipelineColorBlendAttachmentState

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkColorComponentFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkCommandBufferResetFlags(3)

Имя

VkCommandBufferResetFlags - Битовая маска VkCommandBufferResetFlagBits

C Спецификация

typedef VkFlags VkCommandBufferResetFlags;

Описание

VkCommandBufferResetFlags представляет собой маску из нуля или более VkCommandBufferResetFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkCommandBufferResetFlagBits, vkResetCommandBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandBufferResetFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkCommandBufferUsageFlags(3)

Имя

VkCommandBufferUsageFlags - Битовая маска VkCommandBufferUsageFlagBits

C Спецификация

typedef VkFlags VkCommandBufferUsageFlags;

Описание

VkCommandBufferUsageFlags представляет собой маску из нуля или более VkCommandBufferUsageFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkCommandBufferBeginInfo, VkCommandBufferUsageFlagBits

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandBufferUsageFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkCommandPoolCreateFlags(3)

Имя

VkCommandPoolCreateFlags - Битовая маска VkCommandPoolCreateFlagBits

C Спецификация

typedef VkFlags VkCommandPoolCreateFlags;

Описание

VkCommandPoolCreateFlags представляет собой маску из нуля или более VkCommandPoolCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkCommandPoolCreateFlagBits, VkCommandPoolCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandPoolCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkCommandPoolResetFlags(3)

Имя

VkCommandPoolResetFlags - Битовая маска VkCommandPoolResetFlagBits

C Спецификация

typedef VkFlags VkCommandPoolResetFlags;

Описание

VkCommandPoolResetFlags представляет собой маску из нуля или более VkCommandPoolResetFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkCommandPoolResetFlagBits, vkResetCommandPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCommandPoolResetFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkCullModeFlags(3)

Имя

VkCullModeFlags - Битовая маска VkCullModeFlagBits

C Спецификация

typedef VkFlags VkCullModeFlags;

Описание

VkCullModeFlags представляет собой маску из нуля или более VkCullModeFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkCullModeFlagBits, VkPipelineRasterizationStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkCullModeFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkDependencyFlags(3)

Имя

VkDependencyFlags - Битовая маска VkDependencyFlagBits

C Спецификация

typedef VkFlags VkDependencyFlags;

Описание

VkDependencyFlags представляет собой маску из нуля или более VkDependencyFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkDependencyFlagBits, VkSubpassDependency, vkCmdPipelineBarrier

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDependencyFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkDescriptorPoolCreateFlags(3)

Имя

VkDescriptorPoolCreateFlags - Битовая маска VkDescriptorPoolCreateFlagBits

C Спецификация

typedef VkFlags VkDescriptorPoolCreateFlags;

Описание

VkDescriptorPoolCreateFlags представляет собой маску из нуля или более VkDescriptorPoolCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkDescriptorPoolCreateFlagBits, VkDescriptorPoolCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorPoolCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkDescriptorPoolResetFlags(3)

Имя

VkDescriptorPoolResetFlags - Битовая маска VkDescriptorPoolResetFlagBits

C Спецификация

typedef VkFlags VkDescriptorPoolResetFlags;

Описание

VkDescriptorPoolResetFlags представляет собой маску из нуля или более VkDescriptorPoolResetFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

vkResetDescriptorPool

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorPoolResetFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkDescriptorSetLayoutCreateFlags(3)

Имя

VkDescriptorSetLayoutCreateFlags - Битовая маска VkDescriptorSetLayoutCreateFlagBits

C Спецификация

typedef VkFlags VkDescriptorSetLayoutCreateFlags;

Описание

VkDescriptorSetLayoutCreateFlags представляет собой маску из нуля или более VkDescriptorSetLayoutCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkDescriptorSetLayoutCreateFlagBits, VkDescriptorSetLayoutCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDescriptorSetLayoutCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

END_OF_DOCUMENT_MARKER

VkDeviceCreateFlags(3)

Name

VkDeviceCreateFlags - Bitmask of VkDeviceCreateFlagBits

C Спецификация

typedef VkFlags VkDeviceCreateFlags;

Описание

VkDeviceCreateFlags представляет собой маску из нуля или более VkDeviceCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkDeviceCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDeviceCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkDeviceQueueCreateFlags(3)

Name

VkDeviceQueueCreateFlags - Bitmask of VkDeviceQueueCreateFlagBits

C Спецификация

typedef VkFlags VkDeviceQueueCreateFlags;

Описание

VkDeviceQueueCreateFlags представляет собой маску из нуля или более VkDeviceQueueCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkDeviceQueueCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDeviceQueueCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkEventCreateFlags(3)

Name

VkEventCreateFlags - Bitmask of VkEventCreateFlagBits

C Спецификация

typedef VkFlags VkEventCreateFlags;

Описание

VkEventCreateFlags представляет собой маску из нуля или более VkEventCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkEventCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkEventCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkFenceCreateFlags(3)

Name

VkFenceCreateFlags - Bitmask of VkFenceCreateFlagBits

C Спецификация

typedef VkFlags VkFenceCreateFlags;

Описание

VkFenceCreateFlags представляет собой маску из нуля или более VkFenceCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkFenceCreateFlagBits, VkFenceCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFenceCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkFormatFeatureFlags(3)

Name

VkFormatFeatureFlags - Bitmask of VkFormatFeatureFlagBits

C Спецификация

typedef VkFlags VkFormatFeatureFlags;

Описание

VkFormatFeatureFlags представляет собой маску из нуля или более VkFormatFeatureFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkFormatFeatureFlagBits, VkFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFormatFeatureFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkFramebufferCreateFlags(3)

Name

VkFramebufferCreateFlags - Bitmask of VkFramebufferCreateFlagBits

C Спецификация

typedef VkFlags VkFramebufferCreateFlags;

Описание

VkFramebufferCreateFlags представляет собой маску из нуля или более VkFramebufferCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkFramebufferCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFramebufferCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkImageAspectFlags(3)

Name

VkImageAspectFlags - Bitmask of VkImageAspectFlagBits

C Спецификация

typedef VkFlags VkImageAspectFlags;

Описание

VkImageAspectFlags представляет собой маску из нуля или более VkImageAspectFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkClearAttachment, VkImageAspectFlagBits, VkImageSubresource, VkImageSubresourceLayers, VkImageSubresourceRange, VkSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageAspectFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkImageCreateFlags(3)

Name

VkImageCreateFlags - Bitmask of VkImageCreateFlagBits

C Спецификация

typedef VkFlags VkImageCreateFlags;

Описание

VkImageCreateFlags представляет собой маску из нуля или более VkImageCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkImageCreateFlagBits, VkImageCreateInfo, vkGetPhysicalDeviceImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkImageUsageFlags(3)

Name

VkImageUsageFlags - Bitmask of VkImageUsageFlagBits

C Спецификация

typedef VkFlags VkImageUsageFlags;

Описание

VkImageUsageFlags представляет собой маску из нуля или более VkImageUsageFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkImageCreateInfo, VkImageUsageFlagBits, vkGetPhysicalDeviceImageFormatProperties, vkGetPhysicalDeviceSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageUsageFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkImageViewCreateFlags(3)

Name

VkImageViewCreateFlags - Bitmask of VkImageViewCreateFlagBits

C Спецификация

typedef VkFlags VkImageViewCreateFlags;

Описание

VkImageViewCreateFlags представляет собой маску из нуля или более VkImageViewCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkImageViewCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkImageViewCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkInstanceCreateFlags(3)

Name

VkInstanceCreateFlags - Bitmask of VkInstanceCreateFlagBits

C Спецификация

typedef VkFlags VkInstanceCreateFlags;

Описание

VkInstanceCreateFlags представляет собой маску из нуля или более VkInstanceCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkInstanceCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkInstanceCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

END_OF_DOCUMENT_MARKER

VkMemoryHeapFlags(3)

Name

VkMemoryHeapFlags - Bitmask of VkMemoryHeapFlagBits

C Specification

typedef VkFlags VkMemoryHeapFlags;

Description

VkMemoryHeapFlags представляет собой маску из нуля или более VkMemoryHeapFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkMemoryHeap, VkMemoryHeapFlagBits

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryHeapFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkMemoryMapFlags(3)

Name

VkMemoryMapFlags - Bitmask of VkMemoryMapFlagBits

C Specification

typedef VkFlags VkMemoryMapFlags;

Description

VkMemoryMapFlags представляет собой маску из нуля или более VkMemoryMapFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

vkMapMemory

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryMapFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkMemoryPropertyFlags(3)

Name

VkMemoryPropertyFlags - Bitmask of VkMemoryPropertyFlagBits

C Specification

typedef VkFlags VkMemoryPropertyFlags;

Description

VkMemoryPropertyFlags представляет собой маску из нуля или более VkMemoryPropertyFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkMemoryPropertyFlagBits, VkMemoryType

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkMemoryPropertyFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineCacheCreateFlags(3)

Name

VkPipelineCacheCreateFlags - Bitmask of VkPipelineCacheCreateFlagBits

C Specification

typedef VkFlags VkPipelineCacheCreateFlags;

Description

VkPipelineCacheCreateFlags представляет собой маску из нуля или более VkPipelineCacheCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkPipelineCacheCreateInfo

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineCacheCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineColorBlendStateCreateFlags(3)

Name

VkPipelineColorBlendStateCreateFlags - Bitmask of VkPipelineColorBlendStateCreateFlagBits

C Specification

typedef VkFlags VkPipelineColorBlendStateCreateFlags;

Description

VkPipelineColorBlendStateCreateFlags представляет собой маску из нуля или более VkPipelineColorBlendStateCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkPipelineColorBlendStateCreateInfo

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineColorBlendStateCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineCreateFlags(3)

Name

VkPipelineCreateFlags - Bitmask of VkPipelineCreateFlagBits

C Specification

typedef VkFlags VkPipelineCreateFlags;

Description

VkPipelineCreateFlags представляет собой маску из нуля или более VkPipelineCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkComputePipelineCreateInfo, VkGraphicsPipelineCreateInfo, VkPipelineCreateFlagBits

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineDepthStencilStateCreateFlags(3)

Name

VkPipelineDepthStencilStateCreateFlags - Bitmask of VkPipelineDepthStencilStateCreateFlagBits

C Specification

typedef VkFlags VkPipelineDepthStencilStateCreateFlags;

Description

VkPipelineDepthStencilStateCreateFlags представляет собой маску из нуля или более VkPipelineDepthStencilStateCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkPipelineDepthStencilStateCreateInfo

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineDepthStencilStateCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineDynamicStateCreateFlags(3)

Name

VkPipelineDynamicStateCreateFlags - Bitmask of VkPipelineDynamicStateCreateFlagBits

C Specification

typedef VkFlags VkPipelineDynamicStateCreateFlags;

Description

VkPipelineDynamicStateCreateFlags представляет собой маску из нуля или более VkPipelineDynamicStateCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkPipelineDynamicStateCreateInfo

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineDynamicStateCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineInputAssemblyStateCreateFlags(3)

Name

VkPipelineInputAssemblyStateCreateFlags - Bitmask of VkPipelineInputAssemblyStateCreateFlagBits

C Specification

typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;

Description

VkPipelineInputAssemblyStateCreateFlags представляет собой маску из нуля или более VkPipelineInputAssemblyStateCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkPipelineInputAssemblyStateCreateInfo

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineInputAssemblyStateCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineLayoutCreateFlags(3)

Name

VkPipelineLayoutCreateFlags - Bitmask of VkPipelineLayoutCreateFlagBits

C Specification

typedef VkFlags VkPipelineLayoutCreateFlags;

Description

VkPipelineLayoutCreateFlags представляет собой маску из нуля или более VkPipelineLayoutCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkPipelineLayoutCreateInfo

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineLayoutCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineMultisampleStateCreateFlags(3)

Name

VkPipelineMultisampleStateCreateFlags - Bitmask of VkPipelineMultisampleStateCreateFlagBits

C Specification

typedef VkFlags VkPipelineMultisampleStateCreateFlags;

Description

VkPipelineMultisampleStateCreateFlags представляет собой маску из нуля или более VkPipelineMultisampleStateCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

See Also

VkPipelineMultisampleStateCreateInfo

Document Notes

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineMultisampleStateCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineRasterizationStateCreateFlags(3)

Имя

VkPipelineRasterizationStateCreateFlags - Битовая маска VkPipelineRasterizationStateCreateFlagBits

C Спецификация

typedef VkFlags VkPipelineRasterizationStateCreateFlags;

Описание

VkPipelineRasterizationStateCreateFlags является маской из нуля или более VkPipelineRasterizationStateCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkPipelineRasterizationStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineRasterizationStateCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineShaderStageCreateFlags(3)

Имя

VkPipelineShaderStageCreateFlags - Битовая маска VkPipelineShaderStageCreateFlagBits

C Спецификация

typedef VkFlags VkPipelineShaderStageCreateFlags;

Описание

VkPipelineShaderStageCreateFlags является маской из нуля или более VkPipelineShaderStageCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkPipelineShaderStageCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineShaderStageCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineStageFlags(3)

Имя

VkPipelineStageFlags - Битовая маска VkPipelineStageFlagBits

C Спецификация

typedef VkFlags VkPipelineStageFlags;

Описание

VkPipelineStageFlags является маской из нуля или более VkPipelineStageFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkPipelineStageFlagBits, VkSubmitInfo, VkSubpassDependency, vkCmdPipelineBarrier, vkCmdResetEvent, vkCmdSetEvent, vkCmdWaitEvents

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineStageFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineTessellationStateCreateFlags(3)

Имя

VkPipelineTessellationStateCreateFlags - Битовая маска VkPipelineTessellationStateCreateFlagBits

C Спецификация

typedef VkFlags VkPipelineTessellationStateCreateFlags;

Описание

VkPipelineTessellationStateCreateFlags является маской из нуля или более VkPipelineTessellationStateCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkPipelineTessellationStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineTessellationStateCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineVertexInputStateCreateFlags(3)

Имя

VkPipelineVertexInputStateCreateFlags - Битовая маска VkPipelineVertexInputStateCreateFlagBits

C Спецификация

typedef VkFlags VkPipelineVertexInputStateCreateFlags;

Описание

VkPipelineVertexInputStateCreateFlags является маской из нуля или более VkPipelineVertexInputStateCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkPipelineVertexInputStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineVertexInputStateCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkPipelineViewportStateCreateFlags(3)

Имя

VkPipelineViewportStateCreateFlags - Битовая маска VkPipelineViewportStateCreateFlagBits

C Спецификация

typedef VkFlags VkPipelineViewportStateCreateFlags;

Описание

VkPipelineViewportStateCreateFlags является маской из нуля или более VkPipelineViewportStateCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkPipelineViewportStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkPipelineViewportStateCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkQueryControlFlags(3)

Имя

VkQueryControlFlags - Битовая маска VkQueryControlFlagBits

C Спецификация

typedef VkFlags VkQueryControlFlags;

Описание

VkQueryControlFlags является маской из нуля или более VkQueryControlFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkCommandBufferInheritanceInfo, VkQueryControlFlagBits, vkCmdBeginQuery

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryControlFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkQueryPipelineStatisticFlags(3)

Имя

VkQueryPipelineStatisticFlags - Битовая маска VkQueryPipelineStatisticFlagBits

C Спецификация

typedef VkFlags VkQueryPipelineStatisticFlags;

Описание

VkQueryPipelineStatisticFlags является маской из нуля или более VkQueryPipelineStatisticFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkCommandBufferInheritanceInfo, VkQueryPipelineStatisticFlagBits, VkQueryPoolCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryPipelineStatisticFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkQueryPoolCreateFlags(3)

Имя

VkQueryPoolCreateFlags - Битовая маска VkQueryPoolCreateFlagBits

C Спецификация

typedef VkFlags VkQueryPoolCreateFlags;

Описание

VkQueryPoolCreateFlags является маской из нуля или более VkQueryPoolCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkQueryPoolCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryPoolCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не напрямую.

VkQueryResultFlags(3)

Имя

VkQueryResultFlags - Битовая маска VkQueryResultFlagBits

C Спецификация

typedef VkFlags VkQueryResultFlags;

Описание

VkQueryResultFlags является маской из нуля или более VkQueryResultFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkQueryResultFlagBits, vkCmdCopyQueryPoolResults, vkGetQueryPoolResults

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueryResultFlags

END_OF_DOCUMENT_MARKER

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkQueueFlags(3)

Имя

VkQueueFlags - Битовая маска VkQueueFlagBits

C Спецификация

typedef VkFlags VkQueueFlags;

Описание

VkQueueFlags представляет собой маску из нуля или более VkQueueFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkQueueFamilyProperties, VkQueueFlagBits

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkQueueFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkRenderPassCreateFlags(3)

Имя

VkRenderPassCreateFlags - Битовая маска VkRenderPassCreateFlagBits

C Спецификация

typedef VkFlags VkRenderPassCreateFlags;

Описание

VkRenderPassCreateFlags представляет собой маску из нуля или более VkRenderPassCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkRenderPassCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkRenderPassCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkSampleCountFlags(3)

Имя

VkSampleCountFlags - Битовая маска VkSampleCountFlagBits

C Спецификация

typedef VkFlags VkSampleCountFlags;

Описание

VkSampleCountFlags представляет собой маску из нуля или более VkSampleCountFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkImageFormatProperties, VkPhysicalDeviceLimits, VkSampleCountFlagBits

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSampleCountFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkSamplerCreateFlags(3)

Имя

VkSamplerCreateFlags - Битовая маска VkSamplerCreateFlagBits

C Спецификация

typedef VkFlags VkSamplerCreateFlags;

Описание

VkSamplerCreateFlags представляет собой маску из нуля или более VkSamplerCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkSamplerCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSamplerCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkSemaphoreCreateFlags(3)

Имя

VkSemaphoreCreateFlags - Битовая маска VkSemaphoreCreateFlagBits

C Спецификация

typedef VkFlags VkSemaphoreCreateFlags;

Описание

VkSemaphoreCreateFlags представляет собой маску из нуля или более VkSemaphoreCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkSemaphoreCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSemaphoreCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkShaderModuleCreateFlags(3)

Имя

VkShaderModuleCreateFlags - Битовая маска VkShaderModuleCreateFlagBits

C Спецификация

typedef VkFlags VkShaderModuleCreateFlags;

Описание

VkShaderModuleCreateFlags представляет собой маску из нуля или более VkShaderModuleCreateFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkShaderModuleCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkShaderModuleCreateFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkShaderStageFlags(3)

Имя

VkShaderStageFlags - Битовая маска VkShaderStageFlagBits

C Спецификация

typedef VkFlags VkShaderStageFlags;

Описание

VkShaderStageFlags представляет собой маску из нуля или более VkShaderStageFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkDescriptorSetLayoutBinding, VkPushConstantRange, VkShaderStageFlagBits, vkCmdPushConstants

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkShaderStageFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkSparseImageFormatFlags(3)

Имя

VkSparseImageFormatFlags - Битовая маска VkSparseImageFormatFlagBits

C Спецификация

typedef VkFlags VkSparseImageFormatFlags;

Описание

VkSparseImageFormatFlags представляет собой маску из нуля или более VkSparseImageFormatFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkSparseImageFormatFlagBits, VkSparseImageFormatProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseImageFormatFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkSparseMemoryBindFlags(3)

Имя

VkSparseMemoryBindFlags - Битовая маска VkSparseMemoryBindFlagBits

C Спецификация

typedef VkFlags VkSparseMemoryBindFlags;

Описание

VkSparseMemoryBindFlags представляет собой маску из нуля или более VkSparseMemoryBindFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkSparseImageMemoryBind, VkSparseMemoryBind, VkSparseMemoryBindFlagBits

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSparseMemoryBindFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkStencilFaceFlags(3)

Имя

VkStencilFaceFlags - Битовая маска VkStencilFaceFlagBits

C Спецификация

typedef VkFlags VkStencilFaceFlags;

Описание

VkStencilFaceFlags представляет собой маску из нуля или более VkStencilFaceFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkStencilFaceFlagBits, vkCmdSetStencilCompareMask, vkCmdSetStencilReference, vkCmdSetStencilWriteMask

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkStencilFaceFlags

Эта страница является сгенерированным документом. Исправления и изменения должны вноситься в скрипты генератора, а не напрямую.

VkSubpassDescriptionFlags(3)

Имя

VkSubpassDescriptionFlags - Битовая маска VkSubpassDescriptionFlagBits

C Спецификация

typedef VkFlags VkSubpassDescriptionFlags;

Описание

VkSubpassDescriptionFlags представляет собой маску из нуля или более VkSubpassDescriptionFlagBits. Она используется как член и/или параметр структур и команд в разделе "См. также" ниже.

См. также

VkSubpassDescription, VkSubpassDescriptionFlagBits

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSubpassDescriptionFlags

Эта страница является сгенерированным документом. Исправления и изменения следует вносить в скрипты генератора, а не непосредственно.

Типы указателей на функции

PFN_vkAllocationFunction(3)

Имя

PFN_vkAllocationFunction - Определяемая приложением функция выделения памяти

C-спецификация

Тип pfnAllocation:

typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
    void*                                       pUserData,
    size_t                                      size,
    size_t                                      alignment,
    VkSystemAllocationScope                     allocationScope);

Параметры

  • pUserData — значение, указанное для VkAllocationCallbacks::pUserData в выделенном приложении.
  • size — размер запрашиваемого выделения в байтах.
  • alignment — запрашиваемое выравнивание выделения в байтах и должно быть степенью двойки.
  • allocationScope — значение VkSystemAllocationScope, указывающее область действия выделения, как описано здесь.

Описание

Если pfnAllocation не может выделить запрашиваемую память, он должен вернуть NULL. Если выделение прошло успешно, он должен вернуть допустимый указатель на выделение памяти, содержащее не менее size байтов, а значение указателя должно быть кратно alignment.

Примечание

Корректная работа Vulkan не может гарантироваться, если приложение не следует этим правилам.

Например, pfnAllocation (или pfnReallocation) могут привести к завершению работы запущенного экземпляра (экземпляров) Vulkan при сбое выделения в целях отладки, непосредственно или косвенно. В этих условиях нельзя предполагать, что какая-либо часть любых затронутых объектов VkInstance будет работать корректно (даже vkDestroyInstance), и приложение должно обеспечить надлежащее очищение другими способами (например, завершение процесса).

Если pfnAllocation возвращает NULL, и если реализация не может продолжить корректную обработку текущей команды без запрашиваемого выделения, она должна рассматривать это как ошибку времени выполнения и генерировать VK_ERROR_OUT_OF_HOST_MEMORY в соответствующее время для команды, в которой было обнаружено условие, как описано в Коды возврата.

Если реализация может продолжить корректную обработку текущей команды без запрашиваемого выделения, то она может сделать это и не должна генерировать VK_ERROR_OUT_OF_HOST_MEMORY в результате этого сбоя выделения.

См. также

VkAllocationCallbacks

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#PFN_vkAllocationFunction

PFN_vkFreeFunction(3)

Имя

PFN_vkFreeFunction - Определяемая приложением функция освобождения памяти

C-спецификация

Тип pfnFree:

typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
    void*                                       pUserData,
    void*                                       pMemory);

Параметры

  • pUserData — значение, указанное для VkAllocationCallbacks::pUserData в выделенном приложении.
  • pMemory — выделение, которое необходимо освободить.

Описание

pMemory может быть NULL, что обратный вызов должен обрабатывать безопасно. Если pMemory не-NULL, он должен быть указателем, ранее выделенным pfnAllocation или pfnReallocation. Приложение должно освободить эту память.

См. также

VkAllocationCallbacks

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#PFN_vkFreeFunction

PFN_vkInternalAllocationNotification(3)

Имя

PFN_vkInternalAllocationNotification - Определяемая приложением функция уведомления о выделении памяти

C-спецификация

Тип pfnInternalAllocation:

typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
    void*                                       pUserData,
    size_t                                      size,
    VkInternalAllocationType                    allocationType,
    VkSystemAllocationScope                     allocationScope);

Параметры

  • pUserData — значение, указанное для VkAllocationCallbacks::pUserData в выделенном приложении.
  • size — запрашиваемый размер выделения.
  • allocationType — значение VkInternalAllocationType, указывающее запрашиваемый тип выделения.
  • allocationScope — значение VkSystemAllocationScope, указывающее область действия выделения, как описано здесь.

Описание

Это чисто информационный обратный вызов.

См. также

VkAllocationCallbacks

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#PFN_vkInternalAllocationNotification

PFN_vkInternalFreeNotification(3)

Имя

PFN_vkInternalFreeNotification - Определяемая приложением функция уведомления об освобождении памяти

C-спецификация

Тип pfnInternalFree:

typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
    void*                                       pUserData,
    size_t                                      size,
    VkInternalAllocationType                    allocationType,
    VkSystemAllocationScope                     allocationScope);

Параметры

  • pUserData — значение, указанное для VkAllocationCallbacks::pUserData в выделенном приложении.
  • size — запрашиваемый размер выделения.
  • allocationType — значение VkInternalAllocationType, указывающее запрашиваемый тип выделения.
  • allocationScope — значение VkSystemAllocationScope, указывающее область действия выделения, как описано здесь.

См. также

VkAllocationCallbacks

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#PFN_vkInternalFreeNotification

PFN_vkReallocationFunction(3)

Имя

PFN_vkReallocationFunction - Определяемая приложением функция перераспределения памяти

C-спецификация

Тип pfnReallocation:

typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
    void*                                       pUserData,
    void*                                       pOriginal,
    size_t                                      size,
    size_t                                      alignment,
    VkSystemAllocationScope                     allocationScope);

Параметры

  • pUserData — значение, указанное для VkAllocationCallbacks::pUserData в выделенном приложении.
  • pOriginal должно быть либо NULL, либо указателем, ранее возвращенным pfnReallocation или pfnAllocation того же самого выделения.
  • size — размер запрашиваемого выделения в байтах.
  • alignment — запрашиваемое выравнивание выделения в байтах и должно быть степенью двойки.
  • allocationScope — значение VkSystemAllocationScope, указывающее область действия выделения, как описано здесь.

Описание

pfnReallocation должен возвращать выделение с достаточным пространством для size байтов, и содержимое исходного выделения с нулевого байта до min(исходный размер, новый размер) - 1 должно сохраняться в возвращаемом выделении. Если size больше, чем старый размер, содержимое дополнительного пространства не определено. Если для выполнения этих требований необходимо создать новое выделение, то старое выделение следует освободить.

Если pOriginal равно NULL, то pfnReallocation должно вести себя эквивалентно вызову PFN_vkAllocationFunction с теми же значениями параметров (без pOriginal).

Если size равно нулю, то pfnReallocation должно вести себя эквивалентно вызову PFN_vkFreeFunction с тем же значением параметра pUserData, и pMemory равным pOriginal.

Если pOriginal не-NULL, реализация должна обеспечить, чтобы alignment равнялось alignment, использованному для первоначального выделения pOriginal.

Если эта функция завершается неудачей, и pOriginal не-NULL, приложение не должно освобождать старое выделение.

pfnReallocation должен следовать тем же правилам для возвращаемых значений, что и PFN_vkAllocationFunction.

См. также

VkAllocationCallbacks

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#PFN_vkReallocationFunction

PFN_vkVoidFunction(3)

Имя

PFN_vkVoidFunction - Фиктивный тип указателя на функцию, возвращаемый запросами

C-спецификация

Определение PFN_vkVoidFunction:

typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);

См. также

vkGetDeviceProcAddr, vkGetInstanceProcAddr

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#PFN_vkVoidFunction

Скалярные типы Vulkan

VkBool32(3)

Имя

VkBool32 - булевый тип Vulkan

Спецификация C

VkBool32 представляет булевы True и False значения, поскольку в C нет достаточно переносимого встроенного булевого типа:

typedef uint32_t VkBool32;

Описание

VK_TRUE представляет булево значение Истина (целое число 1), а VK_FALSE - булево значение Ложь (целое число 0).

Все значения, возвращаемые реализацией Vulkan в VkBool32, будут либо VK_TRUE, либо VK_FALSE.

Приложения не должны передавать никакие другие значения, кроме VK_TRUE или VK_FALSE, в реализацию Vulkan, где ожидается VkBool32.

См. также

VkCommandBufferInheritanceInfo, VkPhysicalDeviceFeatures, VkPhysicalDeviceLimits, VkPhysicalDeviceSparseProperties, VkPipelineColorBlendAttachmentState, VkPipelineColorBlendStateCreateInfo, VkPipelineDepthStencilStateCreateInfo, VkPipelineInputAssemblyStateCreateInfo, VkPipelineMultisampleStateCreateInfo, VkPipelineRasterizationStateCreateInfo, VkSamplerCreateInfo, vkWaitForFences

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkBool32

VkDeviceSize(3)

Имя

VkDeviceSize - размер и смещения памяти устройства Vulkan

Спецификация C

VkDeviceSize представляет значения размера и смещения памяти устройства:

typedef uint64_t VkDeviceSize;

См. также

VkBufferCopy, VkBufferCreateInfo, VkBufferImageCopy, VkBufferMemoryBarrier, VkBufferViewCreateInfo, VkDescriptorBufferInfo, VkImageFormatProperties, VkMappedMemoryRange, VkMemoryAllocateInfo, VkMemoryHeap, VkMemoryRequirements, VkPhysicalDeviceLimits, VkSparseImageMemoryBind, VkSparseImageMemoryRequirements, VkSparseMemoryBind, VkSubresourceLayout, vkBindBufferMemory, vkBindImageMemory, vkCmdBindIndexBuffer, vkCmdBindVertexBuffers, vkCmdCopyQueryPoolResults, vkCmdDispatchIndirect, vkCmdDrawIndexedIndirect, vkCmdDrawIndirect, vkCmdFillBuffer, vkCmdUpdateBuffer, vkGetDeviceMemoryCommitment, vkGetQueryPoolResults, vkMapMemory

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkDeviceSize

VkFlags(3)

Имя

VkFlags - битовые маски Vulkan

Спецификация C

Набор флагов представлен битовой маской с использованием типа VkFlags:

typedef uint32_t VkFlags;

Описание

Битовые маски передаются во многие команды и структуры для компактного представления параметров, но VkFlags не используется напрямую в API. Вместо этого используется тип Vk*Flags, который является псевдонимом VkFlags, и имя которого соответствует соответствующим Vk*FlagBits, которые допустимы для этого типа. Эти псевдонимы описаны в приложении Типы флагов спецификации.

См. также

VkColorComponentFlags

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFlags

VkSampleMask(3)

Имя

VkSampleMask - маска информации о покрытии выборки

Спецификация C

Элементы массива маски выборки имеют тип VkSampleMask, каждый из которых представляет 32 бита информации о покрытии:

typedef uint32_t VkSampleMask;

См. также

VkPipelineMultisampleStateCreateInfo

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkSampleMask

Макроопределения C

VK_API_VERSION(3)

Имя

VK_API_VERSION - устаревший макрос номера версии

Спецификация C

VK_API_VERSION теперь закомментирован в vulkan.h и не может использоваться.

// DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0

См. также

Нет доступных перекрестных ссылок

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_API_VERSION

VK_API_VERSION_1_0(3)

Имя

VK_API_VERSION_1_0 - возвращает номер версии API для Vulkan 1.0

Спецификация C

VK_API_VERSION_1_0 возвращает номер версии API для Vulkan 1.0. Номер версии патча в этом макросе всегда будет равен нулю. Поддерживаемая версия патча для физического устройства может быть запрошена с помощью vkGetPhysicalDeviceProperties.

// Vulkan 1.0 version number
#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0

См. также

vkCreateInstance, vkGetPhysicalDeviceProperties

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_API_VERSION_1_0

VK_DEFINE_HANDLE(3)

Имя

VK_DEFINE_HANDLE - объявить дескриптор объекта, доступный для диспетчеризации

Спецификация C

VK_DEFINE_HANDLE определяет тип дескриптора, доступного для диспетчеризации.

#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;

Описание

  • object - имя результирующего типа C.

Единственными типами дескрипторов, доступными для диспетчеризации, являются те, которые связаны с управлением устройствами и экземплярами, например, VkDevice.

См. также

VkCommandBuffer, VkDevice, VkInstance, VkPhysicalDevice, VkQueue

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_DEFINE_HANDLE

VK_DEFINE_NON_DISPATCHABLE_HANDLE(3)

Имя

VK_DEFINE_NON_DISPATCHABLE_HANDLE - объявить дескриптор объекта, недоступный для диспетчеризации

Спецификация C

VK_DEFINE_NON_DISPATCHABLE_HANDLE определяет тип дескриптора, недоступного для диспетчеризации.

#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
#else
        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
#endif
#endif

Описание

  • object - имя результирующего типа C.

Большинство типов дескрипторов Vulkan, таких как VkBuffer, недоступны для диспетчеризации.

Примечание

Заголовок vulkan.h позволяет переопределить определение VK_DEFINE_NON_DISPATCHABLE_HANDLE приложением. Если VK_DEFINE_NON_DISPATCHABLE_HANDLE уже определено при компиляции заголовка vulkan.h, то определение по умолчанию пропускается. Это позволяет приложению определить двоично-совместимый пользовательский дескриптор, который может обеспечить большую безопасность типов или другие функции, необходимые приложению. Поведение не определено, если приложение определяет не двоично-совместимый дескриптор, и может привести к повреждению памяти или завершению работы приложения. Двоичная совместимость зависит от платформы, поэтому приложение должно быть осторожным, если оно переопределяет определение VK_DEFINE_NON_DISPATCHABLE_HANDLE по умолчанию.

См. также

VkBuffer

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_DEFINE_NON_DISPATCHABLE_HANDLE

VK_HEADER_VERSION(3)

Имя

VK_HEADER_VERSION - номер версии файла заголовка Vulkan

Спецификация C

VK_HEADER_VERSION — это номер версии заголовка vulkan.h. Это значение в настоящее время синхронизируется с номером релиза спецификации. Однако не гарантируется, что синхронизация будет поддерживаться, поскольку большинство обновлений спецификации не влияют на vulkan.h.

// Version of this file
#define VK_HEADER_VERSION 59

См. также

Перекрестные ссылки отсутствуют

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_HEADER_VERSION

VK_MAKE_VERSION(3)

Имя

VK_MAKE_VERSION — создание номера версии API

Спецификация C

VK_MAKE_VERSION создает номер версии API.

#define VK_MAKE_VERSION(major, minor, patch) \
    (((major) << 22) | ((minor) << 12) | (patch))

Описание

  • major — это номер основной версии.
  • minor — это номер дополнительной версии.
  • patch — это номер патча версии.

Этот макрос может использоваться при создании параметра VkApplicationInfo::apiVersion передаваемого в vkCreateInstance.

См. также

VkApplicationInfo, vkCreateInstance

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_MAKE_VERSION

VK_NULL_HANDLE(3)

Имя

VK_NULL_HANDLE — зарезервированная недействительная дескриптор объекта

Спецификация C

VK_NULL_HANDLE — это зарезервированное значение, представляющее недействительный дескриптор объекта. Он может передаваться в команды Vulkan и возвращаться из них только тогда, когда это специально разрешено.

#define VK_NULL_HANDLE 0

См. также

Перекрестные ссылки отсутствуют

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_NULL_HANDLE

VK_VERSION_MAJOR(3)

Имя

VK_VERSION_MAJOR — извлечение номера основной версии API

Спецификация C

VK_VERSION_MAJOR извлекает номер основной версии API из упакованного номера версии:

#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)

См. также

Перекрестные ссылки отсутствуют

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_VERSION_MAJOR

VK_VERSION_MINOR(3)

Имя

VK_VERSION_MINOR — извлечение номера дополнительной версии API

Спецификация C

VK_VERSION_MINOR извлекает номер дополнительной версии API из упакованного номера версии:

#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)

См. также

Перекрестные ссылки отсутствуют

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_VERSION_MINOR

VK_VERSION_PATCH(3)

Имя

VK_VERSION_PATCH — извлечение номера патча версии API

Спецификация C

VK_VERSION_PATCH извлекает номер патча версии API из упакованного номера версии:

#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)

См. также

Перекрестные ссылки отсутствуют

Примечания к документу

Для получения дополнительной информации см. спецификацию Vulkan по адресу URL

https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VK_VERSION_PATCH

© 2014–2017 Khronos Group Inc.
Licensed under the Creative Commons Attribution 4.0 International License.
Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc.
https://www.khronos.org/registry/vulkan/specs/1.0/apispec.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API