// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
#pragma once
#if COMPILE_WITH_SHADER_COMPILER
#include "Config.h"
#include "Engine/Core/Collections/HashSet.h"
class ShaderMeta;
class ShaderFunctionMeta;
class MemoryWriteStream;
///
/// Shader compilation context container
///
class ShaderCompilationContext
{
public:
///
/// The compilation options.
///
const ShaderCompilationOptions* Options;
///
/// The shader metadata container.
///
ShaderMeta* Meta;
public:
///
/// Output stream to write compiled shader cache to.
///
MemoryWriteStream* Output;
///
/// All source files included by this file (absolute paths). Generated during shader compilation.
///
HashSet Includes;
public:
///
/// Name of the target object (in ASCII)
///
char TargetNameAnsi[64];
public:
///
/// Event called on compilation error
///
/// Error message
void OnError(const char* message);
///
/// Event called on compilation debug data collecting
///
/// Target function meta
/// Permutation index
/// Data pointer
/// Data size in bytes
void OnCollectDebugInfo(ShaderFunctionMeta& meta, int32 permutationIndex, const char* data, const int32 dataLength);
public:
///
/// Init
///
/// Options
/// Metadata
ShaderCompilationContext(const ShaderCompilationOptions* options, ShaderMeta* meta);
};
#endif