Add nv20_state.c ; hook nv10_state.c into the build ; do the renaming
required by the renouveau changes.
This commit is contained in:
@@ -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 = \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user