Class NVDeviceGeneratedCommands
- java.lang.Object
-
- org.lwjgl.vulkan.NVDeviceGeneratedCommands
-
public class NVDeviceGeneratedCommands extends java.lang.ObjectThis extension allows the device to generate a number of critical graphics commands for command buffers.When rendering a large number of objects, the device can be leveraged to implement a number of critical functions, like updating matrices, or implementing occlusion culling, frustum culling, front to back sorting, etc. Implementing those on the device does not require any special extension, since an application is free to define its own data structures, and just process them using shaders.
However, if the application desires to quickly kick off the rendering of the final stream of objects, then unextended Vulkan forces the application to read back the processed stream and issue graphics command from the host. For very large scenes, the synchronization overhead and cost to generate the command buffer can become the bottleneck. This extension allows an application to generate a device side stream of state changes and commands, and convert it efficiently into a command buffer without having to read it back to the host.
Furthermore, it allows incremental changes to such command buffers by manipulating only partial sections of a command stream — for example pipeline bindings. Unextended Vulkan requires re-creation of entire command buffers in such a scenario, or updates synchronized on the host.
The intended usage for this extension is for the application to:
- create
VkBufferobjects and retrieve physical addresses from them viaGetBufferDeviceAddressEXT - create a graphics pipeline using
VkGraphicsPipelineShaderGroupsCreateInfoNVfor the ability to change shaders on the device. - create a
VkIndirectCommandsLayoutNV, which lists theVkIndirectCommandsTokenTypeNVit wants to dynamically execute as an atomic command sequence. This step likely involves some internal device code compilation, since the intent is for the GPU to generate the command buffer in the pipeline. - fill the input stream buffers with the data for each of the inputs it needs. Each input is an array that will be filled with token-dependent data.
- set up a preprocess
VkBufferthat uses memory according to the information retrieved viaGetGeneratedCommandsMemoryRequirementsNV. - optionally preprocess the generated content using
CmdPreprocessGeneratedCommandsNV, for example on an asynchronous compute queue, or for the purpose of re-using the data in multiple executions. - call
CmdExecuteGeneratedCommandsNVto create and execute the actual device commands for all sequences based on the inputs provided.
For each draw in a sequence, the following can be specified:
- a different shader group
- a number of vertex buffer bindings
- a different index buffer, with an optional dynamic offset and index type
- a number of different push constants
- a flag that encodes the primitive winding
While the GPU can be faster than a CPU to generate the commands, it will not happen asynchronously to the device, therefore the primary use-case is generating “
less” total work (occlusion culling, classification to use specialized shaders, etc.).Example Code
Open-Source samples illustrating the usage of the extension can be found at the following location (may not yet exist at time of writing):
https://github.com/nvpro-samples/vk_device_generated_cmds
VK_NV_device_generated_commands
- Name String
VK_NV_device_generated_commands- Extension Type
- Device extension
- Registered Extension Number
- 278
- Revision
- 3
- Extension and Version Dependencies
- Requires Vulkan 1.1
- Requires
VK_KHR_buffer_device_address
- Contact
- Christoph Kubisch pixeljetstream
Other Extension Metadata
- Last Modified Date
- 2020-02-20
- Interactions and External Dependencies
- This extension requires Vulkan 1.1
- This extension requires
VK_EXT_buffer_device_addressorVK_KHR_buffer_device_addressor Vulkan 1.2 for the ability to bind vertex and index buffers on the device. - This extension interacts with
VK_NV_mesh_shader. If the latter extension is not supported, remove the command token to initiate mesh tasks drawing in this extension.
- Contributors
- Christoph Kubisch, NVIDIA
- Pierre Boudier, NVIDIA
- Jeff Bolz, NVIDIA
- Eric Werness, NVIDIA
- Yuriy O’Donnell, Epic Games
- Baldur Karlsson, Valve
- Mathias Schott, NVIDIA
- Tyson Smith, NVIDIA
- Ingo Esser, NVIDIA
- create
-
-
Field Summary
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static voidnvkCmdExecuteGeneratedCommandsNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, int isPreprocessed, long pGeneratedCommandsInfo)Unsafe version of:CmdExecuteGeneratedCommandsNVstatic voidnvkCmdPreprocessGeneratedCommandsNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, long pGeneratedCommandsInfo)Unsafe version of:CmdPreprocessGeneratedCommandsNVstatic intnvkCreateIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, long pCreateInfo, long pAllocator, long pIndirectCommandsLayout)Unsafe version of:CreateIndirectCommandsLayoutNVstatic voidnvkDestroyIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, long indirectCommandsLayout, long pAllocator)Unsafe version of:DestroyIndirectCommandsLayoutNVstatic voidnvkGetGeneratedCommandsMemoryRequirementsNV(org.lwjgl.vulkan.VkDevice device, long pInfo, long pMemoryRequirements)Unsafe version of:GetGeneratedCommandsMemoryRequirementsNVstatic voidvkCmdBindPipelineShaderGroupNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, int pipelineBindPoint, long pipeline, int groupIndex)Bind a pipeline object.static voidvkCmdExecuteGeneratedCommandsNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, boolean isPreprocessed, VkGeneratedCommandsInfoNV pGeneratedCommandsInfo)Generate and execute commands on the device.static voidvkCmdPreprocessGeneratedCommandsNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, VkGeneratedCommandsInfoNV pGeneratedCommandsInfo)Performs preprocessing for generated commands.static intvkCreateIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, VkIndirectCommandsLayoutCreateInfoNV pCreateInfo, VkAllocationCallbacks pAllocator, long[] pIndirectCommandsLayout)Array version of:CreateIndirectCommandsLayoutNVstatic intvkCreateIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, VkIndirectCommandsLayoutCreateInfoNV pCreateInfo, VkAllocationCallbacks pAllocator, java.nio.LongBuffer pIndirectCommandsLayout)Create an indirect command layout object.static voidvkDestroyIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, long indirectCommandsLayout, VkAllocationCallbacks pAllocator)Destroy an indirect commands layout.static voidvkGetGeneratedCommandsMemoryRequirementsNV(org.lwjgl.vulkan.VkDevice device, VkGeneratedCommandsMemoryRequirementsInfoNV pInfo, VkMemoryRequirements2 pMemoryRequirements)Retrieve the buffer allocation requirements for generated commands.
-
-
-
Field Detail
-
VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
The extension specification version.
-
VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
The extension name.
-
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV, VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV, VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV, VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV, VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV, VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV, VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV
ExtendsVkStructureType.Enum values:
STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NVSTRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NVSTRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NVSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NVSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVSTRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NVSTRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NVSTRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV
-
VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
ExtendsVkPipelineCreateFlagBits.
-
VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
ExtendsVkPipelineStageFlagBits.
-
VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV, VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV
ExtendsVkAccessFlagBits.Enum values:
-
VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV
ExtendsVkObjectType.
-
VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV
VkIndirectStateFlagBitsNV - Bitmask specifiying state that can be altered on the deviceDescription
INDIRECT_STATE_FLAG_FRONTFACE_BIT_NVallows to toggle theVkFrontFacerasterization state for subsequent draw operations.
-
VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV
VkIndirectCommandsTokenTypeNV - Enum specifying token commandsDescription
Supported indirect command tokens
See Also
-
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV, VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV, VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV
VkIndirectCommandsLayoutUsageFlagBitsNV - Bitmask specifying allowed usage of an indirect commands layoutDescription
INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NVspecifies that the layout is always used with the manual preprocessing step through callingCmdPreprocessGeneratedCommandsNVand executed byCmdExecuteGeneratedCommandsNVwithisPreprocessedset toTRUE.INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVspecifies that the input data for the sequences is not implicitly indexed from 0..sequencesUsed but a user providedVkBufferencoding the index is provided.INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVspecifies that the processing of sequences can happen at an implementation-dependent order, which is not: guaranteed to be coherent using the same input data.
-
-
Method Detail
-
nvkGetGeneratedCommandsMemoryRequirementsNV
public static void nvkGetGeneratedCommandsMemoryRequirementsNV(org.lwjgl.vulkan.VkDevice device, long pInfo, long pMemoryRequirements)Unsafe version of:GetGeneratedCommandsMemoryRequirementsNV
-
vkGetGeneratedCommandsMemoryRequirementsNV
public static void vkGetGeneratedCommandsMemoryRequirementsNV(org.lwjgl.vulkan.VkDevice device, VkGeneratedCommandsMemoryRequirementsInfoNV pInfo, VkMemoryRequirements2 pMemoryRequirements)Retrieve the buffer allocation requirements for generated commands.C Specification
The generation of commands on the device requires a
preprocessbuffer. To retrieve the memory size and alignment requirements of a particular execution state call:void vkGetGeneratedCommandsMemoryRequirementsNV( VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2* pMemoryRequirements);Valid Usage
- The
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommandsfeature must be enabled
Valid Usage (Implicit)
devicemust be a validVkDevicehandlepInfomust be a valid pointer to a validVkGeneratedCommandsMemoryRequirementsInfoNVstructurepMemoryRequirementsmust be a valid pointer to aVkMemoryRequirements2structure
See Also
VkGeneratedCommandsMemoryRequirementsInfoNV,VkMemoryRequirements2- Parameters:
device- the logical device that owns the buffer.pInfo- a pointer to aVkGeneratedCommandsMemoryRequirementsInfoNVstructure containing parameters required for the memory requirements query.pMemoryRequirements- a pointer to aVkMemoryRequirements2structure in which the memory requirements of the buffer object are returned.
- The
-
nvkCmdPreprocessGeneratedCommandsNV
public static void nvkCmdPreprocessGeneratedCommandsNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, long pGeneratedCommandsInfo)Unsafe version of:CmdPreprocessGeneratedCommandsNV
-
vkCmdPreprocessGeneratedCommandsNV
public static void vkCmdPreprocessGeneratedCommandsNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, VkGeneratedCommandsInfoNV pGeneratedCommandsInfo)Performs preprocessing for generated commands.C Specification
Commands can be preprocessed prior execution using the following command:
void vkCmdPreprocessGeneratedCommandsNV( VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo);Valid Usage
commandBuffermust not be a protected command bufferpGeneratedCommandsInfo`sindirectCommandsLayoutmust have been created with theINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NVbit set- The
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommandsfeature must be enabled
Valid Usage (Implicit)
commandBuffermust be a validVkCommandBufferhandlepGeneratedCommandsInfomust be a valid pointer to a validVkGeneratedCommandsInfoNVstructurecommandBuffermust be in the recording state- The
VkCommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called outside of a render pass instance
Host Synchronization
- Host access to
commandBuffermust be externally synchronized - Host access to the
VkCommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
Command Buffer Levels Render Pass Scope Supported Queue Types Primary Secondary Outside Graphics Compute See Also
- Parameters:
commandBuffer- the command buffer which does the preprocessing.pGeneratedCommandsInfo- a pointer to aVkGeneratedCommandsInfoNVstructure containing parameters affecting the preprocessing step.
-
nvkCmdExecuteGeneratedCommandsNV
public static void nvkCmdExecuteGeneratedCommandsNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, int isPreprocessed, long pGeneratedCommandsInfo)Unsafe version of:CmdExecuteGeneratedCommandsNV
-
vkCmdExecuteGeneratedCommandsNV
public static void vkCmdExecuteGeneratedCommandsNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, boolean isPreprocessed, VkGeneratedCommandsInfoNV pGeneratedCommandsInfo)Generate and execute commands on the device.C Specification
The actual generation of commands as well as their execution on the device is handled as single action with:
void vkCmdExecuteGeneratedCommandsNV( VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo);Valid Usage
- If a
VkSamplercreated withmagFilterorminFilterequal toFILTER_LINEARandcompareEnableequal toFALSEis used to sample aVkImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
VkSamplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aVkImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
VkImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
VkImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
VkImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - Any
VkImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aVkImageViewTypeand format that supports cubic filtering, as specified byVkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned byvkGetPhysicalDeviceImageFormatProperties2 - Any
VkImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aVkImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byVkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned byvkGetPhysicalDeviceImageFormatProperties2 - Any
VkImagecreated with aVkImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aVkSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - Any
VkImageVieworVkBufferViewbeing written as a storage image or storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s format feature must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - Any
VkImageVieworVkBufferViewbeing read as a storage image or storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s format feature must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For each set n that is statically used by the
VkPipelinebound to the pipeline bind point used by this command, a descriptor set must have been bound to n at the same pipeline bind point, with aVkPipelineLayoutthat is compatible for set n, with theVkPipelineLayoutused to create the currentVkPipeline, as described in Pipeline Layout Compatibility - If the
maintenance4feature is not enabled, then for each push constant that is statically used by theVkPipelinebound to the pipeline bind point used by this command, a push constant value must have been set for the same pipeline bind point, with aVkPipelineLayoutthat is compatible for push constants, with theVkPipelineLayoutused to create the currentVkPipeline, as described in Pipeline Layout Compatibility - Descriptors in each bound descriptor set, specified via
vkCmdBindDescriptorSets, must be valid if they are statically used by theVkPipelinebound to the pipeline bind point used by this command - A valid pipeline must be bound to the pipeline bind point used by this command
- If the
VkPipelineobject bound to the pipeline bind point used by this command requires any dynamic state, that state must have been set or inherited (if theVK_NV_inherited_viewport_scissorextension is enabled) forcommandBuffer, and done so after any previously bound pipeline with the corresponding state not specified as dynamic - There must not have been any calls to dynamic state setting commands for any state not specified as dynamic in the
VkPipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyVkImagewith aVkImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If the robust buffer access feature is not enabled, and if the
VkPipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the robust buffer access feature is not enabled, and if the
VkPipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If
commandBufferis an unprotected command buffer andprotectedNoFaultis not supported, any resource accessed by theVkPipelineobject bound to the pipeline bind point used by this command must not be a protected resource - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerorVkImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerorVkImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
VkImageViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format - If a
VkBufferViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s format - If a
VkImageViewwith aVkFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
VkImageViewwith aVkFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 - If a
VkBufferViewwith aVkFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
VkBufferViewwith aVkFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 - If the
sparseImageInt64Atomicsfeature is not enabled,VkImageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - If the
sparseImageInt64Atomicsfeature is not enabled,VkBufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - The current render pass must be compatible with the
renderPassmember of theVkGraphicsPipelineCreateInfostructure specified when creating theVkPipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index of the current render pass must be equal to the
subpassmember of theVkGraphicsPipelineCreateInfostructure specified when creating theVkPipelinebound toPIPELINE_BIND_POINT_GRAPHICS - Every input attachment used by the current subpass must be bound to the pipeline via a descriptor set
- Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command
- If any recorded command in the current subpass will write to an image subresource as an attachment, this command must not read from the memory backing that image subresource in any other way than as an attachment
- If any recorded command in the current subpass will read from an image subresource used as an attachment in any way other than as an attachment, this command must not write to that image subresource as an attachment
- If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to
VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If the bound graphics pipeline was created with
VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, thenCmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofvkCmdSetViewportWithCountmust match theVkPipelineViewportStateCreateInfo::scissorCountof the pipeline - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, thenCmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and thescissorCountparameter ofvkCmdSetScissorWithCountmust match theVkPipelineViewportStateCreateInfo::viewportCountof the pipeline - If the bound graphics pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled then bothCmdSetViewportWithCountandCmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofvkCmdSetViewportWithCountmust match thescissorCountparameter ofvkCmdSetScissorWithCount - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withVkPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call toCmdSetViewportWithCount - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic states enabled then theviewportCountparameter in the last call toCmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call toCmdSetViewportWithCount - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withVkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call toCmdSetViewportWithCount - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic states enabled then theviewportCountparameter in the last call toCmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call toCmdSetViewportWithCount - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aVkPipelineViewportSwizzleStateCreateInfoNVstructure chained fromVkPipelineVieportCreateInfo, then the bound graphics pipeline must have been created withVkPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call toCmdSetViewportWithCount - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aVkPipelineViewportExclusiveScissorStateCreateInfoNVstructure chained fromVkPipelineVieportCreateInfo, then the bound graphics pipeline must have been created withVkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call toCmdSetViewportWithCount - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled thenCmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled thenCmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled thenCmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validVkLogicOpvalue - If the
primitiveFragmentShadingRateWithMultipleViewportslimit is not supported, the bound graphics pipeline was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thenCmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofvkCmdSetViewportWithCountmust be 1 - If rasterization is not disabled in the bound graphics pipeline, then for each color attachment in the subpass, if the corresponding image view’s format features do not contain
FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then theblendEnablemember of the corresponding element of thepAttachmentsmember ofpColorBlendStatemust beFALSE - If rasterization is not disabled in the bound graphics pipeline, and neither the
VK_AMD_mixed_attachment_samplesnor theVK_NV_framebuffer_mixed_samplesextensions are enabled, thenVkPipelineMultisampleStateCreateInfo::rasterizationSamplesmust be the same as the current subpass color and/or depth/stencil attachments - If the current render pass instance was begun with
CmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the current render pass instance was begun with
CmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current render pass instance was begun with
CmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment - If the current render pass instance was begun with
CmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current render pass instance was begun with
CmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the current render pass instance was begun with
CmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current render pass instance was begun with
CmdBeginRendering, the currently bound graphics pipeline must have been created with aVkPipelineRenderingCreateInfo::viewMaskequal toVkRenderingInfo::viewMask - If the current render pass instance was begun with
CmdBeginRendering, the currently bound graphics pipeline must have been created with aVkPipelineRenderingCreateInfo::colorAttachmentCountequal toVkRenderingInfo::colorAttachmentCount - If the current render pass instance was begun with
CmdBeginRenderingandVkRenderingInfo::colorAttachmentCountgreater than 0, then each element of theVkRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aVkFormatequal to the corresponding element ofVkPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline - If the current render pass instance was begun with
CmdBeginRenderingandVkRenderingInfo::pDepthAttachment\u2192pname:imageView was notNULL_HANDLE, the value ofVkPipelineRenderingCreateInfo::depthAttachmentFormatused to create the currently bound graphics pipeline must be equal to theVkFormatused to createVkRenderingInfo::pDepthAttachment\u2192pname:imageView - If the current render pass instance was begun with
CmdBeginRenderingandVkRenderingInfo::pStencilAttachment\u2192pname:imageView was notNULL_HANDLE, the value ofVkPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the currently bound graphics pipeline must be equal to theVkFormatused to createVkRenderingInfo::pStencilAttachment\u2192pname:imageView - If the current render pass instance was begun with
CmdBeginRenderingandVkRenderingFragmentShadingRateAttachmentInfoKHR::imageViewwas notNULL_HANDLE, the currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the current render pass instance was begun with
CmdBeginRenderingandVkRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the currently bound pipeline was created with a
VkAttachmentSampleCountInfoAMDorVkAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withCmdBeginRenderingwith aVkRenderingInfo::colorAttachmentCountparameter greater than 0, then each element of theVkRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the corresponding element of thepColorAttachmentSamplesmember ofVkAttachmentSampleCountInfoAMDorVkAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline - If the current render pass instance was begun with
CmdBeginRendering, the currently bound pipeline was created with aVkAttachmentSampleCountInfoAMDorVkAttachmentSampleCountInfoNVstructure, andVkRenderingInfo::pDepthAttachment\u2192pname:imageView was notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofVkAttachmentSampleCountInfoAMDorVkAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createVkRenderingInfo::pDepthAttachment\u2192pname:imageView - If the current render pass instance was begun with
CmdBeginRendering, the currently bound pipeline was created with aVkAttachmentSampleCountInfoAMDorVkAttachmentSampleCountInfoNVstructure, andVkRenderingInfo::pStencilAttachment\u2192pname:imageView was notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofVkAttachmentSampleCountInfoAMDorVkAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createVkRenderingInfo::pStencilAttachment\u2192pname:imageView - If the currently bound pipeline was created without a
VkAttachmentSampleCountInfoAMDorVkAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withCmdBeginRenderingwith aVkRenderingInfo::colorAttachmentCountparameter greater than 0, then each element of theVkRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the value ofVkPipelineMultisampleStateCreateInfo::rasterizationSamplesused to create the currently bound graphics pipeline - If the current render pass instance was begun with
CmdBeginRendering, the currently bound pipeline was created without aVkAttachmentSampleCountInfoAMDorVkAttachmentSampleCountInfoNVstructure, andVkRenderingInfo::pDepthAttachment\u2192pname:imageView was notNULL_HANDLE, the value ofVkPipelineMultisampleStateCreateInfo::rasterizationSamplesused to create the currently bound graphics pipeline must be equal to the sample count used to createVkRenderingInfo::pDepthAttachment\u2192pname:imageView - If the current render pass instance was begun with
CmdBeginRendering, the currently bound pipeline was created without aVkAttachmentSampleCountInfoAMDorVkAttachmentSampleCountInfoNVstructure, andVkRenderingInfo::pStencilAttachment\u2192pname:imageView was notNULL_HANDLE, the value ofVkPipelineMultisampleStateCreateInfo::rasterizationSamplesused to create the currently bound graphics pipeline must be equal to the sample count used to createVkRenderingInfo::pStencilAttachment\u2192pname:imageView - If the current render pass instance was begun with
CmdBeginRendering, the currently bound pipeline must have been created with aVkGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE
- All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or
NULL_HANDLEbuffers bound - If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be
NULL_HANDLE - For a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description
- If the bound graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXTdynamic state enabled thenCmdSetPrimitiveTopologyEXTmust have been called in the current command buffer prior to this drawing command, and theprimitiveTopologyparameter ofvkCmdSetPrimitiveTopologyEXTmust be of the same topology class as the pipelineVkPipelineInputAssemblyStateCreateInfo::topologystate - If the bound graphics pipeline was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXTandDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic states enabled, thenCmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound graphics pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thenCmdBindVertexBuffers2EXTmust have been called in the current command buffer prior to this draw command, and thepStridesparameter ofCmdBindVertexBuffers2EXTmust not beNULL - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thenCmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled thenCmdSetPatchControlPointsEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXTdynamic state enabled thenCmdSetPrimitiveRestartEnableEXTmust have been called in the current command buffer prior to this drawing command - The bound graphics pipeline must not have been created with the
VkPipelineShaderStageCreateInfo::stagemember of an element ofVkGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_NVorSHADER_STAGE_MESH_BIT_NV commandBuffermust not be a protected command buffer- If
isPreprocessedisTRUEthenCmdPreprocessGeneratedCommandsNVmust have already been executed on the device, using the samepGeneratedCommandsInfocontent as well as the content of the input buffers it references (all exceptVkGeneratedCommandsInfoNV::preprocessBuffer). FurthermorepGeneratedCommandsInfo`sindirectCommandsLayoutmust have been created with theINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NVbit set VkGeneratedCommandsInfoNV::pipelinemust match the current bound pipeline atVkGeneratedCommandsInfoNV::pipelineBindPoint- Transform feedback must not be active
- The
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommandsfeature must be enabled
Valid Usage (Implicit)
commandBuffermust be a validVkCommandBufferhandlepGeneratedCommandsInfomust be a valid pointer to a validVkGeneratedCommandsInfoNVstructurecommandBuffermust be in the recording state- The
VkCommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called inside of a render pass instance
Host Synchronization
- Host access to
commandBuffermust be externally synchronized - Host access to the
VkCommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
Command Buffer Levels Render Pass Scope Supported Queue Types Primary Secondary Inside Graphics Compute See Also
- Parameters:
commandBuffer- the command buffer into which the command is recorded.isPreprocessed- represents whether the input data has already been preprocessed on the device. If it isFALSEthis command will implicitly trigger the preprocessing step, otherwise not.pGeneratedCommandsInfo- a pointer to aVkGeneratedCommandsInfoNVstructure containing parameters affecting the generation of commands.
- If a
-
vkCmdBindPipelineShaderGroupNV
public static void vkCmdBindPipelineShaderGroupNV(org.lwjgl.vulkan.VkCommandBuffer commandBuffer, int pipelineBindPoint, long pipeline, int groupIndex)Bind a pipeline object.C Specification
For pipelines that were created with the support of multiple shader groups (see Graphics Pipeline Shader Groups), the regular
vkCmdBindPipelinecommand will bind Shader Group 0. To explicitly bind a shader group use:void vkCmdBindPipelineShaderGroupNV( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex);Valid Usage
groupIndexmust be 0 or less than the effectiveVkGraphicsPipelineShaderGroupsCreateInfoNV::groupCountincluding the referenced pipelines- The
pipelineBindPointmust bePIPELINE_BIND_POINT_GRAPHICS - The same restrictions as
CmdBindPipelineapply as if the bound pipeline was created only with the Shader Group from thegroupIndexinformation - The
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommandsfeature must be enabled
Valid Usage (Implicit)
commandBuffermust be a validVkCommandBufferhandlepipelineBindPointmust be a validVkPipelineBindPointvaluepipelinemust be a validVkPipelinehandlecommandBuffermust be in the recording state- The
VkCommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - Both of
commandBuffer, andpipelinemust have been created, allocated, or retrieved from the sameVkDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized - Host access to the
VkCommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
Command Buffer Levels Render Pass Scope Supported Queue Types Primary Secondary Both Graphics Compute - Parameters:
commandBuffer- the command buffer that the pipeline will be bound to.pipelineBindPoint- aVkPipelineBindPointvalue specifying the bind point to which the pipeline will be bound.pipeline- the pipeline to be bound.groupIndex- the shader group to be bound.
-
nvkCreateIndirectCommandsLayoutNV
public static int nvkCreateIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, long pCreateInfo, long pAllocator, long pIndirectCommandsLayout)Unsafe version of:CreateIndirectCommandsLayoutNV
-
vkCreateIndirectCommandsLayoutNV
public static int vkCreateIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, VkIndirectCommandsLayoutCreateInfoNV pCreateInfo, @Nullable VkAllocationCallbacks pAllocator, java.nio.LongBuffer pIndirectCommandsLayout)Create an indirect command layout object.C Specification
Indirect command layouts are created by:
VkResult vkCreateIndirectCommandsLayoutNV( VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNV* pIndirectCommandsLayout);Valid Usage
- The
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommandsfeature must be enabled
Valid Usage (Implicit)
devicemust be a validVkDevicehandlepCreateInfomust be a valid pointer to a validVkIndirectCommandsLayoutCreateInfoNVstructure- If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validVkAllocationCallbacksstructure pIndirectCommandsLayoutmust be a valid pointer to aVkIndirectCommandsLayoutNVhandle
Return Codes
- On success, this command returns
- On failure, this command returns
See Also
- Parameters:
device- the logical device that creates the indirect command layout.pCreateInfo- a pointer to aVkIndirectCommandsLayoutCreateInfoNVstructure containing parameters affecting creation of the indirect command layout.pAllocator- controls host memory allocation as described in the Memory Allocation chapter.pIndirectCommandsLayout- a pointer to aVkIndirectCommandsLayoutNVhandle in which the resulting indirect command layout is returned.
- The
-
nvkDestroyIndirectCommandsLayoutNV
public static void nvkDestroyIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, long indirectCommandsLayout, long pAllocator)Unsafe version of:DestroyIndirectCommandsLayoutNV
-
vkDestroyIndirectCommandsLayoutNV
public static void vkDestroyIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, long indirectCommandsLayout, @Nullable VkAllocationCallbacks pAllocator)Destroy an indirect commands layout.C Specification
Indirect command layouts are destroyed by:
void vkDestroyIndirectCommandsLayoutNV( VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks* pAllocator);Valid Usage
- All submitted commands that refer to
indirectCommandsLayoutmust have completed execution - If
VkAllocationCallbackswere provided whenindirectCommandsLayoutwas created, a compatible set of callbacks must be provided here - If no
VkAllocationCallbackswere provided whenindirectCommandsLayoutwas created,pAllocatormust beNULL - The
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommandsfeature must be enabled
Valid Usage (Implicit)
devicemust be a validVkDevicehandle- If
indirectCommandsLayoutis notNULL_HANDLE,indirectCommandsLayoutmust be a validVkIndirectCommandsLayoutNVhandle - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validVkAllocationCallbacksstructure - If
indirectCommandsLayoutis a valid handle, it must have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
indirectCommandsLayoutmust be externally synchronized
See Also
- Parameters:
device- the logical device that destroys the layout.indirectCommandsLayout- the layout to destroy.pAllocator- controls host memory allocation as described in the Memory Allocation chapter.
- All submitted commands that refer to
-
vkCreateIndirectCommandsLayoutNV
public static int vkCreateIndirectCommandsLayoutNV(org.lwjgl.vulkan.VkDevice device, VkIndirectCommandsLayoutCreateInfoNV pCreateInfo, @Nullable VkAllocationCallbacks pAllocator, long[] pIndirectCommandsLayout)Array version of:CreateIndirectCommandsLayoutNV
-
-