14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com//
248dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang// Copyright (c) 2002-2014 The ANGLE Project Authors. All rights reserved.
34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be
44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file.
54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com//
64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// libGLESv2.cpp: Implements the exported OpenGL ES 2.0 functions.
84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
9a0ce7e613ecbd04617cd49595d7da74856dd3bd1daniel@transgaming.com#include "common/version.h"
100b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang#include "common/utilities.h"
11bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com
12bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "libGLESv2/main.h"
138dcfc6ab9013827d3531722e28d750886bb8532dshannonwoods@chromium.org#include "libGLESv2/formatutils.h"
14bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "libGLESv2/Buffer.h"
15d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org#include "libGLESv2/Fence.h"
16bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "libGLESv2/Framebuffer.h"
17486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com#include "libGLESv2/Renderbuffer.h"
18bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "libGLESv2/Program.h"
19ea09f9b400d2ef6d2761e0a81471ee5221995a13apatrick@chromium.org#include "libGLESv2/ProgramBinary.h"
20bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "libGLESv2/Texture.h"
2186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com#include "libGLESv2/Query.h"
22486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com#include "libGLESv2/Context.h"
2357a8972e5ddf7611860d9767c8aed4793c3929afJamie Madill#include "libGLESv2/VertexArray.h"
245bf98290459ca4ccab2f5be62f5fba2337fe8b7aBrandon Jones#include "libGLESv2/VertexAttribute.h"
25c8058451c87ec298683bf484813016b20bf36777Geoff Lang#include "libGLESv2/TransformFeedback.h"
26e261b44af7631c31ddca8601490e7445af5a3341Jamie Madill#include "libGLESv2/FramebufferAttachment.h"
274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
28e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#include "libGLESv2/validationES.h"
29e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#include "libGLESv2/validationES2.h"
30e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#include "libGLESv2/validationES3.h"
3155856b16629cd2836166094710a47ef25ab62d4cJamie Madill#include "libGLESv2/queryconversions.h"
32478fdb2b881e1b6796fb996b8351dd42518b6b8dJamie Madill
334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comextern "C"
344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
36a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com// OpenGL ES 2.0 functions
37a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glActiveTexture(GLenum texture)
394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
400f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum texture = 0x%X)", texture);
414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
42bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
43bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
44bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
453a61c321e7ea779f23a4da72db977286897b1168Geoff Lang        if (texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + context->getCaps().maxCombinedTextureImageUnits - 1)
464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
47b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
48b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
50bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
51bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setActiveSampler(texture - GL_TEXTURE0);
524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glAttachShader(GLuint program, GLuint shader)
564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
570f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLuint shader = %d)", program, shader);
584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
59bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
60bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
62bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
63bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Shader *shaderObject = context->getShader(shader);
644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
65bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
67bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
69b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
70b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
71e9d6ed036a79dd3a5b578df058113a5354aff068daniel@transgaming.com            }
72bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
73e9d6ed036a79dd3a5b578df058113a5354aff068daniel@transgaming.com            {
74b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
75b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
77bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
79bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!shaderObject)
80bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
81bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getProgram(shader))
824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
83b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
84b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
86bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
87bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
88b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
89b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
90bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
91bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
92bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
93bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject->attachShader(shaderObject))
94bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
95b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
96b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
1004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
10186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.comvoid __stdcall glBeginQueryEXT(GLenum target, GLuint id)
10286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com{
10386bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    EVENT("(GLenum target = 0x%X, GLuint %d)", target, id);
10486bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
105bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
106bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
107bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
108bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateBeginQuery(context, target, id))
10986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {
110bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
11186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        }
112bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1135aad96735332d3c033a8212d96899173631653c5Geoff Lang        gl::Error error = context->beginQuery(target, id);
1145aad96735332d3c033a8212d96899173631653c5Geoff Lang        if (error.isError())
1155aad96735332d3c033a8212d96899173631653c5Geoff Lang        {
1165aad96735332d3c033a8212d96899173631653c5Geoff Lang            context->recordError(error);
1175aad96735332d3c033a8212d96899173631653c5Geoff Lang            return;
1185aad96735332d3c033a8212d96899173631653c5Geoff Lang        }
11986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    }
12086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com}
12186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
122fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glBindAttribLocation(GLuint program, GLuint index, const GLchar* name)
1234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
1240f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLuint index = %d, const GLchar* name = 0x%0.8p)", program, index, name);
1254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
126bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
127bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
128bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
129b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
130b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
131b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
132b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
133b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
134b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
135bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
136fab5a1ae7809758c6c2fd4a39f3cc5122b262c32daniel@transgaming.com
137bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
138bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
139bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
1404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
141b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
142b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
143980798393d9aa0d94ac8dea6e1179249a925f273daniel@transgaming.com            }
144bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
145980798393d9aa0d94ac8dea6e1179249a925f273daniel@transgaming.com            {
146b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
147b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
1484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
149bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
151bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (strncmp(name, "gl_", 3) == 0)
152bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
153b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
154b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
156bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
157bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programObject->bindAttributeLocation(index, name);
1584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
1594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
1604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glBindBuffer(GLenum target, GLuint buffer)
1624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
1630f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLuint buffer = %d)", target, buffer);
1644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
165bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
166bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
167bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
168bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
1694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
170b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
171b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
172bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
173667a29cf4c8dc2d0ccafd3b0464d2e6b01d087bcshannon.woods%transgaming.com@gtempaccount.com
174bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
175bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
176bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_ARRAY_BUFFER:
177bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindArrayBuffer(buffer);
178bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
179bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_ELEMENT_ARRAY_BUFFER:
180bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindElementArrayBuffer(buffer);
181bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
182bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_COPY_READ_BUFFER:
183bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindCopyReadBuffer(buffer);
184bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
185bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_COPY_WRITE_BUFFER:
186bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindCopyWriteBuffer(buffer);
187bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
188bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_PIXEL_PACK_BUFFER:
189bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindPixelPackBuffer(buffer);
190bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
191bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_PIXEL_UNPACK_BUFFER:
192bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindPixelUnpackBuffer(buffer);
193bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
194bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER:
195bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindGenericUniformBuffer(buffer);
196bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
197bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER:
198bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindGenericTransformFeedbackBuffer(buffer);
199bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
200b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
201bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
202b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
203b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
2054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
2064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
2074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glBindFramebuffer(GLenum target, GLuint framebuffer)
2094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
2100f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);
2114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
212bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
213bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
214bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
215b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidFramebufferTarget(target))
216b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
217b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
218b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
219b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
220b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
221bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (target == GL_READ_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)
2224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
223bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindReadFramebuffer(framebuffer);
2244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
2254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
226bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (target == GL_DRAW_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)
2274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
228bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindDrawFramebuffer(framebuffer);
2294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
2304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
2314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
2324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glBindRenderbuffer(GLenum target, GLuint renderbuffer)
2344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
2350f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLuint renderbuffer = %d)", target, renderbuffer);
2364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
237bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
238bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
240b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (target != GL_RENDERBUFFER)
241b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
242b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
243b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
244b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
245b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
246bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->bindRenderbuffer(renderbuffer);
2474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
2484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
2494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glBindTexture(GLenum target, GLuint texture)
2514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
2520f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLuint texture = %d)", target, texture);
2534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
254bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
255bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
257bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture *textureObject = context->getTexture(texture);
2584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
259bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (textureObject && textureObject->getTarget() != target && texture != 0)
2604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
261b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
262b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
263bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
265bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
266bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
267bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D:
268bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP:
26976b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang            break;
270b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
271bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_3D:
272bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D_ARRAY:
273bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
2744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
275b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
276b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
27876b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang            break;
279b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
280bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
281b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
282b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
28476b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang
28576b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang        context->bindTexture(target, texture);
2864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
2874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
2884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
2904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
2910f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",
292b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          red, green, blue, alpha);
2934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
294bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context* context = gl::getNonLostContext();
2954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
296bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
298bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setBlendColor(gl::clamp01(red), gl::clamp01(green), gl::clamp01(blue), gl::clamp01(alpha));
2994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
3004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
3014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glBlendEquation(GLenum mode)
3034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
3044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    glBlendEquationSeparate(mode, mode);
3054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
3064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
3084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
3090f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);
3104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
311bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
312b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
313bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
314b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (modeRGB)
315b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
316b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FUNC_ADD:
317b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FUNC_SUBTRACT:
318b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FUNC_REVERSE_SUBTRACT:
319b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_MIN:
320b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_MAX:
321b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
3224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
323b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
324b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
325b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
326b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
32700b6a0e09aa0596392868ffe08b0a701bbbd38f6shannon.woods%transgaming.com@gtempaccount.com
328b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (modeAlpha)
329b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
330b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FUNC_ADD:
331b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FUNC_SUBTRACT:
332b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FUNC_REVERSE_SUBTRACT:
333b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_MIN:
334b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_MAX:
335b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
3364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
337b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
338b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
339b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
340b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
341bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
342bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setBlendEquation(modeRGB, modeAlpha);
3434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
3444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
3454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glBlendFunc(GLenum sfactor, GLenum dfactor)
3474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
3484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    glBlendFuncSeparate(sfactor, dfactor, sfactor, dfactor);
3494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
3504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
3524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
3530f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum srcRGB = 0x%X, GLenum dstRGB = 0x%X, GLenum srcAlpha = 0x%X, GLenum dstAlpha = 0x%X)",
354b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          srcRGB, dstRGB, srcAlpha, dstAlpha);
3554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
356bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
357b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
3584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
359b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (srcRGB)
3604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
361b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ZERO:
362b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE:
363b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_COLOR:
364b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_SRC_COLOR:
365b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DST_COLOR:
366b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_DST_COLOR:
367b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_ALPHA:
368b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_SRC_ALPHA:
369b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DST_ALPHA:
370b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_DST_ALPHA:
371b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CONSTANT_COLOR:
372b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_CONSTANT_COLOR:
373b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CONSTANT_ALPHA:
374b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_CONSTANT_ALPHA:
375b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_ALPHA_SATURATE:
376b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
377b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
378b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
379b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang              context->recordError(gl::Error(GL_INVALID_ENUM));
380b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang              return;
3814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
3824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
383b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (dstRGB)
384b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
385b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ZERO:
386b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE:
387b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_COLOR:
388b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_SRC_COLOR:
389b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DST_COLOR:
390b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_DST_COLOR:
391b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_ALPHA:
392b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_SRC_ALPHA:
393b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DST_ALPHA:
394b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_DST_ALPHA:
395b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CONSTANT_COLOR:
396b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_CONSTANT_COLOR:
397b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CONSTANT_ALPHA:
398b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_CONSTANT_ALPHA:
399b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
4004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
401b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_ALPHA_SATURATE:
402b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            if (context->getClientVersion() < 3)
403b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            {
404b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
405b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
406b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            }
407b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
4084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
409b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
410b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
411b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
412b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
413b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
414b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (srcAlpha)
4154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
416b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ZERO:
417b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE:
418b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_COLOR:
419b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_SRC_COLOR:
420b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DST_COLOR:
421b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_DST_COLOR:
422b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_ALPHA:
423b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_SRC_ALPHA:
424b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DST_ALPHA:
425b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_DST_ALPHA:
426b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CONSTANT_COLOR:
427b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_CONSTANT_COLOR:
428b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CONSTANT_ALPHA:
429b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_CONSTANT_ALPHA:
430b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_ALPHA_SATURATE:
431b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
432b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
433b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
434b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang              context->recordError(gl::Error(GL_INVALID_ENUM));
435b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang              return;
4364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
438b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (dstAlpha)
439b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
440b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ZERO:
441b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE:
442b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_COLOR:
443b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_SRC_COLOR:
444b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DST_COLOR:
445b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_DST_COLOR:
446b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_ALPHA:
447b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_SRC_ALPHA:
448b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DST_ALPHA:
449b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_DST_ALPHA:
450b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CONSTANT_COLOR:
451b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_CONSTANT_COLOR:
452b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CONSTANT_ALPHA:
453b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ONE_MINUS_CONSTANT_ALPHA:
454b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
455fe453651c48eef34e49dd5a1cf29ebeab707126adaniel@transgaming.com
456b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SRC_ALPHA_SATURATE:
457b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            if (context->getClientVersion() < 3)
458b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            {
459b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
460b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
461b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            }
462b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
463fe453651c48eef34e49dd5a1cf29ebeab707126adaniel@transgaming.com
464b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
465b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
466b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
467b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
469b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        bool constantColorUsed = (srcRGB == GL_CONSTANT_COLOR || srcRGB == GL_ONE_MINUS_CONSTANT_COLOR ||
470b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                                  dstRGB == GL_CONSTANT_COLOR || dstRGB == GL_ONE_MINUS_CONSTANT_COLOR);
471b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
472b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        bool constantAlphaUsed = (srcRGB == GL_CONSTANT_ALPHA || srcRGB == GL_ONE_MINUS_CONSTANT_ALPHA ||
473b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                                  dstRGB == GL_CONSTANT_ALPHA || dstRGB == GL_ONE_MINUS_CONSTANT_ALPHA);
474b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
475b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (constantColorUsed && constantAlphaUsed)
476b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
477b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            ERR("Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR invalid under WebGL");
478b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
479b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
480b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
481bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
482bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);
4834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
4844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
4854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
486fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
4874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
4880f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",
489b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          target, size, data, usage);
4904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
491bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
492b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
493bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
494b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (size < 0)
4954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
496b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
497b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
498bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
499f2db40bbeda617c29d2e168f651611a9e9c11c05shannon.woods%transgaming.com@gtempaccount.com
500b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (usage)
501b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
502b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_STREAM_DRAW:
503b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_STATIC_DRAW:
504b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DYNAMIC_DRAW:
505b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
506b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
507b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_STREAM_READ:
508b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_STREAM_COPY:
509b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_STATIC_READ:
510b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_STATIC_COPY:
511b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DYNAMIC_READ:
512b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DYNAMIC_COPY:
513b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            if (context->getClientVersion() < 3)
514b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            {
515b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
516b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
517b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            }
518b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
519b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
520b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
521b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang              context->recordError(gl::Error(GL_INVALID_ENUM));
522b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang              return;
523b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
524f2db40bbeda617c29d2e168f651611a9e9c11c05shannon.woods%transgaming.com@gtempaccount.com
525bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
526bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
527b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
528b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
5304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
531bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *buffer = context->getState().getTargetBuffer(target);
5324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
533bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!buffer)
534bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
535b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
536b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
538bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5392a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        gl::Error error = buffer->bufferData(data, size, usage);
5402a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        if (error.isError())
5412a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        {
5422a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            context->recordError(error);
5432a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            return;
5442a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        }
5454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
5464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
5474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
548fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
5494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
5500f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",
551b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          target, offset, size, data);
5524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
553bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
554bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
555bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
556b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (size < 0 || offset < 0)
557b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
558b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
559b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
560b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
561b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
562b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (data == NULL)
563b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
564b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
565b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
566b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
567bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
5680f7aaf530b2aad644d4aab01c493517dedf3f62fdaniel@transgaming.com        {
569b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
570b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
571bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5728c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill
573bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *buffer = context->getState().getTargetBuffer(target);
5740f7aaf530b2aad644d4aab01c493517dedf3f62fdaniel@transgaming.com
575bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!buffer)
576bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
577b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
578b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
579bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5807a5f738bcf0773177a533c73bd51330a353e4004Jamie Madill
581bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (buffer->isMapped())
582bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
583b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
584b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
585bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
586876dc7240025ef09a305ca66a9346decba715d25Geoff Lang
587bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Check for possible overflow of size + offset
588bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!rx::IsUnsignedAdditionSafe<size_t>(size, offset))
589bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
590b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_OUT_OF_MEMORY));
591b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
592bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
593defa1c39acecbb1402ee23e1cda70d8b028956ffdaniel@transgaming.com
594bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (size + offset > buffer->getSize())
595bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
596b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
597b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5980f7aaf530b2aad644d4aab01c493517dedf3f62fdaniel@transgaming.com        }
599bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6002a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        gl::Error error = buffer->bufferSubData(data, size, offset);
6012a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        if (error.isError())
6022a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        {
6032a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            context->recordError(error);
6042a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            return;
6052a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        }
6064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
6074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
6084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
6094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLenum __stdcall glCheckFramebufferStatus(GLenum target)
6104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
6110f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X)", target);
6124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
613bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
614bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
616b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidFramebufferTarget(target))
617b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
618b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
619b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return 0;
620b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
621b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
622bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebuffer = context->getState().getTargetFramebuffer(target);
623bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(framebuffer);
624bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return framebuffer->completeness();
6254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
6264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
6274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return 0;
6284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
6294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
6304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glClear(GLbitfield mask)
6314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
632a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLbitfield mask = 0x%X)", mask);
6334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
634bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
635bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
637bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebufferObject = context->getState().getDrawFramebuffer();
6384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
639bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!framebufferObject || framebufferObject->completeness() != GL_FRAMEBUFFER_COMPLETE)
640f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org        {
641b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_FRAMEBUFFER_OPERATION));
642b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
643bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6440b83323dc5f04d23d353a616ae06b077037e73bbGeoff Lang
645bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if ((mask & ~(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) != 0)
646bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
647b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
648b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
649f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org        }
650bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
651cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        gl::Error error = context->clear(mask);
652cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        if (error.isError())
653cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        {
654cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            context->recordError(error);
655cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            return;
656cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        }
6574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
6584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
6594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
660f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.orgvoid __stdcall glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
6614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
662f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    EVENT("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",
663f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          red, green, blue, alpha);
6644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
665bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
666bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
667f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    {
668bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setClearColor(red, green, blue, alpha);
669f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    }
670f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org}
6714143049817a4f5f3a2ec47897c5b52249d4d17e0daniel@transgaming.com
672f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.orgvoid __stdcall glClearDepthf(GLclampf depth)
673f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org{
674f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    EVENT("(GLclampf depth = %f)", depth);
675f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
676bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
677bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
678f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    {
679bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setClearDepth(depth);
680f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    }
681f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org}
682f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
683f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.orgvoid __stdcall glClearStencil(GLint s)
684f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org{
685f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    EVENT("(GLint s = %d)", s);
686f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
687bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
688bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
689f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    {
690bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setClearStencil(s);
691f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    }
692f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org}
693f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
694f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.orgvoid __stdcall glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
695f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org{
696f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    EVENT("(GLboolean red = %d, GLboolean green = %u, GLboolean blue = %u, GLboolean alpha = %u)",
697f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          red, green, blue, alpha);
6984143049817a4f5f3a2ec47897c5b52249d4d17e0daniel@transgaming.com
699bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
700bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
701f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    {
702bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setColorMask(red == GL_TRUE, green == GL_TRUE, blue == GL_TRUE, alpha == GL_TRUE);
703f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    }
704f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org}
7055d752f29189bbeb3da84b66c7335192a4baf6528daniel@transgaming.com
706f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.orgvoid __stdcall glCompileShader(GLuint shader)
707f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org{
708f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    EVENT("(GLuint shader = %d)", shader);
7090186813531a7e8f47d584ca7fb54a73ed99d19bedaniel@transgaming.com
710bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
711bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
712f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    {
713bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Shader *shaderObject = context->getShader(shader);
7140186813531a7e8f47d584ca7fb54a73ed99d19bedaniel@transgaming.com
715bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!shaderObject)
716f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org        {
717bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getProgram(shader))
7180186813531a7e8f47d584ca7fb54a73ed99d19bedaniel@transgaming.com            {
719b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
720b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
721bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
722bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
723bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
724b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
725b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
7260186813531a7e8f47d584ca7fb54a73ed99d19bedaniel@transgaming.com            }
7270186813531a7e8f47d584ca7fb54a73ed99d19bedaniel@transgaming.com        }
728bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
729bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        shaderObject->compile();
7304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
7314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
7324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
733bfdea66b45dd1b98a565e767533361ef728731ceGeoff Langvoid __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
734f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org                                      GLint border, GLsizei imageSize, const GLvoid* data)
7354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
736bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
737f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",
738f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          target, level, internalformat, width, height, border, imageSize, data);
7394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
740bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
741bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
743bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3 &&
744bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES2TexImageParameters(context, target, level, internalformat, true, false,
745bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           0, 0, width, height, border, GL_NONE, GL_NONE, data))
746bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
747bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
748bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
749b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com
750bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() >= 3 &&
751bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES3TexImageParameters(context, target, level, internalformat, true, false,
752bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           0, 0, 0, width, height, 1, border, GL_NONE, GL_NONE, data))
753b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com        {
754bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
755bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
756f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
7575d601382b51c29d1670b58c01360416bd929842dGeoff Lang        const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalformat);
7585d601382b51c29d1670b58c01360416bd929842dGeoff Lang        if (imageSize < 0 || static_cast<GLuint>(imageSize) != formatInfo.computeBlockSize(GL_UNSIGNED_BYTE, width, height))
759bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
760b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
761b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
762bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
763f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
764bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
765bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
766bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D:
76732b11443c38577f29fabe51520ae9a0808992e0bdaniel@transgaming.com            {
768bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2D *texture = context->getTexture2D();
769bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setCompressedImage(level, internalformat, width, height, imageSize, data);
77032b11443c38577f29fabe51520ae9a0808992e0bdaniel@transgaming.com            }
771bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
77232b11443c38577f29fabe51520ae9a0808992e0bdaniel@transgaming.com
773bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
774bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
775bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
776bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
777bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
778bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
7795d752f29189bbeb3da84b66c7335192a4baf6528daniel@transgaming.com            {
780bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
781bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setCompressedImage(target, level, internalformat, width, height, imageSize, data);
7825d752f29189bbeb3da84b66c7335192a4baf6528daniel@transgaming.com            }
783bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
784bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
785bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
786b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
787b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
788f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org        }
789f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    }
790f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org}
7915d752f29189bbeb3da84b66c7335192a4baf6528daniel@transgaming.com
792f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.orgvoid __stdcall glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
793f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org                                         GLenum format, GLsizei imageSize, const GLvoid* data)
794f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org{
795f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
796f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "
797f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          "GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",
798f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          target, level, xoffset, yoffset, width, height, format, imageSize, data);
7993f85fbbc3a20d8b961c5518d90f1d67f679ced00daniel@transgaming.com
800bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
801bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
802f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    {
803bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3 &&
804bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES2TexImageParameters(context, target, level, GL_NONE, true, true,
805bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           xoffset, yoffset, width, height, 0, GL_NONE, GL_NONE, data))
806bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
807bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
808bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
809f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
810bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() >= 3 &&
811bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES3TexImageParameters(context, target, level, GL_NONE, true, true,
812bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           xoffset, yoffset, 0, width, height, 1, 0, GL_NONE, GL_NONE, data))
813f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org        {
814bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
815bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
816bbc57796e8e2c44591442279e9b95de2a25f39a7daniel@transgaming.com
8175d601382b51c29d1670b58c01360416bd929842dGeoff Lang        const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(format);
8185d601382b51c29d1670b58c01360416bd929842dGeoff Lang        if (imageSize < 0 || static_cast<GLuint>(imageSize) != formatInfo.computeBlockSize(GL_UNSIGNED_BYTE, width, height))
819bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
820b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
821b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
822bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8231f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.com
824bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
825bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
826bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D:
827f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org            {
828bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2D *texture = context->getTexture2D();
829bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->subImageCompressed(level, xoffset, yoffset, width, height, format, imageSize, data);
830f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org            }
831bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
832b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com
833bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
834bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
835bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
836bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
837bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
838bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
8393f85fbbc3a20d8b961c5518d90f1d67f679ced00daniel@transgaming.com            {
840bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
841bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->subImageCompressed(target, level, xoffset, yoffset, width, height, format, imageSize, data);
842b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com            }
843bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
844bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
845bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
846b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
847b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
848f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org        }
849f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    }
850f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org}
8513f85fbbc3a20d8b961c5518d90f1d67f679ced00daniel@transgaming.com
852f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.orgvoid __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
853f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org{
854f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
855f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",
856f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          target, level, internalformat, x, y, width, height, border);
857b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com
858bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
859bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
860f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    {
861bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3 &&
862bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES2CopyTexImageParameters(context, target, level, internalformat, false,
863bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                               0, 0, x, y, width, height, border))
864bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
865bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
866bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
86764a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com
868bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() >= 3 &&
869bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES3CopyTexImageParameters(context, target, level, internalformat, false,
870bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                               0, 0, 0, x, y, width, height, border))
871f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org        {
872bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
873bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
874f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
875bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebuffer = context->getState().getReadFramebuffer();
876bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
877bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
878bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
879bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D:
8803f85fbbc3a20d8b961c5518d90f1d67f679ced00daniel@transgaming.com            {
881bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2D *texture = context->getTexture2D();
882bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->copyImage(level, internalformat, x, y, width, height, framebuffer);
883f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org            }
884bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
885f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
886bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
887bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
888bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
889bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
890bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
891bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
892f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org            {
893bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
894bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->copyImage(target, level, internalformat, x, y, width, height, framebuffer);
895b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com            }
896bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
897bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
898b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
899b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
900b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
901b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com        }
9024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
9034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
9044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
9054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
9064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
9070f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
908b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
9094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com          target, level, xoffset, yoffset, x, y, width, height);
9104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
911bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
912bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
9134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
914bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3 &&
915bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES2CopyTexImageParameters(context, target, level, GL_NONE, true,
916bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                               xoffset, yoffset, x, y, width, height, 0))
917bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
918bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
919bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
920b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com
921bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() >= 3 &&
922bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES3CopyTexImageParameters(context, target, level, GL_NONE, true,
923bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                               xoffset, yoffset, 0, x, y, width, height, 0))
924b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com        {
925bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
926bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
9271f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.com
928bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebuffer = context->getState().getReadFramebuffer();
929bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
930bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
931bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
932bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D:
933b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com            {
934bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2D *texture = context->getTexture2D();
935bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->copySubImage(target, level, xoffset, yoffset, 0, x, y, width, height, framebuffer);
936b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com            }
937bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
938b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com
939bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
940bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
941bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
942bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
943bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
944bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
9453f85fbbc3a20d8b961c5518d90f1d67f679ced00daniel@transgaming.com            {
946bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
947bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->copySubImage(target, level, xoffset, yoffset, 0, x, y, width, height, framebuffer);
948b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com            }
949bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
950b8c28eddec129967128e458a0ceb4fa4cacdaa77daniel@transgaming.com
951bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
952b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
953b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
954bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
9554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
9564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
9574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
9584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLuint __stdcall glCreateProgram(void)
9594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
9600f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("()");
9614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
962bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
963bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
9644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
965bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return context->createProgram();
9664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
9674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
9684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return 0;
9694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
9704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
9714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLuint __stdcall glCreateShader(GLenum type)
9724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
9730f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum type = 0x%X)", type);
9744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
975bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
976bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
977bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
978bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (type)
9794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
980bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAGMENT_SHADER:
981bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_VERTEX_SHADER:
982bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return context->createShader(type);
983b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
984bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
985b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
986b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return 0;
9874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
9884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
9894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
9904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return 0;
9914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
9924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
9934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glCullFace(GLenum mode)
9944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
9950f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum mode = 0x%X)", mode);
9964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
997b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    gl::Context *context = gl::getNonLostContext();
998b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
9994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1000b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (mode)
10014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1002b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRONT:
1003b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_BACK:
1004b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRONT_AND_BACK:
1005b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
10064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1007b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
1008b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
1009b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
10104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
1011b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1012b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        context->getState().setCullMode(mode);
10134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
10144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
10154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
10164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDeleteBuffers(GLsizei n, const GLuint* buffers)
10174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
10180f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, const GLuint* buffers = 0x%0.8p)", n, buffers);
10194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1020bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1021bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1022bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1023b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1024b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1025b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1026b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1027b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1028b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1029bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
10304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1031bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->deleteBuffer(buffers[i]);
10324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
10334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
10344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
10354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1036d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.orgvoid __stdcall glDeleteFencesNV(GLsizei n, const GLuint* fences)
1037d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org{
10380f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, const GLuint* fences = 0x%0.8p)", n, fences);
1039d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
1040bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1041bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1042bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1043b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1044b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1045b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1046b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1047b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1048b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1049bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
1050d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {
1051bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->deleteFenceNV(fences[i]);
1052d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        }
1053d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    }
1054d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org}
1055d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
10564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
10574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
10580f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, const GLuint* framebuffers = 0x%0.8p)", n, framebuffers);
10594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1060bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1061bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1062bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1063b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1064b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1065b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1066b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1067b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1068b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1069bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
10704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1071bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (framebuffers[i] != 0)
10724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
1073bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                context->deleteFramebuffer(framebuffers[i]);
10744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
10754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
10764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
10774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
10784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
10794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDeleteProgram(GLuint program)
10804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
10810f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d)", program);
10824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1083bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1084bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1085bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1086b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (program == 0)
1087b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1088b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1089b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1090b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1091bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!context->getProgram(program))
10924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1093bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if(context->getShader(program))
109475401e61fb26eb68681287697db11aed5ed14edbdaniel@transgaming.com            {
1095b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
1096b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
1097bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
1098bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
1099bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
1100b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
1101b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
110275401e61fb26eb68681287697db11aed5ed14edbdaniel@transgaming.com            }
11034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
1104bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1105bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->deleteProgram(program);
11064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
11074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
11084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
110986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.comvoid __stdcall glDeleteQueriesEXT(GLsizei n, const GLuint *ids)
111086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com{
111186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    EVENT("(GLsizei n = %d, const GLuint *ids = 0x%0.8p)", n, ids);
111286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
1113bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1114bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1115bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1116b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1117b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1118b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1119b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1120b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1121b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1122bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
112386bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {
1124bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->deleteQuery(ids[i]);
112586bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        }
112686bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    }
112786bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com}
112886bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
11294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
11304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
11310f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, const GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);
11324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1133bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1134bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1135bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1136b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1137b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1138b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1139b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1140b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1141b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1142bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
11434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1144bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->deleteRenderbuffer(renderbuffers[i]);
11454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
11464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
11474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
11484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
11494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDeleteShader(GLuint shader)
11504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
11510f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint shader = %d)", shader);
11524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1153bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1154bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1155bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1156b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (shader == 0)
1157b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1158b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1159b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1160b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1161bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!context->getShader(shader))
11624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1163bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if(context->getProgram(shader))
116475401e61fb26eb68681287697db11aed5ed14edbdaniel@transgaming.com            {
1165b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
1166b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
1167bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
1168bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
1169bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
1170b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
1171b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
117275401e61fb26eb68681287697db11aed5ed14edbdaniel@transgaming.com            }
11734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
1174bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1175bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->deleteShader(shader);
11764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
11774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
11784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
11794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDeleteTextures(GLsizei n, const GLuint* textures)
11804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
11810f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, const GLuint* textures = 0x%0.8p)", n, textures);
11824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1183bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1184bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1185bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1186b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1187b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1188b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1189b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1190b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1191b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1192bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
11934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1194bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (textures[i] != 0)
11954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
1196bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                context->deleteTexture(textures[i]);
11974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
11984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
11994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
12004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
12014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
12024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDepthFunc(GLenum func)
12034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
12040f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum func = 0x%X)", func);
12054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1206bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1207bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
12084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1209b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (func)
1210b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1211b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_NEVER:
1212b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ALWAYS:
1213b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_LESS:
1214b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_LEQUAL:
1215b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_EQUAL:
1216b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_GREATER:
1217b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_GEQUAL:
1218b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_NOTEQUAL:
1219b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->getState().setDepthFunc(func);
1220b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
1221b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1222b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
1223b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
1224b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1225b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
12264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
12274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
12284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
12294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDepthMask(GLboolean flag)
12304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
1231a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLboolean flag = %u)", flag);
12324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1233bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1234bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
12354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1236bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setDepthMask(flag != GL_FALSE);
12374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
12384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
12394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
12404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDepthRangef(GLclampf zNear, GLclampf zFar)
12414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
12420f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLclampf zNear = %f, GLclampf zFar = %f)", zNear, zFar);
12434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1244bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1245bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
12464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1247bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setDepthRange(zNear, zFar);
12484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
12494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
12504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
12514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDetachShader(GLuint program, GLuint shader)
12524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
12530f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLuint shader = %d)", program, shader);
12544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1255bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1256bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
12574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1258bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
1259bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Shader *shaderObject = context->getShader(shader);
126073c2c2eddc2a114c7e37702110d02748542627c6daniel@transgaming.com
1261bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
1262bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1263bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            gl::Shader *shaderByProgramHandle;
1264bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            shaderByProgramHandle = context->getShader(program);
1265bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (!shaderByProgramHandle)
126673c2c2eddc2a114c7e37702110d02748542627c6daniel@transgaming.com            {
1267b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
1268b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
126973c2c2eddc2a114c7e37702110d02748542627c6daniel@transgaming.com            }
1270bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
12714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
1272b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
1273b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
12744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
1275bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
12764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1277bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!shaderObject)
1278bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1279bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            gl::Program *programByShaderHandle = context->getProgram(shader);
1280bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (!programByShaderHandle)
1281bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
1282b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
1283b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
1284bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
1285bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
12864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
1287b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
1288b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
12894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
12904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
1291bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1292bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject->detachShader(shaderObject))
1293bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1294b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
1295b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1296bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
12974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
12984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
12994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
13004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDisable(GLenum cap)
13014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
13020f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum cap = 0x%X)", cap);
13034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1304bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1305bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1306bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1307bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidCap(context, cap))
13084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1309b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
1310b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
13114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
1312bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1313bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setEnableFeature(cap, false);
13144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
13154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
13164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
13174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDisableVertexAttribArray(GLuint index)
13184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
13190f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d)", index);
13204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1321bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1322bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
13234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1324b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
1325b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1326b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1327b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1328b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1329b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1330bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setEnableVertexAttribArray(index, false);
13314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
13324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
13334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
13344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glDrawArrays(GLenum mode, GLint first, GLsizei count)
13354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
13360f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);
13374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1338bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1339bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1340bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
13412b97681b9ac01909bc60f5c6caecef3599b2acf9Jamie Madill        if (!ValidateDrawArrays(context, mode, first, count, 0))
13424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1343bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
13444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
1345bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1346bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->drawArrays(mode, first, count, 0);
13474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
13484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
13494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1350d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.comvoid __stdcall glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
1351d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com{
1352d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com    EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d, GLsizei primcount = %d)", mode, first, count, primcount);
1353d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com
1354bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1355bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1356bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
135787a93308da237626325d13339565d7136125ed0dGeoff Lang        if (!ValidateDrawArraysInstancedANGLE(context, mode, first, count, primcount))
1358d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com        {
1359bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
1360d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com        }
1361bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1362bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->drawArrays(mode, first, count, primcount);
1363d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com    }
1364d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com}
1365d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com
1366fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
13674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
13680f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = 0x%0.8p)",
1369b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          mode, count, type, indices);
13704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1371bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1372bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1373bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
13742b97681b9ac01909bc60f5c6caecef3599b2acf9Jamie Madill        rx::RangeUI indexRange;
13752b97681b9ac01909bc60f5c6caecef3599b2acf9Jamie Madill        if (!ValidateDrawElements(context, mode, count, type, indices, 0, &indexRange))
13764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1377bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
13784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
1379bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
13802b97681b9ac01909bc60f5c6caecef3599b2acf9Jamie Madill        context->drawElements(mode, count, type, indices, 0, indexRange);
13814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
13824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
13834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1384d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.comvoid __stdcall glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount)
1385d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com{
1386d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com    EVENT("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = 0x%0.8p, GLsizei primcount = %d)",
1387d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com          mode, count, type, indices, primcount);
1388d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com
1389bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1390bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1391bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
13922b97681b9ac01909bc60f5c6caecef3599b2acf9Jamie Madill        rx::RangeUI indexRange;
139387a93308da237626325d13339565d7136125ed0dGeoff Lang        if (!ValidateDrawElementsInstancedANGLE(context, mode, count, type, indices, primcount, &indexRange))
1394d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com        {
1395bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
1396d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com        }
1397bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
13982b97681b9ac01909bc60f5c6caecef3599b2acf9Jamie Madill        context->drawElements(mode, count, type, indices, primcount, indexRange);
1399d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com    }
1400d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com}
1401d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com
14024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glEnable(GLenum cap)
14034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
14040f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum cap = 0x%X)", cap);
14054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1406bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1407bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1408bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1409bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidCap(context, cap))
14104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1411b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
1412b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
14134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
1414bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1415bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setEnableFeature(cap, true);
14164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
14174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
14184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
14194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glEnableVertexAttribArray(GLuint index)
14204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
14210f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d)", index);
14224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1423bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1424bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
14254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1426b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
1427b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1428b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1429b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1430b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1431b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1432bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setEnableVertexAttribArray(index, true);
14334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
14344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
14354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
143686bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.comvoid __stdcall glEndQueryEXT(GLenum target)
143786bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com{
143886bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    EVENT("GLenum target = 0x%X)", target);
143986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
1440bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1441bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1442bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1443bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateEndQuery(context, target))
144486bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {
1445bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
144686bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        }
1447bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
14485aad96735332d3c033a8212d96899173631653c5Geoff Lang        gl::Error error = context->endQuery(target);
14495aad96735332d3c033a8212d96899173631653c5Geoff Lang        if (error.isError())
14505aad96735332d3c033a8212d96899173631653c5Geoff Lang        {
14515aad96735332d3c033a8212d96899173631653c5Geoff Lang            context->recordError(error);
14525aad96735332d3c033a8212d96899173631653c5Geoff Lang            return;
14535aad96735332d3c033a8212d96899173631653c5Geoff Lang        }
145486bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    }
145586bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com}
145686bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
1457d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.orgvoid __stdcall glFinishFenceNV(GLuint fence)
1458d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org{
14590f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint fence = %d)", fence);
1460d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
1461bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1462bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1463d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    {
1464bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::FenceNV *fenceObject = context->getFenceNV(fence);
1465d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
1466bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (fenceObject == NULL)
1467d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {
1468b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
1469b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1470bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1471fb9a7409515cb0a8f9926974511ff486361909d7Jamie Madill
1472bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (fenceObject->isFence() != GL_TRUE)
1473bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1474b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
1475b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1476d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        }
1477bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1478bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        fenceObject->finishFence();
1479d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    }
1480d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org}
1481d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
14824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glFinish(void)
14834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
14840f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("()");
14854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1486bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1487bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
14884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1489bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->sync(true);
14904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
14914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
14924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
14934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glFlush(void)
14944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
14950f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("()");
14964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1497bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1498bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
14994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1500bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->sync(false);
15014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
15024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
15034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
15044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
15054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
15060f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, "
1507b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          "GLuint renderbuffer = %d)", target, attachment, renderbuffertarget, renderbuffer);
15084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1509bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1510bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1511bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1512b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidFramebufferTarget(target) || (renderbuffertarget != GL_RENDERBUFFER && renderbuffer != 0))
1513b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1514b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
1515b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1516b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1517b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1518bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidateFramebufferRenderbufferParameters(context, target, attachment, renderbuffertarget, renderbuffer))
15194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1520bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
1521bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
15224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1523bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebuffer = context->getState().getTargetFramebuffer(target);
1524bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(framebuffer);
15254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1526bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
1527bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1528bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
1529bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            framebuffer->setColorbuffer(colorAttachment, GL_RENDERBUFFER, renderbuffer, 0, 0);
1530bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1531bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
1532bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1533bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            switch (attachment)
153489ae1133850885c5812a78e9f8d00447acfcbd55shannon.woods%transgaming.com@gtempaccount.com            {
1535bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_DEPTH_ATTACHMENT:
1536bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer, 0, 0);
1537bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
1538bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_STENCIL_ATTACHMENT:
1539bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer, 0, 0);
1540bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
1541bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_DEPTH_STENCIL_ATTACHMENT:
1542bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                framebuffer->setDepthStencilBuffer(GL_RENDERBUFFER, renderbuffer, 0, 0);
1543bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
1544bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              default:
1545bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                UNREACHABLE();
1546bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
15474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
15484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
15494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
15504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
15514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
15524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
15534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
15540f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "
1555b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          "GLuint texture = %d, GLint level = %d)", target, attachment, textarget, texture, level);
15564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1557bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1558bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
15594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1560bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateFramebufferTexture2D(context, target, attachment, textarget, texture, level))
15614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1562bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
1563bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
156489ae1133850885c5812a78e9f8d00447acfcbd55shannon.woods%transgaming.com@gtempaccount.com
1565bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (texture == 0)
1566bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1567bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            textarget = GL_NONE;
1568bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
15694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1570bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebuffer = context->getState().getTargetFramebuffer(target);
15714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1572bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
1573bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1574bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
1575bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            framebuffer->setColorbuffer(colorAttachment, textarget, texture, level, 0);
1576bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1577bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
1578bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1579bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            switch (attachment)
158089ae1133850885c5812a78e9f8d00447acfcbd55shannon.woods%transgaming.com@gtempaccount.com            {
1581bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_DEPTH_ATTACHMENT:         framebuffer->setDepthbuffer(textarget, texture, level, 0);        break;
1582bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_STENCIL_ATTACHMENT:       framebuffer->setStencilbuffer(textarget, texture, level, 0);      break;
1583bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_DEPTH_STENCIL_ATTACHMENT: framebuffer->setDepthStencilBuffer(textarget, texture, level, 0); break;
1584fbc09533f131522467c355cc4fcb1a8612edb7dedaniel@transgaming.com            }
15854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
15864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
15874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
15884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
15894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glFrontFace(GLenum mode)
15904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
15910f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum mode = 0x%X)", mode);
15924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1593b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    gl::Context *context = gl::getNonLostContext();
1594b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
15954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
1596b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (mode)
15974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1598b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CW:
1599b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_CCW:
1600b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->getState().setFrontFace(mode);
1601b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
1602b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
1603b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
1604b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
16054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
16064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
16074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
16084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
16094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGenBuffers(GLsizei n, GLuint* buffers)
16104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
16110f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, GLuint* buffers = 0x%0.8p)", n, buffers);
16124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1613bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1614bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1615bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1616b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1617b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1618b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1619b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1620b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1621b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1622bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
16234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1624bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            buffers[i] = context->createBuffer();
16254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
16264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
16274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
16284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
16294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGenerateMipmap(GLenum target)
16304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
16310f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X)", target);
16324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1633bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1634bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1635bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1636bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidTextureTarget(context, target))
16378fd99e2696eddc41732d84c3a35f057d51c2f9cfdaniel@transgaming.com        {
1638b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
1639b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1640bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1641ae4852a29c756bb856e3f10b541db2ed99c546d0Geoff Lang
1642bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture *texture = context->getTargetTexture(target);
164335d1501b7bcbacd7af96a65a52fb545c772e41bfJamie Madill
1644bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (texture == NULL)
1645bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1646b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
1647b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1648bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1649ae4852a29c756bb856e3f10b541db2ed99c546d0Geoff Lang
1650bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLenum internalFormat = texture->getBaseLevelInternalFormat();
1651bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        const gl::TextureCaps &formatCaps = context->getTextureCaps().get(internalFormat);
16525d601382b51c29d1670b58c01360416bd929842dGeoff Lang        const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat);
1653cec3590a151059813b91b33cd5e000c94f5bccaaGeoff Lang
1654bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // GenerateMipmap should not generate an INVALID_OPERATION for textures created with
1655bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // unsized formats or that are color renderable and filterable.  Since we do not track if
1656bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // the texture was created with sized or unsized format (only sized formats are stored),
1657bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // it is not possible to make sure the the LUMA formats can generate mipmaps (they should
1658bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // be able to) because they aren't color renderable.  Simply do a special case for LUMA
1659bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // textures since they're the only texture format that can be created with unsized formats
1660bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // that is not color renderable.  New unsized formats are unlikely to be added, since ES2
1661bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // was the last version to use add them.
1662bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        bool isLUMA = internalFormat == GL_LUMINANCE8_EXT ||
1663bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                      internalFormat == GL_LUMINANCE8_ALPHA8_EXT ||
1664bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                      internalFormat == GL_ALPHA8_EXT;
1665cbb8412af532f3d38ce190bc79d6307e1d46c697Geoff Lang
16665d601382b51c29d1670b58c01360416bd929842dGeoff Lang        if (formatInfo.depthBits > 0 || formatInfo.stencilBits > 0 || !formatCaps.filterable ||
16675d601382b51c29d1670b58c01360416bd929842dGeoff Lang            (!formatCaps.renderable && !isLUMA) || formatInfo.compressed)
1668bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1669b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
1670b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1671bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1672ae4852a29c756bb856e3f10b541db2ed99c546d0Geoff Lang
1673bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // GL_EXT_sRGB does not support mipmap generation on sRGB textures
16745d601382b51c29d1670b58c01360416bd929842dGeoff Lang        if (context->getClientVersion() == 2 && formatInfo.colorEncoding == GL_SRGB)
1675bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1676b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
1677b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1678bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
167905b050286d80d2eddc54952b9e8d7b6e3a48e380Geoff Lang
1680bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Non-power of 2 ES2 check
1681bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!context->getExtensions().textureNPOT && (!gl::isPow2(texture->getBaseLevelWidth()) || !gl::isPow2(texture->getBaseLevelHeight())))
1682bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1683bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            ASSERT(context->getClientVersion() <= 2 && (target == GL_TEXTURE_2D || target == GL_TEXTURE_CUBE_MAP));
1684b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
1685b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1686bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1687c1f8b16bd24f7caa6abb2edd5f20079b7a63dfc0Jamie Madill
1688bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Cube completeness check
1689bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (target == GL_TEXTURE_CUBE_MAP)
1690bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1691bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            gl::TextureCubeMap *textureCube = static_cast<gl::TextureCubeMap *>(texture);
1692bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (!textureCube->isCubeComplete())
1693c1f8b16bd24f7caa6abb2edd5f20079b7a63dfc0Jamie Madill            {
1694b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
1695b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
1696c1f8b16bd24f7caa6abb2edd5f20079b7a63dfc0Jamie Madill            }
16978fd99e2696eddc41732d84c3a35f057d51c2f9cfdaniel@transgaming.com        }
1698bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1699bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        texture->generateMipmaps();
17004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
17014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
17024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1703d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.orgvoid __stdcall glGenFencesNV(GLsizei n, GLuint* fences)
1704d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org{
17050f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, GLuint* fences = 0x%0.8p)", n, fences);
1706d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
1707bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1708bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1709bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1710b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1711b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1712b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1713b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1714b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1715b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1716bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
1717d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {
1718bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            fences[i] = context->createFenceNV();
1719d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        }
1720d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    }
1721d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org}
1722d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
17234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGenFramebuffers(GLsizei n, GLuint* framebuffers)
17244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
17250f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, GLuint* framebuffers = 0x%0.8p)", n, framebuffers);
17264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1727bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1728bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1729bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1730b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1731b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1732b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1733b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1734b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1735b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1736bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
17374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1738bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            framebuffers[i] = context->createFramebuffer();
17394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
17404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
17414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
17424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
174386bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.comvoid __stdcall glGenQueriesEXT(GLsizei n, GLuint* ids)
174486bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com{
174586bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    EVENT("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);
174686bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
1747bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1748bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1749bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1750bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (n < 0)
175186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {
1752b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1753b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1754bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
175537dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
1756bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (GLsizei i = 0; i < n; i++)
1757bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1758bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            ids[i] = context->createQuery();
175986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        }
176086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    }
176186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com}
176286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
17634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
17644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
17650f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);
17664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1767bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1768bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1769bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1770b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1771b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1772b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1773b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1774b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1775b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1776bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
17774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1778bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            renderbuffers[i] = context->createRenderbuffer();
17794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
17804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
17814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
17824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
17834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGenTextures(GLsizei n, GLuint* textures)
17844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
17851fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    EVENT("(GLsizei n = %d, GLuint* textures = 0x%0.8p)", n, textures);
17864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1787bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1788bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1789bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1790b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (n < 0)
1791b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1792b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1793b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1794b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1795b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1796bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
17974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1798bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            textures[i] = context->createTexture();
17994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
18004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
18014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
18024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
180385423183fb4153007c98f3fb0ed166c673890cccdaniel@transgaming.comvoid __stdcall glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
18044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
18050f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, GLsizei *length = 0x%0.8p, "
180685423183fb4153007c98f3fb0ed166c673890cccdaniel@transgaming.com          "GLint *size = 0x%0.8p, GLenum *type = %0.8p, GLchar *name = %0.8p)",
18074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com          program, index, bufsize, length, size, type, name);
18084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1809bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1810bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1811bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1812b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (bufsize < 0)
1813b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1814b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1815b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1816b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1817b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1818bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
181985423183fb4153007c98f3fb0ed166c673890cccdaniel@transgaming.com
1820bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
1821bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1822bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
182385423183fb4153007c98f3fb0ed166c673890cccdaniel@transgaming.com            {
1824b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
1825b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
182685423183fb4153007c98f3fb0ed166c673890cccdaniel@transgaming.com            }
1827bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
182885423183fb4153007c98f3fb0ed166c673890cccdaniel@transgaming.com            {
1829b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
1830b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
183185423183fb4153007c98f3fb0ed166c673890cccdaniel@transgaming.com            }
1832bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
183385423183fb4153007c98f3fb0ed166c673890cccdaniel@transgaming.com
1834bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= (GLuint)programObject->getActiveAttributeCount())
1835bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1836b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1837b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
183885423183fb4153007c98f3fb0ed166c673890cccdaniel@transgaming.com        }
1839bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1840bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programObject->getActiveAttribute(index, bufsize, length, size, type, name);
18414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
18424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
18434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1844fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
18454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
18460f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, "
1847fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.com          "GLsizei* length = 0x%0.8p, GLint* size = 0x%0.8p, GLenum* type = 0x%0.8p, GLchar* name = 0x%0.8p)",
18484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com          program, index, bufsize, length, size, type, name);
18494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
18504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1851bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1852bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1853bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1854b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (bufsize < 0)
1855b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1856b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1857b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1858b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1859b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1860bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
186109fbfefa893ce612518580d76f0ddb79cef45384daniel@transgaming.com
1862bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
1863bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1864bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
186509fbfefa893ce612518580d76f0ddb79cef45384daniel@transgaming.com            {
1866b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
1867b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
186809fbfefa893ce612518580d76f0ddb79cef45384daniel@transgaming.com            }
1869bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
187009fbfefa893ce612518580d76f0ddb79cef45384daniel@transgaming.com            {
1871b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
1872b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
187309fbfefa893ce612518580d76f0ddb79cef45384daniel@transgaming.com            }
1874bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
187509fbfefa893ce612518580d76f0ddb79cef45384daniel@transgaming.com
1876bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= (GLuint)programObject->getActiveUniformCount())
1877bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1878b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1879b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
188009fbfefa893ce612518580d76f0ddb79cef45384daniel@transgaming.com        }
1881bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1882bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programObject->getActiveUniform(index, bufsize, length, size, type, name);
18834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
18844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
18854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
18864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
18874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
18880f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLsizei maxcount = %d, GLsizei* count = 0x%0.8p, GLuint* shaders = 0x%0.8p)",
1889b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          program, maxcount, count, shaders);
18904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1891bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1892bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1893bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1894b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (maxcount < 0)
1895b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
1896b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
1897b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1898b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
1899b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
1900bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
19016c78521ea3e781a39878ce5f4693af72d08e4cdfdaniel@transgaming.com
1902bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
1903bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1904bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
19056c78521ea3e781a39878ce5f4693af72d08e4cdfdaniel@transgaming.com            {
1906b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
1907b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
1908bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
1909bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
1910bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
1911b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
1912b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
19136c78521ea3e781a39878ce5f4693af72d08e4cdfdaniel@transgaming.com            }
19146c78521ea3e781a39878ce5f4693af72d08e4cdfdaniel@transgaming.com        }
1915bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1916bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return programObject->getAttachedShaders(maxcount, count, shaders);
19174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
19184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
19194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1920b119668772ee960d8fc9e3846617c59530b90d5fGeoff LangGLint __stdcall glGetAttribLocation(GLuint program, const GLchar* name)
19214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
19220f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, const GLchar* name = %s)", program, name);
19234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1924bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1925bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1926bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1927bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
19284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1929bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
1930bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1931bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
19324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
1933b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
1934b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return -1;
19354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
1936bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
1937cf4aa8790c19e200b9a667e56d1c8cea45db5417daniel@transgaming.com            {
1938b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
1939b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return -1;
1940cf4aa8790c19e200b9a667e56d1c8cea45db5417daniel@transgaming.com            }
1941bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1942cf4aa8790c19e200b9a667e56d1c8cea45db5417daniel@transgaming.com
1943bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
1944bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject->isLinked() || !programBinary)
1945bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1946b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
1947b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return -1;
19484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
1949bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
1950bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return programBinary->getAttributeLocation(name);
19514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
19524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
19534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return -1;
19544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
19554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
19564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetBooleanv(GLenum pname, GLboolean* params)
19574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
19580f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum pname = 0x%X, GLboolean* params = 0x%0.8p)",  pname, params);
19594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1960bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1961bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1962bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1963bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLenum nativeType;
1964bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        unsigned int numParams = 0;
1965bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateStateQuery(context, pname, &nativeType, &numParams))
19664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
1967bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
1968bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1969777f26727bd71c435f93387fd593e3790544bb49daniel@transgaming.com
1970bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (nativeType == GL_BOOL)
1971bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1972bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getBooleanv(pname, params);
1973bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1974bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
1975bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1976bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            CastStateValues(context, nativeType, pname, numParams, params);
19774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
19784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
19794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
19804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
19814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
19824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
19830f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);
19844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1985bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
1986bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
1987bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
1988bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
1989aa0ccbd9f0397bf6332c990af1c9bce2cbe241cbdaniel@transgaming.com        {
1990b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
1991b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1992bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
1993aa0ccbd9f0397bf6332c990af1c9bce2cbe241cbdaniel@transgaming.com
1994bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferParameter(context, pname))
1995bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
1996b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
1997b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
1998bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
199970656a64851b8014a325dd711297054032e466c1Jamie Madill
2000bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *buffer = context->getState().getTargetBuffer(target);
20018c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill
2002bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!buffer)
2003bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2004bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // A null buffer means that "0" is bound to the requested buffer target
2005b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
2006b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2007bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2008aa0ccbd9f0397bf6332c990af1c9bce2cbe241cbdaniel@transgaming.com
2009bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
2010bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2011bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_USAGE:
2012bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = static_cast<GLint>(buffer->getUsage());
2013bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2014bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_SIZE:
2015bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = gl::clampCast<GLint>(buffer->getSize());
2016bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2017bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_ACCESS_FLAGS:
2018bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = buffer->getAccessFlags();
2019bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2020bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_MAPPED:
2021bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = static_cast<GLint>(buffer->isMapped());
2022bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2023bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_MAP_OFFSET:
2024bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = gl::clampCast<GLint>(buffer->getMapOffset());
2025bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2026bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_MAP_LENGTH:
2027bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = gl::clampCast<GLint>(buffer->getMapLength());
2028bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2029bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default: UNREACHABLE(); break;
2030aa0ccbd9f0397bf6332c990af1c9bce2cbe241cbdaniel@transgaming.com        }
20314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
20324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
20334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
20344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLenum __stdcall glGetError(void)
20354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
20360f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("()");
20374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
20384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    gl::Context *context = gl::getContext();
20394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
20404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    if (context)
20414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
204282b289138e7a818d343429d52023e3e2e560142edaniel@transgaming.com        return context->getError();
20434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
20444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
20454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return GL_NO_ERROR;
20464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
20474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2048d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.orgvoid __stdcall glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)
2049d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org{
20500f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint fence = %d, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", fence, pname, params);
2051d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
2052bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2053bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2054bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
2055bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::FenceNV *fenceObject = context->getFenceNV(fence);
2056d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
2057bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (fenceObject == NULL)
2058bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2059b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
2060b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2061bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2062fb9a7409515cb0a8f9926974511ff486361909d7Jamie Madill
2063bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (fenceObject->isFence() != GL_TRUE)
2064bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2065b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
2066b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2067bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2068fb9a7409515cb0a8f9926974511ff486361909d7Jamie Madill
2069bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
2070bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2071bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FENCE_STATUS_NV:
2072bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FENCE_CONDITION_NV:
2073bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2074fb9a7409515cb0a8f9926974511ff486361909d7Jamie Madill
2075b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
2076b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2077b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2078d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        }
2079bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2080bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        params[0] = fenceObject->getFencei(pname);
2081d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    }
2082d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org}
2083d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
20844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetFloatv(GLenum pname, GLfloat* params)
20854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
20860f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", pname, params);
20874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2088bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2089bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2090bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
2091bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLenum nativeType;
2092bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        unsigned int numParams = 0;
2093bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateStateQuery(context, pname, &nativeType, &numParams))
209432e58cdedbee0b5add027c7d051faaac254724b8daniel@transgaming.com        {
2095bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2096bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2097777f26727bd71c435f93387fd593e3790544bb49daniel@transgaming.com
2098bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (nativeType == GL_FLOAT)
2099bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2100bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getFloatv(pname, params);
2101bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2102bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
2103bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2104bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            CastStateValues(context, nativeType, pname, numParams, params);
210532e58cdedbee0b5add027c7d051faaac254724b8daniel@transgaming.com        }
21064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
21074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
21084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
21094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
21104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
21110f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",
2112b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          target, attachment, pname, params);
21134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2114bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2115bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
21164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
2117bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidFramebufferTarget(target))
2118bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2119b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2120b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2121bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2122bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2123bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        int clientVersion = context->getClientVersion();
2124bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2125bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
2126bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2127bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
2128bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
2129bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
2130bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
2131bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2132b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2133bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
2134bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (clientVersion < 3 && !context->getExtensions().sRGB)
2135bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2136b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2137b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2138bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
2139bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2140b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2141bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
2142bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
2143bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
2144bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
2145bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
2146bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
2147bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
2148bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
2149bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (clientVersion < 3)
2150bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2151b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2152b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2153bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
2154bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2155b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2156bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
2157b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2158b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2159bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
21604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2161bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Determine if the attachment is a valid enum
2162bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (attachment)
21634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
2164bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BACK:
2165bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_FRONT:
2166bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_DEPTH:
2167bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_STENCIL:
2168bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_DEPTH_STENCIL_ATTACHMENT:
2169bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (clientVersion < 3)
21704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
2171b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2172b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
21734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
2174bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
21754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2176bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_DEPTH_ATTACHMENT:
2177bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_STENCIL_ATTACHMENT:
2178bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
21791e3fa74d7cc85c6758aa28330dccfb3cf79b57eeJamie Madill
2180bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
2181bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (attachment < GL_COLOR_ATTACHMENT0_EXT ||
2182bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                (attachment - GL_COLOR_ATTACHMENT0_EXT) >= context->getCaps().maxColorAttachments)
2183c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com            {
2184b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2185b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2186a27ff1eeaf40f6d509ad8ec978f27f9fd55c4315daniel@transgaming.com            }
2187bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2188bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2189bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2190bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLuint framebufferHandle = context->getState().getTargetFramebuffer(target)->id();
2191bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebuffer = context->getFramebuffer(framebufferHandle);
2192bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2193bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (framebufferHandle == 0)
2194bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2195bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (clientVersion < 3)
2196bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2197b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
2198b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2199bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
2200646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2201646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang            switch (attachment)
2202a27ff1eeaf40f6d509ad8ec978f27f9fd55c4315daniel@transgaming.com            {
2203646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang              case GL_BACK:
22043810bee333f4e7bd8980cbe5a180a3f4e383bde9Jamie Madill              case GL_DEPTH:
2205646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang              case GL_STENCIL:
2206646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang                break;
2207b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2208646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang              default:
2209b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
2210b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2211c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com            }
2212bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2213bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
2214bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2215bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
2216c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com            {
2217bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                // Valid attachment query
2218646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang            }
2219646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang            else
2220646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang            {
2221bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                switch (attachment)
2222646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang                {
2223bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                  case GL_DEPTH_ATTACHMENT:
2224bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                  case GL_STENCIL_ATTACHMENT:
2225bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                    break;
2226b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2227bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                  case GL_DEPTH_STENCIL_ATTACHMENT:
2228bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                    if (framebuffer->hasValidDepthStencil())
222955ba29c54fb10f88c6dcdd48c6704f2847c6b9caGeoff Lang                    {
2230b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                        context->recordError(gl::Error(GL_INVALID_OPERATION));
2231b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                        return;
223255ba29c54fb10f88c6dcdd48c6704f2847c6b9caGeoff Lang                    }
2233bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                    break;
2234b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2235bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                  default:
2236b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_OPERATION));
2237b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
223889ae1133850885c5812a78e9f8d00447acfcbd55shannon.woods%transgaming.com@gtempaccount.com                }
2239c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com            }
2240bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2241c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com
2242bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLenum attachmentType = GL_NONE;
2243bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLuint attachmentHandle = 0;
2244bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLuint attachmentLevel = 0;
2245bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLuint attachmentLayer = 0;
2246e92a3546da271f33110714508529fef7306c4656Jamie Madill
2247bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        const gl::FramebufferAttachment *attachmentObject = framebuffer->getAttachment(attachment);
2248e92a3546da271f33110714508529fef7306c4656Jamie Madill
2249bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (attachmentObject)
2250bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2251bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            attachmentType = attachmentObject->type();
2252bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            attachmentHandle = attachmentObject->id();
2253bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            attachmentLevel = attachmentObject->mipLevel();
2254bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            attachmentLayer = attachmentObject->layer();
2255bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2256e92a3546da271f33110714508529fef7306c4656Jamie Madill
2257bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLenum attachmentObjectType;   // Type category
2258bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (framebufferHandle == 0)
2259bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2260bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            attachmentObjectType = GL_FRAMEBUFFER_DEFAULT;
2261bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2262bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else if (attachmentType == GL_NONE || attachmentType == GL_RENDERBUFFER)
2263bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2264bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            attachmentObjectType = attachmentType;
2265bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2266bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else if (gl::ValidTexture2DDestinationTarget(context, attachmentType))
2267bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2268bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            attachmentObjectType = GL_TEXTURE;
2269bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2270bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
2271bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2272bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            UNREACHABLE();
2273bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2274bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2275c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com
2276bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (attachmentObjectType == GL_NONE)
2277bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2278bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // ES 2.0.25 spec pg 127 states that if the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
2279bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // is NONE, then querying any other pname will generate INVALID_ENUM.
2280646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2281bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // ES 3.0.2 spec pg 235 states that if the attachment type is none,
2282bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME will return zero and be an
2283bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // INVALID_OPERATION for all other pnames
2284646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2285bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            switch (pname)
2286bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2287bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
2288bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObjectType;
2289bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2290646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2291bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
2292bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                if (clientVersion < 3)
2293bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                {
2294b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_ENUM));
2295b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
2296bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                }
2297bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = 0;
2298bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2299646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2300bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              default:
2301bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                if (clientVersion < 3)
2302bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                {
2303b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_ENUM));
2304b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
2305bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                }
2306bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                else
2307bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                {
2308b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_OPERATION));
2309b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
2310c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com                }
2311646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang            }
2312bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2313bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
2314bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2315bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            ASSERT(attachmentObjectType == GL_RENDERBUFFER || attachmentObjectType == GL_TEXTURE ||
2316bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                   attachmentObjectType == GL_FRAMEBUFFER_DEFAULT);
2317bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            ASSERT(attachmentObject != NULL);
2318bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2319bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            switch (pname)
2320646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang            {
2321bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
2322bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObjectType;
2323bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2324646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2325bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
2326bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                if (attachmentObjectType != GL_RENDERBUFFER && attachmentObjectType != GL_TEXTURE)
2327c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com                {
2328b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_ENUM));
2329b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
2330bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                }
2331bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentHandle;
2332bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2333646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2334bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
2335bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                if (attachmentObjectType != GL_TEXTURE)
2336bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                {
2337b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_ENUM));
2338b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
2339bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                }
2340bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentLevel;
2341bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2342646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2343bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
2344bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                if (attachmentObjectType != GL_TEXTURE)
2345bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                {
2346b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_ENUM));
2347b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
2348bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                }
2349bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = gl::IsCubemapTextureTarget(attachmentType) ? attachmentType : 0;
2350bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2351646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2352bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
2353bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObject->getRedSize();
2354bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2355646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2356bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
2357bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObject->getGreenSize();
2358bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2359646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2360bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
2361bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObject->getBlueSize();
2362bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2363646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2364bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
2365bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObject->getAlphaSize();
2366bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2367646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2368bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
2369bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObject->getDepthSize();
2370bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2371646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2372bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
2373bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObject->getStencilSize();
2374bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2375646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2376bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
2377ee85d1bb2f9988644654299a87f476357a5ac79dJamie Madill                if (attachment == GL_DEPTH_STENCIL_ATTACHMENT)
2378bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                {
2379b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_OPERATION));
2380b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
2381bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                }
2382bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObject->getComponentType();
2383bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2384646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2385bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
2386bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentObject->getColorEncoding();
2387bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2388646559fe6566898f53f52f28f5f89d8f0d6b0eb8Geoff Lang
2389bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
2390bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                if (attachmentObjectType != GL_TEXTURE)
2391bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                {
2392b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_ENUM));
2393b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
2394c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com                }
2395bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                *params = attachmentLayer;
2396bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2397bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2398bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              default:
2399bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                UNREACHABLE();
2400bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                break;
2401c46c9c0773fab800b8e3024be5ef8e608391cb0ddaniel@transgaming.com            }
24024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
24034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
24044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
24054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
240617f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.comGLenum __stdcall glGetGraphicsResetStatusEXT(void)
240717f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com{
240817f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com    EVENT("()");
240917f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com
2410bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getContext();
241117f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com
2412bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
241317f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com    {
2414bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return context->getResetStatus();
241517f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com    }
2416bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2417bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    return GL_NO_ERROR;
241817f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com}
241917f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com
24204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetIntegerv(GLenum pname, GLint* params)
24214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
24220f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum pname = 0x%X, GLint* params = 0x%0.8p)", pname, params);
24234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2424bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2425bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
24264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
2427bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLenum nativeType;
2428bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        unsigned int numParams = 0;
24294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2430bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateStateQuery(context, pname, &nativeType, &numParams))
24314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
2432bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2433bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
243479f2f45c96f23584831032c08ca44b841a206a39Jamie Madill
2435bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (nativeType == GL_INT)
2436bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2437bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getIntegerv(pname, params);
2438bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2439bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
2440bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2441bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            CastStateValues(context, nativeType, pname, numParams, params);
24424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
24434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
24444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
24454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
24464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetProgramiv(GLuint program, GLenum pname, GLint* params)
24474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
24480f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLenum pname = %d, GLint* params = 0x%0.8p)", program, pname, params);
24494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2450bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2451bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
24524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
2453bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
24544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2455bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
24564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
2457b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
2458b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2459bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2460e684b58a3d326fceb649ef5304a293dbfd643dbashannonwoods@chromium.org
2461bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
2462bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
24634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            switch (pname)
24644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
2465e684b58a3d326fceb649ef5304a293dbfd643dbashannonwoods@chromium.org              case GL_ACTIVE_UNIFORM_BLOCKS:
2466e684b58a3d326fceb649ef5304a293dbfd643dbashannonwoods@chromium.org              case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
24671b6edcb636b4ed9c473cca9774c5784768f7d346Geoff Lang              case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
24681b6edcb636b4ed9c473cca9774c5784768f7d346Geoff Lang              case GL_TRANSFORM_FEEDBACK_VARYINGS:
24691b6edcb636b4ed9c473cca9774c5784768f7d346Geoff Lang              case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
2470b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2471b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
24724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
24734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
2474bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2475bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
2476bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2477bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_DELETE_STATUS:
2478bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->isFlaggedForDeletion();
2479bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2480bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_LINK_STATUS:
2481bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->isLinked();
2482bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2483bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_VALIDATE_STATUS:
2484bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->isValidated();
2485bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2486bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_INFO_LOG_LENGTH:
2487bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getInfoLogLength();
2488bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2489bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_ATTACHED_SHADERS:
2490bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getAttachedShadersCount();
2491bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2492bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_ACTIVE_ATTRIBUTES:
2493bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getActiveAttributeCount();
2494bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2495bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
2496bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getActiveAttributeMaxLength();
2497bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2498bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_ACTIVE_UNIFORMS:
2499bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getActiveUniformCount();
2500bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2501bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_ACTIVE_UNIFORM_MAX_LENGTH:
2502bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getActiveUniformMaxLength();
2503bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2504bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_PROGRAM_BINARY_LENGTH_OES:
2505bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getProgramBinaryLength();
2506bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2507bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_ACTIVE_UNIFORM_BLOCKS:
2508bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getActiveUniformBlockCount();
2509bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2510bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
2511bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getActiveUniformBlockMaxLength();
2512bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2513bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
2514bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getTransformFeedbackBufferMode();
2515bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2516bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_VARYINGS:
2517bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getTransformFeedbackVaryingCount();
2518bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2519bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
2520bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = programObject->getTransformFeedbackVaryingMaxLength();
2521bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2522b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2523bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
2524b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2525b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2526bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
25274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
25284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
25294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2530fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
25314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
25320f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* infolog = 0x%0.8p)",
2533b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          program, bufsize, length, infolog);
25344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2535bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2536bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2537bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
2538b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (bufsize < 0)
2539b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
2540b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
2541b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2542b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
2543b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2544bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
2545cba5057cf320b691cda0ad2dedd65ff0db3981bcdaniel@transgaming.com
2546bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
2547bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2548b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
2549b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2550cba5057cf320b691cda0ad2dedd65ff0db3981bcdaniel@transgaming.com        }
2551bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2552bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programObject->getInfoLog(bufsize, length, infolog);
25534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
25544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
25554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
255686bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.comvoid __stdcall glGetQueryivEXT(GLenum target, GLenum pname, GLint *params)
255786bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com{
255886bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    EVENT("GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname, params);
255986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
2560bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2561bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2562bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
2563bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidQueryType(context, target))
256486bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {
2565b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2566b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2567bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
256837dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
2569bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
2570bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2571bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_CURRENT_QUERY_EXT:
2572bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            params[0] = context->getState().getActiveQueryId(target);
2573bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
257437dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
2575bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
2576b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2577b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
257886bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        }
257986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    }
258086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com}
258186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
258286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.comvoid __stdcall glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params)
258386bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com{
258486bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    EVENT("(GLuint id = %d, GLenum pname = 0x%X, GLuint *params = 0x%0.8p)", id, pname, params);
258586bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
2586bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2587bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
258886bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    {
2589bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Query *queryObject = context->getQuery(id, false, GL_NONE);
259086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
2591bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!queryObject)
259286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {
2593b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
2594b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2595bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
259686bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
2597bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getState().getActiveQueryId(queryObject->getType()) == id)
2598bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2599b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
2600b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2601bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
260286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
2603bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch(pname)
2604bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2605bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_QUERY_RESULT_EXT:
26065aad96735332d3c033a8212d96899173631653c5Geoff Lang            {
26075aad96735332d3c033a8212d96899173631653c5Geoff Lang                gl::Error error = queryObject->getResult(params);
26085aad96735332d3c033a8212d96899173631653c5Geoff Lang                if (error.isError())
26095aad96735332d3c033a8212d96899173631653c5Geoff Lang                {
26105aad96735332d3c033a8212d96899173631653c5Geoff Lang                    context->recordError(error);
26115aad96735332d3c033a8212d96899173631653c5Geoff Lang                    return;
26125aad96735332d3c033a8212d96899173631653c5Geoff Lang                }
26135aad96735332d3c033a8212d96899173631653c5Geoff Lang            }
2614bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
26155aad96735332d3c033a8212d96899173631653c5Geoff Lang
2616bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_QUERY_RESULT_AVAILABLE_EXT:
26175aad96735332d3c033a8212d96899173631653c5Geoff Lang            {
26185aad96735332d3c033a8212d96899173631653c5Geoff Lang                gl::Error error = queryObject->isResultAvailable(params);
26195aad96735332d3c033a8212d96899173631653c5Geoff Lang                if (error.isError())
26205aad96735332d3c033a8212d96899173631653c5Geoff Lang                {
26215aad96735332d3c033a8212d96899173631653c5Geoff Lang                    context->recordError(error);
26225aad96735332d3c033a8212d96899173631653c5Geoff Lang                    return;
26235aad96735332d3c033a8212d96899173631653c5Geoff Lang                }
26245aad96735332d3c033a8212d96899173631653c5Geoff Lang            }
2625bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
26265aad96735332d3c033a8212d96899173631653c5Geoff Lang
2627bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
2628b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2629b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
263086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        }
263186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    }
263286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com}
263386bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
26344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
26354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
26360f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);
26374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2638bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2639bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2640bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
2641bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (target != GL_RENDERBUFFER)
2642bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2643b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2644b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2645bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
26464901fca3aae82f4130bfe8e721891e806a14188edaniel@transgaming.com
2647bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getState().getRenderbufferId() == 0)
2648bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2649b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
2650b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2651bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
26524901fca3aae82f4130bfe8e721891e806a14188edaniel@transgaming.com
2653bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Renderbuffer *renderbuffer = context->getRenderbuffer(context->getState().getRenderbufferId());
26544901fca3aae82f4130bfe8e721891e806a14188edaniel@transgaming.com
2655bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
2656bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2657bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_WIDTH:           *params = renderbuffer->getWidth();          break;
2658bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_HEIGHT:          *params = renderbuffer->getHeight();         break;
2659bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_INTERNAL_FORMAT: *params = renderbuffer->getInternalFormat(); break;
2660bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_RED_SIZE:        *params = renderbuffer->getRedSize();        break;
2661bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_GREEN_SIZE:      *params = renderbuffer->getGreenSize();      break;
2662bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_BLUE_SIZE:       *params = renderbuffer->getBlueSize();       break;
2663bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_ALPHA_SIZE:      *params = renderbuffer->getAlphaSize();      break;
2664bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_DEPTH_SIZE:      *params = renderbuffer->getDepthSize();      break;
2665bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_STENCIL_SIZE:    *params = renderbuffer->getStencilSize();    break;
2666b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2667bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_RENDERBUFFER_SAMPLES_ANGLE:
2668bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (!context->getExtensions().framebufferMultisample)
26694901fca3aae82f4130bfe8e721891e806a14188edaniel@transgaming.com            {
2670b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2671b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
26724901fca3aae82f4130bfe8e721891e806a14188edaniel@transgaming.com            }
2673bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = renderbuffer->getSamples();
2674bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2675b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2676bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
2677b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2678b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
26794901fca3aae82f4130bfe8e721891e806a14188edaniel@transgaming.com        }
26804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
26814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
26824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
26834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
26844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
26850f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint shader = %d, GLenum pname = %d, GLint* params = 0x%0.8p)", shader, pname, params);
26864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2687bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2688bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
26894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
2690bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Shader *shaderObject = context->getShader(shader);
26914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2692bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!shaderObject)
26934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
2694b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
2695b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2696bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
26974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2698bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
2699bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2700bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_SHADER_TYPE:
2701bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = shaderObject->getType();
2702bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2703bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_DELETE_STATUS:
2704bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = shaderObject->isFlaggedForDeletion();
2705bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2706bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_COMPILE_STATUS:
2707bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = shaderObject->isCompiled() ? GL_TRUE : GL_FALSE;
2708bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2709bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_INFO_LOG_LENGTH:
2710bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = shaderObject->getInfoLogLength();
2711bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2712bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_SHADER_SOURCE_LENGTH:
2713bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = shaderObject->getSourceLength();
2714bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2715bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE:
2716bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = shaderObject->getTranslatedSourceLength();
2717bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
2718b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2719bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
2720b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2721b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
27224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
27234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
27244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
27254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2726fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
27274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
27280f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* infolog = 0x%0.8p)",
2729b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          shader, bufsize, length, infolog);
27304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2731bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2732bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2733bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
2734b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (bufsize < 0)
2735b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
2736b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
2737b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2738b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
2739b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2740bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Shader *shaderObject = context->getShader(shader);
2741cba5057cf320b691cda0ad2dedd65ff0db3981bcdaniel@transgaming.com
2742bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!shaderObject)
2743bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2744b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
2745b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2746cba5057cf320b691cda0ad2dedd65ff0db3981bcdaniel@transgaming.com        }
2747bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2748bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        shaderObject->getInfoLog(bufsize, length, infolog);
27494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
27504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
27514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
27524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
27534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
27540f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum shadertype = 0x%X, GLenum precisiontype = 0x%X, GLint* range = 0x%0.8p, GLint* precision = 0x%0.8p)",
2755b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          shadertype, precisiontype, range, precision);
27564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2757b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    gl::Context *context = gl::getNonLostContext();
2758b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
27594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
2760b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (shadertype)
2761b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
2762b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_VERTEX_SHADER:
2763b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRAGMENT_SHADER:
2764b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
2765b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2766b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
2767b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2768b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2769b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
2770b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2771b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (precisiontype)
2772b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
2773b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_LOW_FLOAT:
2774b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_MEDIUM_FLOAT:
2775b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_HIGH_FLOAT:
2776b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            // Assume IEEE 754 precision
2777b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            range[0] = 127;
2778b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            range[1] = 127;
2779b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            *precision = 23;
2780b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
2781b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2782b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_LOW_INT:
2783b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_MEDIUM_INT:
2784b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_HIGH_INT:
2785b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            // Some (most) hardware only supports single-precision floating-point numbers,
2786b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            // which can accurately represent integers up to +/-16777216
2787b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            range[0] = 24;
2788b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            range[1] = 24;
2789b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            *precision = 0;
2790b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
2791b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2792b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
2793b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2794b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2795b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
27964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
27974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
27984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2799fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
28004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
28010f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* source = 0x%0.8p)",
2802b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          shader, bufsize, length, source);
28034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2804bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2805bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2806bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
2807b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (bufsize < 0)
2808b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
2809b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
2810b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2811b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
2812b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2813bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Shader *shaderObject = context->getShader(shader);
2814cba5057cf320b691cda0ad2dedd65ff0db3981bcdaniel@transgaming.com
2815bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!shaderObject)
2816bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2817b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
2818b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2819cba5057cf320b691cda0ad2dedd65ff0db3981bcdaniel@transgaming.com        }
2820bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2821bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        shaderObject->getSource(bufsize, length, source);
28224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
28234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
28244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2825a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.comvoid __stdcall glGetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
2826a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com{
2827a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com    EVENT("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* source = 0x%0.8p)",
2828a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com          shader, bufsize, length, source);
2829a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com
2830bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2831bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
2832bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
2833b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (bufsize < 0)
2834b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
2835b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
2836b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2837b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
2838b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2839bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Shader *shaderObject = context->getShader(shader);
2840a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com
2841bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!shaderObject)
2842bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2843b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
2844b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2845a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com        }
2846bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
2847bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        shaderObject->getTranslatedSource(bufsize, length, source);
2848a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com    }
2849a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com}
2850a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com
28514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comconst GLubyte* __stdcall glGetString(GLenum name)
28524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
28530f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum name = 0x%X)", name);
28544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2855bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
28563e4c6004be276d5ec4a768d11f6b2f34b90450fcdaniel@transgaming.com
2857bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    switch (name)
2858bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
2859bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang      case GL_VENDOR:
2860bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return (GLubyte*)"Google Inc.";
2861b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2862bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang      case GL_RENDERER:
2863bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return (GLubyte*)((context != NULL) ? context->getRendererString().c_str() : "ANGLE");
2864b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2865bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang      case GL_VERSION:
2866bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() == 2)
28674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
2868bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return (GLubyte*)"OpenGL ES 2.0 (ANGLE " ANGLE_VERSION_STRING ")";
28694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
2870bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
2871bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2872bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return (GLubyte*)"OpenGL ES 3.0 (ANGLE " ANGLE_VERSION_STRING ")";
2873bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2874b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2875bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang      case GL_SHADING_LANGUAGE_VERSION:
2876bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() == 2)
2877bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2878bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return (GLubyte*)"OpenGL ES GLSL ES 1.00 (ANGLE " ANGLE_VERSION_STRING ")";
2879bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2880bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
2881bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2882bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return (GLubyte*)"OpenGL ES GLSL ES 3.00 (ANGLE " ANGLE_VERSION_STRING ")";
2883bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
2884b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2885bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang      case GL_EXTENSIONS:
2886bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return (GLubyte*)((context != NULL) ? context->getExtensionString().c_str() : "");
2887b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
2888bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang      default:
2889b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (context)
2890b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
2891b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2892b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
2893b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        return NULL;
28944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
28954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
28964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
28974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
28984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
28990f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", target, pname, params);
29004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2901bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
2902bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
29034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
2904bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture *texture = context->getTargetTexture(target);
29055d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com
2906bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!texture)
29075d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com        {
2908b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
2909b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
2910bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
29115d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com
2912bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
2913bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
2914bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAG_FILTER:
2915bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().magFilter;
2916bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2917bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MIN_FILTER:
2918bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().minFilter;
2919bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2920bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_S:
2921bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().wrapS;
2922bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2923bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_T:
2924bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().wrapT;
2925bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2926bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_R:
2927bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
29285d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com            {
2929b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2930b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
29315d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com            }
2932bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().wrapR;
2933bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2934bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_IMMUTABLE_FORMAT:
2935bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // Exposed to ES2.0 through EXT_texture_storage, no client version validation.
2936bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)(texture->isImmutable() ? GL_TRUE : GL_FALSE);
2937bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2938bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_IMMUTABLE_LEVELS:
2939bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
2940bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2941b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2942b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2943bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
2944bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->immutableLevelCount();
2945bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2946bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_USAGE_ANGLE:
2947bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getUsage();
2948bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2949bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_ANISOTROPY_EXT:
2950bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (!context->getExtensions().textureFilterAnisotropic)
2951bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2952b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2953b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2954bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
2955bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().maxAnisotropy;
2956bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2957bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_R:
2958bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
2959bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2960b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2961b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2962bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
2963bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().swizzleRed;
2964bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2965bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_G:
2966bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
2967bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2968b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2969b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2970bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
2971bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().swizzleGreen;
2972bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2973bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_B:
2974bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
2975bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2976b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2977b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2978bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
2979bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().swizzleBlue;
2980bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2981bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_A:
2982bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
29835d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com            {
2984b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2985b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
29865d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com            }
2987bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().swizzleAlpha;
2988bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2989bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_BASE_LEVEL:
2990bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
2991bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
2992b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
2993b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
2994bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
2995bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().baseLevel;
2996bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
2997bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_LEVEL:
2998bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
2999bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3000b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3001b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3002bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3003bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLfloat)texture->getSamplerState().maxLevel;
3004bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3005bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MIN_LOD:
3006bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3007bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3008b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3009b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3010bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3011bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().minLod;
3012bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3013bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_LOD:
3014bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3015bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3016b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3017b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3018bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3019bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().maxLod;
3020bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3021b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3022bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
3023b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3024b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
30255d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com        }
30264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
30274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
30284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
30294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
30304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
30310f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);
30324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3033bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3034bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
30354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3036bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture *texture = context->getTargetTexture(target);
30375d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com
3038bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!texture)
30395d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com        {
3040b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3041b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3042bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
30435d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com
3044bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
3045bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3046bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAG_FILTER:
3047bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().magFilter;
3048bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3049bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MIN_FILTER:
3050bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().minFilter;
3051bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3052bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_S:
3053bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().wrapS;
3054bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3055bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_T:
3056bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().wrapT;
3057bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3058bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_R:
3059bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
30605d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com            {
3061b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3062b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
30635d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com            }
3064bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().wrapR;
3065bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3066bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_IMMUTABLE_FORMAT:
3067bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // Exposed to ES2.0 through EXT_texture_storage, no client version validation.
3068bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->isImmutable() ? GL_TRUE : GL_FALSE;
3069bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3070bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_IMMUTABLE_LEVELS:
3071bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3072bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3073b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3074b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3075bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3076bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->immutableLevelCount();
3077bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3078bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_USAGE_ANGLE:
3079bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getUsage();
3080bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3081bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_ANISOTROPY_EXT:
3082bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (!context->getExtensions().textureFilterAnisotropic)
3083bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3084b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3085b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3086bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3087bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLint)texture->getSamplerState().maxAnisotropy;
3088bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3089bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_R:
3090bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3091bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3092b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3093b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3094bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3095bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().swizzleRed;
3096bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3097bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_G:
3098bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3099bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3100b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3101b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3102bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3103bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().swizzleGreen;
3104bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3105bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_B:
3106bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3107bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3108b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3109b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3110bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3111bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().swizzleBlue;
3112bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3113bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_A:
3114bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3115bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3116b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3117b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3118bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3119bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().swizzleAlpha;
3120bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3121bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_BASE_LEVEL:
3122bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3123bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3124b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3125b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3126bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3127bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().baseLevel;
3128bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3129bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_LEVEL:
3130bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3131bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3132b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3133b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3134bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3135bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = texture->getSamplerState().maxLevel;
3136bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3137bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MIN_LOD:
3138bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
31395d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com            {
3140b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3141b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
31425d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com            }
3143bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLint)texture->getSamplerState().minLod;
3144bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3145bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_LOD:
3146bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3147bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3148b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3149b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3150bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3151bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = (GLint)texture->getSamplerState().maxLod;
3152bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3153b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3154bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
3155b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3156b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
31575d2bee9325195b9f090d3ae820fe0c8fab955c00daniel@transgaming.com        }
31584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
31594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
31604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
31619a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.comvoid __stdcall glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
31629a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com{
31639a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com    EVENT("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLfloat* params = 0x%0.8p)",
31649a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com          program, location, bufSize, params);
31659a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com
3166bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3167bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3168bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
31690063c51742659230ce535eb270acc0f06921d754Jamie Madill        if (!ValidateGetnUniformfvEXT(context, program, location, bufSize, params))
31709a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com        {
31710063c51742659230ce535eb270acc0f06921d754Jamie Madill            return;
3172bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
3173e2a59bba3553507d93f15c466a1c630e8ab77121apatrick@chromium.org
3174a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::Program *programObject = context->getProgram(program);
3175a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        ASSERT(programObject);
3176a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
31770063c51742659230ce535eb270acc0f06921d754Jamie Madill        ASSERT(programBinary);
31789a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com
317999a1e985196cab0ab309209fe8319f6bdbe1dd20Jamie Madill        programBinary->getUniformfv(location, params);
31809a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com    }
31819a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com}
31829a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com
31834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetUniformfv(GLuint program, GLint location, GLfloat* params)
31844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
31850f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLint location = %d, GLfloat* params = 0x%0.8p)", program, location, params);
31864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3187bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3188bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3189bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
31900063c51742659230ce535eb270acc0f06921d754Jamie Madill        if (!ValidateGetUniformfv(context, program, location, params))
3191bb3d9d03b707f5415538909d2cd2f0aede0d2292daniel@transgaming.com        {
31920063c51742659230ce535eb270acc0f06921d754Jamie Madill            return;
3193bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
3194e2a59bba3553507d93f15c466a1c630e8ab77121apatrick@chromium.org
3195a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::Program *programObject = context->getProgram(program);
3196a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        ASSERT(programObject);
3197a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
31980063c51742659230ce535eb270acc0f06921d754Jamie Madill        ASSERT(programBinary);
3199bb3d9d03b707f5415538909d2cd2f0aede0d2292daniel@transgaming.com
320099a1e985196cab0ab309209fe8319f6bdbe1dd20Jamie Madill        programBinary->getUniformfv(location, params);
32019a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com    }
32029a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com}
32039a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com
32049a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.comvoid __stdcall glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params)
32059a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com{
3206bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    EVENT("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLint* params = 0x%0.8p)",
32079a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com          program, location, bufSize, params);
32089a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com
3209bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3210bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3211bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
32120063c51742659230ce535eb270acc0f06921d754Jamie Madill        if (!ValidateGetnUniformivEXT(context, program, location, bufSize, params))
32139a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com        {
32140063c51742659230ce535eb270acc0f06921d754Jamie Madill            return;
3215bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
32169a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com
3217a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::Program *programObject = context->getProgram(program);
3218a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        ASSERT(programObject);
3219a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
32200063c51742659230ce535eb270acc0f06921d754Jamie Madill        ASSERT(programBinary);
32219a84912a81a9753236262892726bca579c4e3b76daniel@transgaming.com
322299a1e985196cab0ab309209fe8319f6bdbe1dd20Jamie Madill        programBinary->getUniformiv(location, params);
32234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
32244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
32254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
32264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetUniformiv(GLuint program, GLint location, GLint* params)
32274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
32280f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, GLint location = %d, GLint* params = 0x%0.8p)", program, location, params);
32294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3230bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3231bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3232bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
32330063c51742659230ce535eb270acc0f06921d754Jamie Madill        if (!ValidateGetUniformiv(context, program, location, params))
3234bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
32350063c51742659230ce535eb270acc0f06921d754Jamie Madill            return;
3236bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
3237bb3d9d03b707f5415538909d2cd2f0aede0d2292daniel@transgaming.com
3238a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::Program *programObject = context->getProgram(program);
3239a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        ASSERT(programObject);
3240a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
32410063c51742659230ce535eb270acc0f06921d754Jamie Madill        ASSERT(programBinary);
3242bb3d9d03b707f5415538909d2cd2f0aede0d2292daniel@transgaming.com
324399a1e985196cab0ab309209fe8319f6bdbe1dd20Jamie Madill        programBinary->getUniformiv(location, params);
32444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
32454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
32464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3247b119668772ee960d8fc9e3846617c59530b90d5fGeoff LangGLint __stdcall glGetUniformLocation(GLuint program, const GLchar* name)
32484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
32490f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d, const GLchar* name = 0x%0.8p)", program, name);
32504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3251bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3252bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3253bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3254b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (strstr(name, "gl_") == name)
3255b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3256b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return -1;
3257b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
3258b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3259bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
32604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3261bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
32624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3263bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
32644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
3265b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
3266b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return -1;
32674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
3268bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
32694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
3270b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
3271b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return -1;
32724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
3273bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
32744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3275bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
3276bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject->isLinked() || !programBinary)
3277bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3278b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
3279b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return -1;
32804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
3281bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
3282bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return programBinary->getUniformLocation(name);
32834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
32844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
32854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return -1;
32864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
32874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
32884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
32894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
32900f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", index, pname, params);
32914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3292bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3293bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3294bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3295bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
32964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3297b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
3298b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3299bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
3300428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
3301bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        const gl::VertexAttribute &attribState = context->getState().getVertexAttribState(index);
3302b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidateGetVertexAttribParameters(context, pname))
3303bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3304bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
3305bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
3306aff715088e22484db1af995fbc6d93428064ce2cJamie Madill
3307bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (pname == GL_CURRENT_VERTEX_ATTRIB)
3308bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3309bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            const gl::VertexAttribCurrentValueData &currentValueData = context->getState().getVertexAttribCurrentValue(index);
3310bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            for (int i = 0; i < 4; ++i)
3311aff715088e22484db1af995fbc6d93428064ce2cJamie Madill            {
3312bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                params[i] = currentValueData.FloatValues[i];
3313e007896b1a07e2a7275021dc32fd8750db8d9e88daniel@transgaming.com            }
3314e007896b1a07e2a7275021dc32fd8750db8d9e88daniel@transgaming.com        }
3315bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
3316bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3317bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = gl::QuerySingleVertexAttributeParameter<GLfloat>(attribState, pname);
3318bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
33194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
33204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
33214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
33224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
33234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
33240f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", index, pname, params);
33254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3326bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3327bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3328bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3329bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
33304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3331b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
3332b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3333bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
33344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3335bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        const gl::VertexAttribute &attribState = context->getState().getVertexAttribState(index);
3336428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
3337b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidateGetVertexAttribParameters(context, pname))
3338bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3339bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
3340bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
3341aff715088e22484db1af995fbc6d93428064ce2cJamie Madill
3342bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (pname == GL_CURRENT_VERTEX_ATTRIB)
3343bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3344bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            const gl::VertexAttribCurrentValueData &currentValueData = context->getState().getVertexAttribCurrentValue(index);
3345bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            for (int i = 0; i < 4; ++i)
3346aff715088e22484db1af995fbc6d93428064ce2cJamie Madill            {
3347bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                float currentValue = currentValueData.FloatValues[i];
3348bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                params[i] = gl::iround<GLint>(currentValue);
3349e007896b1a07e2a7275021dc32fd8750db8d9e88daniel@transgaming.com            }
3350e007896b1a07e2a7275021dc32fd8750db8d9e88daniel@transgaming.com        }
3351bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
3352bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3353bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = gl::QuerySingleVertexAttributeParameter<GLint>(attribState, pname);
3354bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
33554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
33564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
33574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3358fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
33594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
33600f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, GLenum pname = 0x%X, GLvoid** pointer = 0x%0.8p)", index, pname, pointer);
33614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3362bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3363bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3364bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3365bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
33664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3367b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
3368b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3369bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
3370e007896b1a07e2a7275021dc32fd8750db8d9e88daniel@transgaming.com
3371bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER)
3372bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3373b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3374b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3375e007896b1a07e2a7275021dc32fd8750db8d9e88daniel@transgaming.com        }
3376bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
3377bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        *pointer = const_cast<GLvoid*>(context->getState().getVertexAttribPointer(index));
33784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
33794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
33804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
33814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glHint(GLenum target, GLenum mode)
33824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
33830f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);
33844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3385bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3386b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
33874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3388b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (mode)
3389b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3390b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FASTEST:
3391b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_NICEST:
3392b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DONT_CARE:
3393b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
3394b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3395b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
3396b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3397b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3398b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
3399b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3400b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (target)
3401b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3402b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_GENERATE_MIPMAP_HINT:
3403b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->getState().setGenerateMipmapHint(mode);
3404b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
3405b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3406b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
3407b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->getState().setFragmentShaderDerivativeHint(mode);
3408b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
3409b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3410b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
3411b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3412b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3413b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
34144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
34154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
34164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
34174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLboolean __stdcall glIsBuffer(GLuint buffer)
34184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
34190f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint buffer = %d)", buffer);
34204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3421bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3422bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context && buffer)
34234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3424bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *bufferObject = context->getBuffer(buffer);
34254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3426bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (bufferObject)
34274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3428bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return GL_TRUE;
34294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
34304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
34314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
34324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return GL_FALSE;
34334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
34344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
34354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLboolean __stdcall glIsEnabled(GLenum cap)
34364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
34370f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum cap = 0x%X)", cap);
34384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3439bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3440bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3441bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3442bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidCap(context, cap))
34434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3444b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3445b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_FALSE;
34464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
3447bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
3448bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return context->getState().getEnableFeature(cap);
34494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
34504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
34514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return false;
34524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
34534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3454fe208885642b9a148ad73e830d7623c3a53ab84adaniel@transgaming.comGLboolean __stdcall glIsFenceNV(GLuint fence)
3455fe208885642b9a148ad73e830d7623c3a53ab84adaniel@transgaming.com{
34560f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint fence = %d)", fence);
3457d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
3458bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3459bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3460d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    {
3461bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::FenceNV *fenceObject = context->getFenceNV(fence);
3462d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
3463bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (fenceObject == NULL)
3464d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {
3465bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return GL_FALSE;
3466d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        }
3467bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
3468bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return fenceObject->isFence();
3469d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    }
3470d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
3471d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    return GL_FALSE;
3472fe208885642b9a148ad73e830d7623c3a53ab84adaniel@transgaming.com}
3473d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
34744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLboolean __stdcall glIsFramebuffer(GLuint framebuffer)
34754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
34760f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint framebuffer = %d)", framebuffer);
34774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3478bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3479bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context && framebuffer)
34804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3481bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebufferObject = context->getFramebuffer(framebuffer);
34824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3483bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (framebufferObject)
34844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3485bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return GL_TRUE;
34864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
34874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
34884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
34894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return GL_FALSE;
34904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
34914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
34924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLboolean __stdcall glIsProgram(GLuint program)
34934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
34940f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d)", program);
34954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3496bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3497bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context && program)
34984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3499bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
35004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3501bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (programObject)
35024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3503bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return GL_TRUE;
35044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
35054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
35064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
35074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return GL_FALSE;
35084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
35094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
351086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.comGLboolean __stdcall glIsQueryEXT(GLuint id)
351186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com{
351286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    EVENT("(GLuint id = %d)", id);
351386bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
3514bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3515bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
351686bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    {
3517bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return (context->getQuery(id, false, GL_NONE) != NULL) ? GL_TRUE : GL_FALSE;
351886bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    }
351986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
352086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    return GL_FALSE;
352186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com}
352286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
35234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLboolean __stdcall glIsRenderbuffer(GLuint renderbuffer)
35244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
35250f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint renderbuffer = %d)", renderbuffer);
35264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3527bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3528bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context && renderbuffer)
35294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3530bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Renderbuffer *renderbufferObject = context->getRenderbuffer(renderbuffer);
35314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3532bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (renderbufferObject)
35334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3534bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return GL_TRUE;
35354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
35364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
35374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
35384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return GL_FALSE;
35394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
35404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
35414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLboolean __stdcall glIsShader(GLuint shader)
35424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
35430f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint shader = %d)", shader);
35444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3545bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3546bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context && shader)
35474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3548bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Shader *shaderObject = context->getShader(shader);
35494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3550bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (shaderObject)
35514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3552bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return GL_TRUE;
35534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
35544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
35554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
35564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return GL_FALSE;
35574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
35584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
35594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comGLboolean __stdcall glIsTexture(GLuint texture)
35604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
35610f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint texture = %d)", texture);
35624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3563bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3564bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context && texture)
35654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3566bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture *textureObject = context->getTexture(texture);
35674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3568bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (textureObject)
35694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3570bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return GL_TRUE;
35714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
35724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
35734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
35744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return GL_FALSE;
35754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
35764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
35774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glLineWidth(GLfloat width)
35784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
35790f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLfloat width = %f)", width);
35804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3581bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3582bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
35834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3584b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (width <= 0.0f)
3585b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3586b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
3587b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3588b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
3589b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3590bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setLineWidth(width);
35914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
35924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
35934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
35944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glLinkProgram(GLuint program)
35954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
35960f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d)", program);
35974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3598bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3599bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
36004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3601bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
36024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3603bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
36044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3605bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
36064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
3607b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
3608b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3609bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3610bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
3611bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3612b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
3613b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
36144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
36154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
3616bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
3617bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->linkProgram(program);
36184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
36194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
36204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
36214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glPixelStorei(GLenum pname, GLint param)
36224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
36230f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum pname = 0x%X, GLint param = %d)", pname, param);
36244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3625bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3626bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3627bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3628bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
36294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3630bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNPACK_ALIGNMENT:
3631bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (param != 1 && param != 2 && param != 4 && param != 8)
36323489e3ae55d26d613a21dfed54614f51bb69a5aadaniel@transgaming.com            {
3633b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
3634b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3635bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
36363489e3ae55d26d613a21dfed54614f51bb69a5aadaniel@transgaming.com
3637bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getState().setUnpackAlignment(param);
3638bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
36393489e3ae55d26d613a21dfed54614f51bb69a5aadaniel@transgaming.com
3640bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_PACK_ALIGNMENT:
3641bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (param != 1 && param != 2 && param != 4 && param != 8)
3642bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3643b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
3644b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3645bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
36463489e3ae55d26d613a21dfed54614f51bb69a5aadaniel@transgaming.com
3647bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getState().setPackAlignment(param);
3648bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
364956d46abe08c8a79786c3821e4e4336791f29883absalomon@google.com
3650bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
3651bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getState().setPackReverseRowOrder(param != 0);
3652bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3653abf14cc31bf24899071938971071d542cbc84e0cshannonwoods@chromium.org
3654bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNPACK_IMAGE_HEIGHT:
3655bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNPACK_SKIP_IMAGES:
3656bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNPACK_ROW_LENGTH:
3657bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNPACK_SKIP_ROWS:
3658bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNPACK_SKIP_PIXELS:
3659bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_PACK_ROW_LENGTH:
3660bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_PACK_SKIP_ROWS:
3661bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_PACK_SKIP_PIXELS:
3662bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getClientVersion() < 3)
3663bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3664b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
3665b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
36663489e3ae55d26d613a21dfed54614f51bb69a5aadaniel@transgaming.com            }
3667bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            UNIMPLEMENTED();
3668bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
3669bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
3670bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
3671b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3672b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
36734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
36744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
36754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
36764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
36774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glPolygonOffset(GLfloat factor, GLfloat units)
36784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
36790f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLfloat factor = %f, GLfloat units = %f)", factor, units);
36804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3681bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3682bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
36834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3684bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setPolygonOffsetParams(factor, units);
36854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
36864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
36874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3688b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.comvoid __stdcall glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
3689b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com                                GLenum format, GLenum type, GLsizei bufSize,
3690b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com                                GLvoid *data)
3691b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com{
3692b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com    EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
3693b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com          "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufSize = 0x%d, GLvoid *data = 0x%0.8p)",
3694b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com          x, y, width, height, format, type, bufSize, data);
3695b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com
3696bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3697bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3698bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3699b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (width < 0 || height < 0 || bufSize < 0)
3700b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3701b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
3702b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3703b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
3704b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3705bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidateReadPixelsParameters(context, x, y, width, height,
3706bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                              format, type, &bufSize, data))
3707b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com        {
3708bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
3709b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com        }
3710bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
371163d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang        gl::Error error = context->readPixels(x, y, width, height, format, type, &bufSize, data);
371263d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang        if (error.isError())
371363d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang        {
371463d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang            context->recordError(error);
371563d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang            return;
371663d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang        }
3717b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com    }
3718b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com}
3719b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com
3720b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.comvoid __stdcall glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
3721b7915a55bf5a118a68a3cd222fd25e7c619c3e1cdaniel@transgaming.com                            GLenum format, GLenum type, GLvoid* pixels)
37224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
37230f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
3724fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.com          "GLenum format = 0x%X, GLenum type = 0x%X, GLvoid* pixels = 0x%0.8p)",
3725b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          x, y, width, height, format, type,  pixels);
37264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3727bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3728bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3729bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3730b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (width < 0 || height < 0)
3731b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3732b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
3733b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3734b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
3735b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3736bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidateReadPixelsParameters(context, x, y, width, height,
3737bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                              format, type, NULL, pixels))
37384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3739bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
37404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
3741bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
374263d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang        gl::Error error = context->readPixels(x, y, width, height, format, type, NULL, pixels);
374363d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang        if (error.isError())
374463d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang        {
374563d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang            context->recordError(error);
374663d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang            return;
374763d2fc7f40d626342a0f9a82457b3fe0a81efca7Geoff Lang        }
37484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
37494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
37504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
37514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glReleaseShaderCompiler(void)
37524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
37530f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("()");
37544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3755f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones    gl::Context *context = gl::getNonLostContext();
3756f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones
3757f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones    if (context)
3758f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones    {
3759f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones        context->releaseShaderCompiler();
3760f05cdee4ce4adc73e79adb1d01ba76e742b3f892Brandon Jones    }
37614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
37624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
37631f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.comvoid __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
37644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
37650f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
37661f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.com          target, samples, internalformat, width, height);
37674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3768bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3769bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
37704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3771bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateRenderbufferStorageParameters(context, target, samples, internalformat,
3772bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                                   width, height, true))
3773bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3774bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
3775bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
3776bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
3777bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->setRenderbufferStorage(width, height, internalformat, samples);
37784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
37794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
37804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
37811f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.comvoid __stdcall glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
37821f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.com{
37831f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.com    glRenderbufferStorageMultisampleANGLE(target, 0, internalformat, width, height);
37841f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.com}
37851f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.com
37864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glSampleCoverage(GLclampf value, GLboolean invert)
37874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
3788a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLclampf value = %f, GLboolean invert = %u)", value, invert);
37894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3790bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context* context = gl::getNonLostContext();
3791fab5a1ae7809758c6c2fd4a39f3cc5122b262c32daniel@transgaming.com
3792bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
37934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3794bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setSampleCoverageParams(gl::clamp01(value), invert == GL_TRUE);
37954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
37964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
37974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3798fe208885642b9a148ad73e830d7623c3a53ab84adaniel@transgaming.comvoid __stdcall glSetFenceNV(GLuint fence, GLenum condition)
3799fe208885642b9a148ad73e830d7623c3a53ab84adaniel@transgaming.com{
38000f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint fence = %d, GLenum condition = 0x%X)", fence, condition);
3801d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
3802bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3803bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3804bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3805b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (condition != GL_ALL_COMPLETED_NV)
3806b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3807b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3808b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3809b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
3810b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3811bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::FenceNV *fenceObject = context->getFenceNV(fence);
3812d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
3813bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (fenceObject == NULL)
3814bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3815b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
3816b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3817d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        }
3818bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
3819bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        fenceObject->setFence(condition);
3820d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    }
3821fe208885642b9a148ad73e830d7623c3a53ab84adaniel@transgaming.com}
3822d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
38234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
38244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
38250f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
38264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3827bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context* context = gl::getNonLostContext();
3828bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
38294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3830b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (width < 0 || height < 0)
3831b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3832b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
3833b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3834b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
3835b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3836bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setScissorParams(x, y, width, height);
38374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
38384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
38394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3840fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
38414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
38420f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLsizei n = %d, const GLuint* shaders = 0x%0.8p, GLenum binaryformat = 0x%X, "
3843fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.com          "const GLvoid* binary = 0x%0.8p, GLsizei length = %d)",
3844b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          n, shaders, binaryformat, binary, length);
38454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3846900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang    gl::Context* context = gl::getNonLostContext();
3847900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang    if (context)
3848900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang    {
3849900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        const std::vector<GLenum> &shaderBinaryFormats = context->getCaps().shaderBinaryFormats;
3850900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        if (std::find(shaderBinaryFormats.begin(), shaderBinaryFormats.end(), binaryformat) == shaderBinaryFormats.end())
3851900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        {
3852b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3853b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3854900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        }
3855900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang
3856900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        // No binary shader formats are supported.
3857900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        UNIMPLEMENTED();
3858900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang    }
38594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
38604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
38615f339332e108aab7970b60754d580a0d2956283cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glShaderSource(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length)
38624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
38630f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint shader = %d, GLsizei count = %d, const GLchar** string = 0x%0.8p, const GLint* length = 0x%0.8p)",
3864b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          shader, count, string, length);
38654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3866bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3867bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3868bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3869b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (count < 0)
3870b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3871b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
3872b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3873b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
3874b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3875bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Shader *shaderObject = context->getShader(shader);
3876fab5a1ae7809758c6c2fd4a39f3cc5122b262c32daniel@transgaming.com
3877bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!shaderObject)
3878bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3879bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getProgram(shader))
38804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
3881b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
3882b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
3883bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
3884bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
3885bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
3886b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
3887b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
38884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
38894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
3890bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
3891bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        shaderObject->setSource(count, string, length);
38924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
38934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
38944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
38954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glStencilFunc(GLenum func, GLint ref, GLuint mask)
38964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
3897fab5a1ae7809758c6c2fd4a39f3cc5122b262c32daniel@transgaming.com    glStencilFuncSeparate(GL_FRONT_AND_BACK, func, ref, mask);
38984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
38994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
39004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
39014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
39020f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum face = 0x%X, GLenum func = 0x%X, GLint ref = %d, GLuint mask = %d)", face, func, ref, mask);
39034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3904b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    gl::Context *context = gl::getNonLostContext();
3905b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
39064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3907b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (face)
3908b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3909b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRONT:
3910b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_BACK:
3911b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRONT_AND_BACK:
3912b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
39134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3914b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
3915b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3916b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3917b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
39184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3919b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (func)
3920b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3921b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_NEVER:
3922b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ALWAYS:
3923b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_LESS:
3924b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_LEQUAL:
3925b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_EQUAL:
3926b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_GEQUAL:
3927b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_GREATER:
3928b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_NOTEQUAL:
3929b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
3930b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3931b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
3932b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3933b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3934b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
39354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3936bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
39374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3938bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getState().setStencilParams(func, ref, mask);
3939bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
39404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3941bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (face == GL_BACK || face == GL_FRONT_AND_BACK)
3942bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3943bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getState().setStencilBackParams(func, ref, mask);
39444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
39454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
39464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
39474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
39484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glStencilMask(GLuint mask)
39494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
39504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    glStencilMaskSeparate(GL_FRONT_AND_BACK, mask);
39514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
39524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
39534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glStencilMaskSeparate(GLenum face, GLuint mask)
39544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
39550f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum face = 0x%X, GLuint mask = %d)", face, mask);
39564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3957bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
3958bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
3959bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
3960b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (face)
3961b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3962b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRONT:
3963b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_BACK:
3964b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRONT_AND_BACK:
3965b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
3966b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3967b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
3968b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
3969b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
3970b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
3971b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
3972bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
39734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
3974bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getState().setStencilWritemask(mask);
3975bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
39764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3977bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (face == GL_BACK || face == GL_FRONT_AND_BACK)
3978bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
3979bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getState().setStencilBackWritemask(mask);
39804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
39814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
39824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
39834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
39844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
39854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
39864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    glStencilOpSeparate(GL_FRONT_AND_BACK, fail, zfail, zpass);
39874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
39884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
39894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
39904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
39910f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum face = 0x%X, GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpas = 0x%Xs)",
3992b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          face, fail, zfail, zpass);
39934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3994b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    gl::Context *context = gl::getNonLostContext();
3995b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
39964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
3997b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (face)
3998b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
3999b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRONT:
4000b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_BACK:
4001b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FRONT_AND_BACK:
4002b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
40034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4004b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
4005b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
4006b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4007b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
40084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4009b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (fail)
4010b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4011b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ZERO:
4012b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_KEEP:
4013b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_REPLACE:
4014b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INCR:
4015b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DECR:
4016b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INVERT:
4017b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INCR_WRAP:
4018b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DECR_WRAP:
4019b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
4020b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4021b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
4022b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
4023b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4024b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4025b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4026b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (zfail)
4027b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4028b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ZERO:
4029b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_KEEP:
4030b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_REPLACE:
4031b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INCR:
4032b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DECR:
4033b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INVERT:
4034b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INCR_WRAP:
4035b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DECR_WRAP:
4036b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
4037b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4038b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
4039b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
4040b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4041b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
40424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4043b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (zpass)
4044b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4045b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_ZERO:
4046b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_KEEP:
4047b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_REPLACE:
4048b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INCR:
4049b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DECR:
4050b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INVERT:
4051b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INCR_WRAP:
4052b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_DECR_WRAP:
4053b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
4054f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
4055b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
4056b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
4057b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4058b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4059f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
4060bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
4061f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org        {
4062bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getState().setStencilOperations(fail, zfail, zpass);
4063bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
4064f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
4065bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (face == GL_BACK || face == GL_FRONT_AND_BACK)
4066bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4067bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getState().setStencilBackOperations(fail, zfail, zpass);
40684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4069f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    }
4070f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org}
4071f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
4072f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.orgGLboolean __stdcall glTestFenceNV(GLuint fence)
4073f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org{
4074f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    EVENT("(GLuint fence = %d)", fence);
4075f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
4076bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4077bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4078f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    {
4079bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::FenceNV *fenceObject = context->getFenceNV(fence);
40804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4081bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (fenceObject == NULL)
40824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4083b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
4084b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_TRUE;
4085bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
4086fb9a7409515cb0a8f9926974511ff486361909d7Jamie Madill
4087bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (fenceObject->isFence() != GL_TRUE)
4088bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4089b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
4090b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_TRUE;
40914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4092bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4093bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return fenceObject->testFence();
4094f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    }
4095bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4096f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    return GL_TRUE;
4097f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org}
4098f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org
4099f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.orgvoid __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
4100f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org                            GLint border, GLenum format, GLenum type, const GLvoid* pixels)
4101f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org{
4102f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    EVENT("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, GLsizei height = %d, "
41031fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill          "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels = 0x%0.8p)",
4104f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org          target, level, internalformat, width, height, border, format, type, pixels);
41054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4106bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4107bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4108f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org    {
4109bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3 &&
4110bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES2TexImageParameters(context, target, level, internalformat, false, false,
4111bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           0, 0, width, height, border, format, type, pixels))
4112bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4113bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4114bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
4115bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4116bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() >= 3 &&
4117bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES3TexImageParameters(context, target, level, internalformat, false, false,
4118bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           0, 0, 0, width, height, 1, border, format, type, pixels))
4119bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4120bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4121bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
41224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4123bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
41244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4125bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D:
412632b11443c38577f29fabe51520ae9a0808992e0bdaniel@transgaming.com            {
4127bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2D *texture = context->getTexture2D();
4128bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setImage(level, width, height, internalformat, format, type, context->getState().getUnpackState(), pixels);
4129f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org            }
4130bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4131bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
4132f3a3eda74bee6909a97d62a9ea57cb35004dcf6eshannonwoods@chromium.org            {
4133bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
4134bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setImagePosX(level, width, height, internalformat, format, type, context->getState().getUnpackState(), pixels);
413532b11443c38577f29fabe51520ae9a0808992e0bdaniel@transgaming.com            }
4136bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4137bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
41385d752f29189bbeb3da84b66c7335192a4baf6528daniel@transgaming.com            {
4139bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
4140bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setImageNegX(level, width, height, internalformat, format, type, context->getState().getUnpackState(), pixels);
4141bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
4142bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4143bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
4144bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
4145bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
4146bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setImagePosY(level, width, height, internalformat, format, type, context->getState().getUnpackState(), pixels);
4147bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
4148bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4149bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
4150bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
4151bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
4152bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setImageNegY(level, width, height, internalformat, format, type, context->getState().getUnpackState(), pixels);
4153bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
4154bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4155bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
4156bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
4157bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
4158bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setImagePosZ(level, width, height, internalformat, format, type, context->getState().getUnpackState(), pixels);
4159bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
4160bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4161bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
4162bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
4163bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
4164bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setImageNegZ(level, width, height, internalformat, format, type, context->getState().getUnpackState(), pixels);
41654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
4166bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4167bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default: UNREACHABLE();
41684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
41694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
41704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
41714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
41724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glTexParameterf(GLenum target, GLenum pname, GLfloat param)
41734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
417407ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %f)", target, pname, param);
417507ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com
4176bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4177bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4178bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4179bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateTexParamParameters(context, pname, static_cast<GLint>(param)))
418007ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com        {
4181bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4182bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
4183478fdb2b881e1b6796fb996b8351dd42518b6b8dJamie Madill
4184bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture *texture = context->getTargetTexture(target);
418507ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com
4186bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!texture)
4187bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4188b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
4189b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4190bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
419107ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com
4192bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
4193bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4194bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_S:               texture->getSamplerState().wrapS = gl::uiround<GLenum>(param);        break;
4195bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_T:               texture->getSamplerState().wrapT = gl::uiround<GLenum>(param);        break;
4196bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_R:               texture->getSamplerState().wrapR = gl::uiround<GLenum>(param);        break;
4197bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MIN_FILTER:           texture->getSamplerState().minFilter = gl::uiround<GLenum>(param);    break;
4198bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAG_FILTER:           texture->getSamplerState().magFilter = gl::uiround<GLenum>(param);    break;
4199bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_USAGE_ANGLE:          texture->setUsage(gl::uiround<GLenum>(param));                        break;
4200bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_ANISOTROPY_EXT:   texture->getSamplerState().maxAnisotropy = std::min(param, context->getExtensions().maxTextureAnisotropy); break;
4201bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_COMPARE_MODE:         texture->getSamplerState().compareMode = gl::uiround<GLenum>(param);  break;
4202bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_COMPARE_FUNC:         texture->getSamplerState().compareFunc = gl::uiround<GLenum>(param);  break;
4203bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_R:            texture->getSamplerState().swizzleRed = gl::uiround<GLenum>(param);   break;
4204bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_G:            texture->getSamplerState().swizzleGreen = gl::uiround<GLenum>(param); break;
4205bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_B:            texture->getSamplerState().swizzleBlue = gl::uiround<GLenum>(param);  break;
4206bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_A:            texture->getSamplerState().swizzleAlpha = gl::uiround<GLenum>(param); break;
4207bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_BASE_LEVEL:           texture->getSamplerState().baseLevel = gl::iround<GLint>(param);      break;
4208bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_LEVEL:            texture->getSamplerState().maxLevel = gl::iround<GLint>(param);       break;
4209bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MIN_LOD:              texture->getSamplerState().minLod = param;                            break;
4210bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_LOD:              texture->getSamplerState().maxLod = param;                            break;
4211bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default: UNREACHABLE(); break;
421207ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com        }
421307ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com    }
42144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
42154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
42164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
42174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
421807ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com    glTexParameterf(target, pname, (GLfloat)*params);
42194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
42204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
42214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glTexParameteri(GLenum target, GLenum pname, GLint param)
42224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
42230f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
42244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4225bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4226bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4227bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4228bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateTexParamParameters(context, pname, param))
42294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4230bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4231bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
4232478fdb2b881e1b6796fb996b8351dd42518b6b8dJamie Madill
4233bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture *texture = context->getTargetTexture(target);
42344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4235bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!texture)
4236bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4237b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
4238b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4239bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
42404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4241bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
4242bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4243bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_S:               texture->getSamplerState().wrapS = (GLenum)param;        break;
4244bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_T:               texture->getSamplerState().wrapT = (GLenum)param;        break;
4245bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_WRAP_R:               texture->getSamplerState().wrapR = (GLenum)param;        break;
4246bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MIN_FILTER:           texture->getSamplerState().minFilter = (GLenum)param;    break;
4247bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAG_FILTER:           texture->getSamplerState().magFilter = (GLenum)param;    break;
4248bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_USAGE_ANGLE:          texture->setUsage((GLenum)param);                        break;
4249bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_ANISOTROPY_EXT:   texture->getSamplerState().maxAnisotropy = std::min((float)param, context->getExtensions().maxTextureAnisotropy); break;
4250bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_COMPARE_MODE:         texture->getSamplerState().compareMode = (GLenum)param;  break;
4251bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_COMPARE_FUNC:         texture->getSamplerState().compareFunc = (GLenum)param;  break;
4252bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_R:            texture->getSamplerState().swizzleRed = (GLenum)param;   break;
4253bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_G:            texture->getSamplerState().swizzleGreen = (GLenum)param; break;
4254bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_B:            texture->getSamplerState().swizzleBlue = (GLenum)param;  break;
4255bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_SWIZZLE_A:            texture->getSamplerState().swizzleAlpha = (GLenum)param; break;
4256bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_BASE_LEVEL:           texture->getSamplerState().baseLevel = param;            break;
4257bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_LEVEL:            texture->getSamplerState().maxLevel = param;             break;
4258bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MIN_LOD:              texture->getSamplerState().minLod = (GLfloat)param;      break;
4259bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_MAX_LOD:              texture->getSamplerState().maxLod = (GLfloat)param;      break;
4260bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default: UNREACHABLE(); break;
42614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
42624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
42634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
42644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
42654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
42664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
42674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    glTexParameteri(target, pname, *params);
42684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
42694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
427064a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.comvoid __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
427164a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com{
427264a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com    EVENT("(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
427364a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com           target, levels, internalformat, width, height);
427464a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com
4275bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4276bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
427764a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com    {
4278bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!context->getExtensions().textureStorage)
4279bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4280b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
4281b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4282bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
428364a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com
4284bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3 &&
4285bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES2TexStorageParameters(context, target, levels, internalformat, width, height))
428664a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com        {
4287bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4288bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
4289cec3590a151059813b91b33cd5e000c94f5bccaaGeoff Lang
4290bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() >= 3 &&
4291bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES3TexStorageParameters(context, target, levels, internalformat, width, height, 1))
4292bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4293bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4294bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
42958dcfc6ab9013827d3531722e28d750886bb8532dshannonwoods@chromium.org
4296bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
4297bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4298bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D:
42998dcfc6ab9013827d3531722e28d750886bb8532dshannonwoods@chromium.org            {
4300bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2D *texture2d = context->getTexture2D();
4301bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture2d->storage(levels, internalformat, width, height);
43028dcfc6ab9013827d3531722e28d750886bb8532dshannonwoods@chromium.org            }
4303bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
43048dcfc6ab9013827d3531722e28d750886bb8532dshannonwoods@chromium.org
4305bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP:
430621f05d75456f0b445f64f3d1174a581f5ec8b042daniel@transgaming.com            {
4307bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *textureCube = context->getTextureCubeMap();
4308bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                textureCube->storage(levels, internalformat, width);
430964a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com            }
4310bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4311bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4312bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
4313b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
4314b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
431564a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com        }
431664a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com    }
431764a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com}
431864a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com
4319fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
4320fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.com                               GLenum format, GLenum type, const GLvoid* pixels)
43214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
43220f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
4323b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "
4324fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.com          "const GLvoid* pixels = 0x%0.8p)",
43254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com           target, level, xoffset, yoffset, width, height, format, type, pixels);
43264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4327bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4328bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
43294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4330bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3 &&
4331bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES2TexImageParameters(context, target, level, GL_NONE, false, true,
4332bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           xoffset, yoffset, width, height, 0, format, type, pixels))
4333bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4334bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4335bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
433600c75964b6eef547b54d8a2b6c175f94508cc317daniel@transgaming.com
4337bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() >= 3 &&
4338bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            !ValidateES3TexImageParameters(context, target, level, GL_NONE, false, true,
4339bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           xoffset, yoffset, 0, width, height, 1, 0, format, type, pixels))
434000c75964b6eef547b54d8a2b6c175f94508cc317daniel@transgaming.com        {
4341bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4342bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
43430a337e93bf945dc76d8d4f77912ea00e25986bb3daniel@transgaming.com
4344bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Zero sized uploads are valid but no-ops
4345bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (width == 0 || height == 0)
4346bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4347bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4348bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
43491d2d3c469ad93cfbd575fba313185f84b04ad1badaniel@transgaming.com
4350bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
4351bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4352bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D:
4353c41e42d49626e1527c9e049b48d7c9fb30b0b9d6Geoff Lang            {
4354bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2D *texture = context->getTexture2D();
4355bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getState().getUnpackState(), pixels);
4356c41e42d49626e1527c9e049b48d7c9fb30b0b9d6Geoff Lang            }
4357bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4358c41e42d49626e1527c9e049b48d7c9fb30b0b9d6Geoff Lang
4359bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
4360bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
4361bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
4362bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
4363bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
4364bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
436500c75964b6eef547b54d8a2b6c175f94508cc317daniel@transgaming.com            {
4366bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *texture = context->getTextureCubeMap();
4367bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->subImage(target, level, xoffset, yoffset, width, height, format, type, context->getState().getUnpackState(), pixels);
436800c75964b6eef547b54d8a2b6c175f94508cc317daniel@transgaming.com            }
4369bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4370bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4371bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
4372bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            UNREACHABLE();
437300c75964b6eef547b54d8a2b6c175f94508cc317daniel@transgaming.com        }
43744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
43754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
43764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
43774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform1f(GLint location, GLfloat x)
43784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
43794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    glUniform1fv(location, 1, &x);
43804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
43814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
43824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
43834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
43840f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);
43854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4386bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4387bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4388bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4389bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_FLOAT, location, count))
43904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4391bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
43924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4393bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4394bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4395bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform1fv(location, count, v);
43964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
43974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
43984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
43994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform1i(GLint location, GLint x)
44004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
44014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    glUniform1iv(location, 1, &x);
44024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
44034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform1iv(GLint location, GLsizei count, const GLint* v)
44054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
44060f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);
44074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4408bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4409bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4410bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4411bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_INT, location, count))
44124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4413bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
44144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4415bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4416bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4417bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform1iv(location, count, v);
44184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
44194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
44204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform2f(GLint location, GLfloat x, GLfloat y)
44224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
44234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLfloat xy[2] = {x, y};
44244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44253b3ad1feb8b5c2f35e4a4b8ea79503735f031960Geoff Lang    glUniform2fv(location, 1, xy);
44264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
44274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
44294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
44300f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);
44314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4432bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4433bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4434bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4435bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_FLOAT_VEC2, location, count))
44364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4437bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
44384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4439bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4440bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4441bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform2fv(location, count, v);
44424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
44434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
44444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform2i(GLint location, GLint x, GLint y)
44464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
44473b3ad1feb8b5c2f35e4a4b8ea79503735f031960Geoff Lang    GLint xy[2] = {x, y};
44484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44493b3ad1feb8b5c2f35e4a4b8ea79503735f031960Geoff Lang    glUniform2iv(location, 1, xy);
44504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
44514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform2iv(GLint location, GLsizei count, const GLint* v)
44534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
44540f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);
44554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4456bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4457bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4458bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4459bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_INT_VEC2, location, count))
44609a95e2bb66c3829d721daa18adc22f1c8168f08fdaniel@transgaming.com        {
4461bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
44629a95e2bb66c3829d721daa18adc22f1c8168f08fdaniel@transgaming.com        }
4463bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4464bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4465bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform2iv(location, count, v);
44664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
44674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
44684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
44704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
44714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLfloat xyz[3] = {x, y, z};
44724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44733b3ad1feb8b5c2f35e4a4b8ea79503735f031960Geoff Lang    glUniform3fv(location, 1, xyz);
44744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
44754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
44774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
44780f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);
44794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4480bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4481bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4482bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4483bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_FLOAT_VEC3, location, count))
44844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4485bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
44864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4487bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4488bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4489bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform3fv(location, count, v);
44904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
44914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
44924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform3i(GLint location, GLint x, GLint y, GLint z)
44944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
44954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLint xyz[3] = {x, y, z};
44964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
44973b3ad1feb8b5c2f35e4a4b8ea79503735f031960Geoff Lang    glUniform3iv(location, 1, xyz);
44984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
44994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
45004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform3iv(GLint location, GLsizei count, const GLint* v)
45014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
45020f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);
45034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4504bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4505bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4506bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4507bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_INT_VEC3, location, count))
45089a95e2bb66c3829d721daa18adc22f1c8168f08fdaniel@transgaming.com        {
4509bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
45109a95e2bb66c3829d721daa18adc22f1c8168f08fdaniel@transgaming.com        }
4511bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4512bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4513bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform3iv(location, count, v);
45144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
45154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
45164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
45174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
45184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
45194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLfloat xyzw[4] = {x, y, z, w};
45204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
45213b3ad1feb8b5c2f35e4a4b8ea79503735f031960Geoff Lang    glUniform4fv(location, 1, xyzw);
45224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
45234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
45244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
45254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
45260f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);
45274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4528bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4529bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4530bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4531bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_FLOAT_VEC4, location, count))
45324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4533bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
45344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4535bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4536bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4537bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform4fv(location, count, v);
45384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
45394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
45404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
45414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
45424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
45434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLint xyzw[4] = {x, y, z, w};
45444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
45453b3ad1feb8b5c2f35e4a4b8ea79503735f031960Geoff Lang    glUniform4iv(location, 1, xyzw);
45464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
45474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
45484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniform4iv(GLint location, GLsizei count, const GLint* v)
45494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
45500f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);
45514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4552bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4553bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4554bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4555bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_INT_VEC4, location, count))
45569a95e2bb66c3829d721daa18adc22f1c8168f08fdaniel@transgaming.com        {
4557bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
45589a95e2bb66c3829d721daa18adc22f1c8168f08fdaniel@transgaming.com        }
4559bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4560bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4561bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform4iv(location, count, v);
45624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
45634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
45644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
45654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
45664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
4567a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
4568b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          location, count, transpose, value);
45694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4570bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4571bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4572bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4573bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2, location, count, transpose))
45744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4575bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
45764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4577bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4578bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4579bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniformMatrix2fv(location, count, transpose, value);
45804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
45814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
45824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
45834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
45844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
4585a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
4586b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          location, count, transpose, value);
45874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4588bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4589bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4590bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4591bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3, location, count, transpose))
45924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4593bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
45944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4595bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4596bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4597bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniformMatrix3fv(location, count, transpose, value);
45984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
45994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
46004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
46014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
46024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
4603a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
4604b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          location, count, transpose, value);
46054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4606bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4607bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4608bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4609bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4, location, count, transpose))
46104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4611bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
46124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4613bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4614bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
4615bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniformMatrix4fv(location, count, transpose, value);
46164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
46174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
46184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
46194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glUseProgram(GLuint program)
46204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
46210f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d)", program);
46224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4623bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4624bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
46254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4626bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
46274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4628bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject && program != 0)
46294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4630bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
4631c847820dc802a58292433e443bec099bcec3e1e3daniel@transgaming.com            {
4632b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
4633b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
4634c847820dc802a58292433e443bec099bcec3e1e3daniel@transgaming.com            }
4635bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
46364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            {
4637b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
4638b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
46394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com            }
4640bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
46414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4642bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (program != 0 && !programObject->isLinked())
4643bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4644b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
4645b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
46464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4647bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4648bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->useProgram(program);
46494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
46504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
46514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
46524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glValidateProgram(GLuint program)
46534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
46540f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint program = %d)", program);
46554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4656bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4657bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
46584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4659bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
466086a7a138c5166feda08f21dd48e69b3a5408a1e6daniel@transgaming.com
4661bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
466286a7a138c5166feda08f21dd48e69b3a5408a1e6daniel@transgaming.com        {
4663bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
466486a7a138c5166feda08f21dd48e69b3a5408a1e6daniel@transgaming.com            {
4665b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
4666b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
4667bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
4668bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
4669bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
4670b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
4671b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
467286a7a138c5166feda08f21dd48e69b3a5408a1e6daniel@transgaming.com            }
467386a7a138c5166feda08f21dd48e69b3a5408a1e6daniel@transgaming.com        }
4674bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
467543a53e2434f4fe042bee061fc369a93314b710deBrandon Jones        programObject->validate(context->getCaps());
46764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
46774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
46784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
46794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glVertexAttrib1f(GLuint index, GLfloat x)
46804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
46810f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, GLfloat x = %f)", index, x);
46824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4683bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4684bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
46854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4686b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
4687b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4688b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4689b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4690b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4691b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4692bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLfloat vals[4] = { x, 0, 0, 1 };
4693bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribf(index, vals);
46944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
46954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
46964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
46974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glVertexAttrib1fv(GLuint index, const GLfloat* values)
46984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
46990f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);
47004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4701bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4702bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
47034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4704b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
4705b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4706b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4707b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4708b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4709b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4710bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLfloat vals[4] = { values[0], 0, 0, 1 };
4711bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribf(index, vals);
47124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
47134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
47144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
47154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y)
47164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
47170f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f)", index, x, y);
47184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4719bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4720bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
47214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4722b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
4723b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4724b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4725b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4726b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4727b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4728bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLfloat vals[4] = { x, y, 0, 1 };
4729bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribf(index, vals);
47304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
47314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
47324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
47334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glVertexAttrib2fv(GLuint index, const GLfloat* values)
47344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
47350f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);
47364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4737bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4738bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
47394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4740b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
4741b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4742b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4743b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4744b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4745b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4746bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLfloat vals[4] = { values[0], values[1], 0, 1 };
4747bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribf(index, vals);
47484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
47494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
47504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
47514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)
47524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
47530f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", index, x, y, z);
47544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4755bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4756bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
47574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4758b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
4759b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4760b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4761b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4762b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4763b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4764bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLfloat vals[4] = { x, y, z, 1 };
4765bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribf(index, vals);
47664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
47674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
47684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
47694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glVertexAttrib3fv(GLuint index, const GLfloat* values)
47704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
47710f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);
47724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4773bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4774bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
47754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4776b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
4777b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4778b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4779b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4780b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4781b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4782bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLfloat vals[4] = { values[0], values[1], values[2], 1 };
4783bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribf(index, vals);
47844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
47854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
47864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
47874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
47884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
47890f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat w = %f)", index, x, y, z, w);
47904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4791bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4792bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
47934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4794b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
4795b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4796b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4797b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4798b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4799b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4800bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLfloat vals[4] = { x, y, z, w };
4801bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribf(index, vals);
48024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
48034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
48044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
48054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glVertexAttrib4fv(GLuint index, const GLfloat* values)
48064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
48070f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);
48084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4809bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4810bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
48114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4812b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
4813b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4814b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4815b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4816b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4817b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4818bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribf(index, values);
48194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
48204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
48214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4822d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.comvoid __stdcall glVertexAttribDivisorANGLE(GLuint index, GLuint divisor)
4823d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com{
4824d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com    EVENT("(GLuint index = %d, GLuint divisor = %d)", index, divisor);
4825d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com
4826bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4827bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4828d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com    {
4829b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
4830b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4831b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4832b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4833b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4834b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4835bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->setVertexAttribDivisor(index, divisor);
4836d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com    }
4837d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com}
4838d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com
4839fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
48404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
48410f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLuint index = %d, GLint size = %d, GLenum type = 0x%X, "
4842a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLboolean normalized = %u, GLsizei stride = %d, const GLvoid* ptr = 0x%0.8p)",
4843b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          index, size, type, normalized, stride, ptr);
48444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4845bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4846b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang    if (context)
4847bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4848b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
48494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4850b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4851b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
48524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4853b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4854b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (size < 1 || size > 4)
4855b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4856b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4857b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4858b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4859b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4860b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (type)
48614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        {
4862b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_BYTE:
4863b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_UNSIGNED_BYTE:
4864b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SHORT:
4865b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_UNSIGNED_SHORT:
4866b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FIXED:
4867b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_FLOAT:
4868bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
4869b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4870b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_HALF_FLOAT:
4871b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INT:
4872b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_UNSIGNED_INT:
4873b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INT_2_10_10_10_REV:
4874b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_UNSIGNED_INT_2_10_10_10_REV:
4875b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            if (context->getClientVersion() < 3)
4876b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            {
4877b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
4878b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
4879b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            }
4880b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
4881b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4882b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
4883b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
4884b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
48854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com        }
4886bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4887b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (stride < 0)
4888b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4889b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4890b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4891b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4892bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4893b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if ((type == GL_INT_2_10_10_10_REV || type == GL_UNSIGNED_INT_2_10_10_10_REV) && size != 4)
4894b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4895b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
4896b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4897b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
48984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4899bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // [OpenGL ES 3.0.2] Section 2.8 page 24:
4900bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // An INVALID_OPERATION error is generated when a non-zero vertex array object
4901bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // is bound, zero is bound to the ARRAY_BUFFER buffer object binding point,
4902bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // and the pointer argument is not NULL.
4903bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getState().getVertexArray()->id() != 0 && context->getState().getArrayBufferId() == 0 && ptr != NULL)
49041ab57be9db37d9a4df7b709300ce20743dd80f4bshannon.woods%transgaming.com@gtempaccount.com        {
4905b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
4906b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
49071ab57be9db37d9a4df7b709300ce20743dd80f4bshannon.woods%transgaming.com@gtempaccount.com        }
49081ab57be9db37d9a4df7b709300ce20743dd80f4bshannon.woods%transgaming.com@gtempaccount.com
4909bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribState(index, context->getState().getTargetBuffer(GL_ARRAY_BUFFER), size, type,
4910bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                                 normalized == GL_TRUE, false, stride, ptr);
49114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
49124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
49134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
49144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid __stdcall glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
49154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
49160f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
49174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4918bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4919bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
49204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    {
4921b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (width < 0 || height < 0)
4922b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
4923b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
4924b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4925b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
4926b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
4927bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setViewportParams(x, y, width, height);
49284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    }
49294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
49304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
4931a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com// OpenGL ES 3.0 functions
4932a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
4933a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glReadBuffer(GLenum mode)
4934a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
4935a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum mode = 0x%X)", mode);
4936a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
4937bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4938bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4939bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4940bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
4941a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
4942b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
4943b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4944705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
4945bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4946bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // glReadBuffer
4947bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        UNIMPLEMENTED();
4948a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
4949a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
4950a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
4951a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
4952a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
4953a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum mode = 0x%X, GLuint start = %u, GLuint end = %u, GLsizei count = %d, GLenum type = 0x%X, "
4954a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "const GLvoid* indices = 0x%0.8p)", mode, start, end, count, type, indices);
4955a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
4956bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4957bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4958bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
4959bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
4960a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
4961b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
4962b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4963705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
4964bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
4965bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // glDrawRangeElements
4966bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        UNIMPLEMENTED();
4967a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
4968a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
4969a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
4970a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
4971a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
4972a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
4973a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLenum format = 0x%X, "
4974a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLenum type = 0x%X, const GLvoid* pixels = 0x%0.8p)",
4975a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, level, internalformat, width, height, depth, border, format, type, pixels);
4976a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
4977bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
4978bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
4979a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
4980bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
4981bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4982b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
4983b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
4984bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
4985a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
4986bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // validateES3TexImageFormat sets the error code if there is an error
4987bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateES3TexImageParameters(context, target, level, internalformat, false, false,
4988bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           0, 0, 0, width, height, depth, border, format, type, pixels))
4989a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
4990bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
4991bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
4992a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
4993bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch(target)
4994bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
4995bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_3D:
4996875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            {
4997bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture3D *texture = context->getTexture3D();
4998bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setImage(level, width, height, depth, internalformat, format, type, context->getState().getUnpackState(), pixels);
4999875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            }
5000bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5001875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5002bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D_ARRAY:
5003875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            {
5004bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2DArray *texture = context->getTexture2DArray();
5005bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setImage(level, width, height, depth, internalformat, format, type, context->getState().getUnpackState(), pixels);
5006875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            }
5007bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5008bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5009bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
5010b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5011b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5012875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com        }
5013a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5014a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5015a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5016a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels)
5017a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5018a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
5019a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
5020a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels = 0x%0.8p)",
5021a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
5022a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5023bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5024bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5025a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
5026bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5027bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5028b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5029b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5030bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5031a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5032bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // validateES3TexImageFormat sets the error code if there is an error
5033bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateES3TexImageParameters(context, target, level, GL_NONE, false, true,
5034bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           xoffset, yoffset, zoffset, width, height, depth, 0,
5035bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           format, type, pixels))
5036a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5037bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5038bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5039a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5040bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Zero sized uploads are valid but no-ops
5041bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (width == 0 || height == 0 || depth == 0)
5042bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5043bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5044bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5045875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5046bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch(target)
5047bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5048bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_3D:
5049c41e42d49626e1527c9e049b48d7c9fb30b0b9d6Geoff Lang            {
5050bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture3D *texture = context->getTexture3D();
5051bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->subImage(level, xoffset, yoffset, zoffset, width, height, depth, format, type, context->getState().getUnpackState(), pixels);
5052c41e42d49626e1527c9e049b48d7c9fb30b0b9d6Geoff Lang            }
5053bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5054c41e42d49626e1527c9e049b48d7c9fb30b0b9d6Geoff Lang
5055bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D_ARRAY:
5056875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            {
5057bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2DArray *texture = context->getTexture2DArray();
5058bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->subImage(level, xoffset, yoffset, zoffset, width, height, depth, format, type, context->getState().getUnpackState(), pixels);
5059875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            }
5060bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5061bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5062bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
5063b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5064b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5065875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com        }
5066a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5067a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5068a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5069a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
5070a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5071a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
5072a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLint zoffset = %d, GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
5073a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, level, xoffset, yoffset, zoffset, x, y, width, height);
5074a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5075bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5076bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5077bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5078bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5079a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5080b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5081b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5082bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5083875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5084bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateES3CopyTexImageParameters(context, target, level, GL_NONE, true, xoffset, yoffset, zoffset,
5085bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                               x, y, width, height, 0))
5086bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5087bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5088bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5089875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5090bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebuffer = context->getState().getReadFramebuffer();
5091bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture *texture = NULL;
5092bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
5093bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5094bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_3D:
5095bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            texture = context->getTexture3D();
5096bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5097875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5098bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D_ARRAY:
5099bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            texture = context->getTexture2DArray();
5100bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5101875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5102bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
5103b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5104b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5105875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com        }
5106bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5107bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        texture->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, framebuffer);
5108a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5109a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5110a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5111a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
5112a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5113eef52cc63bc13a6c4069d92467a70ed1107fb136Geoff Lang    EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
5114a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLsizei imageSize = %d, "
5115a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "const GLvoid* data = 0x%0.8p)",
5116a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, level, internalformat, width, height, depth, border, imageSize, data);
5117a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5118bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5119bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5120a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
5121bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5122bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5123b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5124b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5125bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5126a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
51275d601382b51c29d1670b58c01360416bd929842dGeoff Lang        const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalformat);
51285d601382b51c29d1670b58c01360416bd929842dGeoff Lang        if (imageSize < 0 || static_cast<GLuint>(imageSize) != formatInfo.computeBlockSize(GL_UNSIGNED_BYTE, width, height))
5129a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5130b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
5131b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5132bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5133a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5134bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // validateES3TexImageFormat sets the error code if there is an error
5135bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateES3TexImageParameters(context, target, level, internalformat, true, false,
5136bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           0, 0, 0, width, height, depth, border, GL_NONE, GL_NONE, data))
5137bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5138bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5139bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5140875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5141bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch(target)
5142bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5143bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_3D:
5144875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            {
5145bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture3D *texture = context->getTexture3D();
5146bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setCompressedImage(level, internalformat, width, height, depth, imageSize, data);
5147875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            }
5148bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5149875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5150bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D_ARRAY:
5151875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            {
5152bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2DArray *texture = context->getTexture2DArray();
5153bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->setCompressedImage(level, internalformat, width, height, depth, imageSize, data);
5154875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            }
5155bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5156bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5157bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
5158b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5159b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5160875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com        }
5161a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5162a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5163a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5164a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
5165a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5166a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
5167a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
5168a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        "GLenum format = 0x%X, GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",
5169a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
5170a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5171bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5172bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5173a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
5174bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5175bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5176b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5177b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5178bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5179a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
51805d601382b51c29d1670b58c01360416bd929842dGeoff Lang        const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(format);
51815d601382b51c29d1670b58c01360416bd929842dGeoff Lang        if (imageSize < 0 || static_cast<GLuint>(imageSize) != formatInfo.computeBlockSize(GL_UNSIGNED_BYTE, width, height))
5182a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5183b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
5184b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5185bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5186bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5187bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!data)
5188bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5189b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
5190b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5191bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5192a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5193bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // validateES3TexImageFormat sets the error code if there is an error
5194bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateES3TexImageParameters(context, target, level, GL_NONE, true, true,
5195bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                           0, 0, 0, width, height, depth, 0, GL_NONE, GL_NONE, data))
5196bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5197bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5198bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5199875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5200bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Zero sized uploads are valid but no-ops
5201bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (width == 0 || height == 0)
5202bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5203bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5204bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5205875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5206bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch(target)
5207bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5208bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_3D:
5209875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            {
5210bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture3D *texture = context->getTexture3D();
5211bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->subImageCompressed(level, xoffset, yoffset, zoffset, width, height, depth,
5212bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                            format, imageSize, data);
5213875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com            }
5214bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5215875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com
5216bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D_ARRAY:
5217c41e42d49626e1527c9e049b48d7c9fb30b0b9d6Geoff Lang            {
5218bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2DArray *texture = context->getTexture2DArray();
5219bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture->subImageCompressed(level, xoffset, yoffset, zoffset, width, height, depth,
5220bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                            format, imageSize, data);
5221c41e42d49626e1527c9e049b48d7c9fb30b0b9d6Geoff Lang            }
5222bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5223c41e42d49626e1527c9e049b48d7c9fb30b0b9d6Geoff Lang
5224b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
5225b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5226b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5227875994b3e3dcef5530554dedde418ebc1c666f71shannon.woods%transgaming.com@gtempaccount.com        }
5228a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5229a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5230a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5231a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGenQueries(GLsizei n, GLuint* ids)
5232a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5233a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);
5234a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5235bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5236bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5237bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5238bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5239a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5240b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5241b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5242bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5243a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5244bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (n < 0)
5245bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5246b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
5247b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5248bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
524937dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
5250bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (GLsizei i = 0; i < n; i++)
5251bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5252bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            ids[i] = context->createQuery();
5253705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5254a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5255a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5256a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5257a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDeleteQueries(GLsizei n, const GLuint* ids)
5258a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5259a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);
5260a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5261bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5262bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5263bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5264bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5265a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5266b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5267b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5268bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5269a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5270bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (n < 0)
5271bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5272b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
5273b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5274bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
527537dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
5276bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (GLsizei i = 0; i < n; i++)
5277bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5278bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->deleteQuery(ids[i]);
5279705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5280a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5281a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5282a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5283a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLboolean __stdcall glIsQuery(GLuint id)
5284a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5285a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint id = %u)", id);
5286a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5287bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5288bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5289bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5290bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5291a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5292b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5293b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_FALSE;
5294705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5295bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5296bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return (context->getQuery(id, false, GL_NONE) != NULL) ? GL_TRUE : GL_FALSE;
5297a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5298a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5299a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return GL_FALSE;
5300a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5301a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5302a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glBeginQuery(GLenum target, GLuint id)
5303a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5304a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
5305a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5306bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5307bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5308bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5309bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5310a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5311b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5312b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5313bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5314a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5315bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateBeginQuery(context, target, id))
5316bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5317bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5318705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
53195aad96735332d3c033a8212d96899173631653c5Geoff Lang
53205aad96735332d3c033a8212d96899173631653c5Geoff Lang        gl::Error error = context->beginQuery(target, id);
53215aad96735332d3c033a8212d96899173631653c5Geoff Lang        if (error.isError())
53225aad96735332d3c033a8212d96899173631653c5Geoff Lang        {
53235aad96735332d3c033a8212d96899173631653c5Geoff Lang            context->recordError(error);
53245aad96735332d3c033a8212d96899173631653c5Geoff Lang            return;
53255aad96735332d3c033a8212d96899173631653c5Geoff Lang        }
5326a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5327a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5328a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5329a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glEndQuery(GLenum target)
5330a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5331a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X)", target);
5332a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5333bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5334bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5335bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5336bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5337a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5338b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5339b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5340bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
534137dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
5342bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateEndQuery(context, target))
5343bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5344bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5345705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5346bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
53475aad96735332d3c033a8212d96899173631653c5Geoff Lang        gl::Error error = context->endQuery(target);
53485aad96735332d3c033a8212d96899173631653c5Geoff Lang        if (error.isError())
53495aad96735332d3c033a8212d96899173631653c5Geoff Lang        {
53505aad96735332d3c033a8212d96899173631653c5Geoff Lang            context->recordError(error);
53515aad96735332d3c033a8212d96899173631653c5Geoff Lang            return;
53525aad96735332d3c033a8212d96899173631653c5Geoff Lang        }
5353a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5354a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5355a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5356a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetQueryiv(GLenum target, GLenum pname, GLint* params)
5357a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5358a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);
5359a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5360bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5361bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5362bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5363bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5364a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5365b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5366b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5367bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5368a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5369bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidQueryType(context, target))
5370bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5371b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5372b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5373bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
537437dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
5375bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
5376bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5377bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_CURRENT_QUERY:
5378bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            params[0] = static_cast<GLint>(context->getState().getActiveQueryId(target));
5379bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
538037dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
5381bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
5382b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5383b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5384705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5385a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5386a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5387a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5388a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
5389a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5390a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint id = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", id, pname, params);
5391a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5392bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5393bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5394bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5395bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5396a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5397b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5398b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5399bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5400a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5401bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Query *queryObject = context->getQuery(id, false, GL_NONE);
540237dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
5403bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!queryObject)
5404bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5405b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5406b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5407bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
540837dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
5409bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getState().getActiveQueryId(queryObject->getType()) == id)
5410bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5411b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5412b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5413bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
541437dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
5415bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch(pname)
5416bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
54175aad96735332d3c033a8212d96899173631653c5Geoff Lang          case GL_QUERY_RESULT_EXT:
54185aad96735332d3c033a8212d96899173631653c5Geoff Lang            {
54195aad96735332d3c033a8212d96899173631653c5Geoff Lang                gl::Error error = queryObject->getResult(params);
54205aad96735332d3c033a8212d96899173631653c5Geoff Lang                if (error.isError())
54215aad96735332d3c033a8212d96899173631653c5Geoff Lang                {
54225aad96735332d3c033a8212d96899173631653c5Geoff Lang                    context->recordError(error);
54235aad96735332d3c033a8212d96899173631653c5Geoff Lang                    return;
54245aad96735332d3c033a8212d96899173631653c5Geoff Lang                }
54255aad96735332d3c033a8212d96899173631653c5Geoff Lang            }
5426bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5427b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
54285aad96735332d3c033a8212d96899173631653c5Geoff Lang          case GL_QUERY_RESULT_AVAILABLE_EXT:
54295aad96735332d3c033a8212d96899173631653c5Geoff Lang            {
54305aad96735332d3c033a8212d96899173631653c5Geoff Lang                gl::Error error = queryObject->isResultAvailable(params);
54315aad96735332d3c033a8212d96899173631653c5Geoff Lang                if (error.isError())
54325aad96735332d3c033a8212d96899173631653c5Geoff Lang                {
54335aad96735332d3c033a8212d96899173631653c5Geoff Lang                    context->recordError(error);
54345aad96735332d3c033a8212d96899173631653c5Geoff Lang                    return;
54355aad96735332d3c033a8212d96899173631653c5Geoff Lang                }
54365aad96735332d3c033a8212d96899173631653c5Geoff Lang            }
5437bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5438b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
5439bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
5440b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5441b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5442705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5443a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5444a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5445a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5446a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLboolean __stdcall glUnmapBuffer(GLenum target)
5447a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5448a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X)", target);
5449a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5450bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5451bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5452bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5453bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5454a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5455b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5456b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_FALSE;
5457705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5458bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5459bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return glUnmapBufferOES(target);
5460a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5461a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5462a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return GL_FALSE;
5463a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5464a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5465a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
5466a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5467a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLvoid** params = 0x%0.8p)", target, pname, params);
5468a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5469bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5470bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5471bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5472bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5473a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5474b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5475b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5476705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5477bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5478bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        glGetBufferPointervOES(target, pname, params);
5479a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5480a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5481a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5482a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDrawBuffers(GLsizei n, const GLenum* bufs)
5483a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5484bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5485bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5486bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5487bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5488a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5489b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5490b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
54917948c5f69e89ba771bbb7e6db8cc87574239a1cashannon.woods%transgaming.com@gtempaccount.com        }
5492bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5493bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        glDrawBuffersEXT(n, bufs);
5494a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5495a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5496a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5497a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
5498a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5499a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
5500a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, transpose, value);
5501a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5502bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5503bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5504bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5505bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2x3, location, count, transpose))
5506a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5507bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5508f130616e19a84f5b991aec4327ab041094d47b02shannon.woods%transgaming.com@gtempaccount.com        }
5509bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5510bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
5511bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniformMatrix2x3fv(location, count, transpose, value);
5512a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5513a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5514a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5515a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
5516a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5517a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
5518a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, transpose, value);
5519a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5520bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5521bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5522bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5523bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3x2, location, count, transpose))
5524a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5525bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5526f130616e19a84f5b991aec4327ab041094d47b02shannon.woods%transgaming.com@gtempaccount.com        }
5527bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5528bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
5529bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniformMatrix3x2fv(location, count, transpose, value);
5530a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5531a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5532a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5533a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
5534a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5535a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
5536a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, transpose, value);
5537a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5538bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5539bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5540bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5541bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2x4, location, count, transpose))
5542a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5543bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5544f130616e19a84f5b991aec4327ab041094d47b02shannon.woods%transgaming.com@gtempaccount.com        }
5545bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5546bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
5547bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniformMatrix2x4fv(location, count, transpose, value);
5548a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5549a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5550a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5551a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
5552a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5553a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
5554a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, transpose, value);
5555a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5556bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5557bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5558bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5559bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4x2, location, count, transpose))
5560a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5561bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5562f130616e19a84f5b991aec4327ab041094d47b02shannon.woods%transgaming.com@gtempaccount.com        }
5563bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5564bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
5565bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniformMatrix4x2fv(location, count, transpose, value);
5566a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5567a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5568a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5569a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
5570a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5571a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
5572a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, transpose, value);
5573a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5574bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5575bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5576a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
5577bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3x4, location, count, transpose))
5578bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5579bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5580bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5581bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5582bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
5583bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniformMatrix3x4fv(location, count, transpose, value);
5584a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5585a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5586a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5587a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
5588a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5589a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
5590a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, transpose, value);
5591a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5592bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5593bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5594bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5595bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4x3, location, count, transpose))
5596a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5597bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5598f130616e19a84f5b991aec4327ab041094d47b02shannon.woods%transgaming.com@gtempaccount.com        }
5599bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5600bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
5601bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniformMatrix4x3fv(location, count, transpose, value);
5602a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5603a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5604a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5605a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
5606a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5607a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, GLint dstX0 = %d, "
5608a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, GLbitfield mask = 0x%X, GLenum filter = 0x%X)",
5609a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
5610a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5611bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5612bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5613a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
5614bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5615a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5616b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5617b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5618bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5619758d5b2158ed4df145974c475df68a35bf476a00Geoff Lang
5620bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateBlitFramebufferParameters(context, srcX0, srcY0, srcX1, srcY1,
5621bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                               dstX0, dstY0, dstX1, dstY1, mask, filter,
5622bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                               false))
5623bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5624bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5625705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5626bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5627bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
5628bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                 mask, filter);
5629a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5630a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5631a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5632a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
5633a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5634a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
5635a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        target, samples, internalformat, width, height);
5636a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5637bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5638bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5639bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5640bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5641a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5642b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5643b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5644bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
56452e1dcd59a6ecd44cabe70f12ca7fac0af33bbca0Geoff Lang
5646bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateRenderbufferStorageParameters(context, target, samples, internalformat,
5647bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                                   width, height, false))
5648bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5649bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5650705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5651bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5652bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->setRenderbufferStorage(width, height, internalformat, samples);
5653a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5654a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5655a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5656a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
5657a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5658a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, GLint layer = %d)",
5659a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        target, attachment, texture, level, layer);
5660a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5661bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5662bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5663bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5664bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateFramebufferTextureLayer(context, target, attachment, texture,
5665bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                             level, layer))
5666a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5667bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
5668bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
56693ed0c4848adff160a30c825ed630e7b14d5e1335Geoff Lang
5670bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebuffer = context->getState().getTargetFramebuffer(target);
5671bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(framebuffer);
56723ed0c4848adff160a30c825ed630e7b14d5e1335Geoff Lang
5673bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture *textureObject = context->getTexture(texture);
5674bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLenum textarget = textureObject ? textureObject->getTarget() : GL_NONE;
56753ed0c4848adff160a30c825ed630e7b14d5e1335Geoff Lang
5676bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
5677bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5678bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
5679bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            framebuffer->setColorbuffer(colorAttachment, textarget, texture, level, layer);
5680bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5681bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
5682bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5683bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            switch (attachment)
56843ed0c4848adff160a30c825ed630e7b14d5e1335Geoff Lang            {
5685bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_DEPTH_ATTACHMENT:         framebuffer->setDepthbuffer(textarget, texture, level, layer);        break;
5686bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_STENCIL_ATTACHMENT:       framebuffer->setStencilbuffer(textarget, texture, level, layer);      break;
5687bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang              case GL_DEPTH_STENCIL_ATTACHMENT: framebuffer->setDepthStencilBuffer(textarget, texture, level, layer); break;
56883ed0c4848adff160a30c825ed630e7b14d5e1335Geoff Lang            }
5689705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5690a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5691a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5692a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5693a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLvoid* __stdcall glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
5694a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5695a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d, GLbitfield access = 0x%X)",
5696a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, offset, length, access);
5697a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5698bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5699bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5700bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5701bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5702a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5703b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5704b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
5705705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5706bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5707bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return glMapBufferRangeEXT(target, offset, length, access);
5708a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5709a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5710a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return NULL;
5711a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5712a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5713a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
5714a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5715a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d)", target, offset, length);
5716a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5717bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5718bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5719bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5720bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5721a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5722b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5723b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5724705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5725bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5726bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        glFlushMappedBufferRangeEXT(target, offset, length);
5727a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5728a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5729a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5730a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glBindVertexArray(GLuint array)
5731a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5732a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint array = %u)", array);
5733a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5734bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5735bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5736bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5737bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5738a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5739b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5740b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5741bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5742d102854814df2170aa3210c0699aab01cf080fd4Jamie Madill
5743bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::VertexArray *vao = context->getVertexArray(array);
5744d102854814df2170aa3210c0699aab01cf080fd4Jamie Madill
5745bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!vao)
5746bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5747bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // The default VAO should always exist
5748bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            ASSERT(array != 0);
5749b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5750b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5751705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5752bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5753bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->bindVertexArray(array);
5754a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5755a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5756a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5757a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDeleteVertexArrays(GLsizei n, const GLuint* arrays)
5758a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5759a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsizei n = %d, const GLuint* arrays = 0x%0.8p)", n, arrays);
5760a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5761bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5762bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5763bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5764bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5765a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5766b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5767b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5768bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5769a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5770bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (n < 0)
5771bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5772b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
5773b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5774bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5775d102854814df2170aa3210c0699aab01cf080fd4Jamie Madill
5776bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int arrayIndex = 0; arrayIndex < n; arrayIndex++)
5777bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5778bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (arrays[arrayIndex] != 0)
5779d102854814df2170aa3210c0699aab01cf080fd4Jamie Madill            {
5780bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                context->deleteVertexArray(arrays[arrayIndex]);
5781d102854814df2170aa3210c0699aab01cf080fd4Jamie Madill            }
5782705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5783a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5784a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5785a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5786a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGenVertexArrays(GLsizei n, GLuint* arrays)
5787a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5788a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsizei n = %d, GLuint* arrays = 0x%0.8p)", n, arrays);
5789a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5790bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5791bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5792bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5793bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5794a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5795b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5796b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5797bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5798a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5799bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (n < 0)
5800bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5801b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
5802b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5803bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5804d102854814df2170aa3210c0699aab01cf080fd4Jamie Madill
5805bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int arrayIndex = 0; arrayIndex < n; arrayIndex++)
5806bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5807bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            arrays[arrayIndex] = context->createVertexArray();
5808705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5809a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5810a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5811a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5812a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLboolean __stdcall glIsVertexArray(GLuint array)
5813a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5814a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint array = %u)", array);
5815a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5816bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5817bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5818bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5819bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5820a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5821b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5822b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_FALSE;
5823bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5824a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5825bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (array == 0)
5826bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5827bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return GL_FALSE;
5828bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5829d102854814df2170aa3210c0699aab01cf080fd4Jamie Madill
5830bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::VertexArray *vao = context->getVertexArray(array);
5831d102854814df2170aa3210c0699aab01cf080fd4Jamie Madill
5832bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return (vao != NULL ? GL_TRUE : GL_FALSE);
5833a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5834a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5835a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return GL_FALSE;
5836a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5837a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5838a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetIntegeri_v(GLenum target, GLuint index, GLint* data)
5839a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5840a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLuint index = %u, GLint* data = 0x%0.8p)",
5841a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, index, data);
5842a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5843bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5844bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5845a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
5846bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5847bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5848b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5849b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5850bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5851a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
58523a61c321e7ea779f23a4da72db977286897b1168Geoff Lang        const gl::Caps &caps = context->getCaps();
5853bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
5854a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5855bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER_START:
5856bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
5857bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
585805881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang            if (index >= caps.maxTransformFeedbackSeparateAttributes)
585905881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang            {
5860b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
5861b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
586205881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang            }
5863bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5864b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
5865bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER_START:
5866bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER_SIZE:
5867bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER_BINDING:
58683a61c321e7ea779f23a4da72db977286897b1168Geoff Lang            if (index >= caps.maxCombinedUniformBlocks)
58693a61c321e7ea779f23a4da72db977286897b1168Geoff Lang            {
5870b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
5871b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
58723a61c321e7ea779f23a4da72db977286897b1168Geoff Lang            }
5873bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5874b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
5875bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
5876b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5877b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5878bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5879a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5880bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!(context->getIndexedIntegerv(target, index, data)))
5881bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5882bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            GLenum nativeType;
5883bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            unsigned int numParams = 0;
5884bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (!context->getIndexedQueryParameterInfo(target, &nativeType, &numParams))
5885b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            {
5886b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
5887b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
5888b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            }
588915934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
5890bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (numParams == 0)
5891b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            {
5892bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                return; // it is known that pname is valid, but there are no parameters to return
5893b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            }
589415934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
5895bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (nativeType == GL_INT_64_ANGLEX)
5896bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
5897bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                GLint64 minIntValue = static_cast<GLint64>(std::numeric_limits<int>::min());
5898bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                GLint64 maxIntValue = static_cast<GLint64>(std::numeric_limits<int>::max());
5899bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                GLint64 *int64Params = new GLint64[numParams];
590015934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
5901bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                context->getIndexedInteger64v(target, index, int64Params);
590215934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
5903bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                for (unsigned int i = 0; i < numParams; ++i)
590415934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods                {
5905bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                    GLint64 clampedValue = std::max(std::min(int64Params[i], maxIntValue), minIntValue);
5906bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                    data[i] = static_cast<GLint>(clampedValue);
590715934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods                }
5908bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5909bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                delete [] int64Params;
5910bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
5911bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
5912bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
5913bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                UNREACHABLE();
591415934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods            }
5915705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5916a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5917a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5918a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5919a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glBeginTransformFeedback(GLenum primitiveMode)
5920a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5921a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum primitiveMode = 0x%X)", primitiveMode);
5922a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5923bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5924bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5925bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5926bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5927a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5928b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5929b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5930bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5931a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5932bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (primitiveMode)
5933bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5934bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRIANGLES:
5935bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_LINES:
5936bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_POINTS:
5937bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
5938b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
5939bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
5940b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
5941b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5942bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5943c8058451c87ec298683bf484813016b20bf36777Geoff Lang
5944bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::TransformFeedback *transformFeedback = context->getState().getCurrentTransformFeedback();
5945bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(transformFeedback != NULL);
5946c8058451c87ec298683bf484813016b20bf36777Geoff Lang
5947bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (transformFeedback->isStarted())
5948bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5949b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5950b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5951bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5952c8058451c87ec298683bf484813016b20bf36777Geoff Lang
5953bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (transformFeedback->isPaused())
5954bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5955bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            transformFeedback->resume();
5956bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5957bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
5958bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5959bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            transformFeedback->start(primitiveMode);
5960705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5961a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5962a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5963a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5964a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glEndTransformFeedback(void)
5965a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5966a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(void)");
5967a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5968bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5969bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5970bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
5971bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5972a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
5973b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5974b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5975bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
5976bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5977bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::TransformFeedback *transformFeedback = context->getState().getCurrentTransformFeedback();
5978bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(transformFeedback != NULL);
5979c8058451c87ec298683bf484813016b20bf36777Geoff Lang
5980bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!transformFeedback->isStarted())
5981bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
5982b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
5983b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
5984705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
5985bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
5986bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        transformFeedback->stop();
5987a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
5988a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
5989a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5990a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
5991a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
5992a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLuint index = %u, GLuint buffer = %u, GLintptr offset = %d, GLsizeiptr size = %d)",
5993a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, index, buffer, offset, size);
5994a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
5995bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
5996bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
5997a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
5998bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
5999bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6000b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6001b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6002bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6003a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
60043a61c321e7ea779f23a4da72db977286897b1168Geoff Lang        const gl::Caps &caps = context->getCaps();
6005bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
6006a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6007bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER:
600805881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang            if (index >= caps.maxTransformFeedbackSeparateAttributes)
6009a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            {
6010b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6011b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6012a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            }
6013bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6014a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6015bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER:
60163a61c321e7ea779f23a4da72db977286897b1168Geoff Lang            if (index >= caps.maxUniformBufferBindings)
6017d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com            {
6018b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6019b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6020bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
6021bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6022d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com
6023bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6024b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6025b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6026bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6027d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com
6028bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (buffer != 0 && size <= 0)
6029bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6030b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6031b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6032bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6033bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6034bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
6035bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6036bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER:
6037d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com
6038bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // size and offset must be a multiple of 4
6039bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (buffer != 0 && ((offset % 4) != 0 || (size % 4) != 0))
6040d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com            {
6041b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6042b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6043d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com            }
6044d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com
6045bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindIndexedTransformFeedbackBuffer(buffer, index, offset, size);
6046bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindGenericTransformFeedbackBuffer(buffer);
6047bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6048d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com
6049bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER:
605097c3d501704adb4b41a0ef7374f684fb762ee11dshannonwoods@chromium.org
6051bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // it is an error to bind an offset not a multiple of the alignment
60523a61c321e7ea779f23a4da72db977286897b1168Geoff Lang            if (buffer != 0 && (offset % caps.uniformBufferOffsetAlignment) != 0)
6053bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
6054b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6055b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6056bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
605797c3d501704adb4b41a0ef7374f684fb762ee11dshannonwoods@chromium.org
6058bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindIndexedUniformBuffer(buffer, index, offset, size);
6059bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindGenericUniformBuffer(buffer);
6060bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6061d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com
6062bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6063bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            UNREACHABLE();
6064d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com        }
6065a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6066a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6067a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6068a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
6069a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6070a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLuint index = %u, GLuint buffer = %u)",
6071a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, index, buffer);
6072a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6073bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6074bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6075a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
6076bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6077bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6078b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6079b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6080bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6081a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
60823a61c321e7ea779f23a4da72db977286897b1168Geoff Lang        const gl::Caps &caps = context->getCaps();
6083bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
6084a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6085bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER:
608605881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang            if (index >= caps.maxTransformFeedbackSeparateAttributes)
6087a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            {
6088b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6089b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6090a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            }
6091bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6092a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6093bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER:
60943a61c321e7ea779f23a4da72db977286897b1168Geoff Lang            if (index >= caps.maxUniformBufferBindings)
6095d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com            {
6096b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6097b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6098d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com            }
6099bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6100d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com
6101bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6102b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6103b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6104bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6105d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com
6106bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
6107bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6108bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER:
6109bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindIndexedTransformFeedbackBuffer(buffer, index, 0, 0);
6110bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindGenericTransformFeedbackBuffer(buffer);
6111bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6112d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com
6113bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER:
6114bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindIndexedUniformBuffer(buffer, index, 0, 0);
6115bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->bindGenericUniformBuffer(buffer);
6116bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6117bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6118bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6119bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            UNREACHABLE();
6120d4e619726411af97dc96aee7ed6af8444343514bshannon.woods%transgaming.com@gtempaccount.com        }
6121a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6122a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6123a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6124a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
6125a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6126a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLsizei count = %d, const GLchar* const* varyings = 0x%0.8p, GLenum bufferMode = 0x%X)",
6127a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, count, varyings, bufferMode);
6128a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6129bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6130bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6131a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
6132bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6133bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6134b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6135b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6136bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6137a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6138bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (count < 0)
6139a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6140b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6141b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6142bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6143a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
614405881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang        const gl::Caps &caps = context->getCaps();
6145bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (bufferMode)
6146bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6147bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_INTERLEAVED_ATTRIBS:
6148bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6149bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_SEPARATE_ATTRIBS:
615005881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang            if (static_cast<GLuint>(count) > caps.maxTransformFeedbackSeparateAttributes)
615148dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang            {
6152b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6153b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
615448dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang            }
6155bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6156bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6157b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6158b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6159bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
616048dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang
6161bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidProgram(context, program))
6162bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6163bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
6164bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
616548dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang
6166bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
6167bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(programObject);
616848dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang
6169bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programObject->setTransformFeedbackVaryings(count, varyings, bufferMode);
6170a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6171a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6172a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6173a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
6174a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6175a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLuint index = %u, GLsizei bufSize = %d, GLsizei* length = 0x%0.8p, "
6176a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLsizei* size = 0x%0.8p, GLenum* type = 0x%0.8p, GLchar* name = 0x%0.8p)",
6177a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, index, bufSize, length, size, type, name);
6178a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6179bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6180bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6181bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6182bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6183a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6184b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6185b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6186bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
618748dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang
6188bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (bufSize < 0)
6189bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6190b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6191b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6192bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
619348dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang
6194bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidProgram(context, program))
6195bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6196bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
6197bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
619848dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang
6199bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
6200bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(programObject);
620148dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang
6202bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= static_cast<GLuint>(programObject->getTransformFeedbackVaryingCount()))
6203bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6204b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6205b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6206705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
6207bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6208bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programObject->getTransformFeedbackVarying(index, bufSize, length, size, type, name);
6209a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6210a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6211a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6212a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
6213a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6214a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint index = %u, GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const GLvoid* pointer = 0x%0.8p)",
6215a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          index, size, type, stride, pointer);
6216a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6217bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6218bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6219bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6220bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6221a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6222b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6223b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6224a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        }
6225a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6226b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
6227b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
6228b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6229b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6230b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
6231a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com
6232b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (size < 1 || size > 4)
6233b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
6234b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6235b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6236b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
6237a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com
6238b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        switch (type)
6239b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
6240b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_BYTE:
6241b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_UNSIGNED_BYTE:
6242b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_SHORT:
6243b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_UNSIGNED_SHORT:
6244b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INT:
6245b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_UNSIGNED_INT:
6246b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_INT_2_10_10_10_REV:
6247b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          case GL_UNSIGNED_INT_2_10_10_10_REV:
6248b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            break;
6249a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com
6250b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang          default:
6251b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6252b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6253b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
6254a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com
6255b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (stride < 0)
6256b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
6257b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6258b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6259b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
6260b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
6261b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if ((type == GL_INT_2_10_10_10_REV || type == GL_UNSIGNED_INT_2_10_10_10_REV) && size != 4)
6262b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
6263b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6264b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6265b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
6266bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6267bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // [OpenGL ES 3.0.2] Section 2.8 page 24:
6268bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // An INVALID_OPERATION error is generated when a non-zero vertex array object
6269bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // is bound, zero is bound to the ARRAY_BUFFER buffer object binding point,
6270bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // and the pointer argument is not NULL.
6271bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getState().getVertexArray()->id() != 0 && context->getState().getArrayBufferId() == 0 && pointer != NULL)
62721ab57be9db37d9a4df7b709300ce20743dd80f4bshannon.woods%transgaming.com@gtempaccount.com        {
6273b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6274b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
62751ab57be9db37d9a4df7b709300ce20743dd80f4bshannon.woods%transgaming.com@gtempaccount.com        }
62761ab57be9db37d9a4df7b709300ce20743dd80f4bshannon.woods%transgaming.com@gtempaccount.com
6277bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribState(index, context->getState().getTargetBuffer(GL_ARRAY_BUFFER), size, type, false, true,
6278bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                                 stride, pointer);
6279a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6280a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6281a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6282a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
6283a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6284a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",
6285a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          index, pname, params);
6286a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6287bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6288bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6289bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6290bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6291a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6292b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6293b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6294bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6295a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6296bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
6297bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6298b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6299b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6300bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6301a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill
6302bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        const gl::VertexAttribute &attribState = context->getState().getVertexAttribState(index);
6303a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill
6304b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidateGetVertexAttribParameters(context, pname))
6305bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6306bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
6307bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6308a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill
6309bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (pname == GL_CURRENT_VERTEX_ATTRIB)
6310bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6311bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            const gl::VertexAttribCurrentValueData &currentValueData = context->getState().getVertexAttribCurrentValue(index);
6312bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            for (int i = 0; i < 4; ++i)
6313a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill            {
6314bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                params[i] = currentValueData.IntValues[i];
6315a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill            }
6316705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
6317bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
6318bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6319bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = gl::QuerySingleVertexAttributeParameter<GLint>(attribState, pname);
6320bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6321a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6322a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6323a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6324a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
6325a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6326a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLuint* params = 0x%0.8p)",
6327a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          index, pname, params);
6328a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6329bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6330bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6331bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6332bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6333a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6334b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6335b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6336bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6337a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6338bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
6339bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6340b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6341b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6342bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6343a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill
6344bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        const gl::VertexAttribute &attribState = context->getState().getVertexAttribState(index);
6345a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill
6346b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidateGetVertexAttribParameters(context, pname))
6347bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6348bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
6349bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6350a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill
6351bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (pname == GL_CURRENT_VERTEX_ATTRIB)
6352bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6353bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            const gl::VertexAttribCurrentValueData &currentValueData = context->getState().getVertexAttribCurrentValue(index);
6354bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            for (int i = 0; i < 4; ++i)
6355a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill            {
6356bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                params[i] = currentValueData.UnsignedIntValues[i];
6357a7d05865b9282646f664867de5f3fc6b6892eb1cJamie Madill            }
6358705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
6359bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
6360bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6361bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = gl::QuerySingleVertexAttributeParameter<GLuint>(attribState, pname);
6362bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6363a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6364a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6365a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6366a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
6367a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6368a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint index = %u, GLint x = %d, GLint y = %d, GLint z = %d, GLint w = %d)",
6369a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          index, x, y, z, w);
6370a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6371bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6372bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6373bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6374bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6375a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6376b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6377b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6378bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6379a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com
6380bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
6381bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6382b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6383b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6384a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com        }
6385bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6386bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLint vals[4] = { x, y, z, w };
6387bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribi(index, vals);
6388a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6389a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6390a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6391a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
6392a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6393a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint index = %u, GLuint x = %u, GLuint y = %u, GLuint z = %u, GLuint w = %u)",
6394a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          index, x, y, z, w);
6395a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6396bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6397bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6398bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6399bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6400a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6401b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6402b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6403bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6404a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com
6405bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
6406bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6407b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6408b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6409a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com        }
6410bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6411bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLuint vals[4] = { x, y, z, w };
6412bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribu(index, vals);
6413a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6414a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6415a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6416a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glVertexAttribI4iv(GLuint index, const GLint* v)
6417a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6418a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint index = %u, const GLint* v = 0x%0.8p)", index, v);
6419a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6420bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6421bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6422bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6423bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6424a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6425b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6426b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6427bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6428a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com
6429bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
6430bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6431b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6432b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6433a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com        }
6434bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6435bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribi(index, v);
6436a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6437a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6438a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6439a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glVertexAttribI4uiv(GLuint index, const GLuint* v)
6440a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6441a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint index = %u, const GLuint* v = 0x%0.8p)", index, v);
6442a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6443bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6444bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6445bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6446bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6447a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6448b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6449b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6450bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6451a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com
6452bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
6453bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6454b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6455b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6456a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com        }
6457bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6458bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->getState().setVertexAttribu(index, v);
6459a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6460a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6461a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6462a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetUniformuiv(GLuint program, GLint location, GLuint* params)
6463a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6464a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLint location = %d, GLuint* params = 0x%0.8p)",
6465a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, location, params);
6466a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6467bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6468bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6469bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
64700063c51742659230ce535eb270acc0f06921d754Jamie Madill        if (!ValidateGetUniformuiv(context, program, location, params))
6471a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
64720063c51742659230ce535eb270acc0f06921d754Jamie Madill            return;
6473bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6474e229012c1479ef9e93fa6f3078619142104455dbshannon.woods%transgaming.com@gtempaccount.com
6475a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::Program *programObject = context->getProgram(program);
6476a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        ASSERT(programObject);
6477a502c749b249df6460326c4e5354f0549cc698d8Jamie Madill        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
64780063c51742659230ce535eb270acc0f06921d754Jamie Madill        ASSERT(programBinary);
6479e229012c1479ef9e93fa6f3078619142104455dbshannon.woods%transgaming.com@gtempaccount.com
648099a1e985196cab0ab309209fe8319f6bdbe1dd20Jamie Madill        programBinary->getUniformuiv(location, params);
6481a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6482a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6483a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6484a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLint __stdcall glGetFragDataLocation(GLuint program, const GLchar *name)
6485a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6486a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)",
6487a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, name);
6488a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6489bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6490bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6491bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6492bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6493a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6494b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6495b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return -1;
6496bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6497d1e78c9cf69e98abdf4b8bbc385b951ab3b99d4bJamie Madill
6498bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (program == 0)
6499bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6500b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6501b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return -1;
6502bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6503d1e78c9cf69e98abdf4b8bbc385b951ab3b99d4bJamie Madill
6504bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
6505d1e78c9cf69e98abdf4b8bbc385b951ab3b99d4bJamie Madill
6506bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject || !programObject->isLinked())
6507bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6508b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6509b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return -1;
6510bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6511d1e78c9cf69e98abdf4b8bbc385b951ab3b99d4bJamie Madill
6512bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
6513bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programBinary)
6514bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6515b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6516b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return -1;
6517705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
6518bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6519bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return programBinary->getFragDataLocation(name);
6520a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6521a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6522a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return 0;
6523a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6524a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6525a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniform1ui(GLint location, GLuint v0)
6526a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
65278431b9c80a4947448e62ba4891c60c670faf99beshannon.woods%transgaming.com@gtempaccount.com    glUniform1uiv(location, 1, &v0);
6528a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6529a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6530a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniform2ui(GLint location, GLuint v0, GLuint v1)
6531a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
65328431b9c80a4947448e62ba4891c60c670faf99beshannon.woods%transgaming.com@gtempaccount.com    const GLuint xy[] = { v0, v1 };
65338431b9c80a4947448e62ba4891c60c670faf99beshannon.woods%transgaming.com@gtempaccount.com    glUniform2uiv(location, 1, xy);
6534a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6535a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6536a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
6537a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
65388431b9c80a4947448e62ba4891c60c670faf99beshannon.woods%transgaming.com@gtempaccount.com    const GLuint xyz[] = { v0, v1, v2 };
65398431b9c80a4947448e62ba4891c60c670faf99beshannon.woods%transgaming.com@gtempaccount.com    glUniform3uiv(location, 1, xyz);
6540a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6541a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6542a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
6543a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
65448431b9c80a4947448e62ba4891c60c670faf99beshannon.woods%transgaming.com@gtempaccount.com    const GLuint xyzw[] = { v0, v1, v2, v3 };
65458431b9c80a4947448e62ba4891c60c670faf99beshannon.woods%transgaming.com@gtempaccount.com    glUniform4uiv(location, 1, xyzw);
6546a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6547a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6548a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniform1uiv(GLint location, GLsizei count, const GLuint* value)
6549a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6550a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, const GLuint* value = 0x%0.8p)",
6551a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, value);
6552a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6553bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6554bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6555bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6556bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_UNSIGNED_INT, location, count))
6557a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6558bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
655950ea4ab5e484f7d95e4d47a0bef50ca851acd63eshannon.woods%transgaming.com@gtempaccount.com        }
6560bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6561bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
6562bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform1uiv(location, count, value);
6563a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6564a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6565a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6566a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniform2uiv(GLint location, GLsizei count, const GLuint* value)
6567a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6568a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, const GLuint* value = 0x%0.8p)",
6569a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, value);
6570a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6571bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6572bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6573bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6574bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_UNSIGNED_INT_VEC2, location, count))
6575a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6576bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
657750ea4ab5e484f7d95e4d47a0bef50ca851acd63eshannon.woods%transgaming.com@gtempaccount.com        }
6578bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6579bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
6580bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform2uiv(location, count, value);
6581a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6582a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6583a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6584a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniform3uiv(GLint location, GLsizei count, const GLuint* value)
6585a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6586a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, const GLuint* value)",
6587a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, value);
6588a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6589bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6590bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6591bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6592bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_UNSIGNED_INT_VEC3, location, count))
6593a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6594bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
659550ea4ab5e484f7d95e4d47a0bef50ca851acd63eshannon.woods%transgaming.com@gtempaccount.com        }
6596bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6597bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
6598bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform3uiv(location, count, value);
6599a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6600a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6601a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6602a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniform4uiv(GLint location, GLsizei count, const GLuint* value)
6603a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6604a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLint location = %d, GLsizei count = %d, const GLuint* value = 0x%0.8p)",
6605a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          location, count, value);
6606a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6607bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6608bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6609bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6610bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateUniform(context, GL_UNSIGNED_INT_VEC4, location, count))
6611a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6612bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
661350ea4ab5e484f7d95e4d47a0bef50ca851acd63eshannon.woods%transgaming.com@gtempaccount.com        }
6614bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6615bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = context->getState().getCurrentProgramBinary();
6616bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->setUniform4uiv(location, count, value);
6617a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6618a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6619a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6620a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
6621a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6622a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLint* value = 0x%0.8p)",
6623a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          buffer, drawbuffer, value);
6624a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6625bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6626bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6627a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
6628bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateClearBuffer(context))
6629bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6630bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
6631bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6632a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6633bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (buffer)
6634a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6635bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_COLOR:
6636bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (drawbuffer < 0 || static_cast<GLuint>(drawbuffer) >= context->getCaps().maxDrawBuffers)
6637a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            {
6638b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6639b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6640a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            }
6641bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6642b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
6643bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_STENCIL:
6644bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (drawbuffer != 0)
664542359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang            {
6646b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6647b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
664842359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang            }
6649bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6650b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
6651bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6652b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6653b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6654705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
6655bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6656cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        gl::Error error = context->clearBufferiv(buffer, drawbuffer, value);
6657cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        if (error.isError())
6658cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        {
6659cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            context->recordError(error);
6660cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            return;
6661cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        }
6662a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6663a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6664a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6665a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
6666a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6667a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLuint* value = 0x%0.8p)",
6668a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          buffer, drawbuffer, value);
6669a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6670bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6671bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6672bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6673bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateClearBuffer(context))
6674a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6675bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
6676bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6677a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6678bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (buffer)
6679bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6680bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_COLOR:
6681bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (drawbuffer < 0 || static_cast<GLuint>(drawbuffer) >= context->getCaps().maxDrawBuffers)
668242359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang            {
6683b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6684b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
668542359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang            }
6686bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6687b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
6688bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6689b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6690b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6691705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
6692bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6693cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        gl::Error error = context->clearBufferuiv(buffer, drawbuffer, value);
6694cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        if (error.isError())
6695cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        {
6696cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            context->recordError(error);
6697cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            return;
6698cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        }
6699a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6700a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6701a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6702a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
6703a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6704a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLfloat* value = 0x%0.8p)",
6705a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          buffer, drawbuffer, value);
6706a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6707bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6708bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6709a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
6710bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateClearBuffer(context))
6711bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6712bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
6713bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6714a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6715bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (buffer)
6716a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6717bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_COLOR:
6718bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (drawbuffer < 0 || static_cast<GLuint>(drawbuffer) >= context->getCaps().maxDrawBuffers)
6719a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            {
6720b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6721b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6722a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            }
6723bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6724b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
6725bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_DEPTH:
6726bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (drawbuffer != 0)
6727bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
6728b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6729b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
673042359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang            }
6731bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6732b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
6733bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6734b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6735b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6736705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
6737bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6738cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        gl::Error error = context->clearBufferfv(buffer, drawbuffer, value);
6739cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        if (error.isError())
6740cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        {
6741cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            context->recordError(error);
6742cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            return;
6743cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        }
6744a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6745a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6746a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6747a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
6748a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6749a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, GLfloat depth, GLint stencil = %d)",
6750a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          buffer, drawbuffer, depth, stencil);
6751a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6752bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6753bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6754bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6755bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateClearBuffer(context))
6756a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6757bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
6758bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6759a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6760bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (buffer)
6761bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6762bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_DEPTH_STENCIL:
6763bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (drawbuffer != 0)
676442359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang            {
6765b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6766b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
676742359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang            }
6768bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6769b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
6770bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6771b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6772b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6773705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
6774bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6775cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        gl::Error error = context->clearBufferfi(buffer, drawbuffer, depth, stencil);
6776cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        if (error.isError())
6777cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        {
6778cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            context->recordError(error);
6779cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang            return;
6780cc79b8c6b3c713904fa6d0613018b3e2f7fd8eacGeoff Lang        }
6781a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6782a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6783a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6784a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comconst GLubyte* __stdcall glGetStringi(GLenum name, GLuint index)
6785a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6786a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum name = 0x%X, GLuint index = %u)", name, index);
6787a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6788bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6789bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6790bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6791bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6792a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6793b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6794b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
6795bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6796302df74cc22fdf426334aebd9dbad4d7b3df5be2shannonwoods@chromium.org
6797bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (name != GL_EXTENSIONS)
6798bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6799b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6800b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
6801bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6802cec3590a151059813b91b33cd5e000c94f5bccaaGeoff Lang
6803bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (index >= context->getExtensionStringCount())
6804bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6805b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6806b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
6807302df74cc22fdf426334aebd9dbad4d7b3df5be2shannonwoods@chromium.org        }
6808bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6809bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return reinterpret_cast<const GLubyte*>(context->getExtensionString(index).c_str());
6810a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6811a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6812a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return NULL;
6813a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6814a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6815a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
6816a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6817a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum readTarget = 0x%X, GLenum writeTarget = 0x%X, GLintptr readOffset = %d, GLintptr writeOffset = %d, GLsizeiptr size = %d)",
6818a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          readTarget, writeTarget, readOffset, writeOffset, size);
6819a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6820bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6821bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6822bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
6823bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6824a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6825b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6826b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6827bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6828a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6829bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, readTarget) || !gl::ValidBufferTarget(context, readTarget))
6830bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6831b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6832b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6833bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6834296c3f25c04032a386f7c0c0d8ad2f71feebcf4fshannon.woods%transgaming.com@gtempaccount.com
6835bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *readBuffer = context->getState().getTargetBuffer(readTarget);
6836bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *writeBuffer = context->getState().getTargetBuffer(writeTarget);
6837296c3f25c04032a386f7c0c0d8ad2f71feebcf4fshannon.woods%transgaming.com@gtempaccount.com
6838bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!readBuffer || !writeBuffer)
6839bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6840b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6841b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6842bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6843296c3f25c04032a386f7c0c0d8ad2f71feebcf4fshannon.woods%transgaming.com@gtempaccount.com
6844cfaaf72fbd4b791c6eed6932e3e1e8741fd25d91Jamie Madill        // Verify that readBuffer and writeBuffer are not currently mapped
6845bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (readBuffer->isMapped() || writeBuffer->isMapped())
6846bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6847b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6848b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6849bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
68507a5f738bcf0773177a533c73bd51330a353e4004Jamie Madill
6851bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (readOffset < 0 || writeOffset < 0 || size < 0 ||
6852bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            static_cast<unsigned int>(readOffset + size) > readBuffer->getSize() ||
6853bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            static_cast<unsigned int>(writeOffset + size) > writeBuffer->getSize())
6854bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6855b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6856b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6857bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6858296c3f25c04032a386f7c0c0d8ad2f71feebcf4fshannon.woods%transgaming.com@gtempaccount.com
6859bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (readBuffer == writeBuffer && abs(readOffset - writeOffset) < size)
6860bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6861b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6862b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6863bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6864296c3f25c04032a386f7c0c0d8ad2f71feebcf4fshannon.woods%transgaming.com@gtempaccount.com
6865bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // if size is zero, the copy is a successful no-op
6866bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (size > 0)
6867bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
68682a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            gl::Error error = writeBuffer->copyBufferSubData(readBuffer, readOffset, writeOffset, size);
68692a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            if (error.isError())
68702a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            {
68712a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang                context->recordError(error);
68722a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang                return;
68732a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            }
6874296c3f25c04032a386f7c0c0d8ad2f71feebcf4fshannon.woods%transgaming.com@gtempaccount.com        }
6875a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6876a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6877a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6878a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
6879a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6880a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLsizei uniformCount = %d, const GLchar* const* uniformNames = 0x%0.8p, GLuint* uniformIndices = 0x%0.8p)",
6881a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, uniformCount, uniformNames, uniformIndices);
6882a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6883bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6884bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6885a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
6886bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6887bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6888b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6889b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6890bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6891a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6892bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (uniformCount < 0)
6893a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6894b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6895b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6896bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6897bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6898bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
6899bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6900bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
6901bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6902bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
6903a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            {
6904b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
6905b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6906a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            }
6907bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
6908c2ed991c7d844ff347ab4ce5945843a39f3bea47shannonwoods@chromium.org            {
6909b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6910b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6911c2ed991c7d844ff347ab4ce5945843a39f3bea47shannonwoods@chromium.org            }
6912bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6913c2ed991c7d844ff347ab4ce5945843a39f3bea47shannonwoods@chromium.org
6914bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
6915bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject->isLinked() || !programBinary)
6916bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6917bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            for (int uniformId = 0; uniformId < uniformCount; uniformId++)
6918c2ed991c7d844ff347ab4ce5945843a39f3bea47shannonwoods@chromium.org            {
6919bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                uniformIndices[uniformId] = GL_INVALID_INDEX;
6920c2ed991c7d844ff347ab4ce5945843a39f3bea47shannonwoods@chromium.org            }
6921bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6922bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
6923bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6924bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            for (int uniformId = 0; uniformId < uniformCount; uniformId++)
6925c2ed991c7d844ff347ab4ce5945843a39f3bea47shannonwoods@chromium.org            {
6926bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                uniformIndices[uniformId] = programBinary->getUniformIndex(uniformNames[uniformId]);
6927c2ed991c7d844ff347ab4ce5945843a39f3bea47shannonwoods@chromium.org            }
6928c2ed991c7d844ff347ab4ce5945843a39f3bea47shannonwoods@chromium.org        }
6929a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
6930a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
6931a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6932a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
6933a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
6934a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLsizei uniformCount = %d, const GLuint* uniformIndices = 0x%0.8p, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",
6935a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, uniformCount, uniformIndices, pname, params);
6936a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6937bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
6938bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
6939a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
6940bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
6941bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6942b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
6943b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6944bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6945a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
6946bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (uniformCount < 0)
6947a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
6948b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6949b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6950bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
6951bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6952bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
6953bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
6954bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
6955bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6956bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
6957a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            {
6958b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
6959b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
6960a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            }
6961bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
69622a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org            {
6963b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
6964b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
69652a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org            }
6966bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
69672a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org
6968bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
6969bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6970bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_TYPE:
6971bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_SIZE:
6972bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_NAME_LENGTH:
6973bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BLOCK_INDEX:
6974bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_OFFSET:
6975bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_ARRAY_STRIDE:
6976bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_MATRIX_STRIDE:
6977bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_IS_ROW_MAJOR:
6978bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
6979b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
6980bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
6981b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
6982b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6983bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
69842a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org
6985bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
69862a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org
6987bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programBinary && uniformCount > 0)
6988bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6989b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
6990b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
6991bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
69922a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org
6993bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int uniformId = 0; uniformId < uniformCount; uniformId++)
6994bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
6995bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            const GLuint index = uniformIndices[uniformId];
69962a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org
6997bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (index >= (GLuint)programBinary->getActiveUniformCount())
69982a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org            {
6999b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
7000b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
70012a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org            }
7002bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
70032a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org
7004bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int uniformId = 0; uniformId < uniformCount; uniformId++)
7005bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7006bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            const GLuint index = uniformIndices[uniformId];
7007bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            params[uniformId] = programBinary->getActiveUniformi(index, pname);
70082a9a9d232cee3c1d75384de834c0508c9cf2ab99shannonwoods@chromium.org        }
7009a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7010a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7011a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7012a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLuint __stdcall glGetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
7013a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7014a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, const GLchar* uniformBlockName = 0x%0.8p)", program, uniformBlockName);
7015a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7016bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7017bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7018bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7019bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7020a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7021b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7022b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_INVALID_INDEX;
7023bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7024a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7025bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
70264276625286ffa9f4f481e721e8df51844036ea76shannonwoods@chromium.org
7027bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
7028bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7029bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
70304276625286ffa9f4f481e721e8df51844036ea76shannonwoods@chromium.org            {
7031b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
7032b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return GL_INVALID_INDEX;
70334276625286ffa9f4f481e721e8df51844036ea76shannonwoods@chromium.org            }
7034bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
70354276625286ffa9f4f481e721e8df51844036ea76shannonwoods@chromium.org            {
7036b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
7037b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return GL_INVALID_INDEX;
70384276625286ffa9f4f481e721e8df51844036ea76shannonwoods@chromium.org            }
7039bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
70404276625286ffa9f4f481e721e8df51844036ea76shannonwoods@chromium.org
7041bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
7042bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programBinary)
7043bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7044bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return GL_INVALID_INDEX;
70454276625286ffa9f4f481e721e8df51844036ea76shannonwoods@chromium.org        }
7046bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7047bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return programBinary->getUniformBlockIndex(uniformBlockName);
7048a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7049a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7050a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return 0;
7051a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7052a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7053a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
7054a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7055a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLuint uniformBlockIndex = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",
7056a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, uniformBlockIndex, pname, params);
7057a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7058bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7059bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7060a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
7061bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7062bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7063b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7064b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7065bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7066bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
7067a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7068bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
7069a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7070bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
7071a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            {
7072b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
7073b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
7074a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com            }
7075bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
7076e7317ca8472c363510025c4c8c57682fcbc7f7d6shannonwoods@chromium.org            {
7077b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
7078b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
7079e7317ca8472c363510025c4c8c57682fcbc7f7d6shannonwoods@chromium.org            }
7080bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7081e7317ca8472c363510025c4c8c57682fcbc7f7d6shannonwoods@chromium.org
7082bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
7083e7317ca8472c363510025c4c8c57682fcbc7f7d6shannonwoods@chromium.org
7084bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programBinary || uniformBlockIndex >= programBinary->getActiveUniformBlockCount())
7085bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7086b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7087b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7088bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7089e7317ca8472c363510025c4c8c57682fcbc7f7d6shannonwoods@chromium.org
7090bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
7091bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7092bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BLOCK_BINDING:
7093bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = static_cast<GLint>(programObject->getUniformBlockBinding(uniformBlockIndex));
7094bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7095e7317ca8472c363510025c4c8c57682fcbc7f7d6shannonwoods@chromium.org
7096bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BLOCK_DATA_SIZE:
7097bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BLOCK_NAME_LENGTH:
7098bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
7099bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
7100bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
7101bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
7102bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            programBinary->getActiveUniformBlockiv(uniformBlockIndex, pname, params);
7103bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7104e7317ca8472c363510025c4c8c57682fcbc7f7d6shannonwoods@chromium.org
7105bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
7106b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
7107b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7108e7317ca8472c363510025c4c8c57682fcbc7f7d6shannonwoods@chromium.org        }
7109a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7110a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7111a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7112a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
7113a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7114a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLuint uniformBlockIndex = %u, GLsizei bufSize = %d, GLsizei* length = 0x%0.8p, GLchar* uniformBlockName = 0x%0.8p)",
7115a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, uniformBlockIndex, bufSize, length, uniformBlockName);
7116a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7117bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7118bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7119bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7120bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7121bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7122b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7123b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7124bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7125beb027831595253a2eeadebb3e577f10e62f73f7shannonwoods@chromium.org
7126bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
7127beb027831595253a2eeadebb3e577f10e62f73f7shannonwoods@chromium.org
7128bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
7129bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7130bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
7131bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
7132b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
7133b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
7134bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
7135bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
7136beb027831595253a2eeadebb3e577f10e62f73f7shannonwoods@chromium.org            {
7137b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
7138b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
7139beb027831595253a2eeadebb3e577f10e62f73f7shannonwoods@chromium.org            }
7140bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7141bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7142bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
7143beb027831595253a2eeadebb3e577f10e62f73f7shannonwoods@chromium.org
7144bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programBinary || uniformBlockIndex >= programBinary->getActiveUniformBlockCount())
7145bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7146b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7147b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7148beb027831595253a2eeadebb3e577f10e62f73f7shannonwoods@chromium.org        }
7149bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7150bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programBinary->getActiveUniformBlockName(uniformBlockIndex, bufSize, length, uniformBlockName);
7151a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7152a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7153a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7154a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
7155a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7156a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLuint uniformBlockIndex = %u, GLuint uniformBlockBinding = %u)",
7157a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, uniformBlockIndex, uniformBlockBinding);
7158a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7159bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7160bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7161bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7162bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7163a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7164b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7165b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7166bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7167a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
71683a61c321e7ea779f23a4da72db977286897b1168Geoff Lang        if (uniformBlockBinding >= context->getCaps().maxUniformBufferBindings)
7169bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7170b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7171b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7172bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
717370eb1ea25dbb03783fcee104314df6f2ba6a2dccshannonwoods@chromium.org
7174bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
717570eb1ea25dbb03783fcee104314df6f2ba6a2dccshannonwoods@chromium.org
7176bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
7177bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7178bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (context->getShader(program))
717970eb1ea25dbb03783fcee104314df6f2ba6a2dccshannonwoods@chromium.org            {
7180b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
7181b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
718270eb1ea25dbb03783fcee104314df6f2ba6a2dccshannonwoods@chromium.org            }
7183bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
718470eb1ea25dbb03783fcee104314df6f2ba6a2dccshannonwoods@chromium.org            {
7185b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
7186b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
718770eb1ea25dbb03783fcee104314df6f2ba6a2dccshannonwoods@chromium.org            }
7188bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
718970eb1ea25dbb03783fcee104314df6f2ba6a2dccshannonwoods@chromium.org
7190bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
7191bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7192bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // if never linked, there won't be any uniform blocks
7193bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programBinary || uniformBlockIndex >= programBinary->getActiveUniformBlockCount())
7194bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7195b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7196b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
719770eb1ea25dbb03783fcee104314df6f2ba6a2dccshannonwoods@chromium.org        }
7198bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7199bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        programObject->bindUniformBlock(uniformBlockIndex, uniformBlockBinding);
7200a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7201a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7202a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7203a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
7204a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7205a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d, GLsizei instanceCount = %d)",
7206a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          mode, first, count, instanceCount);
7207a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7208bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7209bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7210bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7211bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7212a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7213b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7214b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7215705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7216bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7217bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // glDrawArraysInstanced
7218bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        UNIMPLEMENTED();
7219a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7220a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7221a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7222a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
7223a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7224a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = 0x%0.8p, GLsizei instanceCount = %d)",
7225a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          mode, count, type, indices, instanceCount);
7226a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7227bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7228bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7229bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7230bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7231a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7232b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7233b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7234705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7235bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7236bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // glDrawElementsInstanced
7237bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        UNIMPLEMENTED();
7238a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7239a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7240a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7241a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLsync __stdcall glFenceSync(GLenum condition, GLbitfield flags)
7242a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7243a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum condition = 0x%X, GLbitfield flags = 0x%X)", condition, flags);
7244a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7245bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7246bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7247bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7248bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7249a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7250b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7251b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return 0;
7252bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
72535215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7254bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (condition != GL_SYNC_GPU_COMMANDS_COMPLETE)
7255bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7256b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
7257b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return 0;
7258bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
72595215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7260bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (flags != 0)
7261bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7262b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7263b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return 0;
7264705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7265bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7266bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return context->createFenceSync(condition);
7267a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7268a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7269a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return NULL;
7270a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7271a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7272a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLboolean __stdcall glIsSync(GLsync sync)
7273a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7274a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsync sync = 0x%0.8p)", sync);
7275a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7276bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7277bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7278bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7279bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7280a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7281b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7282b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_FALSE;
7283705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7284bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7285bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return (context->getFenceSync(sync) != NULL);
7286a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7287a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7288a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return GL_FALSE;
7289a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7290a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7291a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDeleteSync(GLsync sync)
7292a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7293a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsync sync = 0x%0.8p)", sync);
7294a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7295bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7296bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7297bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7298bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7299a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7300b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7301b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7302bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
73035215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7304bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (sync != static_cast<GLsync>(0) && !context->getFenceSync(sync))
7305bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7306b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7307b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7308705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7309bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7310bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->deleteFenceSync(sync);
7311a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7312a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7313a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7314a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLenum __stdcall glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
7315a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7316a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsync sync = 0x%0.8p, GLbitfield flags = 0x%X, GLuint64 timeout = %llu)",
7317a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          sync, flags, timeout);
7318a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7319bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7320bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7321bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7322bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7323a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7324b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7325b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_WAIT_FAILED;
7326bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
73275215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7328bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if ((flags & ~(GL_SYNC_FLUSH_COMMANDS_BIT)) != 0)
7329bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7330b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7331b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_WAIT_FAILED;
7332bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
73335215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7334bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::FenceSync *fenceSync = context->getFenceSync(sync);
73355215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7336bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!fenceSync)
7337bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7338b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7339b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_WAIT_FAILED;
7340705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7341bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7342bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return fenceSync->clientWait(flags, timeout);
7343a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7344a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7345a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return GL_FALSE;
7346a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7347a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7348a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
7349a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7350a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsync sync = 0x%0.8p, GLbitfield flags = 0x%X, GLuint64 timeout = %llu)",
7351a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          sync, flags, timeout);
7352a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7353bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7354bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7355bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7356bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7357a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7358b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7359b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7360bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
73615215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7362bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (flags != 0)
7363bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7364b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7365b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7366bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
73675215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7368bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (timeout != GL_TIMEOUT_IGNORED)
7369bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7370b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7371b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7372bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
73735215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7374bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::FenceSync *fenceSync = context->getFenceSync(sync);
73755215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7376bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!fenceSync)
7377bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7378b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7379b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7380705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7381bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7382bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        fenceSync->serverWait();
7383a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7384a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7385a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7386a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetInteger64v(GLenum pname, GLint64* params)
7387a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7388a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum pname = 0x%X, GLint64* params = 0x%0.8p)",
7389a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          pname, params);
7390a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7391bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7392bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7393bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7394bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7395a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7396b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7397b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7398bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7399a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7400bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLenum nativeType;
7401bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        unsigned int numParams = 0;
7402bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateStateQuery(context, pname, &nativeType, &numParams))
7403bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7404bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
7405bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
740679f2f45c96f23584831032c08ca44b841a206a39Jamie Madill
7407bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (nativeType == GL_INT_64_ANGLEX)
7408bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7409bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->getInteger64v(pname, params);
7410bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7411bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
7412bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7413bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            CastStateValues(context, nativeType, pname, numParams, params);
7414705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7415a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7416a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7417a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7418a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
7419a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7420a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsync sync = 0x%0.8p, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei* length = 0x%0.8p, GLint* values = 0x%0.8p)",
7421a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          sync, pname, bufSize, length, values);
7422a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7423bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7424bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7425bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7426bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7427a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7428b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7429b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7430bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7431a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7432bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (bufSize < 0)
7433bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7434b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7435b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7436bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
74375215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7438bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::FenceSync *fenceSync = context->getFenceSync(sync);
74395215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7440bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!fenceSync)
7441bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7442b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7443b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7444bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
74455215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7446bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
7447bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7448bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_OBJECT_TYPE:     values[0] = static_cast<GLint>(GL_SYNC_FENCE);              break;
7449bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_SYNC_STATUS:     values[0] = static_cast<GLint>(fenceSync->getStatus());     break;
7450bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_SYNC_CONDITION:  values[0] = static_cast<GLint>(fenceSync->getCondition());  break;
7451bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_SYNC_FLAGS:      values[0] = 0;                                              break;
74525215e1a12a294b35cb8c353530d74f8ee1921791Jamie Madill
7453bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
7454b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
7455b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7456705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7457a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7458a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7459a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7460a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetInteger64i_v(GLenum target, GLuint index, GLint64* data)
7461a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7462a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLuint index = %u, GLint64* data = 0x%0.8p)",
7463a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, index, data);
7464a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7465bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7466bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7467bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7468bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7469a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7470b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7471b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7472bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
747315934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
74743a61c321e7ea779f23a4da72db977286897b1168Geoff Lang        const gl::Caps &caps = context->getCaps();
7475bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
7476bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7477bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER_START:
7478bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
7479bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
748005881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang            if (index >= caps.maxTransformFeedbackSeparateAttributes)
748105881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang            {
7482b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
7483b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
748405881a0f2ac8830b61e3bf85e08115258e52178aGeoff Lang            }
7485bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7486b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
7487bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER_START:
7488bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER_SIZE:
7489bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_UNIFORM_BUFFER_BINDING:
74903a61c321e7ea779f23a4da72db977286897b1168Geoff Lang            if (index >= caps.maxUniformBufferBindings)
74913a61c321e7ea779f23a4da72db977286897b1168Geoff Lang            {
7492b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_VALUE));
7493b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
74943a61c321e7ea779f23a4da72db977286897b1168Geoff Lang            }
7495bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7496b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
7497bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
7498b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
7499b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7500bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
750115934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
7502bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!(context->getIndexedInteger64v(target, index, data)))
7503bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7504bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            GLenum nativeType;
7505bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            unsigned int numParams = 0;
7506bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (!context->getIndexedQueryParameterInfo(target, &nativeType, &numParams))
7507b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            {
7508b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_ENUM));
7509b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
7510b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            }
751115934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
7512bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (numParams == 0)
7513bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                return; // it is known that pname is valid, but there are no parameters to return
751415934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
7515bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (nativeType == GL_INT)
7516bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
7517bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                GLint *intParams = new GLint[numParams];
751815934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
7519bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                context->getIndexedIntegerv(target, index, intParams);
752015934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods
7521bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                for (unsigned int i = 0; i < numParams; ++i)
752215934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods                {
7523bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                    data[i] = static_cast<GLint64>(intParams[i]);
752415934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods                }
7525bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7526bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                delete [] intParams;
7527bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            }
7528bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            else
7529bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            {
7530bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                UNREACHABLE();
753115934d523bc9ce3ec0fa2e55e5050fb2dcffea93Shannon Woods            }
7532705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7533a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7534a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7535a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7536a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
7537a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7538a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint64* params = 0x%0.8p)",
7539a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, pname, params);
7540a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7541bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7542bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7543bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7544bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7545a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7546b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7547b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7548bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7549a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7550bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
7551bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7552b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
7553b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7554bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
755570656a64851b8014a325dd711297054032e466c1Jamie Madill
7556bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferParameter(context, pname))
7557bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7558b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
7559b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7560bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
756170656a64851b8014a325dd711297054032e466c1Jamie Madill
7562bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *buffer = context->getState().getTargetBuffer(target);
756370656a64851b8014a325dd711297054032e466c1Jamie Madill
7564bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!buffer)
7565bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7566bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            // A null buffer means that "0" is bound to the requested buffer target
7567b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7568b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7569bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
757070656a64851b8014a325dd711297054032e466c1Jamie Madill
7571bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
7572bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7573bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_USAGE:
7574bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = static_cast<GLint64>(buffer->getUsage());
7575bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7576bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_SIZE:
7577bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = buffer->getSize();
7578bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7579bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_ACCESS_FLAGS:
7580bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = static_cast<GLint64>(buffer->getAccessFlags());
7581bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7582bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_MAPPED:
7583bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = static_cast<GLint64>(buffer->isMapped());
7584bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7585bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_MAP_OFFSET:
7586bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = buffer->getMapOffset();
7587bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7588bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_BUFFER_MAP_LENGTH:
7589bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = buffer->getMapLength();
7590bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7591bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default: UNREACHABLE(); break;
7592705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7593a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7594a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7595a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7596a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGenSamplers(GLsizei count, GLuint* samplers)
7597a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7598a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsizei count = %d, GLuint* samplers = 0x%0.8p)", count, samplers);
7599a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7600bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7601bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7602bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7603bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7604a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7605b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7606b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7607bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7608a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7609bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (count < 0)
7610bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7611b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7612b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7613bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7614f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
7615bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < count; i++)
7616bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7617bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            samplers[i] = context->createSampler();
7618705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7619a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7620a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7621a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7622a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDeleteSamplers(GLsizei count, const GLuint* samplers)
7623a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7624a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsizei count = %d, const GLuint* samplers = 0x%0.8p)", count, samplers);
7625a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7626bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7627bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7628bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7629bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7630a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7631b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7632b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7633bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7634a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7635bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (count < 0)
7636bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7637b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7638b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7639bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7640f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
7641bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < count; i++)
7642bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7643bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->deleteSampler(samplers[i]);
7644705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7645a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7646a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7647a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7648a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLboolean __stdcall glIsSampler(GLuint sampler)
7649a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7650a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint sampler = %u)", sampler);
7651a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7652bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7653bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7654bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7655bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7656a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7657b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7658b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_FALSE;
7659705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7660bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7661bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return context->isSampler(sampler);
7662a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7663a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7664a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return GL_FALSE;
7665a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7666a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7667a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glBindSampler(GLuint unit, GLuint sampler)
7668a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7669a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint unit = %u, GLuint sampler = %u)", unit, sampler);
7670a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7671bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7672bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7673bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7674bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7675a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7676b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7677b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7678bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7679f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
7680bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (sampler != 0 && !context->isSampler(sampler))
7681bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7682b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7683b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7684bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7685f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
76863a61c321e7ea779f23a4da72db977286897b1168Geoff Lang        if (unit >= context->getCaps().maxCombinedTextureImageUnits)
7687bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7688b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7689b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7690705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7691bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7692bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->bindSampler(unit, sampler);
7693a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7694a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7695a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7696a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
7697a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7698a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint param = %d)", sampler, pname, param);
7699a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7700bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7701bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7702bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7703bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7704a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7705b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7706b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7707bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7708a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7709b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidateSamplerObjectParameter(context, pname))
7710bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7711bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
7712bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7713a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7714bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidateTexParamParameters(context, pname, param))
7715bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7716bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
7717bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7718a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7719bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!context->isSampler(sampler))
7720bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7721b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7722b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7723705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7724bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7725bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->samplerParameteri(sampler, pname, param);
7726a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7727a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7728a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7729f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madillvoid __stdcall glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
7730f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill{
7731f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill    glSamplerParameteri(sampler, pname, *param);
7732f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill}
7733f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
7734a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
7735a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7736a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLfloat param = %g)", sampler, pname, param);
7737a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7738bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7739bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7740bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7741bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7742a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7743b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7744b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7745bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7746a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7747b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidateSamplerObjectParameter(context, pname))
7748bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7749bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
7750bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7751a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7752bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidateTexParamParameters(context, pname, static_cast<GLint>(param)))
7753bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7754bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
7755bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7756a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7757bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!context->isSampler(sampler))
7758bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7759b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7760b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7761705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7762bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7763bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->samplerParameterf(sampler, pname, param);
7764a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7765a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7766a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7767f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madillvoid __stdcall glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
7768f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill{
7769f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill    glSamplerParameterf(sampler, pname, *param);
7770f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill}
7771f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
7772a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
7773a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7774a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", sampler, pname, params);
7775a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7776bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7777bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7778bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7779bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7780a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7781b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7782b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7783bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7784f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
7785b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidateSamplerObjectParameter(context, pname))
7786bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7787bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
7788bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7789f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
7790bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!context->isSampler(sampler))
7791bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7792b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7793b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7794705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7795bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7796bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        *params = context->getSamplerParameteri(sampler, pname);
7797a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7798a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7799a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7800a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
7801a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7802a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint sample = %ur, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", sampler, pname, params);
7803a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7804bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7805bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7806bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7807bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7808a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7809b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7810b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7811bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7812f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
7813b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (!gl::ValidateSamplerObjectParameter(context, pname))
7814bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7815bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
7816bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7817f6cc8ccfc416546c7dd4543c2210d0016afbd9fbJamie Madill
7818bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!context->isSampler(sampler))
7819bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7820b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7821b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7822705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7823bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7824bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        *params = context->getSamplerParameterf(sampler, pname);
7825a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7826a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7827a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7828a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glVertexAttribDivisor(GLuint index, GLuint divisor)
7829a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7830a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint index = %u, GLuint divisor = %u)", index, divisor);
7831a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7832bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7833bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7834bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7835bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7836a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7837b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7838b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7839b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        }
7840b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
7841b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        if (index >= gl::MAX_VERTEX_ATTRIBS)
7842b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang        {
7843b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
7844b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
78458736bd6b02d21c666bdfdd52d2b2cd17ea664a0eshannon.woods%transgaming.com@gtempaccount.com        }
7846bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7847bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->setVertexAttribDivisor(index, divisor);
7848a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7849a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7850a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7851a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glBindTransformFeedback(GLenum target, GLuint id)
7852a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7853a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
7854a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7855bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7856bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7857a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
7858bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7859a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7860b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7861b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7862bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7863a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7864bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
7865bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7866bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TRANSFORM_FEEDBACK:
7867c8058451c87ec298683bf484813016b20bf36777Geoff Lang            {
7868bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                // Cannot bind a transform feedback object if the current one is started and not paused (3.0.2 pg 85 section 2.14.1)
7869bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TransformFeedback *curTransformFeedback = context->getState().getCurrentTransformFeedback();
7870bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                if (curTransformFeedback && curTransformFeedback->isStarted() && !curTransformFeedback->isPaused())
7871c8058451c87ec298683bf484813016b20bf36777Geoff Lang                {
7872b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_OPERATION));
7873b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
7874bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                }
7875c8058451c87ec298683bf484813016b20bf36777Geoff Lang
7876bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                // Cannot bind a transform feedback object that does not exist (3.0.2 pg 85 section 2.14.1)
7877bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                if (context->getTransformFeedback(id) == NULL)
7878bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                {
7879b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_OPERATION));
7880b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
7881c8058451c87ec298683bf484813016b20bf36777Geoff Lang                }
7882c8058451c87ec298683bf484813016b20bf36777Geoff Lang
7883bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                context->bindTransformFeedback(id);
7884c8058451c87ec298683bf484813016b20bf36777Geoff Lang            }
7885bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
7886bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7887bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
7888b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
7889b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7890705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7891a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7892a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7893a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7894a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
7895a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7896a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsizei n = %d, const GLuint* ids = 0x%0.8p)", n, ids);
7897a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7898bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7899bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7900bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7901bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7902a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7903b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7904b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7905bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7906a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7907bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
7908bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7909bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            context->deleteTransformFeedback(ids[i]);
7910705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7911a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7912a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7913a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7914a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGenTransformFeedbacks(GLsizei n, GLuint* ids)
7915a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7916a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);
7917a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7918bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7919bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7920bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7921bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7922a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7923b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7924b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7925bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7926a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7927bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (int i = 0; i < n; i++)
7928bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7929bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            ids[i] = context->createTransformFeedback();
7930705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7931a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7932a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7933a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7934a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comGLboolean __stdcall glIsTransformFeedback(GLuint id)
7935a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7936a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint id = %u)", id);
7937a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7938bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7939bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7940bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7941bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7942a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7943b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7944b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_FALSE;
7945705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7946bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7947bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return ((context->getTransformFeedback(id) != NULL) ? GL_TRUE : GL_FALSE);
7948a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7949a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7950a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    return GL_FALSE;
7951a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7952a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7953a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glPauseTransformFeedback(void)
7954a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7955a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(void)");
7956a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7957bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7958bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7959bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7960bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7961a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7962b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7963b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7964bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7965c8058451c87ec298683bf484813016b20bf36777Geoff Lang
7966bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::TransformFeedback *transformFeedback = context->getState().getCurrentTransformFeedback();
7967bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(transformFeedback != NULL);
7968c8058451c87ec298683bf484813016b20bf36777Geoff Lang
7969bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Current transform feedback must be started and not paused in order to pause (3.0.2 pg 86)
7970bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!transformFeedback->isStarted() || transformFeedback->isPaused())
7971bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7972b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7973b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7974705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
7975bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
7976bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        transformFeedback->pause();
7977a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
7978a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
7979a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7980a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glResumeTransformFeedback(void)
7981a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
7982a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(void)");
7983a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
7984bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
7985bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
7986bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
7987bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
7988a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
7989b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
7990b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
7991bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
7992c8058451c87ec298683bf484813016b20bf36777Geoff Lang
7993bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::TransformFeedback *transformFeedback = context->getState().getCurrentTransformFeedback();
7994bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(transformFeedback != NULL);
7995c8058451c87ec298683bf484813016b20bf36777Geoff Lang
7996bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Current transform feedback must be started and paused in order to resume (3.0.2 pg 86)
7997bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!transformFeedback->isStarted() || !transformFeedback->isPaused())
7998bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
7999b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8000b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8001705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
8002bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8003bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        transformFeedback->resume();
8004a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
8005a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
8006a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8007a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
8008a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
8009a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLsizei bufSize = %d, GLsizei* length = 0x%0.8p, GLenum* binaryFormat = 0x%0.8p, GLvoid* binary = 0x%0.8p)",
8010a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, bufSize, length, binaryFormat, binary);
8011a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8012bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8013bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8014bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8015bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
8016a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
8017b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8018b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8019705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
8020bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8021bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // glGetProgramBinary
8022bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        UNIMPLEMENTED();
8023a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
8024a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
8025a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8026a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
8027a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
8028a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLenum binaryFormat = 0x%X, const GLvoid* binary = 0x%0.8p, GLsizei length = %d)",
8029a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, binaryFormat, binary, length);
8030a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8031bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8032bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8033bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8034bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
8035a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
8036b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8037b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8038705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
8039bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8040bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // glProgramBinary
8041bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        UNIMPLEMENTED();
8042a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
8043a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
8044a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8045a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glProgramParameteri(GLuint program, GLenum pname, GLint value)
8046a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
8047a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLuint program = %u, GLenum pname = 0x%X, GLint value = %d)",
8048a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          program, pname, value);
8049a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8050bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8051bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8052bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8053bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
8054a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
8055b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8056b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8057705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
8058bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8059bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // glProgramParameteri
8060bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        UNIMPLEMENTED();
8061a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
8062a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
8063a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8064a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
8065a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
8066a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum* attachments = 0x%0.8p)",
8067a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, numAttachments, attachments);
8068a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8069bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8070bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8071bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8072bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
8073a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
8074b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8075b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8076bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8077d63ef891baa92ae174fbaa1be548e4c2292dfba8shannonwoods@chromium.org
8078bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateInvalidateFramebufferParameters(context, target, numAttachments, attachments))
8079bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8080bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
8081d63ef891baa92ae174fbaa1be548e4c2292dfba8shannonwoods@chromium.org        }
8082bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
80832d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill        gl::Framebuffer *framebuffer = context->getState().getTargetFramebuffer(target);
80842d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill        if (framebuffer && framebuffer->completeness() == GL_FRAMEBUFFER_COMPLETE)
80852d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill        {
80862d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill            framebuffer->invalidate(context->getCaps(), numAttachments, attachments);
80872d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill        }
8088a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
8089a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
8090a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8091a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
8092a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
8093a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum* attachments = 0x%0.8p, GLint x = %d, "
8094a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
8095a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, numAttachments, attachments, x, y, width, height);
8096a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8097bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8098bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8099bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8100bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
8101a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
8102b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8103b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8104bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8105d63ef891baa92ae174fbaa1be548e4c2292dfba8shannonwoods@chromium.org
8106bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateInvalidateFramebufferParameters(context, target, numAttachments, attachments))
8107bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8108bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
8109d63ef891baa92ae174fbaa1be548e4c2292dfba8shannonwoods@chromium.org        }
8110bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
81112d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill        gl::Framebuffer *framebuffer = context->getState().getTargetFramebuffer(target);
81122d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill        if (framebuffer && framebuffer->completeness() == GL_FRAMEBUFFER_COMPLETE)
81132d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill        {
81142d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill            framebuffer->invalidateSub(context->getCaps(), numAttachments, attachments, x, y, width, height);
81152d96b9ebeac93aae8b5ae425c9902ca8823fd415Jamie Madill        }
8116a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
8117a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
8118a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8119a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
8120a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
8121a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
8122a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, levels, internalformat, width, height);
8123a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8124bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8125bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8126a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
8127bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
8128bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8129b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8130b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8131bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8132a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8133bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateES3TexStorageParameters(context, target, levels, internalformat, width, height, 1))
8134a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
8135bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
8136bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8137a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8138bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
8139bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8140bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D:
81418757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org            {
8142bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2D *texture2d = context->getTexture2D();
8143bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture2d->storage(levels, internalformat, width, height);
81448757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org            }
8145bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
81468757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org
8147bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_CUBE_MAP:
81488757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org            {
8149bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::TextureCubeMap *textureCube = context->getTextureCubeMap();
8150bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                textureCube->storage(levels, internalformat, width);
81518757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org            }
8152bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
8153bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8154bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
8155b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8156b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
81578757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org        }
8158a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
8159a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
8160a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8161a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
8162a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
8163a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
8164a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLsizei height = %d, GLsizei depth = %d)",
8165a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, levels, internalformat, width, height, depth);
8166a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8167bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8168bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8169a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    {
8170bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
8171bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8172b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8173b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8174bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8175a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8176bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateES3TexStorageParameters(context, target, levels, internalformat, width, height, depth))
8177a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
8178bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
8179bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
81808757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org
8181bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (target)
8182bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8183bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_3D:
81848757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org            {
8185bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture3D *texture3d = context->getTexture3D();
8186bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture3d->storage(levels, internalformat, width, height, depth);
81878757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org            }
8188bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
81898757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org
8190bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_TEXTURE_2D_ARRAY:
81918757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org            {
8192bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                gl::Texture2DArray *texture2darray = context->getTexture2DArray();
8193bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                texture2darray->storage(levels, internalformat, width, height, depth);
81948757c06cd3f1812f55df1c0f4f297bef5648859dshannonwoods@chromium.org            }
8195bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
8196bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8197bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
8198bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            UNREACHABLE();
819914eb55e5e7e40c4e9f9611c5760a600acc6679aeshannon.woods%transgaming.com@gtempaccount.com        }
8200a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
8201a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
8202a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8203a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
8204a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com{
8205a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, "
8206a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          "GLint* params = 0x%0.8p)",
8207a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com          target, internalformat, pname, bufSize, params);
8208a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8209bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8210bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8211bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8212bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getClientVersion() < 3)
8213a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com        {
8214b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8215b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8216bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8217809d250bf1c4405e3d282818577a680202e16bf5Shannon Woods
8218bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        const gl::TextureCaps &formatCaps = context->getTextureCaps().get(internalformat);
8219bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!formatCaps.renderable)
8220bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8221b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8222b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8223bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8224809d250bf1c4405e3d282818577a680202e16bf5Shannon Woods
8225bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (target != GL_RENDERBUFFER)
8226bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8227b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8228b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8229bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8230809d250bf1c4405e3d282818577a680202e16bf5Shannon Woods
8231bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (bufSize < 0)
8232bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8233b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
8234b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8235bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8236bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8237bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        switch (pname)
8238bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8239bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_NUM_SAMPLE_COUNTS:
8240bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (bufSize != 0)
82415f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang            {
82425f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang                *params = formatCaps.sampleCounts.size();
82435f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang            }
8244bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
8245b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
8246bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          case GL_SAMPLES:
82475f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang            std::copy_n(formatCaps.sampleCounts.rbegin(), std::min<size_t>(bufSize, formatCaps.sampleCounts.size()), params);
8248bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            break;
8249b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang
8250bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang          default:
8251b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8252b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8253705fc2f5afd315f8dba839b11f95cc8950778abfshannonwoods@chromium.org        }
8254a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com    }
8255a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com}
8256a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
8257a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com// Extension functions
8258a817175d002bee6556fbbfc9f1085c5f89edea2cshannon.woods%transgaming.com@gtempaccount.com
82594cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.comvoid __stdcall glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
82604cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com                                      GLbitfield mask, GLenum filter)
82614cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com{
82620f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, "
82634cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com          "GLint dstX0 = %d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, "
82644cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com          "GLbitfield mask = 0x%X, GLenum filter = 0x%X)",
82654cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com          srcX0, srcY0, srcX1, srcX1, dstX0, dstY0, dstX1, dstY1, mask, filter);
82664cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com
8267bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8268bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8269bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8270bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!ValidateBlitFramebufferParameters(context, srcX0, srcY0, srcX1, srcY1,
8271bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                               dstX0, dstY0, dstX1, dstY1, mask, filter,
8272bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                               true))
82734cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com        {
8274bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return;
82754cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com        }
8276bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8277bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
8278bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                 mask, filter);
82794cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com    }
82804cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com}
82814cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com
8282fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.comvoid __stdcall glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
8283fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.com                               GLint border, GLenum format, GLenum type, const GLvoid* pixels)
82844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
82850f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org    EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
8286b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com          "GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, "
8287fe4b827b2b580c3fc4fd80fdb5a0087f539c0073daniel@transgaming.com          "GLenum format = 0x%X, GLenum type = 0x%x, const GLvoid* pixels = 0x%0.8p)",
82884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com          target, level, internalformat, width, height, depth, border, format, type, pixels);
82894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
8290bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    UNIMPLEMENTED();   // FIXME
82914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
8292ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com
8293bfdea66b45dd1b98a565e767533361ef728731ceGeoff Langvoid __stdcall glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei *length,
82943ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org                                     GLenum *binaryFormat, void *binary)
82953ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org{
829690080e3b703883b871f862d5ceafa44d2d815b6aapatrick@chromium.org    EVENT("(GLenum program = 0x%X, bufSize = %d, length = 0x%0.8p, binaryFormat = 0x%0.8p, binary = 0x%0.8p)",
82973ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org          program, bufSize, length, binaryFormat, binary);
82983ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org
8299bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8300bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
83013ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org    {
8302bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
83033ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org
8304bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject || !programObject->isLinked())
83053ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org        {
8306b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8307b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8308bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
83093ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org
8310bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::ProgramBinary *programBinary = programObject->getProgramBinary();
83113ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org
8312bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programBinary)
8313bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8314b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8315b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8316bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
831790080e3b703883b871f862d5ceafa44d2d815b6aapatrick@chromium.org
8318900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        if (!programBinary->save(binaryFormat, binary, bufSize, length))
8319bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8320b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8321b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
83223ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org        }
83233ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org    }
83243ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org}
83253ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org
83263ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.orgvoid __stdcall glProgramBinaryOES(GLuint program, GLenum binaryFormat,
83273ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org                                  const void *binary, GLint length)
83283ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org{
83293ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org    EVENT("(GLenum program = 0x%X, binaryFormat = 0x%x, binary = 0x%0.8p, length = %d)",
83303ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org          program, binaryFormat, binary, length);
83313ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org
8332bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8333bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8334bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8335900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        const std::vector<GLenum> &programBinaryFormats = context->getCaps().programBinaryFormats;
8336900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        if (std::find(programBinaryFormats.begin(), programBinaryFormats.end(), binaryFormat) == programBinaryFormats.end())
83373ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org        {
8338b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8339b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8340bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
83413ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org
8342bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Program *programObject = context->getProgram(program);
8343bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!programObject)
8344bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8345b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8346b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
83473ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org        }
8348bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8349900013cd6b1d0ed2cdc5ee5ca0f4210624b0d8efGeoff Lang        context->setProgramBinary(program, binaryFormat, binary, length);
83503ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org    }
83513ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org}
83523ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org
83534059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.comvoid __stdcall glDrawBuffersEXT(GLsizei n, const GLenum *bufs)
83544059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com{
83554059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com    EVENT("(GLenum n = %d, bufs = 0x%0.8p)", n, bufs);
83564059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com
8357bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8358bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
83594059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com    {
8360bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (n < 0 || static_cast<GLuint>(n) > context->getCaps().maxDrawBuffers)
8361bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8362b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
8363b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8364bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
83654059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com
8366bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (context->getState().getDrawFramebuffer()->id() == 0)
83674059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com        {
8368bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (n != 1)
83694059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com            {
8370b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
8371b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
83724059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com            }
83734059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com
8374bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            if (bufs[0] != GL_NONE && bufs[0] != GL_BACK)
83754059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com            {
8376b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                context->recordError(gl::Error(GL_INVALID_OPERATION));
8377b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                return;
83784059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com            }
8379bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8380bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
8381bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8382bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            for (int colorAttachment = 0; colorAttachment < n; colorAttachment++)
83834059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com            {
8384bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                const GLenum attachment = GL_COLOR_ATTACHMENT0_EXT + colorAttachment;
8385bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                if (bufs[colorAttachment] != GL_NONE && bufs[colorAttachment] != attachment)
83864059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com                {
8387b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    context->recordError(gl::Error(GL_INVALID_OPERATION));
8388b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang                    return;
83894059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com                }
83904059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com            }
8391bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
83924059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com
8393bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Framebuffer *framebuffer = context->getState().getDrawFramebuffer();
83944059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com
8395bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (unsigned int colorAttachment = 0; colorAttachment < static_cast<unsigned int>(n); colorAttachment++)
8396bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8397bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            framebuffer->setDrawBufferState(colorAttachment, bufs[colorAttachment]);
8398bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
83992fa73c51a911556bb29f26780ac594aced7110fcshannon.woods%transgaming.com@gtempaccount.com
8400bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        for (unsigned int colorAttachment = n; colorAttachment < context->getCaps().maxDrawBuffers; colorAttachment++)
8401bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8402bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            framebuffer->setDrawBufferState(colorAttachment, GL_NONE);
84034059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com        }
84044059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com    }
84054059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com}
84064059a3894ef3a5419a1bdc091a17eab552cd9c67shannon.woods%transgaming.com@gtempaccount.com
8407b3801744ed9df17a7d8d290e203938818ad90addShannon Woodsvoid __stdcall glGetBufferPointervOES(GLenum target, GLenum pname, void** params)
8408b3801744ed9df17a7d8d290e203938818ad90addShannon Woods{
8409b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLvoid** params = 0x%0.8p)", target, pname, params);
8410b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8411bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8412bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8413bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8414bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
8415b3801744ed9df17a7d8d290e203938818ad90addShannon Woods        {
8416b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8417b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8418bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8419b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8420bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (pname != GL_BUFFER_MAP_POINTER)
8421bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8422b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8423b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8424bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8425b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8426bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *buffer = context->getState().getTargetBuffer(target);
8427b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8428bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!buffer || !buffer->isMapped())
8429bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8430bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = NULL;
8431bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8432bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        else
8433bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8434bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            *params = buffer->getMapPointer();
8435b3801744ed9df17a7d8d290e203938818ad90addShannon Woods        }
8436b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    }
8437b3801744ed9df17a7d8d290e203938818ad90addShannon Woods}
8438b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8439b3801744ed9df17a7d8d290e203938818ad90addShannon Woodsvoid * __stdcall glMapBufferOES(GLenum target, GLenum access)
8440b3801744ed9df17a7d8d290e203938818ad90addShannon Woods{
8441b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    EVENT("(GLenum target = 0x%X, GLbitfield access = 0x%X)", target, access);
8442b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8443bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8444bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8445bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8446bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
8447b3801744ed9df17a7d8d290e203938818ad90addShannon Woods        {
8448b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8449b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8450bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8451b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8452bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *buffer = context->getState().getTargetBuffer(target);
8453b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8454bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (buffer == NULL)
8455bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8456b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8457b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8458bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8459b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8460bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (access != GL_WRITE_ONLY_OES)
8461bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8462b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8463b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8464bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8465b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8466bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (buffer->isMapped())
8467bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8468b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8469b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8470b3801744ed9df17a7d8d290e203938818ad90addShannon Woods        }
8471bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
84722a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        gl::Error error = buffer->mapRange(0, buffer->getSize(), GL_MAP_WRITE_BIT);
84732a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        if (error.isError())
84742a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        {
84752a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            context->recordError(error);
84762a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            return NULL;
84772a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        }
84782a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang
84792a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        return buffer->getMapPointer();
8480b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    }
8481b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8482b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    return NULL;
8483b3801744ed9df17a7d8d290e203938818ad90addShannon Woods}
8484b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8485b3801744ed9df17a7d8d290e203938818ad90addShannon WoodsGLboolean __stdcall glUnmapBufferOES(GLenum target)
8486b3801744ed9df17a7d8d290e203938818ad90addShannon Woods{
8487b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    EVENT("(GLenum target = 0x%X)", target);
8488b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8489bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8490bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8491bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8492bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
8493b3801744ed9df17a7d8d290e203938818ad90addShannon Woods        {
8494b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8495b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_FALSE;
8496bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8497b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8498bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *buffer = context->getState().getTargetBuffer(target);
8499b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8500bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (buffer == NULL || !buffer->isMapped())
8501bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8502b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8503b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return GL_FALSE;
8504bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8505b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8506bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // TODO: detect if we had corruption. if so, throw an error and return false.
8507b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
85082a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        gl::Error error = buffer->unmap();
85092a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        if (error.isError())
85102a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        {
85112a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            context->recordError(error);
85122a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            return GL_FALSE;
85132a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        }
8514b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8515bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        return GL_TRUE;
8516b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    }
8517b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8518b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    return GL_FALSE;
8519b3801744ed9df17a7d8d290e203938818ad90addShannon Woods}
8520b3801744ed9df17a7d8d290e203938818ad90addShannon Woods
8521916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woodsvoid* __stdcall glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
8522916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods{
8523916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods    EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d, GLbitfield access = 0x%X)",
8524916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods          target, offset, length, access);
8525916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8526bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8527bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8528bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8529bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
8530916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods        {
8531b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8532b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8533bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8534916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8535bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (offset < 0 || length < 0)
8536bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8537b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
8538b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8539bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8540916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8541bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *buffer = context->getState().getTargetBuffer(target);
8542916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8543bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (buffer == NULL)
8544bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8545b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8546b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8547bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8548916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8549bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Check for buffer overflow
8550bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        size_t offsetSize = static_cast<size_t>(offset);
8551bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        size_t lengthSize = static_cast<size_t>(length);
8552916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8553bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!rx::IsUnsignedAdditionSafe(offsetSize, lengthSize) ||
8554bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            offsetSize + lengthSize > static_cast<size_t>(buffer->getSize()))
8555bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8556b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
8557b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8558bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8559916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8560bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Check for invalid bits in the mask
8561bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLbitfield allAccessBits = GL_MAP_READ_BIT |
8562bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                   GL_MAP_WRITE_BIT |
8563bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                   GL_MAP_INVALIDATE_RANGE_BIT |
8564bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                   GL_MAP_INVALIDATE_BUFFER_BIT |
8565bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                   GL_MAP_FLUSH_EXPLICIT_BIT |
8566bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                   GL_MAP_UNSYNCHRONIZED_BIT;
8567916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8568bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (access & ~(allAccessBits))
8569bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8570b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
8571b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8572bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8573916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8574bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (length == 0 || buffer->isMapped())
8575bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8576b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8577b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8578bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8579916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8580bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Check for invalid bit combinations
8581bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if ((access & (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)) == 0)
8582bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8583b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8584b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8585bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8586916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8587bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        GLbitfield writeOnlyBits = GL_MAP_INVALIDATE_RANGE_BIT |
8588bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                   GL_MAP_INVALIDATE_BUFFER_BIT |
8589bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang                                   GL_MAP_UNSYNCHRONIZED_BIT;
8590916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8591bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if ((access & GL_MAP_READ_BIT) != 0 && (access & writeOnlyBits) != 0)
8592bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8593b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8594b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8595bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8596916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8597bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if ((access & GL_MAP_WRITE_BIT) == 0 && (access & GL_MAP_FLUSH_EXPLICIT_BIT) != 0)
8598bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8599b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8600b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return NULL;
8601916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods        }
8602bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
86032a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        gl::Error error = buffer->mapRange(offset, length, access);
86042a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        if (error.isError())
86052a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        {
86062a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            context->recordError(error);
86072a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang            return NULL;
86082a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        }
86092a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang
86102a1c15a1ab1852ab11fb8d12822c98aac11619aeGeoff Lang        return buffer->getMapPointer();
8611916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods    }
8612916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8613916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods    return NULL;
8614916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods}
8615916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8616916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woodsvoid __stdcall glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length)
8617916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods{
8618916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods    EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d)", target, offset, length);
8619916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8620bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8621bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8622bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    {
8623bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (offset < 0 || length < 0)
8624916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods        {
8625b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
8626b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8627bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8628916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8629bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!gl::ValidBufferTarget(context, target))
8630bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8631b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_ENUM));
8632b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8633bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8634916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8635bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Buffer *buffer = context->getState().getTargetBuffer(target);
8636916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8637bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (buffer == NULL)
8638bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8639b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8640b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8641bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8642916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8643bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!buffer->isMapped() || (buffer->getAccessFlags() & GL_MAP_FLUSH_EXPLICIT_BIT) == 0)
8644bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8645b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_OPERATION));
8646b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8647bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        }
8648916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8649bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // Check for buffer overflow
8650bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        size_t offsetSize = static_cast<size_t>(offset);
8651bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        size_t lengthSize = static_cast<size_t>(length);
8652916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8653bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (!rx::IsUnsignedAdditionSafe(offsetSize, lengthSize) ||
8654bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            offsetSize + lengthSize > static_cast<size_t>(buffer->getMapLength()))
8655bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        {
8656b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            context->recordError(gl::Error(GL_INVALID_VALUE));
8657b119668772ee960d8fc9e3846617c59530b90d5fGeoff Lang            return;
8658916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods        }
8659bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8660bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        // We do not currently support a non-trivial implementation of FlushMappedBufferRange
8661916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods    }
8662916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods}
8663916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods
8664ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com__eglMustCastToProperFunctionPointerType __stdcall glGetProcAddress(const char *procname)
8665ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com{
8666ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com    struct Extension
8667ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com    {
8668ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com        const char *name;
8669ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com        __eglMustCastToProperFunctionPointerType address;
8670ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com    };
8671ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com
8672ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com    static const Extension glExtensions[] =
8673ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com    {
8674ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com        {"glTexImage3DOES", (__eglMustCastToProperFunctionPointerType)glTexImage3DOES},
86750186813531a7e8f47d584ca7fb54a73ed99d19bedaniel@transgaming.com        {"glBlitFramebufferANGLE", (__eglMustCastToProperFunctionPointerType)glBlitFramebufferANGLE},
86761fe96c9aa436f70010743ea8731384012e8759bddaniel@transgaming.com        {"glRenderbufferStorageMultisampleANGLE", (__eglMustCastToProperFunctionPointerType)glRenderbufferStorageMultisampleANGLE},
8677d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {"glDeleteFencesNV", (__eglMustCastToProperFunctionPointerType)glDeleteFencesNV},
8678d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {"glGenFencesNV", (__eglMustCastToProperFunctionPointerType)glGenFencesNV},
8679d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {"glIsFenceNV", (__eglMustCastToProperFunctionPointerType)glIsFenceNV},
8680d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {"glTestFenceNV", (__eglMustCastToProperFunctionPointerType)glTestFenceNV},
8681d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {"glGetFenceivNV", (__eglMustCastToProperFunctionPointerType)glGetFenceivNV},
8682d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {"glFinishFenceNV", (__eglMustCastToProperFunctionPointerType)glFinishFenceNV},
8683d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org        {"glSetFenceNV", (__eglMustCastToProperFunctionPointerType)glSetFenceNV},
8684a574f78fcf2bd189915c790bc7efe6912a9bcc3azmo@google.com        {"glGetTranslatedShaderSourceANGLE", (__eglMustCastToProperFunctionPointerType)glGetTranslatedShaderSourceANGLE},
86850bd1f2f6fbeabd4f7c708c94e4f899f163dccb74daniel@transgaming.com        {"glTexStorage2DEXT", (__eglMustCastToProperFunctionPointerType)glTexStorage2DEXT},
8686709ed116b4d5d40af2722c6f7bc06c7565c46508daniel@transgaming.com        {"glGetGraphicsResetStatusEXT", (__eglMustCastToProperFunctionPointerType)glGetGraphicsResetStatusEXT},
8687709ed116b4d5d40af2722c6f7bc06c7565c46508daniel@transgaming.com        {"glReadnPixelsEXT", (__eglMustCastToProperFunctionPointerType)glReadnPixelsEXT},
8688709ed116b4d5d40af2722c6f7bc06c7565c46508daniel@transgaming.com        {"glGetnUniformfvEXT", (__eglMustCastToProperFunctionPointerType)glGetnUniformfvEXT},
8689709ed116b4d5d40af2722c6f7bc06c7565c46508daniel@transgaming.com        {"glGetnUniformivEXT", (__eglMustCastToProperFunctionPointerType)glGetnUniformivEXT},
869086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {"glGenQueriesEXT", (__eglMustCastToProperFunctionPointerType)glGenQueriesEXT},
869186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {"glDeleteQueriesEXT", (__eglMustCastToProperFunctionPointerType)glDeleteQueriesEXT},
869286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {"glIsQueryEXT", (__eglMustCastToProperFunctionPointerType)glIsQueryEXT},
869386bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {"glBeginQueryEXT", (__eglMustCastToProperFunctionPointerType)glBeginQueryEXT},
869486bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {"glEndQueryEXT", (__eglMustCastToProperFunctionPointerType)glEndQueryEXT},
869586bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {"glGetQueryivEXT", (__eglMustCastToProperFunctionPointerType)glGetQueryivEXT},
869686bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com        {"glGetQueryObjectuivEXT", (__eglMustCastToProperFunctionPointerType)glGetQueryObjectuivEXT},
869777d947208331b523e7fc67167f601774b509fd6cshannon.woods%transgaming.com@gtempaccount.com        {"glDrawBuffersEXT", (__eglMustCastToProperFunctionPointerType)glDrawBuffersEXT},
8698dce02fdab466adc4645fe6dd95aa9c98a7fd363bdaniel@transgaming.com        {"glVertexAttribDivisorANGLE", (__eglMustCastToProperFunctionPointerType)glVertexAttribDivisorANGLE},
8699dce02fdab466adc4645fe6dd95aa9c98a7fd363bdaniel@transgaming.com        {"glDrawArraysInstancedANGLE", (__eglMustCastToProperFunctionPointerType)glDrawArraysInstancedANGLE},
8700dce02fdab466adc4645fe6dd95aa9c98a7fd363bdaniel@transgaming.com        {"glDrawElementsInstancedANGLE", (__eglMustCastToProperFunctionPointerType)glDrawElementsInstancedANGLE},
87013ce8dbcd7ef7751612c6353b64b09d90acd3fa3capatrick@chromium.org        {"glGetProgramBinaryOES", (__eglMustCastToProperFunctionPointerType)glGetProgramBinaryOES},
8702b3801744ed9df17a7d8d290e203938818ad90addShannon Woods        {"glProgramBinaryOES", (__eglMustCastToProperFunctionPointerType)glProgramBinaryOES},
8703b3801744ed9df17a7d8d290e203938818ad90addShannon Woods        {"glGetBufferPointervOES", (__eglMustCastToProperFunctionPointerType)glGetBufferPointervOES},
8704b3801744ed9df17a7d8d290e203938818ad90addShannon Woods        {"glMapBufferOES", (__eglMustCastToProperFunctionPointerType)glMapBufferOES},
8705916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods        {"glUnmapBufferOES", (__eglMustCastToProperFunctionPointerType)glUnmapBufferOES},
8706916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods        {"glMapBufferRangeEXT", (__eglMustCastToProperFunctionPointerType)glMapBufferRangeEXT},
8707916e769a5ad557f3b8a7f19ef1d3a2577e0f3165Shannon Woods        {"glFlushMappedBufferRangeEXT", (__eglMustCastToProperFunctionPointerType)glFlushMappedBufferRangeEXT},    };
8708ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com
8709d438fd497baeddedec135e7c8bfa4148e116b9a8shannon.woods@transgaming.com    for (unsigned int ext = 0; ext < ArraySize(glExtensions); ext++)
8710ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com    {
8711ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com        if (strcmp(procname, glExtensions[ext].name) == 0)
8712ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com        {
8713ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com            return (__eglMustCastToProperFunctionPointerType)glExtensions[ext].address;
8714ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com        }
8715ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com    }
8716ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com
8717ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com    return NULL;
8718ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com}
8719ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com
872017f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com// Non-public functions used by EGL
872117f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com
872264a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.combool __stdcall glBindTexImage(egl::Surface *surface)
8723ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org{
8724ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org    EVENT("(egl::Surface* surface = 0x%0.8p)",
8725ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org          surface);
8726ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org
8727bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    gl::Context *context = gl::getNonLostContext();
8728bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang    if (context)
8729ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org    {
8730bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        gl::Texture2D *textureObject = context->getTexture2D();
8731bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        ASSERT(textureObject != NULL);
8732ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org
8733bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        if (textureObject->isImmutable())
8734ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org        {
8735bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang            return false;
8736ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org        }
8737bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang
8738bfdea66b45dd1b98a565e767533361ef728731ceGeoff Lang        textureObject->bindTexImage(surface);
8739ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org    }
874064a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com
874164a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com    return true;
8742ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org}
8743ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org
87444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
8745