Jelajahi Sumber

Adding location and binding qualifiers to all GLSL shaders
Removing global uniforms from GLSL
Removing HLSL9 code

BearishSun 9 tahun lalu
induk
melakukan
c3980c5957
42 mengubah file dengan 351 tambahan dan 828 penghapusan
  1. 11 38
      Data/Raw/Editor/Includes/LineGizmo.bslinc
  2. 22 57
      Data/Raw/Editor/Includes/PickingAlphaCull.bslinc
  3. 15 40
      Data/Raw/Editor/Includes/PickingCull.bslinc
  4. 18 11
      Data/Raw/Editor/Includes/SelectionBase.bslinc
  5. 20 12
      Data/Raw/Editor/Includes/SolidGizmo.bslinc
  6. 2 2
      Data/Raw/Editor/Shaders/ClearHandleAlpha.bsl
  7. 16 64
      Data/Raw/Editor/Shaders/DockDropOverlay.bsl
  8. 11 40
      Data/Raw/Editor/Shaders/GizmoPicking.bsl
  9. 22 56
      Data/Raw/Editor/Shaders/GizmoPickingAlpha.bsl
  10. 32 109
      Data/Raw/Editor/Shaders/IconGizmo.bsl
  11. 0 17
      Data/Raw/Editor/Shaders/LineGizmo.bsl
  12. 0 21
      Data/Raw/Editor/Shaders/LineHandle.bsl
  13. 0 10
      Data/Raw/Editor/Shaders/PickingAlphaCullCCW.bsl
  14. 0 10
      Data/Raw/Editor/Shaders/PickingAlphaCullCW.bsl
  15. 0 10
      Data/Raw/Editor/Shaders/PickingAlphaCullNone.bsl
  16. 0 10
      Data/Raw/Editor/Shaders/PickingCullCCW.bsl
  17. 0 10
      Data/Raw/Editor/Shaders/PickingCullCW.bsl
  18. 0 10
      Data/Raw/Editor/Shaders/PickingCullNone.bsl
  19. 21 86
      Data/Raw/Editor/Shaders/SceneGrid.bsl
  20. 17 56
      Data/Raw/Editor/Shaders/TextGizmo.bsl
  21. 10 40
      Data/Raw/Editor/Shaders/WireGizmo.bsl
  22. 4 4
      Data/Raw/Engine/Includes/DeferredLightPass.bslinc
  23. 7 7
      Data/Raw/Engine/Includes/DeferredPointLightPass.bslinc
  24. 16 19
      Data/Raw/Engine/Includes/NormalVertexInput.bslinc
  25. 3 3
      Data/Raw/Engine/Includes/PPBase.bslinc
  26. 1 1
      Data/Raw/Engine/Includes/PPWhiteBalance.bslinc
  27. 1 1
      Data/Raw/Engine/Includes/PerCameraData.bslinc
  28. 1 1
      Data/Raw/Engine/Includes/PerObjectData.bslinc
  29. 12 8
      Data/Raw/Engine/Includes/ResolveCommon.bslinc
  30. 13 16
      Data/Raw/Engine/Includes/SkinnedVertexInput.bslinc
  31. 5 5
      Data/Raw/Engine/Includes/VolumeRenderBase.bslinc
  32. 5 1
      Data/Raw/Engine/Shaders/Default.bsl
  33. 11 10
      Data/Raw/Engine/Shaders/DeferredDirectionalLightPass.bsl
  34. 7 3
      Data/Raw/Engine/Shaders/Diffuse.bsl
  35. 4 3
      Data/Raw/Engine/Shaders/PPCreateTonemapLUT.bsl
  36. 6 5
      Data/Raw/Engine/Shaders/PPDownsample.bsl
  37. 3 3
      Data/Raw/Engine/Shaders/PPEyeAdaptHistogram.bsl
  38. 6 6
      Data/Raw/Engine/Shaders/PPEyeAdaptHistogramReduce.bsl
  39. 4 4
      Data/Raw/Engine/Shaders/PPEyeAdaptation.bsl
  40. 12 12
      Data/Raw/Engine/Shaders/PPTonemapping.bsl
  41. 12 6
      Data/Raw/Engine/Shaders/SpriteLine.bsl
  42. 1 1
      Source/BansheeGLRenderAPI/Source/GLSL/src/BsGLSLGpuProgram.cpp

+ 11 - 38
Data/Raw/Editor/Includes/LineGizmo.bslinc

@@ -34,37 +34,6 @@ Technique : base("LineGizmo") =
 	};
 };
 
-Technique : base("LineGizmo") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Vertex =
-		{
-			float4x4 matViewProj;
-
-			void main(
-				in float3 inPos : POSITION,	
-				in float4 inColor : COLOR0,	
-				out float4 oPosition : POSITION,
-				out float4 oColor : COLOR0)
-			{
-				oPosition = mul(matViewProj, float4(inPos.xyz, 1));
-				oColor = inColor;
-			}
-		};
-		
-		Fragment =
-		{
-			float4 main(float4 color : COLOR0) : COLOR0
-			{
-				return color;
-			}
-		};
-	};
-};
-
 Technique : base("LineGizmo") =
 {
 	Language = "GLSL";
@@ -73,16 +42,20 @@ Technique : base("LineGizmo") =
 	{
 		Vertex =
 		{
-			uniform mat4 matViewProj;
-
-			in vec3 bs_position;
-			in vec4 bs_color0;
-			out vec4 color0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec4 bs_color0;
+			
+			layout(location = 0) out vec4 color0;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
 			};
+
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matViewProj;
+			};
 			
 			void main()
 			{
@@ -93,8 +66,8 @@ Technique : base("LineGizmo") =
 		
 		Fragment =
 		{
-			in vec4 color0;
-			out vec4 fragColor;
+			layout(location = 0) in vec4 color0;
+			layout(location = 0) out vec4 fragColor;
 
 			void main()
 			{

+ 22 - 57
Data/Raw/Editor/Includes/PickingAlphaCull.bslinc

@@ -60,50 +60,6 @@ Technique : base("PickingAlphaCull") =
 	};
 };
 
-Technique : base("PickingAlphaCull") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Scissor = true;
-
-		Vertex =
-		{
-			float4x4 matWorldViewProj;
-
-			void main(
-				in float3 inPos : POSITION,
-				in float2 uv : TEXCOORD0,
-				out float4 oPosition : POSITION,
-				out float2 oUv : TEXCOORD0)
-			{
-				oPosition = mul(matWorldViewProj, float4(inPos.xyz, 1));
-				oUv = uv;
-			}
-		};
-		
-		Fragment =
-		{
-			sampler2D mainTexture;
-
-			float4 colorIndex;
-			float alphaCutoff;
-
-			float4 main(
-				in float4 inPos : POSITION,
-				in float2 uv : TEXCOORD0) : COLOR0
-			{
-				float4 color = tex2D(mainTexture, uv);
-				if(color.a < alphaCutoff)
-					discard;
-				
-				return colorIndex;
-			}
-		};
-	};
-};
-
 Technique : base("PickingAlphaCull") =
 {
 	Language = "GLSL";
@@ -113,19 +69,24 @@ Technique : base("PickingAlphaCull") =
 		Scissor = true;
 
 		Vertex =
-		{
-			uniform mat4 matWorldViewProj;
-			in vec3 bs_position;
-			in vec2 bs_texcoord0;
-			in vec3 bs_normal;
-			out vec4 normal;
-			out vec2 texcoord0;
+		{		
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec2 bs_texcoord0;
+			layout(location = 2) in vec3 bs_normal;
+			
+			layout(location = 0) out vec4 normal;
+			layout(location = 1) out vec2 texcoord0;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
 			};
 			
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matWorldViewProj;
+			};			
+			
 			void main()
 			{
 				gl_Position = matWorldViewProj * vec4(bs_position.xyz, 1);
@@ -136,14 +97,18 @@ Technique : base("PickingAlphaCull") =
 		
 		Fragment =
 		{
-			in vec4 normal;
-			in vec2 texcoord0;		
+			layout(location = 0) in vec4 normal;
+			layout(location = 1) in vec2 texcoord0;		
 		
-			uniform sampler2D mainTexture;
-			uniform vec4 colorIndex;
-			uniform float alphaCutoff;
+			layout(location = 0) out vec4[2] outColor;
 
-			out vec4[2] outColor;
+			layout(binding = 1) uniform FragUBO
+			{
+				vec4 colorIndex;
+				float alphaCutoff;
+			};	
+			
+			layout(binding = 2) uniform sampler2D mainTexture;
 
 			void main()
 			{

+ 15 - 40
Data/Raw/Editor/Includes/PickingCull.bslinc

@@ -45,38 +45,6 @@ Technique : base("PickingCull") =
 	};
 };
 
-Technique : base("PickingCull") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Scissor = true;
-
-		Vertex =
-		{
-			float4x4 matWorldViewProj;
-
-			void main(
-				in float3 inPos : POSITION,
-				out float4 oPosition : POSITION)
-			{
-				oPosition = mul(matWorldViewProj, float4(inPos.xyz, 1));
-			}
-		};
-		
-		Fragment =
-		{
-			float4 colorIndex;
-
-			float4 main(in float4 inPos : POSITION) : COLOR0
-			{
-				return colorIndex;
-			}
-		};
-	};
-};
-
 Technique : base("PickingCull") =
 {
 	Language = "GLSL";
@@ -87,16 +55,21 @@ Technique : base("PickingCull") =
 
 		Vertex =
 		{
-			uniform mat4 matWorldViewProj;
-			in vec3 bs_position;
-			in vec3 bs_normal;
-			out vec4 normal;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec3 bs_normal;
+			
+			layout(location = 0) out vec4 normal;
 			
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
 			};
 			
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matWorldViewProj;
+			};	
+			
 			void main()
 			{
 				normal = vec4(bs_normal,0);
@@ -106,11 +79,13 @@ Technique : base("PickingCull") =
 		
 		Fragment =
 		{
-			in vec4 normal;
-
-			uniform vec4 colorIndex;
+			layout(location = 0) in vec4 normal;
+			layout(location = 0) out vec4[2] outColor;
 			
-			out vec4[2] outColor;
+			layout(binding = 1) uniform FragUBO
+			{
+				vec4 colorIndex;
+			};	
 
 			void main()
 			{

+ 18 - 11
Data/Raw/Editor/Includes/SelectionBase.bslinc

@@ -127,9 +127,13 @@ Technique : base("SelectionBase") =
 		
 		Fragment =
 		{
-			uniform vec4 selColor;
-			out vec4 fragColor;
-
+			layout(location = 0) out vec4 fragColor;
+		
+			layout(binding = 0) uniform FragUBO
+			{
+				vec4 selColor;
+			};
+		
 			void main()
 			{
 				fragColor = selColor;
@@ -158,18 +162,16 @@ Technique
 	
 	Vertex =
 	{
-		uniform mat4 matWorldViewProj;
-
-		in vec3 bs_position;
+		layout(location = 0) in vec3 bs_position;
 	
 		#ifdef USE_SKELETON
-			in ivec4 bs_blendindices;
-			in vec4 bs_blendweights;
+			layout(location = 1) in ivec4 bs_blendindices;
+			layout(location = 2) in vec4 bs_blendweights;
 		#endif
 			
 		#ifdef USE_BLEND_SHAPES
-			in vec3 bs_position1;
-			in vec4 bs_normal1;
+			layout(location = 3) in vec3 bs_position1;
+			layout(location = 4) in vec4 bs_normal1;
 		#endif
 		
 		out gl_PerVertex
@@ -177,8 +179,13 @@ Technique
 			vec4 gl_Position;
 		};
 		
+		layout(binding = 0) uniform VertUBO
+		{
+			mat4 matWorldViewProj;
+		};	
+		
 #ifdef USE_SKELETON
-		uniform samplerBuffer boneMatrices;
+		layout(binding = 1) uniform samplerBuffer boneMatrices;
 		
 		void getBoneMatrix(int idx, out mat4x3 result)
 		{

+ 20 - 12
Data/Raw/Editor/Includes/SolidGizmo.bslinc

@@ -51,17 +51,21 @@ Technique : base("SolidGizmo") =
 	{
 		Vertex =
 		{
-			uniform mat4 matViewProj;
-
-			in vec3 bs_position;
-			in vec3 bs_normal;
-			in vec4 bs_color0;
-			out vec3 normal;
-			out vec4 color0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec3 bs_normal;
+			layout(location = 2) in vec4 bs_color0;
+			
+			layout(location = 0) out vec3 normal;
+			layout(location = 1) out vec4 color0;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
+			};		
+		
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matViewProj;
 			};
 			
 			void main()
@@ -74,12 +78,16 @@ Technique : base("SolidGizmo") =
 		
 		Fragment =
 		{
-			uniform vec4 viewDir;
-		
-			in vec4 color0;
-			in vec3 normal;
-			out vec4 fragColor;
+			layout(location = 0) in vec3 normal;
+			layout(location = 1) in vec4 color0;
+			
+			layout(location = 0) out vec4 fragColor;
 
+			layout(binding = 1) uniform FragUBO
+			{
+				vec4 viewDir;
+			};
+			
 			void main()
 			{
 				fragColor = color0 * dot(normalize(normal), -viewDir.xyz);

+ 2 - 2
Data/Raw/Editor/Shaders/ClearHandleAlpha.bsl

@@ -54,7 +54,7 @@ Technique =
 	
 		Vertex =
 		{
-			in vec3 bs_position;
+			layout(location = 0) in vec3 bs_position;
 
 			out gl_PerVertex
 			{
@@ -69,7 +69,7 @@ Technique =
 		
 		Fragment =
 		{
-			out vec4 fragColor;
+			layout(location = 0) out vec4 fragColor;
 
 			void main()
 			{

+ 16 - 64
Data/Raw/Editor/Shaders/DockDropOverlay.bsl

@@ -60,58 +60,6 @@ Technique =
 	};
 };
 
-Technique =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Target = 
-		{
-			Blend = true;
-			Color = { SRCA, SRCIA, ADD };
-		};
-		
-		DepthRead = false;
-		DepthWrite = false;
-		
-		Vertex =
-		{
-			float invViewportWidth;
-			float invViewportHeight;
-
-			float4 tintColor;
-			float4 highlightColor;
-			float4 highlightActive;
-
-			void main(
-			in float2 inPos : POSITION,
-			in float4 inColor : COLOR0,
-			out float4 oPosition : POSITION,
-			out float4 oColor : COLOR0)
-			{
-				float tfrmdX = -1.0f + ((inPos.x - 0.5f) * invViewportWidth);
-				float tfrmdY = 1.0f - ((inPos.y - 0.5f) * invViewportHeight);
-
-				oPosition = float4(tfrmdX, tfrmdY, 0, 1);
-
-				float4 highlight = highlightActive * inColor;
-				float highlightSum = highlight.x + highlight.y + highlight.z + highlight.a;
-
-				oColor = (1.0f - highlightSum) * tintColor + highlightSum * highlightColor;
-			}
-		};
-		
-		Fragment =
-		{
-			float4 main(float4 color : COLOR0) : COLOR0
-			{
-				return color;
-			}
-		};
-	};
-};
-
 Technique =
 {
 	Language = "GLSL";
@@ -129,21 +77,25 @@ Technique =
 		
 		Vertex =
 		{
-			uniform float invViewportWidth;
-			uniform float invViewportHeight;
-
-			uniform vec4 tintColor;
-			uniform vec4 highlightColor;
-			uniform vec4 highlightActive;
-
-			in vec2 bs_position;
-			in vec4 bs_color0;
-			out vec4 color0;
+			layout(location = 0) in vec2 bs_position;
+			layout(location = 1) in vec4 bs_color0;
+			
+			layout(location = 0) out vec4 color0;
 			
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
 			};			
+			
+			layout(binding = 0) uniform VertUBO
+			{
+				float invViewportWidth;
+				float invViewportHeight;
+
+				vec4 tintColor;
+				vec4 highlightColor;
+				vec4 highlightActive;
+			};
 
 			void main()
 			{
@@ -161,8 +113,8 @@ Technique =
 		
 		Fragment =
 		{
-			in vec4 color0;
-			out vec4 fragColor;
+			layout(location = 0) in vec4 color0;
+			layout(location = 0) out vec4 fragColor;
 
 			void main()
 			{

+ 11 - 40
Data/Raw/Editor/Shaders/GizmoPicking.bsl

@@ -36,39 +36,6 @@ Technique =
 	};
 };
 
-Technique =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Scissor = true;
-
-		Vertex =
-		{
-			float4x4 matViewProj;
-
-			void main(
-				in float3 inPos : POSITION,
-				in float4 inColor : COLOR0,
-				out float4 oPosition : POSITION,
-				out float4 oColor : COLOR0)
-			{
-				oPosition = mul(matViewProj, float4(inPos.xyz, 1));
-				oColor = inColor;
-			}
-		};
-		
-		Fragment =
-		{
-			float4 main(in float4 inPos : POSITION, in float4 inColor : COLOR0) : COLOR0
-			{
-				return inColor;
-			}
-		};
-	};
-};
-
 Technique =
 {
 	Language = "GLSL";
@@ -79,17 +46,21 @@ Technique =
 
 		Vertex =
 		{
-			uniform mat4 matViewProj;
-
-			in vec3 bs_position;
-			in vec4 bs_color0;
-			out vec4 color0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec4 bs_color0;
+			
+			layout(location = 0) out vec4 color0;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
 			};
 			
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matViewProj;
+			};
+			
 			void main()
 			{
 				gl_Position = matViewProj * vec4(bs_position.xyz, 1);
@@ -99,8 +70,8 @@ Technique =
 		
 		Fragment =
 		{
-			in vec4 color0;
-			out vec4 fragColor;
+			layout(location = 0) in vec4 color0;
+			layout(location = 0) out vec4 fragColor;
 
 			void main()
 			{

+ 22 - 56
Data/Raw/Editor/Shaders/GizmoPickingAlpha.bsl

@@ -54,51 +54,6 @@ Technique =
 	};
 };
 
-Technique =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Scissor = true;
-
-		Vertex =
-		{
-			float4x4 matViewProj;
-
-			void main(
-				in float3 inPos : POSITION,
-				in float2 uv : TEXCOORD0,
-				in float4 color : COLOR0,
-				out float4 oPosition : POSITION,
-				out float2 oUv : TEXCOORD0,
-				out float4 oColor : COLOR0)
-			{
-				oPosition = mul(matViewProj, float4(inPos.xyz, 1));
-				oUv = uv;
-				oColor = color;
-			}
-		};
-		
-		Fragment =
-		{
-			sampler2D mainTexture;
-			float alphaCutoff;
-
-			float4 main(in float4 inPos : POSITION, 
-					in float2 inUv : TEXCOORD0,
-					in float4 inColor : COLOR0) : COLOR0
-			{
-				float4 color = tex2D(mainTexture, inUv);
-				if(color.a < alphaCutoff)
-					discard;
-				
-				return inColor;
-			}
-		};
-	};
-};
-
 Technique =
 {
 	Language = "GLSL";
@@ -109,18 +64,23 @@ Technique =
 
 		Vertex =
 		{
-			uniform mat4 matViewProj;
-			in vec3 bs_position;
-			in vec4 bs_color0;
-			in vec2 bs_texcoord0;
-			out vec2 texcoord0;
-			out vec4 color0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec4 bs_color0;
+			layout(location = 2) in vec2 bs_texcoord0;
+			
+			layout(location = 0) out vec2 texcoord0;
+			layout(location = 1) out vec4 color0;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
 			};
 			
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matViewProj;
+			};
+			
 			void main()
 			{
 				gl_Position = matViewProj * vec4(bs_position.xyz, 1);
@@ -131,12 +91,18 @@ Technique =
 		
 		Fragment =
 		{
-			uniform sampler2D mainTexture;
-			uniform float alphaCutoff;
-			in vec2 texcoord0;
-			in vec4 color0;
-			out vec4 fragColor;
+			layout(location = 0) in vec2 texcoord0;
+			layout(location = 1) in vec4 color0;
+			
+			layout(location = 0) out vec4 fragColor;
 
+			layout(binding = 1) uniform FragUBO
+			{
+				float alphaCutoff;
+			};
+			
+			layout(binding = 2) uniform sampler2D mainTexture;
+			
 			void main()
 			{
 				vec4 texColor = texture2D(mainTexture, texcoord0);

+ 32 - 109
Data/Raw/Editor/Shaders/IconGizmo.bsl

@@ -98,91 +98,6 @@ Technique =
 	};	
 };	
 
-Technique =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Target = 
-		{
-			Blend = true;
-			Color = { SRCA, SRCIA, ADD };
-		};
-		
-		DepthWrite = false;
-		CompareFunc = LTE;
-		
-		Vertex =
-		{
-			float4x4 matViewProj;
-
-			void main(
-				in float3 inPos : POSITION,
-				in float4 color : COLOR0,
-				in float2 uv : TEXCOORD0,
-				out float4 oPosition : POSITION,
-				out float4 oColor : COLOR0,
-				out float2 oUv : TEXCOORD0)
-			{
-				oPosition = mul(matViewProj, float4(inPos.xyz, 1));
-				oColor = color;
-				oUv = uv;
-			}		
-		};
-		
-		Fragment =
-		{
-			sampler2D mainTexture;
-
-			float4 main(float2 uv : TEXCOORD0, float4 color : COLOR0) : COLOR0
-			{
-				return color * tex2D(mainTexture, uv);
-			}		
-		};
-	};
-	
-	Pass =
-	{
-		Target = 
-		{
-			Blend = true;
-			Color = { SRCA, SRCIA, ADD };
-		};
-		
-		DepthWrite = false;
-		CompareFunc = GT;
-		
-		Vertex =
-		{
-			float4x4 matViewProj;
-
-			void main(
-				in float3 inPos : POSITION,
-				in float4 color : COLOR1,
-				in float2 uv : TEXCOORD0,
-				out float4 oPosition : POSITION,
-				out float4 oColor : COLOR0,
-				out float2 oUv : TEXCOORD0)
-			{
-				oPosition = mul(matViewProj, float4(inPos.xyz, 1));
-				oColor = color;
-				oUv = uv;
-			}
-		};
-		
-		Fragment =
-		{
-			sampler2D mainTexture;
-
-			float4 main(float2 uv : TEXCOORD0, float4 color : COLOR0) : COLOR0
-			{
-				return color * tex2D(mainTexture, uv);
-			}		
-		};
-	};	
-};	
-
 Technique =
 {
 	Language = "GLSL";
@@ -200,17 +115,21 @@ Technique =
 		
 		Vertex =
 		{
-			uniform mat4 matViewProj;
-
-			in vec3 bs_position;
-			in vec4 bs_color0;
-			in vec2 bs_texcoord0;
-			out vec4 color0;
-			out vec2 texcoord0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec4 bs_color0;
+			layout(location = 2) in vec2 bs_texcoord0;
+			
+			layout(location = 0) out vec4 color0;
+			layout(location = 1) out vec2 texcoord0;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
+			};		
+		
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matViewProj;
 			};
 			
 			void main()
@@ -223,12 +142,12 @@ Technique =
 		
 		Fragment =
 		{
-			uniform sampler2D mainTexture;
-
-			in vec4 color0;
-			in vec2 texcoord0;
-			out vec4 fragColor;
+			layout(location = 0) in vec4 color0;
+			layout(location = 1) in vec2 texcoord0;
+			layout(location = 0) out vec4 fragColor;
 
+			layout(binding = 1) uniform sampler2D mainTexture;
+			
 			void main()
 			{
 				vec4 texColor = texture2D(mainTexture, texcoord0.st);
@@ -250,18 +169,22 @@ Technique =
 		
 		Vertex =
 		{
-			uniform mat4 matViewProj;
-
-			in vec3 bs_position;
-			in vec4 bs_color1;
-			in vec2 bs_texcoord0;
-			out vec4 color0;
-			out vec2 texcoord0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec4 bs_color1;
+			layout(location = 2) in vec2 bs_texcoord0;
+			
+			layout(location = 0) out vec4 color0;
+			layout(location = 1) out vec2 texcoord0;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
 			};
+
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matViewProj;
+			};
 			
 			void main()
 			{
@@ -273,12 +196,12 @@ Technique =
 		
 		Fragment =
 		{
-			uniform sampler2D mainTexture;
-
-			in vec4 color0;
-			in vec2 texcoord0;
-			out vec4 fragColor;
+			layout(location = 0) in vec4 color0;
+			layout(location = 1) in vec2 texcoord0;
+			layout(location = 0) out vec4 fragColor;
 
+			layout(binding = 1) uniform sampler2D mainTexture;
+			
 			void main()
 			{
 				vec4 texColor = texture2D(mainTexture, texcoord0.st);

+ 0 - 17
Data/Raw/Editor/Shaders/LineGizmo.bsl

@@ -17,23 +17,6 @@ Technique : inherits("LineGizmo") =
 	};
 };
 
-Technique : inherits("LineGizmo") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Multisample = false; // This controls line rendering algorithm
-		AALine = true;
-		
-		Target =
-		{
-			Blend = true;
-			Color = { SRCA, SRCIA, ADD };
-		};
-	};
-};
-
 Technique : inherits("LineGizmo") =
 {
 	Language = "GLSL";

+ 0 - 21
Data/Raw/Editor/Shaders/LineHandle.bsl

@@ -21,27 +21,6 @@ Technique : inherits("LineGizmo") =
 	};
 };
 
-Technique : inherits("LineGizmo") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		DepthWrite = false;
-		DepthRead = false;
-		Stencil = true;
-		StencilOpFront = { KEEP, KEEP, INC, PASS };
-		Multisample = false; // This controls line rendering algorithm
-		AALine = true;
-		
-		Target =
-		{
-			Blend = true;
-			Color = { SRCA, SRCIA, ADD };
-		};
-	};
-};
-
 Technique : inherits("LineGizmo") =
 {
 	Language = "GLSL";

+ 0 - 10
Data/Raw/Editor/Shaders/PickingAlphaCullCCW.bsl

@@ -10,16 +10,6 @@ Technique : inherits("PickingAlphaCull") =
 	};
 };
 
-Technique : inherits("PickingAlphaCull") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Cull = CCW;
-	};
-};
-
 Technique : inherits("PickingAlphaCull") =
 {
 	Language = "GLSL";

+ 0 - 10
Data/Raw/Editor/Shaders/PickingAlphaCullCW.bsl

@@ -10,16 +10,6 @@ Technique : inherits("PickingAlphaCull") =
 	};
 };
 
-Technique : inherits("PickingAlphaCull") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Cull = CW;
-	};
-};
-
 Technique : inherits("PickingAlphaCull") =
 {
 	Language = "GLSL";

+ 0 - 10
Data/Raw/Editor/Shaders/PickingAlphaCullNone.bsl

@@ -10,16 +10,6 @@ Technique : inherits("PickingAlphaCull") =
 	};
 };
 
-Technique : inherits("PickingAlphaCull") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Cull = NOCULL;
-	};
-};
-
 Technique : inherits("PickingAlphaCull") =
 {
 	Language = "GLSL";

+ 0 - 10
Data/Raw/Editor/Shaders/PickingCullCCW.bsl

@@ -10,16 +10,6 @@ Technique : inherits("PickingCull") =
 	};
 };
 
-Technique : inherits("PickingCull") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Cull = CCW;
-	};
-};
-
 Technique : inherits("PickingCull") =
 {
 	Language = "GLSL";

+ 0 - 10
Data/Raw/Editor/Shaders/PickingCullCW.bsl

@@ -10,16 +10,6 @@ Technique : inherits("PickingCull") =
 	};
 };
 
-Technique : inherits("PickingCull") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Cull = CW;
-	};
-};
-
 Technique : inherits("PickingCull") =
 {
 	Language = "GLSL";

+ 0 - 10
Data/Raw/Editor/Shaders/PickingCullNone.bsl

@@ -10,16 +10,6 @@ Technique : inherits("PickingCull") =
 	};
 };
 
-Technique : inherits("PickingCull") =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Cull = NOCULL;
-	};
-};
-
 Technique : inherits("PickingCull") =
 {
 	Language = "GLSL";

+ 21 - 86
Data/Raw/Editor/Shaders/SceneGrid.bsl

@@ -82,77 +82,6 @@ Technique =
 	};
 };
 
-Technique =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		DepthWrite = false;
-		Cull = NOCULL;
-		
-		Target =
-		{
-			Blend = true;
-			Color = { SRCA, SRCIA, ADD };
-			WriteMask = RGB;
-		};
-
-		Vertex =
-		{
-			float4x4 matViewProj;
-
-			void main(
-				in float3 inPos : POSITION,
-				out float4 oPosition : POSITION,
-				out float4 oWorldPos : TEXCOORD0)
-				{
-					oPosition = mul(matViewProj, float4(inPos.xyz, 1));
-					oWorldPos = float4(inPos.xyz, 1);
-				}	
-		};
-		
-		Fragment =
-		{
-			float4 worldCameraPos;
-			float gridSpacing;
-			float gridBorderWidth;
-			float4 gridColor;
-			float gridFadeOutStart;
-			float gridFadeOutEnd;
-			float3 gridPlaneNormal; // Must be one of the basis vectors
-			
-			float3 sampleGrid(float3 position)
-			{
-				float3 count = round(position / float3(gridSpacing, gridSpacing, gridSpacing));
-				
-				// Adding grid plane normal ensures that the remainer for the unused axis is not zero, otherwise
-				// the sampled value would always be 1.
-				float3 remainder = abs(position - count * float3(gridSpacing, gridSpacing, gridSpacing)) + gridPlaneNormal;
-
-				float3 derivX = ddx(position);
-				float3 derivY = ddy(position);
-				float3 gradientLength = float3(length(float2(derivX.x, derivY.x)), length(float2(derivX.y, derivY.y)), 
-					length(float2(derivX.z, derivY.z)));
-
-				float3 borderWidth = float3(gridBorderWidth, gridBorderWidth, gridBorderWidth);
-				return 1.0f - smoothstep(borderWidth, borderWidth + gradientLength, remainder);
-			}
-
-			float4 main(in float4 inWorldPos : TEXCOORD0) : COLOR0
-			{
-				float3 sampValue = sampleGrid(inWorldPos.xyz);
-
-				float4 outColor = gridColor;
-				outColor.a = max(max(sampValue.x, sampValue.y), sampValue.z) * 
-					smoothstep(gridFadeOutEnd, gridFadeOutStart, length(inWorldPos - worldCameraPos));
-				
-				return outColor;
-			}
-		};
-	};
-};
-
 Technique =
 {
 	Language = "GLSL";
@@ -171,15 +100,18 @@ Technique =
 
 		Vertex =
 		{
-			uniform mat4 matViewProj;
-
-			in vec3 bs_position;
-			out vec3 worldPos;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 0) out vec3 worldPos;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
 			};
+		
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matViewProj;
+			};
 			
 			void main()
 			{
@@ -191,17 +123,20 @@ Technique =
 		
 		Fragment =
 		{
-			uniform vec4 worldCameraPos;
-			uniform float gridSpacing;
-			uniform float gridBorderWidth;
-			uniform vec4 gridColor;
-			uniform float gridFadeOutStart;
-			uniform float gridFadeOutEnd;
-			uniform vec3 gridPlaneNormal; // Must be one of the basis vectors
-			
-			in vec3 worldPos;
-			out vec4 fragColor;
-
+			layout(location = 0) in vec3 worldPos;
+			layout(location = 0) out vec4 fragColor;
+		
+			layout(binding = 1) uniform FragUBO
+			{
+				vec4 worldCameraPos;
+				float gridSpacing;
+				float gridBorderWidth;
+				vec4 gridColor;
+				float gridFadeOutStart;
+				float gridFadeOutEnd;
+				vec3 gridPlaneNormal; // Must be one of the basis vectors
+			};
+		
 			vec3 sampleGrid(vec3 position)
 			{
 				vec3 count = round(position / vec3(gridSpacing, gridSpacing, gridSpacing));

+ 17 - 56
Data/Raw/Editor/Shaders/TextGizmo.bsl

@@ -53,50 +53,6 @@ Technique =
 	};
 };	
 
-Technique =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Target = 
-		{
-			Blend = true;
-			Color = { SRCA, SRCIA, ADD };
-		};
-		
-		DepthWrite = false;
-		
-		Vertex =
-		{
-			float4x4 matViewProj;
-
-			void main(
-				in float3 inPos : POSITION,
-				in float4 color : COLOR0,
-				in float2 uv : TEXCOORD0,
-				out float4 oPosition : POSITION,
-				out float4 oColor : COLOR0,
-				out float2 oUv : TEXCOORD0)
-			{
-				oPosition = mul(matViewProj, float4(inPos.xyz, 1));
-				oColor = color;
-				oUv = uv;
-			}		
-		};
-		
-		Fragment =
-		{
-			sampler2D mainTexture;
-
-			float4 main(float2 uv : TEXCOORD0, float4 color : COLOR0) : COLOR0
-			{
-				return float4(color.rgb, tex2D(mainTexture, uv).r * color.a);
-			}		
-		};
-	};	
-};	
-
 Technique =
 {
 	Language = "GLSL";
@@ -113,17 +69,21 @@ Technique =
 		
 		Vertex =
 		{
-			uniform mat4 matViewProj;
-
-			in vec3 bs_position;
-			in vec4 bs_color0;
-			in vec2 bs_texcoord0;
-			out vec4 color0;
-			out vec2 texcoord0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec4 bs_color0;
+			layout(location = 2) in vec2 bs_texcoord0;
+			
+			layout(location = 0) out vec4 color0;
+			layout(location = 1) out vec2 texcoord0;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
+			};		
+		
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matViewProj;
 			};
 			
 			void main()
@@ -136,12 +96,13 @@ Technique =
 		
 		Fragment =
 		{
-			uniform sampler2D mainTexture;
-
-			in vec4 color0;
-			in vec2 texcoord0;
-			out vec4 fragColor;
+			layout(location = 0) in vec4 color0;
+			layout(location = 1) in vec2 texcoord0;
+			
+			layout(location = 0) out vec4 fragColor;
 
+			layout(binding = 1) uniform sampler2D mainTexture;
+			
 			void main()
 			{
 				fragColor = vec4(color0.rgb, texture2D(mainTexture, texcoord0.st).r * color0.a);

+ 10 - 40
Data/Raw/Editor/Shaders/WireGizmo.bsl

@@ -36,39 +36,6 @@ Technique =
 	};
 };
 
-Technique =
-{
-	Language = "HLSL9";
-	
-	Pass =
-	{
-		Fill = WIRE;
-	
-		Vertex =
-		{
-			float4x4 matViewProj;
-
-			void main(
-				in float3 inPos : POSITION,	
-				in float4 inColor : COLOR0,	
-				out float4 oPosition : POSITION,
-				out float4 oColor : COLOR0)
-			{
-				oPosition = mul(matViewProj, float4(inPos.xyz, 1));
-				oColor = inColor;
-			}
-		};
-		
-		Fragment =
-		{
-			float4 main(float4 color : COLOR0) : COLOR0
-			{
-				return color;
-			}
-		};
-	};
-};
-
 Technique =
 {
 	Language = "GLSL";
@@ -79,15 +46,18 @@ Technique =
 	
 		Vertex =
 		{
-			uniform mat4 matViewProj;
-
-			in vec3 bs_position;
-			in vec4 bs_color0;
-			out vec4 color0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec4 bs_color0;
+			layout(location = 0) out vec4 color0;
 
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
+			};		
+		
+			layout(binding = 0) uniform VertUBO
+			{
+				mat4 matViewProj;
 			};
 			
 			void main()
@@ -99,8 +69,8 @@ Technique =
 		
 		Fragment =
 		{
-			in vec4 color0;
-			out vec4 fragColor;
+			layout(location = 0) in vec4 color0;
+			layout(location = 0) out vec4 fragColor;
 
 			void main()
 			{

+ 4 - 4
Data/Raw/Engine/Includes/DeferredLightPass.bslinc

@@ -197,7 +197,7 @@ Technique
 			#define PI 3.1415926
 			#define HALF_PI 1.5707963
 			
-			layout(std140) uniform PerLight
+			layout(binding = 1, std140) uniform PerLight
 			{
 				// x, y, z - World position of the lightData
 				// w - Type type - Directional = 0, Point = >0, Spot = >0.5
@@ -310,9 +310,9 @@ Technique
 		
 		Fragment = 
 		{
-			uniform sampler2D gGBufferATex;
-			uniform sampler2D gGBufferBTex;
-			uniform sampler2D gDepthBufferTex;
+			layout(binding = 2) uniform sampler2D gGBufferATex;
+			layout(binding = 3) uniform sampler2D gGBufferBTex;
+			layout(binding = 4) uniform sampler2D gDepthBufferTex;
 			
 			GBufferData getGBufferData(vec2 uv)
 			{

+ 7 - 7
Data/Raw/Engine/Includes/DeferredPointLightPass.bslinc

@@ -149,11 +149,11 @@ Technique
 	
 		Vertex =
 		{
-			varying vec4 position;
-			varying vec4 screenPos;
-			
-			in vec3 bs_position;
+			layout(location = 0) in vec3 bs_position;
 			in int gl_VertexID;
+		
+			layout(location = 0) out vec4 position;
+			layout(location = 1) out vec4 screenPos;
 			
 			out gl_PerVertex
 			{
@@ -220,10 +220,10 @@ Technique
 		
 		Fragment = 
 		{
-			in vec4 position;
-			in vec4 screenPos;
+			layout(location = 0) in vec4 position;
+			layout(location = 1) in vec4 screenPos;
 		
-			out vec4 fragColor;
+			layout(location = 0) out vec4 fragColor;
 		
 			void main()
 			{

+ 16 - 19
Data/Raw/Engine/Includes/NormalVertexInput.bslinc

@@ -112,36 +112,33 @@ Technique
 	
 	Pass =
 	{
-		Common = 
-		{
-			varying vec2 uv0;
-			varying vec3 tangentToWorldZ;
-			varying vec4 tangentToWorldX;	
-		};
-	
 		Vertex =
 		{			
-			in vec3 bs_position;
-			in vec3 bs_normal;
-			in vec4 bs_tangent;
-			in vec2 bs_texcoord0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec3 bs_normal;
+			layout(location = 2) in vec4 bs_tangent;
+			layout(location = 3) in vec2 bs_texcoord0;
 		
 			#ifdef USE_BLEND_SHAPES
-				in vec3 bs_position1;
-				in vec4 bs_normal1;
+				layout(location = 4) in vec3 bs_position1;
+				layout(location = 5) in vec4 bs_normal1;
 			#endif
 		
-			struct VertexIntermediate
-			{
-				vec3 worldNormal;
-				vec4 worldTangent;
-			};
+			layout(location = 0) out vec2 uv0;
+			layout(location = 1) out vec3 tangentToWorldZ;
+			layout(location = 2) out vec4 tangentToWorldX;	
 		
 			out gl_PerVertex
 			{
 				vec4 gl_Position;
 			};
-							
+		
+			struct VertexIntermediate
+			{
+				vec3 worldNormal;
+				vec4 worldTangent;
+			};
+					
 			void getTangentToLocal(vec3 normal, vec3 tangent, float tangentSign, out mat3 tangentToLocal)
 			{
 				vec3 bitangent = cross(normal, tangent) * tangentSign;

+ 3 - 3
Data/Raw/Engine/Includes/PPBase.bslinc

@@ -48,12 +48,12 @@ Technique : base("PPBase") =
 	
 		Vertex =
 		{
-			in vec2 bs_position;
-			in vec2 bs_texcoord0;
+			layout(location = 0) in vec2 bs_position;
+			layout(location = 1) in vec2 bs_texcoord0;
 			
 			out VStoFS
 			{
-				vec2 uv0;
+				layout(location = 0) vec2 uv0;
 			} VSOutput;
 			
 			out gl_PerVertex

+ 1 - 1
Data/Raw/Engine/Includes/PPWhiteBalance.bslinc

@@ -382,7 +382,7 @@ Technique : base("PPWhiteBalance") =
 				result = invConeResponse * (adaptation * coneResponse);
 			}
 			
-			uniform WhiteBalanceInput
+			layout(binding = 0) uniform WhiteBalanceInput
 			{
 				float gWhiteTemp;
 				float gWhiteOffset;

+ 1 - 1
Data/Raw/Engine/Includes/PerCameraData.bslinc

@@ -59,7 +59,7 @@ Technique : base("PerCameraData") =
 	{
 		Common = 
 		{
-			layout(std140) uniform PerCamera
+			layout(binding = 0, std140) uniform PerCamera
 			{
 				vec3 gViewDir;
 				vec3 gViewOrigin;

+ 1 - 1
Data/Raw/Engine/Includes/PerObjectData.bslinc

@@ -42,7 +42,7 @@ Technique : base("PerObjectData") =
 	{
 		Common = 
 		{
-			layout(std140) uniform PerObject
+			layout(binding = 2, std140) uniform PerObject
 			{
 				mat4 gMatWorldViewProj;
 				mat4 gMatWorld;

+ 12 - 8
Data/Raw/Engine/Includes/ResolveCommon.bslinc

@@ -89,9 +89,10 @@ Technique =
 	
 		Vertex =
 		{
-			in vec2 bs_position;
-			in vec2 bs_texcoord0;
-			out vec2 texcoord0;
+			layout(location = 0) in vec2 bs_position;
+			layout(location = 1) in vec2 bs_texcoord0;
+			
+			layout(location = 0) out vec2 texcoord0;
 		
 			out gl_PerVertex
 			{
@@ -107,13 +108,16 @@ Technique =
 		
 		Fragment = 
 		{
-			in vec2 texcoord0;
-			out vec4 fragColor;
+			layout(location = 0) in vec2 texcoord0;
+			layout(location = 1) out vec4 fragColor;
 		
 			#ifdef ENABLE_MSAA
 		
-			uniform int gNumSamples;
-			uniform sampler2DMS gSource;
+			layout(binding = 0) uniform FragUBO {
+				int gNumSamples;
+			};
+			
+			layout(binding = 1) uniform sampler2DMS gSource;
 		
 			void main()
 			{
@@ -129,7 +133,7 @@ Technique =
 			
 			#else
 			
-			uniform sampler2D gSource;
+			layout(binding = 0) uniform sampler2D gSource;
 		
 			void main()
 			{

+ 13 - 16
Data/Raw/Engine/Includes/SkinnedVertexInput.bslinc

@@ -147,29 +147,26 @@ Technique
 	
 	Pass =
 	{
-		Common = 
-		{
-			varying vec2 uv0;
-			varying vec3 tangentToWorldZ;
-			varying vec4 tangentToWorldX;	
-		};
-	
 		Vertex =
 		{			
-			in vec3 bs_position;
-			in vec3 bs_normal;
-			in vec4 bs_tangent;
-			in vec2 bs_texcoord0;
+			layout(location = 0) in vec3 bs_position;
+			layout(location = 1) in vec3 bs_normal;
+			layout(location = 2) in vec4 bs_tangent;
+			layout(location = 3) in vec2 bs_texcoord0;
 		
-			in ivec4 bs_blendindices;
-			in vec4 bs_blendweights;
+			layout(location = 4) in ivec4 bs_blendindices;
+			layout(location = 5) in vec4 bs_blendweights;
 				
 			#ifdef USE_BLEND_SHAPES
-				in vec3 bs_position1;
-				in vec4 bs_normal1;
+				layout(location = 6) in vec3 bs_position1;
+				layout(location = 7) in vec4 bs_normal1;
 			#endif
 			
-			uniform samplerBuffer boneMatrices;
+			layout(location = 0) out vec2 uv0;
+			layout(location = 1) out vec3 tangentToWorldZ;
+			layout(location = 2) out vec4 tangentToWorldX;	
+			
+			layout(binding = 3) uniform samplerBuffer boneMatrices;
 		
 			struct VertexIntermediate
 			{

+ 5 - 5
Data/Raw/Engine/Includes/VolumeRenderBase.bslinc

@@ -84,10 +84,10 @@ Technique : base("VolumeRenderBase") =
 	
 		Vertex =
 		{
-			in vec2 bs_position;
-			in vec2 bs_texcoord0;
+			layout(location = 0) in vec2 bs_position;
+			layout(location = 1) in vec2 bs_texcoord0;
 			
-			out VStoGS
+			layout(location = 0) out VStoGS
 			{
 				vec2 uv0;
 				flat int layerIdx;
@@ -111,7 +111,7 @@ Technique : base("VolumeRenderBase") =
 			layout (triangles) in;
 			layout (triangle_strip, max_vertices=3) out;
 		
-			in VStoGS
+			layout(location = 0) in VStoGS
 			{
 				vec2 uv0;
 				flat int layerIdx;
@@ -119,7 +119,7 @@ Technique : base("VolumeRenderBase") =
 		
 			out GStoFS
 			{
-				vec2 uv0;
+				layout(location = 0) vec2 uv0;
 			} GSOutput;
 		
 			in gl_PerVertex 

+ 5 - 1
Data/Raw/Engine/Shaders/Default.bsl

@@ -34,7 +34,11 @@ Technique : base("Surface") =
 	{
 		Fragment =
 		{
-			out vec4[3] fragColor;
+			layout(location = 0) in vec2 uv0;
+			layout(location = 1) in vec3 tangentToWorldZ;
+			layout(location = 2) in vec4 tangentToWorldX;	
+		
+			layout(location = 0) out vec4[3] fragColor;
 		
 			void main()
 			{

+ 11 - 10
Data/Raw/Engine/Shaders/DeferredDirectionalLightPass.bsl

@@ -69,17 +69,14 @@ Technique
 	{
 		DepthRead = false;
 	
-		Common = 
-		{
-			varying vec4 position;
-			varying vec2 uv0;
-			varying vec3 screenDir;
-		};
-	
 		Vertex =
 		{
-			in vec2 bs_position;
-			in vec2 bs_texcoord0;
+			layout(location = 0) in vec2 bs_position;
+			layout(location = 1) in vec2 bs_texcoord0;
+		
+			layout(location = 0) out vec4 position;
+			layout(location = 1) out vec2 uv0;
+			layout(location = 2) out vec3 screenDir;
 		
 			out gl_PerVertex
 			{
@@ -98,7 +95,11 @@ Technique
 		
 		Fragment = 
 		{
-			out vec4 fragColor;
+			layout(location = 0) in vec4 position;
+			layout(location = 1) in vec2 uv0;
+			layout(location = 2) in vec3 screenDir;
+		
+			layout(location = 0) out vec4 fragColor;
 		
 			void main()
 			{

+ 7 - 3
Data/Raw/Engine/Shaders/Diffuse.bsl

@@ -52,9 +52,13 @@ Technique : base("Surface") =
 	{
 		Fragment =
 		{
-			uniform sampler2D gAlbedoTex;
-			uniform sampler2D gNormalTex;
-			
+			layout(location = 0) in vec2 uv0;
+			layout(location = 1) in vec3 tangentToWorldZ;
+			layout(location = 2) in vec4 tangentToWorldX;			
+		
+			layout(binding = 4) uniform sampler2D gAlbedoTex;
+			layout(binding = 5) uniform sampler2D gNormalTex;
+
 			void main()
 			{
 				vec3 normal = normalize(texture2D(gNormalTex, uv0).xyz * 2.0f - vec3(1, 1, 1));

+ 4 - 3
Data/Raw/Engine/Shaders/PPCreateTonemapLUT.bsl

@@ -139,7 +139,7 @@ Technique
 	
 		Fragment =
 		{
-			uniform Input
+			layout(binding = 1) uniform Input
 			{
 				// [0]: x - shoulder strength, y - linear strength, z - linear angle, w - toe strength
 				// [1]: x - toe numerator, y - toe denominator, z - linear white point, w - unused
@@ -210,12 +210,13 @@ Technique
 			
 			in GStoFS
 			{
-				vec2 uv0;
+				layout(location = 0) vec2 uv0;
 			} input;
 			
-			out vec4 fragColor;
 			in int gl_Layer;
 			
+			layout(location = 0) out vec4 fragColor;
+			
 			void main()
 			{
 				// Constants

+ 6 - 5
Data/Raw/Engine/Shaders/PPDownsample.bsl

@@ -61,17 +61,18 @@ Technique : inherits("PPBase") =
 		{
 			in VStoFS
 			{
-				vec2 uv0;
+				layout(location = 0) vec2 uv0;
 			} input;		
 		
-			uniform Input
+			layout(location = 0) out vec4 fragColor;
+		
+			layout(binding = 0) uniform Input
 			{
 				vec2 gInvTexSize;
 			};
 			
-			uniform sampler2D gInputTex;
-			out vec4 fragColor;
-
+			layout(location = 1) uniform sampler2D gInputTex;
+			
 			void main()
 			{
 				vec2 UV[4];

+ 3 - 3
Data/Raw/Engine/Shaders/PPEyeAdaptHistogram.bsl

@@ -130,7 +130,7 @@ Technique =
 		{	
 			layout (local_size_x = THREADGROUP_SIZE_X, local_size_y = THREADGROUP_SIZE_Y) in;
 		
-			uniform Input
+			layout(binding = 0) uniform Input
 			{
 				// xy - offset, zw - size
 				uvec4 gPixelOffsetAndSize;
@@ -140,8 +140,8 @@ Technique =
 				uvec2 gThreadGroupCount;
 			};
 		
-			uniform sampler2D gSceneColorTex;
-			layout (rgba16f) uniform image2D gOutputTex;
+			layout(binding = 1) uniform sampler2D gSceneColorTex;
+			layout(binding = 2, rgba16f) uniform image2D gOutputTex;
 			
 			// Keep elements in this order as it ensures coalesced memory operations for non-random ops
 			shared float sharedData[NUM_BUCKETS][THREADGROUP_SIZE_X][THREADGROUP_SIZE_Y];

+ 6 - 6
Data/Raw/Engine/Shaders/PPEyeAdaptHistogramReduce.bsl

@@ -61,18 +61,18 @@ Technique : inherits("PPBase") =
 		{
 			in VStoFS
 			{
-				vec2 uv0;
+				layout(location = 0) vec2 uv0;
 			} input;
 		
-			uniform Input
+			layout(location = 0) out vec4 fragColor;
+			
+			layout(binding = 0) uniform Input
 			{
 				uint gThreadGroupCount;
 			};
 		
-			uniform sampler2D gHistogramTex;
-			uniform sampler2D gEyeAdaptationTex;
-
-			out vec4 fragColor;
+			layout(binding = 1) uniform sampler2D gHistogramTex;
+			layout(binding = 2) uniform sampler2D gEyeAdaptationTex;
 			
 			void main()
 			{

+ 4 - 4
Data/Raw/Engine/Shaders/PPEyeAdaptation.bsl

@@ -182,7 +182,7 @@ Technique : inherits("PPBase") =
 		{
 			#define NUM_BUCKETS (THREADGROUP_SIZE_X * THREADGROUP_SIZE_Y)
 		
-			uniform Input
+			layout(binding = 0) uniform Input
 			{
 				// [0]: x - histogram scale, y - histogram offset, z - histogram percent low, w - histogram percent high
 				// [1]: x - min adaptation, y - max adaptation, z - adaptation speed up, w - adaptation speed down
@@ -190,7 +190,7 @@ Technique : inherits("PPBase") =
 				vec4 gEyeAdaptationParams[3];
 			};
 			
-			uniform sampler2D gHistogramTex;
+			layout(binding = 1) uniform sampler2D gHistogramTex;
 			
 			/** 
 			 * Returns luminance of the histogram bucket.
@@ -330,10 +330,10 @@ Technique : inherits("PPBase") =
 			
 			in VStoFS
 			{
-				vec2 uv0;
+				layout(location = 0) vec2 uv0;
 			} VSInput;
 			
-			out vec4 fragColor;
+			layout(location = 0) out vec4 fragColor;
 			
 			void main()
 			{

+ 12 - 12
Data/Raw/Engine/Shaders/PPTonemapping.bsl

@@ -111,16 +111,16 @@ Technique : inherits("PPTonemapCommon") =
 	
 		Vertex =
 		{
-			in vec2 bs_position;
-			in vec2 bs_texcoord0;
+			layout(location = 0) in vec2 bs_position;
+			layout(location = 1) in vec2 bs_texcoord0;
 			
 			out VStoFS
 			{
-				vec2 uv0;
-				float exposureScale;
+				layout(location = 0) vec2 uv0;
+				layout(location = 1) float exposureScale;
 			} VSOutput;
 			
-			uniform sampler2D gEyeAdaptationTex;
+			layout(binding = 0) uniform sampler2D gEyeAdaptationTex;
 			
 			out gl_PerVertex
 			{
@@ -139,21 +139,21 @@ Technique : inherits("PPTonemapCommon") =
 		{
 			in VStoFS
 			{
-				vec2 uv0;
-				float exposureScale;
+				layout(location = 0) vec2 uv0;
+				layout(location = 1) float exposureScale;
 			} FSInput;
 		
-			uniform sampler2D gInputTex;
-			uniform sampler3D gColorLUT;
+			layout(location = 0) out vec4 fragColor;
+		
+			layout(binding = 1) uniform sampler2D gInputTex;
+			layout(binding = 2) uniform sampler3D gColorLUT;
 			
-			uniform Input
+			layout(binding = 3) uniform Input
 			{
 				float gRawGamma;
 				float gManualExposureScale;
 			};
 
-			out vec4 fragColor;
-			
 			void ColorLookupTable(vec3 linearColor, out vec3 result)
 			{
 				vec3 logColor;

+ 12 - 6
Data/Raw/Engine/Shaders/SpriteLine.bsl

@@ -89,11 +89,14 @@ Technique =
 		
 		Vertex =
 		{
-			uniform float invViewportWidth;
-			uniform float invViewportHeight;
-			uniform mat4 worldTransform;
-
-			in vec2 bs_position;
+			layout (binding = 0) uniform VertUBO
+			{
+				float invViewportWidth;
+				float invViewportHeight;
+				mat4 worldTransform;
+			};
+		
+			layout (location = 0) in vec2 bs_position;
 
 			out gl_PerVertex
 			{
@@ -113,7 +116,10 @@ Technique =
 		
 		Fragment =
 		{
-			uniform vec4 tint;
+			layout (binding = 1) uniform FragUBO
+			{
+				vec4 tint;
+			};
 			
 			out vec4 fragColor;
 

+ 1 - 1
Source/BansheeGLRenderAPI/Source/GLSL/src/BsGLSLGpuProgram.cpp

@@ -86,7 +86,7 @@ namespace bs
 
 	void GLSLGpuProgramCore::initialize()
 	{
-		static const char GLSL_VERSION_LINE[] = "#version 430\n";
+		static const char GLSL_VERSION_LINE[] = "#version 440\n";
 
 		if (!isSupported())
 		{