Directx 计算着色器:为什么返回float4? 编辑问题:

Directx 计算着色器:为什么返回float4? 编辑问题:,directx,gpgpu,hlsl,gpu,compute-shader,Directx,Gpgpu,Hlsl,Gpu,Compute Shader,我有一个ID3D11Texture2D和ID3D11UnorderedAccessView格式DXGI\u格式\u R8G8B8A8\u UNORM和着色器 rwd-tex:寄存器(u0); [numthreads(32,32,1)] 空干管(uint3 dtid:sv_dispatchthreadid) { 浮子r; ... tex[dtid.xy]=float4(r,0.0f,0.0f,0.0f); } 我想我们一定是在写8位unorm浮点 这是否意味着存在从32位浮点到8位UNORM的类

我有一个
ID3D11Texture2D
ID3D11UnorderedAccessView
格式
DXGI\u格式\u R8G8B8A8\u UNORM
和着色器

rwd-tex:寄存器(u0);
[numthreads(32,32,1)]
空干管(uint3 dtid:sv_dispatchthreadid)
{
浮子r;
...
tex[dtid.xy]=float4(r,0.0f,0.0f,0.0f);
}
我想我们一定是在写8位unorm浮点

这是否意味着存在从32位浮点到8位UNORM的类型转换

原始问题: 我最初尝试了着色器

rwd-tex:寄存器(u0);
[numthreads(32,32,1)]
空干管(uint3 DTid:SV_DispatchThreadID)
{

tex[DTid.xy]=0xFF0000FF;//我实际上尝试过使用0xFF,结果变为白色,因为您指定了
\u UNORM
的格式,结果0.0到1.0的浮点值将映射到0到255


如果使用
\u snrom
\u UINT
\u SINT
A
DXGI\u格式\u R8G8B8A8\u UNORM
着色器假定返回
float4
,则精确映射将有所不同

我真的没想到这一点。但是,如果你认为GPU是为32位计算而设计的,而显示器只有32位支持每个像素,那么它就有了一个内置的转换器,从<代码> FLUAT4<代码>到<代码> DXGIIOFALATATIOR8G8B8A8< /代码> ./P> 这也绊倒了其他人: