opengl - 估计 GLSL 着色器所需的寄存器数量
问题描述
最近我得到一些
错误 C6020:变量超出常量寄存器限制;编译程序需要超过 1024 个寄存器
在编译 GLSL 顶点着色器期间出现错误,可能是因为统一变量的数量,我试图找出一种方法来根据我定义的统一估计/计算着色器中所需的寄存器数量。有什么指南或规则吗?
例如,假设变量大小达到 vec4 需要 1 个寄存器,而 mat4 需要 4 个寄存器,我是否正确?为此目的有什么规则吗?
解决方案
图形硬件对于任何这样的估计来说都太多样化了。即使是您看似简单的假设:
最大 vec4 的变量需要 1 个寄存器,而 mat4 需要 4 个寄存器?
这在许多现代硬件上是不正确的。曾经是,但那是几年前的事了。尤其是当您谈论单个uniform
变量时;编译器可以和他们玩各种游戏。
甚至没有精确的方法来估计一段 GLSL 代码消耗的此类资源的数量。您可以计算代码使用的统一组件的数量,但那是因为 OpenGL 会告诉您如何去做。除此之外,你无能为力。
推荐阅读
- javascript - 如何通过固定条件/规则合并和计算嵌套数组结构中的数组项
- java - 发现图像的差异
- docusignapi - 我们如何将草稿信封发送给其他信封收件人?
- openshift - 有没有办法在 openshift 中仅向 ADMIN 用户授予机密的读写访问权限?
- parceljs - parcel bundler 编译 html 并添加奇怪的 uni 代码字符
- python - 如何修复错误:命令错误退出状态 1:使用 pip 安装 tensorflow_recommenders 时
- xamarin - Xamarin Prism 无法导航到 LoginPageViewModel
- powerbi - 在 Power BI 中重新排列条形图
- spring-boot - Spring Boot 2.3.4 + OpenJ9:未处理的异常
- python - Python如何获取多行字符串的最后N行