summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/nv50/nv50_surface.c
diff options
context:
space:
mode:
authorRoland Scheidegger <[email protected]>2010-05-29 01:25:09 +0200
committerRoland Scheidegger <[email protected]>2010-05-29 01:25:09 +0200
commite5b82c8222ef29c162d51a7ca9f553d85a63be22 (patch)
tree79acc5d37ea28940498b67b362be5b41d93f8a3d /src/gallium/drivers/nv50/nv50_surface.c
parentc5cccf8a49daa4a9c0ebd72a1783fe27b352471c (diff)
nv50: adapt to clear interface changes
should support separate depth/stencil clears just fine.
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_surface.c')
-rw-r--r--src/gallium/drivers/nv50/nv50_surface.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/gallium/drivers/nv50/nv50_surface.c b/src/gallium/drivers/nv50/nv50_surface.c
index 40b8d255335..470df1b2a20 100644
--- a/src/gallium/drivers/nv50/nv50_surface.c
+++ b/src/gallium/drivers/nv50/nv50_surface.c
@@ -27,6 +27,7 @@
#include "nv50_resource.h"
#include "pipe/p_defines.h"
#include "util/u_inlines.h"
+#include "util/u_pack_color.h"
#include "util/u_tile.h"
#include "util/u_format.h"
@@ -221,50 +222,49 @@ nv50_surface_copy(struct pipe_context *pipe,
nv50_miptree_surface_del(ps_dst);
}
+/* XXX this should probably look more along the lines of nv50_clear */
static void
-nv50_surface_fill(struct pipe_context *pipe, struct pipe_resource *dest,
- struct pipe_subresource subdst,
- unsigned destx, unsigned desty, unsigned destz,
- unsigned width, unsigned height, unsigned value)
+nv50_clearRT(struct pipe_context *pipe,
+ struct pipe_surface *dst,
+ const float *rgba,
+ unsigned dstx, unsigned dsty,
+ unsigned width, unsigned height)
{
struct nv50_context *nv50 = nv50_context(pipe);
- struct pipe_surface *ps;
struct nv50_screen *screen = nv50->screen;
struct nouveau_channel *chan = screen->eng2d->channel;
struct nouveau_grobj *eng2d = screen->eng2d;
int format, ret;
+ union util_color uc;
+ util_pack_color(rgba, dst->format, &uc);
- format = nv50_format(dest->format);
+ format = nv50_format(dst->format);
if (format < 0)
return;
- ps = nv50_miptree_surface_new(pipe->screen, dest, subdst.face,
- subdst.level, destz, 0 /* bind flags */);
-
WAIT_RING (chan, 32);
- ret = nv50_surface_set(screen, ps, 1);
+ ret = nv50_surface_set(screen, dst, 1);
if (ret)
return;
BEGIN_RING(chan, eng2d, NV50_2D_DRAW_SHAPE, 3);
OUT_RING (chan, NV50_2D_DRAW_SHAPE_RECTANGLES);
OUT_RING (chan, format);
- OUT_RING (chan, value);
+ OUT_RING (chan, uc.ui);
BEGIN_RING(chan, eng2d, NV50_2D_DRAW_POINT32_X(0), 4);
- OUT_RING (chan, destx);
- OUT_RING (chan, desty);
+ OUT_RING (chan, dstx);
+ OUT_RING (chan, dsty);
OUT_RING (chan, width);
OUT_RING (chan, height);
- nv50_miptree_surface_del(ps);
}
void
nv50_init_surface_functions(struct nv50_context *nv50)
{
nv50->pipe.resource_copy_region = nv50_surface_copy;
- nv50->pipe.resource_fill_region = nv50_surface_fill;
+ nv50->pipe.clearRT = nv50_clearRT;
}