summaryrefslogtreecommitdiff
path: root/chapters/commonvalidity/bind_buffer_common.adoc
blob: 604889b951008448646d13010766547b99c6ed31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright 2020-2023 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

// Common Valid Usage
// Common to binding any memory to a buffer
  * [[VUID-{refpage}-buffer-07459]]
    pname:buffer must: not have been bound to a memory object
  * [[VUID-{refpage}-buffer-01030]]
    pname:buffer must: not have been created with any sparse memory binding
    flags
  * [[VUID-{refpage}-memoryOffset-01031]]
    pname:memoryOffset must: be less than the size of pname:memory
  * [[VUID-{refpage}-memory-01035]]
    pname:memory must: have been allocated using one of the memory types
    allowed in the pname:memoryTypeBits member of the
    sname:VkMemoryRequirements structure returned from a call to
    fname:vkGetBufferMemoryRequirements with pname:buffer
  * [[VUID-{refpage}-memoryOffset-01036]]
    pname:memoryOffset must: be an integer multiple of the pname:alignment
    member of the sname:VkMemoryRequirements structure returned from a call
    to fname:vkGetBufferMemoryRequirements with pname:buffer
  * [[VUID-{refpage}-size-01037]]
    The pname:size member of the sname:VkMemoryRequirements structure
    returned from a call to fname:vkGetBufferMemoryRequirements with
    pname:buffer must: be less than or equal to the size of pname:memory
    minus pname:memoryOffset
ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
  * [[VUID-{refpage}-buffer-01444]]
    If pname:buffer requires a dedicated allocation (as reported by
    flink:vkGetBufferMemoryRequirements2 in
    slink:VkMemoryDedicatedRequirements::pname:requiresDedicatedAllocation
    for pname:buffer), pname:memory must: have been allocated with
    slink:VkMemoryDedicatedAllocateInfo::pname:buffer equal to pname:buffer
  * [[VUID-{refpage}-memory-01508]]
    If the sname:VkMemoryAllocateInfo provided when pname:memory was
    allocated included a slink:VkMemoryDedicatedAllocateInfo structure in
    its pname:pNext chain, and
    slink:VkMemoryDedicatedAllocateInfo::pname:buffer was not
    dlink:VK_NULL_HANDLE, then pname:buffer must: equal
    slink:VkMemoryDedicatedAllocateInfo::pname:buffer, and
    pname:memoryOffset must: be zero
endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
ifdef::VK_VERSION_1_1[]
  * [[VUID-{refpage}-None-01898]]
    If pname:buffer was created with the
    ename:VK_BUFFER_CREATE_PROTECTED_BIT bit set, the buffer must: be bound
    to a memory object allocated with a memory type that reports
    ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
  * [[VUID-{refpage}-None-01899]]
    If pname:buffer was created with the
    ename:VK_BUFFER_CREATE_PROTECTED_BIT bit not set, the buffer must: not
    be bound to a memory object allocated with a memory type that reports
    ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
endif::VK_VERSION_1_1[]
ifdef::VK_NV_dedicated_allocation[]
  * [[VUID-{refpage}-buffer-01038]]
    If pname:buffer was created with
    slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
    equal to ename:VK_TRUE, pname:memory must: have been allocated with
    slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:buffer equal to a
    buffer handle created with identical creation parameters to pname:buffer
    and pname:memoryOffset must: be zero
ifndef::VKSC_VERSION_1_0[]
  * [[VUID-{refpage}-apiVersion-07920]]
    If
ifdef::VK_KHR_dedicated_allocation[]
    the apiext:VK_KHR_dedicated_allocation extension is not enabled,
endif::VK_KHR_dedicated_allocation[]
ifdef::VK_VERSION_1_1[]
    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
    1.1,
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[and]
    pname:buffer was not created with
    slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
    equal to ename:VK_TRUE, pname:memory must: not have been allocated
    dedicated for a specific buffer or image
endif::VKSC_VERSION_1_0[]
endif::VK_NV_dedicated_allocation[]
ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
  * [[VUID-{refpage}-memory-02726]]
    If the value of slink:VkExportMemoryAllocateInfo::pname:handleTypes used
    to allocate pname:memory is not `0`, it must: include at least one of
    the handles set in
    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
    pname:buffer was created
  * [[VUID-{refpage}-memory-02985]]
    If pname:memory was allocated by a memory import operation,
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
    that is not slink:VkImportAndroidHardwareBufferInfoANDROID with a
    non-`NULL` pname:buffer value,
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
    the external handle type of the imported memory must: also have been set
    in slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
    pname:buffer was created
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
  * [[VUID-{refpage}-memory-02986]]
    If pname:memory was allocated with the
    slink:VkImportAndroidHardwareBufferInfoANDROID memory import operation
    with a non-`NULL` pname:buffer value,
    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
    must: also have been set in
    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
    pname:buffer was created
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_VERSION_1_1,VK_KHR_external_memory[]
ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
  * [[VUID-{refpage}-bufferDeviceAddress-03339]]
    If the
    slink:VkPhysicalDeviceBufferDeviceAddressFeatures::pname:bufferDeviceAddress
    feature is enabled and pname:buffer was created with the
    ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT bit set, pname:memory
    must: have been allocated with the
    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set
  * [[VUID-{refpage}-bufferDeviceAddressCaptureReplay-09200]]
    If the
    slink:VkPhysicalDeviceBufferDeviceAddressFeatures::pname:bufferDeviceAddressCaptureReplay
    feature is enabled and pname:buffer was created with the
    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set,
    pname:memory must: have been allocated with the
    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set
endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
ifdef::VK_FUCHSIA_buffer_collection[]
  * [[VUID-{refpage}-buffer-06408]]
    If pname:buffer was created with
    slink:VkBufferCollectionBufferCreateInfoFUCHSIA chained to
    slink:VkBufferCreateInfo::pname:pNext, pname:memory must: be allocated
    with a slink:VkImportMemoryBufferCollectionFUCHSIA chained to
    slink:VkMemoryAllocateInfo::pname:pNext
endif::VK_FUCHSIA_buffer_collection[]
ifdef::VK_EXT_descriptor_buffer[]
  * [[VUID-{refpage}-descriptorBufferCaptureReplay-08112]]
    If the pname:buffer was created with the
    ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set,
    pname:memory must: have been allocated with the
    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set
  * [[VUID-{refpage}-buffer-09201]]
    If the pname:buffer was created with the
    ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set,
    pname:memory must: have been allocated with the
    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set
endif::VK_EXT_descriptor_buffer[]
// Common Valid Usage