summaryrefslogtreecommitdiffstats
path: root/tools/slang-test/render-api-util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/slang-test/render-api-util.cpp')
-rw-r--r--tools/slang-test/render-api-util.cpp286
1 files changed, 0 insertions, 286 deletions
diff --git a/tools/slang-test/render-api-util.cpp b/tools/slang-test/render-api-util.cpp
deleted file mode 100644
index 06a915df8..000000000
--- a/tools/slang-test/render-api-util.cpp
+++ /dev/null
@@ -1,286 +0,0 @@
-
-#include "render-api-util.h"
-
-#include "../../slang.h"
-
-#include "../../source/core/list.h"
-#include "../../source/core/slang-string-util.h"
-
-/* static */const RenderApiUtil::Info RenderApiUtil::s_infos[] =
-{
- { RenderApiType::OpenGl, "gl,ogl,opengl"},
- { RenderApiType::Vulkan, "vk,vulkan"},
- { RenderApiType::D3D12, "dx12,d3d12"},
- { RenderApiType::D3D11, "dx11,d3d11"},
-};
-
-static int _calcAvailableApis()
-{
- int flags = 0;
- for (int i = 0; i < int(RenderApiType::CountOf); i++)
- {
- if (RenderApiUtil::calcHasApi(RenderApiType(i)))
- {
- flags |= (1 << i);
- }
- }
-
- return flags;
-}
-
-/* static */int RenderApiUtil::getAvailableApis()
-{
- static int s_availableApis = _calcAvailableApis();
- return s_availableApis;
-}
-
-/* static */RenderApiType RenderApiUtil::findApiTypeByName(const Slang::UnownedStringSlice& name)
-{
- using namespace Slang;
- List<UnownedStringSlice> namesList;
- for (int j = 0; j < SLANG_COUNT_OF(RenderApiUtil::s_infos); j++)
- {
- const auto& apiInfo = RenderApiUtil::s_infos[j];
- const UnownedStringSlice names(apiInfo.names);
-
- if (names.indexOf(',') >= 0)
- {
- StringUtil::split(names, ',', namesList);
- if (namesList.IndexOf(name) != UInt(-1))
- {
- return apiInfo.type;
- }
- }
- else if (names == name)
- {
- return apiInfo.type;
- }
- }
- return RenderApiType::Unknown;
-}
-
-/* static */ Slang::Result RenderApiUtil::findApiFlagsByName(const Slang::UnownedStringSlice& name, RenderApiFlags* flagsOut)
-{
- // Special case 'all'
- if (name == "all")
- {
- *flagsOut = RenderApiFlags(RenderApiFlag::AllOf);
- return SLANG_OK;
- }
- if (name == "none")
- {
- *flagsOut = RenderApiFlags(0);
- return SLANG_OK;
- }
- RenderApiType type = findApiTypeByName(name);
- if (type == RenderApiType::Unknown)
- {
- return SLANG_FAIL;
- }
- *flagsOut = RenderApiFlags(1) << int(type);
- return SLANG_OK;
-}
-
-static bool isNameStartChar(char c)
-{
- return (c >= 'a' && c <='z') || (c >= 'A' && c <= 'Z') || (c == '_');
-}
-
-static bool isNameNextChar(char c)
-{
- return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c == '_') || (c >= '0' && c <= '9');
-}
-
-namespace { // anonymous
-enum class Token
-{
- eError,
- eOp,
- eId,
- eEnd,
-};
-}
-
-static Token nextToken(Slang::UnownedStringSlice& textInOut, Slang::UnownedStringSlice& lexemeOut)
-{
- using namespace Slang;
- if (textInOut.size() <= 0)
- {
- return Token::eEnd;
- }
- const char* start = textInOut.begin();
- const char* end = textInOut.end();
-
- const char firstChar = start[0];
- if (firstChar == '-' || firstChar == '+')
- {
- lexemeOut = UnownedStringSlice(start, start + 1);
- textInOut = UnownedStringSlice(start + 1, end);
- return Token::eOp;
- }
-
- if (!isNameStartChar(firstChar))
- {
- lexemeOut = UnownedStringSlice(start, start + 1);
- return Token::eError;
- }
- const char* cur = start + 1;
- while (cur < end && isNameNextChar(*cur))
- {
- cur++;
- }
-
- lexemeOut = UnownedStringSlice(start, cur);
- textInOut = UnownedStringSlice(cur, end);
- return Token::eId;
-}
-
-/* static */Slang::Result RenderApiUtil::parseApiFlags(const Slang::UnownedStringSlice& textIn, RenderApiFlags initialFlags, RenderApiFlags* apiFlagsOut)
-{
- using namespace Slang;
-
- UnownedStringSlice text(textIn);
- UnownedStringSlice lexeme;
-
- RenderApiFlags apiFlags = 0;
-
- switch (nextToken(text, lexeme))
- {
- case Token::eOp:
- {
- // If we start with an op - we use the passed in values as the default
- // Rewind back to the start
- text = textIn;
- apiFlags = initialFlags;
- break;
- }
- case Token::eId:
- {
- // If we start with an Id - we use that as the starting state
- SLANG_RETURN_ON_FAIL(findApiFlagsByName(lexeme, &apiFlags));
- break;
- }
- default: return SLANG_FAIL;
- }
-
- while (true)
- {
- // Must have an op followed by an id unless we are at the end
- switch (nextToken(text, lexeme))
- {
- case Token::eEnd:
- {
- *apiFlagsOut = apiFlags;
- return SLANG_OK;
- }
- case Token::eOp: break;
- default: return SLANG_FAIL;
- }
-
- const char op = lexeme[0];
- if (nextToken(text, lexeme) != Token::eId)
- {
- return SLANG_FAIL;
- }
-
- RenderApiFlags flags;
- SLANG_RETURN_ON_FAIL(findApiFlagsByName(lexeme, &flags));
-
- if (op == '+')
- {
- apiFlags |= flags;
- }
- else
- {
- apiFlags &= ~flags;
- }
- }
-}
-
-/* !!!!!!!!!!!!!!!!!!!!!!!!!!!! Platform specific stuff !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
-
-
-#if SLANG_WINDOWS_FAMILY
-
-#define WIN32_LEAN_AND_MEAN
-#define NOMINMAX
-#include <Windows.h>
-#undef WIN32_LEAN_AND_MEAN
-#undef NOMINMAX
-
-namespace { // anonymous
-
-class WinModule
-{
-public:
-
- /// Initialize. Returns the module on success
- HMODULE init(const char* name)
- {
- if (m_module)
- {
- ::FreeModule(m_module);
- m_module = nullptr;
- }
- return m_module = ::LoadLibraryA(name);
- }
-
- /// convert to HMODULE
- SLANG_FORCE_INLINE operator HMODULE() const { return m_module; }
-
- /// True if loaded
- bool isLoaded() const { return m_module != nullptr; }
-
- explicit WinModule(const char* name) :
- m_module(nullptr)
- {
- init(name);
- }
-
- /// Ctor
- WinModule() :m_module(nullptr) {}
- /// Dtor
- ~WinModule()
- {
- if (m_module)
- {
- ::FreeLibrary(m_module);
- }
- }
-
-protected:
- HMODULE m_module;
-};
-
-} // anonymous
-
-#else
-#endif
-
-/* static */bool RenderApiUtil::calcHasApi(RenderApiType type)
-{
-#if SLANG_WINDOWS_FAMILY
- switch (type)
- {
- case RenderApiType::OpenGl: return WinModule("opengl32.dll").isLoaded();
- case RenderApiType::Vulkan: return WinModule("vulkan-1.dll").isLoaded();
- case RenderApiType::D3D11: return WinModule("d3d11.dll").isLoaded();
- case RenderApiType::D3D12: return WinModule("d3d12.dll").isLoaded();
-
- default: return false;
- }
-
-#else
-
- switch (type)
- {
- case RenderApiType::OpenGl:
- case RenderApiType::Vulkan:
- {
- return true;
- }
- default: return false;
- }
-#endif
-
-}