DXGI_FORMAT_R8G8B8A8_UNORM 问题

Supper_Jerry 2010-11-29 08:38:38
我用DXGI_FORMAT_R8G8B8A8_UNORM create了一个texture2d,然后用directcompute将其数据拷贝到一个一维buffer中
Texture2D<uint> Input : register( t0 );//texture2d,因为是格式为DXGI_FORMAT_R8G8B8A8_UNORM,所以类型为uint
RWStructuredBuffer<uint> outBuff : register( u0 );//存放结果的buffer
[numthreads( 1, 1, 1 )]
void CSHor( uint3 nGid : SV_GroupID)
{
outBuff[nGid.y*nWidth+nGid.x] =Input[nGid.xy];//outPut结果不正确,copy buffer到cpu上保存下来图片颜色变的非常厉害。

}

dispach的时候,dispach(imageWidth, imageHeight, 0)
...全文
1514 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
引力场变动源 2010-11-30
  • 打赏
  • 举报
回复
说错了,是(0~255)/255
引力场变动源 2010-11-30
  • 打赏
  • 举报
回复
其实就是(1~255)/255.0f啦
所以要转成整数的话,需要乘以255
Viskag 2010-11-30
  • 打赏
  • 举报
回复
0000 0000(2) = 0.0f
0000 0001(2) = 1/255.0f
0000 0010(2) = 2/255.0f
0000 0100(2) = 4/255.0f
0000 1000(2) = 8/255.0f
0001 0000(2) = 16/255.0f
0010 0000(2) = 32/255.0f;
0100 0000(2) = 64/255.0f;
1000 0000(2) = 128/255.0f;
1111 1111(2) = 1.0f
Viskag 2010-11-30
  • 打赏
  • 举报
回复
好像不对。。。貌似不符合e.g. a 2-bit UNORM represents 0.0f, 1/3, 2/3, and 1.0f.
Viskag 2010-11-30
  • 打赏
  • 举报
回复
每个分量是8位浮点数
0000 0000(2) = 0.0f
0000 0001(2) = 1/256.0f
0000 0010(2) = 1/128.0f
0000 0100(2) = 1/64.0f
0000 1000(2) = 1/32.0f
0001 0000(2) = 1/16.0f
0010 0000(2) = 1/8.0f;
0100 0000(2) = 1/4.0f;
1000 0000(2) = 0.5f;
1111 1111(2) = 1.0f

Supper_Jerry 2010-11-30
  • 打赏
  • 举报
回复
问题解决了,shader部分写错了
应该用ture2D<uint4> Input : register( t0 );
每一个分量占4个字节,是浮点类型的。
谢谢楼上各位。
Supper_Jerry 2010-11-30
  • 打赏
  • 举报
回复
楼上说的这些,我知道啊,但是我就是不明白DXGI_FORMAT_R8G8B8A8_UNORM每个分量是1个byte
这1个byte难道是浮点数?需要乘以255?
Viskag 2010-11-30
  • 打赏
  • 举报
回复
我的理解是,如果声明了unorm RGBA8,那么硬件是这么看待这8个bit的
引力场变动源 2010-11-29
  • 打赏
  • 举报
回复
对RGBA8来说,UNORM的格式的每个分量都是0~1.0f之间的,SNORM是-1.0f~1.0f之间。
参见SDK的“Data Conversion Rules”章节:

UNORM
Unsigned normalized integer, meaning that for an n-bit number, all 0's means 0.0f, and all 1's means 1.0f. A sequence of evenly spaced floating point values from 0.0f to 1.0f are represented. e.g. a 2-bit UNORM represents 0.0f, 1/3, 2/3, and 1.0f.
Supper_Jerry 2010-11-29
  • 打赏
  • 举报
回复
本质问题就是格式为DXGI_FORMAT_R8G8B8A8_UNORM的texture2d
到了gpu上,到底是什么样子的。
Input[nGid.xy]的值是什么?

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧