Mesa (master): nvfx: support using blitter to copy depth/stencil resources, fix Heaven

Luca Barbieri lb at kemper.freedesktop.org
Sun Sep 5 00:01:43 UTC 2010


Module: Mesa
Branch: master
Commit: 9fc50968addcefa3ce699a0ec6ebb8496dc527e1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9fc50968addcefa3ce699a0ec6ebb8496dc527e1

Author: Luca Barbieri <luca at luca-barbieri.com>
Date:   Sat Sep  4 23:20:33 2010 +0200

nvfx: support using blitter to copy depth/stencil resources, fix Heaven

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 |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nvfx/nvfx_surface.c b/src/gallium/drivers/nvfx/nvfx_surface.c
index e0c85cc..aff7ac5 100644
--- a/src/gallium/drivers/nvfx/nvfx_surface.c
+++ b/src/gallium/drivers/nvfx/nvfx_surface.c
@@ -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);




More information about the mesa-commit mailing list