关于Directx中shader的输入与输出
来源:互联网 发布:php 5.6 Oracle 编辑:程序博客网 时间:2024/05/22 12:49
关于shaderModel5.0中VertexShader与PixelShader的输入输出:
在sm_5_0中各阶段的输出与输入要完全按照对应关系对齐才能有效读取数据。如
VS_OUTPUT
{
float4 Pos : SV_POSITION;float4 color : COLOR0;
float4 tex : TEXCOORD0;
float4 color2 : COLOR1;
}
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float4 color : COLOR0;
float4 color2 : COLOR1;
float4 tex : TEXCOORD0;
};
在以前写direct9的时候这里的对应关系完全没什么问题。即out.Pos ->in.Pos; out.color->in.color; out.color2->in.color2; out.tex->in.tex,然而在DirectX11中使用sm5.0的时候这里的对应关系完全不对。进过测试发现对应关系为out.pos->in.pos; out.color->in.color;out.color2->in.tex; out.tex->in.color2,
从结果上来看这里的对应关系只与成员在struct中的位置有关系而与后面的semantic没太大关系。然而试过把后面的semantic去掉发现又编译不过。
对于这些现象的一些猜想:
1、在direct9时代包括shader中的constant 以及输入输出都是使用寄存器来实现的。因此无论在struct中个成员的排序如何都不会影响到最终的结果。每个成员的数据都是根据后面的semantic对应到相应的寄存器中去的。而在DirectX10以后弱化了寄存器的概念很多东西更多的是使用buffer来实现的。因此这个过程中为了效率是不是把shader的输入输出也是按buffer来处理的。把输出的结果和输入的数据都是按一个整体的buffer来传递每个成员变量都是按自身在buffer中的偏移来确定的,至于后面的semantic的多用好像就只有限制数据的量了。
个人建议:
以后写shader的时候把输入输出的struct搞一样吧。
- 关于Directx中shader的输入与输出
- 关于Java的输入与输出
- vertex shader的输出、被插值后变成fragment shader的输入
- Qt中lineedit的输入与输出
- OJ中Python的输入与输出
- Cg入门7: Vertex Shader - 顶点数据的输入与输出
- “【】”的输入与输出
- 关于C语言数组的输入与输出
- python中输入与输出
- 关于Java中输入和输出最基础的东东
- 以后我会在这里写一些关于点云、Unity3d、shader、directX学习的文章
- C语言中字符的输入与输出
- linux内核中IP数据包的输入与输出
- cygwin中 中文输入与输出的解决
- R软件中数据的输入与输出
- 关于输入流与输出流
- shell的输入与输出
- Linux_shell_shell的输入与输出
- CentOS_6.5 x86_64系统安装及配置
- leetcode练习
- 2017.10.16以前的学习(3)
- 2frangment 切换变颜色
- 几种经典密码(classic cipher)
- 关于Directx中shader的输入与输出
- pdf阅读器下载官方下载的免费方法
- Android 获得最近一张拍照或截屏图片
- 射气球(今日头条笔试题)? 待解决
- 'tasklist' 不是内部或外部命令,也不是可运行的程序(解决办法)
- #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. Th
- Web应用的负载均衡、集群、高可用(HA)解决方案整理总结
- JSP 笔记(四 : EL 表达式 )
- Html+Css/JS/PHP常用工具下载