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
ADXGI\u格式\u R8G8B8A8\u UNORM
着色器假定返回float4
,则精确映射将有所不同
我真的没想到这一点。但是,如果你认为GPU是为32位计算而设计的,而显示器只有32位支持每个像素,那么它就有了一个内置的转换器,从<代码> FLUAT4<代码>到<代码> DXGIIOFALATATIOR8G8B8A8< /代码> ./P>
这也绊倒了其他人: