core | glapi | vbo | math | shader | swrast | swrast_setup | tnl | tnl_dd

nvfragparse.c File Reference


Detailed Description

NVIDIA fragment program parser.

Author:
Brian Paul

#include "main/glheader.h"
#include "main/context.h"
#include "main/imports.h"
#include "main/macros.h"
#include "program.h"
#include "prog_parameter.h"
#include "prog_print.h"
#include "prog_instruction.h"
#include "nvfragparse.h"

Data Structures

struct  instruction_pattern
struct  parse_state
 Current parsing state. More...

Defines

#define INPUT_1V   1
#define INPUT_2V   2
#define INPUT_3V   3
#define INPUT_1S   4
#define INPUT_2S   5
#define INPUT_CC   6
#define INPUT_1V_T   7
#define INPUT_3V_T   8
#define INPUT_NONE   9
#define INPUT_1V_S   10
#define OUTPUT_V   20
#define OUTPUT_S   21
#define OUTPUT_NONE   22
#define _R   FLOAT32
#define _H   FLOAT16
#define _X   FIXED12
#define _C   0x08
#define _S   0x10
#define RETURN_ERROR
#define RETURN_ERROR1(msg)
#define RETURN_ERROR2(msg1, msg2)

Functions

static void record_error (struct parse_state *parseState, const char *msg, int lineNo)
static struct instruction_pattern MatchInstruction (const GLubyte *token)
static GLboolean IsLetter (GLubyte b)
static GLboolean IsDigit (GLubyte b)
static GLboolean IsWhitespace (GLubyte b)
static GLint GetToken (struct parse_state *parseState, GLubyte *token)
 Starting at 'str' find the next token.
static GLboolean Parse_Token (struct parse_state *parseState, GLubyte *token)
 Get next token from input stream and increment stream pointer past token.
static GLboolean Peek_Token (struct parse_state *parseState, GLubyte *token)
 Get next token from input stream but don't increment stream pointer.
static GLboolean Parse_String (struct parse_state *parseState, const char *pattern)
 Try to match 'pattern' as the next token after any whitespace/comments.
static GLboolean Parse_Identifier (struct parse_state *parseState, GLubyte *ident)
static GLboolean Parse_ScalarConstant (struct parse_state *parseState, GLfloat *number)
 Parse a floating point constant, or a defined symbol name.
static GLboolean Parse_VectorConstant (struct parse_state *parseState, GLfloat *vec)
 Parse a vector constant, one of: { float } { float, float } { float, float, float } { float, float, float, float }.
static GLuint Parse_VectorOrScalarConstant (struct parse_state *parseState, GLfloat *vec)
 Parse <number>, <varname> or {a, b, c, d}.
static GLboolean Parse_TextureImageId (struct parse_state *parseState, GLubyte *texUnit, GLubyte *texTargetBit)
 Parse a texture image source: [TEX0 | TEX1 | .
static GLboolean Parse_SwizzleSuffix (const GLubyte *token, GLuint swizzle[4])
 Parse a scalar suffix like .x, .y, .z or .w or parse a swizzle suffix like .wxyz, .xxyy, etc and return the swizzle indexes.
static GLboolean Parse_CondCodeMask (struct parse_state *parseState, struct prog_dst_register *dstReg)
static GLboolean Parse_TempReg (struct parse_state *parseState, GLint *tempRegNum)
 Parse a temporary register: Rnn or Hnn.
static GLboolean Parse_DummyReg (struct parse_state *parseState, GLint *regNum)
 Parse a write-only dummy register: RC or HC.
static GLboolean Parse_ProgramParamReg (struct parse_state *parseState, GLint *regNum)
 Parse a program local parameter register "p[##]".
static GLboolean Parse_FragReg (struct parse_state *parseState, GLint *tempRegNum)
 Parse f[name] - fragment input register.
static GLboolean Parse_OutputReg (struct parse_state *parseState, GLint *outputRegNum)
static GLboolean Parse_MaskedDstReg (struct parse_state *parseState, struct prog_dst_register *dstReg)
static GLboolean Parse_VectorSrc (struct parse_state *parseState, struct prog_src_register *srcReg)
 Parse a vector source (register, constant, etc): <vectorSrc> ::= <absVectorSrc> | <baseVectorSrc> <absVectorSrc> ::= <negate> "|" <baseVectorSrc> "|".
static GLboolean Parse_ScalarSrcReg (struct parse_state *parseState, struct prog_src_register *srcReg)
static GLboolean Parse_PrintInstruction (struct parse_state *parseState, struct prog_instruction *inst)
static GLboolean Parse_InstructionSequence (struct parse_state *parseState, struct prog_instruction program[])
void _mesa_parse_nv_fragment_program (GLcontext *ctx, GLenum dstTarget, const GLubyte *str, GLsizei len, struct gl_fragment_program *program)
 Parse/compile the 'str' returning the compiled 'program'.
const char * _mesa_nv_fragment_input_register_name (GLuint i)

Variables

static struct instruction_pattern Instructions []
static const char * InputRegisters [MAX_NV_FRAGMENT_PROGRAM_INPUTS+1]


Define Documentation

#define _C   0x08

#define _H   FLOAT16

#define _R   FLOAT32

#define _S   0x10

#define _X   FIXED12

#define INPUT_1S   4

#define INPUT_1V   1

#define INPUT_1V_S   10

#define INPUT_1V_T   7

#define INPUT_2S   5

#define INPUT_2V   2

#define INPUT_3V   3

#define INPUT_3V_T   8

#define INPUT_CC   6

#define INPUT_NONE   9

#define OUTPUT_NONE   22

#define OUTPUT_S   21

#define OUTPUT_V   20

#define RETURN_ERROR

Value:

do {                                                                    \
   record_error(parseState, "Unexpected end of input.", __LINE__);      \
   return GL_FALSE;                                                     \
} while(0)

#define RETURN_ERROR1 ( msg   ) 

Value:

do {                                                                    \
   record_error(parseState, msg, __LINE__);                             \
   return GL_FALSE;                                                     \
} while(0)

#define RETURN_ERROR2 ( msg1,
msg2   ) 

Value:

do {                                                                    \
   char err[1000];                                                      \
   _mesa_sprintf(err, "%s %s", msg1, msg2);                             \
   record_error(parseState, err, __LINE__);                             \
   return GL_FALSE;                                                     \
} while(0)


Function Documentation

const char* _mesa_nv_fragment_input_register_name ( GLuint  i  ) 

void _mesa_parse_nv_fragment_program ( GLcontext ctx,
GLenum  dstTarget,
const GLubyte *  str,
GLsizei  len,
struct gl_fragment_program program 
)

Parse/compile the 'str' returning the compiled 'program'.

ctx->Program.ErrorPos will be -1 if successful. Otherwise, ErrorPos indicates the position of the error in 'str'.

static GLint GetToken ( struct parse_state parseState,
GLubyte *  token 
) [static]

Starting at 'str' find the next token.

A token can be an integer, an identifier or punctuation symbol.

Returns:
<= 0 we found an error, else, return number of characters parsed.

static GLboolean IsDigit ( GLubyte  b  )  [static]

static GLboolean IsLetter ( GLubyte  b  )  [static]

static GLboolean IsWhitespace ( GLubyte  b  )  [static]

static struct instruction_pattern MatchInstruction ( const GLubyte *  token  )  [static, read]

static GLboolean Parse_CondCodeMask ( struct parse_state parseState,
struct prog_dst_register dstReg 
) [static]

static GLboolean Parse_DummyReg ( struct parse_state parseState,
GLint *  regNum 
) [static]

Parse a write-only dummy register: RC or HC.

static GLboolean Parse_FragReg ( struct parse_state parseState,
GLint *  tempRegNum 
) [static]

Parse f[name] - fragment input register.

static GLboolean Parse_Identifier ( struct parse_state parseState,
GLubyte *  ident 
) [static]

static GLboolean Parse_InstructionSequence ( struct parse_state parseState,
struct prog_instruction  program[] 
) [static]

static GLboolean Parse_MaskedDstReg ( struct parse_state parseState,
struct prog_dst_register dstReg 
) [static]

static GLboolean Parse_OutputReg ( struct parse_state parseState,
GLint *  outputRegNum 
) [static]

static GLboolean Parse_PrintInstruction ( struct parse_state parseState,
struct prog_instruction inst 
) [static]

static GLboolean Parse_ProgramParamReg ( struct parse_state parseState,
GLint *  regNum 
) [static]

Parse a program local parameter register "p[##]".

static GLboolean Parse_ScalarConstant ( struct parse_state parseState,
GLfloat *  number 
) [static]

Parse a floating point constant, or a defined symbol name.

[+/-]N[.N[eN]] Output: number[0 .. 3] will get the value.

static GLboolean Parse_ScalarSrcReg ( struct parse_state parseState,
struct prog_src_register srcReg 
) [static]

static GLboolean Parse_String ( struct parse_state parseState,
const char *  pattern 
) [static]

Try to match 'pattern' as the next token after any whitespace/comments.

static GLboolean Parse_SwizzleSuffix ( const GLubyte *  token,
GLuint  swizzle[4] 
) [static]

Parse a scalar suffix like .x, .y, .z or .w or parse a swizzle suffix like .wxyz, .xxyy, etc and return the swizzle indexes.

static GLboolean Parse_TempReg ( struct parse_state parseState,
GLint *  tempRegNum 
) [static]

Parse a temporary register: Rnn or Hnn.

static GLboolean Parse_TextureImageId ( struct parse_state parseState,
GLubyte *  texUnit,
GLubyte *  texTargetBit 
) [static]

Parse a texture image source: [TEX0 | TEX1 | .

. | TEX15] , [1D | 2D | 3D | CUBE | RECT]

static GLboolean Parse_Token ( struct parse_state parseState,
GLubyte *  token 
) [static]

Get next token from input stream and increment stream pointer past token.

static GLboolean Parse_VectorConstant ( struct parse_state parseState,
GLfloat *  vec 
) [static]

Parse a vector constant, one of: { float } { float, float } { float, float, float } { float, float, float, float }.

static GLuint Parse_VectorOrScalarConstant ( struct parse_state parseState,
GLfloat *  vec 
) [static]

Parse <number>, <varname> or {a, b, c, d}.

Return number of values in the vector or scalar, or zero if parse error.

static GLboolean Parse_VectorSrc ( struct parse_state parseState,
struct prog_src_register srcReg 
) [static]

Parse a vector source (register, constant, etc): <vectorSrc> ::= <absVectorSrc> | <baseVectorSrc> <absVectorSrc> ::= <negate> "|" <baseVectorSrc> "|".

static GLboolean Peek_Token ( struct parse_state parseState,
GLubyte *  token 
) [static]

Get next token from input stream but don't increment stream pointer.

static void record_error ( struct parse_state parseState,
const char *  msg,
int  lineNo 
) [static]


Variable Documentation

const char* InputRegisters[MAX_NV_FRAGMENT_PROGRAM_INPUTS+1] [static]

Initial value:

 {
   "WPOS", "COL0", "COL1", "FOGC",
   "TEX0", "TEX1", "TEX2", "TEX3", "TEX4", "TEX5", "TEX6", "TEX7", NULL
}

struct instruction_pattern Instructions[] [static]


Generated on Sun Sep 27 06:48:02 2009 for Mesa Vertex and Fragment Program code by  doxygen 1.5.4