shader 的 nounroll
2016-02-04 15:42
316 查看
刚刚解决了一个特别坑的问题。
客户有个需求 需要shader里面 loop 的iterator数量 在运行时确定。z
这样对于里面存在 sample的loop就会被force unroll但因为count不确定 就没法unroll就编译不过了
我发现只有一个方法就是 关掉unroll
我试验了各种 在shader里面用预编译指令 关unroll 的方法
orbis 平台 #pragma unroll
#pragma loop(unroll: never)
(见文档 unroll)
d3d 平台
[fastopt]
https://www.google.com.hk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwiI9Ye4y93KAhWHUqYKHWbgDokQFggiMAE&url=https%3A%2F%2Fmsdn.microsoft.com%2Fzh-cn%2Flibrary%2Fwindows%2Fdesktop%2Fbb509602(v%3Dvs.85).aspx&usg=AFQjCNG3yrRUDxW1nza1GkD4lzEC4D_XfA
什么的都是骗人的 ,以上这些在for(){}前面加的控制命令都不管用
在psslc的文档里我找到了更为bt的关闭方法 在调用psslc.exe的时候 用-nounroll-all-loops的方法
但是d3dcompiler那里编不过
这就要说到psslc的恶心策略了,一个shader要编两边
gnm平台 第一遍用d3dcompiler_47感觉是用 d3d的effect框架 把renderstate那出来
之后再用psslc编一次
这样就要求 写的一个shader在两个平台下都能过,可无论如何我也没有办法在d3d平台关掉强制unroll
后来,想到用编译指令在d3d平台把那句sample 注掉.....这样d3d就不会要求强制unroll了
因为只是提供renderstate的设置 所以这并不影响结果
#if define (PHYRE_D3DFX)
#if define (__ORBIS__)
万事大吉
客户有个需求 需要shader里面 loop 的iterator数量 在运行时确定。z
这样对于里面存在 sample的loop就会被force unroll但因为count不确定 就没法unroll就编译不过了
我发现只有一个方法就是 关掉unroll
我试验了各种 在shader里面用预编译指令 关unroll 的方法
orbis 平台 #pragma unroll
#pragma loop(unroll: never)
(见文档 unroll)
d3d 平台
[fastopt]
https://www.google.com.hk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwiI9Ye4y93KAhWHUqYKHWbgDokQFggiMAE&url=https%3A%2F%2Fmsdn.microsoft.com%2Fzh-cn%2Flibrary%2Fwindows%2Fdesktop%2Fbb509602(v%3Dvs.85).aspx&usg=AFQjCNG3yrRUDxW1nza1GkD4lzEC4D_XfA
什么的都是骗人的 ,以上这些在for(){}前面加的控制命令都不管用
在psslc的文档里我找到了更为bt的关闭方法 在调用psslc.exe的时候 用-nounroll-all-loops的方法
但是d3dcompiler那里编不过
这就要说到psslc的恶心策略了,一个shader要编两边
gnm平台 第一遍用d3dcompiler_47感觉是用 d3d的effect框架 把renderstate那出来
之后再用psslc编一次
这样就要求 写的一个shader在两个平台下都能过,可无论如何我也没有办法在d3d平台关掉强制unroll
后来,想到用编译指令在d3d平台把那句sample 注掉.....这样d3d就不会要求强制unroll了
因为只是提供renderstate的设置 所以这并不影响结果
#if define (PHYRE_D3DFX)
#if define (__ORBIS__)
万事大吉
相关文章推荐
- 详解Python编程中基本的数学计算使用
- ____88__Bitmap_Graphics_GDI绘制动态的圆
- ionic平台下的ios极光推送集成文档
- Android RecycleView(四)——时间轴
- Makefile规则
- 【Western Digital】固件区学习之02模块
- 初识联合类型小练习
- Proguard returned with error code 1. See console 之 can't find
- 教你如何写一个 Yii2 扩展
- Windows下Apache+Tomcat实现应用集群
- SQL Select语句完整的执行顺序:
- 深入理解 Express.js
- hotspot在eclipse上编译调试
- Android 设置进度条背景
- C语言的重要概念
- Apache 2.4 + Tomcat7集群配置
- 微信公众号开发者模式 定时任务 获取ACCESS_TOKEN
- Initial Server Setup with Ubuntu 14.04 on Aliyun
- 安装rabbitmq集群和配置
- 怎样编写高质量的java代码