硬件定义

DSHL 支持一些内置硬件定义。 您可以在着色器中使用它们来切换硬件特定功能,根据目标平台改变着色器行为等。

这些定义通过 hardware.<platform> 语法访问。 以下是可用定义的列表:

  • metal – Metal API

  • metaliOS – Metal API for iOS

  • vulkan – Vulkan API

  • pc – 已弃用,DirectX 11 API 的别名

  • dx11 – DirectX 11 API

  • dx12 – DirectX 12 API

  • xbox – Xbox One 平台

  • scarlett – Scarlett 平台(又名 Xbox X/S 系列)

  • ps4 – PlayStation 4 平台

  • ps5 – PlayStation 5 平台

  • fsh_4_0 – HLSL Shader Model 4.0 version

  • fsh_5_0 – HLSL Shader Model 5.0 version

  • fsh_6_0 – HLSL Shader Model 6.0 version

  • fsh_6_6 – HLSL Shader Model 6.6 version

  • mesh – 如果平台支持网格着色器

  • bindless – 如果平台支持无绑定纹理

使用示例:

shader example_shader
{
  if (hardware.metal) {
    dont_render;
    // 此着色器不会被编译到Metal平台上
  }

  hlsl {
    int var = 0;
##if hardware.dx12
    var = 12;
##elif hardware.dx11
    var = 11;
##endif
    // dx11 和 dx12 平台的 var 值将有所不同
  }
}