#pragma once

#include <Core/Common/CoreTypes.h>
#include <Core/Common/String.h>

enum class SourceLanguage : uint8
{
    HLSL    = 0,
    Count   = 1,
    Invalid = Count
};

enum class ShaderFormat : uint8
{
    DXIL    = 0,
    Count   = 1,
    Invalid = Count
};

enum class ShaderStage : uint8
{
    Vertex   = 0,
    Fragment = 1,
    Compute  = 2,
    Count    = 3,
    Invalid  = Count
};

struct ShaderInfo
{
    ByteBuffer     ByteCodeBuffer;
    Juliet::String EntryPoint;
    Juliet::String Name;
    ShaderStage    Stage;
};

struct HLSLShaderInfo : ShaderInfo
{
    // TODO Defines and includes
};

ByteBuffer CompileDXIL(HLSLShaderInfo& info);
