Commit 70085ba5 by Alexis Hetu Committed by Alexis Hétu

Added vertex attribute types

Added a few types: - Half float - 2_10_10_10_INT - 2_10_10_10_UINT Related dEQP tests pass. Change-Id: I2fb04fee89c3d69367dc2e401ac53d9758add9bf Reviewed-on: https://swiftshader-review.googlesource.com/5356Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 80d6f17a
...@@ -210,6 +210,9 @@ public: ...@@ -210,6 +210,9 @@ public:
case GL_UNSIGNED_INT: return mSize * sizeof(GLuint); case GL_UNSIGNED_INT: return mSize * sizeof(GLuint);
case GL_FIXED: return mSize * sizeof(GLfixed); case GL_FIXED: return mSize * sizeof(GLfixed);
case GL_FLOAT: return mSize * sizeof(GLfloat); case GL_FLOAT: return mSize * sizeof(GLfloat);
case GL_HALF_FLOAT: return mSize * sizeof(GLhalf);
case GL_INT_2_10_10_10_REV: return sizeof(GLint);
case GL_UNSIGNED_INT_2_10_10_10_REV: return sizeof(GLuint);
default: UNREACHABLE(mType); return mSize * sizeof(GLfloat); default: UNREACHABLE(mType); return mSize * sizeof(GLfloat);
} }
} }
......
...@@ -192,6 +192,9 @@ GLenum VertexDataManager::prepareVertexData(GLint start, GLsizei count, Translat ...@@ -192,6 +192,9 @@ GLenum VertexDataManager::prepareVertexData(GLint start, GLsizei count, Translat
case GL_UNSIGNED_INT: translated[i].type = sw::STREAMTYPE_UINT; break; case GL_UNSIGNED_INT: translated[i].type = sw::STREAMTYPE_UINT; break;
case GL_FIXED: translated[i].type = sw::STREAMTYPE_FIXED; break; case GL_FIXED: translated[i].type = sw::STREAMTYPE_FIXED; break;
case GL_FLOAT: translated[i].type = sw::STREAMTYPE_FLOAT; break; case GL_FLOAT: translated[i].type = sw::STREAMTYPE_FLOAT; break;
case GL_HALF_FLOAT: translated[i].type = sw::STREAMTYPE_HALF; break;
case GL_INT_2_10_10_10_REV: translated[i].type = sw::STREAMTYPE_2_10_10_10_INT; break;
case GL_UNSIGNED_INT_2_10_10_10_REV: translated[i].type = sw::STREAMTYPE_2_10_10_10_UINT; break;
default: UNREACHABLE(attrib.mType); translated[i].type = sw::STREAMTYPE_FLOAT; break; default: UNREACHABLE(attrib.mType); translated[i].type = sw::STREAMTYPE_FLOAT; break;
} }
......
...@@ -36,6 +36,8 @@ namespace sw ...@@ -36,6 +36,8 @@ namespace sw
STREAMTYPE_UINT, STREAMTYPE_UINT,
STREAMTYPE_FIXED, // Normalization ignored (16.16 format) STREAMTYPE_FIXED, // Normalization ignored (16.16 format)
STREAMTYPE_HALF, // Normalization ignored STREAMTYPE_HALF, // Normalization ignored
STREAMTYPE_2_10_10_10_INT,
STREAMTYPE_2_10_10_10_UINT,
STREAMTYPE_LAST = STREAMTYPE_HALF STREAMTYPE_LAST = STREAMTYPE_HALF
}; };
......
...@@ -482,6 +482,50 @@ namespace sw ...@@ -482,6 +482,50 @@ namespace sw
v.x.w = *Pointer<Float>(source3); v.x.w = *Pointer<Float>(source3);
} }
break; break;
case STREAMTYPE_2_10_10_10_INT:
{
Int4 src;
src = Insert(src, *Pointer<Int>(source0), 0);
src = Insert(src, *Pointer<Int>(source1), 1);
src = Insert(src, *Pointer<Int>(source2), 2);
src = Insert(src, *Pointer<Int>(source3), 3);
v.x = Float4((src << 22) >> 22);
v.y = Float4((src << 12) >> 22);
v.z = Float4((src << 02) >> 22);
v.w = Float4(src >> 30);
if(stream.normalized)
{
v.x = Max(v.x * Float4(1.0f / 0x1FF), Float4(-1.0f));
v.y = Max(v.y * Float4(1.0f / 0x1FF), Float4(-1.0f));
v.z = Max(v.z * Float4(1.0f / 0x1FF), Float4(-1.0f));
v.w = Max(v.w, Float4(-1.0f));
}
}
break;
case STREAMTYPE_2_10_10_10_UINT:
{
Int4 src;
src = Insert(src, *Pointer<Int>(source0), 0);
src = Insert(src, *Pointer<Int>(source1), 1);
src = Insert(src, *Pointer<Int>(source2), 2);
src = Insert(src, *Pointer<Int>(source3), 3);
v.x = Float4(src & Int4(0x3FF));
v.y = Float4((src >> 10) & Int4(0x3FF));
v.z = Float4((src >> 20) & Int4(0x3FF));
v.w = Float4((src >> 30) & Int4(0x3));
if(stream.normalized)
{
v.x *= Float4(1.0f / 0x3FF);
v.y *= Float4(1.0f / 0x3FF);
v.z *= Float4(1.0f / 0x3FF);
v.w *= Float4(1.0f / 0x3);
}
}
break;
default: default:
ASSERT(false); ASSERT(false);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment