nv50,nvc0: identify some line rasterization state
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Thu, 31 Mar 2011 17:04:17 +0000 (19:04 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Sun, 10 Apr 2011 12:06:52 +0000 (14:06 +0200)
Fixes width of non-smooth (aliased) lines on nvc0.

src/gallium/drivers/nv50/nv50_3d.xml.h
src/gallium/drivers/nv50/nv50_screen.c
src/gallium/drivers/nv50/nv50_state.c
src/gallium/drivers/nvc0/nvc0_3d.xml.h
src/gallium/drivers/nvc0/nvc0_screen.c
src/gallium/drivers/nvc0/nvc0_state.c

index 92b97ddb9f4b45324fbe274301d0d8f8b96121ed..e3177e0b8bdccd45c979f93b2eed31f8cf54c858 100644 (file)
@@ -1706,7 +1706,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NV50_3D_CULL_FACE_BACK                                 0x00000405
 #define NV50_3D_CULL_FACE_FRONT_AND_BACK                       0x00000408
 
-#define NV50_3D_UNK1924                                                0x00001924
+#define NV50_3D_LINE_LAST_PIXEL                                        0x00001924
 
 #define NVA3_3D_FP_MULTISAMPLE                                 0x00001928
 #define NVA3_3D_FP_MULTISAMPLE_EXPORT_SAMPLE_MASK              0x00000001
index cfa49aa0394cd034df3b895062008f1c743c063c..439202dfe97df662ecf56ee9d74c1916c4e8a321 100644 (file)
@@ -420,6 +420,8 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    OUT_RING  (chan, NV50_3D_MULTISAMPLE_MODE_MS1);
    BEGIN_RING(chan, RING_3D(MULTISAMPLE_CTRL), 1);
    OUT_RING  (chan, 0);
+   BEGIN_RING(chan, RING_3D(LINE_LAST_PIXEL), 1);
+   OUT_RING  (chan, 0);
 
    BEGIN_RING(chan, RING_3D(SCREEN_Y_CONTROL), 1);
    OUT_RING  (chan, 0);
index 4c96db84e43bf164a77ba9d29d2246d2941b247f..030cdcb89d3f4f109b8bbd571371d9d29bed7877 100644 (file)
@@ -174,6 +174,7 @@ nv50_blend_state_delete(struct pipe_context *pipe, void *hwcso)
    FREE(hwcso);
 }
 
+/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */
 static void *
 nv50_rasterizer_state_create(struct pipe_context *pipe,
                              const struct pipe_rasterizer_state *cso)
index 94fa081ad7eb70533afebe2b79719d92c08573c0..9a64e3ff6af805e5e0bd5e29903e7ab710bdfc09 100644 (file)
@@ -82,6 +82,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define NVC0_3D_SERIALIZE                                      0x00000110
 
+#define NVC0_3D_LINE_WIDTH_SEPARATE                            0x0000020c
+
 #define NVC0_3D_EARLY_FRAGMENT_TESTS                           0x00000210
 
 #define NVC0_3D_MEM_BARRIER                                    0x0000021c
@@ -651,7 +653,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NVC0_3D_SCREEN_Y_CONTROL_Y_NEGATE                      0x00000001
 #define NVC0_3D_SCREEN_Y_CONTROL_TRIANGLE_RAST_FLIP            0x00000010
 
-#define NVC0_3D_LINE_WIDTH                                     0x000013b0
+#define NVC0_3D_LINE_WIDTH_SMOOTH                              0x000013b0
+
+#define NVC0_3D_LINE_WIDTH_ALIASED                             0x000013b4
 
 #define NVC0_3D_GP_VERTEX_OUTPUT_COUNT                         0x00001420
 #define NVC0_3D_GP_VERTEX_OUTPUT_COUNT__MIN                    0x00000001
@@ -977,6 +981,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NVC0_3D_CULL_FACE_BACK                                 0x00000405
 #define NVC0_3D_CULL_FACE_FRONT_AND_BACK                       0x00000408
 
+#define NVC0_3D_LINE_LAST_PIXEL                                        0x00001924
+
 #define NVC0_3D_VIEWPORT_TRANSFORM_EN                          0x0000192c
 
 #define NVC0_3D_VIEW_VOLUME_CLIP_CTRL                          0x0000193c
index e98a4c0fd420496d87fbd11c405a17d1306d3f77..17f42e6fc6cc71465e7c7345afd4a22c352f4fd9 100644 (file)
@@ -294,8 +294,6 @@ nvc0_magic_3d_init(struct nouveau_channel *chan)
    OUT_RING  (chan, 1 << 12);
    BEGIN_RING(chan, RING_3D_(0x151c), 1);
    OUT_RING  (chan, 1);
-   BEGIN_RING(chan, RING_3D_(0x020c), 1);
-   OUT_RING  (chan, 1);
    BEGIN_RING(chan, RING_3D_(0x030c), 1);
    OUT_RING  (chan, 0);
    BEGIN_RING(chan, RING_3D_(0x0300), 1);
@@ -448,6 +446,10 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    OUT_RING  (chan, NVC0_3D_MULTISAMPLE_MODE_1X);
    BEGIN_RING(chan, RING_3D(MULTISAMPLE_CTRL), 1);
    OUT_RING  (chan, 0);
+   BEGIN_RING(chan, RING_3D(LINE_WIDTH_SEPARATE), 1);
+   OUT_RING  (chan, 1);
+   BEGIN_RING(chan, RING_3D(LINE_LAST_PIXEL), 1);
+   OUT_RING  (chan, 0);
 
    nvc0_magic_3d_init(chan);
 
index c482b25f6b62f663b635e1bec2aa220ffe558dce..db3b78f10b8a0478e4e3e3243005f88e5507067f 100644 (file)
@@ -161,6 +161,7 @@ nvc0_blend_state_delete(struct pipe_context *pipe, void *hwcso)
     FREE(hwcso);
 }
 
+/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */
 static void *
 nvc0_rasterizer_state_create(struct pipe_context *pipe,
                              const struct pipe_rasterizer_state *cso)
@@ -187,9 +188,12 @@ nvc0_rasterizer_state_create(struct pipe_context *pipe,
     SB_BEGIN_3D(so, FRAG_COLOR_CLAMP_EN, 1);
     SB_DATA    (so, cso->clamp_fragment_color ? 0x11111111 : 0x00000000);
 
-    SB_BEGIN_3D(so, LINE_WIDTH, 1);
-    SB_DATA    (so, fui(cso->line_width));
     SB_IMMED_3D(so, LINE_SMOOTH_ENABLE, cso->line_smooth);
+    if (cso->line_smooth)
+       SB_BEGIN_3D(so, LINE_WIDTH_SMOOTH, 1);
+    else
+       SB_BEGIN_3D(so, LINE_WIDTH_ALIASED, 1);
+    SB_DATA    (so, fui(cso->line_width));
 
     SB_BEGIN_3D(so, LINE_STIPPLE_ENABLE, 1);
     if (cso->line_stipple_enable) {