1 // Copyright (C) 2018 The Android Open Source Project 2 // Copyright (C) 2018 Google Inc. 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 #pragma once 16 17 #include "android/base/Tracing.h" 18 19 #include <vulkan/vulkan.h> 20 21 #include "VulkanHandleMapping.h" 22 #include "VulkanHandles.h" 23 #include <functional> 24 #include <memory> 25 26 #include "goldfish_vk_transform_guest.h" 27 28 struct EmulatorFeatureInfo; 29 30 class HostConnection; 31 32 namespace goldfish_vk { 33 34 class VkEncoder; 35 36 class ResourceTracker { 37 public: 38 ResourceTracker(); 39 virtual ~ResourceTracker(); 40 static ResourceTracker* get(); 41 42 VulkanHandleMapping* createMapping(); 43 VulkanHandleMapping* unwrapMapping(); 44 VulkanHandleMapping* destroyMapping(); 45 VulkanHandleMapping* defaultMapping(); 46 47 using HostConnectionGetFunc = HostConnection* (*)(); 48 using VkEncoderGetFunc = VkEncoder* (*)(HostConnection*); 49 using CleanupCallback = std::function<void()>; 50 51 struct ThreadingCallbacks { 52 HostConnectionGetFunc hostConnectionGetFunc = 0; 53 VkEncoderGetFunc vkEncoderGetFunc = 0; 54 }; 55 56 static uint32_t streamFeatureBits; 57 static ThreadingCallbacks threadingCallbacks; 58 59 #define HANDLE_REGISTER_DECL(type) \ 60 void register_##type(type); \ 61 void unregister_##type(type); \ 62 63 GOLDFISH_VK_LIST_HANDLE_TYPES(HANDLE_REGISTER_DECL) 64 65 VkResult on_vkEnumerateInstanceExtensionProperties( 66 void* context, 67 VkResult input_result, 68 const char* pLayerName, 69 uint32_t* pPropertyCount, 70 VkExtensionProperties* pProperties); 71 72 VkResult on_vkEnumerateDeviceExtensionProperties( 73 void* context, 74 VkResult input_result, 75 VkPhysicalDevice physicalDevice, 76 const char* pLayerName, 77 uint32_t* pPropertyCount, 78 VkExtensionProperties* pProperties); 79 80 VkResult on_vkEnumeratePhysicalDevices( 81 void* context, VkResult input_result, 82 VkInstance instance, uint32_t* pPhysicalDeviceCount, 83 VkPhysicalDevice* pPhysicalDevices); 84 85 void on_vkGetPhysicalDeviceFeatures2( 86 void* context, 87 VkPhysicalDevice physicalDevice, 88 VkPhysicalDeviceFeatures2* pFeatures); 89 void on_vkGetPhysicalDeviceFeatures2KHR( 90 void* context, 91 VkPhysicalDevice physicalDevice, 92 VkPhysicalDeviceFeatures2* pFeatures); 93 void on_vkGetPhysicalDeviceProperties( 94 void* context, 95 VkPhysicalDevice physicalDevice, 96 VkPhysicalDeviceProperties* pProperties); 97 void on_vkGetPhysicalDeviceProperties2( 98 void* context, 99 VkPhysicalDevice physicalDevice, 100 VkPhysicalDeviceProperties2* pProperties); 101 void on_vkGetPhysicalDeviceProperties2KHR( 102 void* context, 103 VkPhysicalDevice physicalDevice, 104 VkPhysicalDeviceProperties2* pProperties); 105 106 void on_vkGetPhysicalDeviceMemoryProperties( 107 void* context, 108 VkPhysicalDevice physicalDevice, 109 VkPhysicalDeviceMemoryProperties* pMemoryProperties); 110 void on_vkGetPhysicalDeviceMemoryProperties2( 111 void* context, 112 VkPhysicalDevice physicalDevice, 113 VkPhysicalDeviceMemoryProperties2* pMemoryProperties); 114 void on_vkGetPhysicalDeviceMemoryProperties2KHR( 115 void* context, 116 VkPhysicalDevice physicalDevice, 117 VkPhysicalDeviceMemoryProperties2* pMemoryProperties); 118 void on_vkGetDeviceQueue(void* context, 119 VkDevice device, 120 uint32_t queueFamilyIndex, 121 uint32_t queueIndex, 122 VkQueue* pQueue); 123 void on_vkGetDeviceQueue2(void* context, 124 VkDevice device, 125 const VkDeviceQueueInfo2* pQueueInfo, 126 VkQueue* pQueue); 127 128 VkResult on_vkCreateInstance( 129 void* context, 130 VkResult input_result, 131 const VkInstanceCreateInfo* createInfo, 132 const VkAllocationCallbacks* pAllocator, 133 VkInstance* pInstance); 134 VkResult on_vkCreateDevice( 135 void* context, 136 VkResult input_result, 137 VkPhysicalDevice physicalDevice, 138 const VkDeviceCreateInfo* pCreateInfo, 139 const VkAllocationCallbacks* pAllocator, 140 VkDevice* pDevice); 141 void on_vkDestroyDevice_pre( 142 void* context, 143 VkDevice device, 144 const VkAllocationCallbacks* pAllocator); 145 146 VkResult on_vkAllocateMemory( 147 void* context, 148 VkResult input_result, 149 VkDevice device, 150 const VkMemoryAllocateInfo* pAllocateInfo, 151 const VkAllocationCallbacks* pAllocator, 152 VkDeviceMemory* pMemory); 153 void on_vkFreeMemory( 154 void* context, 155 VkDevice device, 156 VkDeviceMemory memory, 157 const VkAllocationCallbacks* pAllocator); 158 159 VkResult on_vkMapMemory( 160 void* context, 161 VkResult input_result, 162 VkDevice device, 163 VkDeviceMemory memory, 164 VkDeviceSize offset, 165 VkDeviceSize size, 166 VkMemoryMapFlags, 167 void** ppData); 168 169 void on_vkUnmapMemory( 170 void* context, 171 VkDevice device, 172 VkDeviceMemory memory); 173 174 VkResult on_vkCreateImage( 175 void* context, VkResult input_result, 176 VkDevice device, const VkImageCreateInfo *pCreateInfo, 177 const VkAllocationCallbacks *pAllocator, 178 VkImage *pImage); 179 void on_vkDestroyImage( 180 void* context, 181 VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator); 182 183 void on_vkGetImageMemoryRequirements( 184 void *context, VkDevice device, VkImage image, 185 VkMemoryRequirements *pMemoryRequirements); 186 void on_vkGetImageMemoryRequirements2( 187 void *context, VkDevice device, const VkImageMemoryRequirementsInfo2 *pInfo, 188 VkMemoryRequirements2 *pMemoryRequirements); 189 void on_vkGetImageMemoryRequirements2KHR( 190 void *context, VkDevice device, const VkImageMemoryRequirementsInfo2 *pInfo, 191 VkMemoryRequirements2 *pMemoryRequirements); 192 193 VkResult on_vkBindImageMemory( 194 void* context, VkResult input_result, 195 VkDevice device, VkImage image, VkDeviceMemory memory, 196 VkDeviceSize memoryOffset); 197 VkResult on_vkBindImageMemory2( 198 void* context, VkResult input_result, 199 VkDevice device, uint32_t bindingCount, const VkBindImageMemoryInfo* pBindInfos); 200 VkResult on_vkBindImageMemory2KHR( 201 void* context, VkResult input_result, 202 VkDevice device, uint32_t bindingCount, const VkBindImageMemoryInfo* pBindInfos); 203 204 VkResult on_vkCreateBuffer( 205 void* context, VkResult input_result, 206 VkDevice device, const VkBufferCreateInfo *pCreateInfo, 207 const VkAllocationCallbacks *pAllocator, 208 VkBuffer *pBuffer); 209 void on_vkDestroyBuffer( 210 void* context, 211 VkDevice device, VkBuffer buffer, const VkAllocationCallbacks *pAllocator); 212 213 void on_vkGetBufferMemoryRequirements( 214 void* context, VkDevice device, VkBuffer buffer, VkMemoryRequirements *pMemoryRequirements); 215 void on_vkGetBufferMemoryRequirements2( 216 void* context, VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, 217 VkMemoryRequirements2* pMemoryRequirements); 218 void on_vkGetBufferMemoryRequirements2KHR( 219 void* context, VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, 220 VkMemoryRequirements2* pMemoryRequirements); 221 222 VkResult on_vkBindBufferMemory( 223 void* context, VkResult input_result, 224 VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset); 225 VkResult on_vkBindBufferMemory2( 226 void* context, VkResult input_result, 227 VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo *pBindInfos); 228 VkResult on_vkBindBufferMemory2KHR( 229 void* context, VkResult input_result, 230 VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo *pBindInfos); 231 232 VkResult on_vkCreateSemaphore( 233 void* context, VkResult, 234 VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, 235 const VkAllocationCallbacks* pAllocator, 236 VkSemaphore* pSemaphore); 237 void on_vkDestroySemaphore( 238 void* context, 239 VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks *pAllocator); 240 VkResult on_vkGetSemaphoreFdKHR( 241 void* context, VkResult, 242 VkDevice device, 243 const VkSemaphoreGetFdInfoKHR* pGetFdInfo, 244 int* pFd); 245 VkResult on_vkImportSemaphoreFdKHR( 246 void* context, VkResult, 247 VkDevice device, 248 const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); 249 250 VkResult on_vkQueueSubmit( 251 void* context, VkResult input_result, 252 VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); 253 254 VkResult on_vkQueueWaitIdle( 255 void* context, VkResult input_result, 256 VkQueue queue); 257 258 void unwrap_VkNativeBufferANDROID( 259 const VkImageCreateInfo* pCreateInfo, 260 VkImageCreateInfo* local_pCreateInfo); 261 void unwrap_vkAcquireImageANDROID_nativeFenceFd(int fd, int* fd_out); 262 263 #ifdef VK_USE_PLATFORM_FUCHSIA 264 VkResult on_vkGetMemoryZirconHandleFUCHSIA( 265 void* context, VkResult input_result, 266 VkDevice device, 267 const VkMemoryGetZirconHandleInfoFUCHSIA* pInfo, 268 uint32_t* pHandle); 269 VkResult on_vkGetMemoryZirconHandlePropertiesFUCHSIA( 270 void* context, VkResult input_result, 271 VkDevice device, 272 VkExternalMemoryHandleTypeFlagBits handleType, 273 uint32_t handle, 274 VkMemoryZirconHandlePropertiesFUCHSIA* pProperties); 275 VkResult on_vkGetSemaphoreZirconHandleFUCHSIA( 276 void* context, VkResult input_result, 277 VkDevice device, 278 const VkSemaphoreGetZirconHandleInfoFUCHSIA* pInfo, 279 uint32_t* pHandle); 280 VkResult on_vkImportSemaphoreZirconHandleFUCHSIA( 281 void* context, VkResult input_result, 282 VkDevice device, 283 const VkImportSemaphoreZirconHandleInfoFUCHSIA* pInfo); 284 VkResult on_vkCreateBufferCollectionFUCHSIA( 285 void* context, 286 VkResult input_result, 287 VkDevice device, 288 const VkBufferCollectionCreateInfoFUCHSIA* pInfo, 289 const VkAllocationCallbacks* pAllocator, 290 VkBufferCollectionFUCHSIA* pCollection); 291 void on_vkDestroyBufferCollectionFUCHSIA( 292 void* context, 293 VkResult input_result, 294 VkDevice device, 295 VkBufferCollectionFUCHSIA collection, 296 const VkAllocationCallbacks* pAllocator); 297 VkResult on_vkSetBufferCollectionBufferConstraintsFUCHSIA( 298 void* context, 299 VkResult input_result, 300 VkDevice device, 301 VkBufferCollectionFUCHSIA collection, 302 const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo); 303 VkResult on_vkSetBufferCollectionImageConstraintsFUCHSIA( 304 void* context, 305 VkResult input_result, 306 VkDevice device, 307 VkBufferCollectionFUCHSIA collection, 308 const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo); 309 VkResult on_vkGetBufferCollectionPropertiesFUCHSIA( 310 void* context, 311 VkResult input_result, 312 VkDevice device, 313 VkBufferCollectionFUCHSIA collection, 314 VkBufferCollectionPropertiesFUCHSIA* pProperties); 315 VkResult on_vkCreateBufferCollectionFUCHSIAX( 316 void* context, 317 VkResult input_result, 318 VkDevice device, 319 const VkBufferCollectionCreateInfoFUCHSIAX* pInfo, 320 const VkAllocationCallbacks* pAllocator, 321 VkBufferCollectionFUCHSIAX* pCollection); 322 void on_vkDestroyBufferCollectionFUCHSIAX( 323 void* context, 324 VkResult input_result, 325 VkDevice device, 326 VkBufferCollectionFUCHSIAX collection, 327 const VkAllocationCallbacks* pAllocator); 328 VkResult on_vkSetBufferCollectionConstraintsFUCHSIAX( 329 void* context, 330 VkResult input_result, 331 VkDevice device, 332 VkBufferCollectionFUCHSIAX collection, 333 const VkImageCreateInfo* pImageInfo); 334 VkResult on_vkSetBufferCollectionBufferConstraintsFUCHSIAX( 335 void* context, 336 VkResult input_result, 337 VkDevice device, 338 VkBufferCollectionFUCHSIAX collection, 339 const VkBufferConstraintsInfoFUCHSIAX* pBufferConstraintsInfo); 340 VkResult on_vkSetBufferCollectionImageConstraintsFUCHSIAX( 341 void* context, 342 VkResult input_result, 343 VkDevice device, 344 VkBufferCollectionFUCHSIAX collection, 345 const VkImageConstraintsInfoFUCHSIAX* pImageConstraintsInfo); 346 VkResult on_vkGetBufferCollectionPropertiesFUCHSIAX( 347 void* context, 348 VkResult input_result, 349 VkDevice device, 350 VkBufferCollectionFUCHSIAX collection, 351 VkBufferCollectionPropertiesFUCHSIAX* pProperties); 352 VkResult on_vkGetBufferCollectionProperties2FUCHSIAX( 353 void* context, 354 VkResult input_result, 355 VkDevice device, 356 VkBufferCollectionFUCHSIAX collection, 357 VkBufferCollectionProperties2FUCHSIAX* pProperties); 358 #endif 359 360 VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID( 361 void* context, VkResult input_result, 362 VkDevice device, 363 const AHardwareBuffer* buffer, 364 VkAndroidHardwareBufferPropertiesANDROID* pProperties); 365 VkResult on_vkGetMemoryAndroidHardwareBufferANDROID( 366 void* context, VkResult input_result, 367 VkDevice device, 368 const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo, 369 struct AHardwareBuffer** pBuffer); 370 371 VkResult on_vkCreateSamplerYcbcrConversion( 372 void* context, VkResult input_result, 373 VkDevice device, 374 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, 375 const VkAllocationCallbacks* pAllocator, 376 VkSamplerYcbcrConversion* pYcbcrConversion); 377 void on_vkDestroySamplerYcbcrConversion( 378 void* context, 379 VkDevice device, 380 VkSamplerYcbcrConversion ycbcrConversion, 381 const VkAllocationCallbacks* pAllocator); 382 VkResult on_vkCreateSamplerYcbcrConversionKHR( 383 void* context, VkResult input_result, 384 VkDevice device, 385 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, 386 const VkAllocationCallbacks* pAllocator, 387 VkSamplerYcbcrConversion* pYcbcrConversion); 388 void on_vkDestroySamplerYcbcrConversionKHR( 389 void* context, 390 VkDevice device, 391 VkSamplerYcbcrConversion ycbcrConversion, 392 const VkAllocationCallbacks* pAllocator); 393 394 VkResult on_vkCreateSampler( 395 void* context, VkResult input_result, 396 VkDevice device, 397 const VkSamplerCreateInfo* pCreateInfo, 398 const VkAllocationCallbacks* pAllocator, 399 VkSampler* pSampler); 400 401 void on_vkGetPhysicalDeviceExternalFenceProperties( 402 void* context, 403 VkPhysicalDevice physicalDevice, 404 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, 405 VkExternalFenceProperties* pExternalFenceProperties); 406 407 void on_vkGetPhysicalDeviceExternalFencePropertiesKHR( 408 void* context, 409 VkPhysicalDevice physicalDevice, 410 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, 411 VkExternalFenceProperties* pExternalFenceProperties); 412 413 VkResult on_vkCreateFence( 414 void* context, 415 VkResult input_result, 416 VkDevice device, 417 const VkFenceCreateInfo* pCreateInfo, 418 const VkAllocationCallbacks* pAllocator, VkFence* pFence); 419 420 void on_vkDestroyFence( 421 void* context, 422 VkDevice device, 423 VkFence fence, 424 const VkAllocationCallbacks* pAllocator); 425 426 VkResult on_vkResetFences( 427 void* context, 428 VkResult input_result, 429 VkDevice device, 430 uint32_t fenceCount, 431 const VkFence* pFences); 432 433 VkResult on_vkImportFenceFdKHR( 434 void* context, 435 VkResult input_result, 436 VkDevice device, 437 const VkImportFenceFdInfoKHR* pImportFenceFdInfo); 438 439 VkResult on_vkGetFenceFdKHR( 440 void* context, 441 VkResult input_result, 442 VkDevice device, 443 const VkFenceGetFdInfoKHR* pGetFdInfo, 444 int* pFd); 445 446 VkResult on_vkWaitForFences( 447 void* context, 448 VkResult input_result, 449 VkDevice device, 450 uint32_t fenceCount, 451 const VkFence* pFences, 452 VkBool32 waitAll, 453 uint64_t timeout); 454 455 VkResult on_vkCreateDescriptorPool( 456 void* context, 457 VkResult input_result, 458 VkDevice device, 459 const VkDescriptorPoolCreateInfo* pCreateInfo, 460 const VkAllocationCallbacks* pAllocator, 461 VkDescriptorPool* pDescriptorPool); 462 463 void on_vkDestroyDescriptorPool( 464 void* context, 465 VkDevice device, 466 VkDescriptorPool descriptorPool, 467 const VkAllocationCallbacks* pAllocator); 468 469 VkResult on_vkResetDescriptorPool( 470 void* context, 471 VkResult input_result, 472 VkDevice device, 473 VkDescriptorPool descriptorPool, 474 VkDescriptorPoolResetFlags flags); 475 476 VkResult on_vkAllocateDescriptorSets( 477 void* context, 478 VkResult input_result, 479 VkDevice device, 480 const VkDescriptorSetAllocateInfo* pAllocateInfo, 481 VkDescriptorSet* pDescriptorSets); 482 483 VkResult on_vkFreeDescriptorSets( 484 void* context, 485 VkResult input_result, 486 VkDevice device, 487 VkDescriptorPool descriptorPool, 488 uint32_t descriptorSetCount, 489 const VkDescriptorSet* pDescriptorSets); 490 491 VkResult on_vkCreateDescriptorSetLayout( 492 void* context, 493 VkResult input_result, 494 VkDevice device, 495 const VkDescriptorSetLayoutCreateInfo* pCreateInfo, 496 const VkAllocationCallbacks* pAllocator, 497 VkDescriptorSetLayout* pSetLayout); 498 499 void on_vkUpdateDescriptorSets( 500 void* context, 501 VkDevice device, 502 uint32_t descriptorWriteCount, 503 const VkWriteDescriptorSet* pDescriptorWrites, 504 uint32_t descriptorCopyCount, 505 const VkCopyDescriptorSet* pDescriptorCopies); 506 507 VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE_pre( 508 void* context, 509 VkResult input_result, 510 VkDevice device, 511 VkDeviceMemory memory, 512 uint64_t* pAddress); 513 VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE( 514 void* context, 515 VkResult input_result, 516 VkDevice device, 517 VkDeviceMemory memory, 518 uint64_t* pAddress); 519 520 VkResult on_vkCreateDescriptorUpdateTemplate( 521 void* context, VkResult input_result, 522 VkDevice device, 523 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, 524 const VkAllocationCallbacks* pAllocator, 525 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); 526 527 VkResult on_vkCreateDescriptorUpdateTemplateKHR( 528 void* context, VkResult input_result, 529 VkDevice device, 530 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, 531 const VkAllocationCallbacks* pAllocator, 532 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); 533 534 void on_vkUpdateDescriptorSetWithTemplate( 535 void* context, 536 VkDevice device, 537 VkDescriptorSet descriptorSet, 538 VkDescriptorUpdateTemplate descriptorUpdateTemplate, 539 const void* pData); 540 541 VkResult on_vkGetPhysicalDeviceImageFormatProperties2( 542 void* context, VkResult input_result, 543 VkPhysicalDevice physicalDevice, 544 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, 545 VkImageFormatProperties2* pImageFormatProperties); 546 547 VkResult on_vkGetPhysicalDeviceImageFormatProperties2KHR( 548 void* context, VkResult input_result, 549 VkPhysicalDevice physicalDevice, 550 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, 551 VkImageFormatProperties2* pImageFormatProperties); 552 553 void on_vkGetPhysicalDeviceExternalSemaphoreProperties( 554 void* context, 555 VkPhysicalDevice physicalDevice, 556 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, 557 VkExternalSemaphoreProperties* pExternalSemaphoreProperties); 558 559 void on_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( 560 void* context, 561 VkPhysicalDevice physicalDevice, 562 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, 563 VkExternalSemaphoreProperties* pExternalSemaphoreProperties); 564 565 void registerEncoderCleanupCallback(const VkEncoder* encoder, void* handle, CleanupCallback callback); 566 void unregisterEncoderCleanupCallback(const VkEncoder* encoder, void* handle); 567 void onEncoderDeleted(const VkEncoder* encoder); 568 569 uint32_t syncEncodersForCommandBuffer(VkCommandBuffer commandBuffer, VkEncoder* current); 570 uint32_t syncEncodersForQueue(VkQueue queue, VkEncoder* current); 571 572 VkResult on_vkBeginCommandBuffer( 573 void* context, VkResult input_result, 574 VkCommandBuffer commandBuffer, 575 const VkCommandBufferBeginInfo* pBeginInfo); 576 VkResult on_vkEndCommandBuffer( 577 void* context, VkResult input_result, 578 VkCommandBuffer commandBuffer); 579 VkResult on_vkResetCommandBuffer( 580 void* context, VkResult input_result, 581 VkCommandBuffer commandBuffer, 582 VkCommandBufferResetFlags flags); 583 584 VkResult on_vkCreateImageView( 585 void* context, VkResult input_result, 586 VkDevice device, 587 const VkImageViewCreateInfo* pCreateInfo, 588 const VkAllocationCallbacks* pAllocator, 589 VkImageView* pView); 590 591 void on_vkCmdExecuteCommands( 592 void* context, 593 VkCommandBuffer commandBuffer, 594 uint32_t commandBufferCount, 595 const VkCommandBuffer* pCommandBuffers); 596 597 void on_vkCmdBindDescriptorSets( 598 void* context, 599 VkCommandBuffer commandBuffer, 600 VkPipelineBindPoint pipelineBindPoint, 601 VkPipelineLayout layout, 602 uint32_t firstSet, 603 uint32_t descriptorSetCount, 604 const VkDescriptorSet* pDescriptorSets, 605 uint32_t dynamicOffsetCount, 606 const uint32_t* pDynamicOffsets); 607 608 void on_vkDestroyDescriptorSetLayout( 609 void* context, 610 VkDevice device, 611 VkDescriptorSetLayout descriptorSetLayout, 612 const VkAllocationCallbacks* pAllocator); 613 614 VkResult on_vkAllocateCommandBuffers( 615 void* context, 616 VkResult input_result, 617 VkDevice device, 618 const VkCommandBufferAllocateInfo* pAllocateInfo, 619 VkCommandBuffer* pCommandBuffers); 620 621 VkResult on_vkQueueSignalReleaseImageANDROID( 622 void* context, 623 VkResult input_result, 624 VkQueue queue, 625 uint32_t waitSemaphoreCount, 626 const VkSemaphore* pWaitSemaphores, 627 VkImage image, 628 int* pNativeFenceFd); 629 630 VkResult on_vkCreateGraphicsPipelines( 631 void* context, 632 VkResult input_result, 633 VkDevice device, 634 VkPipelineCache pipelineCache, 635 uint32_t createInfoCount, 636 const VkGraphicsPipelineCreateInfo* pCreateInfos, 637 const VkAllocationCallbacks* pAllocator, 638 VkPipeline* pPipelines); 639 640 uint8_t* getMappedPointer(VkDeviceMemory memory); 641 VkDeviceSize getMappedSize(VkDeviceMemory memory); 642 VkDeviceSize getNonCoherentExtendedSize(VkDevice device, VkDeviceSize basicSize) const; 643 bool isValidMemoryRange(const VkMappedMemoryRange& range) const; 644 void setupFeatures(const EmulatorFeatureInfo* features); 645 void setThreadingCallbacks(const ThreadingCallbacks& callbacks); 646 bool hostSupportsVulkan() const; 647 bool usingDirectMapping() const; 648 uint32_t getStreamFeatures() const; 649 uint32_t getApiVersionFromInstance(VkInstance instance) const; 650 uint32_t getApiVersionFromDevice(VkDevice device) const; 651 bool hasInstanceExtension(VkInstance instance, const std::string& name) const; 652 bool hasDeviceExtension(VkDevice instance, const std::string& name) const; 653 VkDevice getDevice(VkCommandBuffer commandBuffer) const; 654 void addToCommandPool(VkCommandPool commandPool, 655 uint32_t commandBufferCount, 656 VkCommandBuffer* pCommandBuffers); 657 void resetCommandPoolStagingInfo(VkCommandPool commandPool); 658 659 #ifdef __GNUC__ 660 #define ALWAYS_INLINE 661 #elif 662 #define ALWAYS_INLINE __attribute__((always_inline)) 663 #endif 664 665 static VkEncoder* getCommandBufferEncoder(VkCommandBuffer commandBuffer); 666 static VkEncoder* getQueueEncoder(VkQueue queue); 667 static VkEncoder* getThreadLocalEncoder(); 668 669 static void setSeqnoPtr(uint32_t* seqnoptr); 670 static ALWAYS_INLINE uint32_t nextSeqno(); 671 static ALWAYS_INLINE uint32_t getSeqno(); 672 673 // Transforms 674 void deviceMemoryTransform_tohost( 675 VkDeviceMemory* memory, uint32_t memoryCount, 676 VkDeviceSize* offset, uint32_t offsetCount, 677 VkDeviceSize* size, uint32_t sizeCount, 678 uint32_t* typeIndex, uint32_t typeIndexCount, 679 uint32_t* typeBits, uint32_t typeBitsCount); 680 void deviceMemoryTransform_fromhost( 681 VkDeviceMemory* memory, uint32_t memoryCount, 682 VkDeviceSize* offset, uint32_t offsetCount, 683 VkDeviceSize* size, uint32_t sizeCount, 684 uint32_t* typeIndex, uint32_t typeIndexCount, 685 uint32_t* typeBits, uint32_t typeBitsCount); 686 687 void transformImpl_VkExternalMemoryProperties_fromhost( 688 VkExternalMemoryProperties* pProperties, 689 uint32_t); 690 void transformImpl_VkExternalMemoryProperties_tohost( 691 VkExternalMemoryProperties* pProperties, 692 uint32_t); 693 void transformImpl_VkImageCreateInfo_fromhost(const VkImageCreateInfo*, uint32_t); 694 void transformImpl_VkImageCreateInfo_tohost(const VkImageCreateInfo*, uint32_t); 695 696 #define DEFINE_TRANSFORMED_TYPE_PROTOTYPE(type) \ 697 void transformImpl_##type##_tohost(type*, uint32_t); \ 698 void transformImpl_##type##_fromhost(type*, uint32_t); 699 700 LIST_TRIVIAL_TRANSFORMED_TYPES(DEFINE_TRANSFORMED_TYPE_PROTOTYPE) 701 702 private: 703 class Impl; 704 std::unique_ptr<Impl> mImpl; 705 }; 706 707 } // namespace goldfish_vk 708