nvfx: adapt to clear interface changes
authorRoland Scheidegger <sroland@vmware.com>
Fri, 28 May 2010 23:24:25 +0000 (01:24 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 28 May 2010 23:24:25 +0000 (01:24 +0200)
src/gallium/drivers/nvfx/nvfx_screen.c
src/gallium/drivers/nvfx/nvfx_surface.c

index 7e534a0c738bd048cc0067bbba062f70dc457732..a78d2411a05994d0cfc4d98350bebee3a9ee8ad5 100644 (file)
@@ -80,6 +80,8 @@ nvfx_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
                return 0;
        case PIPE_CAP_INDEP_BLEND_FUNC:
                return 0;
+       case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
+               return 0;
        case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
        case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
                return 1;
index fc3a670d4005bb4c678584d727ed56e8078c751c..c853f36f5528c25f694b9b4f8f08701e90960777 100644 (file)
@@ -30,6 +30,7 @@
 #include "nvfx_resource.h"
 #include "pipe/p_defines.h"
 #include "util/u_inlines.h"
+#include "util/u_pack_color.h"
 
 static void
 nvfx_surface_copy(struct pipe_context *pipe,
@@ -55,26 +56,41 @@ nvfx_surface_copy(struct pipe_context *pipe,
 }
 
 static void
-nvfx_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)
+nvfx_clearRT(struct pipe_context *pipe,
+            struct pipe_surface *dst,
+            const float *rgba,
+            unsigned dstx, unsigned dsty,
+            unsigned width, unsigned height)
 {
        struct nvfx_context *nvfx = nvfx_context(pipe);
-       struct pipe_surface *ps;
        struct nv04_surface_2d *eng2d = nvfx->screen->eng2d;
+       union util_color uc;
+       util_pack_color(rgba, dst->format, &uc);
+
+       eng2d->fill(eng2d, dst, dstx, dsty, width, height, uc.ui);
+}
 
-       ps = nvfx_miptree_surface_new(pipe->screen, dest, subdst.face,
-                                     subdst.level, destz, 0 /* bind flags */);
-       
-       eng2d->fill(eng2d, ps, destx, desty, width, height, value);
+static void
+nvfx_clearDS(struct pipe_context *pipe,
+            struct pipe_surface *dst,
+            unsigned clear_flags,
+            double depth,
+            unsigned stencil,
+            unsigned dstx, unsigned dsty,
+            unsigned width, unsigned height)
+{
+       struct nvfx_context *nvfx = nvfx_context(pipe);
+       struct nv04_surface_2d *eng2d = nvfx->screen->eng2d;
 
-       nvfx_miptree_surface_del(ps);
+       eng2d->fill(eng2d, dst, dstx, dsty, width, height,
+                   util_pack_z_stencil(dst->format, depth, stencil));
 }
 
+
 void
 nvfx_init_surface_functions(struct nvfx_context *nvfx)
 {
        nvfx->pipe.resource_copy_region = nvfx_surface_copy;
-       nvfx->pipe.resource_fill_region = nvfx_surface_fill;
+       nvfx->pipe.clearRT = nvfx_clearRT;
+       nvfx->pipe.clearDS = nvfx_clearDS;
 }