mirror of https://github.com/PCSX2/pcsx2.git
Vulkan: Support running surfaceless
This commit is contained in:
parent
bf2575c3c9
commit
61de98d651
|
@ -536,7 +536,7 @@ namespace Vulkan
|
||||||
Console.Error("Vulkan: Failed to find an acceptable graphics queue.");
|
Console.Error("Vulkan: Failed to find an acceptable graphics queue.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (surface && m_present_queue_family_index == queue_family_count)
|
if (surface != VK_NULL_HANDLE && m_present_queue_family_index == queue_family_count)
|
||||||
{
|
{
|
||||||
Console.Error("Vulkan: Failed to find an acceptable present queue.");
|
Console.Error("Vulkan: Failed to find an acceptable present queue.");
|
||||||
return false;
|
return false;
|
||||||
|
@ -570,7 +570,7 @@ namespace Vulkan
|
||||||
}};
|
}};
|
||||||
|
|
||||||
device_info.queueCreateInfoCount = 1;
|
device_info.queueCreateInfoCount = 1;
|
||||||
if (m_graphics_queue_family_index != m_present_queue_family_index)
|
if (surface != VK_NULL_HANDLE && m_graphics_queue_family_index != m_present_queue_family_index)
|
||||||
{
|
{
|
||||||
device_info.queueCreateInfoCount = 2;
|
device_info.queueCreateInfoCount = 2;
|
||||||
}
|
}
|
||||||
|
@ -1445,8 +1445,7 @@ namespace Vulkan
|
||||||
}
|
}
|
||||||
|
|
||||||
const VkSubpassDescriptionFlags subpass_flags =
|
const VkSubpassDescriptionFlags subpass_flags =
|
||||||
(key.color_feedback_loop && g_vulkan_context->GetOptionalExtensions().vk_arm_rasterization_order_attachment_access)
|
(key.color_feedback_loop && g_vulkan_context->GetOptionalExtensions().vk_arm_rasterization_order_attachment_access) ? VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM : 0;
|
||||||
? VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM : 0;
|
|
||||||
const VkSubpassDescription subpass = {subpass_flags, VK_PIPELINE_BIND_POINT_GRAPHICS, input_reference_ptr ? 1u : 0u,
|
const VkSubpassDescription subpass = {subpass_flags, VK_PIPELINE_BIND_POINT_GRAPHICS, input_reference_ptr ? 1u : 0u,
|
||||||
input_reference_ptr ? input_reference_ptr : nullptr, color_reference_ptr ? 1u : 0u,
|
input_reference_ptr ? input_reference_ptr : nullptr, color_reference_ptr ? 1u : 0u,
|
||||||
color_reference_ptr ? color_reference_ptr : nullptr, nullptr, depth_reference_ptr, 0, nullptr};
|
color_reference_ptr ? color_reference_ptr : nullptr, nullptr, depth_reference_ptr, 0, nullptr};
|
||||||
|
|
|
@ -311,7 +311,12 @@ bool VulkanHostDisplay::HasSurface() const
|
||||||
|
|
||||||
bool VulkanHostDisplay::CreateImGuiContext()
|
bool VulkanHostDisplay::CreateImGuiContext()
|
||||||
{
|
{
|
||||||
return ImGui_ImplVulkan_Init(m_swap_chain->GetClearRenderPass());
|
const VkRenderPass render_pass =
|
||||||
|
m_swap_chain ? m_swap_chain->GetClearRenderPass() : g_vulkan_context->GetRenderPass(VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_UNDEFINED);
|
||||||
|
if (render_pass == VK_NULL_HANDLE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return ImGui_ImplVulkan_Init(render_pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanHostDisplay::DestroyImGuiContext()
|
void VulkanHostDisplay::DestroyImGuiContext()
|
||||||
|
|
|
@ -1513,13 +1513,11 @@ bool GSDeviceVK::CompilePresentPipelines()
|
||||||
{
|
{
|
||||||
// we may not have a swap chain if running in headless mode.
|
// we may not have a swap chain if running in headless mode.
|
||||||
Vulkan::SwapChain* swapchain = static_cast<Vulkan::SwapChain*>(g_host_display->GetSurface());
|
Vulkan::SwapChain* swapchain = static_cast<Vulkan::SwapChain*>(g_host_display->GetSurface());
|
||||||
if (swapchain)
|
m_swap_chain_render_pass = swapchain ?
|
||||||
{
|
swapchain->GetClearRenderPass() :
|
||||||
m_swap_chain_render_pass =
|
g_vulkan_context->GetRenderPass(VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_UNDEFINED);
|
||||||
g_vulkan_context->GetRenderPass(swapchain->GetSurfaceFormat().format, VK_FORMAT_UNDEFINED);
|
if (!m_swap_chain_render_pass)
|
||||||
if (!m_swap_chain_render_pass)
|
return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::optional<std::string> shader = Host::ReadResourceFileToString("shaders/vulkan/present.glsl");
|
std::optional<std::string> shader = Host::ReadResourceFileToString("shaders/vulkan/present.glsl");
|
||||||
if (!shader)
|
if (!shader)
|
||||||
|
|
Loading…
Reference in New Issue