Skip to main content Svelte Highlight v7.21.1

HLSL language preview

1. Vertex shader

struct semantics, constant buffers, and matrix math
horizon-dark
cbuffer Constants : register(b0) {
  float4x4 worldViewProj;
};

struct VSInput {
  float3 position : POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

struct VSOutput {
  float4 position : SV_POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

VSOutput main(VSInput input) {
  VSOutput output;
  output.position = mul(worldViewProj, float4(input.position, 1.0f));
  output.normal = input.normal;
  output.uv = input.uv;
  return output;
}
atom-one-dark
cbuffer Constants : register(b0) {
  float4x4 worldViewProj;
};

struct VSInput {
  float3 position : POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

struct VSOutput {
  float4 position : SV_POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

VSOutput main(VSInput input) {
  VSOutput output;
  output.position = mul(worldViewProj, float4(input.position, 1.0f));
  output.normal = input.normal;
  output.uv = input.uv;
  return output;
}
github-dark
cbuffer Constants : register(b0) {
  float4x4 worldViewProj;
};

struct VSInput {
  float3 position : POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

struct VSOutput {
  float4 position : SV_POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

VSOutput main(VSInput input) {
  VSOutput output;
  output.position = mul(worldViewProj, float4(input.position, 1.0f));
  output.normal = input.normal;
  output.uv = input.uv;
  return output;
}
dracula
cbuffer Constants : register(b0) {
  float4x4 worldViewProj;
};

struct VSInput {
  float3 position : POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

struct VSOutput {
  float4 position : SV_POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

VSOutput main(VSInput input) {
  VSOutput output;
  output.position = mul(worldViewProj, float4(input.position, 1.0f));
  output.normal = input.normal;
  output.uv = input.uv;
  return output;
}
nord
cbuffer Constants : register(b0) {
  float4x4 worldViewProj;
};

struct VSInput {
  float3 position : POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

struct VSOutput {
  float4 position : SV_POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

VSOutput main(VSInput input) {
  VSOutput output;
  output.position = mul(worldViewProj, float4(input.position, 1.0f));
  output.normal = input.normal;
  output.uv = input.uv;
  return output;
}
github
cbuffer Constants : register(b0) {
  float4x4 worldViewProj;
};

struct VSInput {
  float3 position : POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

struct VSOutput {
  float4 position : SV_POSITION;
  float3 normal : NORMAL;
  float2 uv : TEXCOORD0;
};

VSOutput main(VSInput input) {
  VSOutput output;
  output.position = mul(worldViewProj, float4(input.position, 1.0f));
  output.normal = input.normal;
  output.uv = input.uv;
  return output;
}

2. Pixel shader

texture sampling and lighting with intrinsic functions
horizon-dark
Texture2D mainTex : register(t0);
SamplerState samp : register(s0);

float4 main(float3 normal : NORMAL, float2 uv : TEXCOORD0) : SV_TARGET {
  float3 lightDir = normalize(float3(0.3f, 1.0f, 0.2f));
  float diffuse = saturate(dot(normalize(normal), lightDir));
  float4 albedo = mainTex.Sample(samp, uv);
  return float4(albedo.rgb * lerp(0.2f, 1.0f, diffuse), albedo.a);
}
atom-one-dark
Texture2D mainTex : register(t0);
SamplerState samp : register(s0);

float4 main(float3 normal : NORMAL, float2 uv : TEXCOORD0) : SV_TARGET {
  float3 lightDir = normalize(float3(0.3f, 1.0f, 0.2f));
  float diffuse = saturate(dot(normalize(normal), lightDir));
  float4 albedo = mainTex.Sample(samp, uv);
  return float4(albedo.rgb * lerp(0.2f, 1.0f, diffuse), albedo.a);
}
github-dark
Texture2D mainTex : register(t0);
SamplerState samp : register(s0);

float4 main(float3 normal : NORMAL, float2 uv : TEXCOORD0) : SV_TARGET {
  float3 lightDir = normalize(float3(0.3f, 1.0f, 0.2f));
  float diffuse = saturate(dot(normalize(normal), lightDir));
  float4 albedo = mainTex.Sample(samp, uv);
  return float4(albedo.rgb * lerp(0.2f, 1.0f, diffuse), albedo.a);
}
dracula
Texture2D mainTex : register(t0);
SamplerState samp : register(s0);

float4 main(float3 normal : NORMAL, float2 uv : TEXCOORD0) : SV_TARGET {
  float3 lightDir = normalize(float3(0.3f, 1.0f, 0.2f));
  float diffuse = saturate(dot(normalize(normal), lightDir));
  float4 albedo = mainTex.Sample(samp, uv);
  return float4(albedo.rgb * lerp(0.2f, 1.0f, diffuse), albedo.a);
}
nord
Texture2D mainTex : register(t0);
SamplerState samp : register(s0);

float4 main(float3 normal : NORMAL, float2 uv : TEXCOORD0) : SV_TARGET {
  float3 lightDir = normalize(float3(0.3f, 1.0f, 0.2f));
  float diffuse = saturate(dot(normalize(normal), lightDir));
  float4 albedo = mainTex.Sample(samp, uv);
  return float4(albedo.rgb * lerp(0.2f, 1.0f, diffuse), albedo.a);
}
github
Texture2D mainTex : register(t0);
SamplerState samp : register(s0);

float4 main(float3 normal : NORMAL, float2 uv : TEXCOORD0) : SV_TARGET {
  float3 lightDir = normalize(float3(0.3f, 1.0f, 0.2f));
  float diffuse = saturate(dot(normalize(normal), lightDir));
  float4 albedo = mainTex.Sample(samp, uv);
  return float4(albedo.rgb * lerp(0.2f, 1.0f, diffuse), albedo.a);
}

3. Compute shader

structured buffers and preprocessor directives
horizon-dark
#define THREADS 64

RWStructuredBuffer<float> data : register(u0);

[numthreads(THREADS, 1, 1)]
void main(uint3 id : SV_DispatchThreadID) {
  uint i = id.x;

  [unroll]
  for (uint j = 0; j < 4; j++) {
    data[i + j] = saturate(data[i + j] * 2.0f);
  }
}
atom-one-dark
#define THREADS 64

RWStructuredBuffer<float> data : register(u0);

[numthreads(THREADS, 1, 1)]
void main(uint3 id : SV_DispatchThreadID) {
  uint i = id.x;

  [unroll]
  for (uint j = 0; j < 4; j++) {
    data[i + j] = saturate(data[i + j] * 2.0f);
  }
}
github-dark
#define THREADS 64

RWStructuredBuffer<float> data : register(u0);

[numthreads(THREADS, 1, 1)]
void main(uint3 id : SV_DispatchThreadID) {
  uint i = id.x;

  [unroll]
  for (uint j = 0; j < 4; j++) {
    data[i + j] = saturate(data[i + j] * 2.0f);
  }
}
dracula
#define THREADS 64

RWStructuredBuffer<float> data : register(u0);

[numthreads(THREADS, 1, 1)]
void main(uint3 id : SV_DispatchThreadID) {
  uint i = id.x;

  [unroll]
  for (uint j = 0; j < 4; j++) {
    data[i + j] = saturate(data[i + j] * 2.0f);
  }
}
nord
#define THREADS 64

RWStructuredBuffer<float> data : register(u0);

[numthreads(THREADS, 1, 1)]
void main(uint3 id : SV_DispatchThreadID) {
  uint i = id.x;

  [unroll]
  for (uint j = 0; j < 4; j++) {
    data[i + j] = saturate(data[i + j] * 2.0f);
  }
}
github
#define THREADS 64

RWStructuredBuffer<float> data : register(u0);

[numthreads(THREADS, 1, 1)]
void main(uint3 id : SV_DispatchThreadID) {
  uint i = id.x;

  [unroll]
  for (uint j = 0; j < 4; j++) {
    data[i + j] = saturate(data[i + j] * 2.0f);
  }
}