| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Graphics.Vulkan.Core10.PipelineCache
Synopsis
- createPipelineCache :: forall io. MonadIO io => Device -> PipelineCacheCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io PipelineCache
- withPipelineCache :: forall io r. MonadIO io => (io PipelineCache -> (PipelineCache -> io ()) -> r) -> Device -> PipelineCacheCreateInfo -> Maybe AllocationCallbacks -> r
- destroyPipelineCache :: forall io. MonadIO io => Device -> PipelineCache -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
- getPipelineCacheData :: forall io. MonadIO io => Device -> PipelineCache -> io (Result, "data" ::: ByteString)
- mergePipelineCaches :: forall io. MonadIO io => Device -> ("dstCache" ::: PipelineCache) -> ("srcCaches" ::: Vector PipelineCache) -> io ()
- data PipelineCacheCreateInfo = PipelineCacheCreateInfo {}
Documentation
createPipelineCache :: forall io. MonadIO io => Device -> PipelineCacheCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io PipelineCache Source #
vkCreatePipelineCache - Creates a new pipeline cache
Parameters
deviceis the logical device that creates the pipeline cache object.
pCreateInfois a pointer to aPipelineCacheCreateInfostructure containing initial parameters for the pipeline cache object.pAllocatorcontrols host memory allocation as described in the Memory Allocation chapter.pPipelineCacheis a pointer to aPipelineCachehandle in which the resulting pipeline cache object is returned.
Description
Note
Applications can track and manage the total host memory size of a
pipeline cache object using the pAllocator. Applications can limit
the amount of data retrieved from a pipeline cache object in
getPipelineCacheData. Implementations should not internally limit
the total number of entries added to a pipeline cache object or the
total host memory consumed.
Once created, a pipeline cache can be passed to the
createGraphicsPipelines
createRayTracingPipelinesKHR,
createRayTracingPipelinesNV,
and createComputePipelines commands.
If the pipeline cache passed into these commands is not
NULL_HANDLE, the implementation
will query it for possible reuse opportunities and update it with new
content. The use of the pipeline cache object in these commands is
internally synchronized, and the same pipeline cache object can be
used in multiple threads simultaneously.
If flags of pCreateInfo includes
PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT,
all commands that modify the returned pipeline cache object must be
externally synchronized.
Note
Implementations should make every effort to limit any critical
sections to the actual accesses to the cache, which is expected to be
significantly shorter than the duration of the vkCreate*Pipelines
commands.
Valid Usage (Implicit)
devicemust be a validDevicehandle
pCreateInfomust be a valid pointer to a validPipelineCacheCreateInfostructure- If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure pPipelineCachemust be a valid pointer to aPipelineCachehandle
Return Codes
See Also
AllocationCallbacks,
Device,
PipelineCache,
PipelineCacheCreateInfo
withPipelineCache :: forall io r. MonadIO io => (io PipelineCache -> (PipelineCache -> io ()) -> r) -> Device -> PipelineCacheCreateInfo -> Maybe AllocationCallbacks -> r Source #
A convenience wrapper to make a compatible pair of calls to
createPipelineCache and destroyPipelineCache
To ensure that destroyPipelineCache is always called: pass
bracket (or the allocate function from your
favourite resource management library) as the first argument.
To just extract the pair pass '(,)' as the first argument.
destroyPipelineCache :: forall io. MonadIO io => Device -> PipelineCache -> ("allocator" ::: Maybe AllocationCallbacks) -> io () Source #
vkDestroyPipelineCache - Destroy a pipeline cache object
Parameters
deviceis the logical device that destroys the pipeline cache object.
pipelineCacheis the handle of the pipeline cache to destroy.pAllocatorcontrols host memory allocation as described in the Memory Allocation chapter.
Valid Usage
- If
AllocationCallbackswere provided whenpipelineCachewas created, a compatible set of callbacks must be provided here
- If no
AllocationCallbackswere provided whenpipelineCachewas created,pAllocatormust beNULL
Valid Usage (Implicit)
devicemust be a validDevicehandle
- If
pipelineCacheis notNULL_HANDLE,pipelineCachemust be a validPipelineCachehandle - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure - If
pipelineCacheis a valid handle, it must have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
pipelineCachemust be externally synchronized
See Also
getPipelineCacheData :: forall io. MonadIO io => Device -> PipelineCache -> io (Result, "data" ::: ByteString) Source #
vkGetPipelineCacheData - Get the data store from a pipeline cache
Parameters
deviceis the logical device that owns the pipeline cache.
pipelineCacheis the pipeline cache to retrieve data from.pDataSizeis a pointer to asize_tvalue related to the amount of data in the pipeline cache, as described below.pDatais eitherNULLor a pointer to a buffer.
Description
If pData is NULL, then the maximum size of the data that can be
retrieved from the pipeline cache, in bytes, is returned in pDataSize.
Otherwise, pDataSize must point to a variable set by the user to the
size of the buffer, in bytes, pointed to by pData, and on return the
variable is overwritten with the amount of data actually written to
pData.
If pDataSize is less than the maximum size that can be retrieved by
the pipeline cache, at most pDataSize bytes will be written to
pData, and getPipelineCacheData will return
INCOMPLETE. Any data written to
pData is valid and can be provided as the pInitialData member of
the PipelineCacheCreateInfo structure passed to createPipelineCache.
Two calls to getPipelineCacheData with the same parameters must
retrieve the same data unless a command that modifies the contents of
the cache is called between them.
Applications can store the data retrieved from the pipeline cache, and
use these data, possibly in a future run of the application, to populate
new pipeline cache objects. The results of pipeline compiles, however,
may depend on the vendor ID, device ID, driver version, and other
details of the device. To enable applications to detect when previously
retrieved data is incompatible with the device, the initial bytes
written to pData must be a header consisting of the following
members:
| Offset | Size | Meaning |
|---|---|---|
| 0 | 4 | length in bytes of the entire pipeline cache header written as a stream of bytes, with the least significant byte first |
| 4 | 4 | a PipelineCacheHeaderVersion
value written as a stream of bytes, with the least significant byte first |
| 8 | 4 | a vendor ID equal to
PhysicalDeviceProperties::vendorID written
as a stream of bytes, with the least significant byte first |
| 12 | 4 | a device ID equal to
PhysicalDeviceProperties::deviceID written
as a stream of bytes, with the least significant byte first |
| 16 | UUID_SIZE
| a pipeline cache ID equal to
PhysicalDeviceProperties::pipelineCacheUUID |
Layout for pipeline cache header version
PIPELINE_CACHE_HEADER_VERSION_ONE
The first four bytes encode the length of the entire pipeline cache header, in bytes. This value includes all fields in the header including the pipeline cache version field and the size of the length field.
The next four bytes encode the pipeline cache version, as described for
PipelineCacheHeaderVersion.
A consumer of the pipeline cache should use the cache version to
interpret the remainder of the cache header.
If pDataSize is less than what is necessary to store this header,
nothing will be written to pData and zero will be written to
pDataSize.
Valid Usage (Implicit)
devicemust be a validDevicehandle
pipelineCachemust be a validPipelineCachehandlepDataSizemust be a valid pointer to asize_tvalue- If the value referenced by
pDataSizeis not0, andpDatais notNULL,pDatamust be a valid pointer to an array ofpDataSizebytes pipelineCachemust have been created, allocated, or retrieved fromdevice
Return Codes
See Also
mergePipelineCaches :: forall io. MonadIO io => Device -> ("dstCache" ::: PipelineCache) -> ("srcCaches" ::: Vector PipelineCache) -> io () Source #
vkMergePipelineCaches - Combine the data stores of pipeline caches
Parameters
deviceis the logical device that owns the pipeline cache objects.
dstCacheis the handle of the pipeline cache to merge results into.srcCacheCountis the length of thepSrcCachesarray.pSrcCachesis a pointer to an array of pipeline cache handles, which will be merged intodstCache. The previous contents ofdstCacheare included after the merge.
Description
Note
The details of the merge operation are implementation dependent, but implementations should merge the contents of the specified pipelines and prune duplicate entries.
Valid Usage
dstCachemust not appear in the list of source caches
Valid Usage (Implicit)
devicemust be a validDevicehandle
dstCachemust be a validPipelineCachehandlepSrcCachesmust be a valid pointer to an array ofsrcCacheCountvalidPipelineCachehandlessrcCacheCountmust be greater than0dstCachemust have been created, allocated, or retrieved fromdevice- Each element of
pSrcCachesmust have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
dstCachemust be externally synchronized
Return Codes
See Also
data PipelineCacheCreateInfo Source #
VkPipelineCacheCreateInfo - Structure specifying parameters of a newly created pipeline cache
Valid Usage
- If
initialDataSizeis not0, it must be equal to the size ofpInitialData, as returned bygetPipelineCacheDatawhenpInitialDatawas originally retrieved
- If
initialDataSizeis not0,pInitialDatamust have been retrieved from a previous call togetPipelineCacheData - If the
pipelineCreationCacheControl
feature is not enabled,
flagsmust not includePIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT
Valid Usage (Implicit)
sTypemust beSTRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
pNextmust beNULLflagsmust be a valid combination ofPipelineCacheCreateFlagBitsvalues- If
initialDataSizeis not0,pInitialDatamust be a valid pointer to an array ofinitialDataSizebytes
See Also
PipelineCacheCreateFlags,
StructureType,
createPipelineCache
Constructors
| PipelineCacheCreateInfo | |
Fields
| |