ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

prog_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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.