Diff
Modified: trunk/Source/WebCore/ChangeLog (163857 => 163858)
--- trunk/Source/WebCore/ChangeLog 2014-02-11 05:17:15 UTC (rev 163857)
+++ trunk/Source/WebCore/ChangeLog 2014-02-11 05:24:44 UTC (rev 163858)
@@ -1,3 +1,28 @@
+2014-02-10 ChangSeok Oh <changseok...@collabora.com>
+
+ Support ANGLE_instanced_arrays for linux
+ https://bugs.webkit.org/show_bug.cgi?id=127465
+
+ Reviewed by Martin Robinson.
+
+ Support the instanced drawing WebGL extension, ANGLE_instanced_arrays for linux platform.
+ This is a following patch for r162565. Relevant opengl APIs are exposed
+ for WebGLRenderingContext to access them.
+
+ Covered by fast/canvas/webgl/angle-instanced-arrays.html
+
+ * html/canvas/ANGLEInstancedArrays.cpp:
+ (WebCore::ANGLEInstancedArrays::supported):
+ * platform/graphics/OpenGLShims.cpp:
+ (WebCore::initializeOpenGLShims):
+ * platform/graphics/OpenGLShims.h:
+ * platform/graphics/opengl/Extensions3DOpenGL.cpp:
+ (WebCore::Extensions3DOpenGL::supportsExtension):
+ * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
+ (WebCore::GraphicsContext3D::drawArraysInstanced):
+ (WebCore::GraphicsContext3D::drawElementsInstanced):
+ (WebCore::GraphicsContext3D::vertexAttribDivisor):
+
2014-02-10 Mark Lam <mark....@apple.com>
Removing limitation on JSLock’s lockDropDepth.
Modified: trunk/Source/WebCore/html/canvas/ANGLEInstancedArrays.cpp (163857 => 163858)
--- trunk/Source/WebCore/html/canvas/ANGLEInstancedArrays.cpp 2014-02-11 05:17:15 UTC (rev 163857)
+++ trunk/Source/WebCore/html/canvas/ANGLEInstancedArrays.cpp 2014-02-11 05:24:44 UTC (rev 163858)
@@ -28,6 +28,10 @@
#if ENABLE(WEBGL)
#include "ANGLEInstancedArrays.h"
+#if PLATFORM(GTK)
+#include "Extensions3D.h"
+#endif
+
namespace WebCore {
ANGLEInstancedArrays::ANGLEInstancedArrays(WebGLRenderingContext* context)
@@ -49,11 +53,16 @@
return adoptPtr(new ANGLEInstancedArrays(context));
}
-bool ANGLEInstancedArrays::supported(WebGLRenderingContext*)
+bool ANGLEInstancedArrays::supported(WebGLRenderingContext* context)
{
#if PLATFORM(IOS) || PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+ UNUSED_PARAM(context);
return true;
+#elif PLATFORM(GTK)
+ Extensions3D* extensions = context->graphicsContext3D()->getExtensions();
+ return extensions->supports("GL_ANGLE_instanced_arrays");
#else
+ UNUSED_PARAM(context);
return false;
#endif
}
Modified: trunk/Source/WebCore/platform/graphics/OpenGLShims.cpp (163857 => 163858)
--- trunk/Source/WebCore/platform/graphics/OpenGLShims.cpp 2014-02-11 05:17:15 UTC (rev 163857)
+++ trunk/Source/WebCore/platform/graphics/OpenGLShims.cpp 2014-02-11 05:24:44 UTC (rev 163858)
@@ -146,6 +146,8 @@
ASSIGN_FUNCTION_TABLE_ENTRY_EXT(glDeleteVertexArrays);
ASSIGN_FUNCTION_TABLE_ENTRY(glDetachShader, success);
ASSIGN_FUNCTION_TABLE_ENTRY(glDisableVertexAttribArray, success);
+ ASSIGN_FUNCTION_TABLE_ENTRY(glDrawArraysInstanced, success);
+ ASSIGN_FUNCTION_TABLE_ENTRY(glDrawElementsInstanced, success);
ASSIGN_FUNCTION_TABLE_ENTRY(glEnableVertexAttribArray, success);
ASSIGN_FUNCTION_TABLE_ENTRY(glFramebufferRenderbuffer, success);
ASSIGN_FUNCTION_TABLE_ENTRY(glFramebufferTexture2D, success);
@@ -220,6 +222,7 @@
ASSIGN_FUNCTION_TABLE_ENTRY(glVertexAttrib3fv, success);
ASSIGN_FUNCTION_TABLE_ENTRY(glVertexAttrib4f, success);
ASSIGN_FUNCTION_TABLE_ENTRY(glVertexAttrib4fv, success);
+ ASSIGN_FUNCTION_TABLE_ENTRY(glVertexAttribDivisor, success);
ASSIGN_FUNCTION_TABLE_ENTRY(glVertexAttribPointer, success);
if (!success)
Modified: trunk/Source/WebCore/platform/graphics/OpenGLShims.h (163857 => 163858)
--- trunk/Source/WebCore/platform/graphics/OpenGLShims.h 2014-02-11 05:17:15 UTC (rev 163857)
+++ trunk/Source/WebCore/platform/graphics/OpenGLShims.h 2014-02-11 05:24:44 UTC (rev 163858)
@@ -69,6 +69,8 @@
typedef void (GLAPIENTRY *glDeleteVertexArraysType) (GLsizei, const GLuint*);
typedef void (GLAPIENTRY *glDetachShaderType) (GLuint, GLuint);
typedef void (GLAPIENTRY *glDisableVertexAttribArrayType) (GLuint);
+typedef void (GLAPIENTRY *glDrawArraysInstancedType) (GLenum, GLint, GLsizei, GLsizei);
+typedef void (GLAPIENTRY *glDrawElementsInstancedType) (GLenum, GLsizei, GLenum, const GLvoid*, GLsizei);
typedef void (GLAPIENTRY *glEnableVertexAttribArrayType) (GLuint);
typedef void (GLAPIENTRY *glFramebufferRenderbufferType) (GLenum, GLenum, GLenum, GLuint);
typedef void (GLAPIENTRY *glFramebufferTexture2DType) (GLenum, GLenum, GLenum, GLuint, GLint);
@@ -138,6 +140,7 @@
typedef void (GLAPIENTRY *glVertexAttrib3fvType) (GLuint, const GLfloat*);
typedef void (GLAPIENTRY *glVertexAttrib4fType) (GLuint, const GLfloat, const GLfloat, const GLfloat, const GLfloat);
typedef void (GLAPIENTRY *glVertexAttrib4fvType) (GLuint, const GLfloat*);
+typedef void (GLAPIENTRY *glVertexAttribDivisorType) (GLuint, GLuint);
typedef void (GLAPIENTRY *glVertexAttribPointerType) (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*);
#define FUNCTION_TABLE_ENTRY(FunctionName) FunctionName##Type FunctionName
@@ -171,6 +174,8 @@
FUNCTION_TABLE_ENTRY(glDeleteVertexArrays);
FUNCTION_TABLE_ENTRY(glDetachShader);
FUNCTION_TABLE_ENTRY(glDisableVertexAttribArray);
+ FUNCTION_TABLE_ENTRY(glDrawArraysInstanced);
+ FUNCTION_TABLE_ENTRY(glDrawElementsInstanced);
FUNCTION_TABLE_ENTRY(glEnableVertexAttribArray);
FUNCTION_TABLE_ENTRY(glFramebufferRenderbuffer);
FUNCTION_TABLE_ENTRY(glFramebufferTexture2D);
@@ -240,6 +245,7 @@
FUNCTION_TABLE_ENTRY(glVertexAttrib3fv);
FUNCTION_TABLE_ENTRY(glVertexAttrib4f);
FUNCTION_TABLE_ENTRY(glVertexAttrib4fv);
+ FUNCTION_TABLE_ENTRY(glVertexAttribDivisor);
FUNCTION_TABLE_ENTRY(glVertexAttribPointer);
} OpenGLFunctionTable;
@@ -282,6 +288,10 @@
#define glDeleteVertexArrays LOOKUP_GL_FUNCTION(glDeleteVertexArrays)
#define glDetachShader LOOKUP_GL_FUNCTION(glDetachShader)
#define glDisableVertexAttribArray LOOKUP_GL_FUNCTION(glDisableVertexAttribArray)
+#define glDrawArraysInstancedEXT glDrawArraysInstanced
+#define glDrawArraysInstanced LOOKUP_GL_FUNCTION(glDrawArraysInstanced)
+#define glDrawElementsInstancedEXT glDrawElementsInstanced
+#define glDrawElementsInstanced LOOKUP_GL_FUNCTION(glDrawElementsInstanced)
#define glEnableVertexAttribArray LOOKUP_GL_FUNCTION(glEnableVertexAttribArray)
#define glFramebufferRenderbufferEXT glFramebufferRenderbuffer
#define glFramebufferRenderbuffer LOOKUP_GL_FUNCTION(glFramebufferRenderbuffer)
@@ -365,6 +375,8 @@
#define glVertexAttrib3fv LOOKUP_GL_FUNCTION(glVertexAttrib3fv)
#define glVertexAttrib4f LOOKUP_GL_FUNCTION(glVertexAttrib4f)
#define glVertexAttrib4fv LOOKUP_GL_FUNCTION(glVertexAttrib4fv)
+#define glVertexAttribDivisorEXT glVertexAttribDivisor
+#define glVertexAttribDivisor LOOKUP_GL_FUNCTION(glVertexAttribDivisor)
#define glVertexAttribPointer LOOKUP_GL_FUNCTION(glVertexAttribPointer)
#endif
Modified: trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp (163857 => 163858)
--- trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp 2014-02-11 05:17:15 UTC (rev 163857)
+++ trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp 2014-02-11 05:24:44 UTC (rev 163858)
@@ -174,6 +174,11 @@
if (name == "GL_ANGLE_framebuffer_multisample")
return m_availableExtensions.contains("GL_EXT_framebuffer_multisample");
+ if (name == "GL_ANGLE_instanced_arrays") {
+ return (m_availableExtensions.contains("GL_ARB_instanced_arrays") || m_availableExtensions.contains("GL_EXT_instanced_arrays"))
+ && (m_availableExtensions.contains("GL_ARB_draw_instanced") || m_availableExtensions.contains("GL_EXT_draw_instanced"));
+ }
+
// Desktop GL always supports GL_OES_rgb8_rgba8.
if (name == "GL_OES_rgb8_rgba8")
return true;
Modified: trunk/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp (163857 => 163858)
--- trunk/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp 2014-02-11 05:17:15 UTC (rev 163857)
+++ trunk/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp 2014-02-11 05:24:44 UTC (rev 163858)
@@ -354,25 +354,20 @@
#if !PLATFORM(COCOA)
void GraphicsContext3D::drawArraysInstanced(GC3Denum mode, GC3Dint first, GC3Dsizei count, GC3Dsizei primcount)
{
- UNUSED_PARAM(mode);
- UNUSED_PARAM(first);
- UNUSED_PARAM(count);
- UNUSED_PARAM(primcount);
+ makeContextCurrent();
+ ::glDrawArraysInstanced(mode, first, count, primcount);
}
void GraphicsContext3D::drawElementsInstanced(GC3Denum mode, GC3Dsizei count, GC3Denum type, GC3Dintptr offset, GC3Dsizei primcount)
{
- UNUSED_PARAM(mode);
- UNUSED_PARAM(count);
- UNUSED_PARAM(type);
- UNUSED_PARAM(offset);
- UNUSED_PARAM(primcount);
+ makeContextCurrent();
+ ::glDrawElementsInstanced(mode, count, type, reinterpret_cast<GLvoid*>(static_cast<intptr_t>(offset)), primcount);
}
void GraphicsContext3D::vertexAttribDivisor(GC3Duint index, GC3Duint divisor)
{
- UNUSED_PARAM(index);
- UNUSED_PARAM(divisor);
+ makeContextCurrent();
+ ::glVertexAttribDivisor(index, divisor);
}
#endif