more GL_ARB_draw_buffers updates from Michale Krol
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 6 Oct 2004 15:56:38 +0000 (15:56 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 6 Oct 2004 15:56:38 +0000 (15:56 +0000)
src/mesa/shader/arbprogram.syn
src/mesa/shader/arbprogram_syn.h

index a4e3a20222ed6197785cc268882dc2be9534bb4b..75db7a7942a105d221f6fd78121a89d8cd8355b2 100644 (file)
 /* GL_ARB_fragment_program_shadow option flags */
 .emtcode ARB_FRAGMENT_PROGRAM_SHADOW                0x40
 
+/* GL_ARB_draw_buffers option flags */
+.emtcode ARB_DRAW_BUFFERS                           0x80
+
+/* if we need more flags, we have three options:
+   1) change the existing flags to indicate an option to a shift, so 0x01 becomes 0 (because
+      1 << 0 is 0x01), 0x02 becomes 1 (1 << 1 == 0x02), and so on - this would give us
+      256 flags,
+   2) mark special value of 0 to say "the following byte will hold the upper 8 bit flags",
+   3) expand all the existing flags to be 2 bytes long
+*/
+
 /* GL_ARB_fragment_program instruction class */
 .emtcode OP_ALU_INST                                0x00
 .emtcode OP_TEX_INST                                0x01
 /* GL_ARB_fragment_program_shadow */
 .regbyte fragment_program_shadow                    0x00
 
+/* GL_ARB_draw_buffers */
+.regbyte draw_buffers                               0x00
+
 /* option presence condition registers */
 /* they are all initially set to zero - when a particular OPTION is encountered, the appropriate */
 /* register is set to 1 to indicate that the OPTION was specified. */
 /* GL_ARB_fragment_program_shadow */
 .regbyte ARB_fragment_program_shadow                0x00
 
+/* GL_ARB_draw_buffers */
+.regbyte ARB_draw_buffers                           0x00
+
 /* program target condition register */
 /* this syntax script deals with two program targets - VERTEX_PROGRAM and FRAGMENT_PROGRAM. */
 /* to distinguish between them we need a register that will store for us the current target. */
@@ -482,7 +499,9 @@ fp_optionString
     fp_ARB_fog_exp2 .emit ARB_FOG_EXP2 .load ARB_fog_exp2 0x01 .or
     fp_ARB_fog_linear .emit ARB_FOG_LINEAR .load ARB_fog_linear 0x01 .or
     .if (fragment_program_shadow != 0x00) "ARB_fragment_program_shadow"
-        .emit ARB_FRAGMENT_PROGRAM_SHADOW .load ARB_fragment_program_shadow 0x01;
+        .emit ARB_FRAGMENT_PROGRAM_SHADOW .load ARB_fragment_program_shadow 0x01 .or
+    .if (draw_buffers != 0x00) "ARB_draw_buffers" .emit ARB_DRAW_BUFFERS
+        .load ARB_draw_buffers 0x01;
 vp_optionString
     "ARB_position_invariant" .emit ARB_POSITION_INVARIANT .load ARB_position_invariant 0x01;
 fp_ARB_fog_exp
@@ -1952,7 +1971,7 @@ stateClipPlaneNum
 
 /*
 vertex program
-    <statePointItem>       ::= "point" . <statePointProperty>
+    <statePointItem>       ::= "point" "." <statePointProperty>
 */
 statePointItem
     "point" .and dot .and statePointProperty .error INVALID_POINT_PROPERTY;
@@ -1992,7 +2011,7 @@ optMatrixRows_1
     stateMatrixRowNum .and dotdot .and stateMatrixRowNum .and rbracket;
 
 /*
-    <stateMatrixItem>      ::= "matrix" . <stateMatrixName> 
+    <stateMatrixItem>      ::= "matrix" "." <stateMatrixName> 
                                <stateOptMatModifier>
 */
 stateMatrixItem
@@ -2063,23 +2082,6 @@ stateOptModMatNum_1
 stateModMatNum
     integer;
 
-/*
-    From ARB_draw_buffers:
-    <optOutputColorNum>    ::= ""
-                             | "[" <OutputColorNum> "]"
-*/
-optOutputColorNum
-    optOutputColorNum_1 .or .true .emit 0x00;
-optOutputColorNum_1
-    lbracket_ne .and outputColorNum .and rbracket;
-
-/*
-    From ARB_draw_buffers:
-    <outputColorNum>       ::= <integer> from 0 to MAX_DRAW_BUFFERS_ARB-1
-*/ 
-outputColorNum
-    integer;
-
 /*
     <optTexCoordNum>       ::= ""
                              | "[" <texCoordNum> "]"
@@ -2322,9 +2324,9 @@ vp_OUTPUT_statement
     vp_resultBinding .error RESULT_EXPECTED;
 
 /*
-      From ARB_draw_buffers:
 fragment program
-    <resultBinding>        ::= "result" "." "color" <optOutputColorNum>
+    <resultBinding>        ::= "result" "." "color"
+                             | "result" "." "color" <optOutputColorNum> (if option ARB_draw_buffers present)
                              | "result" "." "depth"
 
 vertex program
@@ -2352,6 +2354,23 @@ vp_resultBinding_1
 vp_resultBinding_2
     "texcoord" .and optTexCoordNum;
 
+/*
+GL_ARB_draw_buffers
+    <optOutputColorNum>    ::= ""
+                             | "[" <outputColorNum> "]"
+*/
+optOutputColorNum
+    .if (ARB_draw_buffers != 0x00) optOutputColorNum_1 .or .true .emit 0x00;
+optOutputColorNum_1
+    lbracket_ne .and outputColorNum .and rbracket;
+
+/*
+GL_ARB_draw_buffers
+    <outputColorNum>       ::= <integer> from 0 to MAX_DRAW_BUFFERS_ARB-1
+*/
+outputColorNum
+    integer;
+
 /*
 vertex program
     <resultColBinding>     ::= "color" <optFaceType> <optColorType>
index f7bc69e993967c105d571fe1a862895240de186c..6bcf3989ef01a3ef69d4bcf312c9699752c82d46 100644 (file)
@@ -1,34 +1,3 @@
-/*
- * 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.
- */
-
-/**
- * \file arbprogram_syn.h
- * ARB_fragment_program/ARB_vertex_program syntax
- * \author Michal Krol
- */
-
-
 ".syntax program;\n"
 ".emtcode REVISION 0x08\n"
 ".emtcode FRAGMENT_PROGRAM 0x01\n"
@@ -44,6 +13,7 @@
 ".emtcode ARB_FOG_LINEAR 0x10\n"
 ".emtcode ARB_POSITION_INVARIANT 0x20\n"
 ".emtcode ARB_FRAGMENT_PROGRAM_SHADOW 0x40\n"
+".emtcode ARB_DRAW_BUFFERS 0x80\n"
 ".emtcode OP_ALU_INST 0x00\n"
 ".emtcode OP_TEX_INST 0x01\n"
 ".emtcode OP_ALU_VECTOR 0x00\n"
 ".regbyte fog_coord 0x00\n"
 ".regbyte texture_rectangle 0x00\n"
 ".regbyte fragment_program_shadow 0x00\n"
+".regbyte draw_buffers 0x00\n"
 ".regbyte ARB_precision_hint_fastest 0x00\n"
 ".regbyte ARB_precision_hint_nicest 0x00\n"
 ".regbyte ARB_fog_exp 0x00\n"
 ".regbyte ARB_fog_linear 0x00\n"
 ".regbyte ARB_position_invariant 0x00\n"
 ".regbyte ARB_fragment_program_shadow 0x00\n"
+".regbyte ARB_draw_buffers 0x00\n"
 ".regbyte program_target 0x00\n"
 "program\n"
 " programs .error UNKNOWN_PROGRAM_SIGNATURE .emit REVISION;\n"
 " fp_ARB_fog_exp2 .emit ARB_FOG_EXP2 .load ARB_fog_exp2 0x01 .or\n"
 " fp_ARB_fog_linear .emit ARB_FOG_LINEAR .load ARB_fog_linear 0x01 .or\n"
 " .if (fragment_program_shadow != 0x00) \"ARB_fragment_program_shadow\"\n"
-" .emit ARB_FRAGMENT_PROGRAM_SHADOW .load ARB_fragment_program_shadow 0x01;\n"
+" .emit ARB_FRAGMENT_PROGRAM_SHADOW .load ARB_fragment_program_shadow 0x01 .or\n"
+" .if (draw_buffers != 0x00) \"ARB_draw_buffers\" .emit ARB_DRAW_BUFFERS\n"
+" .load ARB_draw_buffers 0x01;\n"
 "vp_optionString\n"
 " \"ARB_position_invariant\" .emit ARB_POSITION_INVARIANT .load ARB_position_invariant 0x01;\n"
 "fp_ARB_fog_exp\n"
 " lbracket_ne .and stateModMatNum .and rbracket;\n"
 "stateModMatNum\n"
 " integer;\n"
-"optOutputColorNum\n"
-" optOutputColorNum_1 .or .true .emit 0x00;\n"
-"optOutputColorNum_1\n"
-" lbracket_ne .and outputColorNum .and rbracket;\n"
-" \n"
-"outputColorNum\n"
-" integer;\n"
 "optTexCoordNum\n"
 " optTexCoordNum_1 .or .true .emit 0x00;\n"
 "optTexCoordNum_1\n"
 " vp_resultBinding_2 .emit VERTEX_RESULT_TEXCOORD;\n"
 "vp_resultBinding_2\n"
 " \"texcoord\" .and optTexCoordNum;\n"
+"optOutputColorNum\n"
+" .if (ARB_draw_buffers != 0x00) optOutputColorNum_1 .or .true .emit 0x00;\n"
+"optOutputColorNum_1\n"
+" lbracket_ne .and outputColorNum .and rbracket;\n"
+"outputColorNum\n"
+" integer;\n"
 "resultColBinding\n"
 " \"color\" .and optFaceType .and optColorType;\n"
 "optFaceType\n"
 " '0'-'9';\n"
 "e_charordigit\n"
 " 'A'-'Z' .or 'a'-'z' .or '0'-'9';\n"
-""
-
+""
\ No newline at end of file