You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
581 lines
18 KiB
C
581 lines
18 KiB
C
// Modifications copyright Amazon.com, Inc. or its affiliates
|
|
// Modifications copyright Crytek GmbH
|
|
|
|
#ifndef HLSLCC_H_
|
|
#define HLSLCC_H_
|
|
|
|
#if defined (_WIN32) && defined(HLSLCC_DYNLIB)
|
|
#define HLSLCC_APIENTRY __stdcall
|
|
#if defined(libHLSLcc_EXPORTS)
|
|
#define HLSLCC_API __declspec(dllexport)
|
|
#else
|
|
#define HLSLCC_API __declspec(dllimport)
|
|
#endif
|
|
#else
|
|
#define HLSLCC_APIENTRY
|
|
#define HLSLCC_API
|
|
#endif
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
typedef enum
|
|
{
|
|
LANG_DEFAULT,// Depends on the HLSL shader model.
|
|
LANG_ES_100,
|
|
LANG_ES_300,
|
|
LANG_ES_310,
|
|
LANG_120,
|
|
LANG_130,
|
|
LANG_140,
|
|
LANG_150,
|
|
LANG_330,
|
|
LANG_400,
|
|
LANG_410,
|
|
LANG_420,
|
|
LANG_430,
|
|
LANG_440,
|
|
} GLLang;
|
|
|
|
typedef struct {
|
|
uint32_t ARB_explicit_attrib_location : 1;
|
|
uint32_t ARB_explicit_uniform_location : 1;
|
|
uint32_t ARB_shading_language_420pack : 1;
|
|
}GlExtensions;
|
|
|
|
enum {MAX_SHADER_VEC4_OUTPUT = 512};
|
|
enum {MAX_SHADER_VEC4_INPUT = 512};
|
|
enum {MAX_TEXTURES = 128};
|
|
enum {MAX_FORK_PHASES = 2};
|
|
enum {MAX_FUNCTION_BODIES = 1024};
|
|
enum {MAX_CLASS_TYPES = 1024};
|
|
enum {MAX_FUNCTION_POINTERS = 128};
|
|
|
|
//Reflection
|
|
#define MAX_REFLECT_STRING_LENGTH 512
|
|
#define MAX_SHADER_VARS 256
|
|
#define MAX_CBUFFERS 256
|
|
#define MAX_UAV 256
|
|
#define MAX_FUNCTION_TABLES 256
|
|
#define MAX_RESOURCE_BINDINGS 256
|
|
|
|
//Operands flags
|
|
#define TO_FLAG_NONE 0x0
|
|
#define TO_FLAG_INTEGER 0x1
|
|
#define TO_FLAG_NAME_ONLY 0x2
|
|
#define TO_FLAG_DECLARATION_NAME 0x4
|
|
#define TO_FLAG_DESTINATION 0x8 //Operand is being written to by assignment.
|
|
#define TO_FLAG_UNSIGNED_INTEGER 0x10
|
|
#define TO_FLAG_DOUBLE 0x20
|
|
#define TO_FLAG_FLOAT 0x40
|
|
#define TO_FLAG_COPY 0x80
|
|
|
|
typedef enum SPECIAL_NAME
|
|
{
|
|
NAME_UNDEFINED = 0,
|
|
NAME_POSITION = 1,
|
|
NAME_CLIP_DISTANCE = 2,
|
|
NAME_CULL_DISTANCE = 3,
|
|
NAME_RENDER_TARGET_ARRAY_INDEX = 4,
|
|
NAME_VIEWPORT_ARRAY_INDEX = 5,
|
|
NAME_VERTEX_ID = 6,
|
|
NAME_PRIMITIVE_ID = 7,
|
|
NAME_INSTANCE_ID = 8,
|
|
NAME_IS_FRONT_FACE = 9,
|
|
NAME_SAMPLE_INDEX = 10,
|
|
// The following are added for D3D11
|
|
NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR = 11,
|
|
NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR = 12,
|
|
NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR = 13,
|
|
NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR = 14,
|
|
NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR = 15,
|
|
NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR = 16,
|
|
NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR = 17,
|
|
NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR = 18,
|
|
NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR = 19,
|
|
NAME_FINAL_TRI_INSIDE_TESSFACTOR = 20,
|
|
NAME_FINAL_LINE_DETAIL_TESSFACTOR = 21,
|
|
NAME_FINAL_LINE_DENSITY_TESSFACTOR = 22,
|
|
} SPECIAL_NAME;
|
|
|
|
|
|
typedef enum {
|
|
INOUT_COMPONENT_UNKNOWN = 0,
|
|
INOUT_COMPONENT_UINT32 = 1,
|
|
INOUT_COMPONENT_SINT32 = 2,
|
|
INOUT_COMPONENT_FLOAT32 = 3
|
|
} INOUT_COMPONENT_TYPE;
|
|
|
|
typedef enum MIN_PRECISION {
|
|
MIN_PRECISION_DEFAULT = 0,
|
|
MIN_PRECISION_FLOAT_16 = 1,
|
|
MIN_PRECISION_FLOAT_2_8 = 2,
|
|
MIN_PRECISION_RESERVED = 3,
|
|
MIN_PRECISION_SINT_16 = 4,
|
|
MIN_PRECISION_UINT_16 = 5,
|
|
MIN_PRECISION_ANY_16 = 0xf0,
|
|
MIN_PRECISION_ANY_10 = 0xf1
|
|
} MIN_PRECISION;
|
|
|
|
typedef struct InOutSignature_TAG
|
|
{
|
|
char SemanticName[MAX_REFLECT_STRING_LENGTH];
|
|
uint32_t ui32SemanticIndex;
|
|
SPECIAL_NAME eSystemValueType;
|
|
INOUT_COMPONENT_TYPE eComponentType;
|
|
uint32_t ui32Register;
|
|
uint32_t ui32Mask;
|
|
uint32_t ui32ReadWriteMask;
|
|
|
|
uint32_t ui32Stream;
|
|
MIN_PRECISION eMinPrec;
|
|
|
|
} InOutSignature;
|
|
|
|
typedef enum ResourceType_TAG
|
|
{
|
|
RTYPE_CBUFFER,//0
|
|
RTYPE_TBUFFER,//1
|
|
RTYPE_TEXTURE,//2
|
|
RTYPE_SAMPLER,//3
|
|
RTYPE_UAV_RWTYPED,//4
|
|
RTYPE_STRUCTURED,//5
|
|
RTYPE_UAV_RWSTRUCTURED,//6
|
|
RTYPE_BYTEADDRESS,//7
|
|
RTYPE_UAV_RWBYTEADDRESS,//8
|
|
RTYPE_UAV_APPEND_STRUCTURED,//9
|
|
RTYPE_UAV_CONSUME_STRUCTURED,//10
|
|
RTYPE_UAV_RWSTRUCTURED_WITH_COUNTER,//11
|
|
RTYPE_COUNT,
|
|
} ResourceType;
|
|
|
|
typedef enum ResourceGroup_TAG {
|
|
RGROUP_CBUFFER,
|
|
RGROUP_TEXTURE,
|
|
RGROUP_SAMPLER,
|
|
RGROUP_UAV,
|
|
RGROUP_COUNT,
|
|
} ResourceGroup;
|
|
|
|
typedef enum REFLECT_RESOURCE_DIMENSION
|
|
{
|
|
REFLECT_RESOURCE_DIMENSION_UNKNOWN = 0,
|
|
REFLECT_RESOURCE_DIMENSION_BUFFER = 1,
|
|
REFLECT_RESOURCE_DIMENSION_TEXTURE1D = 2,
|
|
REFLECT_RESOURCE_DIMENSION_TEXTURE1DARRAY = 3,
|
|
REFLECT_RESOURCE_DIMENSION_TEXTURE2D = 4,
|
|
REFLECT_RESOURCE_DIMENSION_TEXTURE2DARRAY = 5,
|
|
REFLECT_RESOURCE_DIMENSION_TEXTURE2DMS = 6,
|
|
REFLECT_RESOURCE_DIMENSION_TEXTURE2DMSARRAY = 7,
|
|
REFLECT_RESOURCE_DIMENSION_TEXTURE3D = 8,
|
|
REFLECT_RESOURCE_DIMENSION_TEXTURECUBE = 9,
|
|
REFLECT_RESOURCE_DIMENSION_TEXTURECUBEARRAY = 10,
|
|
REFLECT_RESOURCE_DIMENSION_BUFFEREX = 11,
|
|
} REFLECT_RESOURCE_DIMENSION;
|
|
|
|
typedef struct ResourceBinding_TAG
|
|
{
|
|
char Name[MAX_REFLECT_STRING_LENGTH];
|
|
ResourceType eType;
|
|
uint32_t ui32BindPoint;
|
|
uint32_t ui32BindCount;
|
|
uint32_t ui32Flags;
|
|
REFLECT_RESOURCE_DIMENSION eDimension;
|
|
uint32_t ui32ReturnType;
|
|
uint32_t ui32NumSamples;
|
|
} ResourceBinding;
|
|
|
|
// Do not change the value of these enums or they will not match what we find in the DXBC file
|
|
typedef enum _SHADER_VARIABLE_TYPE {
|
|
SVT_VOID = 0,
|
|
SVT_BOOL = 1,
|
|
SVT_INT = 2,
|
|
SVT_FLOAT = 3,
|
|
SVT_STRING = 4,
|
|
SVT_TEXTURE = 5,
|
|
SVT_TEXTURE1D = 6,
|
|
SVT_TEXTURE2D = 7,
|
|
SVT_TEXTURE3D = 8,
|
|
SVT_TEXTURECUBE = 9,
|
|
SVT_SAMPLER = 10,
|
|
SVT_PIXELSHADER = 15,
|
|
SVT_VERTEXSHADER = 16,
|
|
SVT_UINT = 19,
|
|
SVT_UINT8 = 20,
|
|
SVT_GEOMETRYSHADER = 21,
|
|
SVT_RASTERIZER = 22,
|
|
SVT_DEPTHSTENCIL = 23,
|
|
SVT_BLEND = 24,
|
|
SVT_BUFFER = 25,
|
|
SVT_CBUFFER = 26,
|
|
SVT_TBUFFER = 27,
|
|
SVT_TEXTURE1DARRAY = 28,
|
|
SVT_TEXTURE2DARRAY = 29,
|
|
SVT_RENDERTARGETVIEW = 30,
|
|
SVT_DEPTHSTENCILVIEW = 31,
|
|
SVT_TEXTURE2DMS = 32,
|
|
SVT_TEXTURE2DMSARRAY = 33,
|
|
SVT_TEXTURECUBEARRAY = 34,
|
|
SVT_HULLSHADER = 35,
|
|
SVT_DOMAINSHADER = 36,
|
|
SVT_INTERFACE_POINTER = 37,
|
|
SVT_COMPUTESHADER = 38,
|
|
SVT_DOUBLE = 39,
|
|
SVT_RWTEXTURE1D = 40,
|
|
SVT_RWTEXTURE1DARRAY = 41,
|
|
SVT_RWTEXTURE2D = 42,
|
|
SVT_RWTEXTURE2DARRAY = 43,
|
|
SVT_RWTEXTURE3D = 44,
|
|
SVT_RWBUFFER = 45,
|
|
SVT_BYTEADDRESS_BUFFER = 46,
|
|
SVT_RWBYTEADDRESS_BUFFER = 47,
|
|
SVT_STRUCTURED_BUFFER = 48,
|
|
SVT_RWSTRUCTURED_BUFFER = 49,
|
|
SVT_APPEND_STRUCTURED_BUFFER = 50,
|
|
SVT_CONSUME_STRUCTURED_BUFFER = 51,
|
|
|
|
// Partial precision types
|
|
SVT_FLOAT10 = 53,
|
|
SVT_FLOAT16 = 54,
|
|
SVT_INT16 = 156,
|
|
SVT_INT12 = 157,
|
|
SVT_UINT16 = 158,
|
|
|
|
SVT_FORCE_DWORD = 0x7fffffff
|
|
} SHADER_VARIABLE_TYPE;
|
|
|
|
typedef enum _SHADER_VARIABLE_CLASS {
|
|
SVC_SCALAR = 0,
|
|
SVC_VECTOR = ( SVC_SCALAR + 1 ),
|
|
SVC_MATRIX_ROWS = ( SVC_VECTOR + 1 ),
|
|
SVC_MATRIX_COLUMNS = ( SVC_MATRIX_ROWS + 1 ),
|
|
SVC_OBJECT = ( SVC_MATRIX_COLUMNS + 1 ),
|
|
SVC_STRUCT = ( SVC_OBJECT + 1 ),
|
|
SVC_INTERFACE_CLASS = ( SVC_STRUCT + 1 ),
|
|
SVC_INTERFACE_POINTER = ( SVC_INTERFACE_CLASS + 1 ),
|
|
SVC_FORCE_DWORD = 0x7fffffff
|
|
} SHADER_VARIABLE_CLASS;
|
|
|
|
typedef struct ShaderVarType_TAG {
|
|
SHADER_VARIABLE_CLASS Class;
|
|
SHADER_VARIABLE_TYPE Type;
|
|
uint32_t Rows;
|
|
uint32_t Columns;
|
|
uint32_t Elements;
|
|
uint32_t MemberCount;
|
|
uint32_t Offset;
|
|
char Name[MAX_REFLECT_STRING_LENGTH];
|
|
|
|
uint32_t ParentCount;
|
|
struct ShaderVarType_TAG * Parent;
|
|
|
|
struct ShaderVarType_TAG * Members;
|
|
} ShaderVarType;
|
|
|
|
typedef struct ShaderVar_TAG
|
|
{
|
|
char Name[MAX_REFLECT_STRING_LENGTH];
|
|
int haveDefaultValue;
|
|
uint32_t* pui32DefaultValues;
|
|
//Offset/Size in bytes.
|
|
uint32_t ui32StartOffset;
|
|
uint32_t ui32Size;
|
|
uint32_t ui32Flags;
|
|
|
|
ShaderVarType sType;
|
|
} ShaderVar;
|
|
|
|
typedef struct ConstantBuffer_TAG
|
|
{
|
|
char Name[MAX_REFLECT_STRING_LENGTH];
|
|
|
|
uint32_t ui32NumVars;
|
|
ShaderVar asVars[MAX_SHADER_VARS];
|
|
|
|
uint32_t ui32TotalSizeInBytes;
|
|
int blob;
|
|
} ConstantBuffer;
|
|
|
|
typedef struct ClassType_TAG
|
|
{
|
|
char Name[MAX_REFLECT_STRING_LENGTH];
|
|
uint16_t ui16ID;
|
|
uint16_t ui16ConstBufStride;
|
|
uint16_t ui16Texture;
|
|
uint16_t ui16Sampler;
|
|
} ClassType;
|
|
|
|
typedef struct ClassInstance_TAG
|
|
{
|
|
char Name[MAX_REFLECT_STRING_LENGTH];
|
|
uint16_t ui16ID;
|
|
uint16_t ui16ConstBuf;
|
|
uint16_t ui16ConstBufOffset;
|
|
uint16_t ui16Texture;
|
|
uint16_t ui16Sampler;
|
|
} ClassInstance;
|
|
|
|
typedef enum TESSELLATOR_PARTITIONING
|
|
{
|
|
TESSELLATOR_PARTITIONING_UNDEFINED = 0,
|
|
TESSELLATOR_PARTITIONING_INTEGER = 1,
|
|
TESSELLATOR_PARTITIONING_POW2 = 2,
|
|
TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 3,
|
|
TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 4
|
|
} TESSELLATOR_PARTITIONING;
|
|
|
|
typedef enum TESSELLATOR_OUTPUT_PRIMITIVE
|
|
{
|
|
TESSELLATOR_OUTPUT_UNDEFINED = 0,
|
|
TESSELLATOR_OUTPUT_POINT = 1,
|
|
TESSELLATOR_OUTPUT_LINE = 2,
|
|
TESSELLATOR_OUTPUT_TRIANGLE_CW = 3,
|
|
TESSELLATOR_OUTPUT_TRIANGLE_CCW = 4
|
|
} TESSELLATOR_OUTPUT_PRIMITIVE;
|
|
|
|
typedef enum INTERPOLATION_MODE
|
|
{
|
|
INTERPOLATION_UNDEFINED = 0,
|
|
INTERPOLATION_CONSTANT = 1,
|
|
INTERPOLATION_LINEAR = 2,
|
|
INTERPOLATION_LINEAR_CENTROID = 3,
|
|
INTERPOLATION_LINEAR_NOPERSPECTIVE = 4,
|
|
INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID = 5,
|
|
INTERPOLATION_LINEAR_SAMPLE = 6,
|
|
INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE = 7,
|
|
} INTERPOLATION_MODE;
|
|
|
|
typedef enum TRACE_VARIABLE_GROUP
|
|
{
|
|
TRACE_VARIABLE_INPUT = 0,
|
|
TRACE_VARIABLE_TEMP = 1,
|
|
TRACE_VARIABLE_OUTPUT = 2
|
|
} TRACE_VARIABLE_GROUP;
|
|
|
|
typedef enum TRACE_VARIABLE_TYPE
|
|
{
|
|
TRACE_VARIABLE_FLOAT = 0,
|
|
TRACE_VARIABLE_SINT = 1,
|
|
TRACE_VARIABLE_UINT = 2,
|
|
TRACE_VARIABLE_DOUBLE = 3,
|
|
TRACE_VARIABLE_UNKNOWN = 4
|
|
} TRACE_VARIABLE_TYPE;
|
|
|
|
typedef struct VariableTraceInfo_TAG
|
|
{
|
|
TRACE_VARIABLE_GROUP eGroup;
|
|
TRACE_VARIABLE_TYPE eType;
|
|
uint8_t ui8Index;
|
|
uint8_t ui8Component;
|
|
} VariableTraceInfo;
|
|
|
|
typedef struct StepTraceInfo_TAG
|
|
{
|
|
uint32_t ui32NumVariables;
|
|
VariableTraceInfo* psVariables;
|
|
} StepTraceInfo;
|
|
|
|
typedef enum SYMBOL_TYPE
|
|
{
|
|
SYMBOL_TESSELLATOR_PARTITIONING = 0,
|
|
SYMBOL_TESSELLATOR_OUTPUT_PRIMITIVE = 1,
|
|
SYMBOL_INPUT_INTERPOLATION_MODE = 2,
|
|
SYMBOL_EMULATE_DEPTH_CLAMP = 3
|
|
} SYMBOL_TYPE;
|
|
|
|
typedef struct Symbol_TAG
|
|
{
|
|
SYMBOL_TYPE eType;
|
|
uint32_t ui32ID;
|
|
uint32_t ui32Value;
|
|
} Symbol;
|
|
|
|
typedef struct EmbeddedResourceName_TAG
|
|
{
|
|
uint32_t ui20Offset : 20;
|
|
uint32_t ui12Size : 12;
|
|
} EmbeddedResourceName;
|
|
|
|
typedef struct SamplerMask_TAG
|
|
{
|
|
uint32_t ui10TextureBindPoint : 10;
|
|
uint32_t ui10SamplerBindPoint : 10;
|
|
uint32_t ui10TextureUnit : 10;
|
|
uint32_t bNormalSample : 1;
|
|
uint32_t bCompareSample : 1;
|
|
} SamplerMask;
|
|
|
|
typedef struct Sampler_TAG
|
|
{
|
|
SamplerMask sMask;
|
|
EmbeddedResourceName sNormalName;
|
|
EmbeddedResourceName sCompareName;
|
|
} Sampler;
|
|
|
|
typedef struct Resource_TAG
|
|
{
|
|
uint32_t ui32BindPoint;
|
|
ResourceGroup eGroup;
|
|
EmbeddedResourceName sName;
|
|
} Resource;
|
|
|
|
typedef struct ShaderInfo_TAG
|
|
{
|
|
uint32_t ui32MajorVersion;
|
|
uint32_t ui32MinorVersion;
|
|
|
|
uint32_t ui32NumInputSignatures;
|
|
InOutSignature* psInputSignatures;
|
|
|
|
uint32_t ui32NumOutputSignatures;
|
|
InOutSignature* psOutputSignatures;
|
|
|
|
uint32_t ui32NumResourceBindings;
|
|
ResourceBinding* psResourceBindings;
|
|
|
|
uint32_t ui32NumConstantBuffers;
|
|
ConstantBuffer* psConstantBuffers;
|
|
ConstantBuffer* psThisPointerConstBuffer;
|
|
|
|
uint32_t ui32NumClassTypes;
|
|
ClassType* psClassTypes;
|
|
|
|
uint32_t ui32NumClassInstances;
|
|
ClassInstance* psClassInstances;
|
|
|
|
//Func table ID to class name ID.
|
|
uint32_t aui32TableIDToTypeID[MAX_FUNCTION_TABLES];
|
|
|
|
uint32_t aui32ResourceMap[RGROUP_COUNT][MAX_RESOURCE_BINDINGS];
|
|
|
|
// GLSL resources
|
|
Sampler asSamplers[MAX_RESOURCE_BINDINGS];
|
|
Resource asImages[MAX_RESOURCE_BINDINGS];
|
|
Resource asUniformBuffers[MAX_RESOURCE_BINDINGS];
|
|
Resource asStorageBuffers[MAX_RESOURCE_BINDINGS];
|
|
uint32_t ui32NumSamplers;
|
|
uint32_t ui32NumImages;
|
|
uint32_t ui32NumUniformBuffers;
|
|
uint32_t ui32NumStorageBuffers;
|
|
|
|
// Trace info if tracing is enabled
|
|
uint32_t ui32NumTraceSteps;
|
|
StepTraceInfo* psTraceSteps;
|
|
|
|
// Symbols imported
|
|
uint32_t ui32NumImports;
|
|
Symbol* psImports;
|
|
|
|
// Symbols exported
|
|
uint32_t ui32NumExports;
|
|
Symbol* psExports;
|
|
|
|
// Hash of the input shader for debugging purposes
|
|
uint32_t ui32InputHash;
|
|
|
|
// Offset in the GLSL string where symbol definitions can be inserted
|
|
uint32_t ui32SymbolsOffset;
|
|
|
|
TESSELLATOR_PARTITIONING eTessPartitioning;
|
|
TESSELLATOR_OUTPUT_PRIMITIVE eTessOutPrim;
|
|
|
|
//Required if PixelInterpDependency is true
|
|
INTERPOLATION_MODE aePixelInputInterpolation[MAX_SHADER_VEC4_INPUT];
|
|
} ShaderInfo;
|
|
|
|
typedef struct
|
|
{
|
|
int shaderType; //One of the GL enums.
|
|
char* sourceCode;
|
|
ShaderInfo reflection;
|
|
GLLang GLSLLanguage;
|
|
} GLSLShader;
|
|
|
|
typedef enum _FRAMEBUFFER_FETCH_TYPE
|
|
{
|
|
FBF_NONE = 0,
|
|
FBF_EXT_COLOR = 1 << 0,
|
|
FBF_ARM_COLOR = 1 << 1,
|
|
FBF_ARM_DEPTH = 1 << 2,
|
|
FBF_ARM_STENCIL = 1 << 3,
|
|
FBF_ANY = FBF_EXT_COLOR | FBF_ARM_COLOR | FBF_ARM_DEPTH | FBF_ARM_STENCIL
|
|
} FRAMEBUFFER_FETCH_TYPE;
|
|
|
|
// NOTE: HLSLCC flags are specified by command line when executing this cross compiler.
|
|
// If these flags change, the command line switch '-flags=XXX' must change as well.
|
|
// Open 3D Engine composes the command line in file 'dev\Code\CryEngine\RenderDll\Common\Shaders\RemoteCompiler.cpp'
|
|
|
|
/*HLSL constant buffers are treated as default-block unform arrays by default. This is done
|
|
to support versions of GLSL which lack ARB_uniform_buffer_object functionality.
|
|
Setting this flag causes each one to have its own uniform block.
|
|
Note: Currently the nth const buffer will be named UnformBufferN. This is likey to change to the original HLSL name in the future.*/
|
|
static const unsigned int HLSLCC_FLAG_UNIFORM_BUFFER_OBJECT = 0x1;
|
|
|
|
static const unsigned int HLSLCC_FLAG_ORIGIN_UPPER_LEFT = 0x2;
|
|
|
|
static const unsigned int HLSLCC_FLAG_PIXEL_CENTER_INTEGER = 0x4;
|
|
|
|
static const unsigned int HLSLCC_FLAG_GLOBAL_CONSTS_NEVER_IN_UBO = 0x8;
|
|
|
|
//GS enabled?
|
|
//Affects vertex shader (i.e. need to compile vertex shader again to use with/without GS).
|
|
//This flag is needed in order for the interfaces between stages to match when GS is in use.
|
|
//PS inputs VtxGeoOutput
|
|
//GS outputs VtxGeoOutput
|
|
//Vs outputs VtxOutput if GS enabled. VtxGeoOutput otherwise.
|
|
static const unsigned int HLSLCC_FLAG_GS_ENABLED = 0x10;
|
|
|
|
static const unsigned int HLSLCC_FLAG_TESS_ENABLED = 0x20;
|
|
|
|
//Either use this flag or glBindFragDataLocationIndexed.
|
|
//When set the first pixel shader output is the first input to blend
|
|
//equation, the others go to the second input.
|
|
static const unsigned int HLSLCC_FLAG_DUAL_SOURCE_BLENDING = 0x40;
|
|
|
|
//If set, shader inputs and outputs are declared with their semantic name.
|
|
static const unsigned int HLSLCC_FLAG_INOUT_SEMANTIC_NAMES = 0x80;
|
|
|
|
static const unsigned int HLSLCC_FLAG_INVERT_CLIP_SPACE_Y = 0x100;
|
|
static const unsigned int HLSLCC_FLAG_CONVERT_CLIP_SPACE_Z = 0x200;
|
|
static const unsigned int HLSLCC_FLAG_AVOID_RESOURCE_BINDINGS_AND_LOCATIONS = 0x400;
|
|
static const unsigned int HLSLCC_FLAG_AVOID_TEMP_REGISTER_ALIASING = 0x800;
|
|
static const unsigned int HLSLCC_FLAG_TRACING_INSTRUMENTATION = 0x1000;
|
|
static const unsigned int HLSLCC_FLAG_HASH_INPUT = 0x2000;
|
|
static const unsigned int HLSLCC_FLAG_ADD_DEBUG_HEADER = 0x4000;
|
|
static const unsigned int HLSLCC_FLAG_NO_VERSION_STRING = 0x8000;
|
|
|
|
static const unsigned int HLSLCC_FLAG_AVOID_SHADER_LOAD_STORE_EXTENSION = 0x10000;
|
|
|
|
// If set, HLSLcc will generate GLSL code which contains syntactic workarounds for
|
|
// driver bugs found in Qualcomm devices running OpenGL ES 3.0
|
|
static const unsigned int HLSLCC_FLAG_QUALCOMM_GLES30_DRIVER_WORKAROUND = 0x20000;
|
|
|
|
// If set, HLSL DX9 lower precision qualifiers (e.g half) will be transformed to DX11 style (e.g min16float)
|
|
// before compiling. Necessary to preserve precision information. If not, FXC just silently transform
|
|
// everything to full precision (e.g float32).
|
|
static const unsigned int HLSLCC_FLAG_HALF_FLOAT_TRANSFORM = 0x40000;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
HLSLCC_API void HLSLCC_APIENTRY HLSLcc_SetMemoryFunctions(void* (*malloc_override)(size_t),
|
|
void* (*calloc_override)(size_t,size_t),
|
|
void (*free_override)(void *),
|
|
void* (*realloc_override)(void*,size_t));
|
|
|
|
HLSLCC_API int HLSLCC_APIENTRY TranslateHLSLFromFile(const char* filename, unsigned int flags, GLLang language, const GlExtensions *extensions, GLSLShader* result);
|
|
|
|
HLSLCC_API int HLSLCC_APIENTRY TranslateHLSLFromMem(const char* shader, size_t size, unsigned int flags, GLLang language, const GlExtensions *extensions, GLSLShader* result);
|
|
|
|
HLSLCC_API const char* HLSLCC_APIENTRY GetVersionString(GLLang language);
|
|
|
|
HLSLCC_API void HLSLCC_APIENTRY FreeGLSLShader(GLSLShader*);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|