public class NVXDeviceGeneratedCommands
extends java.lang.Object
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 structure, 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 on 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 scenario, or updates synchronized on the host.
The intended usage for this extension is for the application to:
VkObjectTableNVX, and register the various Vulkan objects that are needed to evaluate the input parameters.VkIndirectCommandsLayoutNVX, which lists the VkIndirectCommandsTokenTypeNVX it wants to dynamically change as 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.CmdReserveSpaceForCommandsNVX in a target command buffer at the position you want the generated commands to be executed.CmdProcessCommandsNVX to create the actual device commands for all sequences based on the array contents into a provided target command buffer.For each draw/dispatch, the following can be specified:
Applications should register a small number of objects, and use dynamic offsets whenever possible.
While the GPU can be faster than a CPU to generate the commands, it may not happen asynchronously, therefore the primary use-case is generating "less" total work (occlusion culling, classification to use specialized shaders, etc.).
Open-Source samples illustrating the usage of the extension can be found at the following locations:
https://github.com/nvpro-samples/gl_vk_threaded_cadscene/blob/master/doc/vulkan_nvxdevicegenerated.md
https://github.com/NVIDIAGameWorks/GraphicsSamples/tree/master/samples/vk10-kepler/BasicDeviceGeneratedCommandsVk
// setup secondary command buffer
vkBeginCommandBuffer(generatedCmdBuffer, &beginInfo);
... setup its state as usual
// insert the reservation (there can only be one per command buffer)
// where the generated calls should be filled into
VkCmdReserveSpaceForCommandsInfoNVX reserveInfo = { VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX };
reserveInfo.objectTable = objectTable;
reserveInfo.indirectCommandsLayout = deviceGeneratedLayout;
reserveInfo.maxSequencesCount = myCount;
vkCmdReserveSpaceForCommandsNVX(generatedCmdBuffer, &reserveInfo);
vkEndCommandBuffer(generatedCmdBuffer);
// trigger the generation at some point in another primary command buffer
VkCmdProcessCommandsInfoNVX processInfo = { VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX };
processInfo.objectTable = objectTable;
processInfo.indirectCommandsLayout = deviceGeneratedLayout;
processInfo.maxSequencesCount = myCount;
// set the target of the generation (if null we would directly execute with mainCmd)
processInfo.targetCommandBuffer = generatedCmdBuffer;
// provide input data
processInfo.indirectCommandsTokenCount = 3;
processInfo.pIndirectCommandsTokens = myTokens;
// If you modify the input buffer data referenced by VkCmdProcessCommandsInfoNVX,
// ensure you have added the appropriate barriers prior generation process.
// When regenerating the content of the same reserved space, ensure prior operations have completed
VkMemoryBarrier memoryBarrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER };
memoryBarrier.srcAccessMask = ...;
memoryBarrier.dstAccessMask = VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX;
vkCmdPipelineBarrier(mainCmd,
// srcStageMaskVK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
// dstStageMaskVK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX,
// dependencyFlags0,
// memoryBarrierCount1,
// pMemoryBarriers&memoryBarrier,
...);
vkCmdProcessCommandsNVX(mainCmd, &processInfo);
...
// execute the secondary command buffer and ensure the processing that modifies command-buffer content
// has completed
memoryBarrier.srcAccessMask = VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX;
memoryBarrier.dstAccessMask = VK_ACCESS_INDIRECT_COMMAND_READ_BIT;
vkCmdPipelineBarrier(mainCmd,
// srcStageMaskVK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX,
// dstStageMaskVK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
// dependencyFlags0,
// memoryBarrierCount1,
// pMemoryBarriers&memoryBarrier,
...)
vkCmdExecuteCommands(mainCmd, 1, &generatedCmdBuffer);
VK_NVX_device_generated_commands| Modifier and Type | Field and Description |
|---|---|
static int |
VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX
Extends
VkAccessFlagBits. |
static int |
VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX
Extends
VkAccessFlagBits. |
static int |
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX
VkIndirectCommandsLayoutUsageFlagBitsNVX - Bitmask specifying allowed usage of an indirect commands layout
|
static int |
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX
VkIndirectCommandsLayoutUsageFlagBitsNVX - Bitmask specifying allowed usage of an indirect commands layout
|
static int |
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX
VkIndirectCommandsLayoutUsageFlagBitsNVX - Bitmask specifying allowed usage of an indirect commands layout
|
static int |
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX
VkIndirectCommandsLayoutUsageFlagBitsNVX - Bitmask specifying allowed usage of an indirect commands layout
|
static int |
VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX
VkIndirectCommandsTokenTypeNVX - Enum specifying
|
static int |
VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX
VkIndirectCommandsTokenTypeNVX - Enum specifying
|
static int |
VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX
VkIndirectCommandsTokenTypeNVX - Enum specifying
|
static int |
VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX
VkIndirectCommandsTokenTypeNVX - Enum specifying
|
static int |
VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX
VkIndirectCommandsTokenTypeNVX - Enum specifying
|
static int |
VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX
VkIndirectCommandsTokenTypeNVX - Enum specifying
|
static int |
VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX
VkIndirectCommandsTokenTypeNVX - Enum specifying
|
static int |
VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX
VkIndirectCommandsTokenTypeNVX - Enum specifying
|
static java.lang.String |
VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
The extension name.
|
static int |
VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
The extension specification version.
|
static int |
VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX
VkObjectEntryTypeNVX - Enum specifying object table entry type
|
static int |
VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX
VkObjectEntryTypeNVX - Enum specifying object table entry type
|
static int |
VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX
VkObjectEntryTypeNVX - Enum specifying object table entry type
|
static int |
VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX
VkObjectEntryTypeNVX - Enum specifying object table entry type
|
static int |
VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX
VkObjectEntryTypeNVX - Enum specifying object table entry type
|
static int |
VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX
VkObjectEntryUsageFlagBitsNVX - Bitmask specifying allowed usage of an object entry
|
static int |
VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX
VkObjectEntryUsageFlagBitsNVX - Bitmask specifying allowed usage of an object entry
|
static int |
VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX
Extends
VkObjectType. |
static int |
VK_OBJECT_TYPE_OBJECT_TABLE_NVX
Extends
VkObjectType. |
static int |
VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX
Extends
VkPipelineStageFlagBits. |
static int |
VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX
Extends
VkStructureType. |
static int |
VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX
Extends
VkStructureType. |
| Modifier and Type | Method and Description |
|---|---|
static void |
nvkCmdProcessCommandsNVX(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pProcessCommandsInfo)
Unsafe version of:
CmdProcessCommandsNVX |
static void |
nvkCmdReserveSpaceForCommandsNVX(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pReserveSpaceInfo)
Unsafe version of:
CmdReserveSpaceForCommandsNVX |
static int |
nvkCreateIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
long pCreateInfo,
long pAllocator,
long pIndirectCommandsLayout)
Unsafe version of:
CreateIndirectCommandsLayoutNVX |
static int |
nvkCreateObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
long pCreateInfo,
long pAllocator,
long pObjectTable)
Unsafe version of:
CreateObjectTableNVX |
static void |
nvkDestroyIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
long indirectCommandsLayout,
long pAllocator)
Unsafe version of:
DestroyIndirectCommandsLayoutNVX |
static void |
nvkDestroyObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
long pAllocator)
Unsafe version of:
DestroyObjectTableNVX |
static void |
nvkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(org.lwjgl.vulkan.VkPhysicalDevice physicalDevice,
long pFeatures,
long pLimits)
Unsafe version of:
GetPhysicalDeviceGeneratedCommandsPropertiesNVX |
static int |
nvkRegisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
int objectCount,
long ppObjectTableEntries,
long pObjectIndices)
Unsafe version of:
RegisterObjectsNVX |
static int |
nvkUnregisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
int objectCount,
long pObjectEntryTypes,
long pObjectIndices)
Unsafe version of:
UnregisterObjectsNVX |
static void |
vkCmdProcessCommandsNVX(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkCmdProcessCommandsInfoNVX pProcessCommandsInfo)
Performs the generation of commands on the device.
|
static void |
vkCmdReserveSpaceForCommandsNVX(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkCmdReserveSpaceForCommandsInfoNVX pReserveSpaceInfo)
Perform a reservation of command buffer space.
|
static int |
vkCreateIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
VkIndirectCommandsLayoutCreateInfoNVX pCreateInfo,
VkAllocationCallbacks pAllocator,
long[] pIndirectCommandsLayout)
Array version of:
CreateIndirectCommandsLayoutNVX |
static int |
vkCreateIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
VkIndirectCommandsLayoutCreateInfoNVX pCreateInfo,
VkAllocationCallbacks pAllocator,
java.nio.LongBuffer pIndirectCommandsLayout)
Create an indirect command layout object.
|
static int |
vkCreateObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
VkObjectTableCreateInfoNVX pCreateInfo,
VkAllocationCallbacks pAllocator,
long[] pObjectTable)
Array version of:
CreateObjectTableNVX |
static int |
vkCreateObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
VkObjectTableCreateInfoNVX pCreateInfo,
VkAllocationCallbacks pAllocator,
java.nio.LongBuffer pObjectTable)
Create an object table.
|
static void |
vkDestroyIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
long indirectCommandsLayout,
VkAllocationCallbacks pAllocator)
Destroy an object table.
|
static void |
vkDestroyObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
VkAllocationCallbacks pAllocator)
Destroy an object table.
|
static void |
vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(org.lwjgl.vulkan.VkPhysicalDevice physicalDevice,
VkDeviceGeneratedCommandsFeaturesNVX pFeatures,
VkDeviceGeneratedCommandsLimitsNVX pLimits)
Returns device-generated commands related properties of a physical device.
|
static int |
vkRegisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
org.lwjgl.PointerBuffer ppObjectTableEntries,
int[] pObjectIndices)
Array version of:
RegisterObjectsNVX |
static int |
vkRegisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
org.lwjgl.PointerBuffer ppObjectTableEntries,
java.nio.IntBuffer pObjectIndices)
Register resource bindings in an object table.
|
static int |
vkUnregisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
int[] pObjectEntryTypes,
int[] pObjectIndices)
Array version of:
UnregisterObjectsNVX |
static int |
vkUnregisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
java.nio.IntBuffer pObjectEntryTypes,
java.nio.IntBuffer pObjectIndices)
Unregister resource bindings in an object table.
|
public static final int VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
public static final java.lang.String VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
public static final int VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX
VkStructureType.
STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVXSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVXSTRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVXSTRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVXpublic static final int VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX
VkStructureType.
STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVXSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVXSTRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVXSTRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVXpublic static final int VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX
VkStructureType.
STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVXSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVXSTRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVXSTRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVXpublic static final int VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX
VkStructureType.
STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVXSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVXSTRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVXSTRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVXpublic static final int VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX
VkStructureType.
STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVXSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVXSTRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVXSTRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVXpublic static final int VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX
VkStructureType.
STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVXSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVXSTRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVXSTRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVXSTRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVXpublic static final int VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX
VkPipelineStageFlagBits.public static final int VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX
VkAccessFlagBits.
public static final int VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX
VkAccessFlagBits.
public static final int VK_OBJECT_TYPE_OBJECT_TABLE_NVX
VkObjectType.
public static final int VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX
VkObjectType.
public static final int VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX
INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX specifies that the processing of sequences can happen at an implementation-dependent order, which is not guaranteed to be coherent across multiple invocations.INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX specifies that there is likely a high difference between allocated number of sequences and actually used.INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX specifies that there are likely many draw or dispatch calls that are zero-sized (zero grid dimension, no primitives to render).INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX specifies that the input data for the sequences is not implicitly indexed from 0..sequencesUsed but a user provided VkBuffer encoding the index is provided.VkIndirectCommandsLayoutUsageFlagsNVX
public static final int VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX
INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX specifies that the processing of sequences can happen at an implementation-dependent order, which is not guaranteed to be coherent across multiple invocations.INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX specifies that there is likely a high difference between allocated number of sequences and actually used.INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX specifies that there are likely many draw or dispatch calls that are zero-sized (zero grid dimension, no primitives to render).INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX specifies that the input data for the sequences is not implicitly indexed from 0..sequencesUsed but a user provided VkBuffer encoding the index is provided.VkIndirectCommandsLayoutUsageFlagsNVX
public static final int VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX
INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX specifies that the processing of sequences can happen at an implementation-dependent order, which is not guaranteed to be coherent across multiple invocations.INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX specifies that there is likely a high difference between allocated number of sequences and actually used.INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX specifies that there are likely many draw or dispatch calls that are zero-sized (zero grid dimension, no primitives to render).INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX specifies that the input data for the sequences is not implicitly indexed from 0..sequencesUsed but a user provided VkBuffer encoding the index is provided.VkIndirectCommandsLayoutUsageFlagsNVX
public static final int VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX
INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX specifies that the processing of sequences can happen at an implementation-dependent order, which is not guaranteed to be coherent across multiple invocations.INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX specifies that there is likely a high difference between allocated number of sequences and actually used.INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX specifies that there are likely many draw or dispatch calls that are zero-sized (zero grid dimension, no primitives to render).INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX specifies that the input data for the sequences is not implicitly indexed from 0..sequencesUsed but a user provided VkBuffer encoding the index is provided.VkIndirectCommandsLayoutUsageFlagsNVX
public static final int VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX
OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX specifies that the resource is bound to PIPELINE_BIND_POINT_GRAPHICSOBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX specifies that the resource is bound to PIPELINE_BIND_POINT_COMPUTEVkObjectEntryUsageFlagsNVX
public static final int VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX
OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX specifies that the resource is bound to PIPELINE_BIND_POINT_GRAPHICSOBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX specifies that the resource is bound to PIPELINE_BIND_POINT_COMPUTEVkObjectEntryUsageFlagsNVX
public static final int VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX
| Token type | Equivalent command |
|---|---|
INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX | vkCmdBindPipeline |
INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX | vkCmdBindDescriptorSets |
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX | vkCmdBindIndexBuffer |
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX | vkCmdBindVertexBuffers |
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX | vkCmdPushConstants |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX | vkCmdDrawIndexedIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX | vkCmdDrawIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX | vkCmdDispatchIndirect |
VkIndirectCommandsLayoutTokenNVX, VkIndirectCommandsTokenNVX
public static final int VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX
| Token type | Equivalent command |
|---|---|
INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX | vkCmdBindPipeline |
INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX | vkCmdBindDescriptorSets |
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX | vkCmdBindIndexBuffer |
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX | vkCmdBindVertexBuffers |
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX | vkCmdPushConstants |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX | vkCmdDrawIndexedIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX | vkCmdDrawIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX | vkCmdDispatchIndirect |
VkIndirectCommandsLayoutTokenNVX, VkIndirectCommandsTokenNVX
public static final int VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX
| Token type | Equivalent command |
|---|---|
INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX | vkCmdBindPipeline |
INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX | vkCmdBindDescriptorSets |
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX | vkCmdBindIndexBuffer |
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX | vkCmdBindVertexBuffers |
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX | vkCmdPushConstants |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX | vkCmdDrawIndexedIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX | vkCmdDrawIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX | vkCmdDispatchIndirect |
VkIndirectCommandsLayoutTokenNVX, VkIndirectCommandsTokenNVX
public static final int VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX
| Token type | Equivalent command |
|---|---|
INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX | vkCmdBindPipeline |
INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX | vkCmdBindDescriptorSets |
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX | vkCmdBindIndexBuffer |
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX | vkCmdBindVertexBuffers |
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX | vkCmdPushConstants |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX | vkCmdDrawIndexedIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX | vkCmdDrawIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX | vkCmdDispatchIndirect |
VkIndirectCommandsLayoutTokenNVX, VkIndirectCommandsTokenNVX
public static final int VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX
| Token type | Equivalent command |
|---|---|
INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX | vkCmdBindPipeline |
INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX | vkCmdBindDescriptorSets |
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX | vkCmdBindIndexBuffer |
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX | vkCmdBindVertexBuffers |
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX | vkCmdPushConstants |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX | vkCmdDrawIndexedIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX | vkCmdDrawIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX | vkCmdDispatchIndirect |
VkIndirectCommandsLayoutTokenNVX, VkIndirectCommandsTokenNVX
public static final int VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX
| Token type | Equivalent command |
|---|---|
INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX | vkCmdBindPipeline |
INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX | vkCmdBindDescriptorSets |
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX | vkCmdBindIndexBuffer |
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX | vkCmdBindVertexBuffers |
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX | vkCmdPushConstants |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX | vkCmdDrawIndexedIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX | vkCmdDrawIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX | vkCmdDispatchIndirect |
VkIndirectCommandsLayoutTokenNVX, VkIndirectCommandsTokenNVX
public static final int VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX
| Token type | Equivalent command |
|---|---|
INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX | vkCmdBindPipeline |
INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX | vkCmdBindDescriptorSets |
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX | vkCmdBindIndexBuffer |
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX | vkCmdBindVertexBuffers |
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX | vkCmdPushConstants |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX | vkCmdDrawIndexedIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX | vkCmdDrawIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX | vkCmdDispatchIndirect |
VkIndirectCommandsLayoutTokenNVX, VkIndirectCommandsTokenNVX
public static final int VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX
| Token type | Equivalent command |
|---|---|
INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX | vkCmdBindPipeline |
INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX | vkCmdBindDescriptorSets |
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX | vkCmdBindIndexBuffer |
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX | vkCmdBindVertexBuffers |
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX | vkCmdPushConstants |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX | vkCmdDrawIndexedIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX | vkCmdDrawIndirect |
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX | vkCmdDispatchIndirect |
VkIndirectCommandsLayoutTokenNVX, VkIndirectCommandsTokenNVX
public static final int VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX
OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX specifies a VkDescriptorSet resource entry that is registered via VkObjectTableDescriptorSetEntryNVX.OBJECT_ENTRY_TYPE_PIPELINE_NVX specifies a VkPipeline resource entry that is registered via VkObjectTablePipelineEntryNVX.OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableIndexBufferEntryNVX.OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableVertexBufferEntryNVX.OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX specifies the resource entry is registered via VkObjectTablePushConstantEntryNVX.VkObjectTableCreateInfoNVX, VkObjectTableDescriptorSetEntryNVX, VkObjectTableEntryNVX, VkObjectTableIndexBufferEntryNVX, VkObjectTablePipelineEntryNVX, VkObjectTablePushConstantEntryNVX, VkObjectTableVertexBufferEntryNVX, UnregisterObjectsNVX
public static final int VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX
OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX specifies a VkDescriptorSet resource entry that is registered via VkObjectTableDescriptorSetEntryNVX.OBJECT_ENTRY_TYPE_PIPELINE_NVX specifies a VkPipeline resource entry that is registered via VkObjectTablePipelineEntryNVX.OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableIndexBufferEntryNVX.OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableVertexBufferEntryNVX.OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX specifies the resource entry is registered via VkObjectTablePushConstantEntryNVX.VkObjectTableCreateInfoNVX, VkObjectTableDescriptorSetEntryNVX, VkObjectTableEntryNVX, VkObjectTableIndexBufferEntryNVX, VkObjectTablePipelineEntryNVX, VkObjectTablePushConstantEntryNVX, VkObjectTableVertexBufferEntryNVX, UnregisterObjectsNVX
public static final int VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX
OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX specifies a VkDescriptorSet resource entry that is registered via VkObjectTableDescriptorSetEntryNVX.OBJECT_ENTRY_TYPE_PIPELINE_NVX specifies a VkPipeline resource entry that is registered via VkObjectTablePipelineEntryNVX.OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableIndexBufferEntryNVX.OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableVertexBufferEntryNVX.OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX specifies the resource entry is registered via VkObjectTablePushConstantEntryNVX.VkObjectTableCreateInfoNVX, VkObjectTableDescriptorSetEntryNVX, VkObjectTableEntryNVX, VkObjectTableIndexBufferEntryNVX, VkObjectTablePipelineEntryNVX, VkObjectTablePushConstantEntryNVX, VkObjectTableVertexBufferEntryNVX, UnregisterObjectsNVX
public static final int VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX
OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX specifies a VkDescriptorSet resource entry that is registered via VkObjectTableDescriptorSetEntryNVX.OBJECT_ENTRY_TYPE_PIPELINE_NVX specifies a VkPipeline resource entry that is registered via VkObjectTablePipelineEntryNVX.OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableIndexBufferEntryNVX.OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableVertexBufferEntryNVX.OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX specifies the resource entry is registered via VkObjectTablePushConstantEntryNVX.VkObjectTableCreateInfoNVX, VkObjectTableDescriptorSetEntryNVX, VkObjectTableEntryNVX, VkObjectTableIndexBufferEntryNVX, VkObjectTablePipelineEntryNVX, VkObjectTablePushConstantEntryNVX, VkObjectTableVertexBufferEntryNVX, UnregisterObjectsNVX
public static final int VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX
OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX specifies a VkDescriptorSet resource entry that is registered via VkObjectTableDescriptorSetEntryNVX.OBJECT_ENTRY_TYPE_PIPELINE_NVX specifies a VkPipeline resource entry that is registered via VkObjectTablePipelineEntryNVX.OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableIndexBufferEntryNVX.OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX specifies a VkBuffer resource entry that is registered via VkObjectTableVertexBufferEntryNVX.OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX specifies the resource entry is registered via VkObjectTablePushConstantEntryNVX.VkObjectTableCreateInfoNVX, VkObjectTableDescriptorSetEntryNVX, VkObjectTableEntryNVX, VkObjectTableIndexBufferEntryNVX, VkObjectTablePipelineEntryNVX, VkObjectTablePushConstantEntryNVX, VkObjectTableVertexBufferEntryNVX, UnregisterObjectsNVX
public static void nvkCmdProcessCommandsNVX(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pProcessCommandsInfo)
CmdProcessCommandsNVXpublic static void vkCmdProcessCommandsNVX(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkCmdProcessCommandsInfoNVX pProcessCommandsInfo)
The actual generation on the device is handled with:
void vkCmdProcessCommandsNVX(
VkCommandBuffer commandBuffer,
const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
commandBuffer must be a valid VkCommandBuffer handlepProcessCommandsInfo must be a valid pointer to a valid VkCmdProcessCommandsInfoNVX structurecommandBuffer must be in the recording stateVkCommandPool that commandBuffer was allocated from must support graphics, or compute operationscommandBuffer must be externally synchronizedVkCommandPool that commandBuffer was allocated from must be externally synchronized| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Inside | Graphics Compute |
commandBuffer - the primary command buffer in which the generation process takes space.pProcessCommandsInfo - a pointer to a VkCmdProcessCommandsInfoNVX structure containing parameters affecting the processing of commands.public static void nvkCmdReserveSpaceForCommandsNVX(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long pReserveSpaceInfo)
CmdReserveSpaceForCommandsNVXpublic static void vkCmdReserveSpaceForCommandsNVX(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
VkCmdReserveSpaceForCommandsInfoNVX pReserveSpaceInfo)
Command space for generated commands recorded into a secondary command buffer must be reserved by calling:
void vkCmdReserveSpaceForCommandsNVX(
VkCommandBuffer commandBuffer,
const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
commandBuffer must not have had a prior space reservation since its creation or the last reset.commandBuffer must be legal to execute all commands within the sequence provided by the indirectCommandsLayout member of pProcessCommandsInfo.commandBuffer must be a valid VkCommandBuffer handlepReserveSpaceInfo must be a valid pointer to a valid VkCmdReserveSpaceForCommandsInfoNVX structurecommandBuffer must be in the recording stateVkCommandPool that commandBuffer was allocated from must support graphics, or compute operationscommandBuffer must be a secondary VkCommandBuffercommandBuffer must be externally synchronizedVkCommandPool that commandBuffer was allocated from must be externally synchronized| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Secondary | Inside | Graphics Compute |
commandBuffer - the secondary command buffer in which the space for device-generated commands is reserved.public static int nvkCreateIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
long pCreateInfo,
long pAllocator,
long pIndirectCommandsLayout)
CreateIndirectCommandsLayoutNVXpublic static int vkCreateIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
VkIndirectCommandsLayoutCreateInfoNVX pCreateInfo,
@Nullable
VkAllocationCallbacks pAllocator,
java.nio.LongBuffer pIndirectCommandsLayout)
Indirect command layouts are created by:
VkResult vkCreateIndirectCommandsLayoutNVX(
VkDevice device,
const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
device must be a valid VkDevice handlepCreateInfo must be a valid pointer to a valid VkIndirectCommandsLayoutCreateInfoNVX structurepAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structurepIndirectCommandsLayout must be a valid pointer to a VkIndirectCommandsLayoutNVX handleVkAllocationCallbacks, VkIndirectCommandsLayoutCreateInfoNVX
device - the logical device that creates the indirect command layout.pCreateInfo - a pointer to a VkIndirectCommandsLayoutCreateInfoNVX structure 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 a VkIndirectCommandsLayoutNVX handle in which the resulting indirect command layout is returned.public static void nvkDestroyIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
long indirectCommandsLayout,
long pAllocator)
DestroyIndirectCommandsLayoutNVXpublic static void vkDestroyIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
long indirectCommandsLayout,
@Nullable
VkAllocationCallbacks pAllocator)
Indirect command layouts are destroyed by:
void vkDestroyIndirectCommandsLayoutNVX(
VkDevice device,
VkIndirectCommandsLayoutNVX indirectCommandsLayout,
const VkAllocationCallbacks* pAllocator);
indirectCommandsLayout must have completed executionVkAllocationCallbacks were provided when objectTable was created, a compatible set of callbacks must be provided hereVkAllocationCallbacks were provided when objectTable was created, pAllocator must be NULLdevice must be a valid VkDevice handleindirectCommandsLayout must be a valid VkIndirectCommandsLayoutNVX handlepAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structureindirectCommandsLayout must have been created, allocated, or retrieved from devicedevice - the logical device that destroys the layout.indirectCommandsLayout - the table to destroy.pAllocator - controls host memory allocation as described in the Memory Allocation chapter.public static int nvkCreateObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
long pCreateInfo,
long pAllocator,
long pObjectTable)
CreateObjectTableNVXpublic static int vkCreateObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
VkObjectTableCreateInfoNVX pCreateInfo,
@Nullable
VkAllocationCallbacks pAllocator,
java.nio.LongBuffer pObjectTable)
To create object tables, call:
VkResult vkCreateObjectTableNVX(
VkDevice device,
const VkObjectTableCreateInfoNVX* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkObjectTableNVX* pObjectTable);
device must be a valid VkDevice handlepCreateInfo must be a valid pointer to a valid VkObjectTableCreateInfoNVX structurepAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structurepObjectTable must be a valid pointer to a VkObjectTableNVX handledevice - the logical device that creates the object table.pCreateInfo - a pointer to a VkObjectTableCreateInfoNVX structure containing parameters affecting creation of the table.pAllocator - controls host memory allocation as described in the Memory Allocation chapter.pObjectTable - a pointer to a VkObjectTableNVX handle in which the resulting object table is returned.public static void nvkDestroyObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
long pAllocator)
DestroyObjectTableNVXpublic static void vkDestroyObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
@Nullable
VkAllocationCallbacks pAllocator)
To destroy an object table, call:
void vkDestroyObjectTableNVX(
VkDevice device,
VkObjectTableNVX objectTable,
const VkAllocationCallbacks* pAllocator);
objectTable must have completed execution.VkAllocationCallbacks were provided when objectTable was created, a compatible set of callbacks must be provided here.VkAllocationCallbacks were provided when objectTable was created, pAllocator must be NULL.device must be a valid VkDevice handleobjectTable must be a valid VkObjectTableNVX handlepAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structureobjectTable must have been created, allocated, or retrieved from deviceobjectTable must be externally synchronizeddevice - the logical device that destroys the table.objectTable - the table to destroy.pAllocator - controls host memory allocation as described in the Memory Allocation chapter.public static int nvkRegisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
int objectCount,
long ppObjectTableEntries,
long pObjectIndices)
RegisterObjectsNVXobjectCount - the number of resources to register.public static int vkRegisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
org.lwjgl.PointerBuffer ppObjectTableEntries,
java.nio.IntBuffer pObjectIndices)
Resource bindings of Vulkan objects are registered at an arbitrary uint32_t index within an object table. As long as the object table references such objects, they must not be deleted.
VkResult vkRegisterObjectsNVX(
VkDevice device,
VkObjectTableNVX objectTable,
uint32_t objectCount,
const VkObjectTableEntryNVX* const* ppObjectTableEntries,
const uint32_t* pObjectIndices);
pObjectTableEntry must yield plausible bindings supported by the device.pObjectIndices there must not be a registered resource already.pObjectIndices must be below the appropriate VkObjectTableCreateInfoNVX::pObjectEntryCounts limits provided at objectTable creation time.device must be a valid VkDevice handleobjectTable must be a valid VkObjectTableNVX handleppObjectTableEntries must be a valid pointer to an array of objectCount valid VkObjectTableEntryNVX structurespObjectIndices must be a valid pointer to an array of objectCount uint32_t valuesobjectCount must be greater than 0objectTable must have been created, allocated, or retrieved from deviceobjectTable must be externally synchronizeddevice - the logical device that creates the object table.objectTable - the table for which the resources are registered.ppObjectTableEntries - provides an array for detailed binding informations. Each array element is a pointer to a structure of type VkObjectTablePipelineEntryNVX, VkObjectTableDescriptorSetEntryNVX, VkObjectTableVertexBufferEntryNVX, VkObjectTableIndexBufferEntryNVX or VkObjectTablePushConstantEntryNVX (see below for details).pObjectIndices - are the indices at which each resource is registered.public static int nvkUnregisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
int objectCount,
long pObjectEntryTypes,
long pObjectIndices)
UnregisterObjectsNVXobjectCount - the number of resources being removed from the object table.public static int vkUnregisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
java.nio.IntBuffer pObjectEntryTypes,
java.nio.IntBuffer pObjectIndices)
Use the following command to unregister resources from an object table:
VkResult vkUnregisterObjectsNVX(
VkDevice device,
VkObjectTableNVX objectTable,
uint32_t objectCount,
const VkObjectEntryTypeNVX* pObjectEntryTypes,
const uint32_t* pObjectIndices);
pObjectIndices there must be a registered resource already.pObjectEntryTypes of the resource at pObjectIndices must match.device must be a valid VkDevice handleobjectTable must be a valid VkObjectTableNVX handlepObjectEntryTypes must be a valid pointer to an array of objectCount valid VkObjectEntryTypeNVX valuespObjectIndices must be a valid pointer to an array of objectCount uint32_t valuesobjectCount must be greater than 0objectTable must have been created, allocated, or retrieved from deviceobjectTable must be externally synchronizeddevice - the logical device that creates the object table.objectTable - the table from which the resources are unregistered.pObjectIndices - provides the array of object indices to be removed.public static void nvkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(org.lwjgl.vulkan.VkPhysicalDevice physicalDevice,
long pFeatures,
long pLimits)
GetPhysicalDeviceGeneratedCommandsPropertiesNVXpublic static void vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(org.lwjgl.vulkan.VkPhysicalDevice physicalDevice,
VkDeviceGeneratedCommandsFeaturesNVX pFeatures,
VkDeviceGeneratedCommandsLimitsNVX pLimits)
To query the support of related features and limitations, call:
void vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
VkPhysicalDevice physicalDevice,
VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
VkDeviceGeneratedCommandsLimitsNVX* pLimits);
physicalDevice must be a valid VkPhysicalDevice handlepFeatures must be a valid pointer to a VkDeviceGeneratedCommandsFeaturesNVX structurepLimits must be a valid pointer to a VkDeviceGeneratedCommandsLimitsNVX structureVkDeviceGeneratedCommandsFeaturesNVX, VkDeviceGeneratedCommandsLimitsNVX
physicalDevice - the handle to the physical device whose properties will be queried.pFeatures - a pointer to a VkDeviceGeneratedCommandsFeaturesNVX structure in which features are returned.pLimits - a pointer to a VkDeviceGeneratedCommandsLimitsNVX structure in which limitations are returned.public static int vkCreateIndirectCommandsLayoutNVX(org.lwjgl.vulkan.VkDevice device,
VkIndirectCommandsLayoutCreateInfoNVX pCreateInfo,
@Nullable
VkAllocationCallbacks pAllocator,
long[] pIndirectCommandsLayout)
CreateIndirectCommandsLayoutNVXpublic static int vkCreateObjectTableNVX(org.lwjgl.vulkan.VkDevice device,
VkObjectTableCreateInfoNVX pCreateInfo,
@Nullable
VkAllocationCallbacks pAllocator,
long[] pObjectTable)
CreateObjectTableNVXpublic static int vkRegisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
org.lwjgl.PointerBuffer ppObjectTableEntries,
int[] pObjectIndices)
RegisterObjectsNVXpublic static int vkUnregisterObjectsNVX(org.lwjgl.vulkan.VkDevice device,
long objectTable,
int[] pObjectEntryTypes,
int[] pObjectIndices)
UnregisterObjectsNVXCopyright LWJGL. All Rights Reserved. License terms.