1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 627847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com */ 727847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com 8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 99c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#include "GrGLUtil.h" 10215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org#include "SkMatrix.h" 11fab44db294846ff05d837b9cf0bf97a073891da7bungeman@google.com#include <stdio.h> 12f987d1b2348258970cae675135b6dedda079de48bsalomon@google.com 130b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.comvoid GrGLClearErr(const GrGLInterface* gl) { 14c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org while (GR_GL_NO_ERROR != gl->fFunctions.fGetError()) {} 15f987d1b2348258970cae675135b6dedda079de48bsalomon@google.com} 1627847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com 17845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.comnamespace { 18845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.comconst char *get_error_string(uint32_t err) { 19845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com switch (err) { 20845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com case GR_GL_NO_ERROR: 21845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com return ""; 22845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com case GR_GL_INVALID_ENUM: 23845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com return "Invalid Enum"; 24845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com case GR_GL_INVALID_VALUE: 25845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com return "Invalid Value"; 26845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com case GR_GL_INVALID_OPERATION: 27845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com return "Invalid Operation"; 28845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com case GR_GL_OUT_OF_MEMORY: 29845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com return "Out of Memory"; 30845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com case GR_GL_CONTEXT_LOST: 31845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com return "Context Lost"; 32845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com } 33845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com return "Unknown"; 34845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com} 35845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com} 36845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com 370b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.comvoid GrGLCheckErr(const GrGLInterface* gl, 380b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com const char* location, 390b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com const char* call) { 400b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com uint32_t err = GR_GL_GET_ERROR(gl); 410f31ca79bde088e6caac219734c35c1ae3e9e8b9twiz@google.com if (GR_GL_NO_ERROR != err) { 42845eafddb09e9a28b45b502abb544df1e286a324bsalomon@google.com GrPrintf("---- glGetError 0x%x(%s)", err, get_error_string(err)); 4327847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com if (NULL != location) { 4427847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com GrPrintf(" at\n\t%s", location); 4527847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com } 4627847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com if (NULL != call) { 4727847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com GrPrintf("\n\t\t%s", call); 4827847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com } 4927847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com GrPrintf("\n"); 5027847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com } 5127847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com} 5227847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com 53960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.comnamespace { 54960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com// Mesa uses a non-standard version string of format: 1.4 Mesa <mesa_major>.<mesa_minor>. 55960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com// The mapping of from mesa version to GL version came from here: http://www.mesa3d.org/intro.html 56960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.combool get_gl_version_for_mesa(int mesaMajorVersion, int* major, int* minor) { 57960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com switch (mesaMajorVersion) { 58960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com case 2: 59960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com case 3: 60960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com case 4: 61960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com case 5: 62960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com case 6: 63960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com *major = 1; 64960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com *minor = mesaMajorVersion - 1; 65960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com return true; 66960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com case 7: 67960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com *major = 2; 68960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com *minor = 1; 69960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com return true; 70960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com case 8: 71960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com *major = 3; 72960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com *minor = 0; 73960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com return true; 74960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com case 9: 75960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com *major = 3; 76960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com *minor = 1; 77960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com return true; 78566a3f1a1f5a47844664b510592ad60ada7d0635commit-bot@chromium.org case 10: 79566a3f1a1f5a47844664b510592ad60ada7d0635commit-bot@chromium.org *major = 3; 80566a3f1a1f5a47844664b510592ad60ada7d0635commit-bot@chromium.org *minor = 3; 81566a3f1a1f5a47844664b510592ad60ada7d0635commit-bot@chromium.org return true; 82960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com default: 83960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com return false; 84960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com } 85960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com} 86960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com} 87960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com 8827847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com/////////////////////////////////////////////////////////////////////////////// 8927847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com 90d5d10494e34ee739eac45b2297b7bd61caae5109bsalomon@google.com#if GR_GL_LOG_CALLS 91d5d10494e34ee739eac45b2297b7bd61caae5109bsalomon@google.com bool gLogCallsGL = !!(GR_GL_LOG_CALLS_START); 92d5d10494e34ee739eac45b2297b7bd61caae5109bsalomon@google.com#endif 93d5d10494e34ee739eac45b2297b7bd61caae5109bsalomon@google.com 94d5d10494e34ee739eac45b2297b7bd61caae5109bsalomon@google.com#if GR_GL_CHECK_ERROR 95d5d10494e34ee739eac45b2297b7bd61caae5109bsalomon@google.com bool gCheckErrorGL = !!(GR_GL_CHECK_ERROR_START); 96d5d10494e34ee739eac45b2297b7bd61caae5109bsalomon@google.com#endif 9727847dedd9b5c1f48998c40842f3494c0746257fbsalomon@google.com 989c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com/////////////////////////////////////////////////////////////////////////////// 999c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1009e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.orgGrGLStandard GrGLGetStandardInUseFromString(const char* versionString) { 1019c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (NULL == versionString) { 102e83b9b7c20c0b5cf6b15129d60576100199fd051commit-bot@chromium.org SkDebugf("NULL GL version string."); 1039e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org return kNone_GrGLStandard; 1049c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 1059c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1069c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com int major, minor; 1079c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1089c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com // check for desktop 1099c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com int n = sscanf(versionString, "%d.%d", &major, &minor); 1109c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (2 == n) { 1119e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org return kGL_GrGLStandard; 1129c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 1139c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1149c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com // check for ES 1 1159c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com char profile[2]; 116960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com n = sscanf(versionString, "OpenGL ES-%c%c %d.%d", profile, profile+1, &major, &minor); 1179c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (4 == n) { 1189c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com // we no longer support ES1. 1199e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org return kNone_GrGLStandard; 1209c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 1219c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1229c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com // check for ES2 1239c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com n = sscanf(versionString, "OpenGL ES %d.%d", &major, &minor); 1249c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (2 == n) { 1259e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org return kGLES_GrGLStandard; 1269c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 1279e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org return kNone_GrGLStandard; 1289c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com} 1299c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 130459104ceea00a08855099238563a06099340c2facommit-bot@chromium.orgbool GrGLIsMesaFromVersionString(const char* versionString) { 131459104ceea00a08855099238563a06099340c2facommit-bot@chromium.org int major, minor, mesaMajor, mesaMinor; 132459104ceea00a08855099238563a06099340c2facommit-bot@chromium.org int n = sscanf(versionString, "%d.%d Mesa %d.%d", &major, &minor, &mesaMajor, &mesaMinor); 133459104ceea00a08855099238563a06099340c2facommit-bot@chromium.org return 4 == n; 134459104ceea00a08855099238563a06099340c2facommit-bot@chromium.org} 135459104ceea00a08855099238563a06099340c2facommit-bot@chromium.org 136c9424b8e6dc204fc304c021480a04a468899aa34commit-bot@chromium.orgbool GrGLIsChromiumFromRendererString(const char* rendererString) { 137c9424b8e6dc204fc304c021480a04a468899aa34commit-bot@chromium.org return 0 == strcmp(rendererString, "Chromium"); 138c9424b8e6dc204fc304c021480a04a468899aa34commit-bot@chromium.org} 139c9424b8e6dc204fc304c021480a04a468899aa34commit-bot@chromium.org 1409c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLVersion GrGLGetVersionFromString(const char* versionString) { 1419c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (NULL == versionString) { 142e83b9b7c20c0b5cf6b15129d60576100199fd051commit-bot@chromium.org SkDebugf("NULL GL version string."); 143f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org return GR_GL_INVALID_VER; 1449c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 1459c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1469c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com int major, minor; 1479c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 148960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com // check for mesa 149960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com int mesaMajor, mesaMinor; 150960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com int n = sscanf(versionString, "%d.%d Mesa %d.%d", &major, &minor, &mesaMajor, &mesaMinor); 151960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com if (4 == n) { 152960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com if (get_gl_version_for_mesa(mesaMajor, &major, &minor)) { 153960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com return GR_GL_VER(major, minor); 154960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com } else { 155f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org return GR_GL_INVALID_VER; 156960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com } 157960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com } 158960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com 159960d114777ae75da1eeb289aabd9e4638cdc7caabsalomon@google.com n = sscanf(versionString, "%d.%d", &major, &minor); 1609c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (2 == n) { 1619c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com return GR_GL_VER(major, minor); 1629c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 1639c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1649c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com char profile[2]; 1659c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com n = sscanf(versionString, "OpenGL ES-%c%c %d.%d", profile, profile+1, 1669c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com &major, &minor); 1679c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (4 == n) { 1689c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com return GR_GL_VER(major, minor); 1699c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 170fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 1719c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com n = sscanf(versionString, "OpenGL ES %d.%d", &major, &minor); 1729c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (2 == n) { 1739c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com return GR_GL_VER(major, minor); 1749c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 1759c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 176f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org return GR_GL_INVALID_VER; 1779c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com} 1789c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1799c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLSLVersion GrGLGetGLSLVersionFromString(const char* versionString) { 1809c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (NULL == versionString) { 181e83b9b7c20c0b5cf6b15129d60576100199fd051commit-bot@chromium.org SkDebugf("NULL GLSL version string."); 182f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org return GR_GLSL_INVALID_VER; 1839c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 1849c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1859c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com int major, minor; 1869c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1879c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com int n = sscanf(versionString, "%d.%d", &major, &minor); 1889c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (2 == n) { 1899c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com return GR_GLSL_VER(major, minor); 1909c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 191fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 1929c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com n = sscanf(versionString, "OpenGL ES GLSL ES %d.%d", &major, &minor); 1939c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (2 == n) { 1949c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com return GR_GLSL_VER(major, minor); 1959c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 1969c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 1979c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#ifdef SK_BUILD_FOR_ANDROID 1989c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com // android hack until the gpu vender updates their drivers 1999c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com n = sscanf(versionString, "OpenGL ES GLSL %d.%d", &major, &minor); 2009c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com if (2 == n) { 2019c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com return GR_GLSL_VER(major, minor); 2029c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com } 2039c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#endif 2049c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 205f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org return GR_GLSL_INVALID_VER; 2069c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com} 2079c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 2080b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.comGrGLVendor GrGLGetVendorFromString(const char* vendorString) { 2090b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com if (NULL != vendorString) { 21096966a5a1ffc2f03eef1b5523308299aa4195f50bsalomon@google.com if (0 == strcmp(vendorString, "ARM")) { 21196966a5a1ffc2f03eef1b5523308299aa4195f50bsalomon@google.com return kARM_GrGLVendor; 21296966a5a1ffc2f03eef1b5523308299aa4195f50bsalomon@google.com } 2133012ded0ffd152c41ef5c85d13e49116fee856ebbsalomon@google.com if (0 == strcmp(vendorString, "Imagination Technologies")) { 2143012ded0ffd152c41ef5c85d13e49116fee856ebbsalomon@google.com return kImagination_GrGLVendor; 2153012ded0ffd152c41ef5c85d13e49116fee856ebbsalomon@google.com } 21654318d3430a436771b922f551fe69290f6d5d977commit-bot@chromium.org if (0 == strncmp(vendorString, "Intel ", 6) || 0 == strcmp(vendorString, "Intel")) { 2173012ded0ffd152c41ef5c85d13e49116fee856ebbsalomon@google.com return kIntel_GrGLVendor; 2183012ded0ffd152c41ef5c85d13e49116fee856ebbsalomon@google.com } 2197a434a28685fd045cf848b99b563dfcf978363bccommit-bot@chromium.org if (0 == strcmp(vendorString, "Qualcomm")) { 2207a434a28685fd045cf848b99b563dfcf978363bccommit-bot@chromium.org return kQualcomm_GrGLVendor; 2217a434a28685fd045cf848b99b563dfcf978363bccommit-bot@chromium.org } 2220b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com } 2230b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com return kOther_GrGLVendor; 2240b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com} 2250b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com 2260694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.orgGrGLRenderer GrGLGetRendererFromString(const char* rendererString) { 2270694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org if (NULL != rendererString) { 2280694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org if (0 == strcmp(rendererString, "NVIDIA Tegra 3")) { 2290694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org return kTegra3_GrGLRenderer; 2306dee8759ab8c90dcffd76f114eec333405fd176ecommit-bot@chromium.org } else if (0 == strcmp(rendererString, "NVIDIA Tegra")) { 2316dee8759ab8c90dcffd76f114eec333405fd176ecommit-bot@chromium.org return kTegra2_GrGLRenderer; 2320694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org } 2330694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org } 2340694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org return kOther_GrGLRenderer; 2350694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org} 2360694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org 2379c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLVersion GrGLGetVersion(const GrGLInterface* gl) { 2389c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com const GrGLubyte* v; 2399c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com GR_GL_CALL_RET(gl, v, GetString(GR_GL_VERSION)); 2409c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com return GrGLGetVersionFromString((const char*) v); 2419c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com} 2429c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com 2439c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLSLVersion GrGLGetGLSLVersion(const GrGLInterface* gl) { 2449c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com const GrGLubyte* v; 2459c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com GR_GL_CALL_RET(gl, v, GetString(GR_GL_SHADING_LANGUAGE_VERSION)); 2469c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com return GrGLGetGLSLVersionFromString((const char*) v); 2479c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com} 2480b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com 2490b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.comGrGLVendor GrGLGetVendor(const GrGLInterface* gl) { 2500b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com const GrGLubyte* v; 2510b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com GR_GL_CALL_RET(gl, v, GetString(GR_GL_VENDOR)); 2520b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com return GrGLGetVendorFromString((const char*) v); 2530b1e481709ef9b86261f46e9fd44d8cdec7c2d8ebsalomon@google.com} 254215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org 2550694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.orgGrGLRenderer GrGLGetRenderer(const GrGLInterface* gl) { 2560694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org const GrGLubyte* v; 2570694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org GR_GL_CALL_RET(gl, v, GetString(GR_GL_RENDERER)); 2580694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org return GrGLGetRendererFromString((const char*) v); 2590694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org} 2600694ea7f6a16e946972b9c625f434e80eb42bb5fcommit-bot@chromium.org 261215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.orgtemplate<> void GrGLGetMatrix<3>(GrGLfloat* dest, const SkMatrix& src) { 262215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org // Col 0 263215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[0] = SkScalarToFloat(src[SkMatrix::kMScaleX]); 264215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[1] = SkScalarToFloat(src[SkMatrix::kMSkewY]); 265215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[2] = SkScalarToFloat(src[SkMatrix::kMPersp0]); 266215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org 267215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org // Col 1 268215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[3] = SkScalarToFloat(src[SkMatrix::kMSkewX]); 269215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[4] = SkScalarToFloat(src[SkMatrix::kMScaleY]); 270215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[5] = SkScalarToFloat(src[SkMatrix::kMPersp1]); 271215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org 272215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org // Col 2 273215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[6] = SkScalarToFloat(src[SkMatrix::kMTransX]); 274215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[7] = SkScalarToFloat(src[SkMatrix::kMTransY]); 275215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[8] = SkScalarToFloat(src[SkMatrix::kMPersp2]); 276215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org} 277215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org 278215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.orgtemplate<> void GrGLGetMatrix<4>(GrGLfloat* dest, const SkMatrix& src) { 279215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org // Col 0 280215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[0] = SkScalarToFloat(src[SkMatrix::kMScaleX]); 281215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[1] = SkScalarToFloat(src[SkMatrix::kMSkewY]); 282215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[2] = 0; 283215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[3] = SkScalarToFloat(src[SkMatrix::kMPersp0]); 284215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org 285215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org // Col 1 286215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[4] = SkScalarToFloat(src[SkMatrix::kMSkewX]); 287215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[5] = SkScalarToFloat(src[SkMatrix::kMScaleY]); 288215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[6] = 0; 289215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[7] = SkScalarToFloat(src[SkMatrix::kMPersp1]); 290215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org 291215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org // Col 2 292215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[8] = 0; 293215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[9] = 0; 294215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[10] = 1; 295215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[11] = 0; 296215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org 297215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org // Col 3 298215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[12] = SkScalarToFloat(src[SkMatrix::kMTransX]); 299215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[13] = SkScalarToFloat(src[SkMatrix::kMTransY]); 300215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[14] = 0; 301215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org dest[15] = SkScalarToFloat(src[SkMatrix::kMPersp2]); 302215a682d2d561be69b7a28eb76a98849ad03cbc0commit-bot@chromium.org} 303