• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* WARNING: This is auto-generated file. Do not modify, since changes will
2 * be lost! Modify the generating script instead.
3 * This file was generated by /scripts/gen_framework.py
4 */
5
6
7PFN_vkVoidFunction DeviceDriverSC::getDeviceProcAddr (VkDevice device, const char* pName) const
8{
9		return m_vk.getDeviceProcAddr(device, pName);
10}
11
12void DeviceDriverSC::destroyDevice (VkDevice device, const VkAllocationCallbacks* pAllocator) const
13{
14	std::lock_guard<std::mutex> lock(functionMutex);
15	if (m_normalMode)
16		m_vk.destroyDevice(device, pAllocator);
17	else
18		destroyDeviceHandler(device, pAllocator);
19}
20
21void DeviceDriverSC::getDeviceQueue (VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue) const
22{
23	std::lock_guard<std::mutex> lock(functionMutex);
24	if (m_normalMode)
25		m_vk.getDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
26	else
27		m_vk.getDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
28}
29
30VkResult DeviceDriverSC::queueSubmit (VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) const
31{
32	if (m_normalMode)
33		return m_vk.queueSubmit(queue, submitCount, pSubmits, fence);
34	return VK_SUCCESS;
35}
36
37VkResult DeviceDriverSC::queueWaitIdle (VkQueue queue) const
38{
39	if (m_normalMode)
40		return m_vk.queueWaitIdle(queue);
41	return VK_SUCCESS;
42}
43
44VkResult DeviceDriverSC::deviceWaitIdle (VkDevice device) const
45{
46	if (m_normalMode)
47		return m_vk.deviceWaitIdle(device);
48	return VK_SUCCESS;
49}
50
51VkResult DeviceDriverSC::allocateMemory (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) const
52{
53	std::lock_guard<std::mutex> lock(functionMutex);
54	if (m_normalMode)
55		return m_vk.allocateMemory(device, pAllocateInfo, pAllocator, pMemory);
56	else
57	{
58		DDSTAT_LOCK();
59		DDSTAT_HANDLE_CREATE(deviceMemoryRequestCount,1);
60		*pMemory = Handle<HANDLE_TYPE_DEVICE_MEMORY>(m_resourceInterface->incResourceCounter());
61	}
62	return VK_SUCCESS;
63}
64
65VkResult DeviceDriverSC::mapMemory (VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const
66{
67	std::lock_guard<std::mutex> lock(functionMutex);
68	if (m_normalMode)
69		return m_vk.mapMemory(device, memory, offset, size, flags, ppData);
70	else
71	{
72		DDSTAT_LOCK();
73		if(m_falseMemory.size() < (static_cast<std::size_t>(offset+size)))
74			m_falseMemory.resize(static_cast<std::size_t>(offset+size));
75		*ppData = (void*)m_falseMemory.data();
76	}
77	return VK_SUCCESS;
78}
79
80void DeviceDriverSC::unmapMemory (VkDevice device, VkDeviceMemory memory) const
81{
82	if (m_normalMode)
83		m_vk.unmapMemory(device, memory);
84}
85
86VkResult DeviceDriverSC::flushMappedMemoryRanges (VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const
87{
88	if (m_normalMode)
89		return m_vk.flushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
90	return VK_SUCCESS;
91}
92
93VkResult DeviceDriverSC::invalidateMappedMemoryRanges (VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const
94{
95	if (m_normalMode)
96		return m_vk.invalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
97	return VK_SUCCESS;
98}
99
100void DeviceDriverSC::getDeviceMemoryCommitment (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) const
101{
102	if (m_normalMode)
103		m_vk.getDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
104}
105
106void DeviceDriverSC::getBufferMemoryRequirements (VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) const
107{
108	std::lock_guard<std::mutex> lock(functionMutex);
109	if (m_normalMode)
110		m_vk.getBufferMemoryRequirements(device, buffer, pMemoryRequirements);
111	else
112	{
113		DDSTAT_LOCK();
114		pMemoryRequirements->size = 1048576U;
115		pMemoryRequirements->alignment = 1U;
116		pMemoryRequirements->memoryTypeBits = ~0U;
117	}
118}
119
120VkResult DeviceDriverSC::bindBufferMemory (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const
121{
122	if (m_normalMode)
123		return m_vk.bindBufferMemory(device, buffer, memory, memoryOffset);
124	return VK_SUCCESS;
125}
126
127void DeviceDriverSC::getImageMemoryRequirements (VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) const
128{
129	std::lock_guard<std::mutex> lock(functionMutex);
130	if (m_normalMode)
131		m_vk.getImageMemoryRequirements(device, image, pMemoryRequirements);
132	else
133	{
134		DDSTAT_LOCK();
135		pMemoryRequirements->size = 1048576U;
136		pMemoryRequirements->alignment = 1U;
137		pMemoryRequirements->memoryTypeBits = ~0U;
138	}
139}
140
141VkResult DeviceDriverSC::bindImageMemory (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const
142{
143	if (m_normalMode)
144		return m_vk.bindImageMemory(device, image, memory, memoryOffset);
145	return VK_SUCCESS;
146}
147
148VkResult DeviceDriverSC::createFence (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const
149{
150	std::lock_guard<std::mutex> lock(functionMutex);
151	if (m_normalMode)
152		return m_vk.createFence(device, pCreateInfo, pAllocator, pFence);
153	else
154	{
155		DDSTAT_LOCK();
156		DDSTAT_HANDLE_CREATE(fenceRequestCount,1);
157		*pFence = Handle<HANDLE_TYPE_FENCE>(m_resourceInterface->incResourceCounter());
158	}
159	return VK_SUCCESS;
160}
161
162void DeviceDriverSC::destroyFence (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) const
163{
164	std::lock_guard<std::mutex> lock(functionMutex);
165	if (m_normalMode)
166		m_vk.destroyFence(device, fence, pAllocator);
167	else
168	{
169		DDSTAT_LOCK();
170		DDSTAT_HANDLE_DESTROY_IF(fence,fenceRequestCount,1);
171	}
172}
173
174VkResult DeviceDriverSC::resetFences (VkDevice device, uint32_t fenceCount, const VkFence* pFences) const
175{
176	if (m_normalMode)
177		return m_vk.resetFences(device, fenceCount, pFences);
178	return VK_SUCCESS;
179}
180
181VkResult DeviceDriverSC::getFenceStatus (VkDevice device, VkFence fence) const
182{
183	if (m_normalMode)
184		return m_vk.getFenceStatus(device, fence);
185	return VK_SUCCESS;
186}
187
188VkResult DeviceDriverSC::waitForFences (VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) const
189{
190	if (m_normalMode)
191		return m_vk.waitForFences(device, fenceCount, pFences, waitAll, timeout);
192	return VK_SUCCESS;
193}
194
195VkResult DeviceDriverSC::createSemaphore (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) const
196{
197	std::lock_guard<std::mutex> lock(functionMutex);
198	if (m_normalMode)
199		return m_vk.createSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
200	else
201	{
202		DDSTAT_LOCK();
203		DDSTAT_HANDLE_CREATE(semaphoreRequestCount,1);
204		*pSemaphore = Handle<HANDLE_TYPE_SEMAPHORE>(m_resourceInterface->incResourceCounter());
205	}
206	return VK_SUCCESS;
207}
208
209void DeviceDriverSC::destroySemaphore (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) const
210{
211	std::lock_guard<std::mutex> lock(functionMutex);
212	if (m_normalMode)
213		m_vk.destroySemaphore(device, semaphore, pAllocator);
214	else
215	{
216		DDSTAT_LOCK();
217		DDSTAT_HANDLE_DESTROY_IF(semaphore,semaphoreRequestCount,1);
218	}
219}
220
221VkResult DeviceDriverSC::createEvent (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) const
222{
223	std::lock_guard<std::mutex> lock(functionMutex);
224	if (m_normalMode)
225		return m_vk.createEvent(device, pCreateInfo, pAllocator, pEvent);
226	else
227	{
228		DDSTAT_LOCK();
229		DDSTAT_HANDLE_CREATE(eventRequestCount,1);
230		*pEvent = Handle<HANDLE_TYPE_EVENT>(m_resourceInterface->incResourceCounter());
231	}
232	return VK_SUCCESS;
233}
234
235void DeviceDriverSC::destroyEvent (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) const
236{
237	std::lock_guard<std::mutex> lock(functionMutex);
238	if (m_normalMode)
239		m_vk.destroyEvent(device, event, pAllocator);
240	else
241	{
242		DDSTAT_LOCK();
243		DDSTAT_HANDLE_DESTROY_IF(event,eventRequestCount,1);
244	}
245}
246
247VkResult DeviceDriverSC::getEventStatus (VkDevice device, VkEvent event) const
248{
249	if (m_normalMode)
250		return m_vk.getEventStatus(device, event);
251	return VK_SUCCESS;
252}
253
254VkResult DeviceDriverSC::setEvent (VkDevice device, VkEvent event) const
255{
256	if (m_normalMode)
257		return m_vk.setEvent(device, event);
258	return VK_SUCCESS;
259}
260
261VkResult DeviceDriverSC::resetEvent (VkDevice device, VkEvent event) const
262{
263	if (m_normalMode)
264		return m_vk.resetEvent(device, event);
265	return VK_SUCCESS;
266}
267
268VkResult DeviceDriverSC::createQueryPool (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const
269{
270	std::lock_guard<std::mutex> lock(functionMutex);
271	if (m_normalMode)
272		return m_vk.createQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
273	else
274		createQueryPoolHandler(device, pCreateInfo, pAllocator, pQueryPool);
275	return VK_SUCCESS;
276}
277
278VkResult DeviceDriverSC::getQueryPoolResults (VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const
279{
280	if (m_normalMode)
281		return m_vk.getQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
282	return VK_SUCCESS;
283}
284
285void DeviceDriverSC::resetQueryPool (VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount) const
286{
287	if (m_normalMode)
288		m_vk.resetQueryPool(device, queryPool, firstQuery, queryCount);
289}
290
291VkResult DeviceDriverSC::createBuffer (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const
292{
293	std::lock_guard<std::mutex> lock(functionMutex);
294	if (m_normalMode)
295		return m_vk.createBuffer(device, pCreateInfo, pAllocator, pBuffer);
296	else
297	{
298		DDSTAT_LOCK();
299		DDSTAT_HANDLE_CREATE(bufferRequestCount,1);
300		*pBuffer = Handle<HANDLE_TYPE_BUFFER>(m_resourceInterface->incResourceCounter());
301	}
302	return VK_SUCCESS;
303}
304
305void DeviceDriverSC::destroyBuffer (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const
306{
307	std::lock_guard<std::mutex> lock(functionMutex);
308	if (m_normalMode)
309		m_vk.destroyBuffer(device, buffer, pAllocator);
310	else
311	{
312		DDSTAT_LOCK();
313		DDSTAT_HANDLE_DESTROY_IF(buffer,bufferRequestCount,1);
314	}
315}
316
317VkResult DeviceDriverSC::createBufferView (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const
318{
319	std::lock_guard<std::mutex> lock(functionMutex);
320	if (m_normalMode)
321		return m_vk.createBufferView(device, pCreateInfo, pAllocator, pView);
322	else
323	{
324		DDSTAT_LOCK();
325		DDSTAT_HANDLE_CREATE(bufferViewRequestCount,1);
326		*pView = Handle<HANDLE_TYPE_BUFFER_VIEW>(m_resourceInterface->incResourceCounter());
327	}
328	return VK_SUCCESS;
329}
330
331void DeviceDriverSC::destroyBufferView (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) const
332{
333	std::lock_guard<std::mutex> lock(functionMutex);
334	if (m_normalMode)
335		m_vk.destroyBufferView(device, bufferView, pAllocator);
336	else
337	{
338		DDSTAT_LOCK();
339		DDSTAT_HANDLE_DESTROY_IF(bufferView,bufferViewRequestCount,1);
340	}
341}
342
343VkResult DeviceDriverSC::createImage (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) const
344{
345	std::lock_guard<std::mutex> lock(functionMutex);
346	if (m_normalMode)
347		return m_vk.createImage(device, pCreateInfo, pAllocator, pImage);
348	else
349	{
350		DDSTAT_LOCK();
351		DDSTAT_HANDLE_CREATE(imageRequestCount,1);
352		*pImage = Handle<HANDLE_TYPE_IMAGE>(m_resourceInterface->incResourceCounter());
353	}
354	return VK_SUCCESS;
355}
356
357void DeviceDriverSC::destroyImage (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) const
358{
359	std::lock_guard<std::mutex> lock(functionMutex);
360	if (m_normalMode)
361		m_vk.destroyImage(device, image, pAllocator);
362	else
363	{
364		DDSTAT_LOCK();
365		DDSTAT_HANDLE_DESTROY_IF(image,imageRequestCount,1);
366	}
367}
368
369void DeviceDriverSC::getImageSubresourceLayout (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) const
370{
371	std::lock_guard<std::mutex> lock(functionMutex);
372	if (m_normalMode)
373		m_vk.getImageSubresourceLayout(device, image, pSubresource, pLayout);
374	else
375	{
376		DDSTAT_LOCK();
377		pLayout->offset = 0U;
378		pLayout->size = 1048576U;
379		pLayout->rowPitch = 0U;
380		pLayout->arrayPitch = 0U;
381		pLayout->depthPitch = 0U;
382	}
383}
384
385VkResult DeviceDriverSC::createImageView (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) const
386{
387	std::lock_guard<std::mutex> lock(functionMutex);
388	if (m_normalMode)
389		return m_vk.createImageView(device, pCreateInfo, pAllocator, pView);
390	else
391		createImageViewHandler(device, pCreateInfo, pAllocator, pView);
392	return VK_SUCCESS;
393}
394
395void DeviceDriverSC::destroyImageView (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) const
396{
397	std::lock_guard<std::mutex> lock(functionMutex);
398	if (m_normalMode)
399		m_vk.destroyImageView(device, imageView, pAllocator);
400	else
401		destroyImageViewHandler(device, imageView, pAllocator);
402}
403
404VkResult DeviceDriverSC::createPipelineCache (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) const
405{
406	std::lock_guard<std::mutex> lock(functionMutex);
407	if (m_normalMode)
408		return m_vk.createPipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
409	else
410	{
411		DDSTAT_LOCK();
412		DDSTAT_HANDLE_CREATE(pipelineCacheRequestCount,1);
413		*pPipelineCache = Handle<HANDLE_TYPE_PIPELINE_CACHE>(m_resourceInterface->incResourceCounter());
414	}
415	return VK_SUCCESS;
416}
417
418void DeviceDriverSC::destroyPipelineCache (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) const
419{
420	std::lock_guard<std::mutex> lock(functionMutex);
421	if (m_normalMode)
422		m_vk.destroyPipelineCache(device, pipelineCache, pAllocator);
423	else
424	{
425		DDSTAT_LOCK();
426		DDSTAT_HANDLE_DESTROY_IF(pipelineCache,pipelineCacheRequestCount,1);
427	}
428}
429
430VkResult DeviceDriverSC::createGraphicsPipelines (VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const
431{
432	std::lock_guard<std::mutex> lock(functionMutex);
433	if (m_normalMode)
434		return createGraphicsPipelinesHandlerNorm(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
435	else
436		createGraphicsPipelinesHandlerStat(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
437	return VK_SUCCESS;
438}
439
440VkResult DeviceDriverSC::createComputePipelines (VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const
441{
442	std::lock_guard<std::mutex> lock(functionMutex);
443	if (m_normalMode)
444		return createComputePipelinesHandlerNorm(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
445	else
446		createComputePipelinesHandlerStat(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
447	return VK_SUCCESS;
448}
449
450void DeviceDriverSC::destroyPipeline (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) const
451{
452	std::lock_guard<std::mutex> lock(functionMutex);
453	if (m_normalMode)
454		m_vk.destroyPipeline(device, pipeline, pAllocator);
455	else
456		destroyPipelineHandler(device, pipeline, pAllocator);
457}
458
459VkResult DeviceDriverSC::createPipelineLayout (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) const
460{
461	std::lock_guard<std::mutex> lock(functionMutex);
462	if (m_normalMode)
463		return createPipelineLayoutHandlerNorm(device, pCreateInfo, pAllocator, pPipelineLayout);
464	else
465		createPipelineLayoutHandlerStat(device, pCreateInfo, pAllocator, pPipelineLayout);
466	return VK_SUCCESS;
467}
468
469void DeviceDriverSC::destroyPipelineLayout (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) const
470{
471	std::lock_guard<std::mutex> lock(functionMutex);
472	if (m_normalMode)
473		m_vk.destroyPipelineLayout(device, pipelineLayout, pAllocator);
474	else
475	{
476		DDSTAT_LOCK();
477		DDSTAT_HANDLE_DESTROY_IF(pipelineLayout,pipelineLayoutRequestCount,1);
478	}
479}
480
481VkResult DeviceDriverSC::createSampler (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) const
482{
483	std::lock_guard<std::mutex> lock(functionMutex);
484	if (m_normalMode)
485		return createSamplerHandlerNorm(device, pCreateInfo, pAllocator, pSampler);
486	else
487		createSamplerHandlerStat(device, pCreateInfo, pAllocator, pSampler);
488	return VK_SUCCESS;
489}
490
491void DeviceDriverSC::destroySampler (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) const
492{
493	std::lock_guard<std::mutex> lock(functionMutex);
494	if (m_normalMode)
495		m_vk.destroySampler(device, sampler, pAllocator);
496	else
497	{
498		DDSTAT_LOCK();
499		DDSTAT_HANDLE_DESTROY_IF(sampler,samplerRequestCount,1);
500	}
501}
502
503VkResult DeviceDriverSC::createDescriptorSetLayout (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) const
504{
505	std::lock_guard<std::mutex> lock(functionMutex);
506	if (m_normalMode)
507		return createDescriptorSetLayoutHandlerNorm(device, pCreateInfo, pAllocator, pSetLayout);
508	else
509		createDescriptorSetLayoutHandlerStat(device, pCreateInfo, pAllocator, pSetLayout);
510	return VK_SUCCESS;
511}
512
513void DeviceDriverSC::destroyDescriptorSetLayout (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) const
514{
515	std::lock_guard<std::mutex> lock(functionMutex);
516	if (m_normalMode)
517		m_vk.destroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
518	else
519		destroyDescriptorSetLayoutHandler(device, descriptorSetLayout, pAllocator);
520}
521
522VkResult DeviceDriverSC::createDescriptorPool (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) const
523{
524	std::lock_guard<std::mutex> lock(functionMutex);
525	if (m_normalMode)
526		return m_vk.createDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
527	else
528	{
529		DDSTAT_LOCK();
530		DDSTAT_HANDLE_CREATE(descriptorPoolRequestCount,1);
531		*pDescriptorPool = Handle<HANDLE_TYPE_DESCRIPTOR_POOL>(m_resourceInterface->incResourceCounter());
532	}
533	return VK_SUCCESS;
534}
535
536VkResult DeviceDriverSC::resetDescriptorPool (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) const
537{
538	std::lock_guard<std::mutex> lock(functionMutex);
539	if (m_normalMode)
540		return m_vk.resetDescriptorPool(device, descriptorPool, flags);
541	else
542		resetDescriptorPoolHandlerStat(device, descriptorPool, flags);
543	return VK_SUCCESS;
544}
545
546VkResult DeviceDriverSC::allocateDescriptorSets (VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) const
547{
548	std::lock_guard<std::mutex> lock(functionMutex);
549	if (m_normalMode)
550		return m_vk.allocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
551	else
552		allocateDescriptorSetsHandlerStat(device, pAllocateInfo, pDescriptorSets);
553	return VK_SUCCESS;
554}
555
556VkResult DeviceDriverSC::freeDescriptorSets (VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets) const
557{
558	std::lock_guard<std::mutex> lock(functionMutex);
559	if (m_normalMode)
560		return m_vk.freeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
561	else
562		freeDescriptorSetsHandlerStat(device, descriptorPool, descriptorSetCount, pDescriptorSets);
563	return VK_SUCCESS;
564}
565
566void DeviceDriverSC::updateDescriptorSets (VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) const
567{
568	if (m_normalMode)
569		m_vk.updateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
570}
571
572VkResult DeviceDriverSC::createFramebuffer (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) const
573{
574	std::lock_guard<std::mutex> lock(functionMutex);
575	if (m_normalMode)
576		return createFramebufferHandlerNorm(device, pCreateInfo, pAllocator, pFramebuffer);
577	else
578		createFramebufferHandlerStat(device, pCreateInfo, pAllocator, pFramebuffer);
579	return VK_SUCCESS;
580}
581
582void DeviceDriverSC::destroyFramebuffer (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) const
583{
584	std::lock_guard<std::mutex> lock(functionMutex);
585	if (m_normalMode)
586		m_vk.destroyFramebuffer(device, framebuffer, pAllocator);
587	else
588	{
589		DDSTAT_LOCK();
590		DDSTAT_HANDLE_DESTROY_IF(framebuffer,framebufferRequestCount,1);
591	}
592}
593
594VkResult DeviceDriverSC::createRenderPass (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const
595{
596	std::lock_guard<std::mutex> lock(functionMutex);
597	if (m_normalMode)
598		return createRenderPassHandlerNorm(device, pCreateInfo, pAllocator, pRenderPass);
599	else
600		createRenderPassHandlerStat(device, pCreateInfo, pAllocator, pRenderPass);
601	return VK_SUCCESS;
602}
603
604void DeviceDriverSC::destroyRenderPass (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) const
605{
606	std::lock_guard<std::mutex> lock(functionMutex);
607	if (m_normalMode)
608		m_vk.destroyRenderPass(device, renderPass, pAllocator);
609	else
610		destroyRenderPassHandler(device, renderPass, pAllocator);
611}
612
613void DeviceDriverSC::getRenderAreaGranularity (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) const
614{
615	if (m_normalMode)
616		m_vk.getRenderAreaGranularity(device, renderPass, pGranularity);
617}
618
619VkResult DeviceDriverSC::createCommandPool (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) const
620{
621	std::lock_guard<std::mutex> lock(functionMutex);
622	if (m_normalMode)
623		return createCommandPoolHandlerNorm(device, pCreateInfo, pAllocator, pCommandPool);
624	else
625		createCommandPoolHandlerStat(device, pCreateInfo, pAllocator, pCommandPool);
626	return VK_SUCCESS;
627}
628
629VkResult DeviceDriverSC::resetCommandPool (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) const
630{
631	std::lock_guard<std::mutex> lock(functionMutex);
632	if (m_normalMode)
633		return resetCommandPoolHandlerNorm(device, commandPool, flags);
634	else
635		resetCommandPoolHandlerStat(device, commandPool, flags);
636	return VK_SUCCESS;
637}
638
639VkResult DeviceDriverSC::allocateCommandBuffers (VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) const
640{
641	std::lock_guard<std::mutex> lock(functionMutex);
642	if (m_normalMode)
643		return m_vk.allocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
644	else
645		allocateCommandBuffersHandler(device, pAllocateInfo, pCommandBuffers);
646	return VK_SUCCESS;
647}
648
649void DeviceDriverSC::freeCommandBuffers (VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) const
650{
651	std::lock_guard<std::mutex> lock(functionMutex);
652	if (m_normalMode)
653		m_vk.freeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
654	else
655		freeCommandBuffersHandler(device, commandPool, commandBufferCount, pCommandBuffers);
656}
657
658VkResult DeviceDriverSC::beginCommandBuffer (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) const
659{
660	if (m_normalMode)
661		return m_vk.beginCommandBuffer(commandBuffer, pBeginInfo);
662	return VK_SUCCESS;
663}
664
665VkResult DeviceDriverSC::endCommandBuffer (VkCommandBuffer commandBuffer) const
666{
667	if (m_normalMode)
668		return m_vk.endCommandBuffer(commandBuffer);
669	return VK_SUCCESS;
670}
671
672VkResult DeviceDriverSC::resetCommandBuffer (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const
673{
674	if (m_normalMode)
675		return m_vk.resetCommandBuffer(commandBuffer, flags);
676	return VK_SUCCESS;
677}
678
679void DeviceDriverSC::cmdBindPipeline (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const
680{
681	if (m_normalMode)
682		m_vk.cmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
683	else
684		increaseCommandBufferSize(commandBuffer, 0u);
685}
686
687void DeviceDriverSC::cmdSetViewport (VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports) const
688{
689	if (m_normalMode)
690		m_vk.cmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
691	else
692		increaseCommandBufferSize(commandBuffer, 0u);
693}
694
695void DeviceDriverSC::cmdSetScissor (VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors) const
696{
697	if (m_normalMode)
698		m_vk.cmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
699	else
700		increaseCommandBufferSize(commandBuffer, 0u);
701}
702
703void DeviceDriverSC::cmdSetLineWidth (VkCommandBuffer commandBuffer, float lineWidth) const
704{
705	if (m_normalMode)
706		m_vk.cmdSetLineWidth(commandBuffer, lineWidth);
707	else
708		increaseCommandBufferSize(commandBuffer, 0u);
709}
710
711void DeviceDriverSC::cmdSetDepthBias (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const
712{
713	if (m_normalMode)
714		m_vk.cmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
715	else
716		increaseCommandBufferSize(commandBuffer, 0u);
717}
718
719void DeviceDriverSC::cmdSetBlendConstants (VkCommandBuffer commandBuffer, const float blendConstants[4]) const
720{
721	if (m_normalMode)
722		m_vk.cmdSetBlendConstants(commandBuffer, blendConstants);
723	else
724		increaseCommandBufferSize(commandBuffer, 0u);
725}
726
727void DeviceDriverSC::cmdSetDepthBounds (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) const
728{
729	if (m_normalMode)
730		m_vk.cmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
731	else
732		increaseCommandBufferSize(commandBuffer, 0u);
733}
734
735void DeviceDriverSC::cmdSetStencilCompareMask (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask) const
736{
737	if (m_normalMode)
738		m_vk.cmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
739	else
740		increaseCommandBufferSize(commandBuffer, 0u);
741}
742
743void DeviceDriverSC::cmdSetStencilWriteMask (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask) const
744{
745	if (m_normalMode)
746		m_vk.cmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
747	else
748		increaseCommandBufferSize(commandBuffer, 0u);
749}
750
751void DeviceDriverSC::cmdSetStencilReference (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference) const
752{
753	if (m_normalMode)
754		m_vk.cmdSetStencilReference(commandBuffer, faceMask, reference);
755	else
756		increaseCommandBufferSize(commandBuffer, 0u);
757}
758
759void DeviceDriverSC::cmdBindDescriptorSets (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) const
760{
761	if (m_normalMode)
762		m_vk.cmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
763	else
764		increaseCommandBufferSize(commandBuffer, 0u);
765}
766
767void DeviceDriverSC::cmdBindIndexBuffer (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const
768{
769	if (m_normalMode)
770		m_vk.cmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
771	else
772		increaseCommandBufferSize(commandBuffer, 0u);
773}
774
775void DeviceDriverSC::cmdBindVertexBuffers (VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const
776{
777	if (m_normalMode)
778		m_vk.cmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
779	else
780		increaseCommandBufferSize(commandBuffer, 0u);
781}
782
783void DeviceDriverSC::cmdDraw (VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) const
784{
785	if (m_normalMode)
786		m_vk.cmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
787	else
788		increaseCommandBufferSize(commandBuffer, 0u);
789}
790
791void DeviceDriverSC::cmdDrawIndexed (VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const
792{
793	if (m_normalMode)
794		m_vk.cmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
795	else
796		increaseCommandBufferSize(commandBuffer, 0u);
797}
798
799void DeviceDriverSC::cmdDrawIndirect (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) const
800{
801	if (m_normalMode)
802		m_vk.cmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
803	else
804		increaseCommandBufferSize(commandBuffer, 0u);
805}
806
807void DeviceDriverSC::cmdDrawIndexedIndirect (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) const
808{
809	if (m_normalMode)
810		m_vk.cmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
811	else
812		increaseCommandBufferSize(commandBuffer, 0u);
813}
814
815void DeviceDriverSC::cmdDispatch (VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) const
816{
817	if (m_normalMode)
818		m_vk.cmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
819	else
820		increaseCommandBufferSize(commandBuffer, 0u);
821}
822
823void DeviceDriverSC::cmdDispatchIndirect (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const
824{
825	if (m_normalMode)
826		m_vk.cmdDispatchIndirect(commandBuffer, buffer, offset);
827	else
828		increaseCommandBufferSize(commandBuffer, 0u);
829}
830
831void DeviceDriverSC::cmdCopyBuffer (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) const
832{
833	if (m_normalMode)
834		m_vk.cmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
835	else
836		increaseCommandBufferSize(commandBuffer, 0u);
837}
838
839void DeviceDriverSC::cmdCopyImage (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) const
840{
841	if (m_normalMode)
842		m_vk.cmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
843	else
844		increaseCommandBufferSize(commandBuffer, 0u);
845}
846
847void DeviceDriverSC::cmdBlitImage (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) const
848{
849	if (m_normalMode)
850		m_vk.cmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
851	else
852		increaseCommandBufferSize(commandBuffer, 0u);
853}
854
855void DeviceDriverSC::cmdCopyBufferToImage (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) const
856{
857	if (m_normalMode)
858		m_vk.cmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
859	else
860		increaseCommandBufferSize(commandBuffer, 0u);
861}
862
863void DeviceDriverSC::cmdCopyImageToBuffer (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) const
864{
865	if (m_normalMode)
866		m_vk.cmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
867	else
868		increaseCommandBufferSize(commandBuffer, 0u);
869}
870
871void DeviceDriverSC::cmdUpdateBuffer (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) const
872{
873	std::lock_guard<std::mutex> lock(functionMutex);
874	if (m_normalMode)
875		m_vk.cmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
876	else
877		increaseCommandBufferSize(commandBuffer, dataSize);
878}
879
880void DeviceDriverSC::cmdFillBuffer (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data) const
881{
882	if (m_normalMode)
883		m_vk.cmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
884	else
885		increaseCommandBufferSize(commandBuffer, 0u);
886}
887
888void DeviceDriverSC::cmdClearColorImage (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) const
889{
890	if (m_normalMode)
891		m_vk.cmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
892	else
893		increaseCommandBufferSize(commandBuffer, 0u);
894}
895
896void DeviceDriverSC::cmdClearDepthStencilImage (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) const
897{
898	if (m_normalMode)
899		m_vk.cmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
900	else
901		increaseCommandBufferSize(commandBuffer, 0u);
902}
903
904void DeviceDriverSC::cmdClearAttachments (VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) const
905{
906	if (m_normalMode)
907		m_vk.cmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
908	else
909		increaseCommandBufferSize(commandBuffer, 0u);
910}
911
912void DeviceDriverSC::cmdResolveImage (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) const
913{
914	if (m_normalMode)
915		m_vk.cmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
916	else
917		increaseCommandBufferSize(commandBuffer, 0u);
918}
919
920void DeviceDriverSC::cmdSetEvent (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const
921{
922	if (m_normalMode)
923		m_vk.cmdSetEvent(commandBuffer, event, stageMask);
924	else
925		increaseCommandBufferSize(commandBuffer, 0u);
926}
927
928void DeviceDriverSC::cmdResetEvent (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const
929{
930	if (m_normalMode)
931		m_vk.cmdResetEvent(commandBuffer, event, stageMask);
932	else
933		increaseCommandBufferSize(commandBuffer, 0u);
934}
935
936void DeviceDriverSC::cmdWaitEvents (VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const
937{
938	if (m_normalMode)
939		m_vk.cmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
940	else
941		increaseCommandBufferSize(commandBuffer, 0u);
942}
943
944void DeviceDriverSC::cmdPipelineBarrier (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const
945{
946	if (m_normalMode)
947		m_vk.cmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
948	else
949		increaseCommandBufferSize(commandBuffer, 0u);
950}
951
952void DeviceDriverSC::cmdBeginQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags) const
953{
954	if (m_normalMode)
955		m_vk.cmdBeginQuery(commandBuffer, queryPool, query, flags);
956	else
957		increaseCommandBufferSize(commandBuffer, 0u);
958}
959
960void DeviceDriverSC::cmdEndQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query) const
961{
962	if (m_normalMode)
963		m_vk.cmdEndQuery(commandBuffer, queryPool, query);
964	else
965		increaseCommandBufferSize(commandBuffer, 0u);
966}
967
968void DeviceDriverSC::cmdResetQueryPool (VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount) const
969{
970	if (m_normalMode)
971		m_vk.cmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
972	else
973		increaseCommandBufferSize(commandBuffer, 0u);
974}
975
976void DeviceDriverSC::cmdWriteTimestamp (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query) const
977{
978	if (m_normalMode)
979		m_vk.cmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
980	else
981		increaseCommandBufferSize(commandBuffer, 0u);
982}
983
984void DeviceDriverSC::cmdCopyQueryPoolResults (VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const
985{
986	if (m_normalMode)
987		m_vk.cmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
988	else
989		increaseCommandBufferSize(commandBuffer, 0u);
990}
991
992void DeviceDriverSC::cmdPushConstants (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues) const
993{
994	if (m_normalMode)
995		m_vk.cmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
996	else
997		increaseCommandBufferSize(commandBuffer, 0u);
998}
999
1000void DeviceDriverSC::cmdBeginRenderPass (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const
1001{
1002	if (m_normalMode)
1003		m_vk.cmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
1004	else
1005		increaseCommandBufferSize(commandBuffer, 0u);
1006}
1007
1008void DeviceDriverSC::cmdNextSubpass (VkCommandBuffer commandBuffer, VkSubpassContents contents) const
1009{
1010	if (m_normalMode)
1011		m_vk.cmdNextSubpass(commandBuffer, contents);
1012	else
1013		increaseCommandBufferSize(commandBuffer, 0u);
1014}
1015
1016void DeviceDriverSC::cmdEndRenderPass (VkCommandBuffer commandBuffer) const
1017{
1018	if (m_normalMode)
1019		m_vk.cmdEndRenderPass(commandBuffer);
1020	else
1021		increaseCommandBufferSize(commandBuffer, 0u);
1022}
1023
1024void DeviceDriverSC::cmdExecuteCommands (VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) const
1025{
1026	if (m_normalMode)
1027		m_vk.cmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
1028	else
1029		increaseCommandBufferSize(commandBuffer, 0u);
1030}
1031
1032VkResult DeviceDriverSC::createSharedSwapchainsKHR (VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains) const
1033{
1034	if (m_normalMode)
1035		return m_vk.createSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
1036	return VK_SUCCESS;
1037}
1038
1039VkResult DeviceDriverSC::createSwapchainKHR (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) const
1040{
1041	if (m_normalMode)
1042		return m_vk.createSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
1043	return VK_SUCCESS;
1044}
1045
1046VkResult DeviceDriverSC::getSwapchainImagesKHR (VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages) const
1047{
1048	if (m_normalMode)
1049		return m_vk.getSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
1050	return VK_SUCCESS;
1051}
1052
1053VkResult DeviceDriverSC::acquireNextImageKHR (VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex) const
1054{
1055	if (m_normalMode)
1056		return m_vk.acquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
1057	return VK_SUCCESS;
1058}
1059
1060VkResult DeviceDriverSC::queuePresentKHR (VkQueue queue, const VkPresentInfoKHR* pPresentInfo) const
1061{
1062	if (m_normalMode)
1063		return m_vk.queuePresentKHR(queue, pPresentInfo);
1064	return VK_SUCCESS;
1065}
1066
1067VkResult DeviceDriverSC::getMemoryFdKHR (VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd) const
1068{
1069	if (m_normalMode)
1070		return m_vk.getMemoryFdKHR(device, pGetFdInfo, pFd);
1071	return VK_SUCCESS;
1072}
1073
1074VkResult DeviceDriverSC::getMemoryFdPropertiesKHR (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties) const
1075{
1076	if (m_normalMode)
1077		return m_vk.getMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
1078	return VK_SUCCESS;
1079}
1080
1081VkResult DeviceDriverSC::getMemorySciBufNV (VkDevice device, const VkMemoryGetSciBufInfoNV* pGetSciBufInfo, pt::NvSciBufObj* pHandle) const
1082{
1083	if (m_normalMode)
1084		return m_vk.getMemorySciBufNV(device, pGetSciBufInfo, pHandle);
1085	return VK_SUCCESS;
1086}
1087
1088VkResult DeviceDriverSC::getSemaphoreFdKHR (VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) const
1089{
1090	if (m_normalMode)
1091		return m_vk.getSemaphoreFdKHR(device, pGetFdInfo, pFd);
1092	return VK_SUCCESS;
1093}
1094
1095VkResult DeviceDriverSC::importSemaphoreFdKHR (VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) const
1096{
1097	if (m_normalMode)
1098		return m_vk.importSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
1099	return VK_SUCCESS;
1100}
1101
1102VkResult DeviceDriverSC::getFenceFdKHR (VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd) const
1103{
1104	if (m_normalMode)
1105		return m_vk.getFenceFdKHR(device, pGetFdInfo, pFd);
1106	return VK_SUCCESS;
1107}
1108
1109VkResult DeviceDriverSC::importFenceFdKHR (VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo) const
1110{
1111	if (m_normalMode)
1112		return m_vk.importFenceFdKHR(device, pImportFenceFdInfo);
1113	return VK_SUCCESS;
1114}
1115
1116VkResult DeviceDriverSC::getFenceSciSyncFenceNV (VkDevice device, const VkFenceGetSciSyncInfoNV* pGetSciSyncHandleInfo, void* pHandle) const
1117{
1118	if (m_normalMode)
1119		return m_vk.getFenceSciSyncFenceNV(device, pGetSciSyncHandleInfo, pHandle);
1120	return VK_SUCCESS;
1121}
1122
1123VkResult DeviceDriverSC::getFenceSciSyncObjNV (VkDevice device, const VkFenceGetSciSyncInfoNV* pGetSciSyncHandleInfo, void* pHandle) const
1124{
1125	if (m_normalMode)
1126		return m_vk.getFenceSciSyncObjNV(device, pGetSciSyncHandleInfo, pHandle);
1127	return VK_SUCCESS;
1128}
1129
1130VkResult DeviceDriverSC::importFenceSciSyncFenceNV (VkDevice device, const VkImportFenceSciSyncInfoNV* pImportFenceSciSyncInfo) const
1131{
1132	if (m_normalMode)
1133		return m_vk.importFenceSciSyncFenceNV(device, pImportFenceSciSyncInfo);
1134	return VK_SUCCESS;
1135}
1136
1137VkResult DeviceDriverSC::importFenceSciSyncObjNV (VkDevice device, const VkImportFenceSciSyncInfoNV* pImportFenceSciSyncInfo) const
1138{
1139	if (m_normalMode)
1140		return m_vk.importFenceSciSyncObjNV(device, pImportFenceSciSyncInfo);
1141	return VK_SUCCESS;
1142}
1143
1144VkResult DeviceDriverSC::getSemaphoreSciSyncObjNV (VkDevice device, const VkSemaphoreGetSciSyncInfoNV* pGetSciSyncInfo, void* pHandle) const
1145{
1146	if (m_normalMode)
1147		return m_vk.getSemaphoreSciSyncObjNV(device, pGetSciSyncInfo, pHandle);
1148	return VK_SUCCESS;
1149}
1150
1151VkResult DeviceDriverSC::importSemaphoreSciSyncObjNV (VkDevice device, const VkImportSemaphoreSciSyncInfoNV* pImportSemaphoreSciSyncInfo) const
1152{
1153	if (m_normalMode)
1154		return m_vk.importSemaphoreSciSyncObjNV(device, pImportSemaphoreSciSyncInfo);
1155	return VK_SUCCESS;
1156}
1157
1158VkResult DeviceDriverSC::createSemaphoreSciSyncPoolNV (VkDevice device, const VkSemaphoreSciSyncPoolCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphoreSciSyncPoolNV* pSemaphorePool) const
1159{
1160	if (m_normalMode)
1161		return m_vk.createSemaphoreSciSyncPoolNV(device, pCreateInfo, pAllocator, pSemaphorePool);
1162	return VK_SUCCESS;
1163}
1164
1165VkResult DeviceDriverSC::displayPowerControlEXT (VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo) const
1166{
1167	if (m_normalMode)
1168		return m_vk.displayPowerControlEXT(device, display, pDisplayPowerInfo);
1169	return VK_SUCCESS;
1170}
1171
1172VkResult DeviceDriverSC::registerDeviceEventEXT (VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const
1173{
1174	if (m_normalMode)
1175		return m_vk.registerDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
1176	return VK_SUCCESS;
1177}
1178
1179VkResult DeviceDriverSC::registerDisplayEventEXT (VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const
1180{
1181	if (m_normalMode)
1182		return m_vk.registerDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
1183	return VK_SUCCESS;
1184}
1185
1186VkResult DeviceDriverSC::getSwapchainCounterEXT (VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue) const
1187{
1188	if (m_normalMode)
1189		return m_vk.getSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
1190	return VK_SUCCESS;
1191}
1192
1193void DeviceDriverSC::getDeviceGroupPeerMemoryFeatures (VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) const
1194{
1195	if (m_normalMode)
1196		m_vk.getDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
1197}
1198
1199VkResult DeviceDriverSC::bindBufferMemory2 (VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos) const
1200{
1201	if (m_normalMode)
1202		return m_vk.bindBufferMemory2(device, bindInfoCount, pBindInfos);
1203	return VK_SUCCESS;
1204}
1205
1206VkResult DeviceDriverSC::bindImageMemory2 (VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos) const
1207{
1208	if (m_normalMode)
1209		return m_vk.bindImageMemory2(device, bindInfoCount, pBindInfos);
1210	return VK_SUCCESS;
1211}
1212
1213void DeviceDriverSC::cmdSetDeviceMask (VkCommandBuffer commandBuffer, uint32_t deviceMask) const
1214{
1215	if (m_normalMode)
1216		m_vk.cmdSetDeviceMask(commandBuffer, deviceMask);
1217	else
1218		increaseCommandBufferSize(commandBuffer, 0u);
1219}
1220
1221VkResult DeviceDriverSC::getDeviceGroupPresentCapabilitiesKHR (VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) const
1222{
1223	if (m_normalMode)
1224		return m_vk.getDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
1225	return VK_SUCCESS;
1226}
1227
1228VkResult DeviceDriverSC::getDeviceGroupSurfacePresentModesKHR (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes) const
1229{
1230	if (m_normalMode)
1231		return m_vk.getDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
1232	return VK_SUCCESS;
1233}
1234
1235VkResult DeviceDriverSC::acquireNextImage2KHR (VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex) const
1236{
1237	if (m_normalMode)
1238		return m_vk.acquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
1239	return VK_SUCCESS;
1240}
1241
1242void DeviceDriverSC::cmdDispatchBase (VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) const
1243{
1244	if (m_normalMode)
1245		m_vk.cmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
1246	else
1247		increaseCommandBufferSize(commandBuffer, 0u);
1248}
1249
1250void DeviceDriverSC::setHdrMetadataEXT (VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata) const
1251{
1252	if (m_normalMode)
1253		m_vk.setHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
1254}
1255
1256VkResult DeviceDriverSC::getSwapchainStatusKHR (VkDevice device, VkSwapchainKHR swapchain) const
1257{
1258	if (m_normalMode)
1259		return m_vk.getSwapchainStatusKHR(device, swapchain);
1260	return VK_SUCCESS;
1261}
1262
1263void DeviceDriverSC::cmdSetDiscardRectangleEXT (VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles) const
1264{
1265	if (m_normalMode)
1266		m_vk.cmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
1267	else
1268		increaseCommandBufferSize(commandBuffer, 0u);
1269}
1270
1271void DeviceDriverSC::cmdSetDiscardRectangleEnableEXT (VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable) const
1272{
1273	if (m_normalMode)
1274		m_vk.cmdSetDiscardRectangleEnableEXT(commandBuffer, discardRectangleEnable);
1275	else
1276		increaseCommandBufferSize(commandBuffer, 0u);
1277}
1278
1279void DeviceDriverSC::cmdSetDiscardRectangleModeEXT (VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode) const
1280{
1281	if (m_normalMode)
1282		m_vk.cmdSetDiscardRectangleModeEXT(commandBuffer, discardRectangleMode);
1283	else
1284		increaseCommandBufferSize(commandBuffer, 0u);
1285}
1286
1287void DeviceDriverSC::cmdSetSampleLocationsEXT (VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo) const
1288{
1289	if (m_normalMode)
1290		m_vk.cmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
1291	else
1292		increaseCommandBufferSize(commandBuffer, 0u);
1293}
1294
1295void DeviceDriverSC::getBufferMemoryRequirements2 (VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) const
1296{
1297	std::lock_guard<std::mutex> lock(functionMutex);
1298	if (m_normalMode)
1299		m_vk.getBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
1300	else
1301	{
1302		DDSTAT_LOCK();
1303		pMemoryRequirements->memoryRequirements.size = 1048576U;
1304		pMemoryRequirements->memoryRequirements.alignment = 1U;
1305		pMemoryRequirements->memoryRequirements.memoryTypeBits = ~0U;
1306	}
1307}
1308
1309void DeviceDriverSC::getImageMemoryRequirements2 (VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) const
1310{
1311	std::lock_guard<std::mutex> lock(functionMutex);
1312	if (m_normalMode)
1313		m_vk.getImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
1314	else
1315	{
1316		DDSTAT_LOCK();
1317		pMemoryRequirements->memoryRequirements.size = 1048576U;
1318		pMemoryRequirements->memoryRequirements.alignment = 1U;
1319		pMemoryRequirements->memoryRequirements.memoryTypeBits = ~0U;
1320	}
1321}
1322
1323VkResult DeviceDriverSC::createSamplerYcbcrConversion (VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion) const
1324{
1325	std::lock_guard<std::mutex> lock(functionMutex);
1326	if (m_normalMode)
1327		return createSamplerYcbcrConversionHandlerNorm(device, pCreateInfo, pAllocator, pYcbcrConversion);
1328	else
1329		createSamplerYcbcrConversionHandlerStat(device, pCreateInfo, pAllocator, pYcbcrConversion);
1330	return VK_SUCCESS;
1331}
1332
1333void DeviceDriverSC::destroySamplerYcbcrConversion (VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator) const
1334{
1335	std::lock_guard<std::mutex> lock(functionMutex);
1336	if (m_normalMode)
1337		m_vk.destroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
1338	else
1339	{
1340		DDSTAT_LOCK();
1341		DDSTAT_HANDLE_DESTROY_IF(ycbcrConversion,samplerYcbcrConversionRequestCount,1);
1342	}
1343}
1344
1345void DeviceDriverSC::getDeviceQueue2 (VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue) const
1346{
1347	if (m_normalMode)
1348		m_vk.getDeviceQueue2(device, pQueueInfo, pQueue);
1349}
1350
1351void DeviceDriverSC::getDescriptorSetLayoutSupport (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport) const
1352{
1353	std::lock_guard<std::mutex> lock(functionMutex);
1354	if (m_normalMode)
1355		m_vk.getDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
1356	else
1357		getDescriptorSetLayoutSupportHandler(device, pCreateInfo, pSupport);
1358}
1359
1360VkResult DeviceDriverSC::getCalibratedTimestampsEXT (VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation) const
1361{
1362	if (m_normalMode)
1363		return m_vk.getCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
1364	return VK_SUCCESS;
1365}
1366
1367VkResult DeviceDriverSC::setDebugUtilsObjectNameEXT (VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo) const
1368{
1369	if (m_normalMode)
1370		return m_vk.setDebugUtilsObjectNameEXT(device, pNameInfo);
1371	return VK_SUCCESS;
1372}
1373
1374VkResult DeviceDriverSC::setDebugUtilsObjectTagEXT (VkDevice device, const VkDebugUtilsObjectTagInfoEXT* pTagInfo) const
1375{
1376	if (m_normalMode)
1377		return m_vk.setDebugUtilsObjectTagEXT(device, pTagInfo);
1378	return VK_SUCCESS;
1379}
1380
1381void DeviceDriverSC::queueBeginDebugUtilsLabelEXT (VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo) const
1382{
1383	if (m_normalMode)
1384		m_vk.queueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
1385}
1386
1387void DeviceDriverSC::queueEndDebugUtilsLabelEXT (VkQueue queue) const
1388{
1389	if (m_normalMode)
1390		m_vk.queueEndDebugUtilsLabelEXT(queue);
1391}
1392
1393void DeviceDriverSC::queueInsertDebugUtilsLabelEXT (VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo) const
1394{
1395	if (m_normalMode)
1396		m_vk.queueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
1397}
1398
1399void DeviceDriverSC::cmdBeginDebugUtilsLabelEXT (VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo) const
1400{
1401	if (m_normalMode)
1402		m_vk.cmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
1403	else
1404		increaseCommandBufferSize(commandBuffer, 0u);
1405}
1406
1407void DeviceDriverSC::cmdEndDebugUtilsLabelEXT (VkCommandBuffer commandBuffer) const
1408{
1409	if (m_normalMode)
1410		m_vk.cmdEndDebugUtilsLabelEXT(commandBuffer);
1411	else
1412		increaseCommandBufferSize(commandBuffer, 0u);
1413}
1414
1415void DeviceDriverSC::cmdInsertDebugUtilsLabelEXT (VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo) const
1416{
1417	if (m_normalMode)
1418		m_vk.cmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
1419	else
1420		increaseCommandBufferSize(commandBuffer, 0u);
1421}
1422
1423VkResult DeviceDriverSC::getMemoryHostPointerPropertiesEXT (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties) const
1424{
1425	if (m_normalMode)
1426		return m_vk.getMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
1427	return VK_SUCCESS;
1428}
1429
1430VkResult DeviceDriverSC::createRenderPass2 (VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const
1431{
1432	std::lock_guard<std::mutex> lock(functionMutex);
1433	if (m_normalMode)
1434		return createRenderPass2HandlerNorm(device, pCreateInfo, pAllocator, pRenderPass);
1435	else
1436		createRenderPass2HandlerStat(device, pCreateInfo, pAllocator, pRenderPass);
1437	return VK_SUCCESS;
1438}
1439
1440void DeviceDriverSC::cmdBeginRenderPass2 (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo) const
1441{
1442	if (m_normalMode)
1443		m_vk.cmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
1444	else
1445		increaseCommandBufferSize(commandBuffer, 0u);
1446}
1447
1448void DeviceDriverSC::cmdNextSubpass2 (VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo) const
1449{
1450	if (m_normalMode)
1451		m_vk.cmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
1452	else
1453		increaseCommandBufferSize(commandBuffer, 0u);
1454}
1455
1456void DeviceDriverSC::cmdEndRenderPass2 (VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo) const
1457{
1458	if (m_normalMode)
1459		m_vk.cmdEndRenderPass2(commandBuffer, pSubpassEndInfo);
1460	else
1461		increaseCommandBufferSize(commandBuffer, 0u);
1462}
1463
1464VkResult DeviceDriverSC::getSemaphoreCounterValue (VkDevice device, VkSemaphore semaphore, uint64_t* pValue) const
1465{
1466	if (m_normalMode)
1467		return m_vk.getSemaphoreCounterValue(device, semaphore, pValue);
1468	return VK_SUCCESS;
1469}
1470
1471VkResult DeviceDriverSC::waitSemaphores (VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout) const
1472{
1473	if (m_normalMode)
1474		return m_vk.waitSemaphores(device, pWaitInfo, timeout);
1475	return VK_SUCCESS;
1476}
1477
1478VkResult DeviceDriverSC::signalSemaphore (VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo) const
1479{
1480	if (m_normalMode)
1481		return m_vk.signalSemaphore(device, pSignalInfo);
1482	return VK_SUCCESS;
1483}
1484
1485void DeviceDriverSC::cmdDrawIndirectCount (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) const
1486{
1487	if (m_normalMode)
1488		m_vk.cmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
1489	else
1490		increaseCommandBufferSize(commandBuffer, 0u);
1491}
1492
1493void DeviceDriverSC::cmdDrawIndexedIndirectCount (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) const
1494{
1495	if (m_normalMode)
1496		m_vk.cmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
1497	else
1498		increaseCommandBufferSize(commandBuffer, 0u);
1499}
1500
1501void DeviceDriverSC::cmdSetCheckpointNV (VkCommandBuffer commandBuffer, const void* pCheckpointMarker) const
1502{
1503	if (m_normalMode)
1504		m_vk.cmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
1505	else
1506		increaseCommandBufferSize(commandBuffer, 0u);
1507}
1508
1509void DeviceDriverSC::getQueueCheckpointDataNV (VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointDataNV* pCheckpointData) const
1510{
1511	if (m_normalMode)
1512		m_vk.getQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
1513}
1514
1515VkResult DeviceDriverSC::acquireProfilingLockKHR (VkDevice device, const VkAcquireProfilingLockInfoKHR* pInfo) const
1516{
1517	if (m_normalMode)
1518		return m_vk.acquireProfilingLockKHR(device, pInfo);
1519	return VK_SUCCESS;
1520}
1521
1522void DeviceDriverSC::releaseProfilingLockKHR (VkDevice device) const
1523{
1524	if (m_normalMode)
1525		m_vk.releaseProfilingLockKHR(device);
1526}
1527
1528VkResult DeviceDriverSC::getImageDrmFormatModifierPropertiesEXT (VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties) const
1529{
1530	if (m_normalMode)
1531		return m_vk.getImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
1532	return VK_SUCCESS;
1533}
1534
1535uint64_t DeviceDriverSC::getBufferOpaqueCaptureAddress (VkDevice device, const VkBufferDeviceAddressInfo* pInfo) const
1536{
1537	if (m_normalMode)
1538		return m_vk.getBufferOpaqueCaptureAddress(device, pInfo);
1539	return 0u;
1540}
1541
1542VkDeviceAddress DeviceDriverSC::getBufferDeviceAddress (VkDevice device, const VkBufferDeviceAddressInfo* pInfo) const
1543{
1544	if (m_normalMode)
1545		return m_vk.getBufferDeviceAddress(device, pInfo);
1546	return 0u;
1547}
1548
1549uint64_t DeviceDriverSC::getDeviceMemoryOpaqueCaptureAddress (VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) const
1550{
1551	if (m_normalMode)
1552		return m_vk.getDeviceMemoryOpaqueCaptureAddress(device, pInfo);
1553	return 0u;
1554}
1555
1556void DeviceDriverSC::cmdSetLineStippleEXT (VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern) const
1557{
1558	if (m_normalMode)
1559		m_vk.cmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern);
1560	else
1561		increaseCommandBufferSize(commandBuffer, 0u);
1562}
1563
1564VkResult DeviceDriverSC::getFaultData (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, uint32_t* pFaultCount, VkFaultData* pFaults) const
1565{
1566	if (m_normalMode)
1567		return m_vk.getFaultData(device, faultQueryBehavior, pUnrecordedFaults, pFaultCount, pFaults);
1568	return VK_SUCCESS;
1569}
1570
1571void DeviceDriverSC::cmdSetCullModeEXT (VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) const
1572{
1573	if (m_normalMode)
1574		m_vk.cmdSetCullModeEXT(commandBuffer, cullMode);
1575	else
1576		increaseCommandBufferSize(commandBuffer, 0u);
1577}
1578
1579void DeviceDriverSC::cmdSetFrontFaceEXT (VkCommandBuffer commandBuffer, VkFrontFace frontFace) const
1580{
1581	if (m_normalMode)
1582		m_vk.cmdSetFrontFaceEXT(commandBuffer, frontFace);
1583	else
1584		increaseCommandBufferSize(commandBuffer, 0u);
1585}
1586
1587void DeviceDriverSC::cmdSetPrimitiveTopologyEXT (VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology) const
1588{
1589	if (m_normalMode)
1590		m_vk.cmdSetPrimitiveTopologyEXT(commandBuffer, primitiveTopology);
1591	else
1592		increaseCommandBufferSize(commandBuffer, 0u);
1593}
1594
1595void DeviceDriverSC::cmdSetViewportWithCountEXT (VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports) const
1596{
1597	if (m_normalMode)
1598		m_vk.cmdSetViewportWithCountEXT(commandBuffer, viewportCount, pViewports);
1599	else
1600		increaseCommandBufferSize(commandBuffer, 0u);
1601}
1602
1603void DeviceDriverSC::cmdSetScissorWithCountEXT (VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors) const
1604{
1605	if (m_normalMode)
1606		m_vk.cmdSetScissorWithCountEXT(commandBuffer, scissorCount, pScissors);
1607	else
1608		increaseCommandBufferSize(commandBuffer, 0u);
1609}
1610
1611void DeviceDriverSC::cmdBindVertexBuffers2EXT (VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides) const
1612{
1613	if (m_normalMode)
1614		m_vk.cmdBindVertexBuffers2EXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides);
1615	else
1616		increaseCommandBufferSize(commandBuffer, 0u);
1617}
1618
1619void DeviceDriverSC::cmdSetDepthTestEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) const
1620{
1621	if (m_normalMode)
1622		m_vk.cmdSetDepthTestEnableEXT(commandBuffer, depthTestEnable);
1623	else
1624		increaseCommandBufferSize(commandBuffer, 0u);
1625}
1626
1627void DeviceDriverSC::cmdSetDepthWriteEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) const
1628{
1629	if (m_normalMode)
1630		m_vk.cmdSetDepthWriteEnableEXT(commandBuffer, depthWriteEnable);
1631	else
1632		increaseCommandBufferSize(commandBuffer, 0u);
1633}
1634
1635void DeviceDriverSC::cmdSetDepthCompareOpEXT (VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) const
1636{
1637	if (m_normalMode)
1638		m_vk.cmdSetDepthCompareOpEXT(commandBuffer, depthCompareOp);
1639	else
1640		increaseCommandBufferSize(commandBuffer, 0u);
1641}
1642
1643void DeviceDriverSC::cmdSetDepthBoundsTestEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable) const
1644{
1645	if (m_normalMode)
1646		m_vk.cmdSetDepthBoundsTestEnableEXT(commandBuffer, depthBoundsTestEnable);
1647	else
1648		increaseCommandBufferSize(commandBuffer, 0u);
1649}
1650
1651void DeviceDriverSC::cmdSetStencilTestEnableEXT (VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) const
1652{
1653	if (m_normalMode)
1654		m_vk.cmdSetStencilTestEnableEXT(commandBuffer, stencilTestEnable);
1655	else
1656		increaseCommandBufferSize(commandBuffer, 0u);
1657}
1658
1659void DeviceDriverSC::cmdSetStencilOpEXT (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp) const
1660{
1661	if (m_normalMode)
1662		m_vk.cmdSetStencilOpEXT(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp);
1663	else
1664		increaseCommandBufferSize(commandBuffer, 0u);
1665}
1666
1667void DeviceDriverSC::cmdSetPatchControlPointsEXT (VkCommandBuffer commandBuffer, uint32_t patchControlPoints) const
1668{
1669	if (m_normalMode)
1670		m_vk.cmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints);
1671	else
1672		increaseCommandBufferSize(commandBuffer, 0u);
1673}
1674
1675void DeviceDriverSC::cmdSetRasterizerDiscardEnableEXT (VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable) const
1676{
1677	if (m_normalMode)
1678		m_vk.cmdSetRasterizerDiscardEnableEXT(commandBuffer, rasterizerDiscardEnable);
1679	else
1680		increaseCommandBufferSize(commandBuffer, 0u);
1681}
1682
1683void DeviceDriverSC::cmdSetDepthBiasEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) const
1684{
1685	if (m_normalMode)
1686		m_vk.cmdSetDepthBiasEnableEXT(commandBuffer, depthBiasEnable);
1687	else
1688		increaseCommandBufferSize(commandBuffer, 0u);
1689}
1690
1691void DeviceDriverSC::cmdSetLogicOpEXT (VkCommandBuffer commandBuffer, VkLogicOp logicOp) const
1692{
1693	if (m_normalMode)
1694		m_vk.cmdSetLogicOpEXT(commandBuffer, logicOp);
1695	else
1696		increaseCommandBufferSize(commandBuffer, 0u);
1697}
1698
1699void DeviceDriverSC::cmdSetPrimitiveRestartEnableEXT (VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable) const
1700{
1701	if (m_normalMode)
1702		m_vk.cmdSetPrimitiveRestartEnableEXT(commandBuffer, primitiveRestartEnable);
1703	else
1704		increaseCommandBufferSize(commandBuffer, 0u);
1705}
1706
1707void DeviceDriverSC::cmdCopyBuffer2KHR (VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo) const
1708{
1709	if (m_normalMode)
1710		m_vk.cmdCopyBuffer2KHR(commandBuffer, pCopyBufferInfo);
1711	else
1712		increaseCommandBufferSize(commandBuffer, 0u);
1713}
1714
1715void DeviceDriverSC::cmdCopyImage2KHR (VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo) const
1716{
1717	if (m_normalMode)
1718		m_vk.cmdCopyImage2KHR(commandBuffer, pCopyImageInfo);
1719	else
1720		increaseCommandBufferSize(commandBuffer, 0u);
1721}
1722
1723void DeviceDriverSC::cmdBlitImage2KHR (VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo) const
1724{
1725	if (m_normalMode)
1726		m_vk.cmdBlitImage2KHR(commandBuffer, pBlitImageInfo);
1727	else
1728		increaseCommandBufferSize(commandBuffer, 0u);
1729}
1730
1731void DeviceDriverSC::cmdCopyBufferToImage2KHR (VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo) const
1732{
1733	if (m_normalMode)
1734		m_vk.cmdCopyBufferToImage2KHR(commandBuffer, pCopyBufferToImageInfo);
1735	else
1736		increaseCommandBufferSize(commandBuffer, 0u);
1737}
1738
1739void DeviceDriverSC::cmdCopyImageToBuffer2KHR (VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo) const
1740{
1741	if (m_normalMode)
1742		m_vk.cmdCopyImageToBuffer2KHR(commandBuffer, pCopyImageToBufferInfo);
1743	else
1744		increaseCommandBufferSize(commandBuffer, 0u);
1745}
1746
1747void DeviceDriverSC::cmdResolveImage2KHR (VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo) const
1748{
1749	if (m_normalMode)
1750		m_vk.cmdResolveImage2KHR(commandBuffer, pResolveImageInfo);
1751	else
1752		increaseCommandBufferSize(commandBuffer, 0u);
1753}
1754
1755void DeviceDriverSC::cmdRefreshObjectsKHR (VkCommandBuffer commandBuffer, const VkRefreshObjectListKHR* pRefreshObjects) const
1756{
1757	if (m_normalMode)
1758		m_vk.cmdRefreshObjectsKHR(commandBuffer, pRefreshObjects);
1759	else
1760		increaseCommandBufferSize(commandBuffer, 0u);
1761}
1762
1763void DeviceDriverSC::cmdSetFragmentShadingRateKHR (VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) const
1764{
1765	if (m_normalMode)
1766		m_vk.cmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps);
1767	else
1768		increaseCommandBufferSize(commandBuffer, 0u);
1769}
1770
1771void DeviceDriverSC::cmdSetVertexInputEXT (VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) const
1772{
1773	if (m_normalMode)
1774		m_vk.cmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions);
1775	else
1776		increaseCommandBufferSize(commandBuffer, 0u);
1777}
1778
1779void DeviceDriverSC::cmdSetColorWriteEnableEXT (VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables) const
1780{
1781	if (m_normalMode)
1782		m_vk.cmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables);
1783	else
1784		increaseCommandBufferSize(commandBuffer, 0u);
1785}
1786
1787void DeviceDriverSC::cmdSetEvent2KHR (VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfoKHR* pDependencyInfo) const
1788{
1789	if (m_normalMode)
1790		m_vk.cmdSetEvent2KHR(commandBuffer, event, pDependencyInfo);
1791	else
1792		increaseCommandBufferSize(commandBuffer, 0u);
1793}
1794
1795void DeviceDriverSC::cmdResetEvent2KHR (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask) const
1796{
1797	if (m_normalMode)
1798		m_vk.cmdResetEvent2KHR(commandBuffer, event, stageMask);
1799	else
1800		increaseCommandBufferSize(commandBuffer, 0u);
1801}
1802
1803void DeviceDriverSC::cmdWaitEvents2KHR (VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfoKHR* pDependencyInfos) const
1804{
1805	if (m_normalMode)
1806		m_vk.cmdWaitEvents2KHR(commandBuffer, eventCount, pEvents, pDependencyInfos);
1807	else
1808		increaseCommandBufferSize(commandBuffer, 0u);
1809}
1810
1811void DeviceDriverSC::cmdPipelineBarrier2KHR (VkCommandBuffer commandBuffer, const VkDependencyInfoKHR* pDependencyInfo) const
1812{
1813	if (m_normalMode)
1814		m_vk.cmdPipelineBarrier2KHR(commandBuffer, pDependencyInfo);
1815	else
1816		increaseCommandBufferSize(commandBuffer, 0u);
1817}
1818
1819VkResult DeviceDriverSC::queueSubmit2KHR (VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence) const
1820{
1821	if (m_normalMode)
1822		return m_vk.queueSubmit2KHR(queue, submitCount, pSubmits, fence);
1823	return VK_SUCCESS;
1824}
1825
1826void DeviceDriverSC::cmdWriteTimestamp2KHR (VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query) const
1827{
1828	if (m_normalMode)
1829		m_vk.cmdWriteTimestamp2KHR(commandBuffer, stage, queryPool, query);
1830	else
1831		increaseCommandBufferSize(commandBuffer, 0u);
1832}
1833
1834void DeviceDriverSC::getQueueCheckpointData2NV (VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData) const
1835{
1836	if (m_normalMode)
1837		m_vk.getQueueCheckpointData2NV(queue, pCheckpointDataCount, pCheckpointData);
1838}
1839
1840void DeviceDriverSC::getCommandPoolMemoryConsumption (VkDevice device, VkCommandPool commandPool, VkCommandBuffer commandBuffer, VkCommandPoolMemoryConsumption* pConsumption) const
1841{
1842	if (m_normalMode)
1843		m_vk.getCommandPoolMemoryConsumption(device, commandPool, commandBuffer, pConsumption);
1844}
1845
1846VkResult DeviceDriverSC::getScreenBufferPropertiesQNX (VkDevice device, const struct _screen_buffer* buffer, VkScreenBufferPropertiesQNX* pProperties) const
1847{
1848	if (m_normalMode)
1849		return m_vk.getScreenBufferPropertiesQNX(device, buffer, pProperties);
1850	return VK_SUCCESS;
1851}
1852