blob: 0a158184a5acd6d6bd46009262b2e3b5f37e4f4d [file] [log] [blame]
Jesse Halld02edcb2015-09-08 07:44:48 -07001/*
2 * Copyright 2015 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
Jesse Hall04f4f472015-08-16 19:51:04 -070017#include <hardware/hwvulkan.h>
18
Jesse Hallf8faf0c2015-08-31 11:34:32 -070019#include <array>
Jesse Hall04f4f472015-08-16 19:51:04 -070020#include <algorithm>
Jesse Hallbde8ee32015-09-01 16:24:29 -070021#include <inttypes.h>
22#include <string.h>
Jesse Hall04f4f472015-08-16 19:51:04 -070023
Jesse Hall73ab0ac2015-08-25 15:09:15 +010024// #define LOG_NDEBUG 0
25#include <log/log.h>
Jesse Hall04f4f472015-08-16 19:51:04 -070026#include <utils/Errors.h>
27
28#include "null_driver.h"
29
30using namespace null_driver;
31
32struct VkPhysicalDevice_T {
33 hwvulkan_dispatch_t dispatch;
34};
35
36struct VkInstance_T {
37 hwvulkan_dispatch_t dispatch;
38 const VkAllocCallbacks* alloc;
39 VkPhysicalDevice_T physical_device;
40};
41
42struct VkQueue_T {
43 hwvulkan_dispatch_t dispatch;
44};
45
46struct VkCmdBuffer_T {
47 hwvulkan_dispatch_t dispatch;
48};
49
Jesse Hallf8faf0c2015-08-31 11:34:32 -070050namespace {
51// Handles for non-dispatchable objects are either pointers, or arbitrary
52// 64-bit non-zero values. We only use pointers when we need to keep state for
53// the object even in a null driver. For the rest, we form a handle as:
54// [63:63] = 1 to distinguish from pointer handles*
55// [62:56] = non-zero handle type enum value
56// [55: 0] = per-handle-type incrementing counter
57// * This works because virtual addresses with the high bit set are reserved
58// for kernel data in all ABIs we run on.
59//
60// We never reclaim handles on vkDestroy*. It's not even necessary for us to
61// have distinct handles for live objects, and practically speaking we won't
62// ever create 2^56 objects of the same type from a single VkDevice in a null
63// driver.
64//
65// Using a namespace here instead of 'enum class' since we want scoped
66// constants but also want implicit conversions to integral types.
67namespace HandleType {
Jesse Hallc7a6eb52015-08-31 12:52:03 -070068enum Enum {
69 kAttachmentView,
70 kBufferView,
71 kCmdPool,
72 kDescriptorPool,
73 kDescriptorSet,
74 kDescriptorSetLayout,
75 kDynamicColorBlendState,
76 kDynamicDepthStencilState,
77 kDynamicRasterState,
78 kDynamicViewportState,
79 kEvent,
80 kFence,
81 kFramebuffer,
82 kImageView,
83 kPipeline,
84 kPipelineCache,
85 kPipelineLayout,
86 kQueryPool,
87 kRenderPass,
88 kSampler,
89 kSemaphore,
90 kShader,
91 kShaderModule,
Jesse Hallf8faf0c2015-08-31 11:34:32 -070092
Jesse Hallc7a6eb52015-08-31 12:52:03 -070093 kNumTypes
94};
95} // namespace HandleType
Jesse Hallf8faf0c2015-08-31 11:34:32 -070096uint64_t AllocHandle(VkDevice device, HandleType::Enum type);
Jesse Hallbde8ee32015-09-01 16:24:29 -070097
98const VkDeviceSize kMaxDeviceMemory = VkDeviceSize(INTPTR_MAX) + 1;
99
Jesse Hallc7a6eb52015-08-31 12:52:03 -0700100} // anonymous namespace
Jesse Hallf8faf0c2015-08-31 11:34:32 -0700101
Jesse Hall04f4f472015-08-16 19:51:04 -0700102struct VkDevice_T {
103 hwvulkan_dispatch_t dispatch;
104 VkInstance_T* instance;
105 VkQueue_T queue;
Jesse Hallf8faf0c2015-08-31 11:34:32 -0700106 std::array<uint64_t, HandleType::kNumTypes> next_handle;
Jesse Hall04f4f472015-08-16 19:51:04 -0700107};
108
109// -----------------------------------------------------------------------------
110// Declare HAL_MODULE_INFO_SYM early so it can be referenced by nulldrv_device
111// later.
112
113namespace {
114int OpenDevice(const hw_module_t* module, const char* id, hw_device_t** device);
115hw_module_methods_t nulldrv_module_methods = {.open = OpenDevice};
116} // namespace
117
118#pragma clang diagnostic push
119#pragma clang diagnostic ignored "-Wmissing-variable-declarations"
120__attribute__((visibility("default"))) hwvulkan_module_t HAL_MODULE_INFO_SYM = {
121 .common =
122 {
123 .tag = HARDWARE_MODULE_TAG,
124 .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1,
125 .hal_api_version = HARDWARE_HAL_API_VERSION,
126 .id = HWVULKAN_HARDWARE_MODULE_ID,
127 .name = "Null Vulkan Driver",
128 .author = "The Android Open Source Project",
129 .methods = &nulldrv_module_methods,
130 },
131};
132#pragma clang diagnostic pop
133
134// -----------------------------------------------------------------------------
135
136namespace {
137
138VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
139 VkInstance* out_instance) {
140 VkInstance_T* instance =
141 static_cast<VkInstance_T*>(create_info->pAllocCb->pfnAlloc(
142 create_info->pAllocCb->pUserData, sizeof(VkInstance_T),
143 alignof(VkInstance_T), VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
144 if (!instance)
145 return VK_ERROR_OUT_OF_HOST_MEMORY;
146
147 instance->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
148 instance->alloc = create_info->pAllocCb;
149 instance->physical_device.dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
150
151 *out_instance = instance;
152 return VK_SUCCESS;
153}
154
155int CloseDevice(struct hw_device_t* /*device*/) {
156 // nothing to do - opening a device doesn't allocate any resources
157 return 0;
158}
159
160hwvulkan_device_t nulldrv_device = {
161 .common =
162 {
163 .tag = HARDWARE_DEVICE_TAG,
164 .version = HWVULKAN_DEVICE_API_VERSION_0_1,
165 .module = &HAL_MODULE_INFO_SYM.common,
166 .close = CloseDevice,
167 },
168 .GetGlobalExtensionProperties = GetGlobalExtensionProperties,
169 .CreateInstance = CreateInstance,
170 .GetInstanceProcAddr = GetInstanceProcAddr};
171
172int OpenDevice(const hw_module_t* /*module*/,
173 const char* id,
174 hw_device_t** device) {
175 if (strcmp(id, HWVULKAN_DEVICE_0) == 0) {
176 *device = &nulldrv_device.common;
177 return 0;
178 }
179 return -ENOENT;
180}
181
182VkInstance_T* GetInstanceFromPhysicalDevice(
183 VkPhysicalDevice_T* physical_device) {
184 return reinterpret_cast<VkInstance_T*>(
185 reinterpret_cast<uintptr_t>(physical_device) -
186 offsetof(VkInstance_T, physical_device));
187}
188
Jesse Hallf8faf0c2015-08-31 11:34:32 -0700189uint64_t AllocHandle(VkDevice device, HandleType::Enum type) {
190 const uint64_t kHandleMask = (UINT64_C(1) << 56) - 1;
191 ALOGE_IF(device->next_handle[type] == kHandleMask,
Jesse Hallbde8ee32015-09-01 16:24:29 -0700192 "non-dispatchable handles of type=%u are about to overflow", type);
Jesse Hallf8faf0c2015-08-31 11:34:32 -0700193 return (UINT64_C(1) << 63) | ((uint64_t(type) & 0x7) << 56) |
194 (device->next_handle[type]++ & kHandleMask);
195}
196
Jesse Hall04f4f472015-08-16 19:51:04 -0700197} // namespace
198
199namespace null_driver {
200
Jesse Hallf6578742015-08-29 17:06:12 +0100201template <typename HandleT>
202struct HandleTraits {};
203
204template <typename HandleT>
205typename HandleTraits<HandleT>::PointerType GetObjectFromHandle(
206 const HandleT& h) {
207 return reinterpret_cast<typename HandleTraits<HandleT>::PointerType>(
208 uintptr_t(h.handle));
209}
210
211template <typename T>
212typename T::HandleType GetHandleToObject(const T* obj) {
213 return typename T::HandleType(reinterpret_cast<uintptr_t>(obj));
214}
215
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100216// -----------------------------------------------------------------------------
217// Global
218
219VkResult GetGlobalExtensionProperties(const char*,
220 uint32_t* count,
221 VkExtensionProperties*) {
222 *count = 0;
223 return VK_SUCCESS;
224}
225
Jesse Hall04f4f472015-08-16 19:51:04 -0700226PFN_vkVoidFunction GetInstanceProcAddr(VkInstance, const char* name) {
227 PFN_vkVoidFunction proc = LookupInstanceProcAddr(name);
228 if (!proc && strcmp(name, "vkGetDeviceProcAddr") == 0)
229 proc = reinterpret_cast<PFN_vkVoidFunction>(GetDeviceProcAddr);
230 return proc;
231}
232
233PFN_vkVoidFunction GetDeviceProcAddr(VkDevice, const char* name) {
234 return LookupDeviceProcAddr(name);
235}
236
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100237// -----------------------------------------------------------------------------
238// Instance
239
Jesse Hall04f4f472015-08-16 19:51:04 -0700240VkResult DestroyInstance(VkInstance instance) {
241 instance->alloc->pfnFree(instance->alloc->pUserData, instance);
242 return VK_SUCCESS;
243}
244
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100245// -----------------------------------------------------------------------------
246// PhysicalDevice
247
Jesse Hall04f4f472015-08-16 19:51:04 -0700248VkResult EnumeratePhysicalDevices(VkInstance instance,
249 uint32_t* physical_device_count,
250 VkPhysicalDevice* physical_devices) {
251 if (physical_devices && *physical_device_count >= 1)
252 physical_devices[0] = &instance->physical_device;
253 *physical_device_count = 1;
254 return VK_SUCCESS;
255}
256
257VkResult GetPhysicalDeviceProperties(VkPhysicalDevice,
258 VkPhysicalDeviceProperties* properties) {
259 properties->apiVersion = VK_API_VERSION;
260 properties->driverVersion = VK_MAKE_VERSION(0, 0, 1);
261 properties->vendorId = 0xC0DE;
262 properties->deviceId = 0xCAFE;
263 properties->deviceType = VK_PHYSICAL_DEVICE_TYPE_OTHER;
264 strcpy(properties->deviceName, "Android Vulkan Null Driver");
265 memset(properties->pipelineCacheUUID, 0,
266 sizeof(properties->pipelineCacheUUID));
267 return VK_SUCCESS;
268}
269
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100270VkResult GetPhysicalDeviceMemoryProperties(
271 VkPhysicalDevice,
272 VkPhysicalDeviceMemoryProperties* properties) {
273 properties->memoryTypeCount = 1;
274 properties->memoryTypes[0].propertyFlags =
275 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
276 properties->memoryTypes[0].heapIndex = 0;
277 properties->memoryHeapCount = 1;
Jesse Hallbde8ee32015-09-01 16:24:29 -0700278 properties->memoryHeaps[0].size = kMaxDeviceMemory;
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100279 properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_HOST_LOCAL;
Jesse Hall04f4f472015-08-16 19:51:04 -0700280 return VK_SUCCESS;
281}
282
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100283// -----------------------------------------------------------------------------
284// Device
285
Jesse Hall04f4f472015-08-16 19:51:04 -0700286VkResult CreateDevice(VkPhysicalDevice physical_device,
287 const VkDeviceCreateInfo*,
288 VkDevice* out_device) {
289 VkInstance_T* instance = GetInstanceFromPhysicalDevice(physical_device);
290 VkDevice_T* device = static_cast<VkDevice_T*>(instance->alloc->pfnAlloc(
291 instance->alloc->pUserData, sizeof(VkDevice_T), alignof(VkDevice_T),
292 VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
293 if (!device)
294 return VK_ERROR_OUT_OF_HOST_MEMORY;
295
296 device->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
297 device->instance = instance;
298 device->queue.dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
Jesse Hallf8faf0c2015-08-31 11:34:32 -0700299 std::fill(device->next_handle.begin(), device->next_handle.end(),
300 UINT64_C(0));
Jesse Hall04f4f472015-08-16 19:51:04 -0700301
302 *out_device = device;
303 return VK_SUCCESS;
304}
305
306VkResult DestroyDevice(VkDevice device) {
307 if (!device)
308 return VK_SUCCESS;
309 const VkAllocCallbacks* alloc = device->instance->alloc;
310 alloc->pfnFree(alloc->pUserData, device);
311 return VK_SUCCESS;
312}
313
314VkResult GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) {
315 *queue = &device->queue;
316 return VK_SUCCESS;
317}
318
319// -----------------------------------------------------------------------------
Jesse Hallc7a6eb52015-08-31 12:52:03 -0700320// CmdBuffer
321
322VkResult CreateCommandBuffer(VkDevice device,
323 const VkCmdBufferCreateInfo*,
324 VkCmdBuffer* out_cmdbuf) {
325 const VkAllocCallbacks* alloc = device->instance->alloc;
326 VkCmdBuffer_T* cmdbuf = static_cast<VkCmdBuffer_T*>(alloc->pfnAlloc(
327 alloc->pUserData, sizeof(VkCmdBuffer_T), alignof(VkCmdBuffer_T),
328 VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
329 if (!cmdbuf)
330 return VK_ERROR_OUT_OF_HOST_MEMORY;
331 cmdbuf->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
332 *out_cmdbuf = cmdbuf;
333 return VK_SUCCESS;
334}
335
336VkResult DestroyCommandBuffer(VkDevice device, VkCmdBuffer cmdbuf) {
337 const VkAllocCallbacks* alloc = device->instance->alloc;
338 alloc->pfnFree(alloc->pUserData, cmdbuf);
339 return VK_SUCCESS;
340}
341
342// -----------------------------------------------------------------------------
Jesse Hall2077ce02015-08-29 18:10:59 +0100343// DeviceMemory
344
345struct DeviceMemory {
346 typedef VkDeviceMemory HandleType;
347 VkDeviceSize size;
348 alignas(16) uint8_t data[0];
349};
350template <>
351struct HandleTraits<VkDeviceMemory> {
352 typedef DeviceMemory* PointerType;
353};
354
355VkResult AllocMemory(VkDevice device,
356 const VkMemoryAllocInfo* alloc_info,
357 VkDeviceMemory* mem_handle) {
358 if (SIZE_MAX - sizeof(DeviceMemory) <= alloc_info->allocationSize)
359 return VK_ERROR_OUT_OF_HOST_MEMORY;
360
361 const VkAllocCallbacks* alloc = device->instance->alloc;
362 size_t size = sizeof(DeviceMemory) + size_t(alloc_info->allocationSize);
363 DeviceMemory* mem = static_cast<DeviceMemory*>(
364 alloc->pfnAlloc(alloc->pUserData, size, alignof(DeviceMemory),
365 VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
366 if (!mem)
367 return VK_ERROR_OUT_OF_HOST_MEMORY;
368 mem->size = size;
369 *mem_handle = GetHandleToObject(mem);
370 return VK_SUCCESS;
371}
372
373VkResult FreeMemory(VkDevice device, VkDeviceMemory mem_handle) {
374 const VkAllocCallbacks* alloc = device->instance->alloc;
375 DeviceMemory* mem = GetObjectFromHandle(mem_handle);
376 alloc->pfnFree(alloc->pUserData, mem);
377 return VK_SUCCESS;
378}
379
380VkResult MapMemory(VkDevice,
381 VkDeviceMemory mem_handle,
382 VkDeviceSize offset,
383 VkDeviceSize,
384 VkMemoryMapFlags,
385 void** out_ptr) {
386 DeviceMemory* mem = GetObjectFromHandle(mem_handle);
387 *out_ptr = &mem->data[0] + offset;
388 return VK_SUCCESS;
389}
390
391// -----------------------------------------------------------------------------
Jesse Hallf6578742015-08-29 17:06:12 +0100392// Buffer
393
394struct Buffer {
395 typedef VkBuffer HandleType;
396 VkDeviceSize size;
397};
398template <>
399struct HandleTraits<VkBuffer> {
400 typedef Buffer* PointerType;
401};
402
403VkResult CreateBuffer(VkDevice device,
404 const VkBufferCreateInfo* create_info,
405 VkBuffer* buffer_handle) {
Jesse Hallbde8ee32015-09-01 16:24:29 -0700406 ALOGW_IF(create_info->size > kMaxDeviceMemory,
407 "CreateBuffer: requested size 0x%" PRIx64
408 " exceeds max device memory size 0x%" PRIx64,
409 create_info->size, kMaxDeviceMemory);
410
Jesse Hallf6578742015-08-29 17:06:12 +0100411 const VkAllocCallbacks* alloc = device->instance->alloc;
412 Buffer* buffer = static_cast<Buffer*>(
413 alloc->pfnAlloc(alloc->pUserData, sizeof(Buffer), alignof(Buffer),
414 VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
415 if (!buffer)
416 return VK_ERROR_OUT_OF_HOST_MEMORY;
417 buffer->size = create_info->size;
418 *buffer_handle = GetHandleToObject(buffer);
419 return VK_SUCCESS;
420}
421
422VkResult GetBufferMemoryRequirements(VkDevice,
423 VkBuffer buffer_handle,
424 VkMemoryRequirements* requirements) {
425 Buffer* buffer = GetObjectFromHandle(buffer_handle);
426 requirements->size = buffer->size;
427 requirements->alignment = 16; // allow fast Neon/SSE memcpy
428 requirements->memoryTypeBits = 0x1;
429 return VK_SUCCESS;
430}
431
432VkResult DestroyBuffer(VkDevice device, VkBuffer buffer_handle) {
433 const VkAllocCallbacks* alloc = device->instance->alloc;
434 Buffer* buffer = GetObjectFromHandle(buffer_handle);
435 alloc->pfnFree(alloc->pUserData, buffer);
436 return VK_SUCCESS;
437}
438
439// -----------------------------------------------------------------------------
Jesse Hall85c05b62015-09-01 18:07:41 -0700440// Image
441
442struct Image {
443 typedef VkImage HandleType;
444 VkDeviceSize size;
445};
446template <>
447struct HandleTraits<VkImage> {
448 typedef Image* PointerType;
449};
450
451VkResult CreateImage(VkDevice device,
452 const VkImageCreateInfo* create_info,
453 VkImage* image_handle) {
454 if (create_info->imageType != VK_IMAGE_TYPE_2D ||
455 create_info->format != VK_FORMAT_R8G8B8A8_UNORM ||
456 create_info->mipLevels != 1) {
457 ALOGE("CreateImage: not yet implemented: type=%d format=%d mips=%u",
458 create_info->imageType, create_info->format,
459 create_info->mipLevels);
460 return VK_ERROR_UNAVAILABLE;
461 }
462
463 VkDeviceSize size =
464 VkDeviceSize(create_info->extent.width * create_info->extent.height) *
465 create_info->arraySize * create_info->samples * 4u;
466 ALOGW_IF(size > kMaxDeviceMemory,
467 "CreateImage: image size 0x%" PRIx64
468 " exceeds max device memory size 0x%" PRIx64,
469 size, kMaxDeviceMemory);
470
471 const VkAllocCallbacks* alloc = device->instance->alloc;
472 Image* image = static_cast<Image*>(
473 alloc->pfnAlloc(alloc->pUserData, sizeof(Image), alignof(Image),
474 VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
475 if (!image)
476 return VK_ERROR_OUT_OF_HOST_MEMORY;
477 image->size = size;
478 *image_handle = GetHandleToObject(image);
479 return VK_SUCCESS;
480}
481
482VkResult GetImageMemoryRequirements(VkDevice,
483 VkImage image_handle,
484 VkMemoryRequirements* requirements) {
485 Image* image = GetObjectFromHandle(image_handle);
486 requirements->size = image->size;
487 requirements->alignment = 16; // allow fast Neon/SSE memcpy
488 requirements->memoryTypeBits = 0x1;
489 return VK_SUCCESS;
490}
491
492VkResult DestroyImage(VkDevice device, VkImage image_handle) {
493 const VkAllocCallbacks* alloc = device->instance->alloc;
494 Image* image = GetObjectFromHandle(image_handle);
495 alloc->pfnFree(alloc->pUserData, image);
496 return VK_SUCCESS;
497}
498
499// -----------------------------------------------------------------------------
Jesse Hallf8faf0c2015-08-31 11:34:32 -0700500// No-op types
501
502VkResult CreateAttachmentView(VkDevice device,
503 const VkAttachmentViewCreateInfo*,
504 VkAttachmentView* view) {
505 *view = AllocHandle(device, HandleType::kAttachmentView);
506 return VK_SUCCESS;
507}
508
509VkResult CreateBufferView(VkDevice device,
510 const VkBufferViewCreateInfo*,
511 VkBufferView* view) {
512 *view = AllocHandle(device, HandleType::kBufferView);
513 return VK_SUCCESS;
514}
515
516VkResult CreateCommandPool(VkDevice device,
517 const VkCmdPoolCreateInfo*,
518 VkCmdPool* pool) {
519 *pool = AllocHandle(device, HandleType::kCmdPool);
520 return VK_SUCCESS;
521}
522
523VkResult CreateDescriptorPool(VkDevice device,
524 VkDescriptorPoolUsage,
525 uint32_t,
526 const VkDescriptorPoolCreateInfo*,
527 VkDescriptorPool* pool) {
528 *pool = AllocHandle(device, HandleType::kDescriptorPool);
529 return VK_SUCCESS;
530}
531
532VkResult AllocDescriptorSets(VkDevice device,
533 VkDescriptorPool,
534 VkDescriptorSetUsage,
535 uint32_t count,
536 const VkDescriptorSetLayout*,
537 VkDescriptorSet* sets,
538 uint32_t* out_count) {
539 for (uint32_t i = 0; i < count; i++)
540 sets[i] = AllocHandle(device, HandleType::kDescriptorSet);
541 *out_count = count;
542 return VK_SUCCESS;
543}
544
545VkResult CreateDescriptorSetLayout(VkDevice device,
546 const VkDescriptorSetLayoutCreateInfo*,
547 VkDescriptorSetLayout* layout) {
548 *layout = AllocHandle(device, HandleType::kDescriptorSetLayout);
549 return VK_SUCCESS;
550}
551
552VkResult CreateDynamicColorBlendState(VkDevice device,
553 const VkDynamicColorBlendStateCreateInfo*,
554 VkDynamicColorBlendState* state) {
555 *state = AllocHandle(device, HandleType::kDynamicColorBlendState);
556 return VK_SUCCESS;
557}
558
559VkResult CreateDynamicDepthStencilState(
560 VkDevice device,
561 const VkDynamicDepthStencilStateCreateInfo*,
562 VkDynamicDepthStencilState* state) {
563 *state = AllocHandle(device, HandleType::kDynamicDepthStencilState);
564 return VK_SUCCESS;
565}
566
567VkResult CreateDynamicRasterState(VkDevice device,
568 const VkDynamicRasterStateCreateInfo*,
569 VkDynamicRasterState* state) {
570 *state = AllocHandle(device, HandleType::kDynamicRasterState);
571 return VK_SUCCESS;
572}
573
574VkResult CreateDynamicViewportState(VkDevice device,
575 const VkDynamicViewportStateCreateInfo*,
576 VkDynamicViewportState* state) {
577 *state = AllocHandle(device, HandleType::kDynamicViewportState);
578 return VK_SUCCESS;
579}
580
581VkResult CreateEvent(VkDevice device,
582 const VkEventCreateInfo*,
583 VkEvent* event) {
584 *event = AllocHandle(device, HandleType::kEvent);
585 return VK_SUCCESS;
586}
587
588VkResult CreateFence(VkDevice device,
589 const VkFenceCreateInfo*,
590 VkFence* fence) {
591 *fence = AllocHandle(device, HandleType::kFence);
592 return VK_SUCCESS;
593}
594
595VkResult CreateFramebuffer(VkDevice device,
596 const VkFramebufferCreateInfo*,
597 VkFramebuffer* framebuffer) {
598 *framebuffer = AllocHandle(device, HandleType::kFramebuffer);
599 return VK_SUCCESS;
600}
601
602VkResult CreateImageView(VkDevice device,
603 const VkImageViewCreateInfo*,
604 VkImageView* view) {
605 *view = AllocHandle(device, HandleType::kImageView);
606 return VK_SUCCESS;
607}
608
609VkResult CreateGraphicsPipelines(VkDevice device,
610 VkPipelineCache,
611 uint32_t count,
612 const VkGraphicsPipelineCreateInfo*,
613 VkPipeline* pipelines) {
614 for (uint32_t i = 0; i < count; i++)
615 pipelines[i] = AllocHandle(device, HandleType::kPipeline);
616 return VK_SUCCESS;
617}
618
619VkResult CreateComputePipelines(VkDevice device,
620 VkPipelineCache,
621 uint32_t count,
622 const VkComputePipelineCreateInfo*,
623 VkPipeline* pipelines) {
624 for (uint32_t i = 0; i < count; i++)
625 pipelines[i] = AllocHandle(device, HandleType::kPipeline);
626 return VK_SUCCESS;
627}
628
629VkResult CreatePipelineCache(VkDevice device,
630 const VkPipelineCacheCreateInfo*,
631 VkPipelineCache* cache) {
632 *cache = AllocHandle(device, HandleType::kPipelineCache);
633 return VK_SUCCESS;
634}
635
636VkResult CreatePipelineLayout(VkDevice device,
637 const VkPipelineLayoutCreateInfo*,
638 VkPipelineLayout* layout) {
639 *layout = AllocHandle(device, HandleType::kPipelineLayout);
640 return VK_SUCCESS;
641}
642
643VkResult CreateQueryPool(VkDevice device,
644 const VkQueryPoolCreateInfo*,
645 VkQueryPool* pool) {
646 *pool = AllocHandle(device, HandleType::kQueryPool);
647 return VK_SUCCESS;
648}
649
650VkResult CreateRenderPass(VkDevice device,
651 const VkRenderPassCreateInfo*,
652 VkRenderPass* renderpass) {
653 *renderpass = AllocHandle(device, HandleType::kRenderPass);
654 return VK_SUCCESS;
655}
656
657VkResult CreateSampler(VkDevice device,
658 const VkSamplerCreateInfo*,
659 VkSampler* sampler) {
660 *sampler = AllocHandle(device, HandleType::kSampler);
661 return VK_SUCCESS;
662}
663
664VkResult CreateSemaphore(VkDevice device,
665 const VkSemaphoreCreateInfo*,
666 VkSemaphore* semaphore) {
667 *semaphore = AllocHandle(device, HandleType::kSemaphore);
668 return VK_SUCCESS;
669}
670
671VkResult CreateShader(VkDevice device,
672 const VkShaderCreateInfo*,
673 VkShader* shader) {
674 *shader = AllocHandle(device, HandleType::kShader);
675 return VK_SUCCESS;
676}
677
678VkResult CreateShaderModule(VkDevice device,
679 const VkShaderModuleCreateInfo*,
680 VkShaderModule* module) {
681 *module = AllocHandle(device, HandleType::kShaderModule);
682 return VK_SUCCESS;
683}
684
685// -----------------------------------------------------------------------------
Jesse Hall04f4f472015-08-16 19:51:04 -0700686// No-op entrypoints
687
688// clang-format off
689#pragma clang diagnostic push
690#pragma clang diagnostic ignored "-Wunused-parameter"
691
692VkResult GetPhysicalDeviceQueueCount(VkPhysicalDevice physicalDevice, uint32_t* pCount) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100693 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700694 return VK_SUCCESS;
695}
696
697VkResult GetPhysicalDeviceQueueProperties(VkPhysicalDevice physicalDevice, uint32_t count, VkPhysicalDeviceQueueProperties* pQueueProperties) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100698 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700699 return VK_SUCCESS;
700}
701
702VkResult GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100703 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700704 return VK_SUCCESS;
705}
706
707VkResult GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100708 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700709 return VK_SUCCESS;
710}
711
712VkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageFormatProperties* pImageFormatProperties) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100713 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700714 return VK_SUCCESS;
715}
716
717VkResult GetPhysicalDeviceLimits(VkPhysicalDevice physicalDevice, VkPhysicalDeviceLimits* pLimits) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100718 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700719 return VK_SUCCESS;
720}
721
722VkResult GetGlobalLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100723 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700724 return VK_SUCCESS;
725}
726
727VkResult GetPhysicalDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100728 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700729 return VK_SUCCESS;
730}
731
732VkResult GetPhysicalDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100733 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700734 return VK_SUCCESS;
735}
736
737VkResult QueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence) {
738 return VK_SUCCESS;
739}
740
741VkResult QueueWaitIdle(VkQueue queue) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100742 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700743 return VK_SUCCESS;
744}
745
746VkResult DeviceWaitIdle(VkDevice device) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100747 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700748 return VK_SUCCESS;
749}
750
Jesse Hall04f4f472015-08-16 19:51:04 -0700751VkResult UnmapMemory(VkDevice device, VkDeviceMemory mem) {
752 return VK_SUCCESS;
753}
754
755VkResult FlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100756 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700757 return VK_SUCCESS;
758}
759
760VkResult InvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100761 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700762 return VK_SUCCESS;
763}
764
765VkResult GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100766 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700767 return VK_SUCCESS;
768}
769
Jesse Hall04f4f472015-08-16 19:51:04 -0700770VkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset) {
771 return VK_SUCCESS;
772}
773
Jesse Hall04f4f472015-08-16 19:51:04 -0700774VkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100775 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700776 return VK_SUCCESS;
777}
778
779VkResult GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100780 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700781 return VK_SUCCESS;
782}
783
784VkResult GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100785 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700786 return VK_SUCCESS;
787}
788
789VkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100790 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700791 return VK_SUCCESS;
792}
793
794VkResult QueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100795 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700796 return VK_SUCCESS;
797}
798
799VkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100800 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700801 return VK_SUCCESS;
802}
803
Jesse Hall04f4f472015-08-16 19:51:04 -0700804VkResult DestroyFence(VkDevice device, VkFence fence) {
805 return VK_SUCCESS;
806}
807
808VkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) {
809 return VK_SUCCESS;
810}
811
812VkResult GetFenceStatus(VkDevice device, VkFence fence) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100813 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700814 return VK_SUCCESS;
815}
816
817VkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) {
818 return VK_SUCCESS;
819}
820
Jesse Hall04f4f472015-08-16 19:51:04 -0700821VkResult DestroySemaphore(VkDevice device, VkSemaphore semaphore) {
822 return VK_SUCCESS;
823}
824
825VkResult QueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100826 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700827 return VK_SUCCESS;
828}
829
830VkResult QueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100831 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700832 return VK_SUCCESS;
833}
834
Jesse Hall04f4f472015-08-16 19:51:04 -0700835VkResult DestroyEvent(VkDevice device, VkEvent event) {
836 return VK_SUCCESS;
837}
838
839VkResult GetEventStatus(VkDevice device, VkEvent event) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100840 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700841 return VK_SUCCESS;
842}
843
844VkResult SetEvent(VkDevice device, VkEvent event) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100845 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700846 return VK_SUCCESS;
847}
848
849VkResult ResetEvent(VkDevice device, VkEvent event) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100850 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700851 return VK_SUCCESS;
852}
853
Jesse Hall04f4f472015-08-16 19:51:04 -0700854VkResult DestroyQueryPool(VkDevice device, VkQueryPool queryPool) {
855 return VK_SUCCESS;
856}
857
858VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100859 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700860 return VK_SUCCESS;
861}
862
Jesse Hall04f4f472015-08-16 19:51:04 -0700863VkResult DestroyBufferView(VkDevice device, VkBufferView bufferView) {
864 return VK_SUCCESS;
865}
866
Jesse Hall04f4f472015-08-16 19:51:04 -0700867VkResult GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100868 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700869 return VK_SUCCESS;
870}
871
Jesse Hall04f4f472015-08-16 19:51:04 -0700872VkResult DestroyImageView(VkDevice device, VkImageView imageView) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700873 return VK_SUCCESS;
874}
875
876VkResult DestroyAttachmentView(VkDevice device, VkAttachmentView attachmentView) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700877 return VK_SUCCESS;
878}
879
880VkResult DestroyShaderModule(VkDevice device, VkShaderModule shaderModule) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700881 return VK_SUCCESS;
882}
883
884VkResult DestroyShader(VkDevice device, VkShader shader) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700885 return VK_SUCCESS;
886}
887
888VkResult DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) {
889 return VK_SUCCESS;
890}
891
892size_t GetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100893 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700894 return VK_SUCCESS;
895}
896
897VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, void* pData) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100898 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700899 return VK_SUCCESS;
900}
901
902VkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100903 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700904 return VK_SUCCESS;
905}
906
Jesse Hall04f4f472015-08-16 19:51:04 -0700907VkResult DestroyPipeline(VkDevice device, VkPipeline pipeline) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700908 return VK_SUCCESS;
909}
910
911VkResult DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700912 return VK_SUCCESS;
913}
914
915VkResult DestroySampler(VkDevice device, VkSampler sampler) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700916 return VK_SUCCESS;
917}
918
919VkResult DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700920 return VK_SUCCESS;
921}
922
923VkResult DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
924 return VK_SUCCESS;
925}
926
927VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100928 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700929 return VK_SUCCESS;
930}
931
Jesse Hall04f4f472015-08-16 19:51:04 -0700932VkResult UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100933 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700934 return VK_SUCCESS;
935}
936
937VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100938 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700939 return VK_SUCCESS;
940}
941
Jesse Hall04f4f472015-08-16 19:51:04 -0700942VkResult DestroyDynamicViewportState(VkDevice device, VkDynamicViewportState dynamicViewportState) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700943 return VK_SUCCESS;
944}
945
946VkResult DestroyDynamicRasterState(VkDevice device, VkDynamicRasterState dynamicRasterState) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700947 return VK_SUCCESS;
948}
949
950VkResult DestroyDynamicColorBlendState(VkDevice device, VkDynamicColorBlendState dynamicColorBlendState) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700951 return VK_SUCCESS;
952}
953
954VkResult DestroyDynamicDepthStencilState(VkDevice device, VkDynamicDepthStencilState dynamicDepthStencilState) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700955 return VK_SUCCESS;
956}
957
958VkResult DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) {
Jesse Hall04f4f472015-08-16 19:51:04 -0700959 return VK_SUCCESS;
960}
961
962VkResult DestroyRenderPass(VkDevice device, VkRenderPass renderPass) {
963 return VK_SUCCESS;
964}
965
966VkResult GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100967 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700968 return VK_SUCCESS;
969}
970
Jesse Hall04f4f472015-08-16 19:51:04 -0700971VkResult DestroyCommandPool(VkDevice device, VkCmdPool cmdPool) {
972 return VK_SUCCESS;
973}
974
975VkResult ResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100976 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700977 return VK_SUCCESS;
978}
979
Jesse Hall04f4f472015-08-16 19:51:04 -0700980VkResult BeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo) {
981 return VK_SUCCESS;
982}
983
984VkResult EndCommandBuffer(VkCmdBuffer cmdBuffer) {
985 return VK_SUCCESS;
986}
987
988VkResult ResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags) {
Jesse Hall73ab0ac2015-08-25 15:09:15 +0100989 ALOGV("TODO: vk%s", __FUNCTION__);
Jesse Hall04f4f472015-08-16 19:51:04 -0700990 return VK_SUCCESS;
991}
992
993void CmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
994}
995
996void CmdBindDynamicViewportState(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState) {
997}
998
999void CmdBindDynamicRasterState(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState) {
1000}
1001
1002void CmdBindDynamicColorBlendState(VkCmdBuffer cmdBuffer, VkDynamicColorBlendState dynamicColorBlendState) {
1003}
1004
1005void CmdBindDynamicDepthStencilState(VkCmdBuffer cmdBuffer, VkDynamicDepthStencilState dynamicDepthStencilState) {
1006}
1007
1008void CmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
1009}
1010
1011void CmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) {
1012}
1013
1014void CmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) {
1015}
1016
1017void CmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount) {
1018}
1019
1020void CmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount) {
1021}
1022
1023void CmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
1024}
1025
1026void CmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
1027}
1028
1029void CmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z) {
1030}
1031
1032void CmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset) {
1033}
1034
1035void CmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) {
1036}
1037
1038void CmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
1039}
1040
1041void CmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter) {
1042}
1043
1044void CmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
1045}
1046
1047void CmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
1048}
1049
1050void CmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData) {
1051}
1052
1053void CmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data) {
1054}
1055
1056void CmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
1057}
1058
1059void CmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
1060}
1061
1062void CmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects) {
1063}
1064
1065void CmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects) {
1066}
1067
1068void CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
1069}
1070
1071void CmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
1072}
1073
1074void CmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
1075}
1076
1077void CmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
1078}
1079
1080void CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
1081}
1082
1083void CmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) {
1084}
1085
1086void CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) {
1087}
1088
1089void CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
1090}
1091
1092void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset) {
1093}
1094
1095void CmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags) {
1096}
1097
1098void CmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values) {
1099}
1100
1101void CmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) {
1102}
1103
1104void CmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents) {
1105}
1106
1107void CmdEndRenderPass(VkCmdBuffer cmdBuffer) {
1108}
1109
1110void CmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers) {
1111}
1112
1113#pragma clang diagnostic pop
1114// clang-format on
1115
1116} // namespace null_driver