summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/GeometryShaderGen.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2022-07-08 15:29:58 -0400
committerGitHub <noreply@github.com>2022-07-08 15:29:58 -0400
commit828afc67356c2299c6056d618eb6b7afe4c843b9 (patch)
treecb7809cf9aad689968ec209e8d886b5457ca68dc /Source/Core/VideoCommon/GeometryShaderGen.cpp
parent7cc89f5642cab3b91aef1c8255af857a1607ddf6 (diff)
parenta8b52663479effc0f404f7c0f8b52bc0ee37b742 (diff)
Merge pull request #10673 from iwubcode/spirv-backends
D3D: Generate HLSL from SPIRV*
Diffstat (limited to 'Source/Core/VideoCommon/GeometryShaderGen.cpp')
-rw-r--r--Source/Core/VideoCommon/GeometryShaderGen.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/Source/Core/VideoCommon/GeometryShaderGen.cpp b/Source/Core/VideoCommon/GeometryShaderGen.cpp
index 150354e4f3..10895ccf88 100644
--- a/Source/Core/VideoCommon/GeometryShaderGen.cpp
+++ b/Source/Core/VideoCommon/GeometryShaderGen.cpp
@@ -103,7 +103,8 @@ ShaderCode GenerateGeometryShaderCode(APIType api_type, const ShaderHostConfig&
"}};\n");
out.Write("struct VS_OUTPUT {{\n");
- GenerateVSOutputMembers(out, api_type, uid_data->numTexGens, host_config, "");
+ GenerateVSOutputMembers(out, api_type, uid_data->numTexGens, host_config, "",
+ ShaderStage::Geometry);
out.Write("}};\n");
if (api_type == APIType::OpenGL || api_type == APIType::Vulkan)
@@ -113,15 +114,14 @@ ShaderCode GenerateGeometryShaderCode(APIType api_type, const ShaderHostConfig&
out.Write("VARYING_LOCATION(0) in VertexData {{\n");
GenerateVSOutputMembers(out, api_type, uid_data->numTexGens, host_config,
- GetInterpolationQualifier(msaa, ssaa, true, true));
+ GetInterpolationQualifier(msaa, ssaa, true, true),
+ ShaderStage::Geometry);
out.Write("}} vs[{}];\n", vertex_in);
out.Write("VARYING_LOCATION(0) out VertexData {{\n");
GenerateVSOutputMembers(out, api_type, uid_data->numTexGens, host_config,
- GetInterpolationQualifier(msaa, ssaa, true, false));
-
- if (stereo)
- out.Write("\tflat int layer;\n");
+ GetInterpolationQualifier(msaa, ssaa, true, false),
+ ShaderStage::Geometry);
out.Write("}} ps;\n");
@@ -133,7 +133,10 @@ ShaderCode GenerateGeometryShaderCode(APIType api_type, const ShaderHostConfig&
out.Write("\tVS_OUTPUT o;\n");
if (stereo)
+ {
out.Write("\tuint layer : SV_RenderTargetArrayIndex;\n");
+ }
+ out.Write("\tfloat4 posout : SV_Position;\n");
out.Write("}};\n");
@@ -344,14 +347,18 @@ static void EmitVertex(ShaderCode& out, const ShaderHostConfig& host_config,
else
{
out.Write("\tps.o = {};\n", vertex);
+ out.Write("\tps.posout = {}.pos;\n", vertex);
}
if (stereo)
{
// Select the output layer
- out.Write("\tps.layer = eye;\n");
if (api_type == APIType::OpenGL || api_type == APIType::Vulkan)
out.Write("\tgl_Layer = eye;\n");
+ else
+ {
+ out.Write("\tps.layer = eye;\n");
+ }
}
if (api_type == APIType::OpenGL || api_type == APIType::Vulkan)