aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/sirit/sirit.h5
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/instructions/barrier.cpp20
3 files changed, 26 insertions, 0 deletions
diff --git a/include/sirit/sirit.h b/include/sirit/sirit.h
index aa6b976..a6d267d 100644
--- a/include/sirit/sirit.h
+++ b/include/sirit/sirit.h
@@ -364,6 +364,11 @@ public:
/// Finish the current primitive and start a new one. No vertex is emitted.
Id OpEndPrimitive();
+ // Barrier
+
+ /// Control the order that memory accesses are observed.
+ Id OpMemoryBarrier(Id scope, Id semantics);
+
// Logical
/// Result is true if any component of Vector is true, otherwise result is false.
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e1a632a..1bcb6e3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -27,6 +27,7 @@ add_library(sirit
instructions/extension.cpp
instructions/image.cpp
instructions/group.cpp
+ instructions/barrier.cpp
)
target_compile_options(sirit PRIVATE ${SIRIT_CXX_FLAGS})
diff --git a/src/instructions/barrier.cpp b/src/instructions/barrier.cpp
new file mode 100644
index 0000000..8f91c8a
--- /dev/null
+++ b/src/instructions/barrier.cpp
@@ -0,0 +1,20 @@
+/* This file is part of the sirit project.
+ * Copyright (c) 2019 sirit
+ * This software may be used and distributed according to the terms of the
+ * 3-Clause BSD License
+ */
+
+#include <memory>
+#include "op.h"
+#include "sirit/sirit.h"
+
+namespace Sirit {
+
+Id Module::OpMemoryBarrier(Id scope, Id semantics) {
+ auto op = std::make_unique<Op>(spv::Op::OpMemoryBarrier);
+ op->Add(scope);
+ op->Add(semantics);
+ return AddCode(std::move(op));
+}
+
+} // namespace Sirit