Path: blob/21.2-virgl/src/gallium/frontends/wgl/stw_nopfuncs.c
4561 views
/**************************************************************************1*2* Copyright 2015 VMware, Inc.3* All Rights Reserved.4*5* Permission is hereby granted, free of charge, to any person obtaining a6* copy of this software and associated documentation files (the7* "Software"), to deal in the Software without restriction, including8* without limitation the rights to use, copy, modify, merge, publish,9* distribute, sub license, and/or sell copies of the Software, and to10* permit persons to whom the Software is furnished to do so, subject to11* the following conditions:12*13* The above copyright notice and this permission notice (including the14* next paragraph) shall be included in all copies or substantial portions15* of the Software.16*17* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS18* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.20* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR21* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,22* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE23* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.24*25**************************************************************************/2627/**28* No-op GL API functions.29*30* Some OpenGL apps (like Viewperf12) call wglGetProcAddress() to get31* a pointer to an extension function, get a NULL pointer, but don't bother32* to check for NULL before jumping through the pointer. This causes a33* crash.34*35* As a work-around we provide some no-op functions here to avoid those36* crashes.37*/3839#include <GL/gl.h>40#include "stw_nopfuncs.h"41#include "util/u_debug.h"424344static void45warning(const char *name)46{47/* use name+4 to skip "nop_" prefix */48_debug_printf("Application calling unsupported %s function\n", name+4);49}5051static void APIENTRY52nop_glBindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture)53{54warning(__func__);55}5657static void APIENTRY58nop_glColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue)59{60warning(__func__);61}6263static void APIENTRY64nop_glColor3hvNV(const GLhalfNV *v)65{66warning(__func__);67}6869static void APIENTRY70nop_glColor4hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha)71{72warning(__func__);73}7475static void APIENTRY76nop_glColor4hvNV(const GLhalfNV *v)77{78warning(__func__);79}8081static void APIENTRY82nop_glDisableClientStateIndexedEXT(GLenum array, GLuint index)83{84warning(__func__);85}8687static void APIENTRY88nop_glEnableClientStateIndexedEXT(GLenum array, GLuint index)89{90warning(__func__);91}9293static void APIENTRY94nop_glFogCoordhNV(GLhalfNV fog)95{96warning(__func__);97}9899static void APIENTRY100nop_glFogCoordhvNV(const GLhalfNV *fog)101{102warning(__func__);103}104105static void APIENTRY106nop_glGetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint *params)107{108warning(__func__);109}110111static void APIENTRY112nop_glGetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, void *data)113{114warning(__func__);115}116117static void *APIENTRY118nop_glMapNamedBufferEXT(GLuint buffer, GLenum access)119{120warning(__func__);121return NULL;122}123124static void APIENTRY125nop_glMatrixLoadfEXT(GLenum mode, const GLfloat *m)126{127warning(__func__);128}129130static void APIENTRY131nop_glMatrixLoadIdentityEXT(GLenum mode)132{133warning(__func__);134}135136static void APIENTRY137nop_glMultiTexCoord1hNV(GLenum target, GLhalfNV s)138{139warning(__func__);140}141142static void APIENTRY143nop_glMultiTexCoord1hvNV(GLenum target, const GLhalfNV *v)144{145warning(__func__);146}147148static void APIENTRY149nop_glMultiTexCoord2hNV(GLenum target, GLhalfNV s, GLhalfNV t)150{151warning(__func__);152}153154static void APIENTRY155nop_glMultiTexCoord2hvNV(GLenum target, const GLhalfNV *v)156{157warning(__func__);158}159160static void APIENTRY161nop_glMultiTexCoord3hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r)162{163warning(__func__);164}165166static void APIENTRY167nop_glMultiTexCoord3hvNV(GLenum target, const GLhalfNV *v)168{169warning(__func__);170}171172static void APIENTRY173nop_glMultiTexCoord4hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q)174{175warning(__func__);176}177178static void APIENTRY179nop_glMultiTexCoord4hvNV(GLenum target, const GLhalfNV *v)180{181warning(__func__);182}183184static void APIENTRY185nop_glMultiTexCoordPointerEXT(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer)186{187warning(__func__);188}189190static void APIENTRY191nop_glMultiTexEnvfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param)192{193warning(__func__);194}195196static void APIENTRY197nop_glMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat *params)198{199warning(__func__);200}201202static void APIENTRY203nop_glMultiTexEnviEXT(GLenum texunit, GLenum target, GLenum pname, GLint param)204{205warning(__func__);206}207208static void APIENTRY209nop_glMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params)210{211warning(__func__);212}213214static void APIENTRY215nop_glMultiTexGeniEXT(GLenum texunit, GLenum coord, GLenum pname, GLint param)216{217warning(__func__);218}219220static void APIENTRY221nop_glNamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const void *data, GLenum usage)222{223warning(__func__);224}225226static void APIENTRY227nop_glNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data)228{229warning(__func__);230}231232static void APIENTRY233nop_glNamedProgramLocalParameter4fvEXT(GLuint program, GLenum target, GLuint index, const GLfloat *params)234{235warning(__func__);236}237238static void APIENTRY239nop_glNamedProgramLocalParameters4fvEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params)240{241warning(__func__);242}243244static void APIENTRY245nop_glNormal3hNV(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz)246{247warning(__func__);248}249250static void APIENTRY251nop_glNormal3hvNV(const GLhalfNV *v)252{253warning(__func__);254}255256static void APIENTRY257nop_glPatchParameterfv(GLenum pname, const GLfloat *values)258{259warning(__func__);260}261262static void APIENTRY263nop_glPatchParameteri(GLenum pname, GLint value)264{265warning(__func__);266}267268static void APIENTRY269nop_glSecondaryColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue)270{271warning(__func__);272}273274static void APIENTRY275nop_glSecondaryColor3hvNV(const GLhalfNV *v)276{277warning(__func__);278}279280static void APIENTRY281nop_glTexCoord1hNV(GLhalfNV s)282{283warning(__func__);284}285286static void APIENTRY287nop_glTexCoord1hvNV(const GLhalfNV *v)288{289warning(__func__);290}291292static void APIENTRY293nop_glTexCoord2hNV(GLhalfNV s, GLhalfNV t)294{295warning(__func__);296}297298static void APIENTRY299nop_glTexCoord2hvNV(const GLhalfNV *v)300{301warning(__func__);302}303304static void APIENTRY305nop_glTexCoord3hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r)306{307warning(__func__);308}309310static void APIENTRY311nop_glTexCoord3hvNV(const GLhalfNV *v)312{313warning(__func__);314}315316static void APIENTRY317nop_glTexCoord4hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q)318{319warning(__func__);320}321322static void APIENTRY323nop_glTexCoord4hvNV(const GLhalfNV *v)324{325warning(__func__);326}327328static void APIENTRY329nop_glTextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param)330{331warning(__func__);332}333334static void APIENTRY335nop_glTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, const GLfloat *params)336{337warning(__func__);338}339340static void APIENTRY341nop_glTextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param)342{343warning(__func__);344}345346static GLboolean APIENTRY347nop_glUnmapNamedBufferEXT(GLuint buffer)348{349warning(__func__);350return GL_FALSE;351}352353static void APIENTRY354nop_glVertex2hNV(GLhalfNV x, GLhalfNV y)355{356warning(__func__);357}358359static void APIENTRY360nop_glVertex2hvNV(const GLhalfNV *v)361{362warning(__func__);363}364365static void APIENTRY366nop_glVertex3hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z)367{368warning(__func__);369}370371static void APIENTRY372nop_glVertex3hvNV(const GLhalfNV *v)373{374warning(__func__);375}376377static void APIENTRY378nop_glVertex4hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w)379{380warning(__func__);381}382383static void APIENTRY384nop_glVertex4hvNV(const GLhalfNV *v)385{386warning(__func__);387}388389390PROC391stw_get_nop_function(const char *name)392{393struct {394const char *name;395PROC p;396} table[] = {397{ "glBindMultiTextureEXT", (PROC) nop_glBindMultiTextureEXT },398{ "glColor3hNV", (PROC) nop_glColor3hNV },399{ "glColor3hvNV", (PROC) nop_glColor3hvNV },400{ "glColor4hNV", (PROC) nop_glColor4hNV },401{ "glColor4hvNV", (PROC) nop_glColor4hvNV },402{ "glDisableClientStateIndexedEXT", (PROC) nop_glDisableClientStateIndexedEXT },403{ "glEnableClientStateIndexedEXT", (PROC) nop_glEnableClientStateIndexedEXT },404{ "glFogCoordhNV", (PROC) nop_glFogCoordhNV },405{ "glFogCoordhvNV", (PROC) nop_glFogCoordhvNV },406{ "glGetNamedBufferParameterivEXT", (PROC) nop_glGetNamedBufferParameterivEXT },407{ "glGetNamedBufferSubDataEXT", (PROC) nop_glGetNamedBufferSubDataEXT },408{ "glMapNamedBufferEXT", (PROC) nop_glMapNamedBufferEXT },409{ "glMatrixLoadfEXT", (PROC) nop_glMatrixLoadfEXT },410{ "glMatrixLoadIdentityEXT", (PROC) nop_glMatrixLoadIdentityEXT },411{ "glMultiTexCoord1hNV", (PROC) nop_glMultiTexCoord1hNV },412{ "glMultiTexCoord1hvNV", (PROC) nop_glMultiTexCoord1hvNV },413{ "glMultiTexCoord2hNV", (PROC) nop_glMultiTexCoord2hNV },414{ "glMultiTexCoord2hvNV", (PROC) nop_glMultiTexCoord2hvNV },415{ "glMultiTexCoord3hNV", (PROC) nop_glMultiTexCoord3hNV },416{ "glMultiTexCoord3hvNV", (PROC) nop_glMultiTexCoord3hvNV },417{ "glMultiTexCoord4hNV", (PROC) nop_glMultiTexCoord4hNV },418{ "glMultiTexCoord4hvNV", (PROC) nop_glMultiTexCoord4hvNV },419{ "glMultiTexCoordPointerEXT", (PROC) nop_glMultiTexCoordPointerEXT },420{ "glMultiTexEnvfEXT", (PROC) nop_glMultiTexEnvfEXT },421{ "glMultiTexEnvfvEXT", (PROC) nop_glMultiTexEnvfvEXT },422{ "glMultiTexEnviEXT", (PROC) nop_glMultiTexEnviEXT },423{ "glMultiTexGenfvEXT", (PROC) nop_glMultiTexGenfvEXT },424{ "glMultiTexGeniEXT", (PROC) nop_glMultiTexGeniEXT },425{ "glNamedBufferDataEXT", (PROC) nop_glNamedBufferDataEXT },426{ "glNamedBufferSubDataEXT", (PROC) nop_glNamedBufferSubDataEXT },427{ "glNamedProgramLocalParameter4fvEXT", (PROC) nop_glNamedProgramLocalParameter4fvEXT },428{ "glNamedProgramLocalParameters4fvEXT", (PROC) nop_glNamedProgramLocalParameters4fvEXT },429{ "glNormal3hNV", (PROC) nop_glNormal3hNV },430{ "glNormal3hvNV", (PROC) nop_glNormal3hvNV },431{ "glPatchParameterfv", (PROC) nop_glPatchParameterfv },432{ "glPatchParameteri", (PROC) nop_glPatchParameteri },433{ "glSecondaryColor3hNV", (PROC) nop_glSecondaryColor3hNV },434{ "glSecondaryColor3hvNV", (PROC) nop_glSecondaryColor3hvNV },435{ "glTexCoord1hNV", (PROC) nop_glTexCoord1hNV },436{ "glTexCoord1hvNV", (PROC) nop_glTexCoord1hvNV },437{ "glTexCoord2hNV", (PROC) nop_glTexCoord2hNV },438{ "glTexCoord2hvNV", (PROC) nop_glTexCoord2hvNV },439{ "glTexCoord3hNV", (PROC) nop_glTexCoord3hNV },440{ "glTexCoord3hvNV", (PROC) nop_glTexCoord3hvNV },441{ "glTexCoord4hNV", (PROC) nop_glTexCoord4hNV },442{ "glTexCoord4hvNV", (PROC) nop_glTexCoord4hvNV },443{ "glTextureParameterfEXT", (PROC) nop_glTextureParameterfEXT },444{ "glTextureParameterfvEXT", (PROC) nop_glTextureParameterfvEXT },445{ "glTextureParameteriEXT", (PROC) nop_glTextureParameteriEXT },446{ "glUnmapNamedBufferEXT", (PROC) nop_glUnmapNamedBufferEXT },447{ "glVertex2hNV", (PROC) nop_glVertex2hNV },448{ "glVertex2hvNV", (PROC) nop_glVertex2hvNV },449{ "glVertex3hNV", (PROC) nop_glVertex3hNV },450{ "glVertex3hvNV", (PROC) nop_glVertex3hvNV },451{ "glVertex4hNV", (PROC) nop_glVertex4hNV },452{ "glVertex4hvNV", (PROC) nop_glVertex4hvNV },453{ NULL, NULL }454};455456int i;457458for (i = 0; table[i].name; i++) {459if (strcmp(table[i].name, name) == 0)460return table[i].p;461}462return NULL;463}464465466