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

Author: Karol Herbst <[email protected]>
Date:   Wed Oct  7 23:08:43 2020 +0200

clover: use pipe_image_view for images instead of set_compute_resources

Long term we want to git rid of set_compute_resources, this is just one
piece. The other bit would be to use the proper const buffer interfaces,
but because that path is only hit with r600/radeonsi I won't touch it.

Reviewed-by: Dave Airlie <[email protected]>
Reviewed-by: Francisco Jerez <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7069>

---

 src/gallium/frontends/clover/core/kernel.cpp   | 12 +++++++-----
 src/gallium/frontends/clover/core/kernel.hpp   |  4 +---
 src/gallium/frontends/clover/core/resource.cpp | 20 ++++++++++++++++++++
 src/gallium/frontends/clover/core/resource.hpp |  2 ++
 4 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/src/gallium/frontends/clover/core/kernel.cpp 
b/src/gallium/frontends/clover/core/kernel.cpp
index 4cc12147ee7..76a03b152e5 100644
--- a/src/gallium/frontends/clover/core/kernel.cpp
+++ b/src/gallium/frontends/clover/core/kernel.cpp
@@ -83,6 +83,8 @@ kernel::launch(command_queue &q,
 
    q.pipe->set_sampler_views(q.pipe, PIPE_SHADER_COMPUTE, 0,
                              exec.sviews.size(), exec.sviews.data());
+   q.pipe->set_shader_images(q.pipe, PIPE_SHADER_COMPUTE, 0,
+                             exec.iviews.size(), exec.iviews.data());
    q.pipe->set_compute_resources(q.pipe, 0, exec.resources.size(),
                                  exec.resources.data());
    q.pipe->set_global_binding(q.pipe, 0, exec.g_buffers.size(),
@@ -99,6 +101,8 @@ kernel::launch(command_queue &q,
 
    q.pipe->set_global_binding(q.pipe, 0, exec.g_buffers.size(), NULL, NULL);
    q.pipe->set_compute_resources(q.pipe, 0, exec.resources.size(), NULL);
+   q.pipe->set_shader_images(q.pipe, PIPE_SHADER_COMPUTE, 0,
+                             exec.iviews.size(), NULL);
    q.pipe->set_sampler_views(q.pipe, PIPE_SHADER_COMPUTE, 0,
                              exec.sviews.size(), NULL);
    q.pipe->bind_sampler_states(q.pipe, PIPE_SHADER_COMPUTE, 0,
@@ -279,6 +283,7 @@ kernel::exec_context::unbind() {
    input.clear();
    samplers.clear();
    sviews.clear();
+   iviews.clear();
    resources.clear();
    g_buffers.clear();
    g_handles.clear();
@@ -599,20 +604,17 @@ kernel::image_wr_argument::set(size_t size, const void 
*value) {
 void
 kernel::image_wr_argument::bind(exec_context &ctx,
                                 const module::argument &marg) {
-   auto v = bytes(ctx.resources.size());
+   auto v = bytes(ctx.iviews.size());
 
    extend(v, module::argument::zero_ext, marg.target_size);
    byteswap(v, ctx.q->device().endianness());
    align(ctx.input, marg.target_align);
    insert(ctx.input, v);
-
-   st = img->resource_in(*ctx.q).bind_surface(*ctx.q, true);
-   ctx.resources.push_back(st);
+   ctx.iviews.push_back(img->resource_in(*ctx.q).create_image_view(*ctx.q));
 }
 
 void
 kernel::image_wr_argument::unbind(exec_context &ctx) {
-   img->resource_in(*ctx.q).unbind_surface(*ctx.q, st);
 }
 
 void
diff --git a/src/gallium/frontends/clover/core/kernel.hpp 
b/src/gallium/frontends/clover/core/kernel.hpp
index d7185bc90a0..31967b66597 100644
--- a/src/gallium/frontends/clover/core/kernel.hpp
+++ b/src/gallium/frontends/clover/core/kernel.hpp
@@ -57,6 +57,7 @@ namespace clover {
          std::vector<uint8_t> input;
          std::vector<void *> samplers;
          std::vector<pipe_sampler_view *> sviews;
+         std::vector<pipe_image_view> iviews;
          std::vector<pipe_surface *> resources;
          std::vector<pipe_resource *> g_buffers;
          std::vector<size_t> g_handles;
@@ -226,9 +227,6 @@ namespace clover {
          virtual void bind(exec_context &ctx,
                            const module::argument &marg);
          virtual void unbind(exec_context &ctx);
-
-      private:
-         pipe_surface *st;
       };
 
       class sampler_argument : public argument {
diff --git a/src/gallium/frontends/clover/core/resource.cpp 
b/src/gallium/frontends/clover/core/resource.cpp
index c21073e1760..4315204fb35 100644
--- a/src/gallium/frontends/clover/core/resource.cpp
+++ b/src/gallium/frontends/clover/core/resource.cpp
@@ -112,6 +112,26 @@ resource::unbind_sampler_view(command_queue &q,
    q.pipe->sampler_view_destroy(q.pipe, st);
 }
 
+pipe_image_view
+resource::create_image_view(command_queue &q) {
+   pipe_image_view view;
+   view.resource = pipe;
+   view.format = pipe->format;
+   view.access = 0;
+   view.shader_access = PIPE_IMAGE_ACCESS_WRITE;
+
+   if (pipe->target == PIPE_BUFFER) {
+      view.u.buf.offset = 0;
+      view.u.buf.size = obj.size();
+   } else {
+      view.u.tex.first_layer = 0;
+      view.u.tex.last_layer = 0;
+      view.u.tex.level = 0;
+   }
+
+   return view;
+}
+
 pipe_surface *
 resource::bind_surface(command_queue &q, bool rw) {
    pipe_surface info {};
diff --git a/src/gallium/frontends/clover/core/resource.hpp 
b/src/gallium/frontends/clover/core/resource.hpp
index d4d7615beb8..562f410c590 100644
--- a/src/gallium/frontends/clover/core/resource.hpp
+++ b/src/gallium/frontends/clover/core/resource.hpp
@@ -75,6 +75,8 @@ namespace clover {
       pipe_surface *bind_surface(command_queue &q, bool rw);
       void unbind_surface(command_queue &q, pipe_surface *st);
 
+      pipe_image_view create_image_view(command_queue &q);
+
       pipe_resource *pipe;
       vector offset;
 

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to