博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ShaderModel3里面的条件判断
阅读量:6208 次
发布时间:2019-06-21

本文共 800 字,大约阅读时间需要 2 分钟。

  hot3.png

 

ShaderModel3里面的if真是让我有些小意外。

 


 

Attribute&默认情况

 

dx sdk里面提到if可以有两个[attribute]可以用:

 

float result;if(k){   result = 1.0f;}else{   result = 2.0f;}
 

或者:

float result;[flatten]if(k){    result = 1.0f;}else{    result = 2.0f;}//code after compilationfloat result1 = 1.0f;float result2 = 2.0f;cmp result k result1 result2
 

 

对于比较简单的if,shader里默认的是使用[flatten]这样的,因为毕竟branch非常破坏并行性。

但是自己写了很大的代码块在if和else端,结果是默认情况下仍旧是用[flatten]模式。

这个就是有点费解,或许compiler需要更加明显的信息或者编译提示才会使用挑战来避免掉大量的计算。

 

 


 

intrinsic指令

 

开始时候我还以为使用intrinsic指令会更快,类似step这样的来避免使用if。

但是实际情况是step这样的指令内部编译的时候仍旧是会成为cmp这样的汇编指令。

相反使用step,要做额外操作,反而没有直接if来的直接。

 

简而言之,不要有太多假设,一切以编出来的汇编代码和profile工具为基准。

 


另外一个比较搞笑的就是在使用gaussian blur的时候H pass和V pass唯一的不同就是kernel不一样。

这种不一样差别真的很小,就是一个是[0,1]这样的,一个是[1,0]这样的

结果编译结果出来居然差了8条指令,这。。。

很奇怪呃。

原文链接:

转载于:https://my.oschina.net/dtec/blog/44494

你可能感兴趣的文章
JavaScript 数据类型
查看>>
量子通信和大数据最有市场突破前景
查看>>
StringBuilder用法小结
查看>>
CSS - 修改input - placeholder 和 readonly 的样式
查看>>
android studio :cannot resolve symbol R
查看>>
paper 20 :color moments
查看>>
代码大全
查看>>
DataTable.ImportRow()与DataTable.Rows.Add()的区别
查看>>
程序集、应用程序配置及App.config和YourSoft.exe.config .
查看>>
二叉树的基本操作及应用(三)
查看>>
朱晔和你聊Spring系列S1E3:Spring咖啡罐里的豆子
查看>>
IOS CALayer的属性和使用
查看>>
温故而知新:柯里化 与 bind() 的认知
查看>>
Django REST framework
查看>>
CSS 如何让Table的里面TD全有边框 而Table的右左边框没有
查看>>
apache 虚拟主机详细配置:http.conf配置详解
查看>>
BABOK - 开篇:业务分析知识体系介绍
查看>>
Java入门系列-22-IO流
查看>>
MySQL:Innodb page clean 线程 (二) :解析
查看>>
垃圾回收算法优缺点对比
查看>>