glsl: Yet another gl_ViewportIndex fix attempt
This commit is contained in:
		| @@ -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"; | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ameerj
					ameerj