diff options
author | Brian <[email protected]> | 2007-02-22 16:09:40 -0700 |
---|---|---|
committer | Brian <[email protected]> | 2007-02-22 16:09:40 -0700 |
commit | 13e3b21b16b14112b416f3ee5742fc7bd1b2d823 (patch) | |
tree | f90b1ced373b715ec3c641db841d9b24e4af81b5 /src/mesa/shader/prog_execute.h | |
parent | 7aaefcbe487aedf53a46a66d2bac8b265b0176bf (diff) |
New, unified interpretor/executor for vertex and fragment programs.
This replaces the code formerly in nvvertexec.c and s_fragprog.c.
Currently, DDX, DDY don't work.
Diffstat (limited to 'src/mesa/shader/prog_execute.h')
-rw-r--r-- | src/mesa/shader/prog_execute.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/mesa/shader/prog_execute.h b/src/mesa/shader/prog_execute.h new file mode 100644 index 00000000000..0e737657e34 --- /dev/null +++ b/src/mesa/shader/prog_execute.h @@ -0,0 +1,77 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5.3 + * + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef PROG_EXECUTE_H +#define PROG_EXECUTE_H + + +typedef void (*FetchTexelLodFunc)(GLcontext *ctx, const GLfloat texcoord[4], + GLfloat lambda, GLuint unit, GLfloat color[4]); + +typedef void (*FetchTexelDerivFunc)(GLcontext *ctx, const GLfloat texcoord[4], + const GLfloat texdx[4], + const GLfloat texdy[4], + GLuint unit, GLfloat color[4]); + + +/** + * Virtual machine state used during execution of vertex/fragment programs. + */ +struct gl_program_machine +{ + const struct gl_program *CurProgram; + + /** Fragment Input attributes */ + GLfloat (*Attribs)[MAX_WIDTH][4]; + GLuint CurElement; /**< Index into Attribs arrays */ + + /** Vertex Input attribs */ + GLfloat VertAttribs[VERT_ATTRIB_MAX][4]; + + GLfloat Temporaries[MAX_PROGRAM_TEMPS][4]; + GLfloat Outputs[FRAG_RESULT_MAX][4]; + GLuint CondCodes[4]; /**< COND_* value for x/y/z/w */ + + GLint AddressReg[MAX_VERTEX_PROGRAM_ADDRESS_REGS][4]; + + GLuint CallStack[MAX_PROGRAM_CALL_DEPTH]; /**< For CAL/RET instructions */ + GLuint StackDepth; /**< Index/ptr to top of CallStack[] */ + + /** Texture fetch functions */ + FetchTexelLodFunc FetchTexelLod; + FetchTexelDerivFunc FetchTexelDeriv; +}; + + +extern void +_mesa_get_program_register(GLcontext *ctx, enum register_file file, + GLuint index, GLfloat val[4]); + +extern GLboolean +_mesa_execute_program(GLcontext *ctx, + const struct gl_program *program, GLuint maxInst, + struct gl_program_machine *machine, GLuint element); + + +#endif /* PROG_EXECUTE_H */ |