首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Blit命令编码器交换金属中的纹理

使用Blit命令编码器交换金属中的纹理
EN

Stack Overflow用户
提问于 2020-01-31 20:11:51
回答 1查看 261关注 0票数 0

我最近使用乒乓球缓冲区和计算着色器在Metal中实现了一个水模拟。它工作得很好,但我只是想知道交换几次纹理的成本是多少,以及是否可以通过使用Blit命令编码器来改善这一点?

以下是代码的示例:

代码语言:javascript
运行
AI代码解释
复制
    let computeEncoder = commandBuffer.makeComputeCommandEncoder()!
    computeEncoder.setComputePipelineState(pipelineState)
    computeEncoder.setTexture(textureA, index: 0)
    computeEncoder.setTexture(textureB, index: 1)

    var width = pipelineState.threadExecutionWidth
    var height = pipelineState.maxTotalThreadsPerThreadgroup / width
    let threadsPerThreadGroup = MTLSizeMake(width, height, 1)
    width = Int(textureA.width)
    height = Int(textureA.height)
    let threadsPerGrid = MTLSizeMake(width, height, 1)

    computeEncoder.dispatchThreads(threadsPerGrid, threadsPerThreadgroup: threadsPerThreadGroup)
    computeEncoder.endEncoding()

    swap(&textureA, &textureB)
EN

回答 1

Stack Overflow用户

发布于 2020-02-02 18:48:30

这种方法工作得很好:

代码语言:javascript
运行
AI代码解释
复制
    let blitEncoder = commandBuffer.makeBlitCommandEncoder()

    blitEncoder?.copy(from: textureA, to: temp)
    blitEncoder?.copy(from: textureB, to: textureA)
    blitEncoder?.copy(from: temp, to: textureB)

    blitEncoder?.endEncoding()

我还没有做任何测试来看这是否会提高性能,尽管我假设是这样的。我会发布结果,一旦我有!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60010598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档