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
