Module: Mesa
Branch: nvfx-next-7b
Commit: 277ceb28a8d0c245ae8ec190741fab029a509993
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=277ceb28a8d0c245ae8ec190741fab029a509993

Author: Luca Barbieri <l...@luca-barbieri.com>
Date:   Wed Aug 11 10:09:47 2010 +0200

nvfx: access buffer data directly

---

 src/gallium/drivers/nvfx/nvfx_draw.c     |   27 ++++-----------------------
 src/gallium/drivers/nvfx/nvfx_fragprog.c |    6 ++----
 src/gallium/drivers/nvfx/nvfx_vertprog.c |   12 +++---------
 3 files changed, 9 insertions(+), 36 deletions(-)

diff --git a/src/gallium/drivers/nvfx/nvfx_draw.c 
b/src/gallium/drivers/nvfx/nvfx_draw.c
index 3898bc7..4713fb5 100644
--- a/src/gallium/drivers/nvfx/nvfx_draw.c
+++ b/src/gallium/drivers/nvfx/nvfx_draw.c
@@ -9,6 +9,7 @@
 #include "draw/draw_pipe.h"
 
 #include "nvfx_context.h"
+#include "nvfx_resource.h"
 
 /* Simple, but crappy, swtnl path, hopefully we wont need to hit this very
  * often at all.  Uses "quadro style" vertex submission + a fixed vertex
@@ -225,9 +226,6 @@ void
 nvfx_draw_vbo_swtnl(struct pipe_context *pipe, const struct pipe_draw_info* 
info)
 {
        struct nvfx_context *nvfx = nvfx_context(pipe);
-       struct pipe_transfer *vb_transfer[PIPE_MAX_ATTRIBS];
-       struct pipe_transfer *ib_transfer = NULL;
-       struct pipe_transfer *cb_transfer = NULL;
        unsigned i;
        void *map;
 
@@ -236,16 +234,12 @@ nvfx_draw_vbo_swtnl(struct pipe_context *pipe, const 
struct pipe_draw_info* info
        nvfx_state_emit(nvfx);
 
        for (i = 0; i < nvfx->vtxbuf_nr; i++) {
-               map = pipe_buffer_map(pipe, nvfx->vtxbuf[i].buffer,
-                                      PIPE_TRANSFER_READ,
-                                     &vb_transfer[i]);
+               map = nvfx_buffer(nvfx->vtxbuf[i].buffer)->data + 
nvfx->vtxbuf[i].buffer_offset;
                draw_set_mapped_vertex_buffer(nvfx->draw, i, map);
        }
 
        if (info->indexed) {
-               map = pipe_buffer_map(pipe, nvfx->idxbuf.buffer,
-                                     PIPE_TRANSFER_READ,
-                                     &ib_transfer);
+               map = nvfx_buffer(nvfx->idxbuf.buffer)->data + 
nvfx->idxbuf.offset;
                draw_set_mapped_element_buffer(nvfx->draw, 
nvfx->idxbuf.index_size, info->index_bias, map);
        } else {
                draw_set_mapped_element_buffer(nvfx->draw, 0, 0, NULL);
@@ -254,26 +248,13 @@ nvfx_draw_vbo_swtnl(struct pipe_context *pipe, const 
struct pipe_draw_info* info
        if (nvfx->constbuf[PIPE_SHADER_VERTEX]) {
                const unsigned nr = nvfx->constbuf_nr[PIPE_SHADER_VERTEX];
 
-               map = pipe_buffer_map(pipe,
-                                     nvfx->constbuf[PIPE_SHADER_VERTEX],
-                                     PIPE_TRANSFER_READ,
-                                     &cb_transfer);
+               map = nvfx_buffer(nvfx->constbuf[PIPE_SHADER_VERTEX])->data;
                draw_set_mapped_constant_buffer(nvfx->draw, PIPE_SHADER_VERTEX, 
0,
                                                 map, nr);
        }
 
        draw_arrays_instanced(nvfx->draw, info->mode, info->start, info->count, 
info->start_instance, info->instance_count);
 
-       for (i = 0; i < nvfx->vtxbuf_nr; i++)
-               pipe_buffer_unmap(pipe, nvfx->vtxbuf[i].buffer, vb_transfer[i]);
-
-       if (nvfx->idxbuf.buffer)
-               pipe_buffer_unmap(pipe, nvfx->idxbuf.buffer, ib_transfer);
-
-       if (nvfx->constbuf[PIPE_SHADER_VERTEX])
-               pipe_buffer_unmap(pipe, nvfx->constbuf[PIPE_SHADER_VERTEX],
-                                 cb_transfer);
-
        draw_flush(nvfx->draw);
 }
 
diff --git a/src/gallium/drivers/nvfx/nvfx_fragprog.c 
b/src/gallium/drivers/nvfx/nvfx_fragprog.c
index 5973139..4b82308 100644
--- a/src/gallium/drivers/nvfx/nvfx_fragprog.c
+++ b/src/gallium/drivers/nvfx/nvfx_fragprog.c
@@ -10,6 +10,7 @@
 
 #include "nvfx_context.h"
 #include "nvfx_shader.h"
+#include "nvfx_resource.h"
 
 #define MAX_CONSTS 128
 #define MAX_IMM 32
@@ -977,10 +978,8 @@ nvfx_fragprog_validate(struct nvfx_context *nvfx)
 
                if(nvfx->constbuf[PIPE_SHADER_FRAGMENT]) {
                        struct pipe_resource* constbuf = 
nvfx->constbuf[PIPE_SHADER_FRAGMENT];
-                       // TODO: avoid using transfers, just directly the buffer
-                       struct pipe_transfer* transfer;
                        // TODO: does this check make any sense, or should we 
do this unconditionally?
-                       uint32_t* map = pipe_buffer_map(&nvfx->pipe, constbuf, 
PIPE_TRANSFER_READ, &transfer);
+                       uint32_t* map = nvfx_buffer(constbuf)->data;
                        uint32_t* buf = (uint32_t*)((char*)fp->fpbo->insn + 
offset);
                        int i;
                        for (i = 0; i < fp->nr_consts; ++i) {
@@ -993,7 +992,6 @@ nvfx_fragprog_validate(struct nvfx_context *nvfx)
                                        nvfx_fp_memcpy(&fpmap[off], &map[idx], 
4 * sizeof(uint32_t));
                                }
                        }
-                       pipe_buffer_unmap(&nvfx->pipe, constbuf, transfer);
                }
 
                if(fp->progs_left_with_obsolete_slot_assignments) {
diff --git a/src/gallium/drivers/nvfx/nvfx_vertprog.c 
b/src/gallium/drivers/nvfx/nvfx_vertprog.c
index cb0a7b4..1cc1e0d 100644
--- a/src/gallium/drivers/nvfx/nvfx_vertprog.c
+++ b/src/gallium/drivers/nvfx/nvfx_vertprog.c
@@ -11,6 +11,7 @@
 
 #include "nvfx_context.h"
 #include "nvfx_state.h"
+#include "nvfx_resource.h"
 
 /* TODO (at least...):
  *  1. Indexed consts  + ARL
@@ -894,7 +895,6 @@ nvfx_vertprog_validate(struct nvfx_context *nvfx)
        struct nouveau_grobj *eng3d = screen->eng3d;
        struct nvfx_vertex_program *vp;
        struct pipe_resource *constbuf;
-       struct pipe_transfer *transfer = NULL;
        boolean upload_code = FALSE, upload_data = FALSE;
        int i;
 
@@ -1003,11 +1003,8 @@ nvfx_vertprog_validate(struct nvfx_context *nvfx)
        if (vp->nr_consts) {
                float *map = NULL;
 
-               if (constbuf) {
-                       map = pipe_buffer_map(pipe, constbuf,
-                                             PIPE_TRANSFER_READ,
-                                             &transfer);
-               }
+               if (constbuf)
+                       map = nvfx_buffer(constbuf)->data;
 
                for (i = 0; i < vp->nr_consts; i++) {
                        struct nvfx_vertex_program_data *vpd = &vp->consts[i];
@@ -1025,9 +1022,6 @@ nvfx_vertprog_validate(struct nvfx_context *nvfx)
                        OUT_RING  (chan, i + vp->data->start);
                        OUT_RINGp (chan, (uint32_t *)vpd->value, 4);
                }
-
-               if (constbuf)
-                       pipe_buffer_unmap(pipe, constbuf, transfer);
        }
 
        /* Upload vtxprog */

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to