The Microsoft High Level Shader Language (HLSL) recognizes the words in this section as keywords. Keywords are predefined reserved identifiers that have special meanings. You can't use them as identifiers in your app.

AppendStructuredBuffer, asm, asm_fragment
BlendState, bool, break, Buffer, ByteAddressBuffer
case, cbuffer, centroid, class, column_major, compile, compile_fragment, CompileShader, const, continue, ComputeShader, ConsumeStructuredBuffer
default, DepthStencilState, DepthStencilView, discard, do, double, DomainShader, dword
else, export, extern
false, float, for, fxgroup
GeometryShader, groupshared
half, Hullshader
if, in, inline, inout, InputPatch, int, interface
line, lineadj, linear, LineStream
matrix, min16float, min10float, min16int, min12int, min16uint
namespace, nointerpolation, noperspective, NULL
out, OutputPatch
packoffset, pass, pixelfragment, PixelShader, point, PointStream, precise
RasterizerState, RenderTargetView, return, register, row_major, RWBuffer, RWByteAddressBuffer, RWStructuredBuffer, RWTexture1D, RWTexture1DArray, RWTexture2D, RWTexture2DArray, RWTexture3D
sample, sampler, SamplerState, SamplerComparisonState, shared, snorm, stateblock, stateblock_state, static, string, struct, switch, StructuredBuffer
tbuffer, technique, technique10, technique11, texture, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture2DMS, Texture2DMSArray, Texture3D, TextureCube, TextureCubeArray, true, typedef, triangle, triangleadj, TriangleStream
uint, uniform, unorm, unsigned
vector, vertexfragment, VertexShader, void, volatile



These numeric types have scalar, vector, and matrix keyword expansions:

  • float, int, uint, bool
  • min10float, min16float
  • min12int, min16int
  • min16uint

The expansions of these numeric types follow this pattern, which uses float as an example:

  • Scalar

  • Vector

    float1, float2, float3, float4
  • Matrix

    float1x1, float1x2, float1x3, float1x4 float2x1, float2x2, float2x3, float2x4 float3x1, float3x2, float3x3, float3x4 float4x1, float4x2, float4x3, float4x4

HLSL supports lower-case texture and sampler for legacy reasons. Instead, for your new apps, we recommend that you use HLSL's new texture objects (Texture2D, Texture3D, and so on) and sampler objects (SamplerState and SamplerComparisonState).


Use export to mark functions that you package into a library.

Here is an example:

export float identity(float x)
    return x;

By marking the identity function with the export keyword, you make the identity function available from a library for later linking. Without the export marking, the identity function isn't available for later linking.

The compiler ignores the export keyword for non-library compilation.


The export keyword requires the D3dcompiler_47.dll or a later version of the DLL.


Appendix (DirectX HLSL)