Make the vertex program source register Index field a signed int since
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 22 Jul 2005 02:53:38 +0000 (02:53 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 22 Jul 2005 02:53:38 +0000 (02:53 +0000)
relative addressing can be negative.
Change some GLuint indexes to GLint in the t_vp_build.c file.
Added PROGRAM_UNDEFINED token for initializing the register File field to
avoid a gcc 4.0 warning.

src/mesa/main/mtypes.h
src/mesa/shader/nvvertparse.c
src/mesa/shader/nvvertprog.h
src/mesa/tnl/t_vp_build.c

index d4f6c1f0d571888f7377eb191aa8fa83342434d1..6c036da8743c8ea18a9be3f8bdeeed2e9f6281f3 100644 (file)
@@ -1738,7 +1738,8 @@ enum register_file
    PROGRAM_NAMED_PARAM,
    PROGRAM_STATE_VAR,
    PROGRAM_WRITE_ONLY,
-   PROGRAM_ADDRESS
+   PROGRAM_ADDRESS,
+   PROGRAM_UNDEFINED   /* invalid value */
 };
 
 
index c6fb72d931e8fcb87af718f1a1bdd455afdbc423..33bc2004acd42303d96383192fb6c1eee159e500 100644 (file)
@@ -1142,10 +1142,10 @@ Parse_InstructionSequence(struct parse_state *parseState,
       struct vp_instruction *inst = program + parseState->numInst;
 
       /* Initialize the instruction */
-      inst->SrcReg[0].File = (enum register_file) -1;
-      inst->SrcReg[1].File = (enum register_file) -1;
-      inst->SrcReg[2].File = (enum register_file) -1;
-      inst->DstReg.File = (enum register_file) -1;
+      inst->SrcReg[0].File = PROGRAM_UNDEFINED;
+      inst->SrcReg[1].File = PROGRAM_UNDEFINED;
+      inst->SrcReg[2].File = PROGRAM_UNDEFINED;
+      inst->DstReg.File = PROGRAM_UNDEFINED;
       inst->Data = NULL;
 
       if (Parse_String(parseState, "MOV")) {
index 17646e3600bf62c483f6faa961a0116bbd4a0548..b8dbe363134adc6ff3dff8e954e426d58968a935 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.3
+ * Version:  6.3.1
  *
- * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2005  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"),
@@ -76,19 +76,19 @@ enum vp_opcode
 /* Instruction source register */
 struct vp_src_register
 {
-   GLuint File:4;
-   GLuint Index:8;
+   GLuint File:4;              /* one of the PROGRAM_* register file values */
+   GLint Index:9;              /* may be negative for relative addressing */
    GLuint Swizzle:12;
    GLuint Negate:4;            /* ARB requires component-wise negation. */
    GLuint RelAddr:1;
-   GLuint pad:3;
+   GLuint pad:2;
 };
 
 
 /* Instruction destination register */
 struct vp_dst_register
 {
-   GLuint File:4;
+   GLuint File:4;              /* one of the PROGRAM_* register file values */
    GLuint Index:8;
    GLuint WriteMask:4;
    GLuint pad:16;
index 11fdc454cd38444d5c9433e8097389fdb006057f..fc9fb15bd584fbb258f34b092aea79ab52aa465b 100644 (file)
@@ -247,7 +247,7 @@ static struct state_key *make_state_key( GLcontext *ctx )
  */
 struct ureg {
    GLuint file:4;
-   GLuint idx:8;
+   GLint idx:8;      /* relative addressing may be negative */
    GLuint negate:1;
    GLuint swz:12;
    GLuint pad:7;