[Mesa-dev] [PATCH 1/2] clover: upload sample bitfield to kernel
Zoltan Gilian
zoltan.gilian at gmail.com
Mon Aug 10 11:29:29 PDT 2015
---
src/gallium/state_trackers/clover/core/kernel.cpp | 7 +++++++
src/gallium/state_trackers/clover/core/sampler.cpp | 12 ++++++++++++
src/gallium/state_trackers/clover/core/sampler.hpp | 1 +
3 files changed, 20 insertions(+)
diff --git a/src/gallium/state_trackers/clover/core/kernel.cpp b/src/gallium/state_trackers/clover/core/kernel.cpp
index a226ec1..c3cf4eb 100644
--- a/src/gallium/state_trackers/clover/core/kernel.cpp
+++ b/src/gallium/state_trackers/clover/core/kernel.cpp
@@ -575,6 +575,13 @@ kernel::sampler_argument::set(size_t size, const void *value) {
void
kernel::sampler_argument::bind(exec_context &ctx,
const module::argument &marg) {
+ auto v = bytes(s->bit_field());
+
+ 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 = s->bind(*ctx.q);
ctx.samplers.push_back(st);
}
diff --git a/src/gallium/state_trackers/clover/core/sampler.cpp b/src/gallium/state_trackers/clover/core/sampler.cpp
index 6f2784b..23fb76a 100644
--- a/src/gallium/state_trackers/clover/core/sampler.cpp
+++ b/src/gallium/state_trackers/clover/core/sampler.cpp
@@ -23,6 +23,11 @@
#include "core/sampler.hpp"
#include "pipe/p_state.h"
+// CLK_* constants are defined in libclc (include/clc/image/image_defines.h)
+#define __CLOVER_NORM_MODE_BITS(x) (x)
+#define __CLOVER_ADDR_MODE_BITS(x) (((x)-CL_ADDRESS_NONE)<<1)
+#define __CLOVER_FILT_MODE_BITS(x) (((x)-CL_FILTER_NEAREST)<<4)
+
using namespace clover;
sampler::sampler(clover::context &ctx, bool norm_mode,
@@ -47,6 +52,13 @@ sampler::filter_mode() {
return _filter_mode;
}
+cl_uint
+sampler::bit_field() const {
+ return __CLOVER_NORM_MODE_BITS(_norm_mode) |
+ __CLOVER_ADDR_MODE_BITS(_addr_mode) |
+ __CLOVER_FILT_MODE_BITS(_filter_mode);
+}
+
void *
sampler::bind(command_queue &q) {
struct pipe_sampler_state info {};
diff --git a/src/gallium/state_trackers/clover/core/sampler.hpp b/src/gallium/state_trackers/clover/core/sampler.hpp
index 2632c30..d896252 100644
--- a/src/gallium/state_trackers/clover/core/sampler.hpp
+++ b/src/gallium/state_trackers/clover/core/sampler.hpp
@@ -40,6 +40,7 @@ namespace clover {
bool norm_mode();
cl_addressing_mode addr_mode();
cl_filter_mode filter_mode();
+ cl_uint bit_field() const;
const intrusive_ref<clover::context> context;
--
2.4.6
More information about the mesa-dev
mailing list