renderer_vulkan: Fix culling related issues

This commit is contained in:
emufan
2022-06-19 00:09:02 +03:00
parent 816a846cfb
commit 69bde2b13b
3 changed files with 12 additions and 18 deletions

View File

@ -293,7 +293,8 @@ bool RasterizerVulkan::Draw(bool accelerate, bool is_indexed) {
// Sync the viewport
vk::Viewport viewport{0, 0, static_cast<float>(viewport_rect_unscaled.GetWidth() * res_scale),
static_cast<float>(viewport_rect_unscaled.GetHeight() * res_scale)};
static_cast<float>(viewport_rect_unscaled.GetHeight() * res_scale),
0.f, 1.f};
state.SetViewport(viewport);
if (uniform_block_data.data.framebuffer_scale != res_scale) {
@ -1146,12 +1147,12 @@ void RasterizerVulkan::SyncCullMode() {
break;
case Pica::RasterizerRegs::CullMode::KeepClockWise:
state.SetCullMode(vk::CullModeFlagBits::eBack);
state.SetCullMode(vk::CullModeFlagBits::eFront);
state.SetFrontFace(vk::FrontFace::eClockwise);
break;
case Pica::RasterizerRegs::CullMode::KeepCounterClockWise:
state.SetCullMode(vk::CullModeFlagBits::eBack);
state.SetCullMode(vk::CullModeFlagBits::eFront);
state.SetFrontFace(vk::FrontFace::eCounterClockwise);
break;

View File

@ -1275,8 +1275,6 @@ std::string GenerateFragmentShader(const PicaFSConfig& config) {
out += R"(
#version 450
#extension GL_ARB_shader_image_load_store : enable
#extension GL_ARB_shader_image_size : enable
#define ALLOW_SHADOW 0
)";
out += "#extension GL_ARB_separate_shader_objects : enable\n";
@ -1284,9 +1282,7 @@ std::string GenerateFragmentShader(const PicaFSConfig& config) {
out += GetVertexInterfaceDeclaration(false, true);
out += R"(
#ifndef CITRA_GLES
in vec4 gl_FragCoord;
#endif // CITRA_GLES
layout (location = 0) out vec4 color;
@ -1539,7 +1535,6 @@ vec4 secondary_fragment_color = vec4(0.0);
// do our own transformation according to PICA specification.
out += "float z_over_w = 2.0 * gl_FragCoord.z - 1.0;\n"
"float depth = z_over_w * depth_scale + depth_offset;\n";
//out += "if (gl_FragCoord.z == 0) { color = vec4(1.0, 0.0, 0.0, 1.0); return; }\n";
if (state.depthmap_enable == RasterizerRegs::DepthBuffering::WBuffering) {
out += "depth /= gl_FragCoord.w;\n";
}
@ -1657,13 +1652,11 @@ void main() {
normquat = vert_normquat;
view = vert_view;
// Convert OpenGL [-1, 1] to Vulkan [0, 1]
vec4 position = vert_position;
position.z = (position.z + 1) * 0.5;
gl_Position = position;
gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0
gl_ClipDistance[1] = dot(clip_coef, vert_position);
gl_Position = vert_position;
gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0;
//gl_Position.y = -gl_Position.y;
//gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0
//gl_ClipDistance[1] = dot(clip_coef, vert_position);
}
)";

View File

@ -95,9 +95,9 @@ VulkanState::VulkanState(const std::shared_ptr<VKSwapChain>& swapchain) : swapch
// Create texture sampler
auto props = g_vk_instace->GetPhysicalDevice().getProperties();
vk::SamplerCreateInfo sampler_info{
{}, vk::Filter::eNearest,
vk::Filter::eNearest,
vk::SamplerMipmapMode::eNearest,
{}, vk::Filter::eLinear,
vk::Filter::eLinear,
vk::SamplerMipmapMode::eLinear,
vk::SamplerAddressMode::eClampToEdge,
vk::SamplerAddressMode::eClampToEdge,
vk::SamplerAddressMode::eClampToEdge,