Fix for the remaining vertex array issues
Fixes all failures in dEQP.functional.vertex_arrays.*
In OpenGL ES 3.0, vertex attributes streams can be of a
different type from the vertex attribute in the shader.
For this reason, some conversion may be required. This
cl solves this issue by:
1) Sending the information about the vertex attribute's
type in the shader to the vertex routine.
2) Handling this information by adding conversion where
appropriate.
Change-Id: I04a5a34aea12684209e584aa5f15a3edfd57f956
Reviewed-on: https://swiftshader-review.googlesource.com/7254
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/compiler/OutputASM.cpp b/src/OpenGL/compiler/OutputASM.cpp
index 29da8e4..4cc379a 100644
--- a/src/OpenGL/compiler/OutputASM.cpp
+++ b/src/OpenGL/compiler/OutputASM.cpp
@@ -2890,12 +2890,25 @@
index = allocate(attributes, attribute);
const TType &type = attribute->getType();
int registerCount = attribute->totalRegisterCount();
+ sw::VertexShader::AttribType attribType = sw::VertexShader::ATTRIBTYPE_FLOAT;
+ switch(type.getBasicType())
+ {
+ case EbtInt:
+ attribType = sw::VertexShader::ATTRIBTYPE_INT;
+ break;
+ case EbtUInt:
+ attribType = sw::VertexShader::ATTRIBTYPE_UINT;
+ break;
+ case EbtFloat:
+ default:
+ break;
+ }
if(vertexShader && (index + registerCount) <= sw::MAX_VERTEX_INPUTS)
{
for(int i = 0; i < registerCount; i++)
{
- vertexShader->setInput(index + i, sw::Shader::Semantic(sw::Shader::USAGE_TEXCOORD, index + i));
+ vertexShader->setInput(index + i, sw::Shader::Semantic(sw::Shader::USAGE_TEXCOORD, index + i, false), attribType);
}
}