最近因为跨平台原因,考虑到shader的问题。

早就从hlsl改为cg,而且cg也对pc和mac支持很好,只不过有说法是cg runtime在ati上运行效果不佳,以及rumtime的臃肿。

那么依此观点的话,编写原生的glsl让display driver/runtime来解析应该是最好的方法,但同时又不愿意同时维护2个。

回顾之前,cg被opengl拒之门外而使用了3dlab的glsl,加上ms和nv一起搞的hlsl,这种人为的天然障碍真是我辈的悲剧。

而且cg的核心人员都陆续跳到ms,感觉nv总是有点3dfx的影子,很多时候都领先于业内推出自己的技术,像是cg,像是cuda,但却始终达不到ms这样的领导地位,自己的那一套总是成不了业内标准,像是cg于hlsl/glsl,像是cuda于opencl。

回到hlsl -> glsl的问题上,ati之前推过一个项目叫hlsl2glsl,后来被unity3d的人接手扩展为hlsl2glslfork,以lib的方式存在,而且很方便就可以通过几个接口进行translate。

接下来的问题是这个支持只到sm3.0,对我目前来说是刚刚好。

只不过就像下面unity3d的人所说,在opengles上,driver对glsl的优化做得不好(我的判断是因为opengles的runtim没有做,另外移动平台不像pc上nv和ati两家竞争强烈,所以很多优化已在driver中完成),所以又引入一个glsl-optimizer来负责做优化的工作。

以我之前在ATI的经验,以hlsl为例,d3d runtime会负责做一次优化,传入driver的byte code已经是像glsl-optimizer那样,去掉了在臃肿的代码,该inline的,去掉无用的变量/函数等等,但runtime毕竟还只是一个上层的中间件,面对不同的显卡,只有自家driver才知道如何做“更具体的优化",于是driver会根据不同的显卡走不同的path进一步做优化处理。而这一块,目前在mobile platform上应该还是很混乱,导致需要app负责进行优化再传入。

令人欣慰的是,ogre的做法是,pc/mac上依然使用cg来解决,在ogles中使用hlsl2glslfork + glsl-optimizer来完成cg -> glsl,这一块已在es 2.x render system中实现,不过我的看法是,既然如此,考虑到向下兼容的问题,不如直接在1.8中将所有的shader以hlsl实现,然后ogl和ogles都使用translator完成岂不更原生?更有效率?

下面是一些相关资料

------------------------------------------------------------------------------

Shader Compilation for Multiple Platforms

http://blogs.unity3d.com/2010/10/20/shader-compilation-for-multiple-platforms/

GLSL Optimizer

http://aras-p.info/blog/2010/09/29/glsl-optimizer/

OGRE

http://www.ogre3d.org/forums/viewtopic.php?f=21&t=62256

4 new changesets in ogre:http://bitbucket.org/sinbad/ogre/changeset/f38dbc3f6dd6/
changeset:   r2617:f38dbc3f6dd6
user:        assaframan
date:        2011-01-03 20:24:46
summary:     ES 2.x render system: Added basic Cg support.
OGRE_CG_SUPPORT_FOR_GLES2 flag was added to control if this option is on.
http://code.google.com/p/hlsl2glslfork/ is used to convert the Cg code to glsl.
hlsl2glslfork code is required to compile for the Cg support to compile and link.
Not all Cg programs compile or link.
hlsl2glslfork CMake find script is not provided with this commit.
affected #:  10 files (27.4 KB)

http://bitbucket.org/sinbad/ogre/changeset/0b40d4b9ece4/
changeset:   r2697:0b40d4b9ece4
user:        masterfalcon
date:        2011-03-12 03:23:32
summary:     GLES2: Add support for the GLSL Optimiser.  See here for more info about it: https://github.com/aras-p/glsl-optimizer
It is enabled by default but you can opt out by adding "use_optimiser false" to a program definition
affected #:  14 files (13.1 KB)--- a/CMake/Dependencies.cmake   Fri Mar 11 20:16:36 2011 -0600
+++ b/CMake/Dependencies.cmake   Fri Mar 11 20:23:32 2011 -0600
@@ -173,6 +173,13 @@find_package(TBB)macro_log_feature(TBB_FOUND "tbb" "Threading Building Blocks" "http://www.threadingbuildingblocks.org/" FALSE "" "")+# GLSL-Optimizer
+find_package(GLSLOptimizer)
+macro_log_feature(GLSL_Optimizer_FOUND "GLSL Optimizer" "GLSL Optimizer" "http://github.com/aras-p/glsl-optimizer/" FALSE "" "")
+
+# HLSL2GLSL
+find_package(HLSL2GLSL)
+macro_log_feature(HLSL2GLSL_FOUND "HLSL2GLSL" "HLSL2GLSL" "http://hlsl2glslfork.googlecode.com/" FALSE "" "")

转载于:https://www.cnblogs.com/oiramario/archive/2012/02/05/2338800.html

Shader Compilation for Multiple Platforms相关推荐

  1. shader变体是什么_GitHub - 7732050/ShaderVariantCollector

    一种Shader变体收集和打包编译优化的思路 介绍 什么是变体 引用Unity官方文档的解释: ShaderVariant In Unity, many shaders internally have ...

  2. Unity Shader中各部分定义内容详解

    Unity Shader中各部分定义内容详解 样板 Shader "Practice/Unlit/SimpleUnlit" {Properties{_MainTex (" ...

  3. UNREAL ENGINE 4.13 正式发布!

    这次的版本带来了数百个虚幻引擎 4 的更新,包括来自 GitHub 的社区成员们提交的 145 个改进!感谢所有为虚幻引擎 4 添砖加瓦贡献的人们: alk3ovation, Allegorithmi ...

  4. Redefining the shading languages ecosystem with SPIR-V

    SPIR-V,全称Standard Portable Intermediate Representation (SPIR) 是一种用在GPU通用计算和图形学上的中间语言(intermediate la ...

  5. A Brief Overview Of Vulkan API

    转一篇关于Vulkan的介绍性文章. Vulkan据说标准快要出来了:根据目前笔者了解,其实很多很AMD mantle很像.等正式发布后,笔者准备再写一系列文章研究新标准.毕竟这个才是未来的方向! 另 ...

  6. chromedriver中的浏览器选项

    chromedriver中的浏览器选项 There are lots of command lines which can be used with the Google Chrome browser ...

  7. Chromium浏览器(CEF)的命令行列表说明

    找到的Chromium浏览器的命令行说明列表,转放在这里以方便查看. List of Chromium Command Line Switches There are lots of command ...

  8. 虚幻引擎 4.10 发布信息

    版本信息 SHARE: 该版本为虚幻引擎 4 带来数百项更新,包括由 GitHub 上的虚幻引擎开发人员社区提交的 53 项改进!感谢虚幻引擎 4.10 的所有贡献者: Andreas Axelsso ...

  9. Chromium命令行开关列表2

    Chromium命令行开关列表 Google Chrome浏览器可以使用很多命令行. 一些更改功能的行为,其他用于调试或试验. 该页面列出了可用的开关,包括其条件和说明. 上一次自动更新发生在2020 ...

最新文章

  1. ecshop的商品列表输出中多出一条空记录
  2. 澳大利亚科学家研发智能袜子SoPhy,帮助患者进行理疗
  3. php 进行http请求,PHP模拟http请求的方法详解
  4. c/c++编译器的安装
  5. 基于Java SSM springboot+VUE+redis实现的前后端分类版网上商城项目
  6. 5G NR 链路自适应 Link Adaptation
  7. 智慧楼宇管理运营端app、运维管理、工单管理、报修管理、维保管理、巡检查询、巡检管理、能源管理、维保查询、智慧社区、巡检统计、工单统计、能源管理、智能楼宇、设备监控、智能社区、系统运营、楼宇运维小程序
  8. oracle学习笔记 学习前奏
  9. 网易公司首席执行官 丁磊
  10. IDEA插件开发(简单案例助你快速入门)
  11. 【Qt编程】基于Qt的词典开发系列十--国际音标的显示
  12. ECshop二次开发从开始
  13. 德国地学研究中心到国家基础地理信息中心作学术交流
  14. 服务器能ping通,但是无法ssh
  15. 计算机专业职业生涯规划书,计算机信息专业职业生涯规划书
  16. python requests post 二进制流_Python的requests如何同时post图片二进制流和json数据application/octet-stream...
  17. canvas实现高阶贝塞尔曲线
  18. iOS和android游戏纹理优化和内存优化(cocos2d-x)
  19. Java打开文件、文件夹、网页
  20. 视频研究(分类,行为识别,检测等)

热门文章

  1. 网站建设中图片挑选也要看方法!
  2. 网站SEO优化之如何建设外链提升网站权重?
  3. java super父类的父类_合理使用父类的财富——Java中的super
  4. 基于jquery的ajax聊天室系统,基于jQuery的Ajax聊天室应用毕业设计(含外文翻译)...
  5. 射线法 java_射线法(1190 - Sleepwalking )
  6. java concat和 的区别,RxJava2 merge和concat 区别
  7. mysql数据库报错1146_关于MySQL报错:[ERR] 1146
  8. vs调用堆栈窗口怎么弄出来_从零开始(1)栈帧、调用约定
  9. Trustzone——利用硬件对数据加密,秘钥存在芯片里
  10. elasticsearch 索引搜索和索引性能优化配置——思路:去掉不必要的数据,减小数据的磁盘空间占用,同时提升性能...