diff options
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/renderer_vulkan/wrapper.cpp | 120 |
1 files changed, 64 insertions, 56 deletions
diff --git a/src/video_core/renderer_vulkan/wrapper.cpp b/src/video_core/renderer_vulkan/wrapper.cpp index 051298cc8..14cac38ea 100644 --- a/src/video_core/renderer_vulkan/wrapper.cpp +++ b/src/video_core/renderer_vulkan/wrapper.cpp | |||
| @@ -377,24 +377,26 @@ VkResult Free(VkDevice device, VkCommandPool handle, Span<VkCommandBuffer> buffe | |||
| 377 | 377 | ||
| 378 | Instance Instance::Create(Span<const char*> layers, Span<const char*> extensions, | 378 | Instance Instance::Create(Span<const char*> layers, Span<const char*> extensions, |
| 379 | InstanceDispatch& dld) noexcept { | 379 | InstanceDispatch& dld) noexcept { |
| 380 | VkApplicationInfo application_info; | 380 | static constexpr VkApplicationInfo application_info{ |
| 381 | application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; | 381 | .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, |
| 382 | application_info.pNext = nullptr; | 382 | .pNext = nullptr, |
| 383 | application_info.pApplicationName = "yuzu Emulator"; | 383 | .pApplicationName = "yuzu Emulator", |
| 384 | application_info.applicationVersion = VK_MAKE_VERSION(0, 1, 0); | 384 | .applicationVersion = VK_MAKE_VERSION(0, 1, 0), |
| 385 | application_info.pEngineName = "yuzu Emulator"; | 385 | .pEngineName = "yuzu Emulator", |
| 386 | application_info.engineVersion = VK_MAKE_VERSION(0, 1, 0); | 386 | .engineVersion = VK_MAKE_VERSION(0, 1, 0), |
| 387 | application_info.apiVersion = VK_API_VERSION_1_1; | 387 | .apiVersion = VK_API_VERSION_1_1, |
| 388 | 388 | }; | |
| 389 | VkInstanceCreateInfo ci; | 389 | |
| 390 | ci.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; | 390 | const VkInstanceCreateInfo ci{ |
| 391 | ci.pNext = nullptr; | 391 | .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, |
| 392 | ci.flags = 0; | 392 | .pNext = nullptr, |
| 393 | ci.pApplicationInfo = &application_info; | 393 | .flags = 0, |
| 394 | ci.enabledLayerCount = layers.size(); | 394 | .pApplicationInfo = &application_info, |
| 395 | ci.ppEnabledLayerNames = layers.data(); | 395 | .enabledLayerCount = layers.size(), |
| 396 | ci.enabledExtensionCount = extensions.size(); | 396 | .ppEnabledLayerNames = layers.data(), |
| 397 | ci.ppEnabledExtensionNames = extensions.data(); | 397 | .enabledExtensionCount = extensions.size(), |
| 398 | .ppEnabledExtensionNames = extensions.data(), | ||
| 399 | }; | ||
| 398 | 400 | ||
| 399 | VkInstance instance; | 401 | VkInstance instance; |
| 400 | if (dld.vkCreateInstance(&ci, nullptr, &instance) != VK_SUCCESS) { | 402 | if (dld.vkCreateInstance(&ci, nullptr, &instance) != VK_SUCCESS) { |
| @@ -425,19 +427,20 @@ std::optional<std::vector<VkPhysicalDevice>> Instance::EnumeratePhysicalDevices( | |||
| 425 | 427 | ||
| 426 | DebugCallback Instance::TryCreateDebugCallback( | 428 | DebugCallback Instance::TryCreateDebugCallback( |
| 427 | PFN_vkDebugUtilsMessengerCallbackEXT callback) noexcept { | 429 | PFN_vkDebugUtilsMessengerCallbackEXT callback) noexcept { |
| 428 | VkDebugUtilsMessengerCreateInfoEXT ci; | 430 | const VkDebugUtilsMessengerCreateInfoEXT ci{ |
| 429 | ci.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; | 431 | .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, |
| 430 | ci.pNext = nullptr; | 432 | .pNext = nullptr, |
| 431 | ci.flags = 0; | 433 | .flags = 0, |
| 432 | ci.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | | 434 | .messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | |
| 433 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | | 435 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | |
| 434 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | | 436 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | |
| 435 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT; | 437 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, |
| 436 | ci.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | | 438 | .messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | |
| 437 | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | | 439 | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | |
| 438 | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; | 440 | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, |
| 439 | ci.pfnUserCallback = callback; | 441 | .pfnUserCallback = callback, |
| 440 | ci.pUserData = nullptr; | 442 | .pUserData = nullptr, |
| 443 | }; | ||
| 441 | 444 | ||
| 442 | VkDebugUtilsMessengerEXT messenger; | 445 | VkDebugUtilsMessengerEXT messenger; |
| 443 | if (dld->vkCreateDebugUtilsMessengerEXT(handle, &ci, nullptr, &messenger) != VK_SUCCESS) { | 446 | if (dld->vkCreateDebugUtilsMessengerEXT(handle, &ci, nullptr, &messenger) != VK_SUCCESS) { |
| @@ -468,12 +471,13 @@ DescriptorSets DescriptorPool::Allocate(const VkDescriptorSetAllocateInfo& ai) c | |||
| 468 | } | 471 | } |
| 469 | 472 | ||
| 470 | CommandBuffers CommandPool::Allocate(std::size_t num_buffers, VkCommandBufferLevel level) const { | 473 | CommandBuffers CommandPool::Allocate(std::size_t num_buffers, VkCommandBufferLevel level) const { |
| 471 | VkCommandBufferAllocateInfo ai; | 474 | const VkCommandBufferAllocateInfo ai{ |
| 472 | ai.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; | 475 | .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, |
| 473 | ai.pNext = nullptr; | 476 | .pNext = nullptr, |
| 474 | ai.commandPool = handle; | 477 | .commandPool = handle, |
| 475 | ai.level = level; | 478 | .level = level, |
| 476 | ai.commandBufferCount = static_cast<u32>(num_buffers); | 479 | .commandBufferCount = static_cast<u32>(num_buffers), |
| 480 | }; | ||
| 477 | 481 | ||
| 478 | std::unique_ptr buffers = std::make_unique<VkCommandBuffer[]>(num_buffers); | 482 | std::unique_ptr buffers = std::make_unique<VkCommandBuffer[]>(num_buffers); |
| 479 | switch (const VkResult result = dld->vkAllocateCommandBuffers(owner, &ai, buffers.get())) { | 483 | switch (const VkResult result = dld->vkAllocateCommandBuffers(owner, &ai, buffers.get())) { |
| @@ -497,17 +501,18 @@ std::vector<VkImage> SwapchainKHR::GetImages() const { | |||
| 497 | Device Device::Create(VkPhysicalDevice physical_device, Span<VkDeviceQueueCreateInfo> queues_ci, | 501 | Device Device::Create(VkPhysicalDevice physical_device, Span<VkDeviceQueueCreateInfo> queues_ci, |
| 498 | Span<const char*> enabled_extensions, const void* next, | 502 | Span<const char*> enabled_extensions, const void* next, |
| 499 | DeviceDispatch& dld) noexcept { | 503 | DeviceDispatch& dld) noexcept { |
| 500 | VkDeviceCreateInfo ci; | 504 | const VkDeviceCreateInfo ci{ |
| 501 | ci.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; | 505 | .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, |
| 502 | ci.pNext = next; | 506 | .pNext = next, |
| 503 | ci.flags = 0; | 507 | .flags = 0, |
| 504 | ci.queueCreateInfoCount = queues_ci.size(); | 508 | .queueCreateInfoCount = queues_ci.size(), |
| 505 | ci.pQueueCreateInfos = queues_ci.data(); | 509 | .pQueueCreateInfos = queues_ci.data(), |
| 506 | ci.enabledLayerCount = 0; | 510 | .enabledLayerCount = 0, |
| 507 | ci.ppEnabledLayerNames = nullptr; | 511 | .ppEnabledLayerNames = nullptr, |
| 508 | ci.enabledExtensionCount = enabled_extensions.size(); | 512 | .enabledExtensionCount = enabled_extensions.size(), |
| 509 | ci.ppEnabledExtensionNames = enabled_extensions.data(); | 513 | .ppEnabledExtensionNames = enabled_extensions.data(), |
| 510 | ci.pEnabledFeatures = nullptr; | 514 | .pEnabledFeatures = nullptr, |
| 515 | }; | ||
| 511 | 516 | ||
| 512 | VkDevice device; | 517 | VkDevice device; |
| 513 | if (dld.vkCreateDevice(physical_device, &ci, nullptr, &device) != VK_SUCCESS) { | 518 | if (dld.vkCreateDevice(physical_device, &ci, nullptr, &device) != VK_SUCCESS) { |
| @@ -548,10 +553,11 @@ ImageView Device::CreateImageView(const VkImageViewCreateInfo& ci) const { | |||
| 548 | } | 553 | } |
| 549 | 554 | ||
| 550 | Semaphore Device::CreateSemaphore() const { | 555 | Semaphore Device::CreateSemaphore() const { |
| 551 | VkSemaphoreCreateInfo ci; | 556 | static constexpr VkSemaphoreCreateInfo ci{ |
| 552 | ci.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; | 557 | .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, |
| 553 | ci.pNext = nullptr; | 558 | .pNext = nullptr, |
| 554 | ci.flags = 0; | 559 | .flags = 0, |
| 560 | }; | ||
| 555 | 561 | ||
| 556 | VkSemaphore object; | 562 | VkSemaphore object; |
| 557 | Check(dld->vkCreateSemaphore(handle, &ci, nullptr, &object)); | 563 | Check(dld->vkCreateSemaphore(handle, &ci, nullptr, &object)); |
| @@ -639,10 +645,12 @@ ShaderModule Device::CreateShaderModule(const VkShaderModuleCreateInfo& ci) cons | |||
| 639 | } | 645 | } |
| 640 | 646 | ||
| 641 | Event Device::CreateEvent() const { | 647 | Event Device::CreateEvent() const { |
| 642 | VkEventCreateInfo ci; | 648 | static constexpr VkEventCreateInfo ci{ |
| 643 | ci.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO; | 649 | .sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO, |
| 644 | ci.pNext = nullptr; | 650 | .pNext = nullptr, |
| 645 | ci.flags = 0; | 651 | .flags = 0, |
| 652 | }; | ||
| 653 | |||
| 646 | VkEvent object; | 654 | VkEvent object; |
| 647 | Check(dld->vkCreateEvent(handle, &ci, nullptr, &object)); | 655 | Check(dld->vkCreateEvent(handle, &ci, nullptr, &object)); |
| 648 | return Event(object, handle, *dld); | 656 | return Event(object, handle, *dld); |