Browse Source

Feature: Added 'alias' modified to BSL
- Allows the same sampler state name to be used across all render API backends

BearishSun 8 years ago
parent
commit
af7e3c0606

+ 0 - 4
Data/Raw/Engine/DataList.json

@@ -362,10 +362,6 @@
             "Path": "DebugDraw.bsl",
             "Path": "DebugDraw.bsl",
             "UUID": "6d3eb44e-b7e9-4c5a-8f8c-e5695607ca13"
             "UUID": "6d3eb44e-b7e9-4c5a-8f8c-e5695607ca13"
         },
         },
-        {
-            "Path": "ClearStencilBits.bsl",
-            "UUID": "e123138f-af24-422f-9301-f71113fcd282"
-        },
         {
         {
             "Path": "PPEncodeDepth.bsl",
             "Path": "PPEncodeDepth.bsl",
             "UUID": "8bbf989a-9f8d-4864-8332-7f8c499685ba"
             "UUID": "8bbf989a-9f8d-4864-8332-7f8c499685ba"

+ 1 - 0
Data/Raw/Engine/Includes/GBufferInput.bslinc

@@ -11,6 +11,7 @@ mixin GBufferInput
 		SamplerState gGBufferASamp;
 		SamplerState gGBufferASamp;
 		SamplerState gGBufferBSamp;
 		SamplerState gGBufferBSamp;
 		SamplerState gGBufferCSamp;
 		SamplerState gGBufferCSamp;
+		[alias(gDepthBufferTex)]
 		SamplerState gDepthBufferSamp;
 		SamplerState gDepthBufferSamp;
 		
 		
 		#ifndef MSAA_COUNT
 		#ifndef MSAA_COUNT

+ 1 - 0
Data/Raw/Engine/Includes/SpriteImage.bslinc

@@ -32,6 +32,7 @@ mixin SpriteImage
 			oUv = uv;
 			oUv = uv;
 		}
 		}
 
 
+		[alias(gMainTexture)]
 		SamplerState gMainTexSamp;
 		SamplerState gMainTexSamp;
 		Texture2D gMainTexture;
 		Texture2D gMainTexture;
 		
 		

+ 0 - 43
Data/Raw/Engine/Shaders/ClearStencilBits.bsl

@@ -1,43 +0,0 @@
-technique ClearStencilBits
-{
-	depth
-	{
-		read = false;
-		write = false;
-	};
-	
-	stencil
-	{
-		enabled = true;
-		front = { zero, zero, zero, always };
-		back = { zero, zero, zero, always };
-		writemask = 0x7F;
-	};	
-
-	code
-	{
-		struct VStoFS
-		{
-			float4 position : SV_Position;
-		};
-
-		struct VertexInput
-		{
-			float2 screenPos : POSITION;
-			float2 uv0 : TEXCOORD0;
-		};
-		
-		VStoFS vsmain(VertexInput input)
-		{
-			VStoFS output;
-			output.position = float4(input.screenPos, 0, 1);
-
-			return output;
-		}			
-
-		uint4 fsmain(VStoFS input) : SV_Target0
-		{
-			return uint4(gClearValue, gClearValue, gClearValue, gClearValue);
-		}
-	};
-};

+ 3 - 2
Data/Raw/Engine/Shaders/SpriteText.bsl

@@ -42,8 +42,9 @@ technique SpriteText
 			oUv = uv;
 			oUv = uv;
 		}
 		}
 
 
-		SamplerState gMainTexSamp : register(s0);
-		Texture2D gMainTexture : register(t0);
+		[alias(gMainTexture)]
+		SamplerState gMainTexSamp;
+		Texture2D gMainTexture;
 
 
 		float4 fsmain(in float4 inPos : SV_Position, float2 uv : TEXCOORD0) : SV_Target
 		float4 fsmain(in float4 inPos : SV_Position, float2 uv : TEXCOORD0) : SV_Target
 		{
 		{

+ 22 - 5
Source/BansheeSL/BsSLFXCompiler.cpp

@@ -435,12 +435,29 @@ namespace bs
 			case Xsc::Reflection::UniformType::Sampler: 
 			case Xsc::Reflection::UniformType::Sampler: 
 			{
 			{
 				auto findIter = reflData.samplerStates.find(entry.ident);
 				auto findIter = reflData.samplerStates.find(entry.ident);
-				if (findIter == reflData.samplerStates.end() || !findIter->second.isNonDefault)
-					desc.addParameter(ident, ident, GPOT_SAMPLER2D);
+				if (findIter != reflData.samplerStates.end())
+				{
+					String alias = findIter->second.alias.c_str();
+
+					if(findIter->second.isNonDefault)
+					{
+						SPtr<SamplerState> defaultVal = parseSamplerState(findIter->second);
+						desc.addParameter(ident, ident, GPOT_SAMPLER2D, defaultVal);
+
+						if (!alias.empty())
+							desc.addParameter(ident, alias, GPOT_SAMPLER2D, defaultVal);
+					}
+					else
+					{
+						desc.addParameter(ident, ident, GPOT_SAMPLER2D);
+
+						if (!alias.empty())
+							desc.addParameter(ident, alias, GPOT_SAMPLER2D);
+					}
+				}
 				else
 				else
 				{
 				{
-					SPtr<SamplerState> defaultVal = parseSamplerState(findIter->second);
-					desc.addParameter(ident, ident, GPOT_SAMPLER2D, defaultVal);
+					desc.addParameter(ident, ident, GPOT_SAMPLER2D);
 				}
 				}
 				break;
 				break;
 			}
 			}
@@ -1592,7 +1609,7 @@ namespace bs
 				PassData& vkslPassData = vkslTechnique.passes[j];
 				PassData& vkslPassData = vkslTechnique.passes[j];
 
 
 				// Clean non-standard HLSL 
 				// Clean non-standard HLSL 
-				static const std::regex regex("\\[\\s*layout\\s*\\(.*\\)\\s*\\]|\\[\\s*internal\\s*\\]|\\[\\s*color\\s*\\]");
+				static const std::regex regex("\\[\\s*layout\\s*\\(.*\\)\\s*\\]|\\[\\s*internal\\s*\\]|\\[\\s*color\\s*\\]|\\[\\s*alias\\s*\\(.*\\)\\s*\\]");
 				hlslPassData.code = regex_replace(hlslPassData.code, regex, "");
 				hlslPassData.code = regex_replace(hlslPassData.code, regex, "");
 
 
 				// Find valid entry points and parameters
 				// Find valid entry points and parameters

+ 0 - 15
Source/RenderBeast/BsPostProcessing.cpp

@@ -1742,21 +1742,6 @@ namespace bs { namespace ct
 			return get(VAR_NoMSAA);
 			return get(VAR_NoMSAA);
 	}
 	}
 
 
-	ClearStencilBitsMat::ClearStencilBitsMat()
-	{ }
-
-	void ClearStencilBitsMat::_initVariations(ShaderVariations& variations)
-	{
-		// Do nothing
-	}
-
-	void ClearStencilBitsMat::execute()
-	{
-		gRendererUtility().setPass(mMaterial);
-		gRendererUtility().setPassParams(mParamsSet);
-		gRendererUtility().drawScreenQuad();
-	}
-
 	EncodeDepthParamDef gEncodeDepthParamDef;
 	EncodeDepthParamDef gEncodeDepthParamDef;
 
 
 	EncodeDepthMat::EncodeDepthMat()
 	EncodeDepthMat::EncodeDepthMat()

+ 0 - 12
Source/RenderBeast/BsPostProcessing.h

@@ -782,18 +782,6 @@ namespace bs { namespace ct
 		static ShaderVariation VAR_NoMSAA;
 		static ShaderVariation VAR_NoMSAA;
 	};
 	};
 
 
-	/** Shader that clears only the unreserved portion of the stencil buffer. */
-	class ClearStencilBitsMat : public RendererMaterial<ClearStencilBitsMat>
-	{
-		RMAT_DEF("ClearStencilBits.bsl");
-
-	public:
-		ClearStencilBitsMat();
-
-		/** Executes the material on the currently bound render target. */
-		void execute();
-	};
-
 	BS_PARAM_BLOCK_BEGIN(EncodeDepthParamDef)
 	BS_PARAM_BLOCK_BEGIN(EncodeDepthParamDef)
 		BS_PARAM_BLOCK_ENTRY(float, gNear)
 		BS_PARAM_BLOCK_ENTRY(float, gNear)
 		BS_PARAM_BLOCK_ENTRY(float, gFar)
 		BS_PARAM_BLOCK_ENTRY(float, gFar)