summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharmaine Lee <charmainel@vmware.com>2017-04-13 15:12:25 -0700
committerBrian Paul <brianp@vmware.com>2017-04-26 11:37:59 -0600
commitc6576461f5920971d7df74dcd821ac0e257fc352 (patch)
treedeafc89ac66d78babaea6bff741cf4460e261103
parentdc30ac5c24d662718b6aa4fbc9917aa34ba55160 (diff)
svga: Set the surface dirty bit for the right surface view
For VGPU10, we will render to a backed surface view when the same resource is used for rendering and sampling. In this case, we will mark the dirty bit for the backed surface view. Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r--src/gallium/drivers/svga/svga_surface.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/gallium/drivers/svga/svga_surface.c b/src/gallium/drivers/svga/svga_surface.c
index 02df0ca3efc..d0dc58d10f3 100644
--- a/src/gallium/drivers/svga/svga_surface.c
+++ b/src/gallium/drivers/svga/svga_surface.c
@@ -656,13 +656,27 @@ void
svga_mark_surfaces_dirty(struct svga_context *svga)
{
unsigned i;
+ struct svga_hw_clear_state *hw = &svga->state.hw_clear;
- for (i = 0; i < svga->curr.framebuffer.nr_cbufs; i++) {
- if (svga->curr.framebuffer.cbufs[i])
- svga_mark_surface_dirty(svga->curr.framebuffer.cbufs[i]);
+ if (svga_have_vgpu10(svga)) {
+
+ /* For VGPU10, mark the dirty bit in the rendertarget/depth stencil view surface.
+ * This surface can be the backed surface.
+ */
+ for (i = 0; i < hw->num_rendertargets; i++) {
+ if (hw->rtv[i])
+ svga_mark_surface_dirty(hw->rtv[i]);
+ }
+ if (hw->dsv)
+ svga_mark_surface_dirty(hw->dsv);
+ } else {
+ for (i = 0; i < svga->curr.framebuffer.nr_cbufs; i++) {
+ if (svga->curr.framebuffer.cbufs[i])
+ svga_mark_surface_dirty(svga->curr.framebuffer.cbufs[i]);
+ }
+ if (svga->curr.framebuffer.zsbuf)
+ svga_mark_surface_dirty(svga->curr.framebuffer.zsbuf);
}
- if (svga->curr.framebuffer.zsbuf)
- svga_mark_surface_dirty(svga->curr.framebuffer.zsbuf);
}