summaryrefslogtreecommitdiffstats
path: root/gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp')
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp b/gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp
new file mode 100755
index 000000000..980617f84
--- /dev/null
+++ b/gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp
@@ -0,0 +1,99 @@
+//
+// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// WorkGroupSize_test.cpp:
+// tests for local group size in a compute shader
+//
+
+#include "angle_gl.h"
+#include "gtest/gtest.h"
+#include "GLSLANG/ShaderLang.h"
+#include "compiler/translator/TranslatorESSL.h"
+#include "tests/test_utils/compiler_test.h"
+
+using namespace sh;
+
+class WorkGroupSizeTest : public testing::Test
+{
+ public:
+ WorkGroupSizeTest() {}
+
+ protected:
+ void SetUp() override
+ {
+ ShBuiltInResources resources;
+ InitBuiltInResources(&resources);
+
+ mTranslator = new TranslatorESSL(GL_COMPUTE_SHADER, SH_GLES3_1_SPEC);
+ ASSERT_TRUE(mTranslator->Init(resources));
+ }
+
+ void TearDown() override { SafeDelete(mTranslator); }
+
+ // Return true when compilation succeeds
+ bool compile(const std::string &shaderString)
+ {
+ const char *shaderStrings[] = {shaderString.c_str()};
+ bool status = mTranslator->compile(shaderStrings, 1, SH_INTERMEDIATE_TREE | SH_VARIABLES);
+ TInfoSink &infoSink = mTranslator->getInfoSink();
+ mInfoLog = infoSink.info.c_str();
+ return status;
+ }
+
+ protected:
+ std::string mInfoLog;
+ TranslatorESSL *mTranslator = nullptr;
+};
+
+// checks whether compiler has parsed the local size layout qualifiers qcorrectly
+TEST_F(WorkGroupSizeTest, OnlyLocalSizeXSpecified)
+{
+ const std::string &shaderString =
+ "#version 310 es\n"
+ "layout(local_size_x=5) in;\n"
+ "void main() {\n"
+ "}\n";
+
+ compile(shaderString);
+
+ const WorkGroupSize &localSize = mTranslator->getComputeShaderLocalSize();
+ ASSERT_EQ(5, localSize[0]);
+ ASSERT_EQ(1, localSize[1]);
+ ASSERT_EQ(1, localSize[2]);
+}
+
+// checks whether compiler has parsed the local size layout qualifiers qcorrectly
+TEST_F(WorkGroupSizeTest, LocalSizeXandZ)
+{
+ const std::string &shaderString =
+ "#version 310 es\n"
+ "layout(local_size_x=5, local_size_z=10) in;\n"
+ "void main() {\n"
+ "}\n";
+
+ compile(shaderString);
+
+ const WorkGroupSize &localSize = mTranslator->getComputeShaderLocalSize();
+ ASSERT_EQ(5, localSize[0]);
+ ASSERT_EQ(1, localSize[1]);
+ ASSERT_EQ(10, localSize[2]);
+}
+
+// checks whether compiler has parsed the local size layout qualifiers qcorrectly
+TEST_F(WorkGroupSizeTest, LocalSizeAll)
+{
+ const std::string &shaderString =
+ "#version 310 es\n"
+ "layout(local_size_x=5, local_size_z=10, local_size_y=15) in;\n"
+ "void main() {\n"
+ "}\n";
+
+ compile(shaderString);
+
+ const WorkGroupSize &localSize = mTranslator->getComputeShaderLocalSize();
+ ASSERT_EQ(5, localSize[0]);
+ ASSERT_EQ(15, localSize[1]);
+ ASSERT_EQ(10, localSize[2]);
+}