Skip to content

Commit d3ca472

Browse files
chrisforbesAndroid (Google) Code Review
authored andcommitted
Merge changes from topic "vulkan-1.4" into main
* changes: Update libvulkan linker map for 1.4 Add feature xml for Vulkan version 1.4 Add support for Vulkan 1.4 core entrypoints to nulldrv Allow vkjson to report on 1.4 instances Add support for vulkan api level 1.4 in loader Regenerate vulkan-loader for 1.4
2 parents 3a57dcd + 4d74653 commit d3ca472

12 files changed

Lines changed: 442 additions & 37 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- Copyright 2024 The Android Open Source Project
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
-->
16+
17+
<!-- This is the standard feature indicating that the device has a Vulkan
18+
driver that supports API version 1.4 (0x00404000) -->
19+
<permissions>
20+
<feature name="android.hardware.vulkan.version" version="4210688" />
21+
</permissions>

vulkan/libvulkan/api.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
#include "driver.h"
4646
#include "layers_extensions.h"
4747

48+
#include <com_android_graphics_libvulkan_flags.h>
49+
50+
using namespace com::android::graphics::libvulkan;
4851

4952
namespace vulkan {
5053
namespace api {
@@ -1473,7 +1476,7 @@ VkResult EnumerateInstanceVersion(uint32_t* pApiVersion) {
14731476
if (!EnsureInitialized())
14741477
return VK_ERROR_OUT_OF_HOST_MEMORY;
14751478

1476-
*pApiVersion = VK_API_VERSION_1_3;
1479+
*pApiVersion = flags::vulkan_1_4_instance_api() ? VK_API_VERSION_1_4 : VK_API_VERSION_1_3;
14771480
return VK_SUCCESS;
14781481
}
14791482

vulkan/libvulkan/api_gen.cpp

Lines changed: 228 additions & 0 deletions
Large diffs are not rendered by default.

vulkan/libvulkan/api_gen.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ struct DeviceDispatchTable {
139139
PFN_vkCreateRenderPass CreateRenderPass;
140140
PFN_vkDestroyRenderPass DestroyRenderPass;
141141
PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
142+
PFN_vkGetRenderingAreaGranularity GetRenderingAreaGranularity;
142143
PFN_vkCreateCommandPool CreateCommandPool;
143144
PFN_vkDestroyCommandPool DestroyCommandPool;
144145
PFN_vkResetCommandPool ResetCommandPool;
@@ -196,6 +197,7 @@ struct DeviceDispatchTable {
196197
PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR;
197198
PFN_vkAcquireNextImageKHR AcquireNextImageKHR;
198199
PFN_vkQueuePresentKHR QueuePresentKHR;
200+
PFN_vkCmdPushDescriptorSet CmdPushDescriptorSet;
199201
PFN_vkTrimCommandPool TrimCommandPool;
200202
PFN_vkGetDeviceGroupPeerMemoryFeatures GetDeviceGroupPeerMemoryFeatures;
201203
PFN_vkBindBufferMemory2 BindBufferMemory2;
@@ -208,6 +210,7 @@ struct DeviceDispatchTable {
208210
PFN_vkCreateDescriptorUpdateTemplate CreateDescriptorUpdateTemplate;
209211
PFN_vkDestroyDescriptorUpdateTemplate DestroyDescriptorUpdateTemplate;
210212
PFN_vkUpdateDescriptorSetWithTemplate UpdateDescriptorSetWithTemplate;
213+
PFN_vkCmdPushDescriptorSetWithTemplate CmdPushDescriptorSetWithTemplate;
211214
PFN_vkGetBufferMemoryRequirements2 GetBufferMemoryRequirements2;
212215
PFN_vkGetImageMemoryRequirements2 GetImageMemoryRequirements2;
213216
PFN_vkGetImageSparseMemoryRequirements2 GetImageSparseMemoryRequirements2;
@@ -232,11 +235,13 @@ struct DeviceDispatchTable {
232235
PFN_vkGetBufferOpaqueCaptureAddress GetBufferOpaqueCaptureAddress;
233236
PFN_vkGetBufferDeviceAddress GetBufferDeviceAddress;
234237
PFN_vkGetDeviceMemoryOpaqueCaptureAddress GetDeviceMemoryOpaqueCaptureAddress;
238+
PFN_vkCmdSetLineStipple CmdSetLineStipple;
235239
PFN_vkCmdSetCullMode CmdSetCullMode;
236240
PFN_vkCmdSetFrontFace CmdSetFrontFace;
237241
PFN_vkCmdSetPrimitiveTopology CmdSetPrimitiveTopology;
238242
PFN_vkCmdSetViewportWithCount CmdSetViewportWithCount;
239243
PFN_vkCmdSetScissorWithCount CmdSetScissorWithCount;
244+
PFN_vkCmdBindIndexBuffer2 CmdBindIndexBuffer2;
240245
PFN_vkCmdBindVertexBuffers2 CmdBindVertexBuffers2;
241246
PFN_vkCmdSetDepthTestEnable CmdSetDepthTestEnable;
242247
PFN_vkCmdSetDepthWriteEnable CmdSetDepthWriteEnable;
@@ -263,8 +268,22 @@ struct DeviceDispatchTable {
263268
PFN_vkCmdPipelineBarrier2 CmdPipelineBarrier2;
264269
PFN_vkQueueSubmit2 QueueSubmit2;
265270
PFN_vkCmdWriteTimestamp2 CmdWriteTimestamp2;
271+
PFN_vkCopyMemoryToImage CopyMemoryToImage;
272+
PFN_vkCopyImageToMemory CopyImageToMemory;
273+
PFN_vkCopyImageToImage CopyImageToImage;
274+
PFN_vkTransitionImageLayout TransitionImageLayout;
266275
PFN_vkCmdBeginRendering CmdBeginRendering;
267276
PFN_vkCmdEndRendering CmdEndRendering;
277+
PFN_vkGetImageSubresourceLayout2 GetImageSubresourceLayout2;
278+
PFN_vkGetDeviceImageSubresourceLayout GetDeviceImageSubresourceLayout;
279+
PFN_vkMapMemory2 MapMemory2;
280+
PFN_vkUnmapMemory2 UnmapMemory2;
281+
PFN_vkCmdBindDescriptorSets2 CmdBindDescriptorSets2;
282+
PFN_vkCmdPushConstants2 CmdPushConstants2;
283+
PFN_vkCmdPushDescriptorSet2 CmdPushDescriptorSet2;
284+
PFN_vkCmdPushDescriptorSetWithTemplate2 CmdPushDescriptorSetWithTemplate2;
285+
PFN_vkCmdSetRenderingAttachmentLocations CmdSetRenderingAttachmentLocations;
286+
PFN_vkCmdSetRenderingInputAttachmentIndices CmdSetRenderingInputAttachmentIndices;
268287
// clang-format on
269288
};
270289

vulkan/libvulkan/driver.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ CreateInfoWrapper::CreateInfoWrapper(const VkInstanceCreateInfo& create_info,
398398
const VkAllocationCallbacks& allocator)
399399
: is_instance_(true),
400400
allocator_(allocator),
401-
loader_api_version_(VK_API_VERSION_1_3),
401+
loader_api_version_(flags::vulkan_1_4_instance_api() ? VK_API_VERSION_1_4 : VK_API_VERSION_1_3),
402402
icd_api_version_(icd_api_version),
403403
physical_dev_(VK_NULL_HANDLE),
404404
instance_info_(create_info),
@@ -410,7 +410,7 @@ CreateInfoWrapper::CreateInfoWrapper(VkPhysicalDevice physical_dev,
410410
const VkAllocationCallbacks& allocator)
411411
: is_instance_(false),
412412
allocator_(allocator),
413-
loader_api_version_(VK_API_VERSION_1_3),
413+
loader_api_version_(flags::vulkan_1_4_instance_api() ? VK_API_VERSION_1_4 : VK_API_VERSION_1_3),
414414
icd_api_version_(icd_api_version),
415415
physical_dev_(physical_dev),
416416
dev_info_(create_info),
@@ -552,6 +552,10 @@ VkResult CreateInfoWrapper::SanitizeExtensions() {
552552
is_instance_ ? loader_api_version_
553553
: std::min(icd_api_version_, loader_api_version_);
554554
switch (api_version) {
555+
case VK_API_VERSION_1_4:
556+
hook_extensions_.set(ProcHook::EXTENSION_CORE_1_4);
557+
hal_extensions_.set(ProcHook::EXTENSION_CORE_1_4);
558+
[[clang::fallthrough]];
555559
case VK_API_VERSION_1_3:
556560
hook_extensions_.set(ProcHook::EXTENSION_CORE_1_3);
557561
hal_extensions_.set(ProcHook::EXTENSION_CORE_1_3);
@@ -701,6 +705,7 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
701705
case ProcHook::EXTENSION_CORE_1_1:
702706
case ProcHook::EXTENSION_CORE_1_2:
703707
case ProcHook::EXTENSION_CORE_1_3:
708+
case ProcHook::EXTENSION_CORE_1_4:
704709
case ProcHook::EXTENSION_COUNT:
705710
// Device and meta extensions. If we ever get here it's a bug in
706711
// our code. But enumerating them lets us avoid having a default
@@ -766,6 +771,7 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
766771
case ProcHook::EXTENSION_CORE_1_1:
767772
case ProcHook::EXTENSION_CORE_1_2:
768773
case ProcHook::EXTENSION_CORE_1_3:
774+
case ProcHook::EXTENSION_CORE_1_4:
769775
case ProcHook::EXTENSION_COUNT:
770776
// Instance and meta extensions. If we ever get here it's a bug
771777
// in our code. But enumerating them lets us avoid having a

vulkan/libvulkan/driver_gen.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ struct ProcHook {
6868
EXTENSION_CORE_1_1,
6969
EXTENSION_CORE_1_2,
7070
EXTENSION_CORE_1_3,
71+
EXTENSION_CORE_1_4,
7172
EXTENSION_COUNT,
7273
EXTENSION_UNKNOWN,
7374
};

vulkan/libvulkan/libvulkan.map.txt

Lines changed: 52 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,34 @@ LIBVULKAN {
66
vkAllocateDescriptorSets;
77
vkAllocateMemory;
88
vkBeginCommandBuffer;
9-
vkBindBufferMemory;
109
vkBindBufferMemory2; # introduced=28
11-
vkBindImageMemory;
10+
vkBindBufferMemory;
1211
vkBindImageMemory2; # introduced=28
12+
vkBindImageMemory;
1313
vkCmdBeginQuery;
14-
vkCmdBeginRendering; # introduced=33
15-
vkCmdBeginRenderPass;
1614
vkCmdBeginRenderPass2; # introduced=31
15+
vkCmdBeginRenderPass;
16+
vkCmdBeginRendering; # introduced=33
17+
vkCmdBindDescriptorSets2; #introduced=36
1718
vkCmdBindDescriptorSets;
19+
vkCmdBindIndexBuffer2; #introduced=36
1820
vkCmdBindIndexBuffer;
1921
vkCmdBindPipeline;
20-
vkCmdBindVertexBuffers;
2122
vkCmdBindVertexBuffers2; #introduced=33
22-
vkCmdBlitImage;
23+
vkCmdBindVertexBuffers;
2324
vkCmdBlitImage2; #introduced=33
25+
vkCmdBlitImage;
2426
vkCmdClearAttachments;
2527
vkCmdClearColorImage;
2628
vkCmdClearDepthStencilImage;
27-
vkCmdCopyBuffer;
2829
vkCmdCopyBuffer2; #introduced=33
29-
vkCmdCopyBufferToImage;
30+
vkCmdCopyBuffer;
3031
vkCmdCopyBufferToImage2; #introduced=33
31-
vkCmdCopyImage;
32+
vkCmdCopyBufferToImage;
3233
vkCmdCopyImage2; #introduced=33
33-
vkCmdCopyImageToBuffer;
34+
vkCmdCopyImage;
3435
vkCmdCopyImageToBuffer2; #introduced=33
36+
vkCmdCopyImageToBuffer;
3537
vkCmdCopyQueryPoolResults;
3638
vkCmdDispatch;
3739
vkCmdDispatchBase; # introduced=28
@@ -43,21 +45,26 @@ LIBVULKAN {
4345
vkCmdDrawIndirect;
4446
vkCmdDrawIndirectCount; # introduced=31
4547
vkCmdEndQuery;
46-
vkCmdEndRendering; #introduced=33
47-
vkCmdEndRenderPass;
4848
vkCmdEndRenderPass2; # introduced=31
49+
vkCmdEndRenderPass;
50+
vkCmdEndRendering; #introduced=33
4951
vkCmdExecuteCommands;
5052
vkCmdFillBuffer;
51-
vkCmdNextSubpass;
5253
vkCmdNextSubpass2; # introduced=31
53-
vkCmdPipelineBarrier;
54+
vkCmdNextSubpass;
5455
vkCmdPipelineBarrier2; #introduced=33
56+
vkCmdPipelineBarrier;
57+
vkCmdPushConstants2; #introduced=36
5558
vkCmdPushConstants;
56-
vkCmdResetEvent;
59+
vkCmdPushDescriptorSet2; #introduced=36
60+
vkCmdPushDescriptorSet; #introduced=36
61+
vkCmdPushDescriptorSetWithTemplate2; #introduced=36
62+
vkCmdPushDescriptorSetWithTemplate; #introduced=36
5763
vkCmdResetEvent2; #introduced=33
64+
vkCmdResetEvent;
5865
vkCmdResetQueryPool;
59-
vkCmdResolveImage;
6066
vkCmdResolveImage2; #introduced=33
67+
vkCmdResolveImage;
6168
vkCmdSetBlendConstants;
6269
vkCmdSetCullMode; #introduced=33
6370
vkCmdSetDepthBias;
@@ -68,13 +75,16 @@ LIBVULKAN {
6875
vkCmdSetDepthTestEnable; #introduced=33
6976
vkCmdSetDepthWriteEnable; #introduced=33
7077
vkCmdSetDeviceMask; # introduced=28
71-
vkCmdSetEvent;
7278
vkCmdSetEvent2; #introduced=33
79+
vkCmdSetEvent;
7380
vkCmdSetFrontFace; #introduced=33
81+
vkCmdSetLineStipple; #introduced=36
7482
vkCmdSetLineWidth;
7583
vkCmdSetPrimitiveRestartEnable; #introduced=33
7684
vkCmdSetPrimitiveTopology; #introduced=33
7785
vkCmdSetRasterizerDiscardEnable; #introduced=33
86+
vkCmdSetRenderingAttachmentLocations; #introduced=36
87+
vkCmdSetRenderingInputAttachmentIndices; #introduced=36
7888
vkCmdSetScissor;
7989
vkCmdSetScissorWithCount; #introduced=33
8090
vkCmdSetStencilCompareMask;
@@ -85,10 +95,12 @@ LIBVULKAN {
8595
vkCmdSetViewport;
8696
vkCmdSetViewportWithCount; #introduced=33
8797
vkCmdUpdateBuffer;
88-
vkCmdWaitEvents;
8998
vkCmdWaitEvents2; #introduced=33
90-
vkCmdWriteTimestamp;
99+
vkCmdWaitEvents;
91100
vkCmdWriteTimestamp2; #introduced=33
101+
vkCmdWriteTimestamp;
102+
vkCopyImageToMemory; #introduced=36
103+
vkCopyMemoryToImage; #introduced=36
92104
vkCreateAndroidSurfaceKHR;
93105
vkCreateBuffer;
94106
vkCreateBufferView;
@@ -109,8 +121,8 @@ LIBVULKAN {
109121
vkCreatePipelineLayout;
110122
vkCreatePrivateDataSlot; #introduced=33
111123
vkCreateQueryPool;
112-
vkCreateRenderPass;
113124
vkCreateRenderPass2; # introduced=31
125+
vkCreateRenderPass;
114126
vkCreateSampler;
115127
vkCreateSamplerYcbcrConversion; # introduced=28
116128
vkCreateSemaphore;
@@ -156,8 +168,8 @@ LIBVULKAN {
156168
vkFreeMemory;
157169
vkGetAndroidHardwareBufferPropertiesANDROID; # introduced=28
158170
vkGetBufferDeviceAddress; # introduced=31
159-
vkGetBufferMemoryRequirements;
160171
vkGetBufferMemoryRequirements2; # introduced=28
172+
vkGetBufferMemoryRequirements;
161173
vkGetBufferOpaqueCaptureAddress; # introduced=31
162174
vkGetDescriptorSetLayoutSupport; # introduced=28
163175
vkGetDeviceBufferMemoryRequirements; #introduced=33
@@ -166,39 +178,41 @@ LIBVULKAN {
166178
vkGetDeviceGroupSurfacePresentModesKHR; # introduced=28
167179
vkGetDeviceImageMemoryRequirements; #introduced=33
168180
vkGetDeviceImageSparseMemoryRequirements; #introduced=33
181+
vkGetDeviceImageSubresourceLayout; #introduced=36
169182
vkGetDeviceMemoryCommitment;
170183
vkGetDeviceMemoryOpaqueCaptureAddress; # introduced=31
171184
vkGetDeviceProcAddr;
172-
vkGetDeviceQueue;
173185
vkGetDeviceQueue2; # introduced=28
186+
vkGetDeviceQueue;
174187
vkGetEventStatus;
175188
vkGetFenceStatus;
176-
vkGetImageMemoryRequirements;
177189
vkGetImageMemoryRequirements2; # introduced=28
178-
vkGetImageSparseMemoryRequirements;
190+
vkGetImageMemoryRequirements;
179191
vkGetImageSparseMemoryRequirements2; # introduced=28
180-
vkGetImageSubresourceLayout;
192+
vkGetImageSparseMemoryRequirements;
193+
vkGetImageSubresourceLayout2; #introduced=36
181194
vkGetImageSubresourceLayout2EXT; # introduced=UpsideDownCake
195+
vkGetImageSubresourceLayout;
182196
vkGetInstanceProcAddr;
183197
vkGetMemoryAndroidHardwareBufferANDROID; # introduced=28
184198
vkGetPhysicalDeviceExternalBufferProperties; # introduced=28
185199
vkGetPhysicalDeviceExternalFenceProperties; # introduced=28
186200
vkGetPhysicalDeviceExternalSemaphoreProperties; # introduced=28
187-
vkGetPhysicalDeviceFeatures;
188201
vkGetPhysicalDeviceFeatures2; # introduced=28
189-
vkGetPhysicalDeviceFormatProperties;
202+
vkGetPhysicalDeviceFeatures;
190203
vkGetPhysicalDeviceFormatProperties2; # introduced=28
191-
vkGetPhysicalDeviceImageFormatProperties;
204+
vkGetPhysicalDeviceFormatProperties;
192205
vkGetPhysicalDeviceImageFormatProperties2; # introduced=28
193-
vkGetPhysicalDeviceMemoryProperties;
206+
vkGetPhysicalDeviceImageFormatProperties;
194207
vkGetPhysicalDeviceMemoryProperties2; # introduced=28
208+
vkGetPhysicalDeviceMemoryProperties;
195209
vkGetPhysicalDevicePresentRectanglesKHR; # introduced=28
196-
vkGetPhysicalDeviceProperties;
197210
vkGetPhysicalDeviceProperties2; # introduced=28
198-
vkGetPhysicalDeviceQueueFamilyProperties;
211+
vkGetPhysicalDeviceProperties;
199212
vkGetPhysicalDeviceQueueFamilyProperties2; # introduced=28
200-
vkGetPhysicalDeviceSparseImageFormatProperties;
213+
vkGetPhysicalDeviceQueueFamilyProperties;
201214
vkGetPhysicalDeviceSparseImageFormatProperties2; # introduced=28
215+
vkGetPhysicalDeviceSparseImageFormatProperties;
202216
vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
203217
vkGetPhysicalDeviceSurfaceFormatsKHR;
204218
vkGetPhysicalDeviceSurfacePresentModesKHR;
@@ -208,15 +222,17 @@ LIBVULKAN {
208222
vkGetPrivateData; #introduced=33
209223
vkGetQueryPoolResults;
210224
vkGetRenderAreaGranularity;
225+
vkGetRenderingAreaGranularity; #introduced=36
211226
vkGetSemaphoreCounterValue; # introduced=31
212227
vkGetSwapchainImagesKHR;
213228
vkInvalidateMappedMemoryRanges;
229+
vkMapMemory2; #introduced=36
214230
vkMapMemory;
215231
vkMergePipelineCaches;
216232
vkQueueBindSparse;
217233
vkQueuePresentKHR;
218-
vkQueueSubmit;
219234
vkQueueSubmit2; #introduced=33
235+
vkQueueSubmit;
220236
vkQueueWaitIdle;
221237
vkResetCommandBuffer;
222238
vkResetCommandPool;
@@ -227,10 +243,12 @@ LIBVULKAN {
227243
vkSetEvent;
228244
vkSetPrivateData; # introduced=33
229245
vkSignalSemaphore; # introduced=31
246+
vkTransitionImageLayout; #introduced=36
230247
vkTrimCommandPool; # introduced=28
248+
vkUnmapMemory2; #introduced=36
231249
vkUnmapMemory;
232-
vkUpdateDescriptorSets;
233250
vkUpdateDescriptorSetWithTemplate; # introduced=28
251+
vkUpdateDescriptorSets;
234252
vkWaitForFences;
235253
vkWaitSemaphores; # introduced=31
236254
local:

0 commit comments

Comments
 (0)