nvfx: support using blitter to copy depth/stencil resources, fix Heaven
authorLuca Barbieri <luca@luca-barbieri.com>
Sat, 4 Sep 2010 21:20:33 +0000 (23:20 +0200)
committerLuca Barbieri <luca@luca-barbieri.com>
Sun, 5 Sep 2010 00:01:02 +0000 (02:01 +0200)
We might want to copy them as color ones though.

Also works around crash in Unigine Heaven due to failing to allocate
a 64 MB temporary in GART for a CPU copy.

Unigine Heaven now works on nv40, albeit with very heavy glitches (with
the floating branch with render_hdr 0).

src/gallium/drivers/nvfx/nvfx_surface.c

index e0c85cc629de61cf4929f996245f4c0c92e755cd..aff7ac54b7ff744b758f8e245f4492ce2a6919d7 100644 (file)
@@ -251,8 +251,15 @@ nvfx_resource_copy_region(struct pipe_context *pipe,
                ret = nv04_region_copy_2d(ctx, &dst, &src, w, h, dst_to_gpu, src_on_gpu);
        if(!ret)
        {}
-       else if(ret > 0 && dstr->bind & PIPE_BIND_RENDER_TARGET && srcr->bind & PIPE_BIND_SAMPLER_VIEW)
+       else if(ret > 0
+                       && dstr->bind & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_DEPTH_STENCIL)
+                       && srcr->bind & PIPE_BIND_SAMPLER_VIEW)
        {
+               /* this currently works because we hack the bind flags on resource creation to be
+                * the maximum set that the resource type actually supports
+                *
+                * TODO: perhaps support reinterpreting the formats
+                */
                struct blitter_context* blitter = nvfx_get_blitter(pipe, 1);
                util_blitter_copy_region(blitter, dstr, subdst, dstx, dsty, dstz, srcr, subsrc, srcx, srcy, srcz, w, h, TRUE);
                nvfx_put_blitter(pipe, blitter);