| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Vulkan.Extensions.VK_KHR_push_descriptor
Synopsis
- cmdPushDescriptorSetKHR :: forall io. MonadIO io => CommandBuffer -> PipelineBindPoint -> PipelineLayout -> ("set" ::: Word32) -> ("descriptorWrites" ::: Vector (SomeStruct WriteDescriptorSet)) -> io ()
- cmdPushDescriptorSetWithTemplateKHR :: forall io. MonadIO io => CommandBuffer -> DescriptorUpdateTemplate -> PipelineLayout -> ("set" ::: Word32) -> ("data" ::: Ptr ()) -> io ()
- data PhysicalDevicePushDescriptorPropertiesKHR = PhysicalDevicePushDescriptorPropertiesKHR {}
- type KHR_PUSH_DESCRIPTOR_SPEC_VERSION = 2
- pattern KHR_PUSH_DESCRIPTOR_SPEC_VERSION :: forall a. Integral a => a
- type KHR_PUSH_DESCRIPTOR_EXTENSION_NAME = "VK_KHR_push_descriptor"
- pattern KHR_PUSH_DESCRIPTOR_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
cmdPushDescriptorSetKHR Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> PipelineBindPoint |
|
| -> PipelineLayout |
|
| -> ("set" ::: Word32) |
|
| -> ("descriptorWrites" ::: Vector (SomeStruct WriteDescriptorSet)) |
|
| -> io () |
vkCmdPushDescriptorSetKHR - Pushes descriptor updates into a command buffer
Description
Push descriptors are a small bank of descriptors whose storage is internally managed by the command buffer rather than being written into a descriptor set and later bound to a command buffer. Push descriptors allow for incremental updates of descriptors without managing the lifetime of descriptor sets.
When a command buffer begins recording, all push descriptors are
undefined. Push descriptors can be updated incrementally and cause
shaders to use the updated descriptors for subsequent rendering commands
(either compute or graphics, according to the pipelineBindPoint) until
the descriptor is overwritten, or else until the set is disturbed as
described in
Pipeline Layout Compatibility.
When the set is disturbed or push descriptors with a different
descriptor set layout are set, all push descriptors are undefined.
Push descriptors that are
statically used
by a pipeline must not be undefined at the time that a draw or
dispatch command is recorded to execute using that pipeline. This
includes immutable sampler descriptors, which must be pushed before
they are accessed by a pipeline (the immutable samplers are pushed,
rather than the samplers in pDescriptorWrites). Push descriptors that
are not statically used can remain undefined.
Push descriptors do not use dynamic offsets. Instead, the corresponding
non-dynamic descriptor types can be used and the offset member of
DescriptorBufferInfo can be changed each
time the descriptor is written.
Each element of pDescriptorWrites is interpreted as in
WriteDescriptorSet, except the dstSet
member is ignored.
To push an immutable sampler, use a
WriteDescriptorSet with dstBinding and
dstArrayElement selecting the immutable sampler’s binding. If the
descriptor type is
DESCRIPTOR_TYPE_SAMPLER, the
pImageInfo parameter is ignored and the immutable sampler is taken
from the push descriptor set layout in the pipeline layout. If the
descriptor type is
DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
the sampler member of the pImageInfo parameter is ignored and the
immutable sampler is taken from the push descriptor set layout in the
pipeline layout.
Valid Usage
pipelineBindPointmust be supported by thecommandBuffer’s parentCommandPool’s queue family
setmust be less thanPipelineLayoutCreateInfo::setLayoutCountprovided whenlayoutwas createdsetmust be the unique set number in the pipeline layout that uses a descriptor set layout that was created withDESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
Valid Usage (Implicit)
commandBuffermust be a validCommandBufferhandle
pipelineBindPointmust be a validPipelineBindPointvaluelayoutmust be a validPipelineLayouthandlepDescriptorWritesmust be a valid pointer to an array ofdescriptorWriteCountvalidWriteDescriptorSetstructurescommandBuffermust be in the recording state- The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations descriptorWriteCountmust be greater than0- Both of
commandBuffer, andlayoutmust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Both | Graphics Compute |
See Also
CommandBuffer,
PipelineBindPoint,
PipelineLayout,
WriteDescriptorSet
cmdPushDescriptorSetWithTemplateKHR Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> DescriptorUpdateTemplate |
|
| -> PipelineLayout |
|
| -> ("set" ::: Word32) |
|
| -> ("data" ::: Ptr ()) |
|
| -> io () |
vkCmdPushDescriptorSetWithTemplateKHR - Pushes descriptor updates into a command buffer using a descriptor update template
Valid Usage
- The
pipelineBindPointspecified during the creation of the descriptor update template must be supported by thecommandBuffer’s parentCommandPool’s queue family
pDatamust be a valid pointer to a memory containing one or more valid instances ofDescriptorImageInfo,DescriptorBufferInfo, orBufferViewin a layout defined bydescriptorUpdateTemplatewhen it was created withcreateDescriptorUpdateTemplateKHR
Valid Usage (Implicit)
commandBuffermust be a validCommandBufferhandle
descriptorUpdateTemplatemust be a validDescriptorUpdateTemplatehandlelayoutmust be a validPipelineLayouthandlecommandBuffermust be in the recording state- The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - Each of
commandBuffer,descriptorUpdateTemplate, andlayoutmust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Both | Graphics Compute |
API example.
struct AppDataStructure
{
VkDescriptorImageInfo imageInfo; // a single image info
// ... some more application related data
};
const VkDescriptorUpdateTemplateEntry descriptorUpdateTemplateEntries[] =
{
// binding to a single image descriptor
{
0, // binding
0, // dstArrayElement
1, // descriptorCount
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, // descriptorType
offsetof(AppDataStructure, imageInfo), // offset
0 // stride is not required if descriptorCount is 1
}
};
// create a descriptor update template for descriptor set updates
const VkDescriptorUpdateTemplateCreateInfo createInfo =
{
VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO, // sType
NULL, // pNext
0, // flags
1, // descriptorUpdateEntryCount
descriptorUpdateTemplateEntries, // pDescriptorUpdateEntries
VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, // templateType
0, // descriptorSetLayout, ignored by given templateType
VK_PIPELINE_BIND_POINT_GRAPHICS, // pipelineBindPoint
myPipelineLayout, // pipelineLayout
0, // set
};
VkDescriptorUpdateTemplate myDescriptorUpdateTemplate;
myResult = vkCreateDescriptorUpdateTemplate(
myDevice,
&createInfo,
NULL,
&myDescriptorUpdateTemplate);
}
AppDataStructure appData;
// fill appData here or cache it in your engine
vkCmdPushDescriptorSetWithTemplateKHR(myCmdBuffer, myDescriptorUpdateTemplate, myPipelineLayout, 0,&appData);See Also
data PhysicalDevicePushDescriptorPropertiesKHR Source #
VkPhysicalDevicePushDescriptorPropertiesKHR - Structure describing push descriptor limits that can be supported by an implementation
Members
The members of the PhysicalDevicePushDescriptorPropertiesKHR structure
describe the following implementation-dependent limits:
Description
If the PhysicalDevicePushDescriptorPropertiesKHR structure is included
in the pNext chain of
PhysicalDeviceProperties2,
it is filled with the implementation-dependent limits.
Valid Usage (Implicit)
See Also
Constructors
| PhysicalDevicePushDescriptorPropertiesKHR | |
Fields
| |
Instances
type KHR_PUSH_DESCRIPTOR_SPEC_VERSION = 2 Source #
pattern KHR_PUSH_DESCRIPTOR_SPEC_VERSION :: forall a. Integral a => a Source #
type KHR_PUSH_DESCRIPTOR_EXTENSION_NAME = "VK_KHR_push_descriptor" Source #
pattern KHR_PUSH_DESCRIPTOR_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #