问题标签 [metal-performance-shaders]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用带有 Imageblocks 的 Metal API 的模板“隐式实例化”错误
在以下金属性能着色器代码中:
我在最后一个代码行收到两个错误:
我正在尝试遵循https://developer.apple.com/videos/play/tech-talks/603/上“Metal 2 on a!! - Imageblocks”的技术谈话示例 (代码示例在 3 :25 进入视频。)
我无法使用图像块在互联网上找到任何代码示例。
谁能建议一些示例代码,或者告诉我为什么不编译?
ios - MPSImageGaussianPyramid 与 Metal 的适当使用
我想使用MPSImageGaussianPyramid
但对 Metal 的用法和 mipmaps 非常陌生。我想使用过滤器为图像处理技术生成图像金字塔。
根据我能够收集到的内容,MPSImageGaussianPyramid
创建一个 mipmap 图像,但是在我的代码中,我什至很难确保我正确地看到了输出。有没有正确使用此过滤器的示例?我的问题是:
应用过滤器后如何访问 mipmapped 图像?
是否可以将 mipmapped 图像复制到另一个图像进行处理?
这个 mipmap 图像会比通过自定义过滤器手动创建金字塔更快吗?
谢谢,稍后我将提供一些我无法开始工作的示例代码。
objective-c - Apple Metal Element-wise 矩阵乘法(Hadamard Product)
是否可以使用 Apple 的 Metal Performance Shaders 执行 Hadamard 产品?我看到可以使用this执行正常的矩阵乘法,但我特别在寻找一种元素乘法,或者一种巧妙的构造方法。(例如,是否可以将 MPSMatrix 转换为 MPSVector,然后使用向量执行乘积?)
更新:我很欣赏使用着色器的建议!我正在研究一个实现,这看起来很有希望!一旦我有工作,我会发布解决方案。
ios - 如何在 iOS 的 Metal API 中使用计算函数进行乘法运算
我是 iOS 中 Metal API 的新手。所以我的问题是,例如,如何使用 Metal 计算函数进行乘法运算,
假设我们有两个长度为 2048 的 float[] 数组,我们想将相应的元素相乘,形成另一个 2048 的 float[] 数组
像这样
资源[i] = a[i] * b[i];
使用 a[] 和 b[] 一个 2048 个浮点数的数组
和 res[] 另一个 2048 个浮点数的数组
下一步是执行该“操作”,2048 次。
有人可以帮我解决这个问题。
如果可能,我需要在 Objective-c 中执行此操作,但我也可以快速阅读。
先感谢您。
metalkit - 将 MTLTexture 从 depth32Float 转换为 bgra8UNorm
我想使用金属性能着色器处理来自深度缓冲区的信息,例如使用高斯或索贝尔着色器。
MTLTexture
使用depth32Float
像素格式时遇到问题。MPSImageGaussianBlur
或任何其他性能着色器不接受它作为源纹理。
我尝试使用转换它:depthBufferTexture.makeTextureView(pixelFormat: .bgra8Unorm)
但收到错误消息:
validateArgumentsForTextureViewOnDevice:1406:断言失败
source texture pixelFormat (MTLPixelFormatDepth32Float) not castable.
有什么方法可以转换depth32Float
为bgra8UNorm
或任何其他像素格式吗?
objective-c - MPSMatrixMultiplication encodeToBuffer 有问题
我正在使用 MPSMatrixMultiplication,当我调用 encodeToCommandBuffer 时,它显示错误“起始矩阵必须包含在每个 MPSMatrix 对象中。” 我不确定这意味着什么。
我只是想做一个简单的计算,似乎如果我在 swift 中应用类似的代码和模式,它工作得很好,但在 Objective-c 中它给了我错误。
如果能指出我的代码中存在的问题,我将不胜感激。
ios - 不推荐使用 MPSCNNConvolutionDescriptor 神经元过滤器
在 iOS 11.0 中,一些 ConvolutionDespriptors 不推荐使用神经元过滤器。
我仍在使用它,但 Xcode 已经抱怨弃用,这是由于最后一个参数:
不幸的是,当前的 Apple 文档没有说明如何解决该问题。“neuronFilter”参数需要从调用中删除,但我该如何使用它呢?
有什么建议么 ?
ios - 在 MacBook Pro 和 iMac 之间使用 Metal Performance Shaders 的结果不一致
我正试图第一次涉足 GPU 编程领域。我想我会从一些简单的东西开始,使用预制的内核(因此是 MPS),然后尝试向 GPU 发出命令。
我的尝试是简单地将 1 到 1000 之间的所有值相加。我将每个值放在一个 1x1 矩阵中并使用 MPS 矩阵求和。
在我的 MacBook Pro 上,这可以按我的预期工作。
在我的 iMac 上,它给出 [0.0] 作为结果。我认为这与内存有关,因为我在 MacBook Pro 上使用 iGPU,在 iMac 上使用 dGPU,但是,据我所知, storageModeShared 不应该导致这种情况。我什至尝试在尝试读取结果矩阵之前将 .synchronize() 添加到结果矩阵中,即使我很确定 storageModeShared 不需要它。
代码并不优雅,因为它只是为了快速理解使用 MPS 发出命令的工作原理,我尝试在不跟踪结构的情况下修复问题一段时间,但它仍然应该很容易阅读;如果不让我知道,我会重构它。
除了 print(output) 之外,打印语句只是为了尝试和调试
我讨厌粘贴这么多代码,但恐怕我无法真正隔离我的问题。
metal - Metal 结构大小的两个示例似乎相互矛盾
这个结构的大小是 36 字节:
float
当s 和int
s 分别为 4 个字节而 apacked_float3
为 12 个字节时,这是有道理的。
它的大小是 88 字节:
float
当s 是 8 个字节而 thepacked_float3
是 16 个字节时,这是有道理的。
这些在同一个金属着色器中。这里的对齐发生了什么会导致这是真的?
如果 a 必须适合连续的 16 字节空间,我只能使匹配工作packed_float3
,因此在第一个示例中,它适合在第一个之后int
,但在第二个示例中,每个示例都必须开始自己的。是这样吗?16
如果是这样,我在 Metal Shading 指南中可以找到的任何地方似乎都没有记录这个幻数。