zoukankan      html  css  js  c++  java
  • shader 的 nounroll

    刚刚解决了一个特别坑的问题。

    客户有个需求 需要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__)

    万事大吉

  • 相关阅读:
    Angular Material Starter App
    缺少标识符、字符串或数字
    jquery ajax post 传递数组 ,多checkbox 取值
    Circular dependencies cannot exist in RelativeLayout
    第二次作业
    第一次作业
    第一次作业
    软工实践个人总结
    第01组 Beta版本演示
    第01组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/minggoddess/p/5181760.html
Copyright © 2011-2022 走看看