1086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com/*
2086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com * Copyright 2011 Google Inc.
3086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com *
4086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com * Use of this source code is governed by a BSD-style license that can be
5086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com * found in the LICENSE file.
6086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com */
7086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com
8cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth#include "GrGLGLSL.h"
9f529439fea003851d986a0573a7e0465754b2a48egdaniel#include "GrGLContext.h"
10f529439fea003851d986a0573a7e0465754b2a48egdaniel#include "GrGLUtil.h"
114af0af612f8cfb6951feb10ffe3091821866bd44bsalomon@google.com#include "SkString.h"
12086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com
13cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverthbool GrGLGetGLSLGeneration(const GrGLInterface* gl, GrGLSLGeneration* generation) {
1449f085dddff10473b6ebf832a974288300224e60bsalomon    SkASSERT(generation);
15086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com    GrGLSLVersion ver = GrGLGetGLSLVersion(gl);
16f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org    if (GR_GLSL_INVALID_VER == ver) {
17f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org        return false;
18f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org    }
199e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    switch (gl->fStandard) {
209e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org        case kGL_GrGLStandard:
21f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org            SkASSERT(ver >= GR_GLSL_VER(1,10));
2233ad701bc30387127c427fb1e38c781d5de33491cdalton            if (ver >= GR_GLSL_VER(4,00)) {
2333ad701bc30387127c427fb1e38c781d5de33491cdalton                *generation = k400_GrGLSLGeneration;
2433ad701bc30387127c427fb1e38c781d5de33491cdalton            } else if (ver >= GR_GLSL_VER(3,30)) {
2563a9f842a12c8ce265ca7a8c43117e2e7129ac83rmistry                *generation = k330_GrGLSLGeneration;
2663a9f842a12c8ce265ca7a8c43117e2e7129ac83rmistry            } else if (ver >= GR_GLSL_VER(1,50)) {
27f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org                *generation = k150_GrGLSLGeneration;
28281c726c760c2b0ef957674da0360d5595d52a9cbsalomon@google.com            } else if (ver >= GR_GLSL_VER(1,40)) {
29f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org                *generation = k140_GrGLSLGeneration;
30086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com            } else if (ver >= GR_GLSL_VER(1,30)) {
31f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org                *generation = k130_GrGLSLGeneration;
32086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com            } else {
33f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org                *generation = k110_GrGLSLGeneration;
34086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com            }
35f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org            return true;
369e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org        case kGLES_GrGLStandard:
37f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org            SkASSERT(ver >= GR_GL_VER(1,00));
3833ad701bc30387127c427fb1e38c781d5de33491cdalton            if (ver >= GR_GLSL_VER(3,20)) {
3933ad701bc30387127c427fb1e38c781d5de33491cdalton                *generation = k320es_GrGLSLGeneration;
4033ad701bc30387127c427fb1e38c781d5de33491cdalton            } else if (ver >= GR_GLSL_VER(3,10)) {
4163a9f842a12c8ce265ca7a8c43117e2e7129ac83rmistry                *generation = k310es_GrGLSLGeneration;
4233ad701bc30387127c427fb1e38c781d5de33491cdalton            } else if (ver >= GR_GLSL_VER(3,00)) {
4363a9f842a12c8ce265ca7a8c43117e2e7129ac83rmistry                *generation = k330_GrGLSLGeneration;
4463a9f842a12c8ce265ca7a8c43117e2e7129ac83rmistry            } else {
4563a9f842a12c8ce265ca7a8c43117e2e7129ac83rmistry                *generation = k110_GrGLSLGeneration;
4663a9f842a12c8ce265ca7a8c43117e2e7129ac83rmistry            }
47f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org            return true;
48086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com        default:
4988cb22b6b4816c7a9ca6c5b795965b4606f9eb7bcommit-bot@chromium.org            SkFAIL("Unknown GL Standard");
50f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org            return false;
51086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com    }
52086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com}
53086e5354fe7ae60e69c42bdfbc3d03bd8559b44ftomhudson@google.com
54