summaryrefslogtreecommitdiff
path: root/gnuradio-runtime/lib/io_signature.cc
diff options
context:
space:
mode:
authorDavid Sorber <david.sorber@blacklynx.tech>2021-07-29 11:34:37 -0400
committermormj <34754695+mormj@users.noreply.github.com>2021-10-25 11:27:01 -0400
commitf3c558d88bc68d865f823c31e7d9aa78b3feab59 (patch)
tree026d8ff5568bc2c5ab731df29d87901cf1177e00 /gnuradio-runtime/lib/io_signature.cc
parent788827ae116bef871e144abd39b1e4482208eabe (diff)
runtime: Custom Buffer/Accelerator Device Support - Milestone 2
Completion of custom buffer/accelerator device support changes: * Improved custom buffer interface by removing awkward memory allocation functions from the block class * Increased flexibility for creating custom buffers by allowing creation of buffer_single_mapped subclasses * Fully incorporated data movement abstraction into the custom buffer interface and the runtime itself; accelerated blocks are no longer directly responsible for their own data movement * Zero copy back-to-back accelerated blocks are now supported (data no longer needs to be moved back to the host between each block) Signed-off-by: David Sorber <david.sorber@blacklynx.tech> Signed-off-by: Mike Mason <mike.mason@blacklynx.tech>
Diffstat (limited to 'gnuradio-runtime/lib/io_signature.cc')
-rw-r--r--gnuradio-runtime/lib/io_signature.cc72
1 files changed, 50 insertions, 22 deletions
diff --git a/gnuradio-runtime/lib/io_signature.cc b/gnuradio-runtime/lib/io_signature.cc
index 507268d5ce..e953c7eb5a 100644
--- a/gnuradio-runtime/lib/io_signature.cc
+++ b/gnuradio-runtime/lib/io_signature.cc
@@ -22,47 +22,69 @@ gr::io_signature::sptr io_signature::makev(int min_streams,
int max_streams,
const std::vector<int>& sizeof_stream_items)
{
+ gr_vector_buffer_type buftypes(sizeof_stream_items.size(),
+ buffer_double_mapped::type);
return gr::io_signature::sptr(
- new io_signature(min_streams, max_streams, sizeof_stream_items));
+ new io_signature(min_streams, max_streams, sizeof_stream_items, buftypes));
}
-gr::io_signature::sptr
-io_signature::make(int min_streams, int max_streams, int sizeof_stream_item)
+gr::io_signature::sptr io_signature::makev(int min_streams,
+ int max_streams,
+ const std::vector<int>& sizeof_stream_items,
+ gr_vector_buffer_type buftypes)
{
- std::vector<int> sizeof_items(1);
- sizeof_items[0] = sizeof_stream_item;
- return io_signature::makev(min_streams, max_streams, sizeof_items);
+ return gr::io_signature::sptr(
+ new io_signature(min_streams, max_streams, sizeof_stream_items, buftypes));
+}
+
+gr::io_signature::sptr io_signature::make(int min_streams,
+ int max_streams,
+ int sizeof_stream_item,
+ buffer_type buftype)
+{
+ std::vector<int> sizeof_items{ sizeof_stream_item };
+ gr_vector_buffer_type buftypes{ buftype };
+ return io_signature::makev(min_streams, max_streams, sizeof_items, buftypes);
}
gr::io_signature::sptr io_signature::make2(int min_streams,
int max_streams,
int sizeof_stream_item1,
- int sizeof_stream_item2)
+ int sizeof_stream_item2,
+ buffer_type buftype1,
+ buffer_type buftype2)
{
- std::vector<int> sizeof_items(2);
- sizeof_items[0] = sizeof_stream_item1;
- sizeof_items[1] = sizeof_stream_item2;
- return io_signature::makev(min_streams, max_streams, sizeof_items);
+ std::vector<int> sizeof_items{ sizeof_stream_item1, sizeof_stream_item2 };
+ gr_vector_buffer_type buftypes{ buftype1, buftype2 };
+ return io_signature::makev(min_streams, max_streams, sizeof_items, buftypes);
}
gr::io_signature::sptr io_signature::make3(int min_streams,
int max_streams,
int sizeof_stream_item1,
int sizeof_stream_item2,
- int sizeof_stream_item3)
+ int sizeof_stream_item3,
+ buffer_type buftype1,
+ buffer_type buftype2,
+ buffer_type buftype3)
{
- std::vector<int> sizeof_items(3);
- sizeof_items[0] = sizeof_stream_item1;
- sizeof_items[1] = sizeof_stream_item2;
- sizeof_items[2] = sizeof_stream_item3;
- return io_signature::makev(min_streams, max_streams, sizeof_items);
+ std::vector<int> sizeof_items{ sizeof_stream_item1,
+ sizeof_stream_item2,
+ sizeof_stream_item3 };
+ gr_vector_buffer_type buftypes{ buftype1, buftype2, buftype3 };
+ return io_signature::makev(min_streams, max_streams, sizeof_items, buftypes);
}
// ------------------------------------------------------------------------
io_signature::io_signature(int min_streams,
int max_streams,
- const std::vector<int>& sizeof_stream_items)
+ const std::vector<int>& sizeof_stream_items,
+ gr_vector_buffer_type buftypes)
+ : d_min_streams(min_streams),
+ d_max_streams(max_streams),
+ d_sizeof_stream_item(sizeof_stream_items),
+ d_stream_buffer_type(buftypes)
{
if (min_streams < 0 || (max_streams != IO_INFINITE && max_streams < min_streams))
throw std::invalid_argument("gr::io_signature(1)");
@@ -75,10 +97,6 @@ io_signature::io_signature(int min_streams,
if (max_streams != 0 && sizeof_stream_items[i] < 1)
throw std::invalid_argument("gr::io_signature(3)");
}
-
- d_min_streams = min_streams;
- d_max_streams = max_streams;
- d_sizeof_stream_item = sizeof_stream_items;
}
io_signature::~io_signature() {}
@@ -97,4 +115,14 @@ std::vector<int> io_signature::sizeof_stream_items() const
return d_sizeof_stream_item;
}
+buffer_type io_signature::stream_buffer_type(size_t index) const
+{
+ return d_stream_buffer_type[std::min(index, d_stream_buffer_type.size() - 1)];
+}
+
+gr_vector_buffer_type io_signature::stream_buffer_types() const
+{
+ return d_stream_buffer_type;
+}
+
} /* namespace gr */