nv30, nv40: unify nv[34]0_context.c
authorLuca Barbieri <luca@luca-barbieri.com>
Sun, 21 Feb 2010 13:40:32 +0000 (14:40 +0100)
committerYounes Manton <younes.m@gmail.com>
Mon, 15 Mar 2010 04:03:03 +0000 (00:03 -0400)
They are now almost identical, except for nv30 vs nv40 fragtex
initialization.

src/gallium/drivers/nv30/Makefile
src/gallium/drivers/nv30/nv30_context.c [deleted file]
src/gallium/drivers/nv40/Makefile
src/gallium/drivers/nv40/nv40_context.c [deleted file]
src/gallium/drivers/nvfx/Makefile
src/gallium/drivers/nvfx/nvfx_context.c [new file with mode: 0644]
src/gallium/drivers/nvfx/nvfx_context.h
src/gallium/drivers/nvfx/nvfx_screen.c

index ef3ce7eafaa9ef9e8e29e06946c1526960e77346..0a20de9e7a7646f050b6a83cc18c92b0908097a5 100644 (file)
@@ -4,7 +4,6 @@ include $(TOP)/configs/current
 LIBNAME = nv30
 
 C_SOURCES = \
-       nv30_context.c \
        nv30_fragtex.c \
        nv30_state.c
 
diff --git a/src/gallium/drivers/nv30/nv30_context.c b/src/gallium/drivers/nv30/nv30_context.c
deleted file mode 100644 (file)
index 7e3fd83..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-#include "draw/draw_context.h"
-#include "pipe/p_defines.h"
-
-#include "nvfx_context.h"
-#include "nvfx_screen.h"
-
-static void
-nv30_flush(struct pipe_context *pipe, unsigned flags,
-          struct pipe_fence_handle **fence)
-{
-       struct nvfx_context *nvfx = nvfx_context(pipe);
-       struct nvfx_screen *screen = nvfx->screen;
-       struct nouveau_channel *chan = screen->base.channel;
-       struct nouveau_grobj *eng3d = screen->eng3d;
-
-       if (flags & PIPE_FLUSH_TEXTURE_CACHE) {
-               BEGIN_RING(chan, eng3d, 0x1fd8, 1);
-               OUT_RING  (chan, 2);
-               BEGIN_RING(chan, eng3d, 0x1fd8, 1);
-               OUT_RING  (chan, 1);
-       }
-
-       FIRE_RING(chan);
-       if (fence)
-               *fence = NULL;
-}
-
-static void
-nv30_destroy(struct pipe_context *pipe)
-{
-       struct nvfx_context *nvfx = nvfx_context(pipe);
-       unsigned i;
-
-       for (i = 0; i < NVFX_STATE_MAX; i++) {
-               if (nvfx->state.hw[i])
-                       so_ref(NULL, &nvfx->state.hw[i]);
-       }
-
-       if (nvfx->draw)
-               draw_destroy(nvfx->draw);
-       FREE(nvfx);
-}
-
-struct pipe_context *
-nv30_create(struct pipe_screen *pscreen, void *priv)
-{
-       struct nvfx_screen *screen = nvfx_screen(pscreen);
-       struct pipe_winsys *ws = pscreen->winsys;
-       struct nvfx_context *nvfx;
-       struct nouveau_winsys *nvws = screen->nvws;
-
-       nvfx = CALLOC(1, sizeof(struct nvfx_context));
-       if (!nvfx)
-               return NULL;
-       nvfx->screen = screen;
-
-       nvfx->nvws = nvws;
-
-       nvfx->pipe.winsys = ws;
-       nvfx->pipe.screen = pscreen;
-       nvfx->pipe.priv = priv;
-       nvfx->pipe.destroy = nv30_destroy;
-       nvfx->pipe.draw_arrays = nvfx_draw_arrays;
-       nvfx->pipe.draw_elements = nvfx_draw_elements;
-       nvfx->pipe.clear = nvfx_clear;
-       nvfx->pipe.flush = nv30_flush;
-
-       nvfx->pipe.is_texture_referenced = nouveau_is_texture_referenced;
-       nvfx->pipe.is_buffer_referenced = nouveau_is_buffer_referenced;
-
-       screen->base.channel->user_private = nvfx;
-       screen->base.channel->flush_notify = nvfx_state_flush_notify;
-
-       nvfx->is_nv4x = screen->is_nv4x;
-
-       nvfx_init_query_functions(nvfx);
-       nvfx_init_surface_functions(nvfx);
-       nvfx_init_state_functions(nvfx);
-       nvfx_init_transfer_functions(nvfx);
-
-       /* Create, configure, and install fallback swtnl path */
-       nvfx->draw = draw_create();
-       draw_wide_point_threshold(nvfx->draw, 9999999.0);
-       draw_wide_line_threshold(nvfx->draw, 9999999.0);
-       draw_enable_line_stipple(nvfx->draw, FALSE);
-       draw_enable_point_sprites(nvfx->draw, FALSE);
-       draw_set_rasterize_stage(nvfx->draw, nvfx_draw_render_stage(nvfx));
-
-       return &nvfx->pipe;
-}
index a37446d50ce02c0256f63109e83a18b3c4129a92..6e764512cf29d5bfc6ba083647475a3f96319e08 100644 (file)
@@ -4,7 +4,6 @@ include $(TOP)/configs/current
 LIBNAME = nv40
 
 C_SOURCES = \
-       nv40_context.c \
        nv40_fragtex.c \
        nv40_state.c
 
diff --git a/src/gallium/drivers/nv40/nv40_context.c b/src/gallium/drivers/nv40/nv40_context.c
deleted file mode 100644 (file)
index 5a52642..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-#include "draw/draw_context.h"
-#include "pipe/p_defines.h"
-
-#include "nvfx_context.h"
-#include "nvfx_screen.h"
-
-static void
-nv40_flush(struct pipe_context *pipe, unsigned flags,
-          struct pipe_fence_handle **fence)
-{
-       struct nvfx_context *nvfx = nvfx_context(pipe);
-       struct nvfx_screen *screen = nvfx->screen;
-       struct nouveau_channel *chan = screen->base.channel;
-       struct nouveau_grobj *eng3d = screen->eng3d;
-
-       if (flags & PIPE_FLUSH_TEXTURE_CACHE) {
-               BEGIN_RING(chan, eng3d, 0x1fd8, 1);
-               OUT_RING  (chan, 2);
-               BEGIN_RING(chan, eng3d, 0x1fd8, 1);
-               OUT_RING  (chan, 1);
-       }
-
-       FIRE_RING(chan);
-       if (fence)
-               *fence = NULL;
-}
-
-static void
-nv40_destroy(struct pipe_context *pipe)
-{
-       struct nvfx_context *nvfx = nvfx_context(pipe);
-       unsigned i;
-
-       for (i = 0; i < NVFX_STATE_MAX; i++) {
-               if (nvfx->state.hw[i])
-                       so_ref(NULL, &nvfx->state.hw[i]);
-       }
-
-       if (nvfx->draw)
-               draw_destroy(nvfx->draw);
-       FREE(nvfx);
-}
-
-struct pipe_context *
-nv40_create(struct pipe_screen *pscreen, void *priv)
-{
-       struct nvfx_screen *screen = nvfx_screen(pscreen);
-       struct pipe_winsys *ws = pscreen->winsys;
-       struct nvfx_context *nvfx;
-       struct nouveau_winsys *nvws = screen->nvws;
-
-       nvfx = CALLOC(1, sizeof(struct nvfx_context));
-       if (!nvfx)
-               return NULL;
-       nvfx->screen = screen;
-
-       nvfx->nvws = nvws;
-
-       nvfx->pipe.winsys = ws;
-       nvfx->pipe.priv = priv;
-       nvfx->pipe.screen = pscreen;
-       nvfx->pipe.destroy = nv40_destroy;
-       nvfx->pipe.draw_arrays = nvfx_draw_arrays;
-       nvfx->pipe.draw_elements = nvfx_draw_elements;
-       nvfx->pipe.clear = nvfx_clear;
-       nvfx->pipe.flush = nv40_flush;
-
-       nvfx->pipe.is_texture_referenced = nouveau_is_texture_referenced;
-       nvfx->pipe.is_buffer_referenced = nouveau_is_buffer_referenced;
-
-       screen->base.channel->user_private = nvfx;
-       screen->base.channel->flush_notify = nvfx_state_flush_notify;
-
-       nvfx->is_nv4x = screen->is_nv4x;
-
-       nvfx_init_query_functions(nvfx);
-       nvfx_init_surface_functions(nvfx);
-       nvfx_init_state_functions(nvfx);
-       nvfx_init_transfer_functions(nvfx);
-
-       /* Create, configure, and install fallback swtnl path */
-       nvfx->draw = draw_create();
-       draw_wide_point_threshold(nvfx->draw, 9999999.0);
-       draw_wide_line_threshold(nvfx->draw, 9999999.0);
-       draw_enable_line_stipple(nvfx->draw, FALSE);
-       draw_enable_point_sprites(nvfx->draw, FALSE);
-       draw_set_rasterize_stage(nvfx->draw, nvfx_draw_render_stage(nvfx));
-
-       return &nvfx->pipe;
-}
index e2c24ebc3c4ff8bb53c0ebc09d92221257375cfc..aa03a155e32148c0da7d988156dd007974ea5be4 100644 (file)
@@ -4,6 +4,7 @@ include $(TOP)/configs/current
 LIBNAME = nvfx
 
 C_SOURCES = \
+       nvfx_context.c \
        nvfx_clear.c \
        nvfx_draw.c \
        nvfx_fragprog.c \
diff --git a/src/gallium/drivers/nvfx/nvfx_context.c b/src/gallium/drivers/nvfx/nvfx_context.c
new file mode 100644 (file)
index 0000000..fc3cbdb
--- /dev/null
@@ -0,0 +1,90 @@
+#include "draw/draw_context.h"
+#include "pipe/p_defines.h"
+
+#include "nvfx_context.h"
+#include "nvfx_screen.h"
+
+static void
+nvfx_flush(struct pipe_context *pipe, unsigned flags,
+          struct pipe_fence_handle **fence)
+{
+       struct nvfx_context *nvfx = nvfx_context(pipe);
+       struct nvfx_screen *screen = nvfx->screen;
+       struct nouveau_channel *chan = screen->base.channel;
+       struct nouveau_grobj *eng3d = screen->eng3d;
+
+       if (flags & PIPE_FLUSH_TEXTURE_CACHE) {
+               BEGIN_RING(chan, eng3d, 0x1fd8, 1);
+               OUT_RING  (chan, 2);
+               BEGIN_RING(chan, eng3d, 0x1fd8, 1);
+               OUT_RING  (chan, 1);
+       }
+
+       FIRE_RING(chan);
+       if (fence)
+               *fence = NULL;
+}
+
+static void
+nvfx_destroy(struct pipe_context *pipe)
+{
+       struct nvfx_context *nvfx = nvfx_context(pipe);
+       unsigned i;
+
+       for (i = 0; i < NVFX_STATE_MAX; i++) {
+               if (nvfx->state.hw[i])
+                       so_ref(NULL, &nvfx->state.hw[i]);
+       }
+
+       if (nvfx->draw)
+               draw_destroy(nvfx->draw);
+       FREE(nvfx);
+}
+
+struct pipe_context *
+nvfx_create(struct pipe_screen *pscreen, void *priv)
+{
+       struct nvfx_screen *screen = nvfx_screen(pscreen);
+       struct pipe_winsys *ws = pscreen->winsys;
+       struct nvfx_context *nvfx;
+       struct nouveau_winsys *nvws = screen->nvws;
+
+       nvfx = CALLOC(1, sizeof(struct nvfx_context));
+       if (!nvfx)
+               return NULL;
+       nvfx->screen = screen;
+
+       nvfx->nvws = nvws;
+
+       nvfx->pipe.winsys = ws;
+       nvfx->pipe.screen = pscreen;
+       nvfx->pipe.priv = priv;
+       nvfx->pipe.destroy = nvfx_destroy;
+       nvfx->pipe.draw_arrays = nvfx_draw_arrays;
+       nvfx->pipe.draw_elements = nvfx_draw_elements;
+       nvfx->pipe.clear = nvfx_clear;
+       nvfx->pipe.flush = nvfx_flush;
+
+       nvfx->pipe.is_texture_referenced = nouveau_is_texture_referenced;
+       nvfx->pipe.is_buffer_referenced = nouveau_is_buffer_referenced;
+
+       screen->base.channel->user_private = nvfx;
+       screen->base.channel->flush_notify = nvfx_state_flush_notify;
+
+       nvfx->is_nv4x = screen->is_nv4x;
+
+       nvfx_init_query_functions(nvfx);
+       nvfx_init_surface_functions(nvfx);
+       nvfx_init_state_functions(nvfx);
+       nvfx_init_transfer_functions(nvfx);
+
+       /* Create, configure, and install fallback swtnl path */
+       nvfx->draw = draw_create();
+       draw_wide_point_threshold(nvfx->draw, 9999999.0);
+       draw_wide_line_threshold(nvfx->draw, 9999999.0);
+       draw_enable_line_stipple(nvfx->draw, FALSE);
+       draw_enable_point_sprites(nvfx->draw, FALSE);
+       draw_set_rasterize_stage(nvfx->draw, nvfx_draw_render_stage(nvfx));
+
+       return &nvfx->pipe;
+}
index 46cc7362eabaac9c99c17f85a5f5989cafa304e9..0bd37a7ae83de9ff8adbedb42835959d3b137b07 100644 (file)
@@ -198,13 +198,9 @@ extern struct nvfx_state_entry nvfx_state_zsa;
 extern void nvfx_init_query_functions(struct nvfx_context *nvfx);
 extern void nvfx_init_surface_functions(struct nvfx_context *nvfx);
 
-/* nv30_context.c */
+/* nvfx_context.c */
 struct pipe_context *
-nv30_create(struct pipe_screen *pscreen, void *priv);
-
-/* nv40_context.c */
-struct pipe_context *
-nv40_create(struct pipe_screen *pscreen, void *priv);
+nvfx_create(struct pipe_screen *pscreen, void *priv);
 
 /* nvfx_clear.c */
 extern void nvfx_clear(struct pipe_context *pipe, unsigned buffers,
index 0c906ecb1d1531f73c28e1228ab69f29c7c63d15..8138715cc7d1899e39d71af677e9c40d132d73f1 100644 (file)
@@ -208,7 +208,6 @@ nvfx_screen_destroy(struct pipe_screen *pscreen)
 
 static void nv30_screen_init(struct nvfx_screen *screen, struct nouveau_stateobj* so)
 {
-       screen->base.base.context_create = nv30_create;
        int i;
 
        /* TODO: perhaps we should do some of this on nv40 too? */
@@ -268,8 +267,6 @@ static void nv30_screen_init(struct nvfx_screen *screen, struct nouveau_stateobj
 
 static void nv40_screen_init(struct nvfx_screen *screen, struct nouveau_stateobj* so)
 {
-       screen->base.base.context_create = nv40_create;
-
        so_method(so, screen->eng3d, NV40TCL_DMA_COLOR2, 2);
        so_data  (so, screen->base.channel->vram->handle);
        so_data  (so, screen->base.channel->vram->handle);
@@ -325,6 +322,7 @@ nvfx_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
        pscreen->get_param = nvfx_screen_get_param;
        pscreen->get_paramf = nvfx_screen_get_paramf;
        pscreen->is_format_supported = nvfx_screen_surface_format_supported;
+       pscreen->context_create = nvfx_create;
 
        switch (dev->chipset & 0xf0) {
        case 0x30: