https://github.com/shader-slang/slang
Raw File
Tip revision: 5902acdabc4445a65741a7a6a3a95f223e301059 authored by Yong He on 23 January 2024, 07:19:40 UTC
[LSP] Fetch configs directly from didConfigurationChanged message. (#3478)
Tip revision: 5902acd
slang-stdlib-textures.h
#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& spirvCombined
    );
    void writeFuncWithSig(
        const char* funcName,
        const String& sig,
        const String& glsl = String{},
        const String& spirvDefault = String{},
        const String& spirvCombined = String{},
        const String& cuda = 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& spirvCombined = String{},
        const String& cuda = String{},
        const ReadNoneMode readNoneMode = ReadNoneMode::Never
    );

    // A pointer to a string representing the current level of indentation
    const char* i;
};

}
back to top