如何在 directx11 着色器中使用 swizzle .rrrg
How to use swizzle .rrrg in directx11 shader
我必须在 directx9 到 directx11 中创建格式等同于 D3DFMT_A8L8 的纹理。但是我不清楚文档中的注释。有人会解释应该做什么吗?创建输入布局时,我遇到无效参数错误。
D3DFMT_A8L8 => DXGI_FORMAT_R8G8_UNORM
注意:在着色器中使用 swizzle .rrrg 复制红色并将绿色移动到 alpha 组件以获得 Direct3D 9 行为。
在 Direct3D 9 中,"Luminance" 格式将在着色器中自动读取为 RGB 值(复制),因为它们是灰度格式。在 Direct3D 10+ 中,没有 "Luminance" 格式。有一种和两种频道格式,没有"special behavior"。
因此,在着色器中,DXGI_FORMAT_R8G8_UNORM
纹理将具有 'r' 通道中的第一个通道和 'g' 通道中的第二个通道。 DXGI_FORMAT_R8G8_UNORM
具有与 D3DFMT_A8L8
相同的内存占用空间,即两个 8 位无符号普通整数数据通道,但如果您希望现代着色器中的行为与旧着色器相匹配,则必须使用着色器调配显式执行此操作:
Texture2D<float4> Texture : register(t0);
sampler Sampler : register(s0);
float4 color = Texture.Sample(Sampler, pin.TexCoord);
// Special-case for DXGI_FORMAT_R8G8_UNORM treated as D3DFMT_A8L8
color = color.rrrg;
This has nothing at all to do with input layouts. It's just the way a texture sampler works.
我必须在 directx9 到 directx11 中创建格式等同于 D3DFMT_A8L8 的纹理。但是我不清楚文档中的注释。有人会解释应该做什么吗?创建输入布局时,我遇到无效参数错误。
D3DFMT_A8L8 => DXGI_FORMAT_R8G8_UNORM 注意:在着色器中使用 swizzle .rrrg 复制红色并将绿色移动到 alpha 组件以获得 Direct3D 9 行为。
在 Direct3D 9 中,"Luminance" 格式将在着色器中自动读取为 RGB 值(复制),因为它们是灰度格式。在 Direct3D 10+ 中,没有 "Luminance" 格式。有一种和两种频道格式,没有"special behavior"。
因此,在着色器中,DXGI_FORMAT_R8G8_UNORM
纹理将具有 'r' 通道中的第一个通道和 'g' 通道中的第二个通道。 DXGI_FORMAT_R8G8_UNORM
具有与 D3DFMT_A8L8
相同的内存占用空间,即两个 8 位无符号普通整数数据通道,但如果您希望现代着色器中的行为与旧着色器相匹配,则必须使用着色器调配显式执行此操作:
Texture2D<float4> Texture : register(t0);
sampler Sampler : register(s0);
float4 color = Texture.Sample(Sampler, pin.TexCoord);
// Special-case for DXGI_FORMAT_R8G8_UNORM treated as D3DFMT_A8L8
color = color.rrrg;
This has nothing at all to do with input layouts. It's just the way a texture sampler works.