summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-emit-c-like.cpp15
-rw-r--r--tests/bugs/glsl-static-const-array.slang17
-rw-r--r--tests/bugs/glsl-static-const-array.slang.expected.txt4
3 files changed, 35 insertions, 1 deletions
diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp
index d7930130e..c7b5b602b 100644
--- a/source/slang/slang-emit-c-like.cpp
+++ b/source/slang/slang-emit-c-like.cpp
@@ -982,7 +982,20 @@ void CLikeSourceEmitter::emitInstResultDecl(IRInst* inst)
if(as<IRModuleInst>(inst->getParent()))
{
// "Ordinary" instructions at module scope are constants
- m_writer->emit("static const ");
+
+ switch (getSourceStyle())
+ {
+ case SourceStyle::HLSL:
+ case SourceStyle::C:
+ case SourceStyle::CPP:
+ m_writer->emit("static ");
+ break;
+
+ default:
+ break;
+ }
+
+ m_writer->emit("const ");
}
emitType(type, getName(inst));
diff --git a/tests/bugs/glsl-static-const-array.slang b/tests/bugs/glsl-static-const-array.slang
new file mode 100644
index 000000000..fb573c690
--- /dev/null
+++ b/tests/bugs/glsl-static-const-array.slang
@@ -0,0 +1,17 @@
+// glsl-static-const-array.slang
+
+//TEST(compute):COMPARE_COMPUTE:-vk
+
+static const int gData[4] =
+{
+ 0xA, 0xB, 0xC, 0xD,
+};
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):dxbinding(0),glbinding(0),out
+RWStructuredBuffer<int> gBuffer;
+
+[numthreads(4,1,1)]
+void computeMain(uint3 tid : SV_DispatchThreadID)
+{
+ gBuffer[tid.x] = gData[tid.x];
+}
diff --git a/tests/bugs/glsl-static-const-array.slang.expected.txt b/tests/bugs/glsl-static-const-array.slang.expected.txt
new file mode 100644
index 000000000..8422d40f1
--- /dev/null
+++ b/tests/bugs/glsl-static-const-array.slang.expected.txt
@@ -0,0 +1,4 @@
+A
+B
+C
+D