renderer_vulkan: Drop requirement for VK_EXT_depth_clip_control
This commit is contained in:
@ -285,7 +285,6 @@ bool Instance::CreateDevice() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
AddExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
AddExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
||||||
AddExtension(VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME);
|
|
||||||
AddExtension(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME);
|
AddExtension(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME);
|
||||||
timeline_semaphores = AddExtension(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME);
|
timeline_semaphores = AddExtension(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME);
|
||||||
extended_dynamic_state = AddExtension(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);
|
extended_dynamic_state = AddExtension(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
#include "common/common_paths.h"
|
#include "common/common_paths.h"
|
||||||
#include "common/file_util.h"
|
#include "common/file_util.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/microprofile.h"
|
|
||||||
#include "core/settings.h"
|
#include "core/settings.h"
|
||||||
#include "video_core/renderer_vulkan/pica_to_vk.h"
|
#include "video_core/renderer_vulkan/pica_to_vk.h"
|
||||||
#include "video_core/renderer_vulkan/vk_instance.h"
|
#include "video_core/renderer_vulkan/vk_instance.h"
|
||||||
@ -491,11 +490,7 @@ vk::Pipeline PipelineCache::BuildPipeline(const PipelineInfo& info) {
|
|||||||
|
|
||||||
const vk::Rect2D scissor = {.offset = {0, 0}, .extent = {1, 1}};
|
const vk::Rect2D scissor = {.offset = {0, 0}, .extent = {1, 1}};
|
||||||
|
|
||||||
vk::PipelineViewportDepthClipControlCreateInfoEXT depth_clip_control = {.negativeOneToOne =
|
|
||||||
true};
|
|
||||||
|
|
||||||
const vk::PipelineViewportStateCreateInfo viewport_info = {
|
const vk::PipelineViewportStateCreateInfo viewport_info = {
|
||||||
.pNext = &depth_clip_control,
|
|
||||||
.viewportCount = 1,
|
.viewportCount = 1,
|
||||||
.pViewports = &viewport,
|
.pViewports = &viewport,
|
||||||
.scissorCount = 1,
|
.scissorCount = 1,
|
||||||
|
@ -49,9 +49,7 @@ vk::SurfaceKHR CreateSurface(vk::Instance instance, const Frontend::EmuWindow& e
|
|||||||
LOG_ERROR(Render_Vulkan, "Failed to initialize Xlib surface");
|
LOG_ERROR(Render_Vulkan, "Failed to initialize Xlib surface");
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
} else if (window_info.type == Frontend::WindowSystemType::Wayland) {
|
||||||
|
|
||||||
if (window_info.type == Frontend::WindowSystemType::Wayland) {
|
|
||||||
const vk::WaylandSurfaceCreateInfoKHR wayland_ci = {
|
const vk::WaylandSurfaceCreateInfoKHR wayland_ci = {
|
||||||
.display = static_cast<wl_display*>(window_info.display_connection),
|
.display = static_cast<wl_display*>(window_info.display_connection),
|
||||||
.surface = static_cast<wl_surface*>(window_info.render_surface)};
|
.surface = static_cast<wl_surface*>(window_info.render_surface)};
|
||||||
@ -73,10 +71,22 @@ vk::SurfaceKHR CreateSurface(vk::Instance instance, const Frontend::EmuWindow& e
|
|||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||||
|
if (window_info.type == Frontend::WindowSystemType::Android) {
|
||||||
|
vk::AndroidSurfaceCreateInfoKHR android_ci = {
|
||||||
|
.window = reinterpret_cast<ANativeWindow*>(window_info.render_surface)
|
||||||
|
};
|
||||||
|
|
||||||
|
if (instance.createAndroidSurfaceKHR(&android_ci, nullptr, &surface) != vk::Result::eSuccess) {
|
||||||
|
LOG_CRITICAL(Render_Vulkan, "Failed to initialize Android surface");
|
||||||
|
UNREACHABLE();
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!surface) {
|
if (!surface) {
|
||||||
LOG_CRITICAL(Render_Vulkan, "Presentation not supported on this platform");
|
LOG_CRITICAL(Render_Vulkan, "Presentation not supported on this platform");
|
||||||
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
return surface;
|
return surface;
|
||||||
@ -112,6 +122,10 @@ std::vector<const char*> GetInstanceExtensions(Frontend::WindowSystemType window
|
|||||||
case Frontend::WindowSystemType::MacOS:
|
case Frontend::WindowSystemType::MacOS:
|
||||||
extensions.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME);
|
extensions.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME);
|
||||||
break;
|
break;
|
||||||
|
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||||
|
case Frontend::WindowSystemType::Android:
|
||||||
|
extensions.push_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
LOG_ERROR(Render_Vulkan, "Presentation not supported on this platform");
|
LOG_ERROR(Render_Vulkan, "Presentation not supported on this platform");
|
||||||
|
@ -1601,6 +1601,7 @@ void main() {
|
|||||||
normquat = vert_normquat;
|
normquat = vert_normquat;
|
||||||
view = vert_view;
|
view = vert_view;
|
||||||
gl_Position = vert_position;
|
gl_Position = vert_position;
|
||||||
|
gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0;
|
||||||
|
|
||||||
gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0
|
gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0
|
||||||
if (enable_clip1) {
|
if (enable_clip1) {
|
||||||
@ -1770,6 +1771,7 @@ struct Vertex {
|
|||||||
semantic(VSOutputAttributes::POSITION_Z) + ", " +
|
semantic(VSOutputAttributes::POSITION_Z) + ", " +
|
||||||
semantic(VSOutputAttributes::POSITION_W) + ");\n";
|
semantic(VSOutputAttributes::POSITION_W) + ");\n";
|
||||||
out += " gl_Position = vtx_pos;\n";
|
out += " gl_Position = vtx_pos;\n";
|
||||||
|
out += " gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0;\n";
|
||||||
out += "#if !defined(CITRA_GLES) || defined(GL_EXT_clip_cull_distance)\n";
|
out += "#if !defined(CITRA_GLES) || defined(GL_EXT_clip_cull_distance)\n";
|
||||||
out += " gl_ClipDistance[0] = -vtx_pos.z;\n"; // fixed PICA clipping plane z <= 0
|
out += " gl_ClipDistance[0] = -vtx_pos.z;\n"; // fixed PICA clipping plane z <= 0
|
||||||
out += " gl_ClipDistance[1] = dot(clip_coef, vtx_pos);\n";
|
out += " gl_ClipDistance[1] = dot(clip_coef, vtx_pos);\n";
|
||||||
|
Reference in New Issue
Block a user