- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
中心刊
我在一个渲染命令编码器中有两个渲染管道。第一个管道写入在第二个管道中使用的缓冲区。这似乎不起作用,我希望这是一个同步问题。当我为每个渲染管道使用一个单独的渲染命令编码器时,我得到了想要的结果。这可以用一个单一的渲染命令编码器来解决,还是我需要两个单独的编码器来同步缓冲区?
这是更具体的案例:
第一个管道是非光栅化管道,仅运行顶点着色器以输出到 MTLBuffer
收纳MTLDrawPrimitivesIndirectArguments
用于 drawPrimitives
调用第二个管道,如下所示:
// renderCommandEncoder is MTLRenderCommandEncoder
// firstPipelineState and secondPipelineState are two different MTLRenderPipelineState
// indirectArgumentsBuffer is a MTLBuffer containing MTLDrawPrimitivesIndirectArguments
// numberOfVertices is number of vertices suited for first pipeline
// first pipeline
renderCommandEncoder.setRenderPipelineState(firstPipelineState)
renderCommandEncoder.setVertexBuffer(indirectArgumentsBuffer, offset: 0, index: 0)
renderCommandEncoder.drawPrimitives(type: .point, vertexStart: 0, vertexCount: numberOfVertices)
// second pipeline
renderCommandEncoder.setRenderPipelineState(secondPipelineState)
renderCommandEncoder.setVertexBuffer(secondPipelineBuffer, offset: 0, index: 0)
renderCommandEncoder.drawPrimitives(type: .point, indirectBuffer: indirectArgumentsBuffer, indirectBufferOffset: 0)
renderCommandEncoder.endEncoding()
indirectArgumentsBuffer
在发出对
drawPrimitives
的调用时已被第一个管道写入对于第二个管道,它使用并需要
indirectArgumentsBuffer
的内容?
最佳答案
我相信您需要使用单独的编码器。在这个(有点过时)documentation about function writes ,对于绘制调用之间共享的缓冲区,只有原子操作是同步的。
关于objective-c - 在单个 MTLRenderCommandEncoder : How to Synchronize MTLBuffer? 中使用多个渲染管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60063522/
我开始玩 Metal(目前我的应用程序正在使用 OpenGL)。我正在尝试检查如何在一次渲染过程中使用多个管道状态(多个 Metal 功能)进行渲染。问题是实际上总是只绘制最后一个 MTLRender
我确实有一个 Metal 渲染管道设置,它对渲染命令进行编码并在 texture: MTLTexture 对象上进行操作以加载和存储输出。此纹理相当大,并且每个渲染命令仅对整个纹理的一小部分进行操作。
我目前正在为游戏制作简单的 UI,并且要绘制每个按钮,我需要使用 2 个管道状态(每个状态都使用相同的顶点着色器)。一种是用静态颜色片段着色器绘制边框的线条,另一种是用波纹渐变绘制按钮内部。我想知道我
我正在学习 Metal,并且有一个概念性问题让我想解决这个问题:我的代码究竟应该在什么级别处理需要不同管道状态的连续绘图操作?据我了解(来自这样的答案: https://stackoverflow.c
中心刊 我在一个渲染命令编码器中有两个渲染管道。第一个管道写入在第二个管道中使用的缓冲区。这似乎不起作用,我希望这是一个同步问题。当我为每个渲染管道使用一个单独的渲染命令编码器时,我得到了想要的结果。
我是一名优秀的程序员,十分优秀!