nv10, nv20: Fix build.
[mesa.git] / src / gallium / drivers / nv10 / nv10_state_emit.c
index d21368d33f38fb5ab52e686cb1c36a6c3aa2d53c..30a596ca604a8443833cb4ebc369f5d2614900c4 100644 (file)
@@ -1,30 +1,35 @@
-#include "pipe/p_util.h"
-
 #include "nv10_context.h"
 #include "nv10_state.h"
 
 static void nv10_state_emit_blend(struct nv10_context* nv10)
 {
        struct nv10_blend_state *b = nv10->blend;
+       struct nv10_screen *screen = nv10->screen;
+       struct nouveau_channel *chan = screen->base.channel;
+       struct nouveau_grobj *celsius = screen->celsius;
 
-       BEGIN_RING(celsius, NV10TCL_DITHER_ENABLE, 1);
-       OUT_RING  (b->d_enable);
+       BEGIN_RING(chan, celsius, NV10TCL_DITHER_ENABLE, 1);
+       OUT_RING  (chan, b->d_enable);
 
-       BEGIN_RING(celsius, NV10TCL_BLEND_FUNC_ENABLE, 3);
-       OUT_RING  (b->b_enable);
-       OUT_RING  (b->b_srcfunc);
-       OUT_RING  (b->b_dstfunc);
+       BEGIN_RING(chan, celsius, NV10TCL_BLEND_FUNC_ENABLE, 3);
+       OUT_RING  (chan, b->b_enable);
+       OUT_RING  (chan, b->b_srcfunc);
+       OUT_RING  (chan, b->b_dstfunc);
 
-       BEGIN_RING(celsius, NV10TCL_COLOR_MASK, 1);
-       OUT_RING  (b->c_mask);
+       BEGIN_RING(chan, celsius, NV10TCL_COLOR_MASK, 1);
+       OUT_RING  (chan, b->c_mask);
 }
 
 static void nv10_state_emit_blend_color(struct nv10_context* nv10)
 {
        struct pipe_blend_color *c = nv10->blend_color;
+       struct nv10_screen *screen = nv10->screen;
+       struct nouveau_channel *chan = screen->base.channel;
+       struct nouveau_grobj *celsius = screen->celsius;
 
-       BEGIN_RING(celsius, NV10TCL_BLEND_COLOR, 1);
-       OUT_RING  ((float_to_ubyte(c->color[3]) << 24)|
+       BEGIN_RING(chan, celsius, NV10TCL_BLEND_COLOR, 1);
+       OUT_RING  (chan,
+                  (float_to_ubyte(c->color[3]) << 24)|
                   (float_to_ubyte(c->color[0]) << 16)|
                   (float_to_ubyte(c->color[1]) << 8) |
                   (float_to_ubyte(c->color[2]) << 0));
@@ -33,60 +38,66 @@ static void nv10_state_emit_blend_color(struct nv10_context* nv10)
 static void nv10_state_emit_rast(struct nv10_context* nv10)
 {
        struct nv10_rasterizer_state *r = nv10->rast;
+       struct nv10_screen *screen = nv10->screen;
+       struct nouveau_channel *chan = screen->base.channel;
+       struct nouveau_grobj *celsius = screen->celsius;
 
-       BEGIN_RING(celsius, NV10TCL_SHADE_MODEL, 2);
-       OUT_RING  (r->shade_model);
-       OUT_RING  (r->line_width);
+       BEGIN_RING(chan, celsius, NV10TCL_SHADE_MODEL, 2);
+       OUT_RING  (chan, r->shade_model);
+       OUT_RING  (chan, r->line_width);
 
 
-       BEGIN_RING(celsius, NV10TCL_POINT_SIZE, 1);
-       OUT_RING  (r->point_size);
+       BEGIN_RING(chan, celsius, NV10TCL_POINT_SIZE, 1);
+       OUT_RING  (chan, r->point_size);
 
-       BEGIN_RING(celsius, NV10TCL_POLYGON_MODE_FRONT, 2);
-       OUT_RING  (r->poly_mode_front);
-       OUT_RING  (r->poly_mode_back);
+       BEGIN_RING(chan, celsius, NV10TCL_POLYGON_MODE_FRONT, 2);
+       OUT_RING  (chan, r->poly_mode_front);
+       OUT_RING  (chan, r->poly_mode_back);
 
 
-       BEGIN_RING(celsius, NV10TCL_CULL_FACE, 2);
-       OUT_RING  (r->cull_face);
-       OUT_RING  (r->front_face);
+       BEGIN_RING(chan, celsius, NV10TCL_CULL_FACE, 2);
+       OUT_RING  (chan, r->cull_face);
+       OUT_RING  (chan, r->front_face);
 
-       BEGIN_RING(celsius, NV10TCL_LINE_SMOOTH_ENABLE, 2);
-       OUT_RING  (r->line_smooth_en);
-       OUT_RING  (r->poly_smooth_en);
+       BEGIN_RING(chan, celsius, NV10TCL_LINE_SMOOTH_ENABLE, 2);
+       OUT_RING  (chan, r->line_smooth_en);
+       OUT_RING  (chan, r->poly_smooth_en);
 
-       BEGIN_RING(celsius, NV10TCL_CULL_FACE_ENABLE, 1);
-       OUT_RING  (r->cull_face_en);
+       BEGIN_RING(chan, celsius, NV10TCL_CULL_FACE_ENABLE, 1);
+       OUT_RING  (chan, r->cull_face_en);
 }
 
 static void nv10_state_emit_dsa(struct nv10_context* nv10)
 {
        struct nv10_depth_stencil_alpha_state *d = nv10->dsa;
+       struct nv10_screen *screen = nv10->screen;
+       struct nouveau_channel *chan = screen->base.channel;
+       struct nouveau_grobj *celsius = screen->celsius;
 
-       BEGIN_RING(celsius, NV10TCL_DEPTH_FUNC, 1);
-       OUT_RING (d->depth.func);
+       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_FUNC, 1);
+       OUT_RING (chan, d->depth.func);
 
-       BEGIN_RING(celsius, NV10TCL_DEPTH_WRITE_ENABLE, 1);
-       OUT_RING (d->depth.write_enable);
+       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_WRITE_ENABLE, 1);
+       OUT_RING (chan, d->depth.write_enable);
 
-       BEGIN_RING(celsius, NV10TCL_DEPTH_TEST_ENABLE, 1);
-       OUT_RING (d->depth.test_enable);
+       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_TEST_ENABLE, 1);
+       OUT_RING (chan, d->depth.test_enable);
 
 #if 0
-       BEGIN_RING(celsius, NV10TCL_STENCIL_ENABLE, 1);
-       OUT_RING (d->stencil.enable);
-       BEGIN_RING(celsius, NV10TCL_STENCIL_MASK, 7);
-       OUT_RINGp ((uint32_t *)&(d->stencil.wmask), 7);
+       BEGIN_RING(chan, celsius, NV10TCL_STENCIL_ENABLE, 1);
+       OUT_RING (chan, d->stencil.enable);
+       BEGIN_RING(chan, celsius, NV10TCL_STENCIL_MASK, 7);
+       OUT_RINGp (chan, (uint32_t *)&(d->stencil.wmask), 7);
 #endif
 
-       BEGIN_RING(celsius, NV10TCL_ALPHA_FUNC_ENABLE, 1);
-       OUT_RING (d->alpha.enabled);
+       BEGIN_RING(chan, celsius, NV10TCL_ALPHA_FUNC_ENABLE, 1);
+       OUT_RING (chan, d->alpha.enabled);
 
-       BEGIN_RING(celsius, NV10TCL_ALPHA_FUNC_FUNC, 1);
-       OUT_RING (d->alpha.func);
+       BEGIN_RING(chan, celsius, NV10TCL_ALPHA_FUNC_FUNC, 1);
+       OUT_RING (chan, d->alpha.func);
 
-       BEGIN_RING(celsius, NV10TCL_ALPHA_FUNC_REF, 1);
-       OUT_RING (d->alpha.ref);
+       BEGIN_RING(chan, celsius, NV10TCL_ALPHA_FUNC_REF, 1);
+       OUT_RING (chan, d->alpha.ref);
 }
 
 static void nv10_state_emit_viewport(struct nv10_context* nv10)
@@ -105,14 +116,19 @@ static void nv10_state_emit_scissor(struct nv10_context* nv10)
 static void nv10_state_emit_framebuffer(struct nv10_context* nv10)
 {
        struct pipe_framebuffer_state* fb = nv10->framebuffer;
-       struct pipe_surface *rt, *zeta = NULL;
+       struct nv04_surface *rt, *zeta = NULL;
        uint32_t rt_format, w, h;
        int colour_format = 0, zeta_format = 0;
+        struct nv10_miptree *nv10mt = 0;
+
+       struct nv10_screen *screen = nv10->screen;
+       struct nouveau_channel *chan = screen->base.channel;
+       struct nouveau_grobj *celsius = screen->celsius;
 
        w = fb->cbufs[0]->width;
        h = fb->cbufs[0]->height;
        colour_format = fb->cbufs[0]->format;
-       rt = fb->cbufs[0];
+       rt = (struct nv04_surface *)fb->cbufs[0];
 
        if (fb->zsbuf) {
                if (colour_format) {
@@ -124,12 +140,15 @@ static void nv10_state_emit_framebuffer(struct nv10_context* nv10)
                }
 
                zeta_format = fb->zsbuf->format;
-               zeta = fb->zsbuf;
+               zeta = (struct nv04_surface *)fb->zsbuf;
        }
 
        rt_format = NV10TCL_RT_FORMAT_TYPE_LINEAR;
 
        switch (colour_format) {
+       case PIPE_FORMAT_X8R8G8B8_UNORM:
+               rt_format |= NV10TCL_RT_FORMAT_COLOR_X8R8G8B8;
+               break;
        case PIPE_FORMAT_A8R8G8B8_UNORM:
        case 0:
                rt_format |= NV10TCL_RT_FORMAT_COLOR_A8R8G8B8;
@@ -142,27 +161,29 @@ static void nv10_state_emit_framebuffer(struct nv10_context* nv10)
        }
 
        if (zeta) {
-               BEGIN_RING(celsius, NV10TCL_RT_PITCH, 1);
-               OUT_RING  (rt->stride | (zeta->stride << 16));
+               BEGIN_RING(chan, celsius, NV10TCL_RT_PITCH, 1);
+               OUT_RING  (chan, rt->pitch | (zeta->pitch << 16));
        } else {
-               BEGIN_RING(celsius, NV10TCL_RT_PITCH, 1);
-               OUT_RING  (rt->stride | (rt->stride << 16));
+               BEGIN_RING(chan, celsius, NV10TCL_RT_PITCH, 1);
+               OUT_RING  (chan, rt->pitch | (rt->pitch << 16));
        }
 
-       nv10->rt[0] = rt->buffer;
+       nv10mt = (struct nv10_miptree *)rt->base.texture;
+       nv10->rt[0] = nv10mt->buffer;
 
        if (zeta_format)
        {
-               nv10->zeta = zeta->buffer;
+               nv10mt = (struct nv10_miptree *)zeta->base.texture;
+               nv10->zeta = nv10mt->buffer;
        }
 
-       BEGIN_RING(celsius, NV10TCL_RT_HORIZ, 3);
-       OUT_RING  ((w << 16) | 0);
-       OUT_RING  ((h << 16) | 0);
-       OUT_RING  (rt_format);
-       BEGIN_RING(celsius, NV10TCL_VIEWPORT_CLIP_HORIZ(0), 2);
-       OUT_RING  (((w - 1) << 16) | 0 | 0x08000800);
-       OUT_RING  (((h - 1) << 16) | 0 | 0x08000800);
+       BEGIN_RING(chan, celsius, NV10TCL_RT_HORIZ, 3);
+       OUT_RING  (chan, (w << 16) | 0);
+       OUT_RING  (chan, (h << 16) | 0);
+       OUT_RING  (chan, rt_format);
+       BEGIN_RING(chan, celsius, NV10TCL_VIEWPORT_CLIP_HORIZ(0), 2);
+       OUT_RING  (chan, ((w - 1) << 16) | 0 | 0x08000800);
+       OUT_RING  (chan, ((h - 1) << 16) | 0 | 0x08000800);
 }
 
 static void nv10_vertex_layout(struct nv10_context *nv10)
@@ -197,6 +218,10 @@ static void nv10_vertex_layout(struct nv10_context *nv10)
 void
 nv10_emit_hw_state(struct nv10_context *nv10)
 {
+       struct nv10_screen *screen = nv10->screen;
+       struct nouveau_channel *chan = screen->base.channel;
+       struct nouveau_grobj *celsius = screen->celsius;
+       struct nouveau_bo *rt_bo;
        int i;
 
        if (nv10->dirty & NV10_NEW_VERTPROG) {
@@ -265,38 +290,41 @@ nv10_emit_hw_state(struct nv10_context *nv10)
         */
 
        /* Render target */
+       rt_bo = nouveau_bo(nv10->rt[0]);
 // XXX figre out who's who for NV10TCL_DMA_* and fill accordingly
-//     BEGIN_RING(celsius, NV10TCL_DMA_COLOR0, 1);
-//     OUT_RELOCo(nv10->rt[0], NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
-       BEGIN_RING(celsius, NV10TCL_COLOR_OFFSET, 1);
-       OUT_RELOCl(nv10->rt[0], 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
+//     BEGIN_RING(chan, celsius, NV10TCL_DMA_COLOR0, 1);
+//     OUT_RELOCo(chan, rt_bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
+       BEGIN_RING(chan, celsius, NV10TCL_COLOR_OFFSET, 1);
+       OUT_RELOCl(chan, rt_bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
 
        if (nv10->zeta) {
+               struct nouveau_bo *zeta_bo = nouveau_bo(nv10->zeta);
 // XXX
-//             BEGIN_RING(celsius, NV10TCL_DMA_ZETA, 1);
-//             OUT_RELOCo(nv10->zeta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
-               BEGIN_RING(celsius, NV10TCL_ZETA_OFFSET, 1);
-               OUT_RELOCl(nv10->zeta, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
+//             BEGIN_RING(chan, celsius, NV10TCL_DMA_ZETA, 1);
+//             OUT_RELOCo(chan, zeta_bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
+               BEGIN_RING(chan, celsius, NV10TCL_ZETA_OFFSET, 1);
+               OUT_RELOCl(chan, zeta_bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
                /* XXX for when we allocate LMA on nv17 */
-/*             BEGIN_RING(celsius, NV10TCL_LMA_DEPTH_BUFFER_OFFSET, 1);
-               OUT_RELOCl(nv10->zeta + lma_offset);*/
+/*             BEGIN_RING(chan, celsius, NV10TCL_LMA_DEPTH_BUFFER_OFFSET, 1);
+               OUT_RELOCl(chan, nouveau_bo(nv10->zeta + lma_offset));*/
        }
 
        /* Vertex buffer */
-       BEGIN_RING(celsius, NV10TCL_DMA_VTXBUF0, 1);
-       OUT_RELOCo(nv10->rt[0], NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
-       BEGIN_RING(celsius, NV10TCL_COLOR_OFFSET, 1);
-       OUT_RELOCl(nv10->rt[0], 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
+       BEGIN_RING(chan, celsius, NV10TCL_DMA_VTXBUF0, 1);
+       OUT_RELOCo(chan, rt_bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
+       BEGIN_RING(chan, celsius, NV10TCL_COLOR_OFFSET, 1);
+       OUT_RELOCl(chan, rt_bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
 
        /* Texture images */
        for (i = 0; i < 2; i++) {
                if (!(nv10->fp_samplers & (1 << i)))
                        continue;
-               BEGIN_RING(celsius, NV10TCL_TX_OFFSET(i), 1);
-               OUT_RELOCl(nv10->tex[i].buffer, 0, NOUVEAU_BO_VRAM |
+               struct nouveau_bo *bo = nouveau_bo(nv10->tex[i].buffer);
+               BEGIN_RING(chan, celsius, NV10TCL_TX_OFFSET(i), 1);
+               OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM |
                           NOUVEAU_BO_GART | NOUVEAU_BO_RD);
-               BEGIN_RING(celsius, NV10TCL_TX_FORMAT(i), 1);
-               OUT_RELOCd(nv10->tex[i].buffer, nv10->tex[i].format,
+               BEGIN_RING(chan, celsius, NV10TCL_TX_FORMAT(i), 1);
+               OUT_RELOCd(chan, bo, nv10->tex[i].format,
                           NOUVEAU_BO_VRAM | NOUVEAU_BO_GART | NOUVEAU_BO_RD |
                           NOUVEAU_BO_OR, NV10TCL_TX_FORMAT_DMA0,
                           NV10TCL_TX_FORMAT_DMA1);