aboutsummaryrefslogtreecommitdiffhomepage
path: root/README.md
diff options
context:
space:
mode:
authorReinUsesLisp <[email protected]>2018-08-25 20:53:12 -0300
committerReinUsesLisp <[email protected]>2018-08-25 21:02:23 -0300
commit479f76f61b6a231edc312a6b8f6bac550358fa14 (patch)
treeb82fb79e97c8d24164098d0c31c33d2a6c1c02ea /README.md
parent1de01c95ae2e3afcbb4379bcaf754a3bdd3b2cc5 (diff)
downloadsirit-479f76f61b6a231edc312a6b8f6bac550358fa14.tar.gz
sirit-479f76f61b6a231edc312a6b8f6bac550358fa14.zip
Update README.md
Diffstat (limited to 'README.md')
-rw-r--r--README.md56
1 files changed, 55 insertions, 1 deletions
diff --git a/README.md b/README.md
index b3ced1b..2773080 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,58 @@
Sirit
=====
+A runtime SPIR-V assembler. It aims to ease dynamic SPIR-V code generation
+without calling external applications (like Khronos' `spirv-as`)
-A dynamic assembler for SPIR-V.
+Its design aims to move code that does not belong to the application in the
+library without, limitting its functionality.
+
+What it does for you:
+* Sort declaration opcodes
+* Handle types and constant duplicates
+* Emit SPIR-V opcodes
+
+What it will try to do in the future:
+* Add capabilities automatically
+* Optimize code
+
+What does not do for you:
+* Avoid ID duplicates (emitting the same instruction twice)
+* Dump code to disk
+* Handle code blocks/branches
+* Compile from a higher level language
+
+
+It's in early stages of development, many instructions are missing since
+they are written manually instead of being generated from a file.
+
+Example
+-------
+
+```cpp
+class MyModule : public Sirit::Module {
+public:
+ MyModule() {}
+ ~MyModule() = default;
+
+ void Generate() {
+ AddCapability(spv::Capability::Shader);
+ SetMemoryModel(spv::AddressingModel::Logical, spv::MemoryModel::GLSL450);
+
+ auto main_type{TypeFunction(TypeVoid())};
+ auto main_func{Emit(Function(TypeVoid(), spv::FunctionControlMask::MaskNone, main_type))};
+ Emit(Label());
+ Emit(Return());
+ Emit(FunctionEnd());
+
+ AddEntryPoint(spv::ExecutionModel::Vertex, main_func, "main");
+ }
+};
+
+// Then...
+
+MyModule module;
+module.Generate();
+
+module.Optimize(2);
+std::vector<std::uint8_t> code{module.Assembly()};
+```