- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所有DirectX书籍和教程都强烈建议将绘图调用之间的资源分配减少到最低限度,但是我找不到任何详细介绍更多内容的指南。回顾网络上的许多示例代码,我得出的结论是,程序员在此主题上的编码原理完全不同。有些甚至设置和未设置
VS/PS
VS/PS ResourceViews
RasterizerStage
DepthStencilState
PrimitiveTopology
...
ShaderResourceViews
(在我的情况下分别为
VS
和
PS
)。此要求可能是由于使用计算着色器引起的,因为稍后我将
UAVs
绑定/取消绑定到绑定到
VS
/
PS
的缓冲区。
ShaderResourceViews
的
VS/PS
是否可能被驱动程序/ DirectX核心取消绑定,因为在CS派遣调用之前,我将
UAVs
绑定到了相同的缓冲区(我自己不绑定
SRVs
)?
VS/PS
设置为null。可以解决问题,但是我一直不确定是否要使用这种“懒惰”的方法来挖掘下一个陷阱。
最佳答案
您希望拥有更少的开销,同时又要避免无效的管道状态。这就是为什么某些人取消绑定所有内容(尝试尽量避免绑定)的原因,这取决于用例,当然您可以对此加以平衡。
为了平衡这一点,您可以根据资源类型将特定的资源预先分配给插槽,因为插槽的数量不同,因此可以应用不同的规则
1 /样品和状态
您有16个插槽,通常有4-5个采样器使用90%的时间(线性/点/各向异性/阴影)。
因此,在应用程序启动时,请创建这些状态并将其绑定到所需的每个着色器阶段(请不要从零插槽开始,因为它们很容易被错误覆盖)。
创建具有映射SamplerState-> slot的着色器头文件,并在您的着色器中使用它,这样任何插槽更新都会自动反映出来。
尽可能重复使用此方法,并且仅绑定自定义采样器。
对于标准状态(Blend / Depth / Rasterizer),在应用程序启动时构建少量的公共状态集合并根据需要进行绑定是常见的做法。
一种以低成本最小化渲染状态绑定的简便方法,您可以构建一个堆栈,以便设置默认状态,如果着色器需要更特定的状态,则可以将新状态推入堆栈,完成后将其弹出状态并再次将其应用于管道。
2 /常量缓冲区
您有14个插槽,这是很多东西,至少在所有情况下都很少使用(至少在我的用例中),特别是现在您还可以使用缓冲区/结构化缓冲区。
一种简单的常见情况是为摄像机设置一个保留的插槽(需要的所有数据,视图/投影/视图投影以及它们的取反,因为您可能也需要)。
将其绑定到(如果需要的话)着色器舞台插槽,唯一要做的就是每帧更新cbuffer,随时可以在任何地方使用它。
3 /着色器阶段
您几乎不需要解绑定Compute Shader,因为它已与管道完全分离。
另一方面,对于流水线阶段,不是解除绑定,一个合理的好习惯是将所有需要的设置为空,而将不需要的设置为空。
如果不遵循此示例并渲染阴影贴图(仅深度缓冲区),则可能仍绑定了像素着色器。
如果忘记取消设置先前使用的“几何着色器”,则可能会导致布局组合无效,并且对象将无法渲染(错误只会在运行时调试模式下显示)。
因此,设置完整的着色器阶段几乎不会增加开销,但是安全性的折衷是可以忽略的。
在您的用例(仅使用VS / PS和CS进行构建)中,您可以放心地忽略它。
4 / Uavs-RenderTargets-DepthStencil
对于写资源,在完成工作单元后请始终保持未设置状态。在同一例程中,您可以在内部进行优化,但是在渲染/计算着色器功能结束时,将输出设置为null,因为在输出时,管道将不允许任何东西作为ShaderResource反弹。
在功能结束时不取消写入资源是灾难的根源。
5 / ShaderResourceView
这是非常实际的情况,但是我们的想法是在最小化的同时避免运行时警告(这可能是无害的,但随后会隐藏重要消息)。
最终的一件事是在帧的开头将所有着色器资源输入重置为空,例如,避免在VS中绑定仍被设置为UAV的VS中的缓冲区,这会使您每帧花费6个流水线调用,但这通常值得它。
如果您有足够的备用寄存器和一些恒定资源,您当然也可以在一些保留的插槽中设置它们,并一劳永逸地绑定它们。
6 / IA相关资源
为此,您需要设置正确的数据来绘制几何图形,因此每次绑定时,设置InputLayout / Topology是非常合理的。当然,您可以组织抽签以最大程度地减少切换。
我发现正确设置拓扑非常关键,因为无效的拓扑(例如,将Triangle List与包含tesselation的管道一起使用)将不会绘制任何内容并向您发出运行时警告,但是在AMD卡上它通常只会使您的驱动程序崩溃,因此最好避免这种情况,因为它变得很难调试。
通常,永远不要真正解开顶点/索引缓冲区的绑定(因为只是覆盖它们,并且Input布局会告诉我们如何获取)。
如果在计算/流输出中生成了这些缓冲区,则该规则唯一例外,以避免上述运行时警告。
关于directx-11 - 是否有DirectX准则用于在绘制调用之间绑定(bind)和解除绑定(bind)资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20300778/
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, over
我开始自学数据库的基础知识,目前正在研究1.到3.普通形式。到目前为止,我了解的是希望消除冗余,以使我的数据库在数据更改阶段不太容易出现不一致的情况,并希望通过消除尽可能多的重复项来节省空间。 例如,
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我有 2 个自动续订的应用程序内订阅正在接受 Apple 审核,但我一直被拒绝。请注意,这与 IAP 产品(显然尚未审查)无关,而是与我在 UI 中呈现信息的方式有关。我永远无法让 Apple 明确说
我非常喜欢 Entity Framework Code First 的想法,因为我可以快速制作新项目的原型(prototype),但现在我正在处理一个已经存在的数据库。 我们有许多具有相同模式的数据库
关于网页上的链接颜色与常规文本之间的对比,是否有任何最佳做法或指南? 我知道有关于文本与背景颜色的对比度指南,但我也想知道是否有关于纯文本和链接文本之间应存在的最小颜色差异的指南。 例如,我的背景是白
这是我的应用程序第二次因 GPS 后台 key 而被拒绝。这是我正在使用的代码: -(void)stopGPS{ [self.locationManagerAll stopUpdatingLocati
是否有一个Python模块,当给定两个向量x和y,其中y是二类(0,1)时,它计算Fisher准则,如这里的公式http://compbio.soe.ucsc.edu/genex/genexTR2ht
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 4 年前。 Improv
我们正在实现一个 Windows 7 应用程序,它会在任务栏的通知区域中显示一个弹出窗口。 简单形式有两个版本。 和精简版: 哪个更接近 Windows 的 UI 指南?有充分的理由偏爱其中之一吗?
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 5年前关闭。 Improve t
我使用带有随机初始化的 k 均值聚类来进行聚类识别。算法适用于良好的数据。但是,如果我处理带有很多噪声的数据,那么我的 k-means 算法就会失去其稳健性,并且会为同一数据集上的每次运行提供不同的解
我正在尝试使用 pygame 在一个简单的 2D 窗口中模拟重力。这是非常简单的东西(一个点再次上升和下降),我理解其中的机制,即速度作为向量,并且 y 部分在每次主循环运行以及随后的位置更新期间不断
我们开发了一款约会应用,要求用户输入高度等个人信息。我们的应用程序获得批准超过 5 次,但最近因更新而被拒绝。我们需要这些信息,因为我们希望每个配置文件都保持一致,而不是有任何半填充的配置文件。我们还
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 10 个月前。 Impro
我在 Django 中有一个类似这样的长 url 模式: url(r'^(?i)top-dir/(?P[-\w]+?)/(?P[-\w]+?)/(?P[-\w]+?).html/$', 'ap
我使用 Firebase 进行用户身份验证,我刚刚重新提交了我的应用程序并得到了以下拒绝: Guideline 5.1.2 - Legal - Privacy - Data Use and Shari
Google AdMob 现在显示以下警告。 为 iOS 14 准备您的应用程序 Apple 宣布了新的 AppTrackingTransparency 框架,该框架需要对您的 iOS 应用程序进行更
我是一名优秀的程序员,十分优秀!