Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenprog_debug.c
Go to the documentation of this file.
00001 /* 00002 * Mesa 3-D graphics library 00003 * Version: 6.5.3 00004 * 00005 * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. 00006 * 00007 * Permission is hereby granted, free of charge, to any person obtaining a 00008 * copy of this software and associated documentation files (the "Software"), 00009 * to deal in the Software without restriction, including without limitation 00010 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00011 * and/or sell copies of the Software, and to permit persons to whom the 00012 * Software is furnished to do so, subject to the following conditions: 00013 * 00014 * The above copyright notice and this permission notice shall be included 00015 * in all copies or substantial portions of the Software. 00016 * 00017 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00018 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00019 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00020 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 00021 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 00022 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00023 */ 00024 00025 00026 #include "main/glheader.h" 00027 #include "main/context.h" 00028 #include "main/macros.h" 00029 #include "nvfragparse.h" 00030 #include "nvvertparse.h" 00031 #include "program.h" 00032 #include "prog_debug.h" 00033 #include "prog_parameter.h" 00034 #include "prog_instruction.h" 00035 00036 00037 00043 /* XXX temporary */ 00044 GLAPI void GLAPIENTRY 00045 glProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, 00046 GLvoid *data) 00047 { 00048 _mesa_ProgramCallbackMESA(target, callback, data); 00049 } 00050 00051 00052 void 00053 _mesa_ProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, 00054 GLvoid *data) 00055 { 00056 GET_CURRENT_CONTEXT(ctx); 00057 00058 switch (target) { 00059 case GL_FRAGMENT_PROGRAM_ARB: 00060 if (!ctx->Extensions.ARB_fragment_program) { 00061 _mesa_error(ctx, GL_INVALID_ENUM, "glProgramCallbackMESA(target)"); 00062 return; 00063 } 00064 ctx->FragmentProgram.Callback = callback; 00065 ctx->FragmentProgram.CallbackData = data; 00066 break; 00067 case GL_FRAGMENT_PROGRAM_NV: 00068 if (!ctx->Extensions.NV_fragment_program) { 00069 _mesa_error(ctx, GL_INVALID_ENUM, "glProgramCallbackMESA(target)"); 00070 return; 00071 } 00072 ctx->FragmentProgram.Callback = callback; 00073 ctx->FragmentProgram.CallbackData = data; 00074 break; 00075 case GL_VERTEX_PROGRAM_ARB: /* == GL_VERTEX_PROGRAM_NV */ 00076 if (!ctx->Extensions.ARB_vertex_program && 00077 !ctx->Extensions.NV_vertex_program) { 00078 _mesa_error(ctx, GL_INVALID_ENUM, "glProgramCallbackMESA(target)"); 00079 return; 00080 } 00081 ctx->VertexProgram.Callback = callback; 00082 ctx->VertexProgram.CallbackData = data; 00083 break; 00084 default: 00085 _mesa_error(ctx, GL_INVALID_ENUM, "glProgramCallbackMESA(target)"); 00086 return; 00087 } 00088 } 00089 00090 00091 /* XXX temporary */ 00092 GLAPI void GLAPIENTRY 00093 glGetProgramRegisterfvMESA(GLenum target, 00094 GLsizei len, const GLubyte *registerName, 00095 GLfloat *v) 00096 { 00097 _mesa_GetProgramRegisterfvMESA(target, len, registerName, v); 00098 } 00099 00100 00101 void 00102 _mesa_GetProgramRegisterfvMESA(GLenum target, 00103 GLsizei len, const GLubyte *registerName, 00104 GLfloat *v) 00105 { 00106 char reg[1000]; 00107 GET_CURRENT_CONTEXT(ctx); 00108 00109 /* We _should_ be inside glBegin/glEnd */ 00110 #if 0 00111 if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END) { 00112 _mesa_error(ctx, GL_INVALID_OPERATION, "glGetProgramRegisterfvMESA"); 00113 return; 00114 } 00115 #endif 00116 00117 /* make null-terminated copy of registerName */ 00118 len = MIN2((unsigned int) len, sizeof(reg) - 1); 00119 _mesa_memcpy(reg, registerName, len); 00120 reg[len] = 0; 00121 00122 switch (target) { 00123 case GL_VERTEX_PROGRAM_ARB: /* == GL_VERTEX_PROGRAM_NV */ 00124 if (!ctx->Extensions.ARB_vertex_program && 00125 !ctx->Extensions.NV_vertex_program) { 00126 _mesa_error(ctx, GL_INVALID_ENUM, 00127 "glGetProgramRegisterfvMESA(target)"); 00128 return; 00129 } 00130 if (!ctx->VertexProgram._Enabled) { 00131 _mesa_error(ctx, GL_INVALID_OPERATION, 00132 "glGetProgramRegisterfvMESA"); 00133 return; 00134 } 00135 /* GL_NV_vertex_program */ 00136 if (reg[0] == 'R') { 00137 /* Temp register */ 00138 GLint i = _mesa_atoi(reg + 1); 00139 if (i >= (GLint)ctx->Const.VertexProgram.MaxTemps) { 00140 _mesa_error(ctx, GL_INVALID_VALUE, 00141 "glGetProgramRegisterfvMESA(registerName)"); 00142 return; 00143 } 00144 ctx->Driver.GetProgramRegister(ctx, PROGRAM_TEMPORARY, i, v); 00145 } 00146 else if (reg[0] == 'v' && reg[1] == '[') { 00147 /* Vertex Input attribute */ 00148 GLuint i; 00149 for (i = 0; i < ctx->Const.VertexProgram.MaxAttribs; i++) { 00150 const char *name = _mesa_nv_vertex_input_register_name(i); 00151 char number[10]; 00152 _mesa_sprintf(number, "%d", i); 00153 if (_mesa_strncmp(reg + 2, name, 4) == 0 || 00154 _mesa_strncmp(reg + 2, number, _mesa_strlen(number)) == 0) { 00155 ctx->Driver.GetProgramRegister(ctx, PROGRAM_INPUT, i, v); 00156 return; 00157 } 00158 } 00159 _mesa_error(ctx, GL_INVALID_VALUE, 00160 "glGetProgramRegisterfvMESA(registerName)"); 00161 return; 00162 } 00163 else if (reg[0] == 'o' && reg[1] == '[') { 00164 /* Vertex output attribute */ 00165 } 00166 /* GL_ARB_vertex_program */ 00167 else if (_mesa_strncmp(reg, "vertex.", 7) == 0) { 00168 00169 } 00170 else { 00171 _mesa_error(ctx, GL_INVALID_VALUE, 00172 "glGetProgramRegisterfvMESA(registerName)"); 00173 return; 00174 } 00175 break; 00176 case GL_FRAGMENT_PROGRAM_ARB: 00177 if (!ctx->Extensions.ARB_fragment_program) { 00178 _mesa_error(ctx, GL_INVALID_ENUM, 00179 "glGetProgramRegisterfvMESA(target)"); 00180 return; 00181 } 00182 if (!ctx->FragmentProgram._Enabled) { 00183 _mesa_error(ctx, GL_INVALID_OPERATION, 00184 "glGetProgramRegisterfvMESA"); 00185 return; 00186 } 00187 /* XXX to do */ 00188 break; 00189 case GL_FRAGMENT_PROGRAM_NV: 00190 if (!ctx->Extensions.NV_fragment_program) { 00191 _mesa_error(ctx, GL_INVALID_ENUM, 00192 "glGetProgramRegisterfvMESA(target)"); 00193 return; 00194 } 00195 if (!ctx->FragmentProgram._Enabled) { 00196 _mesa_error(ctx, GL_INVALID_OPERATION, 00197 "glGetProgramRegisterfvMESA"); 00198 return; 00199 } 00200 if (reg[0] == 'R') { 00201 /* Temp register */ 00202 GLint i = _mesa_atoi(reg + 1); 00203 if (i >= (GLint)ctx->Const.FragmentProgram.MaxTemps) { 00204 _mesa_error(ctx, GL_INVALID_VALUE, 00205 "glGetProgramRegisterfvMESA(registerName)"); 00206 return; 00207 } 00208 ctx->Driver.GetProgramRegister(ctx, PROGRAM_TEMPORARY, 00209 i, v); 00210 } 00211 else if (reg[0] == 'f' && reg[1] == '[') { 00212 /* Fragment input attribute */ 00213 GLuint i; 00214 for (i = 0; i < ctx->Const.FragmentProgram.MaxAttribs; i++) { 00215 const char *name = _mesa_nv_fragment_input_register_name(i); 00216 if (_mesa_strncmp(reg + 2, name, 4) == 0) { 00217 ctx->Driver.GetProgramRegister(ctx, PROGRAM_INPUT, i, v); 00218 return; 00219 } 00220 } 00221 _mesa_error(ctx, GL_INVALID_VALUE, 00222 "glGetProgramRegisterfvMESA(registerName)"); 00223 return; 00224 } 00225 else if (_mesa_strcmp(reg, "o[COLR]") == 0) { 00226 /* Fragment output color */ 00227 ctx->Driver.GetProgramRegister(ctx, PROGRAM_OUTPUT, 00228 FRAG_RESULT_COLR, v); 00229 } 00230 else if (_mesa_strcmp(reg, "o[COLH]") == 0) { 00231 /* Fragment output color */ 00232 ctx->Driver.GetProgramRegister(ctx, PROGRAM_OUTPUT, 00233 FRAG_RESULT_COLH, v); 00234 } 00235 else if (_mesa_strcmp(reg, "o[DEPR]") == 0) { 00236 /* Fragment output depth */ 00237 ctx->Driver.GetProgramRegister(ctx, PROGRAM_OUTPUT, 00238 FRAG_RESULT_DEPR, v); 00239 } 00240 else { 00241 /* try user-defined identifiers */ 00242 const GLfloat *value = _mesa_lookup_parameter_value( 00243 ctx->FragmentProgram.Current->Base.Parameters, -1, reg); 00244 if (value) { 00245 COPY_4V(v, value); 00246 } 00247 else { 00248 _mesa_error(ctx, GL_INVALID_VALUE, 00249 "glGetProgramRegisterfvMESA(registerName)"); 00250 return; 00251 } 00252 } 00253 break; 00254 default: 00255 _mesa_error(ctx, GL_INVALID_ENUM, 00256 "glGetProgramRegisterfvMESA(target)"); 00257 return; 00258 } 00259 } Generated on Sat May 26 2012 04:19:21 for ReactOS by
1.7.6.1
|