blob: 99596416ae94e8265b3045b3c9e65b04c13b91b3 [file] [log] [blame]
David Pinedo0257fbf2015-02-02 18:02:40 -07001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan null driver
David Pinedo0257fbf2015-02-02 18:02:40 -07003 *
4 * Copyright (C) 2015 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 *
24 */
25
26#include "nulldrv.h"
David Pinedo8e9cb3b2015-02-10 15:02:08 -070027#include <stdio.h>
David Pinedo0257fbf2015-02-02 18:02:40 -070028
David Pinedo8e9cb3b2015-02-10 15:02:08 -070029#if 0
30#define NULLDRV_LOG_FUNC \
31 do { \
32 fflush(stdout); \
33 fflush(stderr); \
34 printf("null driver: %s\n", __FUNCTION__); \
35 fflush(stdout); \
36 } while (0)
37#else
38 #define NULLDRV_LOG_FUNC do { } while (0)
39#endif
40
41// The null driver supports all WSI extenstions ... for now ...
David Pinedo0257fbf2015-02-02 18:02:40 -070042static const char * const nulldrv_gpu_exts[NULLDRV_EXT_COUNT] = {
Chia-I Wu5b66aa52015-04-16 22:02:10 +080043 [NULLDRV_EXT_WSI_LUNARG] = "VK_WSI_LunarG",
David Pinedo0257fbf2015-02-02 18:02:40 -070044};
45
Mike Stroyan230e6252015-04-17 12:36:38 -060046static struct nulldrv_base *nulldrv_base(VkObject base)
David Pinedo0257fbf2015-02-02 18:02:40 -070047{
48 return (struct nulldrv_base *) base;
49}
50
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060051static VkResult nulldrv_base_get_info(struct nulldrv_base *base, int type,
David Pinedo0257fbf2015-02-02 18:02:40 -070052 size_t *size, void *data)
53{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060054 VkResult ret = VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -070055 size_t s;
56 uint32_t *count;
57
58 switch (type) {
Tony Barbour8205d902015-04-16 15:59:00 -060059 case VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS:
David Pinedo0257fbf2015-02-02 18:02:40 -070060 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060061 s = sizeof(VkMemoryRequirements);
David Pinedo0257fbf2015-02-02 18:02:40 -070062 *size = s;
63 if (data == NULL)
64 return ret;
65 memset(data, 0, s);
David Pinedo0257fbf2015-02-02 18:02:40 -070066 break;
67 }
Tony Barbour8205d902015-04-16 15:59:00 -060068 case VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT:
David Pinedo0257fbf2015-02-02 18:02:40 -070069 *size = sizeof(uint32_t);
70 if (data == NULL)
71 return ret;
72 count = (uint32_t *) data;
73 *count = 1;
74 break;
David Pinedo0257fbf2015-02-02 18:02:40 -070075 default:
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060076 ret = VK_ERROR_INVALID_VALUE;
David Pinedo0257fbf2015-02-02 18:02:40 -070077 break;
78 }
79
80 return ret;
81}
82
83static struct nulldrv_base *nulldrv_base_create(struct nulldrv_dev *dev,
84 size_t obj_size,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060085 VK_DBG_OBJECT_TYPE type)
David Pinedo0257fbf2015-02-02 18:02:40 -070086{
87 struct nulldrv_base *base;
88
89 if (!obj_size)
90 obj_size = sizeof(*base);
91
92 assert(obj_size >= sizeof(*base));
93
Chia-I Wu493a1752015-02-22 14:40:25 +080094 base = (struct nulldrv_base*)malloc(obj_size);
David Pinedo0257fbf2015-02-02 18:02:40 -070095 if (!base)
96 return NULL;
97
98 memset(base, 0, obj_size);
99
100 // Initialize pointer to loader's dispatch table with ICD_LOADER_MAGIC
Tony Barbour11e76ac2015-04-20 16:28:46 -0600101 set_loader_magic_value((VkObject) base);
David Pinedo0257fbf2015-02-02 18:02:40 -0700102
103 if (dev == NULL) {
104 /*
105 * dev is NULL when we are creating the base device object
106 * Set dev now so that debug setup happens correctly
107 */
108 dev = (struct nulldrv_dev *) base;
109 }
110
111
112 base->get_info = NULL;
113
114 return base;
115}
116
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600117static VkResult nulldrv_gpu_add(int devid, const char *primary_node,
David Pinedo0257fbf2015-02-02 18:02:40 -0700118 const char *render_node, struct nulldrv_gpu **gpu_ret)
119{
120 struct nulldrv_gpu *gpu;
121
Chia-I Wu493a1752015-02-22 14:40:25 +0800122 gpu = malloc(sizeof(*gpu));
David Pinedo0257fbf2015-02-02 18:02:40 -0700123 if (!gpu)
Tony Barbour8205d902015-04-16 15:59:00 -0600124 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700125 memset(gpu, 0, sizeof(*gpu));
Mark Lobodzinski97dcd042015-04-16 08:52:00 -0500126
David Pinedo0257fbf2015-02-02 18:02:40 -0700127 // Initialize pointer to loader's dispatch table with ICD_LOADER_MAGIC
Tony Barbour11e76ac2015-04-20 16:28:46 -0600128 set_loader_magic_value((VkObject) gpu);
David Pinedo0257fbf2015-02-02 18:02:40 -0700129
130 *gpu_ret = gpu;
131
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600132 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700133}
134
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600135static VkResult nulldrv_queue_create(struct nulldrv_dev *dev,
Chia-I Wub5ed9e62015-03-05 14:26:54 -0700136 uint32_t node_index,
David Pinedo0257fbf2015-02-02 18:02:40 -0700137 struct nulldrv_queue **queue_ret)
138{
139 struct nulldrv_queue *queue;
140
141 queue = (struct nulldrv_queue *) nulldrv_base_create(dev, sizeof(*queue),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600142 VK_DBG_OBJECT_QUEUE);
David Pinedo0257fbf2015-02-02 18:02:40 -0700143 if (!queue)
Tony Barbour8205d902015-04-16 15:59:00 -0600144 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700145
146 queue->dev = dev;
147
148 *queue_ret = queue;
149
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600150 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700151}
152
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600153static VkResult dev_create_queues(struct nulldrv_dev *dev,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600154 const VkDeviceQueueCreateInfo *queues,
David Pinedo0257fbf2015-02-02 18:02:40 -0700155 uint32_t count)
156{
157 uint32_t i;
158
159 if (!count)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600160 return VK_ERROR_INVALID_POINTER;
David Pinedo0257fbf2015-02-02 18:02:40 -0700161
162 for (i = 0; i < count; i++) {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600163 const VkDeviceQueueCreateInfo *q = &queues[i];
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600164 VkResult ret = VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700165
166 if (q->queueCount == 1 && !dev->queues[q->queueNodeIndex]) {
167 ret = nulldrv_queue_create(dev, q->queueNodeIndex,
168 &dev->queues[q->queueNodeIndex]);
169 }
170 else {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600171 ret = VK_ERROR_INVALID_POINTER;
David Pinedo0257fbf2015-02-02 18:02:40 -0700172 }
173
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600174 if (ret != VK_SUCCESS) {
David Pinedo0257fbf2015-02-02 18:02:40 -0700175 return ret;
176 }
177 }
178
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600179 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700180}
181
182static enum nulldrv_ext_type nulldrv_gpu_lookup_extension(const struct nulldrv_gpu *gpu,
183 const char *ext)
184{
185 enum nulldrv_ext_type type;
186
187 for (type = 0; type < ARRAY_SIZE(nulldrv_gpu_exts); type++) {
188 if (nulldrv_gpu_exts[type] && strcmp(nulldrv_gpu_exts[type], ext) == 0)
189 break;
190 }
191
192 assert(type < NULLDRV_EXT_COUNT || type == NULLDRV_EXT_INVALID);
193
194 return type;
195}
196
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600197static VkResult nulldrv_desc_ooxx_create(struct nulldrv_dev *dev,
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800198 struct nulldrv_desc_ooxx **ooxx_ret)
David Pinedo0257fbf2015-02-02 18:02:40 -0700199{
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800200 struct nulldrv_desc_ooxx *ooxx;
David Pinedo0257fbf2015-02-02 18:02:40 -0700201
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800202 ooxx = malloc(sizeof(*ooxx));
203 if (!ooxx)
Tony Barbour8205d902015-04-16 15:59:00 -0600204 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700205
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800206 memset(ooxx, 0, sizeof(*ooxx));
David Pinedo0257fbf2015-02-02 18:02:40 -0700207
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800208 ooxx->surface_desc_size = 0;
209 ooxx->sampler_desc_size = 0;
David Pinedo0257fbf2015-02-02 18:02:40 -0700210
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800211 *ooxx_ret = ooxx;
David Pinedo0257fbf2015-02-02 18:02:40 -0700212
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600213 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700214}
215
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600216static VkResult nulldrv_dev_create(struct nulldrv_gpu *gpu,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600217 const VkDeviceCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700218 struct nulldrv_dev **dev_ret)
219{
220 struct nulldrv_dev *dev;
221 uint32_t i;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600222 VkResult ret;
David Pinedo0257fbf2015-02-02 18:02:40 -0700223
224 dev = (struct nulldrv_dev *) nulldrv_base_create(NULL, sizeof(*dev),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600225 VK_DBG_OBJECT_DEVICE);
David Pinedo0257fbf2015-02-02 18:02:40 -0700226 if (!dev)
Tony Barbour8205d902015-04-16 15:59:00 -0600227 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700228
229 for (i = 0; i < info->extensionCount; i++) {
230 const enum nulldrv_ext_type ext = nulldrv_gpu_lookup_extension(gpu,
231 info->ppEnabledExtensionNames[i]);
232
233 if (ext == NULLDRV_EXT_INVALID)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600234 return VK_ERROR_INVALID_EXTENSION;
David Pinedo0257fbf2015-02-02 18:02:40 -0700235
236 dev->exts[ext] = true;
237 }
238
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800239 ret = nulldrv_desc_ooxx_create(dev, &dev->desc_ooxx);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600240 if (ret != VK_SUCCESS) {
David Pinedo0257fbf2015-02-02 18:02:40 -0700241 return ret;
242 }
243
244 ret = dev_create_queues(dev, info->pRequestedQueues,
245 info->queueRecordCount);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600246 if (ret != VK_SUCCESS) {
David Pinedo0257fbf2015-02-02 18:02:40 -0700247 return ret;
248 }
249
250 *dev_ret = dev;
251
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600252 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700253}
254
Tony Barbour8205d902015-04-16 15:59:00 -0600255static struct nulldrv_gpu *nulldrv_gpu(VkPhysicalDevice gpu)
David Pinedo0257fbf2015-02-02 18:02:40 -0700256{
257 return (struct nulldrv_gpu *) gpu;
258}
259
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600260static VkResult nulldrv_rt_view_create(struct nulldrv_dev *dev,
261 const VkColorAttachmentViewCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700262 struct nulldrv_rt_view **view_ret)
263{
264 struct nulldrv_rt_view *view;
265
266 view = (struct nulldrv_rt_view *) nulldrv_base_create(dev, sizeof(*view),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600267 VK_DBG_OBJECT_COLOR_TARGET_VIEW);
David Pinedo0257fbf2015-02-02 18:02:40 -0700268 if (!view)
Tony Barbour8205d902015-04-16 15:59:00 -0600269 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700270
271 *view_ret = view;
272
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600273 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700274}
275
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600276static VkResult nulldrv_fence_create(struct nulldrv_dev *dev,
277 const VkFenceCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700278 struct nulldrv_fence **fence_ret)
279{
280 struct nulldrv_fence *fence;
281
282 fence = (struct nulldrv_fence *) nulldrv_base_create(dev, sizeof(*fence),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600283 VK_DBG_OBJECT_FENCE);
David Pinedo0257fbf2015-02-02 18:02:40 -0700284 if (!fence)
Tony Barbour8205d902015-04-16 15:59:00 -0600285 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700286
287 *fence_ret = fence;
288
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600289 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700290}
291
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600292static struct nulldrv_dev *nulldrv_dev(VkDevice dev)
David Pinedo0257fbf2015-02-02 18:02:40 -0700293{
294 return (struct nulldrv_dev *) dev;
295}
296
297static struct nulldrv_img *nulldrv_img_from_base(struct nulldrv_base *base)
298{
299 return (struct nulldrv_img *) base;
300}
301
302
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600303static VkResult img_get_info(struct nulldrv_base *base, int type,
David Pinedo0257fbf2015-02-02 18:02:40 -0700304 size_t *size, void *data)
305{
306 struct nulldrv_img *img = nulldrv_img_from_base(base);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600307 VkResult ret = VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700308
309 switch (type) {
Tony Barbour8205d902015-04-16 15:59:00 -0600310 case VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS:
David Pinedo0257fbf2015-02-02 18:02:40 -0700311 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600312 VkMemoryRequirements *mem_req = data;
David Pinedo0257fbf2015-02-02 18:02:40 -0700313
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600314 *size = sizeof(VkMemoryRequirements);
David Pinedo0257fbf2015-02-02 18:02:40 -0700315 if (data == NULL)
316 return ret;
317 mem_req->size = img->total_size;
318 mem_req->alignment = 4096;
David Pinedo0257fbf2015-02-02 18:02:40 -0700319 }
320 break;
321 default:
322 ret = nulldrv_base_get_info(base, type, size, data);
323 break;
324 }
325
326 return ret;
327}
328
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600329static VkResult nulldrv_img_create(struct nulldrv_dev *dev,
330 const VkImageCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700331 bool scanout,
332 struct nulldrv_img **img_ret)
333{
334 struct nulldrv_img *img;
335
336 img = (struct nulldrv_img *) nulldrv_base_create(dev, sizeof(*img),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600337 VK_DBG_OBJECT_IMAGE);
David Pinedo0257fbf2015-02-02 18:02:40 -0700338 if (!img)
Tony Barbour8205d902015-04-16 15:59:00 -0600339 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700340
341 img->type = info->imageType;
342 img->depth = info->extent.depth;
343 img->mip_levels = info->mipLevels;
344 img->array_size = info->arraySize;
345 img->usage = info->usage;
David Pinedo0257fbf2015-02-02 18:02:40 -0700346 img->samples = info->samples;
347
348 img->obj.base.get_info = img_get_info;
349
350 *img_ret = img;
351
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600352 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700353}
354
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600355static struct nulldrv_img *nulldrv_img(VkImage image)
David Pinedo0257fbf2015-02-02 18:02:40 -0700356{
357 return (struct nulldrv_img *) image;
358}
359
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600360static VkResult nulldrv_mem_alloc(struct nulldrv_dev *dev,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600361 const VkMemoryAllocInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700362 struct nulldrv_mem **mem_ret)
363{
364 struct nulldrv_mem *mem;
365
366 mem = (struct nulldrv_mem *) nulldrv_base_create(dev, sizeof(*mem),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600367 VK_DBG_OBJECT_GPU_MEMORY);
David Pinedo0257fbf2015-02-02 18:02:40 -0700368 if (!mem)
Tony Barbour8205d902015-04-16 15:59:00 -0600369 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700370
Chia-I Wub5ed9e62015-03-05 14:26:54 -0700371 mem->bo = malloc(info->allocationSize);
David Pinedo0257fbf2015-02-02 18:02:40 -0700372 if (!mem->bo) {
Tony Barbour8205d902015-04-16 15:59:00 -0600373 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700374 }
375
376 mem->size = info->allocationSize;
377
378 *mem_ret = mem;
379
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600380 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700381}
382
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600383static VkResult nulldrv_ds_view_create(struct nulldrv_dev *dev,
384 const VkDepthStencilViewCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700385 struct nulldrv_ds_view **view_ret)
386{
387 struct nulldrv_img *img = nulldrv_img(info->image);
388 struct nulldrv_ds_view *view;
389
390 view = (struct nulldrv_ds_view *) nulldrv_base_create(dev, sizeof(*view),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600391 VK_DBG_OBJECT_DEPTH_STENCIL_VIEW);
David Pinedo0257fbf2015-02-02 18:02:40 -0700392 if (!view)
Tony Barbour8205d902015-04-16 15:59:00 -0600393 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700394
395 view->img = img;
396
397 view->array_size = info->arraySize;
398
399 *view_ret = view;
400
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600401 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700402}
403
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600404static VkResult nulldrv_sampler_create(struct nulldrv_dev *dev,
405 const VkSamplerCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700406 struct nulldrv_sampler **sampler_ret)
407{
408 struct nulldrv_sampler *sampler;
409
410 sampler = (struct nulldrv_sampler *) nulldrv_base_create(dev,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600411 sizeof(*sampler), VK_DBG_OBJECT_SAMPLER);
David Pinedo0257fbf2015-02-02 18:02:40 -0700412 if (!sampler)
Tony Barbour8205d902015-04-16 15:59:00 -0600413 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700414
415 *sampler_ret = sampler;
416
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600417 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700418}
419
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600420static VkResult nulldrv_img_view_create(struct nulldrv_dev *dev,
421 const VkImageViewCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700422 struct nulldrv_img_view **view_ret)
423{
424 struct nulldrv_img *img = nulldrv_img(info->image);
425 struct nulldrv_img_view *view;
David Pinedo0257fbf2015-02-02 18:02:40 -0700426
427 view = (struct nulldrv_img_view *) nulldrv_base_create(dev, sizeof(*view),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600428 VK_DBG_OBJECT_IMAGE_VIEW);
David Pinedo0257fbf2015-02-02 18:02:40 -0700429 if (!view)
Tony Barbour8205d902015-04-16 15:59:00 -0600430 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700431
432 view->img = img;
433 view->min_lod = info->minLod;
434
David Pinedo0257fbf2015-02-02 18:02:40 -0700435 view->cmd_len = 8;
436
437 *view_ret = view;
438
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600439 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700440}
441
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600442static void *nulldrv_mem_map(struct nulldrv_mem *mem, VkFlags flags)
David Pinedo0257fbf2015-02-02 18:02:40 -0700443{
444 return mem->bo;
445}
446
Tony Barbour8205d902015-04-16 15:59:00 -0600447static struct nulldrv_mem *nulldrv_mem(VkDeviceMemory mem)
David Pinedo0257fbf2015-02-02 18:02:40 -0700448{
449 return (struct nulldrv_mem *) mem;
450}
451
452static struct nulldrv_buf *nulldrv_buf_from_base(struct nulldrv_base *base)
453{
454 return (struct nulldrv_buf *) base;
455}
456
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600457static VkResult buf_get_info(struct nulldrv_base *base, int type,
David Pinedo0257fbf2015-02-02 18:02:40 -0700458 size_t *size, void *data)
459{
460 struct nulldrv_buf *buf = nulldrv_buf_from_base(base);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600461 VkResult ret = VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700462
463 switch (type) {
Tony Barbour8205d902015-04-16 15:59:00 -0600464 case VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS:
David Pinedo0257fbf2015-02-02 18:02:40 -0700465 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600466 VkMemoryRequirements *mem_req = data;
David Pinedo0257fbf2015-02-02 18:02:40 -0700467
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600468 *size = sizeof(VkMemoryRequirements);
David Pinedo0257fbf2015-02-02 18:02:40 -0700469 if (data == NULL)
470 return ret;
471
472 mem_req->size = buf->size;
473 mem_req->alignment = 4096;
David Pinedo0257fbf2015-02-02 18:02:40 -0700474
475 }
476 break;
David Pinedo0257fbf2015-02-02 18:02:40 -0700477 default:
478 ret = nulldrv_base_get_info(base, type, size, data);
479 break;
480 }
481
482 return ret;
483}
484
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600485static VkResult nulldrv_buf_create(struct nulldrv_dev *dev,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600486 const VkBufferCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700487 struct nulldrv_buf **buf_ret)
488{
489 struct nulldrv_buf *buf;
490
491 buf = (struct nulldrv_buf *) nulldrv_base_create(dev, sizeof(*buf),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600492 VK_DBG_OBJECT_BUFFER);
David Pinedo0257fbf2015-02-02 18:02:40 -0700493 if (!buf)
Tony Barbour8205d902015-04-16 15:59:00 -0600494 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700495
496 buf->size = info->size;
497 buf->usage = info->usage;
498
499 buf->obj.base.get_info = buf_get_info;
500
501 *buf_ret = buf;
502
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600503 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700504}
505
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600506static VkResult nulldrv_desc_layout_create(struct nulldrv_dev *dev,
507 const VkDescriptorSetLayoutCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700508 struct nulldrv_desc_layout **layout_ret)
509{
510 struct nulldrv_desc_layout *layout;
511
512 layout = (struct nulldrv_desc_layout *)
513 nulldrv_base_create(dev, sizeof(*layout),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600514 VK_DBG_OBJECT_DESCRIPTOR_SET_LAYOUT);
David Pinedo0257fbf2015-02-02 18:02:40 -0700515 if (!layout)
Tony Barbour8205d902015-04-16 15:59:00 -0600516 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700517
518 *layout_ret = layout;
519
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600520 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700521}
522
Mark Lobodzinski556f7212015-04-17 14:11:39 -0500523static VkResult nulldrv_pipeline_layout_create(struct nulldrv_dev *dev,
524 const VkPipelineLayoutCreateInfo* pCreateInfo,
525 struct nulldrv_pipeline_layout **pipeline_layout_ret)
Chia-I Wu7732cb22015-03-26 15:27:55 +0800526{
Mark Lobodzinski556f7212015-04-17 14:11:39 -0500527 struct nulldrv_pipeline_layout *pipeline_layout;
Chia-I Wu7732cb22015-03-26 15:27:55 +0800528
Mark Lobodzinski556f7212015-04-17 14:11:39 -0500529 pipeline_layout = (struct nulldrv_pipeline_layout *)
530 nulldrv_base_create(dev, sizeof(*pipeline_layout),
531 VK_DBG_OBJECT_PIPELINE_LAYOUT);
532 if (!pipeline_layout)
Tony Barbour8205d902015-04-16 15:59:00 -0600533 return VK_ERROR_OUT_OF_HOST_MEMORY;
Chia-I Wu7732cb22015-03-26 15:27:55 +0800534
Mark Lobodzinski556f7212015-04-17 14:11:39 -0500535 *pipeline_layout_ret = pipeline_layout;
Chia-I Wu7732cb22015-03-26 15:27:55 +0800536
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600537 return VK_SUCCESS;
Chia-I Wu7732cb22015-03-26 15:27:55 +0800538}
539
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600540static struct nulldrv_desc_layout *nulldrv_desc_layout(VkDescriptorSetLayout layout)
David Pinedo0257fbf2015-02-02 18:02:40 -0700541{
542 return (struct nulldrv_desc_layout *) layout;
543}
544
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600545static VkResult shader_create(struct nulldrv_dev *dev,
546 const VkShaderCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700547 struct nulldrv_shader **sh_ret)
548{
David Pinedo0257fbf2015-02-02 18:02:40 -0700549 struct nulldrv_shader *sh;
550
551 sh = (struct nulldrv_shader *) nulldrv_base_create(dev, sizeof(*sh),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600552 VK_DBG_OBJECT_SHADER);
David Pinedo0257fbf2015-02-02 18:02:40 -0700553 if (!sh)
Tony Barbour8205d902015-04-16 15:59:00 -0600554 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700555
556 *sh_ret = sh;
557
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600558 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700559}
560
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600561static VkResult graphics_pipeline_create(struct nulldrv_dev *dev,
562 const VkGraphicsPipelineCreateInfo *info_,
David Pinedo0257fbf2015-02-02 18:02:40 -0700563 struct nulldrv_pipeline **pipeline_ret)
564{
565 struct nulldrv_pipeline *pipeline;
566
567 pipeline = (struct nulldrv_pipeline *)
568 nulldrv_base_create(dev, sizeof(*pipeline),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600569 VK_DBG_OBJECT_GRAPHICS_PIPELINE);
David Pinedo0257fbf2015-02-02 18:02:40 -0700570 if (!pipeline)
Tony Barbour8205d902015-04-16 15:59:00 -0600571 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700572
573 *pipeline_ret = pipeline;
574
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600575 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700576}
577
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600578static VkResult nulldrv_viewport_state_create(struct nulldrv_dev *dev,
579 const VkDynamicVpStateCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700580 struct nulldrv_dynamic_vp **state_ret)
581{
582 struct nulldrv_dynamic_vp *state;
583
584 state = (struct nulldrv_dynamic_vp *) nulldrv_base_create(dev,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600585 sizeof(*state), VK_DBG_OBJECT_VIEWPORT_STATE);
David Pinedo0257fbf2015-02-02 18:02:40 -0700586 if (!state)
Tony Barbour8205d902015-04-16 15:59:00 -0600587 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700588
589 *state_ret = state;
590
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600591 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700592}
593
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600594static VkResult nulldrv_raster_state_create(struct nulldrv_dev *dev,
595 const VkDynamicRsStateCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700596 struct nulldrv_dynamic_rs **state_ret)
597{
598 struct nulldrv_dynamic_rs *state;
599
600 state = (struct nulldrv_dynamic_rs *) nulldrv_base_create(dev,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600601 sizeof(*state), VK_DBG_OBJECT_RASTER_STATE);
David Pinedo0257fbf2015-02-02 18:02:40 -0700602 if (!state)
Tony Barbour8205d902015-04-16 15:59:00 -0600603 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700604
605 *state_ret = state;
606
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600607 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700608}
609
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600610static VkResult nulldrv_blend_state_create(struct nulldrv_dev *dev,
611 const VkDynamicCbStateCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700612 struct nulldrv_dynamic_cb **state_ret)
613{
614 struct nulldrv_dynamic_cb *state;
615
616 state = (struct nulldrv_dynamic_cb *) nulldrv_base_create(dev,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600617 sizeof(*state), VK_DBG_OBJECT_COLOR_BLEND_STATE);
David Pinedo0257fbf2015-02-02 18:02:40 -0700618 if (!state)
Tony Barbour8205d902015-04-16 15:59:00 -0600619 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700620
621 *state_ret = state;
622
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600623 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700624}
625
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600626static VkResult nulldrv_ds_state_create(struct nulldrv_dev *dev,
627 const VkDynamicDsStateCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700628 struct nulldrv_dynamic_ds **state_ret)
629{
630 struct nulldrv_dynamic_ds *state;
631
632 state = (struct nulldrv_dynamic_ds *) nulldrv_base_create(dev,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600633 sizeof(*state), VK_DBG_OBJECT_DEPTH_STENCIL_STATE);
David Pinedo0257fbf2015-02-02 18:02:40 -0700634 if (!state)
Tony Barbour8205d902015-04-16 15:59:00 -0600635 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700636
637 *state_ret = state;
638
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600639 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700640}
641
642
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600643static VkResult nulldrv_cmd_create(struct nulldrv_dev *dev,
644 const VkCmdBufferCreateInfo *info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700645 struct nulldrv_cmd **cmd_ret)
646{
David Pinedo0257fbf2015-02-02 18:02:40 -0700647 struct nulldrv_cmd *cmd;
648
David Pinedo0257fbf2015-02-02 18:02:40 -0700649 cmd = (struct nulldrv_cmd *) nulldrv_base_create(dev, sizeof(*cmd),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600650 VK_DBG_OBJECT_CMD_BUFFER);
David Pinedo0257fbf2015-02-02 18:02:40 -0700651 if (!cmd)
Tony Barbour8205d902015-04-16 15:59:00 -0600652 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700653
654 *cmd_ret = cmd;
655
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600656 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700657}
658
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600659static VkResult nulldrv_desc_pool_create(struct nulldrv_dev *dev,
660 VkDescriptorPoolUsage usage,
David Pinedo0257fbf2015-02-02 18:02:40 -0700661 uint32_t max_sets,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600662 const VkDescriptorPoolCreateInfo *info,
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800663 struct nulldrv_desc_pool **pool_ret)
David Pinedo0257fbf2015-02-02 18:02:40 -0700664{
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800665 struct nulldrv_desc_pool *pool;
David Pinedo0257fbf2015-02-02 18:02:40 -0700666
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800667 pool = (struct nulldrv_desc_pool *)
668 nulldrv_base_create(dev, sizeof(*pool),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600669 VK_DBG_OBJECT_DESCRIPTOR_POOL);
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800670 if (!pool)
Tony Barbour8205d902015-04-16 15:59:00 -0600671 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700672
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800673 pool->dev = dev;
David Pinedo0257fbf2015-02-02 18:02:40 -0700674
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800675 *pool_ret = pool;
David Pinedo0257fbf2015-02-02 18:02:40 -0700676
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600677 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700678}
679
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600680static VkResult nulldrv_desc_set_create(struct nulldrv_dev *dev,
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800681 struct nulldrv_desc_pool *pool,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600682 VkDescriptorSetUsage usage,
David Pinedo0257fbf2015-02-02 18:02:40 -0700683 const struct nulldrv_desc_layout *layout,
684 struct nulldrv_desc_set **set_ret)
685{
686 struct nulldrv_desc_set *set;
687
688 set = (struct nulldrv_desc_set *)
689 nulldrv_base_create(dev, sizeof(*set),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600690 VK_DBG_OBJECT_DESCRIPTOR_SET);
David Pinedo0257fbf2015-02-02 18:02:40 -0700691 if (!set)
Tony Barbour8205d902015-04-16 15:59:00 -0600692 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700693
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800694 set->ooxx = dev->desc_ooxx;
David Pinedo0257fbf2015-02-02 18:02:40 -0700695 set->layout = layout;
696 *set_ret = set;
697
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600698 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700699}
700
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600701static struct nulldrv_desc_pool *nulldrv_desc_pool(VkDescriptorPool pool)
David Pinedo0257fbf2015-02-02 18:02:40 -0700702{
Chia-I Wu8d24b3b2015-03-26 13:14:16 +0800703 return (struct nulldrv_desc_pool *) pool;
David Pinedo0257fbf2015-02-02 18:02:40 -0700704}
705
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600706static VkResult nulldrv_fb_create(struct nulldrv_dev *dev,
707 const VkFramebufferCreateInfo* info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700708 struct nulldrv_framebuffer ** fb_ret)
709{
710
711 struct nulldrv_framebuffer *fb;
712 fb = (struct nulldrv_framebuffer *) nulldrv_base_create(dev, sizeof(*fb),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600713 VK_DBG_OBJECT_FRAMEBUFFER);
David Pinedo0257fbf2015-02-02 18:02:40 -0700714 if (!fb)
Tony Barbour8205d902015-04-16 15:59:00 -0600715 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700716
717 *fb_ret = fb;
718
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600719 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700720
721}
722
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600723static VkResult nulldrv_render_pass_create(struct nulldrv_dev *dev,
724 const VkRenderPassCreateInfo* info,
David Pinedo0257fbf2015-02-02 18:02:40 -0700725 struct nulldrv_render_pass** rp_ret)
726{
727 struct nulldrv_render_pass *rp;
728 rp = (struct nulldrv_render_pass *) nulldrv_base_create(dev, sizeof(*rp),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600729 VK_DBG_OBJECT_RENDER_PASS);
David Pinedo0257fbf2015-02-02 18:02:40 -0700730 if (!rp)
Tony Barbour8205d902015-04-16 15:59:00 -0600731 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -0700732
733 *rp_ret = rp;
734
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600735 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700736}
737
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600738static struct nulldrv_buf *nulldrv_buf(VkBuffer buf)
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700739{
740 return (struct nulldrv_buf *) buf;
741}
742
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600743static VkResult nulldrv_buf_view_create(struct nulldrv_dev *dev,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600744 const VkBufferViewCreateInfo *info,
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700745 struct nulldrv_buf_view **view_ret)
746{
747 struct nulldrv_buf *buf = nulldrv_buf(info->buffer);
748 struct nulldrv_buf_view *view;
749
750 view = (struct nulldrv_buf_view *) nulldrv_base_create(dev, sizeof(*view),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600751 VK_DBG_OBJECT_BUFFER_VIEW);
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700752 if (!view)
Tony Barbour8205d902015-04-16 15:59:00 -0600753 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700754
755 view->buf = buf;
756
757 *view_ret = view;
758
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600759 return VK_SUCCESS;
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700760}
761
David Pinedo0257fbf2015-02-02 18:02:40 -0700762
763//*********************************************
764// Driver entry points
765//*********************************************
766
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600767ICD_EXPORT VkResult VKAPI vkCreateBuffer(
768 VkDevice device,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600769 const VkBufferCreateInfo* pCreateInfo,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600770 VkBuffer* pBuffer)
David Pinedo0257fbf2015-02-02 18:02:40 -0700771{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700772 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -0700773 struct nulldrv_dev *dev = nulldrv_dev(device);
774
775 return nulldrv_buf_create(dev, pCreateInfo, (struct nulldrv_buf **) pBuffer);
776}
777
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600778ICD_EXPORT VkResult VKAPI vkCreateCommandBuffer(
779 VkDevice device,
780 const VkCmdBufferCreateInfo* pCreateInfo,
781 VkCmdBuffer* pCmdBuffer)
David Pinedo0257fbf2015-02-02 18:02:40 -0700782{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700783 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -0700784 struct nulldrv_dev *dev = nulldrv_dev(device);
785
786 return nulldrv_cmd_create(dev, pCreateInfo,
787 (struct nulldrv_cmd **) pCmdBuffer);
788}
789
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600790ICD_EXPORT VkResult VKAPI vkBeginCommandBuffer(
791 VkCmdBuffer cmdBuffer,
792 const VkCmdBufferBeginInfo *info)
David Pinedo0257fbf2015-02-02 18:02:40 -0700793{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700794 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600795 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700796}
797
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600798ICD_EXPORT VkResult VKAPI vkEndCommandBuffer(
799 VkCmdBuffer cmdBuffer)
David Pinedo0257fbf2015-02-02 18:02:40 -0700800{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700801 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600802 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700803}
804
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600805ICD_EXPORT VkResult VKAPI vkResetCommandBuffer(
806 VkCmdBuffer cmdBuffer)
David Pinedo0257fbf2015-02-02 18:02:40 -0700807{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700808 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600809 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -0700810}
811
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600812ICD_EXPORT void VKAPI vkCmdInitAtomicCounters(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600813 VkCmdBuffer cmdBuffer,
814 VkPipelineBindPoint pipelineBindPoint,
David Pinedo0257fbf2015-02-02 18:02:40 -0700815 uint32_t startCounter,
816 uint32_t counterCount,
817 const uint32_t* pData)
818{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700819 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -0700820}
821
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600822ICD_EXPORT void VKAPI vkCmdLoadAtomicCounters(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600823 VkCmdBuffer cmdBuffer,
824 VkPipelineBindPoint pipelineBindPoint,
David Pinedo0257fbf2015-02-02 18:02:40 -0700825 uint32_t startCounter,
826 uint32_t counterCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600827 VkBuffer srcBuffer,
Tony Barbour8205d902015-04-16 15:59:00 -0600828 VkDeviceSize srcOffset)
David Pinedo0257fbf2015-02-02 18:02:40 -0700829{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700830 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -0700831}
832
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600833ICD_EXPORT void VKAPI vkCmdSaveAtomicCounters(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600834 VkCmdBuffer cmdBuffer,
835 VkPipelineBindPoint pipelineBindPoint,
David Pinedo0257fbf2015-02-02 18:02:40 -0700836 uint32_t startCounter,
837 uint32_t counterCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600838 VkBuffer destBuffer,
Tony Barbour8205d902015-04-16 15:59:00 -0600839 VkDeviceSize destOffset)
David Pinedo0257fbf2015-02-02 18:02:40 -0700840{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700841 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -0700842}
843
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600844ICD_EXPORT void VKAPI vkCmdDbgMarkerBegin(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600845 VkCmdBuffer cmdBuffer,
David Pinedo0257fbf2015-02-02 18:02:40 -0700846 const char* pMarker)
847{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700848 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -0700849}
850
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600851ICD_EXPORT void VKAPI vkCmdDbgMarkerEnd(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600852 VkCmdBuffer cmdBuffer)
David Pinedo0257fbf2015-02-02 18:02:40 -0700853{
David Pinedo8e9cb3b2015-02-10 15:02:08 -0700854 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -0700855}
856
Ian Elliott64a68e12015-04-16 11:57:46 -0600857static const VkFormat nulldrv_presentable_formats[] = {
858 VK_FORMAT_B8G8R8A8_UNORM,
859};
860
861ICD_EXPORT VkResult VKAPI vkGetDisplayInfoWSI(
862 VkDisplayWSI display,
863 VkDisplayInfoTypeWSI infoType,
864 size_t* pDataSize,
865 void* pData)
866{
867 VkResult ret = VK_SUCCESS;
868
869 NULLDRV_LOG_FUNC;
870
871 if (!pDataSize)
872 return VK_ERROR_INVALID_POINTER;
873
874 switch (infoType) {
875 case VK_DISPLAY_INFO_TYPE_FORMAT_PROPERTIES_WSI:
876 {
877 VkDisplayFormatPropertiesWSI *dst = pData;
878 size_t size_ret;
879 uint32_t i;
880
881 size_ret = sizeof(*dst) * ARRAY_SIZE(nulldrv_presentable_formats);
882
883 if (dst && *pDataSize < size_ret)
884 return VK_ERROR_INVALID_VALUE;
885
886 *pDataSize = size_ret;
887 if (!dst)
888 return VK_SUCCESS;
889
890 for (i = 0; i < ARRAY_SIZE(nulldrv_presentable_formats); i++)
891 dst[i].swapChainFormat = nulldrv_presentable_formats[i];
892 }
893 break;
894 default:
895 ret = VK_ERROR_INVALID_VALUE;
896 break;
897 }
898
899 return ret;
900}
901
902ICD_EXPORT VkResult VKAPI vkCreateSwapChainWSI(
903 VkDevice device,
904 const VkSwapChainCreateInfoWSI* pCreateInfo,
905 VkSwapChainWSI* pSwapChain)
906{
907 NULLDRV_LOG_FUNC;
908 struct nulldrv_dev *dev = nulldrv_dev(device);
909 struct nulldrv_swap_chain *sc;
910
911 sc = (struct nulldrv_swap_chain *) nulldrv_base_create(dev, sizeof(*sc),
912 /*VK_OBJECT_TYPE_SWAP_CHAIN_WSI*//* FIXME: DELETE THIS HACK: */VK_DBG_OBJECT_QUEUE);
913 if (!sc) {
914 return VK_ERROR_OUT_OF_HOST_MEMORY;
915 }
916 sc->dev = dev;
917
Tony Barbour11e76ac2015-04-20 16:28:46 -0600918 *pSwapChain = (VkSwapChainWSI) sc;
Ian Elliott64a68e12015-04-16 11:57:46 -0600919
920 return VK_SUCCESS;
921}
922
923ICD_EXPORT VkResult VKAPI vkDestroySwapChainWSI(
924 VkSwapChainWSI swapChain)
925{
926 NULLDRV_LOG_FUNC;
927 struct nulldrv_swap_chain *sc = (struct nulldrv_swap_chain *) swapChain;
928
929 free(sc);
930
931 return VK_SUCCESS;
932}
933
934ICD_EXPORT VkResult VKAPI vkGetSwapChainInfoWSI(
935 VkSwapChainWSI swapChain,
936 VkSwapChainInfoTypeWSI infoType,
937 size_t* pDataSize,
938 void* pData)
939{
940 NULLDRV_LOG_FUNC;
941 struct nulldrv_swap_chain *sc = (struct nulldrv_swap_chain *) swapChain;
942 struct nulldrv_dev *dev = sc->dev;
943 VkResult ret = VK_SUCCESS;
944
945 if (!pDataSize)
946 return VK_ERROR_INVALID_POINTER;
947
948 switch (infoType) {
949 case VK_SWAP_CHAIN_INFO_TYPE_PERSISTENT_IMAGES_WSI:
950 {
951 VkSwapChainImageInfoWSI *images;
952 const size_t size = sizeof(*images) * 2;
953 uint32_t i;
954
955 if (pData && *pDataSize < size)
956 return VK_ERROR_INVALID_VALUE;
957
958 *pDataSize = size;
959 if (!pData)
960 return VK_SUCCESS;
961
962 images = (VkSwapChainImageInfoWSI *) pData;
963 for (i = 0; i < 2; i++) {
964 struct nulldrv_img *img;
965 struct nulldrv_mem *mem;
966
967 img = (struct nulldrv_img *) nulldrv_base_create(dev,
968 sizeof(*img),
969 VK_DBG_OBJECT_IMAGE);
970 if (!img)
971 return VK_ERROR_OUT_OF_HOST_MEMORY;
972
973 mem = (struct nulldrv_mem *) nulldrv_base_create(dev,
974 sizeof(*mem),
975 VK_DBG_OBJECT_GPU_MEMORY);
976 if (!mem)
977 return VK_ERROR_OUT_OF_HOST_MEMORY;
978
979 images[i].image = (VkImage) img;
980 images[i].memory = (VkDeviceMemory) mem;
981 }
982 }
983 break;
984 default:
985 ret = VK_ERROR_INVALID_VALUE;
986 break;
987 }
988
989 return ret;
990}
991
992ICD_EXPORT VkResult VKAPI vkQueuePresentWSI(
993 VkQueue queue_,
994 const VkPresentInfoWSI* pPresentInfo)
995{
996 NULLDRV_LOG_FUNC;
997
998 return VK_SUCCESS;
999}
1000
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001001ICD_EXPORT void VKAPI vkCmdCopyBuffer(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001002 VkCmdBuffer cmdBuffer,
1003 VkBuffer srcBuffer,
1004 VkBuffer destBuffer,
David Pinedo0257fbf2015-02-02 18:02:40 -07001005 uint32_t regionCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001006 const VkBufferCopy* pRegions)
David Pinedo0257fbf2015-02-02 18:02:40 -07001007{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001008 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001009}
1010
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001011ICD_EXPORT void VKAPI vkCmdCopyImage(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001012 VkCmdBuffer cmdBuffer,
1013 VkImage srcImage,
1014 VkImageLayout srcImageLayout,
1015 VkImage destImage,
1016 VkImageLayout destImageLayout,
David Pinedo0257fbf2015-02-02 18:02:40 -07001017 uint32_t regionCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001018 const VkImageCopy* pRegions)
David Pinedo0257fbf2015-02-02 18:02:40 -07001019{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001020 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001021}
1022
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001023ICD_EXPORT void VKAPI vkCmdBlitImage(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001024 VkCmdBuffer cmdBuffer,
Mark Lobodzinski20f68592015-05-22 14:43:25 -05001025 VkImage srcImage,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001026 VkImageLayout srcImageLayout,
Mark Lobodzinski20f68592015-05-22 14:43:25 -05001027 VkImage destImage,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001028 VkImageLayout destImageLayout,
Mark Lobodzinski20f68592015-05-22 14:43:25 -05001029 uint32_t regionCount,
1030 const VkImageBlit* pRegions,
1031 VkTexFilter filter)
Courtney Goeltzenleuchterb787a1e2015-03-08 17:02:18 -06001032{
1033 NULLDRV_LOG_FUNC;
1034}
1035
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001036ICD_EXPORT void VKAPI vkCmdCopyBufferToImage(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001037 VkCmdBuffer cmdBuffer,
1038 VkBuffer srcBuffer,
1039 VkImage destImage,
1040 VkImageLayout destImageLayout,
David Pinedo0257fbf2015-02-02 18:02:40 -07001041 uint32_t regionCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001042 const VkBufferImageCopy* pRegions)
David Pinedo0257fbf2015-02-02 18:02:40 -07001043{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001044 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001045}
1046
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001047ICD_EXPORT void VKAPI vkCmdCopyImageToBuffer(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001048 VkCmdBuffer cmdBuffer,
1049 VkImage srcImage,
1050 VkImageLayout srcImageLayout,
1051 VkBuffer destBuffer,
David Pinedo0257fbf2015-02-02 18:02:40 -07001052 uint32_t regionCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001053 const VkBufferImageCopy* pRegions)
David Pinedo0257fbf2015-02-02 18:02:40 -07001054{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001055 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001056}
1057
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001058ICD_EXPORT void VKAPI vkCmdUpdateBuffer(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001059 VkCmdBuffer cmdBuffer,
1060 VkBuffer destBuffer,
Tony Barbour8205d902015-04-16 15:59:00 -06001061 VkDeviceSize destOffset,
1062 VkDeviceSize dataSize,
David Pinedo0257fbf2015-02-02 18:02:40 -07001063 const uint32_t* pData)
1064{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001065 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001066}
1067
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001068ICD_EXPORT void VKAPI vkCmdFillBuffer(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001069 VkCmdBuffer cmdBuffer,
1070 VkBuffer destBuffer,
Tony Barbour8205d902015-04-16 15:59:00 -06001071 VkDeviceSize destOffset,
1072 VkDeviceSize fillSize,
David Pinedo0257fbf2015-02-02 18:02:40 -07001073 uint32_t data)
1074{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001075 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001076}
1077
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001078ICD_EXPORT void VKAPI vkCmdClearColorImage(
Courtney Goeltzenleuchterda4a99e2015-04-23 17:49:22 -06001079 VkCmdBuffer cmdBuffer,
1080 VkImage image,
1081 VkImageLayout imageLayout,
1082 const VkClearColor *pColor,
1083 uint32_t rangeCount,
1084 const VkImageSubresourceRange* pRanges)
David Pinedo0257fbf2015-02-02 18:02:40 -07001085{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001086 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001087}
1088
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001089ICD_EXPORT void VKAPI vkCmdClearDepthStencil(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001090 VkCmdBuffer cmdBuffer,
1091 VkImage image,
1092 VkImageLayout imageLayout,
David Pinedo0257fbf2015-02-02 18:02:40 -07001093 float depth,
1094 uint32_t stencil,
1095 uint32_t rangeCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001096 const VkImageSubresourceRange* pRanges)
David Pinedo0257fbf2015-02-02 18:02:40 -07001097{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001098 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001099}
1100
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001101ICD_EXPORT void VKAPI vkCmdResolveImage(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001102 VkCmdBuffer cmdBuffer,
1103 VkImage srcImage,
1104 VkImageLayout srcImageLayout,
1105 VkImage destImage,
1106 VkImageLayout destImageLayout,
Tony Barbour11f74372015-04-13 15:02:52 -06001107 uint32_t regionCount,
1108 const VkImageResolve* pRegions)
David Pinedo0257fbf2015-02-02 18:02:40 -07001109{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001110 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001111}
1112
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001113ICD_EXPORT void VKAPI vkCmdBeginQuery(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001114 VkCmdBuffer cmdBuffer,
1115 VkQueryPool queryPool,
David Pinedo0257fbf2015-02-02 18:02:40 -07001116 uint32_t slot,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001117 VkFlags flags)
David Pinedo0257fbf2015-02-02 18:02:40 -07001118{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001119 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001120}
1121
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001122ICD_EXPORT void VKAPI vkCmdEndQuery(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001123 VkCmdBuffer cmdBuffer,
1124 VkQueryPool queryPool,
David Pinedo0257fbf2015-02-02 18:02:40 -07001125 uint32_t slot)
1126{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001127 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001128}
1129
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001130ICD_EXPORT void VKAPI vkCmdResetQueryPool(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001131 VkCmdBuffer cmdBuffer,
1132 VkQueryPool queryPool,
David Pinedo0257fbf2015-02-02 18:02:40 -07001133 uint32_t startQuery,
1134 uint32_t queryCount)
1135{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001136 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001137}
1138
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001139ICD_EXPORT void VKAPI vkCmdSetEvent(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001140 VkCmdBuffer cmdBuffer,
1141 VkEvent event_,
1142 VkPipeEvent pipeEvent)
David Pinedo0257fbf2015-02-02 18:02:40 -07001143{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001144 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001145}
1146
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001147ICD_EXPORT void VKAPI vkCmdResetEvent(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001148 VkCmdBuffer cmdBuffer,
1149 VkEvent event_,
1150 VkPipeEvent pipeEvent)
David Pinedo0257fbf2015-02-02 18:02:40 -07001151{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001152 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001153}
1154
Ian Elliott63f1edb2015-04-16 18:10:19 -06001155ICD_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
1156 VkCmdBuffer cmdBuffer,
1157 VkQueryPool queryPool,
1158 uint32_t startQuery,
1159 uint32_t queryCount,
1160 VkBuffer destBuffer,
Tony Barbour8205d902015-04-16 15:59:00 -06001161 VkDeviceSize destOffset,
1162 VkDeviceSize destStride,
Ian Elliott63f1edb2015-04-16 18:10:19 -06001163 VkFlags flags)
1164{
1165 NULLDRV_LOG_FUNC;
1166}
1167
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001168ICD_EXPORT void VKAPI vkCmdWriteTimestamp(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001169 VkCmdBuffer cmdBuffer,
1170 VkTimestampType timestampType,
1171 VkBuffer destBuffer,
Tony Barbour8205d902015-04-16 15:59:00 -06001172 VkDeviceSize destOffset)
David Pinedo0257fbf2015-02-02 18:02:40 -07001173{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001174 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001175}
1176
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001177ICD_EXPORT void VKAPI vkCmdBindPipeline(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001178 VkCmdBuffer cmdBuffer,
1179 VkPipelineBindPoint pipelineBindPoint,
1180 VkPipeline pipeline)
David Pinedo0257fbf2015-02-02 18:02:40 -07001181{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001182 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001183}
1184
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001185ICD_EXPORT void VKAPI vkCmdBindDynamicStateObject(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001186 VkCmdBuffer cmdBuffer,
1187 VkStateBindPoint stateBindPoint,
1188 VkDynamicStateObject state)
David Pinedo0257fbf2015-02-02 18:02:40 -07001189{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001190 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001191}
1192
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001193ICD_EXPORT void VKAPI vkCmdBindDescriptorSets(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001194 VkCmdBuffer cmdBuffer,
1195 VkPipelineBindPoint pipelineBindPoint,
Cody Northrop1a01b1d2015-04-16 13:41:56 -06001196 uint32_t firstSet,
1197 uint32_t setCount,
1198 const VkDescriptorSet* pDescriptorSets,
1199 uint32_t dynamicOffsetCount,
1200 const uint32_t* pDynamicOffsets)
David Pinedo0257fbf2015-02-02 18:02:40 -07001201{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001202 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001203}
1204
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06001205ICD_EXPORT void VKAPI vkCmdBindVertexBuffers(
1206 VkCmdBuffer cmdBuffer,
1207 uint32_t startBinding,
1208 uint32_t bindingCount,
1209 const VkBuffer* pBuffers,
Tony Barbour8205d902015-04-16 15:59:00 -06001210 const VkDeviceSize* pOffsets)
David Pinedo0257fbf2015-02-02 18:02:40 -07001211{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001212 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001213}
1214
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001215ICD_EXPORT void VKAPI vkCmdBindIndexBuffer(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001216 VkCmdBuffer cmdBuffer,
1217 VkBuffer buffer,
Tony Barbour8205d902015-04-16 15:59:00 -06001218 VkDeviceSize offset,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001219 VkIndexType indexType)
David Pinedo0257fbf2015-02-02 18:02:40 -07001220{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001221 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001222}
1223
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001224ICD_EXPORT void VKAPI vkCmdDraw(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001225 VkCmdBuffer cmdBuffer,
David Pinedo0257fbf2015-02-02 18:02:40 -07001226 uint32_t firstVertex,
1227 uint32_t vertexCount,
1228 uint32_t firstInstance,
1229 uint32_t instanceCount)
1230{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001231 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001232}
1233
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001234ICD_EXPORT void VKAPI vkCmdDrawIndexed(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001235 VkCmdBuffer cmdBuffer,
David Pinedo0257fbf2015-02-02 18:02:40 -07001236 uint32_t firstIndex,
1237 uint32_t indexCount,
1238 int32_t vertexOffset,
1239 uint32_t firstInstance,
1240 uint32_t instanceCount)
1241{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001242 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001243}
1244
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001245ICD_EXPORT void VKAPI vkCmdDrawIndirect(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001246 VkCmdBuffer cmdBuffer,
1247 VkBuffer buffer,
Tony Barbour8205d902015-04-16 15:59:00 -06001248 VkDeviceSize offset,
David Pinedo0257fbf2015-02-02 18:02:40 -07001249 uint32_t count,
1250 uint32_t stride)
1251{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001252 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001253}
1254
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001255ICD_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001256 VkCmdBuffer cmdBuffer,
1257 VkBuffer buffer,
Tony Barbour8205d902015-04-16 15:59:00 -06001258 VkDeviceSize offset,
David Pinedo0257fbf2015-02-02 18:02:40 -07001259 uint32_t count,
1260 uint32_t stride)
1261{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001262 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001263}
1264
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001265ICD_EXPORT void VKAPI vkCmdDispatch(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001266 VkCmdBuffer cmdBuffer,
David Pinedo0257fbf2015-02-02 18:02:40 -07001267 uint32_t x,
1268 uint32_t y,
1269 uint32_t z)
1270{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001271 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001272}
1273
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001274ICD_EXPORT void VKAPI vkCmdDispatchIndirect(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001275 VkCmdBuffer cmdBuffer,
1276 VkBuffer buffer,
Tony Barbour8205d902015-04-16 15:59:00 -06001277 VkDeviceSize offset)
David Pinedo0257fbf2015-02-02 18:02:40 -07001278{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001279 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001280}
1281
Tony Barbour8205d902015-04-16 15:59:00 -06001282void VKAPI vkCmdWaitEvents(
1283 VkCmdBuffer cmdBuffer,
1284 VkWaitEvent waitEvent,
1285 uint32_t eventCount,
1286 const VkEvent* pEvents,
1287 uint32_t memBarrierCount,
1288 const void** ppMemBarriers)
David Pinedo0257fbf2015-02-02 18:02:40 -07001289{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001290 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001291}
1292
Tony Barbour8205d902015-04-16 15:59:00 -06001293void VKAPI vkCmdPipelineBarrier(
1294 VkCmdBuffer cmdBuffer,
1295 VkWaitEvent waitEvent,
1296 uint32_t pipeEventCount,
1297 const VkPipeEvent* pPipeEvents,
1298 uint32_t memBarrierCount,
1299 const void** ppMemBarriers)
David Pinedo0257fbf2015-02-02 18:02:40 -07001300{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001301 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001302}
1303
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001304ICD_EXPORT VkResult VKAPI vkCreateDevice(
Tony Barbour8205d902015-04-16 15:59:00 -06001305 VkPhysicalDevice gpu_,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -06001306 const VkDeviceCreateInfo* pCreateInfo,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001307 VkDevice* pDevice)
David Pinedo0257fbf2015-02-02 18:02:40 -07001308{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001309 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001310 struct nulldrv_gpu *gpu = nulldrv_gpu(gpu_);
1311 return nulldrv_dev_create(gpu, pCreateInfo, (struct nulldrv_dev**)pDevice);
1312}
1313
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001314ICD_EXPORT VkResult VKAPI vkDestroyDevice(
1315 VkDevice device)
David Pinedo0257fbf2015-02-02 18:02:40 -07001316{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001317 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001318 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001319}
1320
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001321ICD_EXPORT VkResult VKAPI vkGetDeviceQueue(
1322 VkDevice device,
Courtney Goeltzenleuchterf3168062015-03-05 18:09:39 -07001323 uint32_t queueNodeIndex,
David Pinedo0257fbf2015-02-02 18:02:40 -07001324 uint32_t queueIndex,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001325 VkQueue* pQueue)
David Pinedo0257fbf2015-02-02 18:02:40 -07001326{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001327 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001328 struct nulldrv_dev *dev = nulldrv_dev(device);
Mike Stroyan230e6252015-04-17 12:36:38 -06001329 *pQueue = (VkQueue) dev->queues[0];
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001330 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001331}
1332
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001333ICD_EXPORT VkResult VKAPI vkDeviceWaitIdle(
1334 VkDevice device)
David Pinedo0257fbf2015-02-02 18:02:40 -07001335{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001336 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001337 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001338}
1339
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001340ICD_EXPORT VkResult VKAPI vkDbgSetValidationLevel(
1341 VkDevice device,
1342 VkValidationLevel validationLevel)
David Pinedo0257fbf2015-02-02 18:02:40 -07001343{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001344 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001345 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001346}
1347
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001348ICD_EXPORT VkResult VKAPI vkDbgSetMessageFilter(
1349 VkDevice device,
David Pinedo0257fbf2015-02-02 18:02:40 -07001350 int32_t msgCode,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001351 VK_DBG_MSG_FILTER filter)
David Pinedo0257fbf2015-02-02 18:02:40 -07001352{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001353 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001354 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001355}
1356
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001357ICD_EXPORT VkResult VKAPI vkDbgSetDeviceOption(
1358 VkDevice device,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001359 VK_DBG_DEVICE_OPTION dbgOption,
David Pinedo0257fbf2015-02-02 18:02:40 -07001360 size_t dataSize,
1361 const void* pData)
1362{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001363 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001364 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001365}
1366
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001367ICD_EXPORT VkResult VKAPI vkCreateEvent(
1368 VkDevice device,
1369 const VkEventCreateInfo* pCreateInfo,
1370 VkEvent* pEvent)
David Pinedo0257fbf2015-02-02 18:02:40 -07001371{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001372 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001373 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001374}
1375
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001376ICD_EXPORT VkResult VKAPI vkGetEventStatus(
Mike Stroyan230e6252015-04-17 12:36:38 -06001377 VkDevice device,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001378 VkEvent event_)
David Pinedo0257fbf2015-02-02 18:02:40 -07001379{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001380 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001381 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001382}
1383
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001384ICD_EXPORT VkResult VKAPI vkSetEvent(
Mike Stroyan230e6252015-04-17 12:36:38 -06001385 VkDevice device,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001386 VkEvent event_)
David Pinedo0257fbf2015-02-02 18:02:40 -07001387{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001388 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001389 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001390}
1391
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001392ICD_EXPORT VkResult VKAPI vkResetEvent(
Mike Stroyan230e6252015-04-17 12:36:38 -06001393 VkDevice device,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001394 VkEvent event_)
David Pinedo0257fbf2015-02-02 18:02:40 -07001395{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001396 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001397 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001398}
1399
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001400ICD_EXPORT VkResult VKAPI vkCreateFence(
1401 VkDevice device,
1402 const VkFenceCreateInfo* pCreateInfo,
1403 VkFence* pFence)
David Pinedo0257fbf2015-02-02 18:02:40 -07001404{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001405 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001406 struct nulldrv_dev *dev = nulldrv_dev(device);
1407
1408 return nulldrv_fence_create(dev, pCreateInfo,
1409 (struct nulldrv_fence **) pFence);
1410}
1411
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001412ICD_EXPORT VkResult VKAPI vkGetFenceStatus(
Mike Stroyan230e6252015-04-17 12:36:38 -06001413 VkDevice device,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001414 VkFence fence_)
David Pinedo0257fbf2015-02-02 18:02:40 -07001415{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001416 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001417 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001418}
1419
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001420ICD_EXPORT VkResult VKAPI vkResetFences(
1421 VkDevice device,
Courtney Goeltzenleuchter1042b472015-04-14 19:07:06 -06001422 uint32_t fenceCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001423 VkFence* pFences)
Courtney Goeltzenleuchter1042b472015-04-14 19:07:06 -06001424{
1425 NULLDRV_LOG_FUNC;
1426 return VK_SUCCESS;
1427}
1428
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001429ICD_EXPORT VkResult VKAPI vkWaitForFences(
1430 VkDevice device,
David Pinedo0257fbf2015-02-02 18:02:40 -07001431 uint32_t fenceCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001432 const VkFence* pFences,
David Pinedo0257fbf2015-02-02 18:02:40 -07001433 bool32_t waitAll,
1434 uint64_t timeout)
1435{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001436 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001437 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001438}
1439
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001440ICD_EXPORT VkResult VKAPI vkGetFormatInfo(
1441 VkDevice device,
1442 VkFormat format,
1443 VkFormatInfoType infoType,
David Pinedo0257fbf2015-02-02 18:02:40 -07001444 size_t* pDataSize,
1445 void* pData)
1446{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001447 NULLDRV_LOG_FUNC;
Ian Elliott64a68e12015-04-16 11:57:46 -06001448 VkFormatProperties *fmt = (VkFormatProperties *) pData;
1449 VkResult ret = VK_SUCCESS;
1450
1451 switch (infoType) {
1452 case VK_FORMAT_INFO_TYPE_PROPERTIES:
1453 *pDataSize = sizeof(VkFormatProperties);
1454 if (pData == NULL)
1455 return ret;
1456 fmt->linearTilingFeatures = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
1457 fmt->optimalTilingFeatures = fmt->linearTilingFeatures;
1458 break;
1459 default:
1460 ret = VK_ERROR_INVALID_VALUE;
1461 break;
1462 }
1463
1464 return ret;
David Pinedo0257fbf2015-02-02 18:02:40 -07001465}
1466
Tony Barbour8205d902015-04-16 15:59:00 -06001467ICD_EXPORT VkResult VKAPI vkGetPhysicalDeviceInfo(
1468 VkPhysicalDevice gpu_,
1469 VkPhysicalDeviceInfoType infoType,
David Pinedo0257fbf2015-02-02 18:02:40 -07001470 size_t* pDataSize,
1471 void* pData)
1472{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001473 NULLDRV_LOG_FUNC;
Ian Elliott64a68e12015-04-16 11:57:46 -06001474 VkResult ret = VK_SUCCESS;
1475
Ian Elliott32536f92015-04-21 16:41:02 -06001476 if (infoType == VK_PHYSICAL_DEVICE_INFO_TYPE_DISPLAY_PROPERTIES_WSI) {
1477 // NOTE: Handle this extension value as a special case:
1478 struct nulldrv_display *display;
1479 VkDisplayPropertiesWSI *props =
1480 (VkDisplayPropertiesWSI *) pData;
1481 *pDataSize = sizeof(VkDisplayPropertiesWSI);
1482 if (pData == NULL) {
1483 return ret;
1484 }
1485 display = (struct nulldrv_display *) nulldrv_base_create(NULL, sizeof(*display),
1486 /*VK_OBJECT_TYPE_SWAP_CHAIN_WSI*//* FIXME: DELETE THIS HACK: */VK_DBG_OBJECT_QUEUE);
1487 props->display = (VkDisplayWSI) display;
1488 props->physicalResolution.width = 1920;
1489 props->physicalResolution.height = 1080;
1490
1491 return ret;
1492 }
1493
Ian Elliott64a68e12015-04-16 11:57:46 -06001494 switch (infoType) {
1495 case VK_PHYSICAL_DEVICE_INFO_TYPE_PROPERTIES:
1496 {
1497 VkPhysicalDeviceProperties *props =
1498 (VkPhysicalDeviceProperties *) pData;
1499 *pDataSize = sizeof(VkPhysicalDeviceProperties);
1500 if (pData == NULL) {
1501 return ret;
1502 }
1503 props->apiVersion = VK_API_VERSION;
1504 props->driverVersion = 0; // Appropriate that the nulldrv have 0's
1505 props->vendorId = 0;
1506 props->deviceId = 0;
1507 props->deviceType = VK_PHYSICAL_DEVICE_TYPE_OTHER;
1508 strncpy(props->deviceName, "nulldrv", strlen("nulldrv"));
1509 props->maxInlineMemoryUpdateSize = 0;
1510 props->maxBoundDescriptorSets = 0;
1511 props->maxThreadGroupSize = 0;
1512 props->timestampFrequency = 0;
1513 props->multiColorAttachmentClears = false;
1514 break;
1515 }
1516 case VK_PHYSICAL_DEVICE_INFO_TYPE_PERFORMANCE:
1517 {
1518 VkPhysicalDevicePerformance *perf =
1519 (VkPhysicalDevicePerformance *) pData;
1520 *pDataSize = sizeof(VkPhysicalDevicePerformance);
1521 if (pData == NULL) {
1522 return ret;
1523 }
1524 perf->maxDeviceClock = 1.0f;
1525 perf->aluPerClock = 1.0f;
1526 perf->texPerClock = 1.0f;
1527 perf->primsPerClock = 1.0f;
1528 perf->pixelsPerClock = 1.0f;
1529 break;
1530 }
1531 case VK_PHYSICAL_DEVICE_INFO_TYPE_QUEUE_PROPERTIES:
1532 {
1533 VkPhysicalDeviceQueueProperties *props =
1534 (VkPhysicalDeviceQueueProperties *) pData;
1535 *pDataSize = sizeof(VkPhysicalDeviceQueueProperties);
1536 if (pData == NULL) {
1537 return ret;
1538 }
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -05001539 props->queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_SPARSE_MEMMGR_BIT;
Ian Elliott64a68e12015-04-16 11:57:46 -06001540 props->queueCount = 1;
1541 props->maxAtomicCounters = 1;
1542 props->supportsTimestamps = false;
Ian Elliott64a68e12015-04-16 11:57:46 -06001543 break;
1544 }
1545 default:
1546/* FIXME: WRITE THE REAL CODE*/return ret;
1547 break;
1548 }
1549
1550 return ret;
David Pinedo0257fbf2015-02-02 18:02:40 -07001551}
1552
Jon Ashburneb2728b2015-04-10 14:33:07 -06001553ICD_EXPORT VkResult VKAPI vkGetGlobalExtensionInfo(
1554 VkExtensionInfoType infoType,
1555 uint32_t extensionIndex,
1556 size_t* pDataSize,
1557 void* pData)
1558{
Ian Elliott64a68e12015-04-16 11:57:46 -06001559 VkExtensionProperties *ext_props;
Jon Ashburneb2728b2015-04-10 14:33:07 -06001560 uint32_t *count;
1561
1562 if (pDataSize == NULL)
1563 return VK_ERROR_INVALID_POINTER;
1564
1565 switch (infoType) {
1566 case VK_EXTENSION_INFO_TYPE_COUNT:
1567 *pDataSize = sizeof(uint32_t);
1568 if (pData == NULL)
1569 return VK_SUCCESS;
1570 count = (uint32_t *) pData;
Ian Elliott64a68e12015-04-16 11:57:46 -06001571 *count = 1;
Jon Ashburneb2728b2015-04-10 14:33:07 -06001572 break;
1573 case VK_EXTENSION_INFO_TYPE_PROPERTIES:
Ian Elliott64a68e12015-04-16 11:57:46 -06001574 *pDataSize = sizeof(VkExtensionProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -06001575 if (pData == NULL)
1576 return VK_SUCCESS;
Ian Elliott64a68e12015-04-16 11:57:46 -06001577 else {
1578 ext_props = (VkExtensionProperties *) pData;
1579 ext_props->version = VK_WSI_LUNARG_REVISION;
1580 strncpy(ext_props->extName, "VK_WSI_LunarG",
1581 strlen("VK_WSI_LunarG")+1);
1582 return VK_SUCCESS;
1583 }
Jon Ashburneb2728b2015-04-10 14:33:07 -06001584 break;
1585 default:
1586 return VK_ERROR_INVALID_VALUE;
1587 };
1588
1589 return VK_SUCCESS;
1590}
1591
Tobin Ehlis0ef6ec52015-04-16 12:51:37 -06001592VkResult VKAPI vkGetPhysicalDeviceExtensionInfo(
Tony Barbour8205d902015-04-16 15:59:00 -06001593 VkPhysicalDevice gpu,
Tobin Ehlis0ef6ec52015-04-16 12:51:37 -06001594 VkExtensionInfoType infoType,
1595 uint32_t extensionIndex,
1596 size_t* pDataSize,
1597 void* pData)
David Pinedo0257fbf2015-02-02 18:02:40 -07001598{
Tobin Ehlis0ef6ec52015-04-16 12:51:37 -06001599 uint32_t *count;
1600
1601 if (pDataSize == NULL)
1602 return VK_ERROR_INVALID_POINTER;
1603
1604 switch (infoType) {
1605 case VK_EXTENSION_INFO_TYPE_COUNT:
1606 *pDataSize = sizeof(uint32_t);
1607 if (pData == NULL)
1608 return VK_SUCCESS;
1609 count = (uint32_t *) pData;
1610 *count = 0;
1611 break;
1612 case VK_EXTENSION_INFO_TYPE_PROPERTIES:
1613 *pDataSize = 0;
1614 if (pData == NULL)
1615 return VK_SUCCESS;
1616 return VK_ERROR_INVALID_EXTENSION;
1617 break;
1618 default:
1619 return VK_ERROR_INVALID_VALUE;
1620 };
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001621 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001622}
1623
Tony Barbour8205d902015-04-16 15:59:00 -06001624ICD_EXPORT VkResult VKAPI vkGetMultiDeviceCompatibility(
1625 VkPhysicalDevice gpu0_,
1626 VkPhysicalDevice gpu1_,
1627 VkPhysicalDeviceCompatibilityInfo* pInfo)
David Pinedo0257fbf2015-02-02 18:02:40 -07001628{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001629 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001630 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001631}
1632
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001633ICD_EXPORT VkResult VKAPI vkOpenPeerImage(
1634 VkDevice device,
1635 const VkPeerImageOpenInfo* pOpenInfo,
1636 VkImage* pImage,
Tony Barbour8205d902015-04-16 15:59:00 -06001637 VkDeviceMemory* pMem)
David Pinedo0257fbf2015-02-02 18:02:40 -07001638{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001639 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001640 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001641}
1642
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001643ICD_EXPORT VkResult VKAPI vkCreateImage(
1644 VkDevice device,
1645 const VkImageCreateInfo* pCreateInfo,
1646 VkImage* pImage)
David Pinedo0257fbf2015-02-02 18:02:40 -07001647{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001648 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001649 struct nulldrv_dev *dev = nulldrv_dev(device);
1650
1651 return nulldrv_img_create(dev, pCreateInfo, false,
1652 (struct nulldrv_img **) pImage);
1653}
1654
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001655ICD_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(
Mike Stroyan230e6252015-04-17 12:36:38 -06001656 VkDevice device,
1657 VkImage image,
1658 const VkImageSubresource* pSubresource,
1659 VkSubresourceInfoType infoType,
David Pinedo0257fbf2015-02-02 18:02:40 -07001660 size_t* pDataSize,
1661 void* pData)
1662{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001663 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001664 VkResult ret = VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001665
1666 switch (infoType) {
Tony Barbour8205d902015-04-16 15:59:00 -06001667 case VK_SUBRESOURCE_INFO_TYPE_LAYOUT:
David Pinedo0257fbf2015-02-02 18:02:40 -07001668 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001669 VkSubresourceLayout *layout = (VkSubresourceLayout *) pData;
David Pinedo0257fbf2015-02-02 18:02:40 -07001670
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001671 *pDataSize = sizeof(VkSubresourceLayout);
David Pinedo0257fbf2015-02-02 18:02:40 -07001672
1673 if (pData == NULL)
1674 return ret;
1675 layout->offset = 0;
1676 layout->size = 1;
1677 layout->rowPitch = 4;
1678 layout->depthPitch = 4;
1679 }
1680 break;
1681 default:
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001682 ret = VK_ERROR_INVALID_VALUE;
David Pinedo0257fbf2015-02-02 18:02:40 -07001683 break;
1684 }
1685
1686 return ret;
1687}
1688
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001689ICD_EXPORT VkResult VKAPI vkAllocMemory(
1690 VkDevice device,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -06001691 const VkMemoryAllocInfo* pAllocInfo,
Tony Barbour8205d902015-04-16 15:59:00 -06001692 VkDeviceMemory* pMem)
David Pinedo0257fbf2015-02-02 18:02:40 -07001693{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001694 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001695 struct nulldrv_dev *dev = nulldrv_dev(device);
1696
1697 return nulldrv_mem_alloc(dev, pAllocInfo, (struct nulldrv_mem **) pMem);
1698}
1699
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001700ICD_EXPORT VkResult VKAPI vkFreeMemory(
Mike Stroyan230e6252015-04-17 12:36:38 -06001701 VkDevice device,
Tony Barbour8205d902015-04-16 15:59:00 -06001702 VkDeviceMemory mem_)
David Pinedo0257fbf2015-02-02 18:02:40 -07001703{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001704 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001705 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001706}
1707
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001708ICD_EXPORT VkResult VKAPI vkSetMemoryPriority(
Mike Stroyan230e6252015-04-17 12:36:38 -06001709 VkDevice device,
Tony Barbour8205d902015-04-16 15:59:00 -06001710 VkDeviceMemory mem_,
Mike Stroyan230e6252015-04-17 12:36:38 -06001711 VkMemoryPriority priority)
David Pinedo0257fbf2015-02-02 18:02:40 -07001712{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001713 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001714 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001715}
1716
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001717ICD_EXPORT VkResult VKAPI vkMapMemory(
Mike Stroyan230e6252015-04-17 12:36:38 -06001718 VkDevice device,
Tony Barbour8205d902015-04-16 15:59:00 -06001719 VkDeviceMemory mem_,
Tony Barbour3e3420a2015-04-16 19:09:28 -06001720 VkDeviceSize offset,
1721 VkDeviceSize size,
1722 VkFlags flags,
David Pinedo0257fbf2015-02-02 18:02:40 -07001723 void** ppData)
1724{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001725 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001726 struct nulldrv_mem *mem = nulldrv_mem(mem_);
1727 void *ptr = nulldrv_mem_map(mem, flags);
1728
1729 *ppData = ptr;
1730
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001731 return (ptr) ? VK_SUCCESS : VK_ERROR_UNKNOWN;
David Pinedo0257fbf2015-02-02 18:02:40 -07001732}
1733
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001734ICD_EXPORT VkResult VKAPI vkUnmapMemory(
Mike Stroyan230e6252015-04-17 12:36:38 -06001735 VkDevice device,
Tony Barbour8205d902015-04-16 15:59:00 -06001736 VkDeviceMemory mem_)
David Pinedo0257fbf2015-02-02 18:02:40 -07001737{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001738 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001739 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001740}
1741
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06001742ICD_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Mike Stroyan230e6252015-04-17 12:36:38 -06001743 VkDevice device,
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06001744 uint32_t memRangeCount,
1745 const VkMappedMemoryRange* pMemRanges)
1746{
1747 NULLDRV_LOG_FUNC;
1748 return VK_SUCCESS;
1749}
1750
1751ICD_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
1752 VkDevice device,
1753 uint32_t memRangeCount,
1754 const VkMappedMemoryRange* pMemRanges)
Ian Elliott07de9232015-04-17 10:04:00 -06001755{
1756 NULLDRV_LOG_FUNC;
1757 return VK_SUCCESS;
1758}
1759
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001760ICD_EXPORT VkResult VKAPI vkPinSystemMemory(
1761 VkDevice device,
David Pinedo0257fbf2015-02-02 18:02:40 -07001762 const void* pSysMem,
1763 size_t memSize,
Tony Barbour8205d902015-04-16 15:59:00 -06001764 VkDeviceMemory* pMem)
David Pinedo0257fbf2015-02-02 18:02:40 -07001765{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001766 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001767 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001768}
1769
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001770ICD_EXPORT VkResult VKAPI vkOpenSharedMemory(
1771 VkDevice device,
1772 const VkMemoryOpenInfo* pOpenInfo,
Tony Barbour8205d902015-04-16 15:59:00 -06001773 VkDeviceMemory* pMem)
David Pinedo0257fbf2015-02-02 18:02:40 -07001774{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001775 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001776 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001777}
1778
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001779ICD_EXPORT VkResult VKAPI vkOpenPeerMemory(
1780 VkDevice device,
1781 const VkPeerMemoryOpenInfo* pOpenInfo,
Tony Barbour8205d902015-04-16 15:59:00 -06001782 VkDeviceMemory* pMem)
David Pinedo0257fbf2015-02-02 18:02:40 -07001783{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001784 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001785 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001786}
1787
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001788ICD_EXPORT VkResult VKAPI vkCreateInstance(
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -06001789 const VkInstanceCreateInfo* pCreateInfo,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001790 VkInstance* pInstance)
David Pinedo0257fbf2015-02-02 18:02:40 -07001791{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001792 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001793 struct nulldrv_instance *inst;
1794
1795 inst = (struct nulldrv_instance *) nulldrv_base_create(NULL, sizeof(*inst),
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001796 VK_DBG_OBJECT_INSTANCE);
David Pinedo0257fbf2015-02-02 18:02:40 -07001797 if (!inst)
Tony Barbour8205d902015-04-16 15:59:00 -06001798 return VK_ERROR_OUT_OF_HOST_MEMORY;
David Pinedo0257fbf2015-02-02 18:02:40 -07001799
1800 inst->obj.base.get_info = NULL;
1801
Mike Stroyan230e6252015-04-17 12:36:38 -06001802 *pInstance = (VkInstance) inst;
David Pinedo0257fbf2015-02-02 18:02:40 -07001803
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001804 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001805}
1806
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001807ICD_EXPORT VkResult VKAPI vkDestroyInstance(
1808 VkInstance pInstance)
David Pinedo0257fbf2015-02-02 18:02:40 -07001809{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001810 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001811 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001812}
1813
Tony Barbour8205d902015-04-16 15:59:00 -06001814ICD_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001815 VkInstance instance,
David Pinedo0257fbf2015-02-02 18:02:40 -07001816 uint32_t* pGpuCount,
Tony Barbour8205d902015-04-16 15:59:00 -06001817 VkPhysicalDevice* pGpus)
David Pinedo0257fbf2015-02-02 18:02:40 -07001818{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001819 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001820 VkResult ret;
David Pinedo0257fbf2015-02-02 18:02:40 -07001821 struct nulldrv_gpu *gpu;
1822 *pGpuCount = 1;
1823 ret = nulldrv_gpu_add(0, 0, 0, &gpu);
David Pinedof6768452015-04-21 14:44:02 -06001824 if (ret == VK_SUCCESS && pGpus)
Tony Barbour8205d902015-04-16 15:59:00 -06001825 pGpus[0] = (VkPhysicalDevice) gpu;
David Pinedo0257fbf2015-02-02 18:02:40 -07001826 return ret;
1827}
1828
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001829ICD_EXPORT VkResult VKAPI vkEnumerateLayers(
Tony Barbour8205d902015-04-16 15:59:00 -06001830 VkPhysicalDevice gpu,
David Pinedo0257fbf2015-02-02 18:02:40 -07001831 size_t maxStringSize,
Courtney Goeltzenleuchterbb1f3602015-04-20 11:04:54 -06001832 size_t* pLayerCount,
David Pinedo0257fbf2015-02-02 18:02:40 -07001833 char* const* pOutLayers,
1834 void* pReserved)
1835{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001836 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001837 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001838}
1839
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001840ICD_EXPORT VkResult VKAPI vkDbgRegisterMsgCallback(
1841 VkInstance instance,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001842 VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback,
David Pinedo0257fbf2015-02-02 18:02:40 -07001843 void* pUserData)
1844{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001845 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001846 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001847}
1848
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001849ICD_EXPORT VkResult VKAPI vkDbgUnregisterMsgCallback(
1850 VkInstance instance,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001851 VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback)
David Pinedo0257fbf2015-02-02 18:02:40 -07001852{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001853 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001854 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001855}
1856
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001857ICD_EXPORT VkResult VKAPI vkDbgSetGlobalOption(
1858 VkInstance instance,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001859 VK_DBG_GLOBAL_OPTION dbgOption,
David Pinedo0257fbf2015-02-02 18:02:40 -07001860 size_t dataSize,
1861 const void* pData)
1862{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001863 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001864 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001865}
1866
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001867ICD_EXPORT VkResult VKAPI vkDestroyObject(
Mike Stroyan230e6252015-04-17 12:36:38 -06001868 VkDevice device,
1869 VkObjectType objType,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001870 VkObject object)
David Pinedo0257fbf2015-02-02 18:02:40 -07001871{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001872 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001873 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001874}
1875
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001876ICD_EXPORT VkResult VKAPI vkGetObjectInfo(
Mike Stroyan230e6252015-04-17 12:36:38 -06001877 VkDevice device,
1878 VkObjectType objType,
1879 VkObject object,
1880 VkObjectInfoType infoType,
David Pinedo0257fbf2015-02-02 18:02:40 -07001881 size_t* pDataSize,
1882 void* pData)
1883{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001884 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001885 struct nulldrv_base *base = nulldrv_base(object);
1886
1887 return base->get_info(base, infoType, pDataSize, pData);
1888}
1889
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -05001890ICD_EXPORT VkResult VKAPI vkBindObjectMemory(
1891 VkDevice device,
Mike Stroyan230e6252015-04-17 12:36:38 -06001892 VkObjectType objType,
1893 VkObject object,
David Pinedo0257fbf2015-02-02 18:02:40 -07001894 uint32_t allocationIdx,
Tony Barbour8205d902015-04-16 15:59:00 -06001895 VkDeviceMemory mem_,
1896 VkDeviceSize memOffset)
David Pinedo0257fbf2015-02-02 18:02:40 -07001897{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001898 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001899 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001900}
1901
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -05001902ICD_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
Mike Stroyan230e6252015-04-17 12:36:38 -06001903 VkQueue queue,
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -05001904 VkBuffer buffer,
David Pinedo0257fbf2015-02-02 18:02:40 -07001905 uint32_t allocationIdx,
Tony Barbour8205d902015-04-16 15:59:00 -06001906 VkDeviceSize rangeOffset,
1907 VkDeviceSize rangeSize,
1908 VkDeviceMemory mem,
1909 VkDeviceSize memOffset)
David Pinedo0257fbf2015-02-02 18:02:40 -07001910{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001911 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001912 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001913}
1914
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -05001915ICD_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Mark Lobodzinskicf26e072015-04-16 11:44:05 -05001916 VkQueue queue,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001917 VkImage image,
Tony Barbour8205d902015-04-16 15:59:00 -06001918 uint32_t allocationIdx,
1919 const VkImageMemoryBindInfo* pBindInfo,
1920 VkDeviceMemory mem,
1921 VkDeviceSize memOffset)
David Pinedo0257fbf2015-02-02 18:02:40 -07001922{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001923 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001924 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001925}
1926
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001927ICD_EXPORT VkResult VKAPI vkDbgSetObjectTag(
Mike Stroyan230e6252015-04-17 12:36:38 -06001928 VkDevice device,
1929 VkObject object,
David Pinedo0257fbf2015-02-02 18:02:40 -07001930 size_t tagSize,
1931 const void* pTag)
1932{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001933 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001934 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001935}
1936
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001937ICD_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(
1938 VkDevice device,
1939 const VkGraphicsPipelineCreateInfo* pCreateInfo,
1940 VkPipeline* pPipeline)
David Pinedo0257fbf2015-02-02 18:02:40 -07001941{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001942 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07001943 struct nulldrv_dev *dev = nulldrv_dev(device);
1944
1945 return graphics_pipeline_create(dev, pCreateInfo,
1946 (struct nulldrv_pipeline **) pPipeline);
1947}
1948
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001949ICD_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(
1950 VkDevice device,
1951 const VkGraphicsPipelineCreateInfo* pCreateInfo,
1952 VkPipeline basePipeline,
1953 VkPipeline* pPipeline)
Courtney Goeltzenleuchter32876a12015-03-25 15:37:49 -06001954{
1955 NULLDRV_LOG_FUNC;
1956 struct nulldrv_dev *dev = nulldrv_dev(device);
1957
1958 return graphics_pipeline_create(dev, pCreateInfo,
1959 (struct nulldrv_pipeline **) pPipeline);
1960}
1961
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001962ICD_EXPORT VkResult VKAPI vkCreateComputePipeline(
1963 VkDevice device,
1964 const VkComputePipelineCreateInfo* pCreateInfo,
1965 VkPipeline* pPipeline)
David Pinedo0257fbf2015-02-02 18:02:40 -07001966{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001967 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001968 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001969}
1970
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001971ICD_EXPORT VkResult VKAPI vkStorePipeline(
Mike Stroyan230e6252015-04-17 12:36:38 -06001972 VkDevice device,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001973 VkPipeline pipeline,
David Pinedo0257fbf2015-02-02 18:02:40 -07001974 size_t* pDataSize,
1975 void* pData)
1976{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001977 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001978 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001979}
1980
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001981ICD_EXPORT VkResult VKAPI vkLoadPipeline(
1982 VkDevice device,
Courtney Goeltzenleuchter32876a12015-03-25 15:37:49 -06001983 size_t dataSize,
David Pinedo0257fbf2015-02-02 18:02:40 -07001984 const void* pData,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001985 VkPipeline* pPipeline)
David Pinedo0257fbf2015-02-02 18:02:40 -07001986{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001987 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001988 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07001989}
1990
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001991ICD_EXPORT VkResult VKAPI vkLoadPipelineDerivative(
1992 VkDevice device,
Courtney Goeltzenleuchter32876a12015-03-25 15:37:49 -06001993 size_t dataSize,
1994 const void* pData,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001995 VkPipeline basePipeline,
1996 VkPipeline* pPipeline)
David Pinedo0257fbf2015-02-02 18:02:40 -07001997{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07001998 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001999 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002000}
2001
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002002ICD_EXPORT VkResult VKAPI vkCreateQueryPool(
2003 VkDevice device,
2004 const VkQueryPoolCreateInfo* pCreateInfo,
2005 VkQueryPool* pQueryPool)
David Pinedo0257fbf2015-02-02 18:02:40 -07002006{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002007 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002008 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002009}
2010
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002011ICD_EXPORT VkResult VKAPI vkGetQueryPoolResults(
Mike Stroyan230e6252015-04-17 12:36:38 -06002012 VkDevice device,
2013 VkQueryPool queryPool,
David Pinedo0257fbf2015-02-02 18:02:40 -07002014 uint32_t startQuery,
2015 uint32_t queryCount,
2016 size_t* pDataSize,
Tony Barbour8205d902015-04-16 15:59:00 -06002017 void* pData,
2018 VkQueryResultFlags flags)
David Pinedo0257fbf2015-02-02 18:02:40 -07002019{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002020 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002021 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002022}
2023
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002024ICD_EXPORT VkResult VKAPI vkQueueWaitIdle(
2025 VkQueue queue_)
David Pinedo0257fbf2015-02-02 18:02:40 -07002026{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002027 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002028 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002029}
2030
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002031ICD_EXPORT VkResult VKAPI vkQueueSubmit(
2032 VkQueue queue_,
David Pinedo0257fbf2015-02-02 18:02:40 -07002033 uint32_t cmdBufferCount,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002034 const VkCmdBuffer* pCmdBuffers,
2035 VkFence fence_)
David Pinedo0257fbf2015-02-02 18:02:40 -07002036{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002037 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002038 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002039}
2040
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002041ICD_EXPORT VkResult VKAPI vkOpenSharedSemaphore(
2042 VkDevice device,
2043 const VkSemaphoreOpenInfo* pOpenInfo,
2044 VkSemaphore* pSemaphore)
David Pinedo0257fbf2015-02-02 18:02:40 -07002045{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002046 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002047 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002048}
2049
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002050ICD_EXPORT VkResult VKAPI vkCreateSemaphore(
2051 VkDevice device,
2052 const VkSemaphoreCreateInfo* pCreateInfo,
2053 VkSemaphore* pSemaphore)
David Pinedo0257fbf2015-02-02 18:02:40 -07002054{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002055 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002056 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002057}
2058
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002059ICD_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
2060 VkQueue queue,
2061 VkSemaphore semaphore)
David Pinedo0257fbf2015-02-02 18:02:40 -07002062{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002063 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002064 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002065}
2066
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002067ICD_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
2068 VkQueue queue,
2069 VkSemaphore semaphore)
David Pinedo0257fbf2015-02-02 18:02:40 -07002070{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002071 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002072 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002073}
2074
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002075ICD_EXPORT VkResult VKAPI vkCreateSampler(
2076 VkDevice device,
2077 const VkSamplerCreateInfo* pCreateInfo,
2078 VkSampler* pSampler)
David Pinedo0257fbf2015-02-02 18:02:40 -07002079{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002080 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002081 struct nulldrv_dev *dev = nulldrv_dev(device);
2082
2083 return nulldrv_sampler_create(dev, pCreateInfo,
2084 (struct nulldrv_sampler **) pSampler);
2085}
2086
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002087ICD_EXPORT VkResult VKAPI vkCreateShader(
2088 VkDevice device,
2089 const VkShaderCreateInfo* pCreateInfo,
2090 VkShader* pShader)
David Pinedo0257fbf2015-02-02 18:02:40 -07002091{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002092 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002093 struct nulldrv_dev *dev = nulldrv_dev(device);
2094
2095 return shader_create(dev, pCreateInfo, (struct nulldrv_shader **) pShader);
2096}
2097
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002098ICD_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
2099 VkDevice device,
2100 const VkDynamicVpStateCreateInfo* pCreateInfo,
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06002101 VkDynamicVpState* pState)
David Pinedo0257fbf2015-02-02 18:02:40 -07002102{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002103 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002104 struct nulldrv_dev *dev = nulldrv_dev(device);
2105
2106 return nulldrv_viewport_state_create(dev, pCreateInfo,
2107 (struct nulldrv_dynamic_vp **) pState);
2108}
2109
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002110ICD_EXPORT VkResult VKAPI vkCreateDynamicRasterState(
2111 VkDevice device,
2112 const VkDynamicRsStateCreateInfo* pCreateInfo,
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06002113 VkDynamicRsState* pState)
David Pinedo0257fbf2015-02-02 18:02:40 -07002114{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002115 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002116 struct nulldrv_dev *dev = nulldrv_dev(device);
2117
2118 return nulldrv_raster_state_create(dev, pCreateInfo,
2119 (struct nulldrv_dynamic_rs **) pState);
2120}
2121
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002122ICD_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
2123 VkDevice device,
2124 const VkDynamicCbStateCreateInfo* pCreateInfo,
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06002125 VkDynamicCbState* pState)
David Pinedo0257fbf2015-02-02 18:02:40 -07002126{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002127 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002128 struct nulldrv_dev *dev = nulldrv_dev(device);
2129
2130 return nulldrv_blend_state_create(dev, pCreateInfo,
2131 (struct nulldrv_dynamic_cb **) pState);
2132}
2133
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002134ICD_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(
2135 VkDevice device,
2136 const VkDynamicDsStateCreateInfo* pCreateInfo,
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06002137 VkDynamicDsState* pState)
David Pinedo0257fbf2015-02-02 18:02:40 -07002138{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002139 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002140 struct nulldrv_dev *dev = nulldrv_dev(device);
2141
2142 return nulldrv_ds_state_create(dev, pCreateInfo,
2143 (struct nulldrv_dynamic_ds **) pState);
2144}
2145
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002146ICD_EXPORT VkResult VKAPI vkCreateBufferView(
2147 VkDevice device,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -06002148 const VkBufferViewCreateInfo* pCreateInfo,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002149 VkBufferView* pView)
David Pinedo0257fbf2015-02-02 18:02:40 -07002150{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002151 NULLDRV_LOG_FUNC;
2152 struct nulldrv_dev *dev = nulldrv_dev(device);
2153
2154 return nulldrv_buf_view_create(dev, pCreateInfo,
2155 (struct nulldrv_buf_view **) pView);
David Pinedo0257fbf2015-02-02 18:02:40 -07002156}
2157
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002158ICD_EXPORT VkResult VKAPI vkCreateImageView(
2159 VkDevice device,
2160 const VkImageViewCreateInfo* pCreateInfo,
2161 VkImageView* pView)
David Pinedo0257fbf2015-02-02 18:02:40 -07002162{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002163 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002164 struct nulldrv_dev *dev = nulldrv_dev(device);
2165
2166 return nulldrv_img_view_create(dev, pCreateInfo,
2167 (struct nulldrv_img_view **) pView);
2168}
2169
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002170ICD_EXPORT VkResult VKAPI vkCreateColorAttachmentView(
2171 VkDevice device,
2172 const VkColorAttachmentViewCreateInfo* pCreateInfo,
2173 VkColorAttachmentView* pView)
David Pinedo0257fbf2015-02-02 18:02:40 -07002174{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002175 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002176 struct nulldrv_dev *dev = nulldrv_dev(device);
2177
2178 return nulldrv_rt_view_create(dev, pCreateInfo,
2179 (struct nulldrv_rt_view **) pView);
2180}
2181
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002182ICD_EXPORT VkResult VKAPI vkCreateDepthStencilView(
2183 VkDevice device,
2184 const VkDepthStencilViewCreateInfo* pCreateInfo,
2185 VkDepthStencilView* pView)
David Pinedo0257fbf2015-02-02 18:02:40 -07002186{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002187 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002188 struct nulldrv_dev *dev = nulldrv_dev(device);
2189
2190 return nulldrv_ds_view_create(dev, pCreateInfo,
2191 (struct nulldrv_ds_view **) pView);
2192
2193}
2194
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002195ICD_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
2196 VkDevice device,
2197 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
2198 VkDescriptorSetLayout* pSetLayout)
David Pinedo0257fbf2015-02-02 18:02:40 -07002199{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002200 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002201 struct nulldrv_dev *dev = nulldrv_dev(device);
David Pinedo0257fbf2015-02-02 18:02:40 -07002202
Chia-I Wu7732cb22015-03-26 15:27:55 +08002203 return nulldrv_desc_layout_create(dev, pCreateInfo,
David Pinedo0257fbf2015-02-02 18:02:40 -07002204 (struct nulldrv_desc_layout **) pSetLayout);
2205}
2206
Mark Lobodzinski556f7212015-04-17 14:11:39 -05002207ICD_EXPORT VkResult VKAPI vkCreatePipelineLayout(
2208 VkDevice device,
2209 const VkPipelineLayoutCreateInfo* pCreateInfo,
2210 VkPipelineLayout* pPipelineLayout)
Chia-I Wu7732cb22015-03-26 15:27:55 +08002211{
2212 NULLDRV_LOG_FUNC;
2213 struct nulldrv_dev *dev = nulldrv_dev(device);
2214
Mark Lobodzinski556f7212015-04-17 14:11:39 -05002215 return nulldrv_pipeline_layout_create(dev,
2216 pCreateInfo,
2217 (struct nulldrv_pipeline_layout **) pPipelineLayout);
Chia-I Wu7732cb22015-03-26 15:27:55 +08002218}
2219
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002220ICD_EXPORT VkResult VKAPI vkBeginDescriptorPoolUpdate(
2221 VkDevice device,
2222 VkDescriptorUpdateMode updateMode)
David Pinedo0257fbf2015-02-02 18:02:40 -07002223{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002224 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002225 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002226}
2227
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002228ICD_EXPORT VkResult VKAPI vkEndDescriptorPoolUpdate(
2229 VkDevice device,
2230 VkCmdBuffer cmd_)
David Pinedo0257fbf2015-02-02 18:02:40 -07002231{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002232 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002233 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002234}
2235
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002236ICD_EXPORT VkResult VKAPI vkCreateDescriptorPool(
2237 VkDevice device,
2238 VkDescriptorPoolUsage poolUsage,
David Pinedo0257fbf2015-02-02 18:02:40 -07002239 uint32_t maxSets,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002240 const VkDescriptorPoolCreateInfo* pCreateInfo,
2241 VkDescriptorPool* pDescriptorPool)
David Pinedo0257fbf2015-02-02 18:02:40 -07002242{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002243 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002244 struct nulldrv_dev *dev = nulldrv_dev(device);
2245
Chia-I Wu8d24b3b2015-03-26 13:14:16 +08002246 return nulldrv_desc_pool_create(dev, poolUsage, maxSets, pCreateInfo,
2247 (struct nulldrv_desc_pool **) pDescriptorPool);
David Pinedo0257fbf2015-02-02 18:02:40 -07002248}
2249
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002250ICD_EXPORT VkResult VKAPI vkResetDescriptorPool(
Mike Stroyan230e6252015-04-17 12:36:38 -06002251 VkDevice device,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002252 VkDescriptorPool descriptorPool)
David Pinedo0257fbf2015-02-02 18:02:40 -07002253{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002254 NULLDRV_LOG_FUNC;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002255 return VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002256}
2257
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002258ICD_EXPORT VkResult VKAPI vkAllocDescriptorSets(
Mike Stroyan230e6252015-04-17 12:36:38 -06002259 VkDevice device,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002260 VkDescriptorPool descriptorPool,
2261 VkDescriptorSetUsage setUsage,
David Pinedo0257fbf2015-02-02 18:02:40 -07002262 uint32_t count,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002263 const VkDescriptorSetLayout* pSetLayouts,
2264 VkDescriptorSet* pDescriptorSets,
David Pinedo0257fbf2015-02-02 18:02:40 -07002265 uint32_t* pCount)
2266{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002267 NULLDRV_LOG_FUNC;
Chia-I Wu8d24b3b2015-03-26 13:14:16 +08002268 struct nulldrv_desc_pool *pool = nulldrv_desc_pool(descriptorPool);
2269 struct nulldrv_dev *dev = pool->dev;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002270 VkResult ret = VK_SUCCESS;
David Pinedo0257fbf2015-02-02 18:02:40 -07002271 uint32_t i;
2272
2273 for (i = 0; i < count; i++) {
2274 const struct nulldrv_desc_layout *layout =
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002275 nulldrv_desc_layout((VkDescriptorSetLayout) pSetLayouts[i]);
David Pinedo0257fbf2015-02-02 18:02:40 -07002276
Chia-I Wu8d24b3b2015-03-26 13:14:16 +08002277 ret = nulldrv_desc_set_create(dev, pool, setUsage, layout,
David Pinedo0257fbf2015-02-02 18:02:40 -07002278 (struct nulldrv_desc_set **) &pDescriptorSets[i]);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002279 if (ret != VK_SUCCESS)
David Pinedo0257fbf2015-02-02 18:02:40 -07002280 break;
2281 }
2282
2283 if (pCount)
2284 *pCount = i;
2285
2286 return ret;
2287}
2288
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002289ICD_EXPORT void VKAPI vkClearDescriptorSets(
Mike Stroyan230e6252015-04-17 12:36:38 -06002290 VkDevice device,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002291 VkDescriptorPool descriptorPool,
David Pinedo0257fbf2015-02-02 18:02:40 -07002292 uint32_t count,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002293 const VkDescriptorSet* pDescriptorSets)
David Pinedo0257fbf2015-02-02 18:02:40 -07002294{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002295 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002296}
2297
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002298ICD_EXPORT void VKAPI vkUpdateDescriptors(
Mike Stroyan230e6252015-04-17 12:36:38 -06002299 VkDevice device,
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002300 VkDescriptorSet descriptorSet,
Chia-I Wu7732cb22015-03-26 15:27:55 +08002301 uint32_t updateCount,
2302 const void** ppUpdateArray)
David Pinedo0257fbf2015-02-02 18:02:40 -07002303{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002304 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002305}
2306
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002307ICD_EXPORT VkResult VKAPI vkCreateFramebuffer(
2308 VkDevice device,
2309 const VkFramebufferCreateInfo* info,
2310 VkFramebuffer* fb_ret)
David Pinedo0257fbf2015-02-02 18:02:40 -07002311{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002312 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002313 struct nulldrv_dev *dev = nulldrv_dev(device);
2314
2315 return nulldrv_fb_create(dev, info, (struct nulldrv_framebuffer **) fb_ret);
2316}
2317
2318
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002319ICD_EXPORT VkResult VKAPI vkCreateRenderPass(
2320 VkDevice device,
2321 const VkRenderPassCreateInfo* info,
2322 VkRenderPass* rp_ret)
David Pinedo0257fbf2015-02-02 18:02:40 -07002323{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002324 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002325 struct nulldrv_dev *dev = nulldrv_dev(device);
2326
2327 return nulldrv_render_pass_create(dev, info, (struct nulldrv_render_pass **) rp_ret);
2328}
2329
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002330ICD_EXPORT void VKAPI vkCmdBeginRenderPass(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002331 VkCmdBuffer cmdBuffer,
2332 const VkRenderPassBegin* pRenderPassBegin)
David Pinedo0257fbf2015-02-02 18:02:40 -07002333{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002334 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002335}
2336
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002337ICD_EXPORT void VKAPI vkCmdEndRenderPass(
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002338 VkCmdBuffer cmdBuffer,
2339 VkRenderPass renderPass)
David Pinedo0257fbf2015-02-02 18:02:40 -07002340{
David Pinedo8e9cb3b2015-02-10 15:02:08 -07002341 NULLDRV_LOG_FUNC;
David Pinedo0257fbf2015-02-02 18:02:40 -07002342}
Ian Elliottf93069f2015-02-19 14:26:19 -07002343
2344ICD_EXPORT void* xcbCreateWindow(
2345 uint16_t width,
2346 uint16_t height)
2347{
2348 static uint32_t window; // Kludge to the max
2349 NULLDRV_LOG_FUNC;
2350 return &window;
2351}
2352
2353// May not be needed, if we stub out stuf in tri.c
2354ICD_EXPORT void xcbDestroyWindow()
2355{
2356 NULLDRV_LOG_FUNC;
2357}
2358
2359ICD_EXPORT int xcbGetMessage(void *msg)
2360{
2361 NULLDRV_LOG_FUNC;
2362 return 0;
2363}
2364
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002365ICD_EXPORT VkResult xcbQueuePresent(void *queue, void *image, void* fence)
Ian Elliottf93069f2015-02-19 14:26:19 -07002366{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002367 return VK_SUCCESS;
Ian Elliottf93069f2015-02-19 14:26:19 -07002368}