mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
Initial changes after moving from src/mesa/main/.
Needs testing - it havent been even compiled yet.
This commit is contained in:
parent
a904b493a9
commit
3f94cef027
6 changed files with 4571 additions and 0 deletions
242
src/mesa/shader/arbfragparse.c
Normal file
242
src/mesa/shader/arbfragparse.c
Normal file
|
|
@ -0,0 +1,242 @@
|
|||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 6.1
|
||||
*
|
||||
* Copyright (C) 1999-2004 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.
|
||||
*/
|
||||
|
||||
#define DEBUG_FP 0
|
||||
|
||||
/**
|
||||
* \file arbfragparse.c
|
||||
* ARB_fragment_program parser.
|
||||
* \author Karl Rasche
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "imports.h"
|
||||
#include "macros.h"
|
||||
#include "mtypes.h"
|
||||
#include "arbprogparse.h"
|
||||
#include "arbfragparse.h"
|
||||
|
||||
void
|
||||
_mesa_debug_fp_inst(GLint num, struct fp_instruction *fp)
|
||||
{
|
||||
GLint a;
|
||||
|
||||
fprintf(stderr, "PROGRAM_OUTPUT: 0x%x\n", PROGRAM_OUTPUT);
|
||||
fprintf(stderr, "PROGRAM_INPUT: 0x%x\n", PROGRAM_INPUT);
|
||||
fprintf(stderr, "PROGRAM_TEMPORARY: 0x%x\n", PROGRAM_TEMPORARY);
|
||||
|
||||
for (a=0; a<num; a++) {
|
||||
switch (fp[a].Opcode) {
|
||||
case FP_OPCODE_END:
|
||||
fprintf(stderr, "FP_OPCODE_END"); break;
|
||||
|
||||
case FP_OPCODE_ABS:
|
||||
fprintf(stderr, "FP_OPCODE_ABS"); break;
|
||||
|
||||
case FP_OPCODE_ADD:
|
||||
fprintf(stderr, "FP_OPCODE_ADD"); break;
|
||||
|
||||
case FP_OPCODE_CMP:
|
||||
fprintf(stderr, "FP_OPCODE_CMP"); break;
|
||||
|
||||
case FP_OPCODE_COS:
|
||||
fprintf(stderr, "FP_OPCODE_COS"); break;
|
||||
|
||||
case FP_OPCODE_DP3:
|
||||
fprintf(stderr, "FP_OPCODE_DP3"); break;
|
||||
|
||||
case FP_OPCODE_DP4:
|
||||
fprintf(stderr, "FP_OPCODE_DP4"); break;
|
||||
|
||||
case FP_OPCODE_DPH:
|
||||
fprintf(stderr, "FP_OPCODE_DPH"); break;
|
||||
|
||||
case FP_OPCODE_DST:
|
||||
fprintf(stderr, "FP_OPCODE_DST"); break;
|
||||
|
||||
case FP_OPCODE_EX2:
|
||||
fprintf(stderr, "FP_OPCODE_EX2"); break;
|
||||
|
||||
case FP_OPCODE_FLR:
|
||||
fprintf(stderr, "FP_OPCODE_FLR"); break;
|
||||
|
||||
case FP_OPCODE_FRC:
|
||||
fprintf(stderr, "FP_OPCODE_FRC"); break;
|
||||
|
||||
case FP_OPCODE_KIL:
|
||||
fprintf(stderr, "FP_OPCODE_KIL"); break;
|
||||
|
||||
case FP_OPCODE_LG2:
|
||||
fprintf(stderr, "FP_OPCODE_LG2"); break;
|
||||
|
||||
case FP_OPCODE_LIT:
|
||||
fprintf(stderr, "FP_OPCODE_LIT"); break;
|
||||
|
||||
case FP_OPCODE_LRP:
|
||||
fprintf(stderr, "FP_OPCODE_LRP"); break;
|
||||
|
||||
case FP_OPCODE_MAD:
|
||||
fprintf(stderr, "FP_OPCODE_MAD"); break;
|
||||
|
||||
case FP_OPCODE_MAX:
|
||||
fprintf(stderr, "FP_OPCODE_MAX"); break;
|
||||
|
||||
case FP_OPCODE_MIN:
|
||||
fprintf(stderr, "FP_OPCODE_MIN"); break;
|
||||
|
||||
case FP_OPCODE_MOV:
|
||||
fprintf(stderr, "FP_OPCODE_MOV"); break;
|
||||
|
||||
case FP_OPCODE_MUL:
|
||||
fprintf(stderr, "FP_OPCODE_MUL"); break;
|
||||
|
||||
case FP_OPCODE_POW:
|
||||
fprintf(stderr, "FP_OPCODE_POW"); break;
|
||||
|
||||
case FP_OPCODE_RCP:
|
||||
fprintf(stderr, "FP_OPCODE_RCP"); break;
|
||||
|
||||
case FP_OPCODE_RSQ:
|
||||
fprintf(stderr, "FP_OPCODE_RSQ"); break;
|
||||
|
||||
case FP_OPCODE_SCS:
|
||||
fprintf(stderr, "FP_OPCODE_SCS"); break;
|
||||
|
||||
case FP_OPCODE_SIN:
|
||||
fprintf(stderr, "FP_OPCODE_SIN"); break;
|
||||
|
||||
case FP_OPCODE_SLT:
|
||||
fprintf(stderr, "FP_OPCODE_SLT"); break;
|
||||
|
||||
case FP_OPCODE_SUB:
|
||||
fprintf(stderr, "FP_OPCODE_SUB"); break;
|
||||
|
||||
case FP_OPCODE_SWZ:
|
||||
fprintf(stderr, "FP_OPCODE_SWZ"); break;
|
||||
|
||||
case FP_OPCODE_TEX:
|
||||
fprintf(stderr, "FP_OPCODE_TEX"); break;
|
||||
|
||||
case FP_OPCODE_TXB:
|
||||
fprintf(stderr, "FP_OPCODE_TXB"); break;
|
||||
|
||||
case FP_OPCODE_TXP:
|
||||
fprintf(stderr, "FP_OPCODE_TXP"); break;
|
||||
|
||||
case FP_OPCODE_X2D:
|
||||
fprintf(stderr, "FP_OPCODE_XPD"); break;
|
||||
|
||||
default:
|
||||
_mesa_warning(NULL, "Bad opcode in debug_fg_inst()");
|
||||
}
|
||||
|
||||
fprintf(stderr, " D(0x%x:%d:%d%d%d%d) ",
|
||||
fp[a].DstReg.File, fp[a].DstReg.Index,
|
||||
fp[a].DstReg.WriteMask[0], fp[a].DstReg.WriteMask[1],
|
||||
fp[a].DstReg.WriteMask[2], fp[a].DstReg.WriteMask[3]);
|
||||
|
||||
fprintf(stderr, "S1(0x%x:%d:%d%d%d%d) ", fp[a].SrcReg[0].File, fp[a].SrcReg[0].Index,
|
||||
fp[a].SrcReg[0].Swizzle[0],
|
||||
fp[a].SrcReg[0].Swizzle[1],
|
||||
fp[a].SrcReg[0].Swizzle[2],
|
||||
fp[a].SrcReg[0].Swizzle[3]);
|
||||
|
||||
fprintf(stderr, "S2(0x%x:%d:%d%d%d%d) ", fp[a].SrcReg[1].File, fp[a].SrcReg[1].Index,
|
||||
fp[a].SrcReg[1].Swizzle[0],
|
||||
fp[a].SrcReg[1].Swizzle[1],
|
||||
fp[a].SrcReg[1].Swizzle[2],
|
||||
fp[a].SrcReg[1].Swizzle[3]);
|
||||
|
||||
fprintf(stderr, "S3(0x%x:%d:%d%d%d%d)", fp[a].SrcReg[2].File, fp[a].SrcReg[2].Index,
|
||||
fp[a].SrcReg[2].Swizzle[0],
|
||||
fp[a].SrcReg[2].Swizzle[1],
|
||||
fp[a].SrcReg[2].Swizzle[2],
|
||||
fp[a].SrcReg[2].Swizzle[3]);
|
||||
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_parse_arb_fragment_program(GLcontext * ctx, GLenum target,
|
||||
const GLubyte * str, GLsizei len,
|
||||
struct fragment_program *program)
|
||||
{
|
||||
GLuint a, retval;
|
||||
struct arb_program ap;
|
||||
|
||||
/* set the program target before parsing */
|
||||
ap.Base.Target = GL_FRAGMENT_PROGRAM_ARB;
|
||||
|
||||
retval = _mesa_parse_arb_program(ctx, str, len, &ap);
|
||||
|
||||
/* copy the relvant contents of the arb_program struct into the
|
||||
* fragment_program struct
|
||||
*/
|
||||
program->Base.NumInstructions = ap.Base.NumInstructions;
|
||||
program->Base.NumTemporaries = ap.Base.NumTemporaries;
|
||||
program->Base.NumParameters = ap.Base.NumParameters;
|
||||
program->Base.NumAttributes = ap.Base.NumAttributes;
|
||||
program->Base.NumAddressRegs = ap.Base.NumAddressRegs;
|
||||
|
||||
program->InputsRead = ap.InputsRead;
|
||||
program->OutputsWritten = ap.OutputsWritten;
|
||||
for (a=0; a<MAX_TEXTURE_IMAGE_UNITS; a++)
|
||||
program->TexturesUsed[a] = ap.TexturesUsed[a];
|
||||
program->NumAluInstructions = ap.NumAluInstructions;
|
||||
program->NumTexInstructions = ap.NumTexInstructions;
|
||||
program->NumTexIndirections = ap.NumTexIndirections;
|
||||
program->Parameters = ap.Parameters;
|
||||
program->FogOption = ap.FogOption;
|
||||
|
||||
/* XXX: Parse error. Cleanup things and return */
|
||||
if (retval)
|
||||
{
|
||||
program->Instructions = (struct fp_instruction *) _mesa_malloc (
|
||||
sizeof(struct fp_instruction) );
|
||||
program->Instructions[0].Opcode = FP_OPCODE_END;
|
||||
return;
|
||||
}
|
||||
|
||||
/* XXX: Eh.. we parsed something that wasn't a fragment program. doh! */
|
||||
/* this wont happen any more */
|
||||
/*
|
||||
if (ap.Base.Target != GL_FRAGMENT_PROGRAM_ARB)
|
||||
{
|
||||
program->Instructions = (struct fp_instruction *) _mesa_malloc (
|
||||
sizeof(struct fp_instruction) );
|
||||
program->Instructions[0].Opcode = FP_OPCODE_END;
|
||||
|
||||
_mesa_error (ctx, GL_INVALID_OPERATION, "Parsed a non-fragment program as a fragment program");
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
#if DEBUG_FP
|
||||
_mesa_debug_fp_inst(ap.Base.NumInstructions, ap.FPInstructions);
|
||||
#endif
|
||||
|
||||
program->Instructions = ap.FPInstructions;
|
||||
}
|
||||
39
src/mesa/shader/arbfragparse.h
Normal file
39
src/mesa/shader/arbfragparse.h
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 5.1
|
||||
*
|
||||
* Copyright (C) 1999-2003 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 ARBFRAGPARSE_H
|
||||
#define ARBFRAGPARSE_H
|
||||
|
||||
#include "mtypes.h"
|
||||
|
||||
extern void
|
||||
_mesa_parse_arb_fragment_program(GLcontext * ctx, GLenum target,
|
||||
const GLubyte * str, GLsizei len,
|
||||
struct fragment_program *program);
|
||||
|
||||
extern void
|
||||
_mesa_debug_fp_inst(GLint num, struct fp_instruction *fp);
|
||||
|
||||
|
||||
#endif
|
||||
3954
src/mesa/shader/arbprogparse.c
Normal file
3954
src/mesa/shader/arbprogparse.c
Normal file
File diff suppressed because it is too large
Load diff
74
src/mesa/shader/arbprogparse.h
Normal file
74
src/mesa/shader/arbprogparse.h
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 6.1
|
||||
*
|
||||
* Copyright (C) 1999-2004 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 ARBPROGPARSE_H
|
||||
#define ARBPROGPARSE_H
|
||||
|
||||
#include "context.h"
|
||||
#include "mtypes.h"
|
||||
#include "nvvertprog.h"
|
||||
#include "nvfragprog.h"
|
||||
|
||||
/**
|
||||
* This is basically a union of the vertex_program and fragment_program
|
||||
* structs that we can use to parse the program into
|
||||
*
|
||||
* XXX: this should go into mtypes.h?
|
||||
*/
|
||||
struct arb_program
|
||||
{
|
||||
struct program Base;
|
||||
struct program_parameter_list *Parameters;
|
||||
GLuint InputsRead;
|
||||
GLuint OutputsWritten;
|
||||
|
||||
GLuint Position; /* Just used for error reporting while parsing */
|
||||
GLuint MajorVersion;
|
||||
GLuint MinorVersion;
|
||||
|
||||
/* ARB_vertex_program specifics */
|
||||
struct vp_instruction *VPInstructions;
|
||||
|
||||
/* Options currently recognized by the parser */
|
||||
/* ARB_fp */
|
||||
GLenum PrecisionOption; /* GL_DONT_CARE, GL_NICEST or GL_FASTEST */
|
||||
GLenum FogOption; /* GL_NONE, GL_LINEAR, GL_EXP or GL_EXP2 */
|
||||
|
||||
/* ARB_fp & _vp */
|
||||
GLboolean HintPositionInvariant;
|
||||
|
||||
/* ARB_fragment_program sepecifics */
|
||||
struct fp_instruction *FPInstructions;
|
||||
GLuint TexturesUsed[MAX_TEXTURE_IMAGE_UNITS];
|
||||
GLuint NumAluInstructions;
|
||||
GLuint NumTexInstructions;
|
||||
GLuint NumTexIndirections;
|
||||
};
|
||||
|
||||
extern GLuint
|
||||
_mesa_parse_arb_program( GLcontext *ctx, const GLubyte *str, GLsizei len,
|
||||
struct arb_program *Program );
|
||||
|
||||
#endif
|
||||
229
src/mesa/shader/arbvertparse.c
Normal file
229
src/mesa/shader/arbvertparse.c
Normal file
|
|
@ -0,0 +1,229 @@
|
|||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 6.1
|
||||
*
|
||||
* Copyright (C) 1999-2004 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.
|
||||
*/
|
||||
|
||||
#define DEBUG_VP 0
|
||||
|
||||
/**
|
||||
* \file arbvertparse.c
|
||||
* ARB_vertex_program parser.
|
||||
* \author Karl Rasche
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "arbvertparse.h"
|
||||
#include "hash.h"
|
||||
#include "imports.h"
|
||||
#include "macros.h"
|
||||
#include "mtypes.h"
|
||||
#include "nvprogram.h"
|
||||
#include "nvvertparse.h"
|
||||
#include "nvvertprog.h"
|
||||
|
||||
#include "arbprogparse.h"
|
||||
|
||||
|
||||
static GLvoid
|
||||
debug_vp_inst(GLint num, struct vp_instruction *vp)
|
||||
{
|
||||
GLint a;
|
||||
|
||||
for (a=0; a<num; a++) {
|
||||
switch (vp[a].Opcode) {
|
||||
case VP_OPCODE_MOV:
|
||||
fprintf(stderr, "VP_OPCODE_MOV"); break;
|
||||
|
||||
case VP_OPCODE_LIT:
|
||||
fprintf(stderr, "VP_OPCODE_LIT"); break;
|
||||
|
||||
case VP_OPCODE_RCP:
|
||||
fprintf(stderr, "VP_OPCODE_RCP"); break;
|
||||
|
||||
case VP_OPCODE_RSQ:
|
||||
fprintf(stderr, "VP_OPCODE_RSQ"); break;
|
||||
|
||||
case VP_OPCODE_EXP:
|
||||
fprintf(stderr, "VP_OPCODE_EXP"); break;
|
||||
|
||||
case VP_OPCODE_LOG:
|
||||
fprintf(stderr, "VP_OPCODE_LOG"); break;
|
||||
|
||||
case VP_OPCODE_MUL:
|
||||
fprintf(stderr, "VP_OPCODE_MUL"); break;
|
||||
|
||||
case VP_OPCODE_ADD:
|
||||
fprintf(stderr, "VP_OPCODE_ADD"); break;
|
||||
|
||||
case VP_OPCODE_DP3:
|
||||
fprintf(stderr, "VP_OPCODE_DP3"); break;
|
||||
|
||||
case VP_OPCODE_DP4:
|
||||
fprintf(stderr, "VP_OPCODE_DP4"); break;
|
||||
|
||||
case VP_OPCODE_DST:
|
||||
fprintf(stderr, "VP_OPCODE_DST"); break;
|
||||
|
||||
case VP_OPCODE_MIN:
|
||||
fprintf(stderr, "VP_OPCODE_MIN"); break;
|
||||
|
||||
case VP_OPCODE_MAX:
|
||||
fprintf(stderr, "VP_OPCODE_MAX"); break;
|
||||
|
||||
case VP_OPCODE_SLT:
|
||||
fprintf(stderr, "VP_OPCODE_SLT"); break;
|
||||
|
||||
case VP_OPCODE_SGE:
|
||||
fprintf(stderr, "VP_OPCODE_SGE"); break;
|
||||
|
||||
case VP_OPCODE_MAD:
|
||||
fprintf(stderr, "VP_OPCODE_MAD"); break;
|
||||
|
||||
case VP_OPCODE_ARL:
|
||||
fprintf(stderr, "VP_OPCODE_ARL"); break;
|
||||
|
||||
case VP_OPCODE_DPH:
|
||||
fprintf(stderr, "VP_OPCODE_DPH"); break;
|
||||
|
||||
case VP_OPCODE_RCC:
|
||||
fprintf(stderr, "VP_OPCODE_RCC"); break;
|
||||
|
||||
case VP_OPCODE_SUB:
|
||||
fprintf(stderr, "VP_OPCODE_SUB"); break;
|
||||
|
||||
case VP_OPCODE_ABS:
|
||||
fprintf(stderr, "VP_OPCODE_ABS"); break;
|
||||
|
||||
case VP_OPCODE_FLR:
|
||||
fprintf(stderr, "VP_OPCODE_FLR"); break;
|
||||
|
||||
case VP_OPCODE_FRC:
|
||||
fprintf(stderr, "VP_OPCODE_FRC"); break;
|
||||
|
||||
case VP_OPCODE_EX2:
|
||||
fprintf(stderr, "VP_OPCODE_EX2"); break;
|
||||
|
||||
case VP_OPCODE_LG2:
|
||||
fprintf(stderr, "VP_OPCODE_LG2"); break;
|
||||
|
||||
case VP_OPCODE_POW:
|
||||
fprintf(stderr, "VP_OPCODE_POW"); break;
|
||||
|
||||
case VP_OPCODE_XPD:
|
||||
fprintf(stderr, "VP_OPCODE_XPD"); break;
|
||||
|
||||
case VP_OPCODE_SWZ:
|
||||
fprintf(stderr, "VP_OPCODE_SWZ"); break;
|
||||
|
||||
case VP_OPCODE_END:
|
||||
fprintf(stderr, "VP_OPCODE_END"); break;
|
||||
}
|
||||
|
||||
fprintf(stderr, " D(0x%x:%d:%d%d%d%d) ", vp[a].DstReg.File, vp[a].DstReg.Index,
|
||||
vp[a].DstReg.WriteMask[0],
|
||||
vp[a].DstReg.WriteMask[1],
|
||||
vp[a].DstReg.WriteMask[2],
|
||||
vp[a].DstReg.WriteMask[3]);
|
||||
|
||||
fprintf(stderr, "S1(0x%x:%d:%d%d%d%d) ", vp[a].SrcReg[0].File, vp[a].SrcReg[0].Index,
|
||||
vp[a].SrcReg[0].Swizzle[0],
|
||||
vp[a].SrcReg[0].Swizzle[1],
|
||||
vp[a].SrcReg[0].Swizzle[2],
|
||||
vp[a].SrcReg[0].Swizzle[3]);
|
||||
|
||||
fprintf(stderr, "S2(0x%x:%d:%d%d%d%d) ", vp[a].SrcReg[1].File, vp[a].SrcReg[1].Index,
|
||||
vp[a].SrcReg[1].Swizzle[0],
|
||||
vp[a].SrcReg[1].Swizzle[1],
|
||||
vp[a].SrcReg[1].Swizzle[2],
|
||||
vp[a].SrcReg[1].Swizzle[3]);
|
||||
|
||||
fprintf(stderr, "S3(0x%x:%d:%d%d%d%d)", vp[a].SrcReg[2].File, vp[a].SrcReg[2].Index,
|
||||
vp[a].SrcReg[2].Swizzle[0],
|
||||
vp[a].SrcReg[2].Swizzle[1],
|
||||
vp[a].SrcReg[2].Swizzle[2],
|
||||
vp[a].SrcReg[2].Swizzle[3]);
|
||||
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_parse_arb_vertex_program(GLcontext * ctx, GLenum target,
|
||||
const GLubyte * str, GLsizei len,
|
||||
struct vertex_program *program)
|
||||
{
|
||||
GLuint retval;
|
||||
struct arb_program ap;
|
||||
|
||||
/* set the program target before parsing */
|
||||
ap.Base.Target = GL_VERTEX_PROGRAM_ARB;
|
||||
|
||||
retval = _mesa_parse_arb_program(ctx, str, len, &ap);
|
||||
|
||||
/* copy the relvant contents of the arb_program struct into the
|
||||
* fragment_program struct
|
||||
*/
|
||||
program->Base.NumInstructions = ap.Base.NumInstructions;
|
||||
program->Base.NumTemporaries = ap.Base.NumTemporaries;
|
||||
program->Base.NumParameters = ap.Base.NumParameters;
|
||||
program->Base.NumAttributes = ap.Base.NumAttributes;
|
||||
program->Base.NumAddressRegs = ap.Base.NumAddressRegs;
|
||||
|
||||
program->IsPositionInvariant = ap.HintPositionInvariant;
|
||||
program->InputsRead = ap.InputsRead;
|
||||
program->OutputsWritten = ap.OutputsWritten;
|
||||
program->Parameters = ap.Parameters;
|
||||
|
||||
/* Parse error. Allocate a dummy program and return */
|
||||
if (retval)
|
||||
{
|
||||
program->Instructions = (struct vp_instruction *) _mesa_malloc (
|
||||
sizeof(struct vp_instruction) );
|
||||
program->Instructions[0].Opcode = VP_OPCODE_END;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Eh.. we parsed something that wasn't a vertex program. doh! */
|
||||
/* this wont happen any more */
|
||||
/*
|
||||
if (ap.Base.Target != GL_VERTEX_PROGRAM_ARB)
|
||||
{
|
||||
program->Instructions = (struct vp_instruction *) _mesa_malloc (
|
||||
sizeof(struct vp_instruction) );
|
||||
program->Instructions[0].Opcode = VP_OPCODE_END;
|
||||
|
||||
_mesa_error (ctx, GL_INVALID_OPERATION, "Parsed a non-vertex program as a vertex program");
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
program->Instructions = ap.VPInstructions;
|
||||
|
||||
#if DEBUG_VP
|
||||
debug_vp_inst(ap.Base.NumInstructions, ap.VPInstructions);
|
||||
#else
|
||||
(void) debug_vp_inst;
|
||||
#endif
|
||||
|
||||
}
|
||||
33
src/mesa/shader/arbvertparse.h
Normal file
33
src/mesa/shader/arbvertparse.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 5.1
|
||||
*
|
||||
* Copyright (C) 1999-2003 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 ARBVERTPARSE_H
|
||||
#define ARBVERTPARSE_H
|
||||
|
||||
extern void
|
||||
_mesa_parse_arb_vertex_program(GLcontext * ctx, GLenum target,
|
||||
const GLubyte * str, GLsizei len,
|
||||
struct vertex_program *program);
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Reference in a new issue