Mesa (master): svga: add new svga_check_sampler_framebuffer_resource_collision()
Brian Paul
brianp at kemper.freedesktop.org
Fri Aug 26 20:32:33 UTC 2016
Module: Mesa
Branch: master
Commit: ff500ed5a1287eadc06fc19661f0aad8767b664d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ff500ed5a1287eadc06fc19661f0aad8767b664d
Author: Brian Paul <brianp at vmware.com>
Date: Thu Aug 25 18:01:57 2016 -0600
svga: add new svga_check_sampler_framebuffer_resource_collision()
Reviewed-by: Neha Bhende <bhenden at vmware.com>
---
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.
*/
More information about the mesa-commit
mailing list