Commit 5b64aca8 by Luc Ferron Committed by Commit Bot

Vulkan: Support of float uniform matrixes (2,3,4).

Bug:angleproject:2392 Change-Id: I97efea83e604d19b1745d9db4ab8f02997a1b7fc Reviewed-on: https://chromium-review.googlesource.com/962666 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 0ab41fa5
...@@ -534,7 +534,13 @@ void ProgramVk::setUniformMatrix2fv(GLint location, ...@@ -534,7 +534,13 @@ void ProgramVk::setUniformMatrix2fv(GLint location,
GLboolean transpose, GLboolean transpose,
const GLfloat *value) const GLfloat *value)
{ {
UNIMPLEMENTED(); if (transpose == GL_TRUE)
{
UNIMPLEMENTED();
return;
}
setUniformImpl(location, count, value, GL_FLOAT_MAT2);
} }
void ProgramVk::setUniformMatrix3fv(GLint location, void ProgramVk::setUniformMatrix3fv(GLint location,
...@@ -542,7 +548,12 @@ void ProgramVk::setUniformMatrix3fv(GLint location, ...@@ -542,7 +548,12 @@ void ProgramVk::setUniformMatrix3fv(GLint location,
GLboolean transpose, GLboolean transpose,
const GLfloat *value) const GLfloat *value)
{ {
UNIMPLEMENTED(); if (transpose == GL_TRUE)
{
UNIMPLEMENTED();
return;
}
setUniformImpl(location, count, value, GL_FLOAT_MAT3);
} }
void ProgramVk::setUniformMatrix4fv(GLint location, void ProgramVk::setUniformMatrix4fv(GLint location,
...@@ -550,7 +561,13 @@ void ProgramVk::setUniformMatrix4fv(GLint location, ...@@ -550,7 +561,13 @@ void ProgramVk::setUniformMatrix4fv(GLint location,
GLboolean transpose, GLboolean transpose,
const GLfloat *value) const GLfloat *value)
{ {
UNIMPLEMENTED(); if (transpose == GL_TRUE)
{
UNIMPLEMENTED();
return;
}
setUniformImpl(location, count, value, GL_FLOAT_MAT4);
} }
void ProgramVk::setUniformMatrix2x3fv(GLint location, void ProgramVk::setUniformMatrix2x3fv(GLint location,
......
...@@ -151,6 +151,79 @@ void main() { ...@@ -151,6 +151,79 @@ void main() {
ASSERT_EQ(floats, expected); ASSERT_EQ(floats, expected);
} }
// Test that we can get and set a 2x2 float Matrix uniform successfully.
TEST_P(SimpleUniformTest, FloatMatrix2UniformStateQuery)
{
constexpr char kFragShader[] = R"(precision mediump float;
uniform mat2 umat2;
void main() {
gl_FragColor = vec4(umat2);
})";
ANGLE_GL_PROGRAM(program, kBasicVertexShader, kFragShader);
glUseProgram(program);
GLint uniformLocation = glGetUniformLocation(program, "umat2");
ASSERT_NE(uniformLocation, -1);
std::vector<GLfloat> expected = {{1.0f, 0.5f, 0.2f, -0.8f}};
glUniformMatrix2fv(uniformLocation, 1, false, expected.data());
std::vector<GLfloat> floats(4, 0);
glGetUniformfv(program, uniformLocation, floats.data());
ASSERT_GL_NO_ERROR();
ASSERT_EQ(floats, expected);
}
// Test that we can get and set a 3x3 float Matrix uniform successfully.
TEST_P(SimpleUniformTest, FloatMatrix3UniformStateQuery)
{
constexpr char kFragShader[] = R"(precision mediump float;
uniform mat3 umat3;
void main() {
gl_FragColor = vec4(umat3);
})";
ANGLE_GL_PROGRAM(program, kBasicVertexShader, kFragShader);
glUseProgram(program);
GLint uniformLocation = glGetUniformLocation(program, "umat3");
ASSERT_NE(uniformLocation, -1);
std::vector<GLfloat> expected = {{1.0f, 0.5f, 0.2f, -0.8f, -0.2f, 0.1f, 0.1f, 0.2f, 0.7f}};
glUniformMatrix3fv(uniformLocation, 1, false, expected.data());
std::vector<GLfloat> floats(9, 0);
glGetUniformfv(program, uniformLocation, floats.data());
ASSERT_GL_NO_ERROR();
ASSERT_EQ(floats, expected);
}
// Test that we can get and set a 4x4 float Matrix uniform successfully.
TEST_P(SimpleUniformTest, FloatMatrix4UniformStateQuery)
{
constexpr char kFragShader[] = R"(precision mediump float;
uniform mat4 umat4;
void main() {
gl_FragColor = umat4 * vec4(1.0, 1.0, 1.0, 1.0);
})";
ANGLE_GL_PROGRAM(program, kBasicVertexShader, kFragShader);
glUseProgram(program);
GLint uniformLocation = glGetUniformLocation(program, "umat4");
ASSERT_NE(uniformLocation, -1);
std::vector<GLfloat> expected = {{1.0f, 0.5f, 0.2f, -0.8f, -0.2f, 0.1f, 0.1f, 0.2f, 0.7f, 0.1f,
0.7f, 0.1f, 0.7f, 0.1f, 0.7f, 0.1f}};
glUniformMatrix4fv(uniformLocation, 1, false, expected.data());
std::vector<GLfloat> floats(16, 0);
glGetUniformfv(program, uniformLocation, floats.data());
ASSERT_GL_NO_ERROR();
ASSERT_EQ(floats, expected);
}
class UniformTest : public ANGLETest class UniformTest : public ANGLETest
{ {
protected: protected:
......
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