Top Description Fields Constructors Methods
org.lwjgl.vulkan

public Class EXTValidationCache

extends Object
Class Inheritance
Imports
javax.annotation.*, java.nio.*, org.lwjgl.*, org.lwjgl.system.*

This extension provides a mechanism for caching the results of potentially expensive internal validation operations across multiple runs of a Vulkan application. At the core is the VkValidationCacheEXT object type, which is managed similarly to the existing VkPipelineCache.

The new struct VkShaderModuleValidationCacheCreateInfoEXT can be included in the pNext chain at CreateShaderModule time. It contains a VkValidationCacheEXT to use when validating the VkShaderModule.

VK_EXT_validation_cache
Name String
VK_EXT_validation_cache
Extension Type
Device extension
Registered Extension Number
161
Revision
1
Contact
Other Extension Metadata
Last Modified Date
2017-08-29
IP Status
No known IP claims.
Contributors
  • Cort Stratton, Google
  • Chris Forbes, Google

Field Summary

Modifier and TypeField and Description
public static final String
public static final int
VK_EXT_VALIDATION_CACHE_SPEC_VERSION

The extension specification version.

public static final int
public static final int
public static final int
public static final int
VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT

VkValidationCacheHeaderVersionEXT - Encode validation cache version Description

Constructor Summary

AccessConstructor and Description
protected

Method Summary

Modifier and TypeMethod and Description
public static int
nvkCreateValidationCacheEXT(VkDevice device, long pCreateInfo, long pAllocator, long pValidationCache)

Unsafe version of: CreateValidationCacheEXT

public static void
nvkDestroyValidationCacheEXT(VkDevice device, long validationCache, long pAllocator)

Unsafe version of: DestroyValidationCacheEXT

public static int
nvkGetValidationCacheDataEXT(VkDevice device, long validationCache, long
a pointer to a value related to the amount of data in the validation cache, as described below.
pDataSize
,
long pData)

Unsafe version of: GetValidationCacheDataEXT

public static int
nvkMergeValidationCachesEXT(VkDevice device, long dstCache, int
the length of the pSrcCaches array.
srcCacheCount
,
long pSrcCaches)

Unsafe version of: MergeValidationCachesEXT

public static int
vkCreateValidationCacheEXT(VkDevice
the logical device that creates the validation cache object.
device
,
VkValidationCacheCreateInfoEXT
a pointer to a VkValidationCacheCreateInfoEXT structure containing the initial parameters for the validation cache object.
pCreateInfo
,
VkAllocationCallbacks
controls host memory allocation as described in the Memory Allocation chapter.
pAllocator
,
LongBuffer
a pointer to a VkValidationCacheEXT handle in which the resulting validation cache object is returned.
pValidationCache
)

Creates a new validation cache.

public static int
vkCreateValidationCacheEXT(VkDevice device, VkValidationCacheCreateInfoEXT pCreateInfo, VkAllocationCallbacks pAllocator, long[] pValidationCache)

Array version of: CreateValidationCacheEXT

public static void
vkDestroyValidationCacheEXT(VkDevice
the logical device that destroys the validation cache object.
device
,
long
the handle of the validation cache to destroy.
validationCache
,
VkAllocationCallbacks
controls host memory allocation as described in the Memory Allocation chapter.
pAllocator
)

Destroy a validation cache object.

public static int
vkGetValidationCacheDataEXT(VkDevice
the logical device that owns the validation cache.
device
,
long
the validation cache to retrieve data from.
validationCache
,
PointerBuffer
a pointer to a value related to the amount of data in the validation cache, as described below.
pDataSize
,
ByteBuffer
either NULL or a pointer to a buffer.
pData
)

Get the data store from a validation cache.

public static int
vkMergeValidationCachesEXT(VkDevice
the logical device that owns the validation cache objects.
device
,
long
the handle of the validation cache to merge results into.
dstCache
,
LongBuffer
a pointer to an array of validation cache handles, which will be merged into dstCache. The previous contents of dstCache are included after the merge.
pSrcCaches
)

Combine the data stores of validation caches.

public static int
vkMergeValidationCachesEXT(VkDevice device, long dstCache, long[] pSrcCaches)

Array version of: MergeValidationCachesEXT

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

VK_EXT_VALIDATION_CACHE_EXTENSION_NAMEback to summary
public static final String VK_EXT_VALIDATION_CACHE_EXTENSION_NAME

The extension name.

VK_EXT_VALIDATION_CACHE_SPEC_VERSIONback to summary
public static final int VK_EXT_VALIDATION_CACHE_SPEC_VERSION

The extension specification version.

VK_OBJECT_TYPE_VALIDATION_CACHE_EXTback to summary
public static final int VK_OBJECT_TYPE_VALIDATION_CACHE_EXT

Extends VkObjectType.

VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXTback to summary
public static final int VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT

Extends VkStructureType.

Enum values:
VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXTback to summary
public static final int VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT

Extends VkStructureType.

Enum values:
VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXTback to summary
public static final int VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT

VkValidationCacheHeaderVersionEXT - Encode validation cache version

Description
See Also

CreateValidationCacheEXT, GetValidationCacheDataEXT

Constructor Detail

EXTValidationCacheback to summary
protected EXTValidationCache()

Method Detail

nvkCreateValidationCacheEXTback to summary
public static int nvkCreateValidationCacheEXT(VkDevice device, long pCreateInfo, long pAllocator, long pValidationCache)

Unsafe version of: CreateValidationCacheEXT

nvkDestroyValidationCacheEXTback to summary
public static void nvkDestroyValidationCacheEXT(VkDevice device, long validationCache, long pAllocator)

Unsafe version of: DestroyValidationCacheEXT

nvkGetValidationCacheDataEXTback to summary
public static int nvkGetValidationCacheDataEXT(VkDevice device, long validationCache, long pDataSize, long pData)

Unsafe version of: GetValidationCacheDataEXT

Parameters
pDataSize:long

a pointer to a value related to the amount of data in the validation cache, as described below.

nvkMergeValidationCachesEXTback to summary
public static int nvkMergeValidationCachesEXT(VkDevice device, long dstCache, int srcCacheCount, long pSrcCaches)

Unsafe version of: MergeValidationCachesEXT

Parameters
srcCacheCount:int

the length of the pSrcCaches array.

vkCreateValidationCacheEXTback to summary
public static int vkCreateValidationCacheEXT(VkDevice device, VkValidationCacheCreateInfoEXT pCreateInfo, VkAllocationCallbacks pAllocator, LongBuffer pValidationCache)

Creates a new validation cache.

C Specification

To create validation cache objects, call:


VkResult vkCreateValidationCacheEXT(
    VkDevice                                    device,
    const VkValidationCacheCreateInfoEXT*       pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkValidationCacheEXT*                       pValidationCache);
Description
Note

Applications can track and manage the total host memory size of a validation cache object using the pAllocator. Applications can limit the amount of data retrieved from a validation cache object in vkGetValidationCacheDataEXT. Implementations should not internally limit the total number of entries added to a validation cache object or the total host memory consumed.

Once created, a validation cache can be passed to the vkCreateShaderModule command by adding this object to the VkShaderModuleCreateInfo structure’s pNext chain. If a VkShaderModuleValidationCacheCreateInfoEXT object is included in the VkShaderModuleCreateInfo::pNext chain, and its validationCache field is not NULL_HANDLE, the implementation will query it for possible reuse opportunities and update it with new content. The use of the validation cache object in these commands is internally synchronized, and the same validation cache object can be used in multiple threads simultaneously.

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 vkCreateShaderModule command.

Valid Usage (Implicit)
  • device must be a valid VkDevice handle
  • pCreateInfo must be a valid pointer to a valid VkValidationCacheCreateInfoEXT structure
  • If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure
  • pValidationCache must be a valid pointer to a VkValidationCacheEXT handle
Return Codes
On success, this command returns
On failure, this command returns
See Also

VkAllocationCallbacks, VkValidationCacheCreateInfoEXT

Parameters
device:VkDevice

the logical device that creates the validation cache object.

pCreateInfo:VkValidationCacheCreateInfoEXT

a pointer to a VkValidationCacheCreateInfoEXT structure containing the initial parameters for the validation cache object.

pAllocator:VkAllocationCallbacks

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

pValidationCache:LongBuffer

a pointer to a VkValidationCacheEXT handle in which the resulting validation cache object is returned.

Annotations
@NativeType:VkResult
vkCreateValidationCacheEXTback to summary
public static int vkCreateValidationCacheEXT(VkDevice device, VkValidationCacheCreateInfoEXT pCreateInfo, VkAllocationCallbacks pAllocator, long[] pValidationCache)

Array version of: CreateValidationCacheEXT

Annotations
@NativeType:VkResult
vkDestroyValidationCacheEXTback to summary
public static void vkDestroyValidationCacheEXT(VkDevice device, long validationCache, VkAllocationCallbacks pAllocator)

Destroy a validation cache object.

C Specification

To destroy a validation cache, call:


void vkDestroyValidationCacheEXT(
    VkDevice                                    device,
    VkValidationCacheEXT                        validationCache,
    const VkAllocationCallbacks*                pAllocator);
Valid Usage
  • If VkAllocationCallbacks were provided when validationCache was created, a compatible set of callbacks must be provided here
  • If no VkAllocationCallbacks were provided when validationCache was created, pAllocator must be NULL
Valid Usage (Implicit)
  • device must be a valid VkDevice handle
  • If validationCache is not NULL_HANDLE, validationCache must be a valid VkValidationCacheEXT handle
  • If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure
  • If validationCache is a valid handle, it must have been created, allocated, or retrieved from device
Host Synchronization
  • Host access to validationCache must be externally synchronized
See Also

VkAllocationCallbacks

Parameters
device:VkDevice

the logical device that destroys the validation cache object.

validationCache:long

the handle of the validation cache to destroy.

pAllocator:VkAllocationCallbacks

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

vkGetValidationCacheDataEXTback to summary
public static int vkGetValidationCacheDataEXT(VkDevice device, long validationCache, PointerBuffer pDataSize, ByteBuffer pData)

Get the data store from a validation cache.

C Specification

Data can be retrieved from a validation cache object using the command:


VkResult vkGetValidationCacheDataEXT(
    VkDevice                                    device,
    VkValidationCacheEXT                        validationCache,
    size_t*                                     pDataSize,
    void*                                       pData);
Description

If pData is NULL, then the maximum size of the data that can be retrieved from the validation 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 validation cache, at most pDataSize bytes will be written to pData, and vkGetValidationCacheDataEXT will return INCOMPLETE instead of SUCCESS, to indicate that not all of the validation cache was returned.

Any data written to pData is valid and can be provided as the pInitialData member of the VkValidationCacheCreateInfoEXT structure passed to vkCreateValidationCacheEXT.

Two calls to vkGetValidationCacheDataEXT 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 validation cache, and use these data, possibly in a future run of the application, to populate new validation cache objects. The results of validation, 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:

Layout for validation cache header version VALIDATION_CACHE_HEADER_VERSION_ONE_EXT
OffsetSizeMeaning
04length in bytes of the entire validation cache header written as a stream of bytes, with the least significant byte first
44a VkValidationCacheHeaderVersionEXT value written as a stream of bytes, with the least significant byte first
8UUID_SIZEa layer commit ID expressed as a UUID, which uniquely identifies the version of the validation layers used to generate these validation results

The first four bytes encode the length of the entire validation cache header, in bytes. This value includes all fields in the header including the validation cache version field and the size of the length field.

The next four bytes encode the validation cache version, as described for VkValidationCacheHeaderVersionEXT. A consumer of the validation 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)
  • device must be a valid VkDevice handle
  • validationCache must be a valid VkValidationCacheEXT handle
  • pDataSize must be a valid pointer to a size_t value
  • If the value referenced by pDataSize is not 0, and pData is not NULL, pData must be a valid pointer to an array of pDataSize bytes
  • validationCache must have been created, allocated, or retrieved from device
Return Codes
On success, this command returns
On failure, this command returns
Parameters
device:VkDevice

the logical device that owns the validation cache.

validationCache:long

the validation cache to retrieve data from.

pDataSize:PointerBuffer

a pointer to a value related to the amount of data in the validation cache, as described below.

pData:ByteBuffer

either NULL or a pointer to a buffer.

Annotations
@NativeType:VkResult
vkMergeValidationCachesEXTback to summary
public static int vkMergeValidationCachesEXT(VkDevice device, long dstCache, LongBuffer pSrcCaches)

Combine the data stores of validation caches.

C Specification

Validation cache objects can be merged using the command:


VkResult vkMergeValidationCachesEXT(
    VkDevice                                    device,
    VkValidationCacheEXT                        dstCache,
    uint32_t                                    srcCacheCount,
    const VkValidationCacheEXT*                 pSrcCaches);
Description
Note

The details of the merge operation are implementation-dependent, but implementations should merge the contents of the specified validation caches and prune duplicate entries.

Valid Usage
  • dstCache must not appear in the list of source caches
Valid Usage (Implicit)
  • device must be a valid VkDevice handle
  • dstCache must be a valid VkValidationCacheEXT handle
  • pSrcCaches must be a valid pointer to an array of srcCacheCount valid VkValidationCacheEXT handles
  • srcCacheCount must be greater than 0
  • dstCache must have been created, allocated, or retrieved from device
  • Each element of pSrcCaches must have been created, allocated, or retrieved from device
Host Synchronization
  • Host access to dstCache must be externally synchronized
Return Codes
On success, this command returns
On failure, this command returns
Parameters
device:VkDevice

the logical device that owns the validation cache objects.

dstCache:long

the handle of the validation cache to merge results into.

pSrcCaches:LongBuffer

a pointer to an array of validation cache handles, which will be merged into dstCache. The previous contents of dstCache are included after the merge.

Annotations
@NativeType:VkResult
vkMergeValidationCachesEXTback to summary
public static int vkMergeValidationCachesEXT(VkDevice device, long dstCache, long[] pSrcCaches)

Array version of: MergeValidationCachesEXT

Annotations
@NativeType:VkResult