renderer_vulkan: Fix culling related issues
This commit is contained in:
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
)";
|
||||
|
||||
|
@ -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,
|
||||
|
Reference in New Issue
Block a user