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 ¤tValueData = 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 ¤tValueData = 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 ¤tValueData = 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 ¤tValueData = 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