libGL MultMatrixd implementation

Change-Id: Ia1bbe00c9538403b59c2960558b94bd4e7327189
Reviewed-on: https://swiftshader-review.googlesource.com/2520
Tested-by: Maxime Grégoire <mgregoire@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGL/Context.cpp b/src/OpenGL/libGL/Context.cpp
index d1b36ea..ba6d2e5 100644
--- a/src/OpenGL/libGL/Context.cpp
+++ b/src/OpenGL/libGL/Context.cpp
@@ -3164,6 +3164,16 @@
     currentMatrixStack().scale(x, y, z);

 }

 

+void Context::multiply(const GLdouble *m)

+{

+	if(drawing)

+	{

+		return error(GL_INVALID_OPERATION);

+	}

+

+	currentMatrixStack().multiply(m);

+}

+

 void Context::multiply(const GLfloat *m)

 {

     if(drawing)

diff --git a/src/OpenGL/libGL/Context.h b/src/OpenGL/libGL/Context.h
index 76c5ed5..ba3c285 100644
--- a/src/OpenGL/libGL/Context.h
+++ b/src/OpenGL/libGL/Context.h
@@ -681,6 +681,7 @@
     void rotate(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);

     void translate(GLfloat x, GLfloat y, GLfloat z);

 	void scale(GLfloat x, GLfloat y, GLfloat z);

+	void multiply(const GLdouble *m);

     void multiply(const GLfloat *m);

     void ortho(double left, double right, double bottom, double top, double zNear, double zFar);   // FIXME: GLdouble

 

diff --git a/src/OpenGL/libGL/libGL.cpp b/src/OpenGL/libGL/libGL.cpp
index e1cc68f..8458b78 100644
--- a/src/OpenGL/libGL/libGL.cpp
+++ b/src/OpenGL/libGL/libGL.cpp
@@ -6759,7 +6759,19 @@
 

 void APIENTRY glMultMatrixd(const GLdouble *m)

 {

-	UNIMPLEMENTED();

+	TRACE("(*)");

+

+	gl::Context *context = gl::getContext();

+

+	if(context)

+	{

+		if(context->getListIndex() != 0)

+		{

+			UNIMPLEMENTED();

+		}

+

+		context->multiply(m);

+	}

 }

 

 void APIENTRY glMultMatrixm(sw::Matrix m)