From 9596ec8971be8593b96ac67a76195b5ed23ff794 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Thu, 11 Aug 2016 17:03:49 +0200 Subject: GeometryShaderGen: Pass-through clipping distance. --- Source/Core/VideoCommon/GeometryShaderGen.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Source/Core/VideoCommon/GeometryShaderGen.cpp') diff --git a/Source/Core/VideoCommon/GeometryShaderGen.cpp b/Source/Core/VideoCommon/GeometryShaderGen.cpp index 4d90e6f10d..03979d0bbe 100644 --- a/Source/Core/VideoCommon/GeometryShaderGen.cpp +++ b/Source/Core/VideoCommon/GeometryShaderGen.cpp @@ -312,6 +312,8 @@ static void EmitVertex(ShaderCode& out, const geometry_shader_uid_data* uid_data if (ApiType == APIType::OpenGL) { out.Write("\tgl_Position = %s.pos;\n", vertex); + if (g_ActiveConfig.backend_info.bSupportsDepthClamp) + out.Write("\tgl_ClipDistance[0] = %s.clipDist;\n", vertex); AssignVSOutputMembers(out, "ps", vertex, uid_data->numTexGens, uid_data->pixel_lighting); } else -- cgit v1.2.3 From 94927f360feb1989a7b63ec4d583f45a5767aa3b Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Fri, 12 Aug 2016 15:06:26 +0200 Subject: VideoCommon: Add a user-defined far clipping plane. --- Source/Core/VideoCommon/GeometryShaderGen.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Source/Core/VideoCommon/GeometryShaderGen.cpp') diff --git a/Source/Core/VideoCommon/GeometryShaderGen.cpp b/Source/Core/VideoCommon/GeometryShaderGen.cpp index 03979d0bbe..2630a422fa 100644 --- a/Source/Core/VideoCommon/GeometryShaderGen.cpp +++ b/Source/Core/VideoCommon/GeometryShaderGen.cpp @@ -313,7 +313,10 @@ static void EmitVertex(ShaderCode& out, const geometry_shader_uid_data* uid_data { out.Write("\tgl_Position = %s.pos;\n", vertex); if (g_ActiveConfig.backend_info.bSupportsDepthClamp) - out.Write("\tgl_ClipDistance[0] = %s.clipDist;\n", vertex); + { + out.Write("\tgl_ClipDistance[0] = %s.clipDist0;\n", vertex); + out.Write("\tgl_ClipDistance[1] = %s.clipDist1;\n", vertex); + } AssignVSOutputMembers(out, "ps", vertex, uid_data->numTexGens, uid_data->pixel_lighting); } else -- cgit v1.2.3 From e86d7cbc999223ca113af7b4c0aac6850c1854fe Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Wed, 17 Aug 2016 20:12:44 +0200 Subject: OGL: Workaround gl_ClipDistance bug on Mesa i965. --- Source/Core/VideoCommon/GeometryShaderGen.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Source/Core/VideoCommon/GeometryShaderGen.cpp') diff --git a/Source/Core/VideoCommon/GeometryShaderGen.cpp b/Source/Core/VideoCommon/GeometryShaderGen.cpp index 2630a422fa..83b30943bc 100644 --- a/Source/Core/VideoCommon/GeometryShaderGen.cpp +++ b/Source/Core/VideoCommon/GeometryShaderGen.cpp @@ -7,6 +7,7 @@ #include "Common/CommonTypes.h" #include "VideoCommon/BPMemory.h" +#include "VideoCommon/DriverDetails.h" #include "VideoCommon/GeometryShaderGen.h" #include "VideoCommon/LightingShaderGen.h" #include "VideoCommon/VideoCommon.h" @@ -211,6 +212,15 @@ ShaderCode GenerateGeometryShaderCode(APIType ApiType, const geometry_shader_uid { out.Write("\tVS_OUTPUT f;\n"); AssignVSOutputMembers(out, "f", "vs[i]", uid_data->numTexGens, uid_data->pixel_lighting); + + if (g_ActiveConfig.backend_info.bSupportsDepthClamp && + DriverDetails::HasBug(DriverDetails::BUG_BROKENCLIPDISTANCE)) + { + // On certain GPUs we have to consume the clip distance from the vertex shader + // or else the other vertex shader outputs will get corrupted. + out.Write("\tf.clipDist0 = gl_in[i].gl_ClipDistance[0];\n"); + out.Write("\tf.clipDist1 = gl_in[i].gl_ClipDistance[1];\n"); + } } else { -- cgit v1.2.3