[工作积累] D3D10+ 中 Pixel Shader 的input semantic和参数顺序

由于semantic的使用,我们有理由相信 vertex shader的output 和 pixel shader的input是按照semantic来匹配的,而跟传入顺序无关。印象dx9时代是这样。

虽然习惯上使用共用的sruct (VS_OUTPUT)来保证senamtic修改的同步,便于维护,但这个不是必须的。

 

但是最近工作中,在UE4的dx11上写自定义shader,因为VS和PS分开两文件,所以干脆没有用struct,而是直接写到parameter 里,但是遇到一个诡异的问题:参数的值不匹配!

最后发现是 虽然参数semantic匹配,但是参数顺序不匹配导致的。

 

所以查了一下文档:Shader Signatures

https://msdn.microsoft.com/en-us/library/windows/desktop/bb509650(v=vs.85).aspx 

 

In Direct3D 10, adjacent stages effectively share a register array, where the output shader (or pipeline stage) writes data to specific locations in the register array and the input shader must read from the same locations. The API uses shader signatures to bind shader outputs with inputs without the overhead of semantic resolution

 

也就是说d3d10以上,为了提升性能,相邻的stage不做semantic resolution,直接按参数顺序绑定。

所以建议使用公共声明的struct。。

 

如果想用分开的struct (或者直接用parameter list),注意下面的是兼容的 (元素个数不同但参数顺序一致)

// Vertex Shader Output Signature
Struct VSOut
{
  float4 Pos: SV_Position;
  float3 MyNormal: Normal;
  float2 MyTex : Texcoord0;
}

// Pixel Shader Input Signature
Struct PSInWorks
{
  float4 Pos: SV_Position;
  float3 MyNormal: Normal;
}

下面的不兼容 (顺序不一致)

// Vertex Shader Output Signature
Struct VSOut
{
  float4 Pos: SV_Position;
  float3 MyNormal: Normal;
  float2 MyTex : Texcoord0;
}

// Pixel Shader Input Signature
Struct PSInFails
{
  float3 MyNormal: Normal;
  float4 Pos: SV_Position;
}

以上两个例子在上面的链接中有。

 

MSDN在这里也有简单的说明:

Direct3D 9 to Direct3D 10 Considerations (Porting Shaders: Shader Signatures and Linkage)

 

转载于:https://www.cnblogs.com/crazii/p/6832270.html

SegFormer是一种简单高效的语义分割模型,它使用了Transformer架构。该模型在语义分割任务取得了很好的性能。 SegFormer的设计思路是将Transformer应用于语义分割任务,以取代传统的卷积神经网络。相比于传统的卷积神经网络,Transformer具有更强的建模能力和更好的上下文理解能力。 SegFormer的主要特点和设计思路如下: 1. 基于Transformer的编码器:SegFormer使用了Transformer作为编码器,用于提取图像特征。Transformer的自注意力机制可以捕捉全局上下文信息,有助于提高语义分割的准确性。 2. 基于深度可分离卷积的解码器:SegFormer使用了深度可分离卷积作为解码器,用于将编码器提取的特征映射恢复到原始图像尺寸。深度可分离卷积具有较少的参数量和计算量,可以提高模型的效率。 3. 多尺度特征融合:SegFormer通过多尺度特征融合来提高语义分割的性能。它使用了不同大小的感受野来捕捉不同尺度的信息,并将它们融合到最终的预测。 4. 通道注意力机制:SegFormer引入了通道注意力机制,用于自适应地调整不同通道的重要性。这有助于提高模型对不同类别的区分能力。 SegFormer的代码实现可以在CSDN开发的"C知道"平台上找到。你可以在该平台上搜索"SegFormer Simple and Efficient Design for Semantic Segmentation with Transformers"来获取相关代码和实现细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值