Add nv20_state.c ; hook nv10_state.c into the build ; do the renaming
authorStephane Marchesin <marchesin@icps.u-strasbg.fr>
Sat, 18 Nov 2006 00:19:22 +0000 (00:19 +0000)
committerStephane Marchesin <marchesin@icps.u-strasbg.fr>
Sat, 18 Nov 2006 00:19:22 +0000 (00:19 +0000)
    required by the renouveau changes.

src/mesa/drivers/dri/nouveau/Makefile
src/mesa/drivers/dri/nouveau/nouveau_reg.h
src/mesa/drivers/dri/nouveau/nv10_state.c
src/mesa/drivers/dri/nouveau/nv20_state.c [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nv30_state.c

index ed700a7085a98eb0a73679617366b87653886107..2db6f8989d101c8b02beef41f7bd68842cc809a4 100644 (file)
@@ -20,6 +20,8 @@ DRIVER_SOURCES = \
        nouveau_tex.c            \
        nouveau_swtcl.c          \
        nv10_swtcl.c             \
+       nv10_state.c             \
+       nv20_state.c             \
        nv30_state.c
 
 C_SOURCES = \
index c5052d7c4b9fe792c45d31f16aaa2a38f04013ad..389c541e1c530ef60af9c15fa0b56155a0b5bc15 100644 (file)
@@ -43,7 +43,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 **************************************************************************
 
-   Created from objects.c rev. 1.332
+   Created from objects.c rev. 1.337
 */
 
 #ifndef _NOUVEAU_REG_H
@@ -239,7 +239,7 @@ Object NV04_SCALED_IMAGE_FROM_MEMORY used on: NV04
 #      define          NV04_SCALED_IMAGE_FROM_MEMORY_DU_DX                     0x00000318      /* Parameters: int frac*0x100000 */
 #      define          NV04_SCALED_IMAGE_FROM_MEMORY_DV_DY                     0x0000031c      /* Parameters: int frac*0x100000 */
 #      define          NV04_SCALED_IMAGE_FROM_MEMORY_SIZE                      0x00000400      /* Parameters: width height */
-#      define          NV04_SCALED_IMAGE_FROM_MEMORY_FORMAT                    0x00000404      /* Parameters: pitch */
+#      define          NV04_SCALED_IMAGE_FROM_MEMORY_FORMAT                    0x00000404      /* Parameters: pitch origin filter */
 #      define          NV04_SCALED_IMAGE_FROM_MEMORY_OFFSET                    0x00000408
 #      define          NV04_SCALED_IMAGE_FROM_MEMORY_POINT                     0x0000040c      /* Parameters: u_int u_frac*0x10 v_int v_frac*0x10 */
 
@@ -328,7 +328,7 @@ Object NV10_TCL_PRIMITIVE_3D used on: NV10
 #      define          NV10_TCL_PRIMITIVE_3D_FOG_COLOR                         0x000002a8      /* Parameters: a b g r */
 #      define          NV10_TCL_PRIMITIVE_3D_VIEWPORT_CLIP_HORIZ(d)            (0x000002c0 + d * 0x0004)       /* Parameters: x2 x1 */
 #      define          NV10_TCL_PRIMITIVE_3D_VIEWPORT_CLIP_VERT(d)             (0x000002e0 + d * 0x0004)       /* Parameters: y2 y1 */
-#      define          NV10_TCL_PRIMITIVE_3D_ALPHA_TEST_ENABLE                 0x00000300
+#      define          NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE                 0x00000300
 #      define          NV10_TCL_PRIMITIVE_3D_BLEND_ENABLE                      0x00000304
 #      define          NV10_TCL_PRIMITIVE_3D_CULL_FACE_ENABLE                  0x00000308
 #      define          NV10_TCL_PRIMITIVE_3D_DEPTH_TEST_ENABLE                 0x0000030c
@@ -339,11 +339,11 @@ Object NV10_TCL_PRIMITIVE_3D used on: NV10
 #      define          NV10_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE                0x00000320
 #      define          NV10_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE             0x00000324
 #      define          NV10_TCL_PRIMITIVE_3D_VERTEX_WEIGHT_ENABLE              0x00000328
-#      define          NV10_TCL_PRIMITIVE_3D_STENCIL_TEST_ENABLE               0x0000032c
+#      define          NV10_TCL_PRIMITIVE_3D_STENCIL_ENABLE                    0x0000032c
 #      define          NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_POINT_ENABLE       0x00000330
 #      define          NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_LINE_ENABLE        0x00000334
 #      define          NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_FILL_ENABLE        0x00000338
-#      define          NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC                        0x0000033c
+#      define          NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC                   0x0000033c
 #      define          NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_REF                    0x00000340
 #      define          NV10_TCL_PRIMITIVE_3D_BLEND_FUNC_SRC                    0x00000344
 #      define          NV10_TCL_PRIMITIVE_3D_BLEND_FUNC_DST                    0x00000348
@@ -351,7 +351,7 @@ Object NV10_TCL_PRIMITIVE_3D used on: NV10
 #      define          NV10_TCL_PRIMITIVE_3D_BLEND_EQUATION                    0x00000350
 #      define          NV10_TCL_PRIMITIVE_3D_DEPTH_FUNC                        0x00000354
 #      define          NV10_TCL_PRIMITIVE_3D_COLOR_MASK                        0x00000358      /* Parameters: r g b */
-#      define          NV10_TCL_PRIMITIVE_3D_DEPTH_MASK                        0x0000035c
+#      define          NV10_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE                0x0000035c
 #      define          NV10_TCL_PRIMITIVE_3D_STENCIL_MASK                      0x00000360
 #      define          NV10_TCL_PRIMITIVE_3D_STENCIL_FUNC_FUNC                 0x00000364
 #      define          NV10_TCL_PRIMITIVE_3D_STENCIL_FUNC_REF                  0x00000368
@@ -534,7 +534,7 @@ Object NV15_TCL_PRIMITIVE_3D used on: NV15
 #      define          NV17_TCL_PRIMITIVE_3D_COLOR_MASK_ENABLE                 0x000002bc
 #      define          NV10_TCL_PRIMITIVE_3D_VIEWPORT_CLIP_HORIZ(d)            (0x000002c0 + d * 0x0004)       /* Parameters: x2 x1 */
 #      define          NV10_TCL_PRIMITIVE_3D_VIEWPORT_CLIP_VERT(d)             (0x000002e0 + d * 0x0004)       /* Parameters: y2 y1 */
-#      define          NV10_TCL_PRIMITIVE_3D_ALPHA_TEST_ENABLE                 0x00000300
+#      define          NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE                 0x00000300
 #      define          NV10_TCL_PRIMITIVE_3D_BLEND_ENABLE                      0x00000304
 #      define          NV10_TCL_PRIMITIVE_3D_CULL_FACE_ENABLE                  0x00000308
 #      define          NV10_TCL_PRIMITIVE_3D_DEPTH_TEST_ENABLE                 0x0000030c
@@ -545,11 +545,11 @@ Object NV15_TCL_PRIMITIVE_3D used on: NV15
 #      define          NV10_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE                0x00000320
 #      define          NV10_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE             0x00000324
 #      define          NV10_TCL_PRIMITIVE_3D_VERTEX_WEIGHT_ENABLE              0x00000328
-#      define          NV10_TCL_PRIMITIVE_3D_STENCIL_TEST_ENABLE               0x0000032c
+#      define          NV10_TCL_PRIMITIVE_3D_STENCIL_ENABLE                    0x0000032c
 #      define          NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_POINT_ENABLE       0x00000330
 #      define          NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_LINE_ENABLE        0x00000334
 #      define          NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_FILL_ENABLE        0x00000338
-#      define          NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC                        0x0000033c
+#      define          NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC                   0x0000033c
 #      define          NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_REF                    0x00000340
 #      define          NV10_TCL_PRIMITIVE_3D_BLEND_FUNC_SRC                    0x00000344
 #      define          NV10_TCL_PRIMITIVE_3D_BLEND_FUNC_DST                    0x00000348
@@ -557,7 +557,7 @@ Object NV15_TCL_PRIMITIVE_3D used on: NV15
 #      define          NV10_TCL_PRIMITIVE_3D_BLEND_EQUATION                    0x00000350
 #      define          NV10_TCL_PRIMITIVE_3D_DEPTH_FUNC                        0x00000354
 #      define          NV10_TCL_PRIMITIVE_3D_COLOR_MASK                        0x00000358      /* Parameters: r g b */
-#      define          NV10_TCL_PRIMITIVE_3D_DEPTH_MASK                        0x0000035c
+#      define          NV10_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE                0x0000035c
 #      define          NV10_TCL_PRIMITIVE_3D_STENCIL_MASK                      0x00000360
 #      define          NV10_TCL_PRIMITIVE_3D_STENCIL_FUNC_FUNC                 0x00000364
 #      define          NV10_TCL_PRIMITIVE_3D_STENCIL_FUNC_REF                  0x00000368
@@ -797,17 +797,17 @@ Object NV10_CONTEXT_SURFACES_2D used on: NV10 NV15 NV20 NV30 NV40 G70
 #      define          NV10_CONTEXT_SURFACES_2D_OFFSET_DST                     0x0000030c
 
 /****************************************** 
-Object NV04_SURFACE used on: NV04 NV10 NV15 
+Object NV04_CONTEXT_SURFACES_2D used on: NV04 NV10 NV15 
 */
-#define                        NV04_SURFACE                                            0x00000042
-#      define          NV04_SURFACE_NOTIFY                                     0x00000104
-#      define          NV04_SURFACE_DMA_NOTIFY                                 0x00000180
-#      define          NV04_SURFACE_DMA_IMAGE_SOURCE                           0x00000184
-#      define          NV04_SURFACE_DMA_IMAGE_DESTIN                           0x00000188
-#      define          NV04_SURFACE_FORMAT                                     0x00000300
-#      define          NV04_SURFACE_PITCH                                      0x00000304      /* Parameters: source destin */
-#      define          NV04_SURFACE_OFFSET_SOURCE                              0x00000308
-#      define          NV04_SURFACE_OFFSET_DESTIN                              0x0000030c
+#define                        NV04_CONTEXT_SURFACES_2D                                0x00000042
+#      define          NV04_CONTEXT_SURFACES_2D_NOTIFY                         0x00000104
+#      define          NV04_CONTEXT_SURFACES_2D_SET_DMA_NOTIFY                 0x00000180
+#      define          NV04_CONTEXT_SURFACES_2D_SET_DMA_IMAGE_SRC              0x00000184
+#      define          NV04_CONTEXT_SURFACES_2D_SET_DMA_IMAGE_DST              0x00000188
+#      define          NV04_CONTEXT_SURFACES_2D_FORMAT                         0x00000300
+#      define          NV04_CONTEXT_SURFACES_2D_PITCH                          0x00000304      /* Parameters: src dst */
+#      define          NV04_CONTEXT_SURFACES_2D_OFFSET_SRC                     0x00000308
+#      define          NV04_CONTEXT_SURFACES_2D_OFFSET_DST                     0x0000030c
 
 /****************************************** 
 Object NV04_IMAGE_PATTERN used on: NV04 NV10 NV15 NV20 NV30 NV40 G70
@@ -858,16 +858,18 @@ Object NV20_TCL_PRIMITIVE_3D used on: NV20
 #      define          NV20_TCL_PRIMITIVE_3D_COLOR_MATERIAL_CONTROL            0x00000298      /* Parameters: back_specular back_ambient back_diffuse back_emission front_specular front_ambient front_diffuse front_emission */
 #      define          NV20_TCL_PRIMITIVE_3D_FOG_MODE                          0x0000029c
 #      define          NV20_TCL_PRIMITIVE_3D_FOG_COORD_DIST                    0x000002a0
-#      define          NV20_TCL_PRIMITIVE_3D_ALPHA_TEST_ENABLE                 0x00000300
-#      define          NV20_TCL_PRIMITIVE_3D_BLEND_ENABLE                      0x00000304
+#      define          NV20_TCL_PRIMITIVE_3D_FOG_ENABLE                        0x000002a4
+#      define          NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE                 0x00000300
+#      define          NV20_TCL_PRIMITIVE_3D_BLEND_FUNC_ENABLE                 0x00000304
 #      define          NV20_TCL_PRIMITIVE_3D_CULL_FACE_ENABLE                  0x00000308
 #      define          NV20_TCL_PRIMITIVE_3D_DEPTH_TEST_ENABLE                 0x0000030c
 #      define          NV20_TCL_PRIMITIVE_3D_DITHER_ENABLE                     0x00000310
 #      define          NV20_TCL_PRIMITIVE_3D_LIGHTING_ENABLE                   0x00000314
+#      define          NV20_TCL_PRIMITIVE_3D_POINT_SMOOTH_ENABLE               0x0000031c
 #      define          NV20_TCL_PRIMITIVE_3D_POINT_PARAMETERS_ENABLE           0x00000318
 #      define          NV20_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE                0x00000320
 #      define          NV20_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE             0x00000324
-#      define          NV20_TCL_PRIMITIVE_3D_STENCIL_TEST_ENABLE               0x0000032c
+#      define          NV20_TCL_PRIMITIVE_3D_STENCIL_ENABLE                    0x0000032c
 #      define          NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_POINT_ENABLE       0x00000330
 #      define          NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_LINE_ENABLE        0x00000334
 #      define          NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_FILL_ENABLE        0x00000338
@@ -879,7 +881,7 @@ Object NV20_TCL_PRIMITIVE_3D used on: NV20
 #      define          NV20_TCL_PRIMITIVE_3D_BLEND_EQUATION                    0x00000350
 #      define          NV20_TCL_PRIMITIVE_3D_DEPTH_FUNC                        0x00000354
 #      define          NV20_TCL_PRIMITIVE_3D_COLOR_MASK                        0x00000358      /* Parameters: a r g b */
-#      define          NV20_TCL_PRIMITIVE_3D_DEPTH_MASK                        0x0000035c
+#      define          NV20_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE                0x0000035c
 #      define          NV20_TCL_PRIMITIVE_3D_STENCIL_MASK                      0x00000360
 #      define          NV20_TCL_PRIMITIVE_3D_STENCIL_FUNC_FUNC                 0x00000364
 #      define          NV20_TCL_PRIMITIVE_3D_STENCIL_FUNC_REF                  0x00000368
@@ -1081,11 +1083,12 @@ Object NV20_TCL_PRIMITIVE_3D used on: NV20
 #      define          NV20_TCL_PRIMITIVE_3D_LIGHT_MODEL_BACK_SIDE_PRODUCT_AMBIENT_PLUS_EMISSION       0x000017a0
 #      define          NV20_TCL_PRIMITIVE_3D_COLOR_MATERIAL_BACK               0x000017b0
 #      define          NV20_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE             0x000017bc
-#      define          NV20_TCL_PRIMITIVE_3D_LOGIC_OP                          0x000017c0
+#      define          NV20_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_OP                 0x000017c0
 #      define          NV20_TCL_PRIMITIVE_3D_LIGHT_MODEL_TWO_SIDE_ENABLE       0x000017c4
 #      define          NV20_TCL_PRIMITIVE_3D_BEGIN_END                         0x000017fc
-#      define          NV20_TCL_PRIMITIVE_3D_CLEAR_COLOR                       0x00001d90
-#      define          NV20_TCL_PRIMITIVE_3D_CLEAR_MASK                        0x00001d94      /* Parameters: clear color a clear color b clear color g clear color r clear depth clear stencil */
+#      define          NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_DEPTH                 0x00001d8c
+#      define          NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_ARGB                  0x00001d90
+#      define          NV20_TCL_PRIMITIVE_3D_CLEAR_WHICH_BUFFERS               0x00001d94      /* Parameters: clear color a clear color b clear color g clear color r clear depth clear stencil */
 #      define          NV20_TCL_PRIMITIVE_3D_INDEX_DATA                        0x00001800      /* Parameters: index1 index0 */
 #      define          NV20_TCL_PRIMITIVE_3D_VB_VERTEX_BATCH                   0x00001810      /* Parameters: count_vertices offset_vertices */
 #      define          NV20_TCL_PRIMITIVE_3D_VERTEX_DATA                       0x00001818
@@ -1330,8 +1333,8 @@ Object NV30_TCL_PRIMITIVE_3D used on: NV30 NV40 G70
 #      define          NV30_TCL_PRIMITIVE_3D_TX_DEPTH_UNIT(d)                  (0x00001840 + d * 0x0004)       /* Parameters: depth NPOT pitch */
 #      define          NV30_TCL_PRIMITIVE_3D_VB_VERTEX_BATCH                   0x00001814      /* Parameters: count_vertices offset_vertices */
 #      define          NV30_TCL_PRIMITIVE_3D_VERTEX_DATA                       0x00001818
-#      define          NV30_TCL_PRIMITIVE_3D_LOGIC_OP_ENABLE                   0x00000374
-#      define          NV30_TCL_PRIMITIVE_3D_LOGIC_OP_OP                       0x00000378
+#      define          NV30_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE             0x00000374
+#      define          NV30_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_OP                 0x00000378
 #      define          NV30_TCL_PRIMITIVE_3D_SET_DISPLAY_LIST_MEM_OFFSET       0x0000181c
 #      define          NV30_TCL_PRIMITIVE_3D_EXECUTE_DISPLAY_LIST              0x00001824      /* Parameters: length start offset */
 #      define          NV30_TCL_PRIMITIVE_3D_POLYGON_MODE_FRONT                0x00001828
index e752905841c09e87eb59f88d0934c70521928852..a8592acc84e3f22a86ac7509a6a60553ecdd0f60 100644 (file)
@@ -40,8 +40,8 @@ void nv10AlphaFunc(GLcontext *ctx, GLenum func, GLfloat ref)
        GLubyte ubRef;
        CLAMPED_FLOAT_TO_UBYTE(ubRef, ref);
 
-       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC, 2);
-       OUT_RING(func);     /* NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC */
+       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC, 2);
+       OUT_RING(func);     /* NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC */
        OUT_RING(ubRef);    /* NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_REF  */
 }
 
@@ -157,7 +157,7 @@ void nv10DepthFunc(GLcontext *ctx, GLenum func)
 void nv10DepthMask(GLcontext *ctx, GLboolean flag)
 {
        nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
-       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_DEPTH_MASK, 1);
+       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE, 1);
        OUT_RING(flag);
 }
 
@@ -180,7 +180,7 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)
        switch(cap)
        {
                case GL_ALPHA_TEST:
-                       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_ALPHA_TEST_ENABLE, 1);
+                       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE, 1);
                        OUT_RING(state);
                        break;
 //             case GL_AUTO_NORMAL:
@@ -198,7 +198,7 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)
                        OUT_RING(state);
                        break;
                case GL_COLOR_LOGIC_OP:
-                       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_LOGIC_OP_ENABLE, 1);
+                       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE, 1);
                        OUT_RING(state);
                        break;
 //             case GL_COLOR_MATERIAL:
@@ -250,7 +250,10 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)
                        else
                                OUT_RING(0x0);
                        break;
-//             case GL_LINE_SMOOTH:
+               case GL_LINE_SMOOTH:
+                       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
 //             case GL_LINE_STIPPLE:
 //             case GL_MAP1_COLOR_4:
 //             case GL_MAP1_INDEX:
@@ -292,10 +295,6 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)
                        BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE, 1);
                        OUT_RING(state);
                        break;
-               case GL_LINE_SMOOTH:
-                       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE, 1);
-                       OUT_RING(state);
-                       break;
                case GL_POINT_SMOOTH:
                        BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_POINT_SMOOTH_ENABLE, 1);
                        OUT_RING(state);
@@ -307,7 +306,7 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)
 //             case GL_SCISSOR_TEST:
 //             case GL_SEPARABLE_2D:
                case GL_STENCIL_TEST:
-                       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_STENCIL_TEST_ENABLE, 1);
+                       BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_STENCIL_ENABLE, 1);
                        OUT_RING(state);
                        break;
 //             case GL_TEXTURE_GEN_Q:
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state.c b/src/mesa/drivers/dri/nouveau/nv20_state.c
new file mode 100644 (file)
index 0000000..88b8d6d
--- /dev/null
@@ -0,0 +1,575 @@
+/**************************************************************************
+
+Copyright 2006 Nouveau
+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
+on the rights to use, copy, modify, merge, publish, distribute, sub
+license, 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 (including the next
+paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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.
+
+**************************************************************************/
+
+#include "nouveau_context.h"
+#include "nouveau_object.h"
+#include "nouveau_fifo.h"
+#include "nouveau_reg.h"
+
+#include "tnl/t_pipeline.h"
+
+#include "mtypes.h"
+#include "colormac.h"
+
+static void nv20AlphaFunc(GLcontext *ctx, GLenum func, GLfloat ref)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       GLubyte ubRef;
+       CLAMPED_FLOAT_TO_UBYTE(ubRef, ref);
+
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC, 2);
+       OUT_RING(func);     /* NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC */
+       OUT_RING(ubRef);    /* NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_REF  */
+}
+
+static void nv20BlendColor(GLcontext *ctx, const GLfloat color[4])
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); 
+       GLubyte cf[4];
+
+       CLAMPED_FLOAT_TO_UBYTE(cf[0], color[0]);
+       CLAMPED_FLOAT_TO_UBYTE(cf[1], color[1]);
+       CLAMPED_FLOAT_TO_UBYTE(cf[2], color[2]);
+       CLAMPED_FLOAT_TO_UBYTE(cf[3], color[3]);
+
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_BLEND_COLOR, 1);
+       OUT_RING(PACK_COLOR_8888(cf[3], cf[1], cf[2], cf[0]));
+}
+
+static void nv20BlendEquationSeparate(GLcontext *ctx, GLenum modeRGB, GLenum modeA)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_BLEND_EQUATION, 1);
+       OUT_RING((modeA<<16) | modeRGB);
+}
+
+
+static void nv20BlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB, GLenum dfactorRGB,
+               GLenum sfactorA, GLenum dfactorA)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_BLEND_FUNC_SRC, 2);
+       OUT_RING((sfactorA<<16) | sfactorRGB);
+       OUT_RING((dfactorA<<16) | dfactorRGB);
+}
+
+static void nv20ClearColor(GLcontext *ctx, const GLfloat color[4])
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       GLubyte c[4];
+       UNCLAMPED_FLOAT_TO_RGBA_CHAN(c,color);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_ARGB, 1);
+       OUT_RING(PACK_COLOR_8888(c[3],c[0],c[1],c[2]));
+}
+
+static void nv20ClearDepth(GLcontext *ctx, GLclampd d)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       nmesa->clear_value=((nmesa->clear_value&0x000000FF)|(((uint32_t)(d*0xFFFFFF))<<8));
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_DEPTH, 1);
+       OUT_RING(nmesa->clear_value);
+}
+
+/* we're don't support indexed buffers
+   void (*ClearIndex)(GLcontext *ctx, GLuint index)
+ */
+
+static void nv20ClearStencil(GLcontext *ctx, GLint s)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       nmesa->clear_value=((nmesa->clear_value&0xFFFFFF00)|(s&0x000000FF));
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_DEPTH, 1);
+       OUT_RING(nmesa->clear_value);
+}
+
+static void nv20ClipPlane(GLcontext *ctx, GLenum plane, const GLfloat *equation)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLIP_PLANE_A(plane), 4);
+       OUT_RINGf(equation[0]);
+       OUT_RINGf(equation[1]);
+       OUT_RINGf(equation[2]);
+       OUT_RINGf(equation[3]);
+}
+
+static void nv20ColorMask(GLcontext *ctx, GLboolean rmask, GLboolean gmask,
+               GLboolean bmask, GLboolean amask )
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_COLOR_MASK, 1);
+       OUT_RING(((amask && 0x01) << 24) | ((rmask && 0x01) << 16) | ((gmask && 0x01)<< 8) | ((bmask && 0x01) << 0));
+}
+
+static void nv20ColorMaterial(GLcontext *ctx, GLenum face, GLenum mode)
+{
+       // TODO I need love
+}
+
+static void nv20CullFace(GLcontext *ctx, GLenum mode)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CULL_FACE, 1);
+       OUT_RING(mode);
+}
+
+static void nv20FrontFace(GLcontext *ctx, GLenum mode)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_FRONT_FACE, 1);
+       OUT_RING(mode);
+}
+
+static void nv20DepthFunc(GLcontext *ctx, GLenum func)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DEPTH_FUNC, 1);
+       OUT_RING(func);
+}
+
+static void nv20DepthMask(GLcontext *ctx, GLboolean flag)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE, 1);
+       OUT_RING(flag);
+}
+
+static void nv20DepthRange(GLcontext *ctx, GLclampd nearval, GLclampd farval)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DEPTH_RANGE_NEAR, 2);
+       OUT_RINGf(nearval);
+       OUT_RINGf(farval);
+}
+
+/** Specify the current buffer for writing */
+//void (*DrawBuffer)( GLcontext *ctx, GLenum buffer );
+/** Specify the buffers for writing for fragment programs*/
+//void (*DrawBuffers)( GLcontext *ctx, GLsizei n, const GLenum *buffers );
+
+static void nv20Enable(GLcontext *ctx, GLenum cap, GLboolean state)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       switch(cap)
+       {
+               case GL_ALPHA_TEST:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+//             case GL_AUTO_NORMAL:
+               case GL_BLEND:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_BLEND_FUNC_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+               case GL_CLIP_PLANE0:
+               case GL_CLIP_PLANE1:
+               case GL_CLIP_PLANE2:
+               case GL_CLIP_PLANE3:
+               case GL_CLIP_PLANE4:
+               case GL_CLIP_PLANE5:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLIP_PLANE_ENABLE(cap-GL_CLIP_PLANE0), 1);
+                       OUT_RING(state);
+                       break;
+               case GL_COLOR_LOGIC_OP:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+//             case GL_COLOR_MATERIAL:
+//             case GL_COLOR_SUM_EXT:
+//             case GL_COLOR_TABLE:
+//             case GL_CONVOLUTION_1D:
+//             case GL_CONVOLUTION_2D:
+               case GL_CULL_FACE:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CULL_FACE_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+               case GL_DEPTH_TEST:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DEPTH_TEST_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+               case GL_DITHER:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DITHER_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+               case GL_FOG:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_FOG_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+//             case GL_HISTOGRAM:
+//             case GL_INDEX_LOGIC_OP:
+               case GL_LIGHT0:
+               case GL_LIGHT1:
+               case GL_LIGHT2:
+               case GL_LIGHT3:
+               case GL_LIGHT4:
+               case GL_LIGHT5:
+               case GL_LIGHT6:
+               case GL_LIGHT7:
+                       {
+                       uint32_t mask=0x11<<(2*(cap-GL_LIGHT0));
+                       nmesa->enabled_lights=((nmesa->enabled_lights&mask)|(mask*state));
+                       if (nmesa->lighting_enabled)
+                       {
+                               BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_ENABLED_LIGHTS, 1);
+                               OUT_RING(nmesa->enabled_lights);
+                       }
+                       break;
+                       }
+               case GL_LIGHTING:
+                       nmesa->lighting_enabled=state;
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_ENABLED_LIGHTS, 1);
+                       if (nmesa->lighting_enabled)
+                               OUT_RING(nmesa->enabled_lights);
+                       else
+                               OUT_RING(0x0);
+                       break;
+               case GL_LINE_SMOOTH:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+//             case GL_LINE_STIPPLE:
+//             case GL_MAP1_COLOR_4:
+//             case GL_MAP1_INDEX:
+//             case GL_MAP1_NORMAL:
+//             case GL_MAP1_TEXTURE_COORD_1:
+//             case GL_MAP1_TEXTURE_COORD_2:
+//             case GL_MAP1_TEXTURE_COORD_3:
+//             case GL_MAP1_TEXTURE_COORD_4:
+//             case GL_MAP1_VERTEX_3:
+//             case GL_MAP1_VERTEX_4:
+//             case GL_MAP2_COLOR_4:
+//             case GL_MAP2_INDEX:
+//             case GL_MAP2_NORMAL:
+//             case GL_MAP2_TEXTURE_COORD_1:
+//             case GL_MAP2_TEXTURE_COORD_2:
+//             case GL_MAP2_TEXTURE_COORD_3:
+//             case GL_MAP2_TEXTURE_COORD_4:
+//             case GL_MAP2_VERTEX_3:
+//             case GL_MAP2_VERTEX_4:
+//             case GL_MINMAX:
+               case GL_NORMALIZE:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_NORMALIZE_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+//             case GL_POINT_SMOOTH:
+               case GL_POLYGON_OFFSET_POINT:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_POINT_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+               case GL_POLYGON_OFFSET_LINE:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_LINE_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+               case GL_POLYGON_OFFSET_FILL:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_FILL_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+               case GL_POLYGON_SMOOTH:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+               case GL_POLYGON_STIPPLE:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_STIPPLE_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+//             case GL_POST_COLOR_MATRIX_COLOR_TABLE:
+//             case GL_POST_CONVOLUTION_COLOR_TABLE:
+//             case GL_RESCALE_NORMAL:
+//             case GL_SCISSOR_TEST:
+//             case GL_SEPARABLE_2D:
+               case GL_STENCIL_TEST:
+                       // TODO BACK and FRONT ?
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_STENCIL_ENABLE, 1);
+                       OUT_RING(state);
+                       break;
+//             case GL_TEXTURE_GEN_Q:
+//             case GL_TEXTURE_GEN_R:
+//             case GL_TEXTURE_GEN_S:
+//             case GL_TEXTURE_GEN_T:
+//             case GL_TEXTURE_1D:
+//             case GL_TEXTURE_2D:
+//             case GL_TEXTURE_3D:
+       }
+}
+
+static void nv20Fogfv(GLcontext *ctx, GLenum pname, const GLfloat *params)
+{
+    nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+    switch(pname)
+    {
+        case GL_FOG_MODE:
+            BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_FOG_MODE, 1);
+            //OUT_RING (params);
+            break;
+            /* TODO: unsure about the rest.*/
+        default:
+            break;
+    }
+
+}
+   
+static void nv20Hint(GLcontext *ctx, GLenum target, GLenum mode)
+{
+       // TODO I need love (fog and line_smooth hints)
+}
+
+// void (*IndexMask)(GLcontext *ctx, GLuint mask);
+
+static void nv20Lightfv(GLcontext *ctx, GLenum light, GLenum pname, const GLfloat *params )
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       /* not sure where the fourth param value goes...*/
+       switch(pname)
+       {
+               case GL_AMBIENT:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_FRONT_SIDE_PRODUCT_AMBIENT_A(light), 3);
+                       OUT_RINGf(params[0]);
+                       OUT_RINGf(params[1]);
+                       OUT_RINGf(params[2]);
+                       break;
+               case GL_DIFFUSE:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_FRONT_SIDE_PRODUCT_DIFFUSE_A(light), 3);
+                       OUT_RINGf(params[0]);
+                       OUT_RINGf(params[1]);
+                       OUT_RINGf(params[2]);
+                       break;
+               case GL_SPECULAR:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_FRONT_SIDE_PRODUCT_SPECULAR_A(light), 3);
+                       OUT_RINGf(params[0]);
+                       OUT_RINGf(params[1]);
+                       OUT_RINGf(params[2]);
+                       break;
+               case GL_SPOT_DIRECTION:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_DIR_X(light), 3);
+                       OUT_RINGf(params[0]);
+                       OUT_RINGf(params[1]);
+                       OUT_RINGf(params[2]);
+                       break;
+               case GL_POSITION:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_POSITION_X(light), 3);
+                       OUT_RINGf(params[0]);
+                       OUT_RINGf(params[1]);
+                       OUT_RINGf(params[2]);
+                       break;
+               case GL_SPOT_EXPONENT:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_EXPONENT(light), 1);
+                       OUT_RINGf(*params);
+                       break;
+               case GL_SPOT_CUTOFF:
+                       /* you can't factor these */
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_CUTOFF_A(light), 1);
+                       OUT_RINGf(params[0]);
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_CUTOFF_B(light), 1);
+                       OUT_RINGf(params[1]);
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_CUTOFF_C(light), 1);
+                       OUT_RINGf(params[2]);
+                       break;
+               case GL_CONSTANT_ATTENUATION:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_CONSTANT_ATTENUATION(light), 1);
+                       OUT_RINGf(*params);
+                       break;
+               case GL_LINEAR_ATTENUATION:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_LINEAR_ATTENUATION(light), 1);
+                       OUT_RINGf(*params);
+                       break;
+               case GL_QUADRATIC_ATTENUATION:
+                       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_QUADRATIC_ATTENUATION(light), 1);
+                       OUT_RINGf(*params);
+                       break;
+               default:
+                       break;
+       }
+}
+
+/** Set the lighting model parameters */
+static void (*LightModelfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
+
+
+static void nv20LineStipple(GLcontext *ctx, GLint factor, GLushort pattern )
+{
+/*     nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LINE_STIPPLE_PATTERN, 1);
+       OUT_RING((pattern << 16) | factor);*/
+}
+
+static void nv20LineWidth(GLcontext *ctx, GLfloat width)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LINE_WIDTH, 1);
+       OUT_RINGf(width);
+}
+
+static void nv20LogicOpcode(GLcontext *ctx, GLenum opcode)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_OP, 1);
+       OUT_RING(opcode);
+}
+
+static void nv20PointParameterfv(GLcontext *ctx, GLenum pname, const GLfloat *params)
+{
+       /*TODO: not sure what goes here. */
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       
+}
+
+/** Specify the diameter of rasterized points */
+static void nv20PointSize(GLcontext *ctx, GLfloat size)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POINT_SIZE, 1);
+       OUT_RINGf(size);
+}
+
+/** Select a polygon rasterization mode */
+static void nv20PolygonMode(GLcontext *ctx, GLenum face, GLenum mode)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+
+       if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
+               BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_MODE_FRONT, 1);
+               OUT_RING(mode);
+       }
+       if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
+               BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_MODE_BACK, 1);
+               OUT_RING(mode);
+       }
+}
+
+/** Set the scale and units used to calculate depth values */
+void (*PolygonOffset)(GLcontext *ctx, GLfloat factor, GLfloat units);
+/** Set the polygon stippling pattern */
+void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask );
+/* Specifies the current buffer for reading */
+void (*ReadBuffer)( GLcontext *ctx, GLenum buffer );
+/** Set rasterization mode */
+void (*RenderMode)(GLcontext *ctx, GLenum mode );
+/** Define the scissor box */
+void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
+/** Select flat or smooth shading */
+void (*ShadeModel)(GLcontext *ctx, GLenum mode);
+
+/** OpenGL 2.0 two-sided StencilFunc */
+static void nv20StencilFuncSeparate(GLcontext *ctx, GLenum face, GLenum func,
+               GLint ref, GLuint mask)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_STENCIL_FUNC_FUNC, 3);
+       OUT_RING(func);
+       OUT_RING(ref);
+       OUT_RING(mask);
+}
+
+/** OpenGL 2.0 two-sided StencilMask */
+static void nv20StencilMaskSeparate(GLcontext *ctx, GLenum face, GLuint mask)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_STENCIL_MASK, 1);
+       OUT_RING(mask);
+}
+
+/** OpenGL 2.0 two-sided StencilOp */
+static void nv20StencilOpSeparate(GLcontext *ctx, GLenum face, GLenum fail,
+               GLenum zfail, GLenum zpass)
+{
+       nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+
+       BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_STENCIL_OP_FAIL, 1);
+       OUT_RING(fail);
+       OUT_RING(zfail);
+       OUT_RING(zpass);
+}
+
+/** Control the generation of texture coordinates */
+void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname,
+               const GLfloat *params);
+/** Set texture environment parameters */
+void (*TexEnv)(GLcontext *ctx, GLenum target, GLenum pname,
+               const GLfloat *param);
+/** Set texture parameters */
+void (*TexParameter)(GLcontext *ctx, GLenum target,
+               struct gl_texture_object *texObj,
+               GLenum pname, const GLfloat *params);
+void (*TextureMatrix)(GLcontext *ctx, GLuint unit, const GLmatrix *mat);
+
+/** Set the viewport */
+static void nv20Viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
+{
+    /* TODO: Where do the VIEWPORT_XFRM_* regs come in? */
+    nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
+    BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_VIEWPORT_HORIZ, 2);
+    OUT_RING((w << 16) | x);
+    OUT_RING((h << 16) | y);
+}
+
+void nv20InitStateFuncs(struct dd_function_table *func)
+{
+       func->AlphaFunc                 = nv20AlphaFunc;
+       func->BlendColor                = nv20BlendColor;
+       func->BlendEquationSeparate     = nv20BlendEquationSeparate;
+       func->BlendFuncSeparate         = nv20BlendFuncSeparate;
+       func->ClearColor                = nv20ClearColor;
+       func->ClearDepth                = nv20ClearDepth;
+       func->ClearStencil              = nv20ClearStencil;
+       func->ClipPlane                 = nv20ClipPlane;
+       func->ColorMask                 = nv20ColorMask;
+       func->ColorMaterial             = nv20ColorMaterial;
+       func->CullFace                  = nv20CullFace;
+       func->FrontFace                 = nv20FrontFace;
+       func->DepthFunc                 = nv20DepthFunc;
+       func->DepthMask                 = nv20DepthMask;
+       func->DepthRange                = nv20DepthRange;
+       func->Enable                    = nv20Enable;
+       func->Fogfv                     = nv20Fogfv;
+       func->Hint                      = nv20Hint;
+       func->Lightfv                   = nv20Lightfv;
+/*     func->LightModelfv              = nv20LightModelfv; */
+       func->LineStipple               = nv20LineStipple;
+       func->LineWidth                 = nv20LineWidth;
+       func->LogicOpcode               = nv20LogicOpcode;
+       func->PointParameterfv          = nv20PointParameterfv;
+       func->PointSize                 = nv20PointSize;
+       func->PolygonMode               = nv20PolygonMode;
+#if 0
+       func->PolygonOffset             = nv20PolygonOffset;
+       func->PolygonStipple            = nv20PolygonStipple;
+       func->ReadBuffer                = nv20ReadBuffer;
+       func->RenderMode                = nv20RenderMode;
+       func->Scissor                   = nv20Scissor;
+       func->ShadeModel                = nv20ShaderModel;
+#endif
+       func->StencilFuncSeparate       = nv20StencilFuncSeparate;
+       func->StencilMaskSeparate       = nv20StencilMaskSeparate;
+       func->StencilOpSeparate         = nv20StencilOpSeparate;
+#if 0
+       func->TexGen                    = nv20TexGen;
+       func->TexParameter              = nv20TexParameter;
+       func->TextureMatrix             = nv20TextureMatrix;
+#endif
+       func->Viewport                  = nv20Viewport;
+}
+
index 470f18d80a158a0927e020e4bb21757de62c10a3..dffd97b4e51f166f8f653f145cbf31de8b166dcc 100644 (file)
@@ -193,7 +193,7 @@ static void nv30Enable(GLcontext *ctx, GLenum cap, GLboolean state)
                        OUT_RING(state);
                        break;
                case GL_COLOR_LOGIC_OP:
-                       BEGIN_RING_SIZE(NvSub3D, NV30_TCL_PRIMITIVE_3D_LOGIC_OP_ENABLE, 1);
+                       BEGIN_RING_SIZE(NvSub3D, NV30_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE, 1);
                        OUT_RING(state);
                        break;
 //             case GL_COLOR_MATERIAL:
@@ -421,7 +421,7 @@ static void nv30LineWidth(GLcontext *ctx, GLfloat width)
 static void nv30LogicOpcode(GLcontext *ctx, GLenum opcode)
 {
        nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
-       BEGIN_RING_SIZE(NvSub3D, NV30_TCL_PRIMITIVE_3D_LOGIC_OP_OP, 1);
+       BEGIN_RING_SIZE(NvSub3D, NV30_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_OP, 1);
        OUT_RING(opcode);
 }