diff options
Diffstat (limited to 'src/shader_recompiler/backend/glasm/emit_context.cpp')
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_context.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_context.cpp b/src/shader_recompiler/backend/glasm/emit_context.cpp index b5b0e2204..e18526816 100644 --- a/src/shader_recompiler/backend/glasm/emit_context.cpp +++ b/src/shader_recompiler/backend/glasm/emit_context.cpp | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include "shader_recompiler/backend/bindings.h" | 7 | #include "shader_recompiler/backend/bindings.h" |
| 8 | #include "shader_recompiler/backend/glasm/emit_context.h" | 8 | #include "shader_recompiler/backend/glasm/emit_context.h" |
| 9 | #include "shader_recompiler/frontend/ir/program.h" | 9 | #include "shader_recompiler/frontend/ir/program.h" |
| 10 | #include "shader_recompiler/profile.h" | ||
| 10 | 11 | ||
| 11 | namespace Shader::Backend::GLASM { | 12 | namespace Shader::Backend::GLASM { |
| 12 | namespace { | 13 | namespace { |
| @@ -40,13 +41,21 @@ EmitContext::EmitContext(IR::Program& program, Bindings& bindings, const Profile | |||
| 40 | Add("CBUFFER c{}[]={{program.buffer[{}]}};", desc.index, cbuf_index); | 41 | Add("CBUFFER c{}[]={{program.buffer[{}]}};", desc.index, cbuf_index); |
| 41 | ++cbuf_index; | 42 | ++cbuf_index; |
| 42 | } | 43 | } |
| 44 | u32 ssbo_index{}; | ||
| 43 | for (const auto& desc : info.storage_buffers_descriptors) { | 45 | for (const auto& desc : info.storage_buffers_descriptors) { |
| 44 | if (desc.count != 1) { | 46 | if (desc.count != 1) { |
| 45 | throw NotImplementedException("Storage buffer descriptor array"); | 47 | throw NotImplementedException("Storage buffer descriptor array"); |
| 46 | } | 48 | } |
| 49 | if (runtime_info.glasm_use_storage_buffers) { | ||
| 50 | Add("STORAGE ssbo{}[]={{program.storage[{}]}};", ssbo_index, bindings.storage_buffer); | ||
| 51 | ++bindings.storage_buffer; | ||
| 52 | ++ssbo_index; | ||
| 53 | } | ||
| 47 | } | 54 | } |
| 48 | if (const size_t num = info.storage_buffers_descriptors.size(); num > 0) { | 55 | if (!runtime_info.glasm_use_storage_buffers) { |
| 49 | Add("PARAM c[{}]={{program.local[0..{}]}};", num, num - 1); | 56 | if (const size_t num = info.storage_buffers_descriptors.size(); num > 0) { |
| 57 | Add("PARAM c[{}]={{program.local[0..{}]}};", num, num - 1); | ||
| 58 | } | ||
| 50 | } | 59 | } |
| 51 | stage = program.stage; | 60 | stage = program.stage; |
| 52 | switch (program.stage) { | 61 | switch (program.stage) { |