nouveau: remove unneeded code from ws, use pipe_buffer_ instead of ws->
authorBen Skeggs <bskeggs@redhat.com>
Fri, 5 Jun 2009 01:21:08 +0000 (11:21 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 5 Jun 2009 04:37:03 +0000 (14:37 +1000)
24 files changed:
src/gallium/drivers/nv04/nv04_state.c
src/gallium/drivers/nv04/nv04_vbo.c
src/gallium/drivers/nv10/nv10_prim_vbuf.c
src/gallium/drivers/nv10/nv10_state.c
src/gallium/drivers/nv10/nv10_vbo.c
src/gallium/drivers/nv20/nv20_prim_vbuf.c
src/gallium/drivers/nv20/nv20_state.c
src/gallium/drivers/nv20/nv20_vbo.c
src/gallium/drivers/nv20/nv20_vertprog.c
src/gallium/drivers/nv30/nv30_fragprog.c
src/gallium/drivers/nv30/nv30_vbo.c
src/gallium/drivers/nv30/nv30_vertprog.c
src/gallium/drivers/nv40/nv40_draw.c
src/gallium/drivers/nv40/nv40_fragprog.c
src/gallium/drivers/nv40/nv40_vbo.c
src/gallium/drivers/nv40/nv40_vertprog.c
src/gallium/drivers/nv50/nv50_program.c
src/gallium/drivers/nv50/nv50_query.c
src/gallium/drivers/nv50/nv50_vbo.c
src/gallium/winsys/drm/nouveau/drm/Makefile
src/gallium/winsys/drm/nouveau/drm/nouveau_drm_api.c
src/gallium/winsys/drm/nouveau/drm/nouveau_drm_api.h
src/gallium/winsys/drm/nouveau/drm/nouveau_winsys_pipe.c [deleted file]
src/gallium/winsys/drm/nouveau/drm/nouveau_winsys_pipe.h [deleted file]

index 87c635f962a6dcf5934174ab35805b57272f8591..d356ebd8b3688217740b49d490b644342f3253e3 100644 (file)
@@ -2,6 +2,7 @@
 #include "pipe/p_state.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_shader_tokens.h"
+#include "pipe/p_inlines.h"
 
 #include "tgsi/tgsi_parse.h"
 
@@ -334,7 +335,7 @@ nv04_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
                         const struct pipe_constant_buffer *buf )
 {
        struct nv04_context *nv04 = nv04_context(pipe);
-       struct pipe_winsys *ws = pipe->winsys;
+       struct pipe_screen *pscreen = pipe->screen;
 
        assert(shader < PIPE_SHADER_TYPES);
        assert(index == 0);
@@ -342,12 +343,12 @@ nv04_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
        if (buf) {
                void *mapped;
                if (buf->buffer && buf->buffer->size &&
-                    (mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
+                    (mapped = pipe_buffer_map(pscreen, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
                {
                        memcpy(nv04->constbuf[shader], mapped, buf->buffer->size);
                        nv04->constbuf_nr[shader] =
                                buf->buffer->size / (4 * sizeof(float));
-                       ws->buffer_unmap(ws, buf->buffer);
+                       pipe_buffer_unmap(pscreen, buf->buffer);
                }
        }
 }
index d21a0e34f7136c445c88e0c63e07e32a128170fb..e3167814f2bcb39d5ec92280c3391f8b1fea9c40 100644 (file)
@@ -1,6 +1,7 @@
 #include "draw/draw_context.h"
 #include "pipe/p_context.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "nv04_context.h"
 #include "nv04_state.h"
@@ -13,6 +14,7 @@ boolean nv04_draw_elements( struct pipe_context *pipe,
                     unsigned indexSize,
                     unsigned prim, unsigned start, unsigned count)
 {
+       struct pipe_screen *pscreen = pipe->screen;
        struct nv04_context *nv04 = nv04_context( pipe );
        struct draw_context *draw = nv04->draw;
        unsigned i;
@@ -25,17 +27,17 @@ boolean nv04_draw_elements( struct pipe_context *pipe,
        for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
                if (nv04->vtxbuf[i].buffer) {
                        void *buf
-                               = pipe->winsys->buffer_map(pipe->winsys,
-                                               nv04->vtxbuf[i].buffer,
-                                               PIPE_BUFFER_USAGE_CPU_READ);
+                               = pipe_buffer_map(pscreen,
+                                                 nv04->vtxbuf[i].buffer,
+                                                 PIPE_BUFFER_USAGE_CPU_READ);
                        draw_set_mapped_vertex_buffer(draw, i, buf);
                }
        }
        /* Map index buffer, if present */
        if (indexBuffer) {
                void *mapped_indexes
-                       = pipe->winsys->buffer_map(pipe->winsys, indexBuffer,
-                                       PIPE_BUFFER_USAGE_CPU_READ);
+                       = pipe_buffer_map(pscreen, indexBuffer,
+                                         PIPE_BUFFER_USAGE_CPU_READ);
                draw_set_mapped_element_buffer(draw, indexSize, mapped_indexes);
        }
        else {
@@ -55,12 +57,12 @@ boolean nv04_draw_elements( struct pipe_context *pipe,
         */
        for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
                if (nv04->vtxbuf[i].buffer) {
-                       pipe->winsys->buffer_unmap(pipe->winsys, nv04->vtxbuf[i].buffer);
+                       pipe_buffer_unmap(pscreen, nv04->vtxbuf[i].buffer);
                        draw_set_mapped_vertex_buffer(draw, i, NULL);
                }
        }
        if (indexBuffer) {
-               pipe->winsys->buffer_unmap(pipe->winsys, indexBuffer);
+               pipe_buffer_unmap(pscreen, indexBuffer);
                draw_set_mapped_element_buffer(draw, 0, NULL);
        }
 
index f16e343fa64027c48f460fbefa6c58f777b585d4..1806d5f8ccc3ac17cbe97d0bd1fb4d470bf22d6d 100644 (file)
@@ -40,7 +40,6 @@
 
 #include "util/u_debug.h"
 #include "pipe/p_inlines.h"
-#include "pipe/internal/p_winsys_screen.h"
 
 #include "nv10_context.h"
 #include "nv10_state.h"
@@ -124,11 +123,10 @@ nv10_vbuf_render_map_vertices( struct vbuf_render *render )
 {
        struct nv10_vbuf_render *nv10_render = nv10_vbuf_render(render);
        struct nv10_context *nv10 = nv10_render->nv10;
-       struct pipe_winsys *winsys = nv10->pipe.winsys;
+       struct pipe_screen *pscreen = nv10->pipe.screen;
 
-       return winsys->buffer_map(winsys, 
-                       nv10_render->buffer, 
-                       PIPE_BUFFER_USAGE_CPU_WRITE);
+       return pipe_buffer_map(pscreen, nv10_render->buffer,
+                              PIPE_BUFFER_USAGE_CPU_WRITE);
 }
 
 static void
@@ -138,10 +136,10 @@ nv10_vbuf_render_unmap_vertices( struct vbuf_render *render,
 {
        struct nv10_vbuf_render *nv10_render = nv10_vbuf_render(render);
        struct nv10_context *nv10 = nv10_render->nv10;
-       struct pipe_winsys *winsys = nv10->pipe.winsys;
+       struct pipe_screen *pscreen = nv10->pipe.screen;
 
        assert(!nv10_render->buffer);
-       winsys->buffer_unmap(winsys, nv10_render->buffer);
+       pipe_buffer_unmap(pscreen, nv10_render->buffer);
 }
 
 static boolean
@@ -202,8 +200,6 @@ static void
 nv10_vbuf_render_release_vertices( struct vbuf_render *render )
 {
        struct nv10_vbuf_render *nv10_render = nv10_vbuf_render(render);
-       struct nv10_context *nv10 = nv10_render->nv10;
-       struct pipe_screen *pscreen = &nv10->screen->base.base;
 
        assert(nv10_render->buffer);
        pipe_buffer_reference(&nv10_render->buffer, NULL);
index 119af66dfd054e357184c34602964e1c7f7b9e56..9b38219b996d70cbc1d607c11e35586b8fe6db1f 100644 (file)
@@ -2,6 +2,7 @@
 #include "pipe/p_state.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_shader_tokens.h"
+#include "pipe/p_inlines.h"
 
 #include "tgsi/tgsi_parse.h"
 
@@ -460,7 +461,7 @@ nv10_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
                         const struct pipe_constant_buffer *buf )
 {
        struct nv10_context *nv10 = nv10_context(pipe);
-       struct pipe_winsys *ws = pipe->winsys;
+       struct pipe_screen *pscreen = pipe->screen;
 
        assert(shader < PIPE_SHADER_TYPES);
        assert(index == 0);
@@ -468,12 +469,12 @@ nv10_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
        if (buf) {
                void *mapped;
                if (buf->buffer && buf->buffer->size &&
-                    (mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
+                    (mapped = pipe_buffer_map(pscreen, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
                {
                        memcpy(nv10->constbuf[shader], mapped, buf->buffer->size);
                        nv10->constbuf_nr[shader] =
                                buf->buffer->size / (4 * sizeof(float));
-                       ws->buffer_unmap(ws, buf->buffer);
+                       pipe_buffer_unmap(pscreen, buf->buffer);
                }
        }
 }
index d0e788ac0368262e48ad907b76bf8ac38ea8e13a..441a4f75f3f84ddfde01116b4ed01d44e1b16b0a 100644 (file)
@@ -1,6 +1,7 @@
 #include "draw/draw_context.h"
 #include "pipe/p_context.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "nv10_context.h"
 #include "nv10_state.h"
@@ -15,6 +16,7 @@ boolean nv10_draw_elements( struct pipe_context *pipe,
 {
        struct nv10_context *nv10 = nv10_context( pipe );
        struct draw_context *draw = nv10->draw;
+       struct pipe_screen *pscreen = pipe->screen;
        unsigned i;
 
        nv10_emit_hw_state(nv10);
@@ -24,9 +26,8 @@ boolean nv10_draw_elements( struct pipe_context *pipe,
         */
        for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
                if (nv10->vtxbuf[i].buffer) {
-                       void *buf
-                               = pipe->winsys->buffer_map(pipe->winsys,
-                                               nv10->vtxbuf[i].buffer,
+                       void *buf =
+                               pipe_buffer_map(pscreen, nv10->vtxbuf[i].buffer,
                                                PIPE_BUFFER_USAGE_CPU_READ);
                        draw_set_mapped_vertex_buffer(draw, i, buf);
                }
@@ -34,8 +35,8 @@ boolean nv10_draw_elements( struct pipe_context *pipe,
        /* Map index buffer, if present */
        if (indexBuffer) {
                void *mapped_indexes
-                       = pipe->winsys->buffer_map(pipe->winsys, indexBuffer,
-                                       PIPE_BUFFER_USAGE_CPU_READ);
+                       = pipe_buffer_map(pscreen, indexBuffer,
+                                         PIPE_BUFFER_USAGE_CPU_READ);
                draw_set_mapped_element_buffer(draw, indexSize, mapped_indexes);
        }
        else {
@@ -55,12 +56,12 @@ boolean nv10_draw_elements( struct pipe_context *pipe,
         */
        for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
                if (nv10->vtxbuf[i].buffer) {
-                       pipe->winsys->buffer_unmap(pipe->winsys, nv10->vtxbuf[i].buffer);
+                       pipe_buffer_unmap(pscreen, nv10->vtxbuf[i].buffer);
                        draw_set_mapped_vertex_buffer(draw, i, NULL);
                }
        }
        if (indexBuffer) {
-               pipe->winsys->buffer_unmap(pipe->winsys, indexBuffer);
+               pipe_buffer_unmap(pscreen, indexBuffer);
                draw_set_mapped_element_buffer(draw, 0, NULL);
        }
 
index 8f9f27ebdcdc91438334a8873da2901a1e226e90..ddfcdb8057ae19535fa697e976a4e47531e8a701 100644 (file)
@@ -152,12 +152,11 @@ static void *
 nv20_vbuf_render_map_vertices( struct vbuf_render *render )
 {
        struct nv20_vbuf_render *nv20_render = nv20_vbuf_render(render);
-       struct pipe_winsys *winsys = nv20_render->nv20->pipe.winsys;
+       struct pipe_screen *pscreen = nv20_render->nv20->pipe.screen;
 
        if (nv20_render->pbuffer) {
-               return winsys->buffer_map(winsys,
-                               nv20_render->pbuffer,
-                               PIPE_BUFFER_USAGE_CPU_WRITE);
+               return pipe_buffer_map(pscreen, nv20_render->pbuffer,
+                                      PIPE_BUFFER_USAGE_CPU_WRITE);
        } else if (nv20_render->mbuffer) {
                return nv20_render->mbuffer;
        } else
@@ -173,10 +172,10 @@ nv20_vbuf_render_unmap_vertices( struct vbuf_render *render,
                ushort max_index )
 {
        struct nv20_vbuf_render *nv20_render = nv20_vbuf_render(render);
-       struct pipe_winsys *winsys = nv20_render->nv20->pipe.winsys;
+       struct pipe_screen *pscreen = nv20_render->nv20->pipe.screen;
 
        if (nv20_render->pbuffer)
-               winsys->buffer_unmap(winsys, nv20_render->pbuffer);
+               pipe_buffer_unmap(pscreen, nv20_render->pbuffer);
 }
 
 static boolean
@@ -358,7 +357,6 @@ nv20_vbuf_render_release_vertices( struct vbuf_render *render )
 {
        struct nv20_vbuf_render *nv20_render = nv20_vbuf_render(render);
        struct nv20_context *nv20 = nv20_render->nv20;
-       struct pipe_screen *pscreen = &nv20->screen->base.base;
 
        if (nv20_render->pbuffer) {
                pipe_buffer_reference(&nv20_render->pbuffer, NULL);
index ecec4f49a0c56c85a5ee50ce3aede23f5b4121e7..ed4084980f20148af52ae8aec449511eff03d531 100644 (file)
@@ -2,6 +2,7 @@
 #include "pipe/p_state.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_shader_tokens.h"
+#include "pipe/p_inlines.h"
 
 #include "tgsi/tgsi_parse.h"
 
@@ -453,7 +454,7 @@ nv20_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
                         const struct pipe_constant_buffer *buf )
 {
        struct nv20_context *nv20 = nv20_context(pipe);
-       struct pipe_winsys *ws = pipe->winsys;
+       struct pipe_screen *pscreen = pipe->screen;
 
        assert(shader < PIPE_SHADER_TYPES);
        assert(index == 0);
@@ -461,12 +462,12 @@ nv20_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
        if (buf) {
                void *mapped;
                if (buf->buffer && buf->buffer->size &&
-                    (mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
+                    (mapped = pipe_buffer_map(pscreen, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
                {
                        memcpy(nv20->constbuf[shader], mapped, buf->buffer->size);
                        nv20->constbuf_nr[shader] =
                                buf->buffer->size / (4 * sizeof(float));
-                       ws->buffer_unmap(ws, buf->buffer);
+                       pipe_buffer_unmap(pscreen, buf->buffer);
                }
        }
 }
index 24d8f4bef094f5e630f90152b0153e26492d6339..84d7db6c5e27c3274eea2f40340e06311db8a04e 100644 (file)
@@ -1,6 +1,7 @@
 #include "draw/draw_context.h"
 #include "pipe/p_context.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "nv20_context.h"
 #include "nv20_state.h"
@@ -13,6 +14,7 @@ boolean nv20_draw_elements( struct pipe_context *pipe,
                     unsigned indexSize,
                     unsigned prim, unsigned start, unsigned count)
 {
+       struct pipe_screen *pscreen = pipe->screen;
        struct nv20_context *nv20 = nv20_context( pipe );
        struct draw_context *draw = nv20->draw;
        unsigned i;
@@ -25,17 +27,17 @@ boolean nv20_draw_elements( struct pipe_context *pipe,
        for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
                if (nv20->vtxbuf[i].buffer) {
                        void *buf
-                               = pipe->winsys->buffer_map(pipe->winsys,
-                                               nv20->vtxbuf[i].buffer,
-                                               PIPE_BUFFER_USAGE_CPU_READ);
+                               = pipe_buffer_map(pscreen,
+                                                 nv20->vtxbuf[i].buffer,
+                                                 PIPE_BUFFER_USAGE_CPU_READ);
                        draw_set_mapped_vertex_buffer(draw, i, buf);
                }
        }
        /* Map index buffer, if present */
        if (indexBuffer) {
                void *mapped_indexes
-                       = pipe->winsys->buffer_map(pipe->winsys, indexBuffer,
-                                       PIPE_BUFFER_USAGE_CPU_READ);
+                       = pipe_buffer_map(pscreen, indexBuffer,
+                                         PIPE_BUFFER_USAGE_CPU_READ);
                draw_set_mapped_element_buffer(draw, indexSize, mapped_indexes);
        }
        else {
@@ -55,12 +57,12 @@ boolean nv20_draw_elements( struct pipe_context *pipe,
         */
        for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
                if (nv20->vtxbuf[i].buffer) {
-                       pipe->winsys->buffer_unmap(pipe->winsys, nv20->vtxbuf[i].buffer);
+                       pipe_buffer_unmap(pscreen, nv20->vtxbuf[i].buffer);
                        draw_set_mapped_vertex_buffer(draw, i, NULL);
                }
        }
        if (indexBuffer) {
-               pipe->winsys->buffer_unmap(pipe->winsys, indexBuffer);
+               pipe_buffer_unmap(pscreen, indexBuffer);
                draw_set_mapped_element_buffer(draw, 0, NULL);
        }
 
index 5db0e807ff52a98b7bce0fd5879f618b2a7213a1..c1e588902b23ef116a690ef00646bcb128c034e6 100644 (file)
@@ -1,6 +1,7 @@
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "pipe/p_shader_tokens.h"
 #include "tgsi/tgsi_parse.h"
@@ -645,8 +646,8 @@ out_err:
 static boolean
 nv20_vertprog_validate(struct nv20_context *nv20)
 { 
+       struct pipe_screen *pscreen = nv20->pipe.screen;
        struct nouveau_winsys *nvws = nv20->nvws;
-       struct pipe_winsys *ws = nv20->pipe.winsys;
        struct nouveau_grobj *rankine = nv20->screen->rankine;
        struct nv20_vertex_program *vp;
        struct pipe_buffer *constbuf;
@@ -749,8 +750,8 @@ nv20_vertprog_validate(struct nv20_context *nv20)
                float *map = NULL;
 
                if (constbuf) {
-                       map = ws->buffer_map(ws, constbuf,
-                                            PIPE_BUFFER_USAGE_CPU_READ);
+                       map = pipe_buffer_map(pscreen, constbuf,
+                                             PIPE_BUFFER_USAGE_CPU_READ);
                }
 
                for (i = 0; i < vp->nr_consts; i++) {
@@ -770,9 +771,8 @@ nv20_vertprog_validate(struct nv20_context *nv20)
                        OUT_RINGp ((uint32_t *)vpd->value, 4);
                }
 
-               if (constbuf) {
-                       ws->buffer_unmap(ws, constbuf);
-               }
+               if (constbuf)
+                       pipe_buffer_unmap(pscreen, constbuf);
        }
 
        /* Upload vtxprog */
index 956b4507267e12a7ef12189248f0e29f2b0cf7db..1d1c556fb11b8417479813696bec0a6ed4008aff 100644 (file)
@@ -1,6 +1,7 @@
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "pipe/p_shader_tokens.h"
 #include "tgsi/tgsi_parse.h"
@@ -798,12 +799,12 @@ static void
 nv30_fragprog_upload(struct nv30_context *nv30,
                     struct nv30_fragment_program *fp)
 {
-       struct pipe_winsys *ws = nv30->pipe.winsys;
+       struct pipe_screen *pscreen = nv30->pipe.screen;
        const uint32_t le = 1;
        uint32_t *map;
        int i;
 
-       map = ws->buffer_map(ws, fp->buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
+       map = pipe_buffer_map(pscreen, fp->buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
 
 #if 0
        for (i = 0; i < fp->insn_len; i++) {
@@ -825,7 +826,7 @@ nv30_fragprog_upload(struct nv30_context *nv30,
                }
        }
 
-       ws->buffer_unmap(ws, fp->buffer);
+       pipe_buffer_unmap(pscreen, fp->buffer);
 }
 
 static boolean
@@ -834,8 +835,7 @@ nv30_fragprog_validate(struct nv30_context *nv30)
        struct nv30_fragment_program *fp = nv30->fragprog;
        struct pipe_buffer *constbuf =
                nv30->constbuf[PIPE_SHADER_FRAGMENT];
-       struct pipe_screen *screen = nv30->pipe.screen;
-       struct pipe_winsys *ws = nv30->pipe.winsys;
+       struct pipe_screen *pscreen = nv30->pipe.screen;
        struct nouveau_stateobj *so;
        boolean new_consts = FALSE;
        int i;
@@ -850,7 +850,7 @@ nv30_fragprog_validate(struct nv30_context *nv30)
                return FALSE;
        }
 
-       fp->buffer = screen->buffer_create(screen, 0x100, 0, fp->insn_len * 4);
+       fp->buffer = pscreen->buffer_create(pscreen, 0x100, 0, fp->insn_len * 4);
        nv30_fragprog_upload(nv30, fp);
 
        so = so_new(8, 1);
@@ -872,7 +872,8 @@ update_constants:
        if (fp->nr_consts) {
                float *map;
                
-               map = ws->buffer_map(ws, constbuf, PIPE_BUFFER_USAGE_CPU_READ);
+               map = pipe_buffer_map(pscreen, constbuf,
+                                     PIPE_BUFFER_USAGE_CPU_READ);
                for (i = 0; i < fp->nr_consts; i++) {
                        struct nv30_fragment_program_data *fpd = &fp->consts[i];
                        uint32_t *p = &fp->insn[fpd->offset];
@@ -883,7 +884,7 @@ update_constants:
                        memcpy(p, cb, 4 * sizeof(float));
                        new_consts = TRUE;
                }
-               ws->buffer_unmap(ws, constbuf);
+               pipe_buffer_unmap(pscreen, constbuf);
 
                if (new_consts)
                        nv30_fragprog_upload(nv30, fp);
index 9b72bc30029892cc6b0b28e7dde367a21f7aba27..189656ec817aadb637c83b47fe31614400ab3d45 100644 (file)
@@ -1,5 +1,6 @@
 #include "pipe/p_context.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "nv30_context.h"
 #include "nv30_state.h"
@@ -108,7 +109,7 @@ nv30_vbo_static_attrib(struct nv30_context *nv30, struct nouveau_stateobj *so,
                       int attrib, struct pipe_vertex_element *ve,
                       struct pipe_vertex_buffer *vb)
 {
-       struct pipe_winsys *ws = nv30->pipe.winsys;
+       struct pipe_screen *pscreen = nv30->pipe.screen;
        struct nouveau_grobj *rankine = nv30->screen->rankine;
        unsigned type, ncomp;
        void *map;
@@ -116,7 +117,7 @@ nv30_vbo_static_attrib(struct nv30_context *nv30, struct nouveau_stateobj *so,
        if (nv30_vbo_format_to_hw(ve->src_format, &type, &ncomp))
                return FALSE;
 
-       map  = ws->buffer_map(ws, vb->buffer, PIPE_BUFFER_USAGE_CPU_READ);
+       map  = pipe_buffer_map(pscreen, vb->buffer, PIPE_BUFFER_USAGE_CPU_READ);
        map += vb->buffer_offset + ve->src_offset;
 
        switch (type) {
@@ -148,18 +149,17 @@ nv30_vbo_static_attrib(struct nv30_context *nv30, struct nouveau_stateobj *so,
                        so_data  (so, fui(v[0]));
                        break;
                default:
-                       ws->buffer_unmap(ws, vb->buffer);
+                       pipe_buffer_unmap(pscreen, vb->buffer);
                        return FALSE;
                }
        }
                break;
        default:
-               ws->buffer_unmap(ws, vb->buffer);
+               pipe_buffer_unmap(pscreen, vb->buffer);
                return FALSE;
        }
 
-       ws->buffer_unmap(ws, vb->buffer);
-
+       pipe_buffer_unmap(pscreen, vb->buffer);
        return TRUE;
 }
 
@@ -368,10 +368,10 @@ nv30_draw_elements_inline(struct pipe_context *pipe,
                          unsigned mode, unsigned start, unsigned count)
 {
        struct nv30_context *nv30 = nv30_context(pipe);
-       struct pipe_winsys *ws = pipe->winsys;
+       struct pipe_screen *pscreen = pipe->screen;
        void *map;
 
-       map = ws->buffer_map(ws, ib, PIPE_BUFFER_USAGE_CPU_READ);
+       map = pipe_buffer_map(pscreen, ib, PIPE_BUFFER_USAGE_CPU_READ);
        if (!ib) {
                NOUVEAU_ERR("failed mapping ib\n");
                return FALSE;
@@ -392,7 +392,7 @@ nv30_draw_elements_inline(struct pipe_context *pipe,
                break;
        }
 
-       ws->buffer_unmap(ws, ib);
+       pipe_buffer_unmap(pscreen, ib);
        return TRUE;
 }
 
index aec39aae9c9e99e6f6692daf3cf7a58e09a460d4..c7514efcfeaf6d753e6bc6c6b0c42dc09ef9f487 100644 (file)
@@ -1,6 +1,7 @@
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "pipe/p_shader_tokens.h"
 #include "tgsi/tgsi_parse.h"
@@ -645,7 +646,7 @@ out_err:
 static boolean
 nv30_vertprog_validate(struct nv30_context *nv30)
 { 
-       struct pipe_winsys *ws = nv30->pipe.winsys;
+       struct pipe_screen *pscreen = nv30->pipe.screen;
        struct nouveau_grobj *rankine = nv30->screen->rankine;
        struct nv30_vertex_program *vp;
        struct pipe_buffer *constbuf;
@@ -750,8 +751,8 @@ nv30_vertprog_validate(struct nv30_context *nv30)
                float *map = NULL;
 
                if (constbuf) {
-                       map = ws->buffer_map(ws, constbuf,
-                                            PIPE_BUFFER_USAGE_CPU_READ);
+                       map = pipe_buffer_map(pscreen, constbuf,
+                                             PIPE_BUFFER_USAGE_CPU_READ);
                }
 
                for (i = 0; i < vp->nr_consts; i++) {
@@ -771,9 +772,8 @@ nv30_vertprog_validate(struct nv30_context *nv30)
                        OUT_RINGp ((uint32_t *)vpd->value, 4);
                }
 
-               if (constbuf) {
-                       ws->buffer_unmap(ws, constbuf);
-               }
+               if (constbuf)
+                       pipe_buffer_unmap(pscreen, constbuf);
        }
 
        /* Upload vtxprog */
index e7d8cf93a99cccf87dc528eac73e42ccd93601aa..b2f19ecb699826bccd729640a6834b7dca64cf6e 100644 (file)
@@ -1,4 +1,5 @@
 #include "pipe/p_shader_tokens.h"
+#include "pipe/p_inlines.h"
 
 #include "util/u_pack_color.h"
 
@@ -231,7 +232,7 @@ nv40_draw_elements_swtnl(struct pipe_context *pipe,
                         unsigned mode, unsigned start, unsigned count)
 {
        struct nv40_context *nv40 = nv40_context(pipe);
-       struct pipe_winsys *ws = pipe->winsys;
+       struct pipe_screen *pscreen = pipe->screen;
        unsigned i;
        void *map;
 
@@ -241,13 +242,14 @@ nv40_draw_elements_swtnl(struct pipe_context *pipe,
        nv40_state_emit(nv40);
 
        for (i = 0; i < nv40->vtxbuf_nr; i++) {
-               map = ws->buffer_map(ws, nv40->vtxbuf[i].buffer,
+               map = pipe_buffer_map(pscreen, nv40->vtxbuf[i].buffer,
                                       PIPE_BUFFER_USAGE_CPU_READ);
                draw_set_mapped_vertex_buffer(nv40->draw, i, map);
        }
 
        if (idxbuf) {
-               map = ws->buffer_map(ws, idxbuf, PIPE_BUFFER_USAGE_CPU_READ);
+               map = pipe_buffer_map(pscreen, idxbuf,
+                                     PIPE_BUFFER_USAGE_CPU_READ);
                draw_set_mapped_element_buffer(nv40->draw, idxbuf_size, map);
        } else {
                draw_set_mapped_element_buffer(nv40->draw, 0, NULL);
@@ -256,21 +258,22 @@ nv40_draw_elements_swtnl(struct pipe_context *pipe,
        if (nv40->constbuf[PIPE_SHADER_VERTEX]) {
                const unsigned nr = nv40->constbuf_nr[PIPE_SHADER_VERTEX];
 
-               map = ws->buffer_map(ws, nv40->constbuf[PIPE_SHADER_VERTEX],
-                                    PIPE_BUFFER_USAGE_CPU_READ);
+               map = pipe_buffer_map(pscreen,
+                                     nv40->constbuf[PIPE_SHADER_VERTEX],
+                                     PIPE_BUFFER_USAGE_CPU_READ);
                draw_set_mapped_constant_buffer(nv40->draw, map, nr);
        }
 
        draw_arrays(nv40->draw, mode, start, count);
 
        for (i = 0; i < nv40->vtxbuf_nr; i++)
-               ws->buffer_unmap(ws, nv40->vtxbuf[i].buffer);
+               pipe_buffer_unmap(pscreen, nv40->vtxbuf[i].buffer);
 
        if (idxbuf)
-               ws->buffer_unmap(ws, idxbuf);
+               pipe_buffer_unmap(pscreen, idxbuf);
 
        if (nv40->constbuf[PIPE_SHADER_VERTEX])
-               ws->buffer_unmap(ws, nv40->constbuf[PIPE_SHADER_VERTEX]);
+               pipe_buffer_unmap(pscreen, nv40->constbuf[PIPE_SHADER_VERTEX]);
 
        draw_flush(nv40->draw);
        pipe->flush(pipe, 0, NULL);
index b45dfaa913d26613636464a1b7a0d1d2c49397a3..680976da56b5a3a48216fbcdbc996219d44cc0d9 100644 (file)
@@ -1,6 +1,7 @@
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "pipe/p_shader_tokens.h"
 #include "tgsi/tgsi_parse.h"
@@ -881,12 +882,12 @@ static void
 nv40_fragprog_upload(struct nv40_context *nv40,
                     struct nv40_fragment_program *fp)
 {
-       struct pipe_winsys *ws = nv40->pipe.winsys;
+       struct pipe_screen *pscreen = nv40->pipe.screen;
        const uint32_t le = 1;
        uint32_t *map;
        int i;
 
-       map = ws->buffer_map(ws, fp->buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
+       map = pipe_buffer_map(pscreen, fp->buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
 
 #if 0
        for (i = 0; i < fp->insn_len; i++) {
@@ -908,7 +909,7 @@ nv40_fragprog_upload(struct nv40_context *nv40,
                }
        }
 
-       ws->buffer_unmap(ws, fp->buffer);
+       pipe_buffer_unmap(pscreen, fp->buffer);
 }
 
 static boolean
@@ -917,8 +918,7 @@ nv40_fragprog_validate(struct nv40_context *nv40)
        struct nv40_fragment_program *fp = nv40->fragprog;
        struct pipe_buffer *constbuf =
                nv40->constbuf[PIPE_SHADER_FRAGMENT];
-       struct pipe_screen *screen = nv40->pipe.screen;
-       struct pipe_winsys *ws = nv40->pipe.winsys;
+       struct pipe_screen *pscreen = nv40->pipe.screen;
        struct nouveau_stateobj *so;
        boolean new_consts = FALSE;
        int i;
@@ -933,7 +933,7 @@ nv40_fragprog_validate(struct nv40_context *nv40)
                return FALSE;
        }
 
-       fp->buffer = screen->buffer_create(screen, 0x100, 0, fp->insn_len * 4);
+       fp->buffer = pscreen->buffer_create(pscreen, 0x100, 0, fp->insn_len * 4);
        nv40_fragprog_upload(nv40, fp);
 
        so = so_new(4, 1);
@@ -951,7 +951,8 @@ update_constants:
        if (fp->nr_consts) {
                float *map;
                
-               map = ws->buffer_map(ws, constbuf, PIPE_BUFFER_USAGE_CPU_READ);
+               map = pipe_buffer_map(pscreen, constbuf,
+                                     PIPE_BUFFER_USAGE_CPU_READ);
                for (i = 0; i < fp->nr_consts; i++) {
                        struct nv40_fragment_program_data *fpd = &fp->consts[i];
                        uint32_t *p = &fp->insn[fpd->offset];
@@ -962,7 +963,7 @@ update_constants:
                        memcpy(p, cb, 4 * sizeof(float));
                        new_consts = TRUE;
                }
-               ws->buffer_unmap(ws, constbuf);
+               pipe_buffer_unmap(pscreen, constbuf);
 
                if (new_consts)
                        nv40_fragprog_upload(nv40, fp);
index 24bd1165397b51ac08388c4e82bf8c3bdcc658f6..b2753b8e2e052a655a7f89c28e5d3243ec5c84ed 100644 (file)
@@ -1,5 +1,6 @@
 #include "pipe/p_context.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "nv40_context.h"
 #include "nv40_state.h"
@@ -108,7 +109,7 @@ nv40_vbo_static_attrib(struct nv40_context *nv40, struct nouveau_stateobj *so,
                       int attrib, struct pipe_vertex_element *ve,
                       struct pipe_vertex_buffer *vb)
 {
-       struct pipe_winsys *ws = nv40->pipe.winsys;
+       struct pipe_screen *pscreen = nv40->pipe.screen;
        struct nouveau_grobj *curie = nv40->screen->curie;
        unsigned type, ncomp;
        void *map;
@@ -116,7 +117,7 @@ nv40_vbo_static_attrib(struct nv40_context *nv40, struct nouveau_stateobj *so,
        if (nv40_vbo_format_to_hw(ve->src_format, &type, &ncomp))
                return FALSE;
 
-       map  = ws->buffer_map(ws, vb->buffer, PIPE_BUFFER_USAGE_CPU_READ);
+       map  = pipe_buffer_map(pscreen, vb->buffer, PIPE_BUFFER_USAGE_CPU_READ);
        map += vb->buffer_offset + ve->src_offset;
 
        switch (type) {
@@ -148,17 +149,17 @@ nv40_vbo_static_attrib(struct nv40_context *nv40, struct nouveau_stateobj *so,
                        so_data  (so, fui(v[0]));
                        break;
                default:
-                       ws->buffer_unmap(ws, vb->buffer);
+                       pipe_buffer_unmap(pscreen, vb->buffer);
                        return FALSE;
                }
        }
                break;
        default:
-               ws->buffer_unmap(ws, vb->buffer);
+               pipe_buffer_unmap(pscreen, vb->buffer);
                return FALSE;
        }
 
-       ws->buffer_unmap(ws, vb->buffer);
+       pipe_buffer_unmap(pscreen, vb->buffer);
 
        return TRUE;
 }
@@ -367,10 +368,10 @@ nv40_draw_elements_inline(struct pipe_context *pipe,
                          unsigned mode, unsigned start, unsigned count)
 {
        struct nv40_context *nv40 = nv40_context(pipe);
-       struct pipe_winsys *ws = pipe->winsys;
+       struct pipe_screen *pscreen = pipe->screen;
        void *map;
 
-       map = ws->buffer_map(ws, ib, PIPE_BUFFER_USAGE_CPU_READ);
+       map = pipe_buffer_map(pscreen, ib, PIPE_BUFFER_USAGE_CPU_READ);
        if (!ib) {
                NOUVEAU_ERR("failed mapping ib\n");
                return FALSE;
@@ -391,7 +392,7 @@ nv40_draw_elements_inline(struct pipe_context *pipe,
                break;
        }
 
-       ws->buffer_unmap(ws, ib);
+       pipe_buffer_unmap(pscreen, ib);
        return TRUE;
 }
 
index f32d4d690ce5cfbb21905d17fb79b997bbe319ac..e75e8d3f4243a2fe0ba619a1056ae1a4e8665f70 100644 (file)
@@ -1,6 +1,7 @@
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "pipe/p_shader_tokens.h"
 #include "tgsi/tgsi_parse.h"
@@ -855,7 +856,7 @@ out_err:
 static boolean
 nv40_vertprog_validate(struct nv40_context *nv40)
 { 
-       struct pipe_winsys *ws = nv40->pipe.winsys;
+       struct pipe_screen *pscreen = nv40->pipe.screen;
        struct nouveau_grobj *curie = nv40->screen->curie;
        struct nv40_vertex_program *vp;
        struct pipe_buffer *constbuf;
@@ -980,8 +981,8 @@ check_gpu_resources:
                float *map = NULL;
 
                if (constbuf) {
-                       map = ws->buffer_map(ws, constbuf,
-                                            PIPE_BUFFER_USAGE_CPU_READ);
+                       map = pipe_buffer_map(pscreen, constbuf,
+                                             PIPE_BUFFER_USAGE_CPU_READ);
                }
 
                for (i = 0; i < vp->nr_consts; i++) {
@@ -1002,7 +1003,7 @@ check_gpu_resources:
                }
 
                if (constbuf)
-                       ws->buffer_unmap(ws, constbuf);
+                       pscreen->buffer_unmap(pscreen, constbuf);
        }
 
        /* Upload vtxprog */
index 9d6427e2bc81422b0c5e35eada442fe488b53ae1..5f7d06dbecbf6479aa522444da28c2281f74d8fc 100644 (file)
@@ -2235,7 +2235,7 @@ nv50_program_upload_data(struct nv50_context *nv50, float *map,
 static void
 nv50_program_validate_data(struct nv50_context *nv50, struct nv50_program *p)
 {
-       struct pipe_winsys *ws = nv50->pipe.winsys;
+       struct pipe_screen *pscreen = nv50->pipe.screen;
 
        if (!p->data[0] && p->immd_nr) {
                struct nouveau_resource *heap = nv50->screen->immd_heap[0];
@@ -2274,13 +2274,13 @@ nv50_program_validate_data(struct nv50_context *nv50, struct nv50_program *p)
 
        if (p->param_nr) {
                unsigned cbuf = NV50_CB_PVP;
-               float *map = ws->buffer_map(ws, nv50->constbuf[p->type],
-                                           PIPE_BUFFER_USAGE_CPU_READ);
+               float *map = pipe_buffer_map(pscreen, nv50->constbuf[p->type],
+                                            PIPE_BUFFER_USAGE_CPU_READ);
                if (p->type == PIPE_SHADER_FRAGMENT)
                        cbuf = NV50_CB_PFP;
                nv50_program_upload_data(nv50, map, p->data[1]->start,
                                         p->param_nr, cbuf);
-               ws->buffer_unmap(ws, nv50->constbuf[p->type]);
+               pipe_buffer_unmap(pscreen, nv50->constbuf[p->type]);
        }
 }
 
index c77ffe84e73dc9f83a903916c1ffdcd234bdd975..f57540150a853038e72c275597472bd40ecbb6a2 100644 (file)
@@ -105,7 +105,7 @@ static boolean
 nv50_query_result(struct pipe_context *pipe, struct pipe_query *pq,
                  boolean wait, uint64_t *result)
 {
-       struct pipe_winsys *ws = pipe->winsys;
+       struct pipe_screen *pscreen = pipe->screen;
        struct nv50_query *q = nv50_query(pq);
 
        /*XXX: Want to be able to return FALSE here instead of blocking
@@ -113,11 +113,11 @@ nv50_query_result(struct pipe_context *pipe, struct pipe_query *pq,
         */
 
        if (!q->ready) {
-               uint32_t *map = ws->buffer_map(ws, q->buffer,
-                                              PIPE_BUFFER_USAGE_CPU_READ);
+               uint32_t *map = pipe_buffer_map(pscreen, q->buffer,
+                                               PIPE_BUFFER_USAGE_CPU_READ);
                q->result = map[1];
                q->ready = TRUE;
-               ws->buffer_unmap(ws, q->buffer);
+               pipe_buffer_unmap(pscreen, q->buffer);
        }
 
        *result = q->result;
index a9b53a0f2e3adc302a4e65629c50244c7b565364..f81929f2387f909875dd4a3ae241c0eaa3caf247 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "pipe/p_context.h"
 #include "pipe/p_state.h"
+#include "pipe/p_inlines.h"
 
 #include "nv50_context.h"
 
@@ -165,8 +166,10 @@ nv50_draw_elements(struct pipe_context *pipe,
        struct nv50_context *nv50 = nv50_context(pipe);
        struct nouveau_channel *chan = nv50->screen->tesla->channel;
        struct nouveau_grobj *tesla = nv50->screen->tesla;
-       struct pipe_winsys *ws = pipe->winsys;
-       void *map = ws->buffer_map(ws, indexBuffer, PIPE_BUFFER_USAGE_CPU_READ);
+       struct pipe_screen *pscreen = pipe->screen;
+       void *map;
+       
+       map = pipe_buffer_map(pscreen, indexBuffer, PIPE_BUFFER_USAGE_CPU_READ);
 
        nv50_state_validate(nv50);
 
@@ -193,6 +196,7 @@ nv50_draw_elements(struct pipe_context *pipe,
        BEGIN_RING(chan, tesla, NV50TCL_VERTEX_END, 1);
        OUT_RING  (chan, 0);
 
+       pipe_buffer_unmap(pscreen, indexBuffer);
        pipe->flush(pipe, 0, NULL);
        return TRUE;
 }
index 621ad2a80706f2bff9e96e0abad9bbb4e06a45c2..54c3b26c755ede7f50fb29246393cc630451ed93 100644 (file)
@@ -3,8 +3,7 @@ include $(TOP)/configs/current
 
 LIBNAME = nouveaudrm
 
-C_SOURCES = nouveau_drm_api.c \
-           nouveau_winsys_pipe.c
+C_SOURCES = nouveau_drm_api.c
 
 LIBRARY_INCLUDES = $(shell pkg-config libdrm libdrm_nouveau --cflags-only-I)
 LIBRARY_DEFINES = $(shell pkg-config libdrm libdrm_nouveau --cflags-only-other)
index 22c53f6ea9809695d1a54bddbf8fce11b9f7fed8..395b21ec7ab7e36acad6f58ebb67f12fa384956d 100644 (file)
@@ -1,12 +1,16 @@
+#include "pipe/p_context.h"
+#include "pipe/p_state.h"
 #include "util/u_memory.h"
 
 #include "nouveau_drm_api.h"
-#include "nouveau_winsys_pipe.h"
 
 #include "nouveau_drmif.h"
 #include "nouveau_channel.h"
 #include "nouveau_bo.h"
 
+#include "nouveau/nouveau_winsys.h"
+#include "nouveau/nouveau_screen.h"
+
 static struct pipe_surface *
 dri_surface_from_handle(struct pipe_screen *screen,
                         unsigned handle,
@@ -58,7 +62,7 @@ dri_surface_from_handle(struct pipe_screen *screen,
 static struct pipe_surface *
 nouveau_dri1_front_surface(struct pipe_context *pipe)
 {
-       return nouveau_screen(pipe->screen)->front;
+       return nouveau_winsys_screen(pipe->screen)->front;
 }
 
 static struct dri1_api nouveau_dri1_api = {
@@ -69,6 +73,7 @@ static struct pipe_screen *
 nouveau_drm_create_screen(int fd, struct drm_create_screen_arg *arg)
 {
        struct dri1_create_screen_arg *dri1 = (void *)arg;
+       struct nouveau_winsys *nvws;
        struct pipe_winsys *ws;
        struct nouveau_device *dev = NULL;
        struct pipe_screen *(*init)(struct pipe_winsys *,
@@ -107,20 +112,20 @@ nouveau_drm_create_screen(int fd, struct drm_create_screen_arg *arg)
                return NULL;
        }
 
-       ws = nouveau_pipe_winsys_new(dev);
-       if (!ws) {
+       nvws = CALLOC_STRUCT(nouveau_winsys);
+       if (!nvws) {
                nouveau_device_close(&dev);
                return NULL;
        }
+       ws = &nvws->base;
 
-       nouveau_pipe_winsys(ws)->pscreen = init(ws, dev);
-       if (!nouveau_pipe_winsys(ws)->pscreen) {
+       nvws->pscreen = init(ws, dev);
+       if (!nvws->pscreen) {
                ws->destroy(ws);
                return NULL;
        }
 
        if (arg->mode == DRM_CREATE_DRI1) {
-               struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
                struct nouveau_dri *nvdri = dri1->ddx_info;
                enum pipe_format format;
 
@@ -129,14 +134,14 @@ nouveau_drm_create_screen(int fd, struct drm_create_screen_arg *arg)
                else
                        format = PIPE_FORMAT_A8R8G8B8_UNORM;
 
-               nvpws->front = dri_surface_from_handle(nvpws->pscreen,
+               nvws->front = dri_surface_from_handle(nvws->pscreen,
                                                       nvdri->front_offset,
                                                       format,
                                                       nvdri->width,
                                                       nvdri->height,
                                                       nvdri->front_pitch *
                                                       (nvdri->bpp / 8));
-               if (!nvpws->front) {
+               if (!nvws->front) {
                        debug_printf("%s: error referencing front buffer\n",
                                     __func__);
                        ws->destroy(ws);
@@ -146,15 +151,15 @@ nouveau_drm_create_screen(int fd, struct drm_create_screen_arg *arg)
                dri1->api = &nouveau_dri1_api;
        }
 
-       return nouveau_pipe_winsys(ws)->pscreen;
+       return nvws->pscreen;
 }
 
 static struct pipe_context *
 nouveau_drm_create_context(struct pipe_screen *pscreen)
 {
-       struct nouveau_pipe_winsys *nvpws = nouveau_screen(pscreen);
+       struct nouveau_winsys *nvws = nouveau_winsys_screen(pscreen);
        struct pipe_context *(*init)(struct pipe_screen *, unsigned);
-       unsigned chipset = nvpws->channel->device->chipset;
+       unsigned chipset = nouveau_screen(pscreen)->device->chipset;
        int i;
 
        switch (chipset & 0xf0) {
@@ -185,19 +190,19 @@ nouveau_drm_create_context(struct pipe_screen *pscreen)
        }
 
        /* Find a free slot for a pipe context, allocate a new one if needed */
-       for (i = 0; i < nvpws->nr_pctx; i++) {
-               if (nvpws->pctx[i] == NULL)
+       for (i = 0; i < nvws->nr_pctx; i++) {
+               if (nvws->pctx[i] == NULL)
                        break;
        }
 
-       if (i == nvpws->nr_pctx) {
-               nvpws->nr_pctx++;
-               nvpws->pctx = realloc(nvpws->pctx,
-                                     sizeof(*nvpws->pctx) * nvpws->nr_pctx);
+       if (i == nvws->nr_pctx) {
+               nvws->nr_pctx++;
+               nvws->pctx = realloc(nvws->pctx,
+                                     sizeof(*nvws->pctx) * nvws->nr_pctx);
        }
 
-       nvpws->pctx[i] = init(pscreen, i);
-       return nvpws->pctx[i];
+       nvws->pctx[i] = init(pscreen, i);
+       return nvws->pctx[i];
 }
 
 static boolean
@@ -211,42 +216,41 @@ static struct pipe_buffer *
 nouveau_drm_pb_from_handle(struct pipe_screen *pscreen, const char *name,
                           unsigned handle)
 {
-       struct nouveau_pipe_winsys *nvpws = nouveau_screen(pscreen);
-       struct nouveau_device *dev = nvpws->channel->device;
-       struct nouveau_pipe_buffer *nvpb;
+       struct nouveau_device *dev = nouveau_screen(pscreen)->device;
+       struct pipe_buffer *pb;
        int ret;
 
-       nvpb = CALLOC_STRUCT(nouveau_pipe_buffer);
-       if (!nvpb)
+       pb = CALLOC(1, sizeof(struct pipe_buffer) + sizeof(struct nouveau_bo*));
+       if (!pb)
                return NULL;
 
-       ret = nouveau_bo_handle_ref(dev, handle, &nvpb->bo);
+       ret = nouveau_bo_handle_ref(dev, handle, (struct nouveau_bo**)(pb+1));
        if (ret) {
                debug_printf("%s: ref name 0x%08x failed with %d\n",
                             __func__, handle, ret);
-               FREE(nvpb);
+               FREE(pb);
                return NULL;
        }
 
-       pipe_reference_init(&nvpb->base.reference, 1);
-       nvpb->base.screen = pscreen;
-       nvpb->base.alignment = 0;
-       nvpb->base.usage = PIPE_BUFFER_USAGE_GPU_READ_WRITE |
-                          PIPE_BUFFER_USAGE_CPU_READ_WRITE;
-       nvpb->base.size = nvpb->bo->size;
-       return &nvpb->base;
+       pipe_reference_init(&pb->reference, 1);
+       pb->screen = pscreen;
+       pb->alignment = 0;
+       pb->usage = PIPE_BUFFER_USAGE_GPU_READ_WRITE |
+                   PIPE_BUFFER_USAGE_CPU_READ_WRITE;
+       pb->size = nouveau_bo(pb)->size;
+       return pb;
 }
 
 static boolean
 nouveau_drm_handle_from_pb(struct pipe_screen *pscreen, struct pipe_buffer *pb,
                           unsigned *handle)
 {
-       struct nouveau_pipe_buffer *nvpb = nouveau_pipe_buffer(pb);
+       struct nouveau_bo *bo = nouveau_bo(pb);
 
-       if (!nvpb)
+       if (!bo)
                return FALSE;
 
-       *handle = nvpb->bo->handle;
+       *handle = bo->handle;
        return TRUE;
 }
 
@@ -254,12 +258,12 @@ static boolean
 nouveau_drm_name_from_pb(struct pipe_screen *pscreen, struct pipe_buffer *pb,
                         unsigned *handle)
 {
-       struct nouveau_pipe_buffer *nvpb = nouveau_pipe_buffer(pb);
+       struct nouveau_bo *bo = nouveau_bo(pb);
 
-       if (!nvpb)
+       if (!bo)
                return FALSE;
 
-       return nouveau_bo_handle_get(nvpb->bo, handle) == 0;
+       return nouveau_bo_handle_get(bo, handle) == 0;
 }
 
 struct drm_api drm_api_hooks = {
index cc237bfc13ac0a1848d31718b08cd1289ceb406f..e61e0e0957a63dd6975f0c678d3eb9d1bd4e6755 100644 (file)
@@ -1,7 +1,34 @@
 #ifndef __NOUVEAU_DRM_API_H__
 #define __NOUVEAU_DRM_API_H__
+
 #include "state_tracker/drm_api.h"
 #include "state_tracker/dri1_api.h"
+
+#include "pipe/internal/p_winsys_screen.h"
+
 #include "nouveau_dri.h"
 
+struct nouveau_winsys {
+       struct pipe_winsys base;
+
+       struct pipe_screen *pscreen;
+
+       unsigned nr_pctx;
+       struct pipe_context **pctx;
+
+       struct pipe_surface *front;
+};
+
+static INLINE struct nouveau_winsys *
+nouveau_winsys(struct pipe_winsys *ws)
+{
+       return (struct nouveau_winsys *)ws;
+}
+
+static INLINE struct nouveau_winsys *
+nouveau_winsys_screen(struct pipe_screen *pscreen)
+{
+       return nouveau_winsys(pscreen->winsys);
+}
+
 #endif
diff --git a/src/gallium/winsys/drm/nouveau/drm/nouveau_winsys_pipe.c b/src/gallium/winsys/drm/nouveau/drm/nouveau_winsys_pipe.c
deleted file mode 100644 (file)
index 2dca8cd..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-#include "pipe/internal/p_winsys_screen.h"
-#include <pipe/p_defines.h>
-#include <pipe/p_inlines.h>
-#include <util/u_memory.h>
-
-#include "nouveau_winsys_pipe.h"
-
-#include "nouveau_drmif.h"
-#include "nouveau_bo.h"
-
-static const char *
-nouveau_get_name(struct pipe_winsys *pws)
-{
-       return "Nouveau/DRI";
-}
-
-static uint32_t
-nouveau_flags_from_usage(struct pipe_winsys *ws, unsigned usage)
-{
-       struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
-       struct pipe_screen *pscreen = nvpws->pscreen;
-       uint32_t flags = NOUVEAU_BO_LOCAL;
-
-       if (usage & NOUVEAU_BUFFER_USAGE_TRANSFER)
-               flags |= NOUVEAU_BO_GART;
-
-       if (usage & PIPE_BUFFER_USAGE_PIXEL) {
-               if (usage & NOUVEAU_BUFFER_USAGE_TEXTURE)
-                       flags |= NOUVEAU_BO_GART;
-               if (!(usage & PIPE_BUFFER_USAGE_CPU_READ_WRITE))
-                       flags |= NOUVEAU_BO_VRAM;
-
-               switch (nvpws->channel->device->chipset & 0xf0) {
-               case 0x50:
-               case 0x80:
-               case 0x90:
-                       flags |= NOUVEAU_BO_TILED;
-                       if (usage & NOUVEAU_BUFFER_USAGE_ZETA)
-                               flags |= NOUVEAU_BO_ZTILE;
-                       break;
-               default:
-                       break;
-               }
-       }
-
-       if (usage & PIPE_BUFFER_USAGE_VERTEX) {
-               if (pscreen->get_param(pscreen, NOUVEAU_CAP_HW_VTXBUF))
-                       flags |= NOUVEAU_BO_GART;
-       }
-
-       if (usage & PIPE_BUFFER_USAGE_INDEX) {
-               if (pscreen->get_param(pscreen, NOUVEAU_CAP_HW_IDXBUF))
-                       flags |= NOUVEAU_BO_GART;
-       }
-
-       return flags;
-}
-
-static struct pipe_buffer *
-nouveau_pipe_bo_create(struct pipe_winsys *ws, unsigned alignment,
-                      unsigned usage, unsigned size)
-{
-       struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
-       struct nouveau_device *dev = nvpws->channel->device;
-       struct nouveau_pipe_buffer *nvbuf;
-       uint32_t flags;
-
-       nvbuf = CALLOC_STRUCT(nouveau_pipe_buffer);
-       if (!nvbuf)
-               return NULL;
-       pipe_reference_init(&nvbuf->base.reference, 1);
-       nvbuf->base.alignment = alignment;
-       nvbuf->base.usage = usage;
-       nvbuf->base.size = size;
-
-       flags = nouveau_flags_from_usage(ws, usage);
-       flags |= NOUVEAU_BO_MAP;
-       if (nouveau_bo_new(dev, flags, alignment, size, &nvbuf->bo)) {
-               FREE(nvbuf);
-               return NULL;
-       }
-
-       return &nvbuf->base;
-}
-
-static struct pipe_buffer *
-nouveau_pipe_bo_user_create(struct pipe_winsys *ws, void *ptr, unsigned bytes)
-{
-       struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
-       struct nouveau_device *dev = nvpws->channel->device;
-       struct nouveau_pipe_buffer *nvbuf;
-
-       nvbuf = CALLOC_STRUCT(nouveau_pipe_buffer);
-       if (!nvbuf)
-               return NULL;
-       pipe_reference_init(&nvbuf->base.reference, 1);
-       nvbuf->base.size = bytes;
-
-       if (nouveau_bo_user(dev, ptr, bytes, &nvbuf->bo)) {
-               FREE(nvbuf);
-               return NULL;
-       }
-
-       return &nvbuf->base;
-}
-
-static void
-nouveau_pipe_bo_del(struct pipe_buffer *buf)
-{
-       struct nouveau_pipe_buffer *nvbuf = nouveau_pipe_buffer(buf);
-
-       nouveau_bo_ref(NULL, &nvbuf->bo);
-       FREE(nvbuf);
-}
-
-static void *
-nouveau_pipe_bo_map(struct pipe_winsys *pws, struct pipe_buffer *buf,
-                   unsigned flags)
-{
-       struct nouveau_pipe_buffer *nvbuf = nouveau_pipe_buffer(buf);
-       uint32_t map_flags = 0;
-
-       if (flags & PIPE_BUFFER_USAGE_CPU_READ)
-               map_flags |= NOUVEAU_BO_RD;
-       if (flags & PIPE_BUFFER_USAGE_CPU_WRITE)
-               map_flags |= NOUVEAU_BO_WR;
-
-       if (nouveau_bo_map(nvbuf->bo, map_flags))
-               return NULL;
-       return nvbuf->bo->map;
-}
-
-static void
-nouveau_pipe_bo_unmap(struct pipe_winsys *pws, struct pipe_buffer *buf)
-{
-       struct nouveau_pipe_buffer *nvbuf = nouveau_pipe_buffer(buf);
-
-       nouveau_bo_unmap(nvbuf->bo);
-}
-
-static void
-nouveau_pipe_fence_reference(struct pipe_winsys *ws,
-                            struct pipe_fence_handle **ptr,
-                            struct pipe_fence_handle *pfence)
-{
-       *ptr = pfence;
-}
-
-static int
-nouveau_pipe_fence_signalled(struct pipe_winsys *ws,
-                            struct pipe_fence_handle *pfence, unsigned flag)
-{
-       return 0;
-}
-
-static int
-nouveau_pipe_fence_finish(struct pipe_winsys *ws,
-                         struct pipe_fence_handle *pfence, unsigned flag)
-{
-       return 0;
-}
-
-static void
-nouveau_destroy(struct pipe_winsys *ws)
-{
-       struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
-
-       nouveau_device_close(&nvpws->channel->device);
-       FREE(nvpws);
-}
-
-struct pipe_winsys *
-nouveau_pipe_winsys_new(struct nouveau_device *dev)
-{
-       struct nouveau_pipe_winsys *nvpws;
-       int ret;
-
-       nvpws = CALLOC_STRUCT(nouveau_pipe_winsys);
-       if (!nvpws)
-               return NULL;
-
-       ret = nouveau_channel_alloc(dev, 0xbeef0201, 0xbeef0202,
-                                   &nvpws->channel);
-       if (ret) {
-               debug_printf("%s: error opening GPU channel: %d\n",
-                            __func__, ret);
-               FREE(nvpws);
-               return NULL;
-       }
-       nvpws->next_handle = 0x77000000;
-
-       nvpws->base.buffer_create = nouveau_pipe_bo_create;
-       nvpws->base.buffer_destroy = nouveau_pipe_bo_del;
-       nvpws->base.user_buffer_create = nouveau_pipe_bo_user_create;
-       nvpws->base.buffer_map = nouveau_pipe_bo_map;
-       nvpws->base.buffer_unmap = nouveau_pipe_bo_unmap;
-
-       nvpws->base.fence_reference = nouveau_pipe_fence_reference;
-       nvpws->base.fence_signalled = nouveau_pipe_fence_signalled;
-       nvpws->base.fence_finish = nouveau_pipe_fence_finish;
-
-       nvpws->base.get_name = nouveau_get_name;
-       nvpws->base.destroy = nouveau_destroy;
-       return &nvpws->base;
-}
diff --git a/src/gallium/winsys/drm/nouveau/drm/nouveau_winsys_pipe.h b/src/gallium/winsys/drm/nouveau/drm/nouveau_winsys_pipe.h
deleted file mode 100644 (file)
index ec10f1e..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef NOUVEAU_PIPE_WINSYS_H
-#define NOUVEAU_PIPE_WINSYS_H
-
-#include "pipe/internal/p_winsys_screen.h"
-#include "pipe/p_context.h"
-
-#include "nouveau/nouveau_winsys.h"
-
-#include "nouveau_device.h"
-
-struct nouveau_pipe_buffer {
-       struct pipe_buffer base;
-       struct nouveau_bo *bo;
-};
-
-static INLINE struct nouveau_pipe_buffer *
-nouveau_pipe_buffer(struct pipe_buffer *buf)
-{
-       return (struct nouveau_pipe_buffer *)buf;
-}
-
-struct nouveau_pipe_winsys {
-       struct pipe_winsys base;
-
-       struct pipe_screen *pscreen;
-
-       struct nouveau_channel *channel;
-       uint32_t next_handle;
-
-       unsigned nr_pctx;
-       struct pipe_context **pctx;
-
-       struct pipe_surface *front;
-};
-
-static INLINE struct nouveau_pipe_winsys *
-nouveau_pipe_winsys(struct pipe_winsys *ws)
-{
-       return (struct nouveau_pipe_winsys *)ws;
-}
-
-static INLINE struct nouveau_pipe_winsys *
-nouveau_screen(struct pipe_screen *pscreen)
-{
-       return nouveau_pipe_winsys(pscreen->winsys);
-}
-
-struct pipe_winsys *
-nouveau_pipe_winsys_new(struct nouveau_device *);
-
-struct nouveau_winsys *
-nouveau_winsys_new(struct pipe_winsys *ws);
-
-#endif