[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