Browse Source

Cleanup ShaderParameter related code.

Lasse Öörni 9 years ago
parent
commit
6c77b75813

+ 0 - 2
Source/Urho3D/Graphics/Direct3D11/D3D11ShaderVariation.cpp

@@ -204,7 +204,6 @@ bool ShaderVariation::LoadByteCode(const String& binaryShaderName)
         parameter.buffer_ = buffer;
         parameter.offset_ = offset;
         parameter.size_ = size;
-        parameter.bufferPtr_ = 0;
         parameters_[StringHash(name)] = parameter;
     }
 
@@ -406,7 +405,6 @@ void ShaderVariation::ParseParameters(unsigned char* bufData, unsigned bufSize)
                 parameter.buffer_ = cbRegister;
                 parameter.offset_ = varDesc.StartOffset;
                 parameter.size_ = varDesc.Size;
-                parameter.bufferPtr_ = 0;
                 parameters_[varName] = parameter;
             }
         }

+ 0 - 2
Source/Urho3D/Graphics/Direct3D9/D3D9ShaderVariation.cpp

@@ -204,7 +204,6 @@ bool ShaderVariation::LoadByteCode(const String& binaryShaderName)
         parameter.name_ = name;
         parameter.register_ = reg;
         parameter.regCount_ = regCount;
-        parameter.bufferPtr_ = 0;
         parameters_[StringHash(name)] = parameter;
     }
 
@@ -361,7 +360,6 @@ void ShaderVariation::ParseParameters(unsigned char* bufData, unsigned bufSize)
             parameter.name_ = name;
             parameter.register_ = reg;
             parameter.regCount_ = regCount;
-            parameter.bufferPtr_ = 0;
             parameters_[StringHash(name)] = parameter;
         }
     }

+ 8 - 8
Source/Urho3D/Graphics/OpenGL/OGLGraphics.cpp

@@ -1117,7 +1117,7 @@ void Graphics::SetShaderParameter(StringHash param, const float* data, unsigned
                 ConstantBuffer* buffer = info->bufferPtr_;
                 if (!buffer->IsDirty())
                     dirtyConstantBuffers_.Push(buffer);
-                buffer->SetParameter((unsigned)info->location_, (unsigned)(count * sizeof(float)), data);
+                buffer->SetParameter(info->offset_, (unsigned)(count * sizeof(float)), data);
                 return;
             }
 
@@ -1165,7 +1165,7 @@ void Graphics::SetShaderParameter(StringHash param, float value)
                 ConstantBuffer* buffer = info->bufferPtr_;
                 if (!buffer->IsDirty())
                     dirtyConstantBuffers_.Push(buffer);
-                buffer->SetParameter((unsigned)info->location_, sizeof(float), &value);
+                buffer->SetParameter(info->offset_, sizeof(float), &value);
                 return;
             }
 
@@ -1191,7 +1191,7 @@ void Graphics::SetShaderParameter(StringHash param, const Vector2& vector)
                 ConstantBuffer* buffer = info->bufferPtr_;
                 if (!buffer->IsDirty())
                     dirtyConstantBuffers_.Push(buffer);
-                buffer->SetParameter((unsigned)info->location_, sizeof(Vector2), &vector);
+                buffer->SetParameter(info->offset_, sizeof(Vector2), &vector);
                 return;
             }
 
@@ -1224,7 +1224,7 @@ void Graphics::SetShaderParameter(StringHash param, const Matrix3& matrix)
                 ConstantBuffer* buffer = info->bufferPtr_;
                 if (!buffer->IsDirty())
                     dirtyConstantBuffers_.Push(buffer);
-                buffer->SetVector3ArrayParameter((unsigned)info->location_, 3, &matrix);
+                buffer->SetVector3ArrayParameter(info->offset_, 3, &matrix);
                 return;
             }
 
@@ -1245,7 +1245,7 @@ void Graphics::SetShaderParameter(StringHash param, const Vector3& vector)
                 ConstantBuffer* buffer = info->bufferPtr_;
                 if (!buffer->IsDirty())
                     dirtyConstantBuffers_.Push(buffer);
-                buffer->SetParameter((unsigned)info->location_, sizeof(Vector3), &vector);
+                buffer->SetParameter(info->offset_, sizeof(Vector3), &vector);
                 return;
             }
 
@@ -1282,7 +1282,7 @@ void Graphics::SetShaderParameter(StringHash param, const Matrix4& matrix)
                 ConstantBuffer* buffer = info->bufferPtr_;
                 if (!buffer->IsDirty())
                     dirtyConstantBuffers_.Push(buffer);
-                buffer->SetParameter((unsigned)info->location_, sizeof(Matrix4), &matrix);
+                buffer->SetParameter(info->offset_, sizeof(Matrix4), &matrix);
                 return;
             }
 
@@ -1303,7 +1303,7 @@ void Graphics::SetShaderParameter(StringHash param, const Vector4& vector)
                 ConstantBuffer* buffer = info->bufferPtr_;
                 if (!buffer->IsDirty())
                     dirtyConstantBuffers_.Push(buffer);
-                buffer->SetParameter((unsigned)info->location_, sizeof(Vector4), &vector);
+                buffer->SetParameter(info->offset_, sizeof(Vector4), &vector);
                 return;
             }
 
@@ -1359,7 +1359,7 @@ void Graphics::SetShaderParameter(StringHash param, const Matrix3x4& matrix)
                 ConstantBuffer* buffer = info->bufferPtr_;
                 if (!buffer->IsDirty())
                     dirtyConstantBuffers_.Push(buffer);
-                buffer->SetParameter((unsigned)info->location_, sizeof(Matrix4), &fullMatrix);
+                buffer->SetParameter(info->offset_, sizeof(Matrix4), &fullMatrix);
                 return;
             }
 

+ 11 - 10
Source/Urho3D/Graphics/OpenGL/OGLShaderProgram.cpp

@@ -273,29 +273,30 @@ bool ShaderProgram::Link()
         {
             // Store constant uniform
             String paramName = name.Substring(1);
-            ShaderParameter newParam;
-            newParam.name_ = paramName;
-            newParam.glType_ = type;
-            newParam.location_ = location;
-            newParam.bufferPtr_ = 0;
+            ShaderParameter parameter;
+            parameter.name_ = paramName;
+            parameter.glType_ = type;
+            parameter.location_ = location;
+            bool store = location >= 0;
 
 #ifndef GL_ES_VERSION_2_0
             // If running OpenGL 3, the uniform may be inside a constant buffer
-            if (newParam.location_ < 0 && Graphics::GetGL3Support())
+            if (parameter.location_ < 0 && Graphics::GetGL3Support())
             {
                 int blockIndex, blockOffset;
                 glGetActiveUniformsiv(object_.name_, 1, (const GLuint*)&i, GL_UNIFORM_BLOCK_INDEX, &blockIndex);
                 glGetActiveUniformsiv(object_.name_, 1, (const GLuint*)&i, GL_UNIFORM_OFFSET, &blockOffset);
                 if (blockIndex >= 0)
                 {
-                    newParam.location_ = blockOffset;
-                    newParam.bufferPtr_ = constantBuffers_[blockToBinding[blockIndex]];
+                    parameter.offset_ = blockOffset;
+                    parameter.bufferPtr_ = constantBuffers_[blockToBinding[blockIndex]];
+                    store = true;
                 }
             }
 #endif
 
-            if (newParam.location_ >= 0)
-                shaderParameters_[StringHash(paramName)] = newParam;
+            if (store)
+                shaderParameters_[StringHash(paramName)] = parameter;
         }
         else if (location >= 0 && name[0] == 's')
         {

+ 10 - 4
Source/Urho3D/Graphics/ShaderVariation.h

@@ -37,18 +37,22 @@ class Shader;
 /// %Shader parameter definition.
 struct ShaderParameter
 {
+    /// Construct with defaults.
+    ShaderParameter() :
+        bufferPtr_(0)
+    {
+    }
+
     /// %Shader type.
     ShaderType type_;
     /// Name of the parameter.
     String name_;
-    /// Constant buffer index.
-    unsigned buffer_;
 
     union
     {
         /// Offset in constant buffer.
         unsigned offset_;
-        /// OpenGL Uniform location.
+        /// OpenGL uniform location.
         int location_;
         /// Direct3D9 register index.
         unsigned register_;
@@ -56,7 +60,7 @@ struct ShaderParameter
 
     union
     {
-        /// Parameter size.
+        /// Parameter size. Used only on Direct3D11 to calculate constant buffer size.
         unsigned size_;
         /// Parameter OpenGL type.
         unsigned glType_;
@@ -64,6 +68,8 @@ struct ShaderParameter
         unsigned regCount_;
     };
 
+    /// Constant buffer index. Only used on Direct3D11.
+    unsigned buffer_;
     /// Constant buffer pointer. Defined only in shader programs.
     ConstantBuffer* bufferPtr_;
 };