vulkan-3.24: Bindings to the Vulkan graphics API.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Vulkan.Extensions.VK_EXT_device_address_binding_report

Description

Name

VK_EXT_device_address_binding_report - device extension

VK_EXT_device_address_binding_report

Name String
VK_EXT_device_address_binding_report
Extension Type
Device extension
Registered Extension Number
355
Revision
1
Extension and Version Dependencies
  • Requires support for Vulkan 1.0
  • Requires VK_KHR_get_physical_device_properties2 to be enabled for any device-level functionality
  • Requires VK_EXT_debug_utils to be enabled for any device-level functionality
Special Uses
Contact
  • Ralph Potter r_potter

Other Extension Metadata

Last Modified Date
2020-11-23
Interactions and External Dependencies
  • This extension requires VK_EXT_debug_utils
Contributors
  • Ralph Potter, Samsung
  • Spencer Fricke, Samsung
  • Jan-Harald Fredriksen, ARM
  • Andrew Ellem, Google
  • Alex Walters, IMG
  • Jeff Bolz, NVIDIA

Description

This extension enables applications to track the binding of regions of the GPU virtual address space, and to associate those regions with Vulkan objects. This extension is primarily intended to aid in crash postmortem, where applications may wish to map a faulting GPU address to a Vulkan object.

For example, a page fault triggered by accessing an address located within a region of the GPU virtual address space that was previously reported as bound and then unbound may indicate a use-after-free error. Similarly, faults generated by accessing virtual addresses outside the limits of a bound region of GPU virtual address space may indicate indexing beyond the bounds of a resource.

New Structures

New Enums

New Bitmasks

New Enum Constants

Issues

  1. ) Should this extend VK_EXT_debug_utils or VK_EXT_device_memory_report?

RESOLVED: Extend VK_EXT_debug_utils. VK_EXT_device_memory_report focuses on memory allocations and would not normally trigger callbacks in all of the situations where VK_EXT_device_address_binding_report is expected to.

  1. ) Should this extension cover all Vulkan object types, or only resources such as buffers and images?

RESOLVED: The extension covers all Vulkan objects, and is not restricted to objects backed by VkDeviceMemory objects.

  1. ) Should reallocation be identified explicitly, or as a unbind/bind pair?

RESOLVED: Reallocation should be represented as an unbind/bind pair.

  1. ) Can multiple Vulkan objects share an overlapping virtual address range?

RESOLVED: Yes. This can be expected to occur due to resources aliasing.

  1. ) Can a single Vulkan object be associated with multiple virtual address ranges concurrently?

RESOLVED: Yes. These should be reported via multiple calls to the reporting callback.

  1. ) Should the virtual address ranges associated with internal allocations such as memory pools be reported?

RESOLVED: Virtual address ranges associated with internal allocations should only be reported when they become associated with a specific Vulkan object. In the case of internal pool allocations, a bind event should be reported when resources from the pool are assigned to a Vulkan object, and an unbind event should be reported when those resources are returned to the pool. Implementations should not report the binding or unbinding of virtual address ranges for which there are no related API objects visible to the application developer.

  1. ) Can an implementation report binding a virtual address range at VkImage or VkImageView creation, rather than in response to vkBindImageMemory?

RESOLVED: Yes. Virtual address range binding should be reported at the appropriate point at which it occurs within the implementation. This extension does not mandate when that should occur, and applications should anticipate receiving callback events at any point after registering callbacks.

  1. ) Can reporting of binding/unbinding be deferred until a resource is referenced by an executing command buffer?

RESOLVED: Changes to the virtual address ranges associated with a Vulkan object should be reported as close as possible to where they occur within the implementation. If virtual address binding is deferred, then the the callback should also be deferred to match.

  1. ) Do bind/unbind callbacks have to form matched pairs? Can a large region be bound, and then subregions unbound, resulting in fragmentation?

RESOLVED: Splitting of virtual address regions, and unmatched bind/unbind callbacks may occur. Developers should anticipate that sparse memory may exhibit this behaviour.

  1. ) The specification mandates that a callback must be triggered whenever a GPU virtual address range associated with any Vulkan object is bound or unbound. Do we need queries or properties indicating which Vulkan objects will report binding modifications?

RESOLVED: No. This extension is not intended to mandate how and when implementations bind virtual ranges to objects. Adding queries or properties would constrain implementations, which might otherwise vary how virtual address bindings occur based on usage.

  1. ) Should vkAllocateMemory and vkFreeMemory trigger reporting callbacks?

RESOLVED: If an implementation binds a GPU virtual address range when vkAllocateMemory is called, then the callbacks must be triggered associating the virtual address range with the VkDeviceMemory object. If the device memory is subsequently bound to a buffer or image via vkBind*Memory, the callbacks should be triggered a second time, reporting the association between virtual address range and the buffer/image.

Version History

  • Revision 1, 2020-09-23 (Ralph Potter)

    • Internal revisions

See Also

DeviceAddressBindingCallbackDataEXT, DeviceAddressBindingFlagBitsEXT, DeviceAddressBindingFlagsEXT, DeviceAddressBindingTypeEXT, PhysicalDeviceAddressBindingReportFeaturesEXT

Document Notes

For more information, see the Vulkan Specification

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

Synopsis

Documentation

data PhysicalDeviceAddressBindingReportFeaturesEXT Source #

VkPhysicalDeviceAddressBindingReportFeaturesEXT - Structure describing the virtual allocation reporting feature supported by an implementation

Members

This structure describes the following feature:

Description

If the PhysicalDeviceAddressBindingReportFeaturesEXT structure is included in the pNext chain of the PhysicalDeviceFeatures2 structure passed to getPhysicalDeviceFeatures2, it is filled in to indicate whether each corresponding feature is supported. PhysicalDeviceAddressBindingReportFeaturesEXT can also be used in the pNext chain of DeviceCreateInfo to selectively enable these features.

Valid Usage (Implicit)

See Also

VK_EXT_device_address_binding_report, Bool32, StructureType

Constructors

PhysicalDeviceAddressBindingReportFeaturesEXT 

Fields

  • reportAddressBinding :: Bool

    reportAddressBinding indicates whether this implementation supports reporting the binding of GPU virtual address ranges to Vulkan objects.

Instances

Instances details
Storable PhysicalDeviceAddressBindingReportFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Show PhysicalDeviceAddressBindingReportFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Eq PhysicalDeviceAddressBindingReportFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

FromCStruct PhysicalDeviceAddressBindingReportFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

ToCStruct PhysicalDeviceAddressBindingReportFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Zero PhysicalDeviceAddressBindingReportFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

data DeviceAddressBindingCallbackDataEXT Source #

VkDeviceAddressBindingCallbackDataEXT - Structure specifying parameters returned to the callback

Description

If the reportAddressBinding feature is enabled and the implementation binds or unbinds a region of virtual address space associated with a Vulkan object, the implementation must submit a debug message with the following properties:

These debug messages must be emitted both for GPU virtual address space regions that are explicitly bound to a Vulkan object via the vkBind*Memory/vkBind*Memory2 functions, and for those that are implicitly generated via memory allocation or importing external memory.

An implementation may report binding events associated with a Vulkan object via DebugUtilsMessengerEXT prior to the object becoming visible to an application via other Vulkan commands. For example, object creation functions may report binding events that occur during an objects creation. In such cases, DeviceAddressBindingCallbackDataEXT::flags must include DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT.

Object handles reported in this manner are not valid object handles, and must not be used as an input parameter to any Vulkan command.

Any valid object handle returned by an object creation function must match the handle specified via any previously reported binding events associated with the object’s creation.

Valid Usage (Implicit)

See Also

VK_EXT_device_address_binding_report, DeviceAddress, DeviceAddressBindingFlagsEXT, DeviceAddressBindingTypeEXT, DeviceSize, StructureType

Constructors

DeviceAddressBindingCallbackDataEXT 

Fields

Instances

Instances details
Storable DeviceAddressBindingCallbackDataEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Show DeviceAddressBindingCallbackDataEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Eq DeviceAddressBindingCallbackDataEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

FromCStruct DeviceAddressBindingCallbackDataEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

ToCStruct DeviceAddressBindingCallbackDataEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Zero DeviceAddressBindingCallbackDataEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

newtype DeviceAddressBindingFlagBitsEXT Source #

VkDeviceAddressBindingFlagBitsEXT - Bitmask specifying the additional information about a binding event

See Also

VK_EXT_device_address_binding_report, DeviceAddressBindingFlagsEXT

Bundled Patterns

pattern DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT :: DeviceAddressBindingFlagBitsEXT

DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT specifies that DeviceAddressBindingCallbackDataEXT describes a Vulkan object that has not been made visible to the application via a Vulkan command.

Instances

Instances details
Bits DeviceAddressBindingFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Methods

(.&.) :: DeviceAddressBindingFlagBitsEXT -> DeviceAddressBindingFlagBitsEXT -> DeviceAddressBindingFlagBitsEXT #

(.|.) :: DeviceAddressBindingFlagBitsEXT -> DeviceAddressBindingFlagBitsEXT -> DeviceAddressBindingFlagBitsEXT #

xor :: DeviceAddressBindingFlagBitsEXT -> DeviceAddressBindingFlagBitsEXT -> DeviceAddressBindingFlagBitsEXT #

complement :: DeviceAddressBindingFlagBitsEXT -> DeviceAddressBindingFlagBitsEXT #

shift :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

rotate :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

zeroBits :: DeviceAddressBindingFlagBitsEXT #

bit :: Int -> DeviceAddressBindingFlagBitsEXT #

setBit :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

clearBit :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

complementBit :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

testBit :: DeviceAddressBindingFlagBitsEXT -> Int -> Bool #

bitSizeMaybe :: DeviceAddressBindingFlagBitsEXT -> Maybe Int #

bitSize :: DeviceAddressBindingFlagBitsEXT -> Int #

isSigned :: DeviceAddressBindingFlagBitsEXT -> Bool #

shiftL :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

unsafeShiftL :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

shiftR :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

unsafeShiftR :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

rotateL :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

rotateR :: DeviceAddressBindingFlagBitsEXT -> Int -> DeviceAddressBindingFlagBitsEXT #

popCount :: DeviceAddressBindingFlagBitsEXT -> Int #

FiniteBits DeviceAddressBindingFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Storable DeviceAddressBindingFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Read DeviceAddressBindingFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Show DeviceAddressBindingFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Eq DeviceAddressBindingFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Ord DeviceAddressBindingFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Zero DeviceAddressBindingFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

newtype DeviceAddressBindingTypeEXT Source #

VkDeviceAddressBindingTypeEXT - Enum describing a change in device address bindings

See Also

VK_EXT_device_address_binding_report, DeviceAddressBindingCallbackDataEXT

Bundled Patterns

pattern DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT :: DeviceAddressBindingTypeEXT

DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT specifies that a new GPU-accessible virtual address range has been bound.

pattern DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT :: DeviceAddressBindingTypeEXT

DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT specifies that a GPU-accessible virtual address range has been unbound.

Instances

Instances details
Storable DeviceAddressBindingTypeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Read DeviceAddressBindingTypeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Show DeviceAddressBindingTypeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Eq DeviceAddressBindingTypeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Ord DeviceAddressBindingTypeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

Zero DeviceAddressBindingTypeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_device_address_binding_report

type EXT_DEVICE_ADDRESS_BINDING_REPORT_EXTENSION_NAME = "VK_EXT_device_address_binding_report" Source #

newtype DebugUtilsMessageTypeFlagBitsEXT Source #

VkDebugUtilsMessageTypeFlagBitsEXT - Bitmask specifying which types of events cause a debug messenger callback

See Also

VK_EXT_debug_utils, DebugUtilsMessageTypeFlagsEXT

Bundled Patterns

pattern DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT :: DebugUtilsMessageTypeFlagBitsEXT

DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT specifies that some general event has occurred. This is typically a non-specification, non-performance event.

pattern DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT :: DebugUtilsMessageTypeFlagBitsEXT

DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT specifies that something has occurred during validation against the Vulkan specification that may indicate invalid behavior.

pattern DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT :: DebugUtilsMessageTypeFlagBitsEXT

DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT specifies a potentially non-optimal use of Vulkan, e.g. using cmdClearColorImage when setting AttachmentDescription::loadOp to ATTACHMENT_LOAD_OP_CLEAR would have worked.

pattern DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT :: DebugUtilsMessageTypeFlagBitsEXT

DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT specifies that the implementation has modified the set of GPU-visible virtual addresses associated with a Vulkan object.

Instances

Instances details
Bits DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Methods

(.&.) :: DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT #

(.|.) :: DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT #

xor :: DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT #

complement :: DebugUtilsMessageTypeFlagBitsEXT -> DebugUtilsMessageTypeFlagBitsEXT #

shift :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

rotate :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

zeroBits :: DebugUtilsMessageTypeFlagBitsEXT #

bit :: Int -> DebugUtilsMessageTypeFlagBitsEXT #

setBit :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

clearBit :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

complementBit :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

testBit :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> Bool #

bitSizeMaybe :: DebugUtilsMessageTypeFlagBitsEXT -> Maybe Int #

bitSize :: DebugUtilsMessageTypeFlagBitsEXT -> Int #

isSigned :: DebugUtilsMessageTypeFlagBitsEXT -> Bool #

shiftL :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

unsafeShiftL :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

shiftR :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

unsafeShiftR :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

rotateL :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

rotateR :: DebugUtilsMessageTypeFlagBitsEXT -> Int -> DebugUtilsMessageTypeFlagBitsEXT #

popCount :: DebugUtilsMessageTypeFlagBitsEXT -> Int #

FiniteBits DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Storable DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Read DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Show DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Eq DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Ord DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils

Zero DebugUtilsMessageTypeFlagBitsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_debug_utils