// =========================================
// MaterialTechniqueSet
// =========================================
use MaterialTechniqueSet;
set block XFILE_BLOCK_TEMP;
set string name;
set reusable techniques;

// MaterialTechnique
use MaterialTechnique;
set string name;
set arraysize passArray passCount;
reorder:
    passArray
    name;

// MaterialPass
use MaterialPass;
set count args perPrimArgCount + perObjArgCount + stableArgCount;
set reusable vertexDecl;
set reusable vertexShader;
set reusable pixelShader;

// MaterialShaderArgument
use MaterialShaderArgument;
set condition u::literalConst type == MTL_ARG_LITERAL_VERTEX_CONST
|| type == MTL_ARG_LITERAL_PIXEL_CONST;
set reusable u::literalConst;
set condition u::codeConst type == MTL_ARG_CODE_VERTEX_CONST
|| type == MTL_ARG_CODE_PIXEL_CONST;
set condition u::codeSampler type == MTL_ARG_CODE_PIXEL_SAMPLER;
set condition u::nameHash type == MTL_ARG_MATERIAL_VERTEX_CONST
|| type == MTL_ARG_MATERIAL_PIXEL_CONST || type == MTL_ARG_MATERIAL_PIXEL_SAMPLER;

// MaterialVertexShader
use MaterialVertexShader;
set string name;

// GfxVertexShaderLoadDef
use GfxVertexShaderLoadDef;
set count program programSize;

// MaterialPixelShader
use MaterialPixelShader;
set string name;

// GfxPixelShaderLoadDef
use GfxPixelShaderLoadDef;
set count program programSize;

// MaterialVertexStreamRouting
set condition MaterialVertexStreamRouting::decl never;
