#pragma once

#include <Core/Common/NonNullPtr.h>
#include <Graphics/GraphicsDevice.h>
#include <Graphics/Shader.h>

namespace Juliet::D3D12
{
    struct D3D12Shader
    {
        ByteBuffer ByteCode;

        uint32 NumSamplers;
        uint32 NumUniformBuffers;
        uint32 NumStorageBuffers;
        uint32 NumStorageTextures;
    };

    extern Shader* CreateShader(NonNullPtr<GPUDriver> driver, ByteBuffer shaderByteCode, ShaderCreateInfo& shaderCreateInfo);
    extern void DestroyShader(NonNullPtr<GPUDriver> driver, NonNullPtr<Shader> shader);
} // namespace Juliet::D3D12
