DirectX 11 (DX11) 支持许多其他平台(如 Metal 或 OpenGL ES)不支持的操作。因此,您应始终确保您的 着色器在 GPU 上运行的程序。 更多信息
参见 词汇表 在提供较少支持的平台上具有明确定义的行为,而不仅仅是在 DX11 上。以下是一些需要考虑的事项
越界内存访问很糟糕。DX11 可能会在读取时始终返回零,并且在没有问题的情况下读取一些写入,但提供较少支持的平台可能会在执行此操作时使 GPU 崩溃。注意 DX11 特定的 hack、缓冲区大小与线程组大小的倍数不匹配、尝试从缓冲区的开头或结尾读取相邻数据元素以及类似的不兼容性。
初始化您的资源。新缓冲区和纹理的内容未定义。某些平台可能会提供全为零的值,但在其他平台上,可能包含任何内容,包括 NaN。
绑定计算着色器声明的所有资源。即使您确信着色器在其当前状态下不使用资源,因为存在分支,您仍必须确保已将资源绑定到它。
GetDimensions
查询。如果需要,将缓冲区大小信息作为常量传递给着色器。RWTextures<T>
使用图像格式限定符。GraphicsFormat | RenderTextureFormat | HLSL 类型 | GLSL 图像格式限定符 |
---|---|---|---|
R32G32B32A32_SFloat | ARGBFloat | float4 | rgba32f |
R16G16B16A16_SFloat | ARGBHalf | min16float4/half4 | rgba16f |
R32G32_SFloat | RGFloat | float2 | rg32f |
R16G16_SFloat | RGHalf | min16float2/half2 | rg16f |
B10G11R11_UFloatPack32 | RGB111110Float | min10float3 | r11f_g11g_b10f |
R32_SFloat | RFloat | float | r32f |
R16_SFloat | RHalf | min16float/half | r16f |
R16G16B16A16_UNorm | ARGB64 | unorm min16float4/half4 | rgba16 |
A2B10G10R10_UNormPack32 | ARGB2101010 | unorm min10float4 | rgb10_a2 |
R8G8B8A8_UNorm | ARGB32 | unorm float4 | rgba8 |
R16G16_UNorm | RG32 | unorm min16float2/half2 | rg16 |
R8G8_UNorm | RG16 | unorm float2 | rg8 |
R16_UNorm | R16 | unorm min16float/half | r16 |
R8_UNorm | R8 | unorm float | r8 |
R16G16B16A16_SNorm | unsupported | snorm min16float4/half4 | rgba16_snorm |
R8G8B8A8_SNorm | unsupported | snorm float4 | rgba8_snorm |
R16G16_SNorm | unsupported | snorm min16float2/half2 | rg16_snorm |
R8G8_SNorm | unsupported | snorm float2 | rg8_snorm |
R16_SNorm | unsupported | snorm min16float/half | r16_snorm |
R8_SNorm | unsupported | snorm float | r8_snorm |
R32G32B32A32_SInt | ARGBInt | int4 | rgba32i |
R16G16B16A16_SInt | unsupported | min16int4 | rgba16i |
R8G8B8A8_SInt | unsupported | min12int4 | rgba8i |
R32G32_SInt | RGInt | int2 | rg32i |
R16G16_SInt | unsupported | min16int2 | rg16i |
R8G8_SInt | unsupported | min12int2 | rg8i |
R32_SInt | RInt | int | r32i |
R16_SInt | unsupported | min16int | r16i |
R8_SInt | unsupported | min12int | r8i |
R32G32B32A32_UInt | unsupported | uint4 | rgba32i |
R16G16B16A16_UInt | RGBAUShort | min16uint4 | rgba16ui |
R8G8B8A8_UInt | unsupported | unsupported | rgba8ui |
R32G32_UInt | unsupported | uint2 | rg32ui |
R16G16_UInt | unsupported | min16uint2 | rg16ui |
R8G8_UInt | unsupported | unsupported | rg8ui |
R32_UInt | unsupported | uint | r32ui |
R16_UInt | unsupported | min16uint | r16ui |
R8_UInt | unsupported | unsupported | r8ui |
A2B10G10R10_UIntPack32 | unsupported | unsupported | rgb10_a2ui |