summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/nvfx
diff options
context:
space:
mode:
authorLuca Barbieri <[email protected]>2010-01-11 01:09:44 +0100
committerLuca Barbieri <[email protected]>2010-04-12 20:46:18 +0200
commit7fc7b759950e8c7482a3dbbf25d6604960c25092 (patch)
tree1c915912f6329215a6c40e52173698ac8a139559 /src/gallium/drivers/nvfx
parenta2ddae0fc3afcf52f79ab9ceb7d84342eb3dd612 (diff)
nvfx: Add support for two sided color
This patch adds support for two-sided vertex color to nv30/nv40. When set, the COLOR0/1 fs inputs on back faces will be wired to vs outputs BCOLOR0/1. This makes OpenGL two sided lighting work, which can be tested with progs/demos/projtex.
Diffstat (limited to 'src/gallium/drivers/nvfx')
-rw-r--r--src/gallium/drivers/nvfx/nvfx_context.h2
-rw-r--r--src/gallium/drivers/nvfx/nvfx_state.c4
2 files changed, 4 insertions, 2 deletions
diff --git a/src/gallium/drivers/nvfx/nvfx_context.h b/src/gallium/drivers/nvfx/nvfx_context.h
index fea05ac81ab..e2c6d09fa19 100644
--- a/src/gallium/drivers/nvfx/nvfx_context.h
+++ b/src/gallium/drivers/nvfx/nvfx_context.h
@@ -46,7 +46,7 @@
struct nvfx_rasterizer_state {
struct pipe_rasterizer_state pipe;
unsigned sb_len;
- uint32_t sb[30];
+ uint32_t sb[32];
};
struct nvfx_zsa_state {
diff --git a/src/gallium/drivers/nvfx/nvfx_state.c b/src/gallium/drivers/nvfx/nvfx_state.c
index 0f03c2eb3d5..315de492dab 100644
--- a/src/gallium/drivers/nvfx/nvfx_state.c
+++ b/src/gallium/drivers/nvfx/nvfx_state.c
@@ -193,7 +193,6 @@ nvfx_rasterizer_state_create(struct pipe_context *pipe,
struct nouveau_statebuf_builder sb = sb_init(rsso->sb);
/*XXX: ignored:
- * light_twoside
* point_smooth -nohw
* multisample
*/
@@ -202,6 +201,9 @@ nvfx_rasterizer_state_create(struct pipe_context *pipe,
sb_data(sb, cso->flatshade ? NV34TCL_SHADE_MODEL_FLAT :
NV34TCL_SHADE_MODEL_SMOOTH);
+ sb_method(sb, NV34TCL_VERTEX_TWO_SIDE_ENABLE, 1);
+ sb_data(sb, cso->light_twoside);
+
sb_method(sb, NV34TCL_LINE_WIDTH, 2);
sb_data(sb, (unsigned char)(cso->line_width * 8.0) & 0xff);
sb_data(sb, cso->line_smooth ? 1 : 0);