summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-syntax.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-syntax.cpp')
-rw-r--r--source/slang/slang-syntax.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/source/slang/slang-syntax.cpp b/source/slang/slang-syntax.cpp
index d5f2c13db..6b2140056 100644
--- a/source/slang/slang-syntax.cpp
+++ b/source/slang/slang-syntax.cpp
@@ -1186,38 +1186,40 @@ Module* getModule(Decl* decl)
return moduleDecl->module;
}
-bool findImageFormatByName(char const* name, ImageFormat* outFormat)
+static const ImageFormatInfo kImageFormatInfos[] =
{
- static const struct
- {
- char const* name;
- ImageFormat format;
- } kFormats[] =
- {
-#define FORMAT(NAME) { #NAME, ImageFormat::NAME },
+#define SLANG_IMAGE_FORMAT_INFO(TYPE, COUNT, SIZE) SLANG_SCALAR_TYPE_##TYPE, uint8_t(COUNT), uint8_t(SIZE)
+#define FORMAT(NAME, OTHER) \
+ { SLANG_IMAGE_FORMAT_INFO OTHER, UnownedStringSlice::fromLiteral(#NAME) },
#include "slang-image-format-defs.h"
- };
+#undef FORMAT
+#undef SLANG_IMAGE_FORMAT_INFO
+};
- for( auto item : kFormats )
+bool findImageFormatByName(char const* inName, ImageFormat* outFormat)
+{
+ const UnownedStringSlice name(inName);
+
+ for (Index i = 0; i < SLANG_COUNT_OF(kImageFormatInfos); ++i)
{
- if( strcmp(item.name, name) == 0 )
+ const auto& info = kImageFormatInfos[i];
+ if (info.name == name)
{
- *outFormat = item.format;
+ *outFormat = ImageFormat(i);
return true;
}
}
-
return false;
}
char const* getGLSLNameForImageFormat(ImageFormat format)
{
- switch( format )
- {
- default: return "unhandled";
-#define FORMAT(NAME) case ImageFormat::NAME: return #NAME;
-#include "slang-image-format-defs.h"
- }
+ return kImageFormatInfos[Index(format)].name.begin();
}
+ const ImageFormatInfo& getImageFormatInfo(ImageFormat format)
+ {
+ return kImageFormatInfos[Index(format)];
+ }
+
} // namespace Slang