#pragma once #include "slang-ir.h" #include "slang-type-system-shared.h" #include "../core/slang-string.h" namespace Slang { static const struct BaseTextureShapeInfo { char const* shapeName; SlangResourceShape baseShape; int coordCount; } kBaseTextureShapes[] = { { "1D", SLANG_TEXTURE_1D, 1 }, { "2D", SLANG_TEXTURE_2D, 2 }, { "3D", SLANG_TEXTURE_3D, 3 }, { "Cube", SLANG_TEXTURE_CUBE, 3 }, }; static const struct BaseTextureAccessInfo { char const* name; SlangResourceAccess access; } kBaseTextureAccessLevels[] = { { "", SLANG_RESOURCE_ACCESS_READ }, { "RW", SLANG_RESOURCE_ACCESS_READ_WRITE }, { "RasterizerOrdered", SLANG_RESOURCE_ACCESS_RASTER_ORDERED }, { "Feedback", SLANG_RESOURCE_ACCESS_FEEDBACK }, }; struct TextureTypeInfo { TextureTypeInfo( BaseTextureShapeInfo const& base, bool isArray, bool isMultisample, bool isShadow, StringBuilder& inSB, String const& inPath); BaseTextureShapeInfo const& base; bool isArray; bool isMultisample; bool isShadow; StringBuilder& sb; String path; void emitTypeDecl(); public: // // Functions for writing specific parts of a definition // void writeGetDimensionFunctions(); // // More general utilities // enum class ReadNoneMode { Never, Always }; void writeFuncBody( const char* funcName, const String& glsl, const String& cuda, const String& spirvDefault, const String& spirvRWDefault, const String& spirvCombined, const String& metal ); void writeFuncWithSig( const char* funcName, const String& sig, const String& glsl = String{}, const String& spirvDefault = String{}, const String& spirvRWDefault = String{}, const String& spirvCombined = String{}, const String& cuda = String{}, const String& metal = String{}, const ReadNoneMode readNoneMode = ReadNoneMode::Never ); void writeFunc( const char* returnType, const char* funcName, const String& params, const String& glsl = String{}, const String& spirvDefault = String{}, const String& spirvRWDefault = String{}, const String& spirvCombined = String{}, const String& cuda = String{}, const String& metal = String{}, const ReadNoneMode readNoneMode = ReadNoneMode::Never ); // A pointer to a string representing the current level of indentation const char* i; }; }