glsl: Yet another gl_ViewportIndex fix attempt

master
ameerj 2021-06-01 01:49:24 +07:00
parent 9f3970f837
commit 31147ffe69
1 changed files with 19 additions and 3 deletions

@ -32,6 +32,19 @@ std::string_view InputArrayDecorator(Stage stage) {
}
}
bool StoresPerVertexAttributes(Stage stage) {
switch (stage) {
case Stage::VertexA:
case Stage::VertexB:
case Stage::Geometry:
case Stage::TessellationControl:
case Stage::TessellationEval:
return true;
default:
return false;
}
}
std::string OutputDecorator(Stage stage, u32 size) {
switch (stage) {
case Stage::TessellationControl:
@ -137,7 +150,7 @@ std::string_view OutputPrimitive(OutputTopology topology) {
}
void SetupOutPerVertex(Stage stage, const Info& info, std::string& header) {
if (stage != Stage::VertexA && stage != Stage::VertexB && stage != Stage::Geometry) {
if (!StoresPerVertexAttributes(stage)) {
return;
}
header += "out gl_PerVertex{";
@ -150,8 +163,11 @@ void SetupOutPerVertex(Stage stage, const Info& info, std::string& header) {
if (info.stores_clip_distance) {
header += "float gl_ClipDistance[];";
}
if (info.stores_viewport_index && stage != Stage::Geometry) {
header += "int gl_ViewportIndex;";
}
header += "};\n";
if (info.stores_viewport_index) {
if (info.stores_viewport_index && stage == Stage::Geometry) {
header += "out int gl_ViewportIndex;";
}
}
@ -265,7 +281,7 @@ void EmitContext::SetupExtensions(std::string&) {
header += "#extension GL_ARB_gpu_shader_int64 : enable\n";
}
}
if (info.stores_viewport_index) {
if (info.stores_viewport_index && stage != Stage::Geometry) {
header += "#extension GL_ARB_shader_viewport_layer_array : enable\n";
}
}