[Mesa-dev] [PATCH 10/14] svga: add new svga_check_sampler_framebuffer_resource_collision()

Brian Paul brianp at vmware.com
Fri Aug 26 15:27:14 UTC 2016


---
 src/gallium/drivers/svga/svga_sampler_view.h  |  4 ++++
 src/gallium/drivers/svga/svga_state_sampler.c | 33 ++++++++++++++++++++++++++-
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/svga/svga_sampler_view.h b/src/gallium/drivers/svga/svga_sampler_view.h
index 15f2313..b36f089 100644
--- a/src/gallium/drivers/svga/svga_sampler_view.h
+++ b/src/gallium/drivers/svga/svga_sampler_view.h
@@ -104,6 +104,10 @@ svga_check_sampler_view_resource_collision(struct svga_context *svga,
                                            struct svga_winsys_surface *res,
                                            unsigned shader);
 
+boolean
+svga_check_sampler_framebuffer_resource_collision(struct svga_context *svga,
+                                                  enum pipe_shader_type shader);
+
 enum pipe_error
 svga_validate_pipe_sampler_view(struct svga_context *svga,
                                 struct svga_pipe_sampler_view *sv);
diff --git a/src/gallium/drivers/svga/svga_state_sampler.c b/src/gallium/drivers/svga/svga_state_sampler.c
index 420a566..55bed02 100644
--- a/src/gallium/drivers/svga/svga_state_sampler.c
+++ b/src/gallium/drivers/svga/svga_state_sampler.c
@@ -40,9 +40,10 @@
 #include "svga_format.h"
 #include "svga_resource_buffer.h"
 #include "svga_resource_texture.h"
+#include "svga_sampler_view.h"
 #include "svga_shader.h"
 #include "svga_state.h"
-#include "svga_sampler_view.h"
+#include "svga_surface.h"
 
 
 /** Get resource handle for a texture or buffer */
@@ -88,6 +89,36 @@ svga_check_sampler_view_resource_collision(struct svga_context *svga,
 
 
 /**
+ * Check if there are any resources that are both bound to a render target
+ * and bound as a shader resource for the given type of shader.
+ */
+boolean
+svga_check_sampler_framebuffer_resource_collision(struct svga_context *svga,
+                                                  enum pipe_shader_type shader)
+{
+   struct svga_surface *surf;
+   unsigned i;
+
+   for (i = 0; i < svga->curr.framebuffer.nr_cbufs; i++) {
+      surf = svga_surface(svga->curr.framebuffer.cbufs[i]);
+      if (surf &&
+          svga_check_sampler_view_resource_collision(svga, surf->handle,
+                                                     shader)) {
+         return TRUE;
+      }
+   }
+
+   surf = svga_surface(svga->curr.framebuffer.zsbuf);
+   if (surf &&
+       svga_check_sampler_view_resource_collision(svga, surf->handle, shader)) {
+      return TRUE;
+   }
+
+   return FALSE;
+}
+
+
+/**
  * Create a DX ShaderResourceSamplerView for the given pipe_sampler_view,
  * if needed.
  */
-- 
1.9.1



More information about the mesa-dev mailing list