问题标签 [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.

0 投票
2 回答
229 浏览

c++ - 使用带有 Imageblocks 的 Metal API 的模板“隐式实例化”错误

在以下金属性能着色器代码中:

我在最后一个代码行收到两个错误:

我正在尝试遵循https://developer.apple.com/videos/play/tech-talks/603/上“Metal 2 on a!! - Imageblocks”的技术谈话示例 (代码示例在 3 :25 进入视频。)

我无法使用图像块在互联网上找到任何代码示例。

谁能建议一些示例代码,或者告诉我为什么不编译?

0 投票
1 回答
466 浏览

ios - MPSImageGaussianPyramid 与 Metal 的适当使用

我想使用MPSImageGaussianPyramid但对 Metal 的用法和 mipmaps 非常陌生。我想使用过滤器为图像处理技术生成图像金字塔。

根据我能够收集到的内容,MPSImageGaussianPyramid创建一个 mipmap 图像,但是在我的代码中,我什至很难确保我正确地看到了输出。有没有正确使用此过滤器的示例?我的问题是:

  1. 应用过滤器后如何访问 mipmapped 图像?

  2. 是否可以将 mipmapped 图像复制到另一个图像进行处理?

  3. 这个 mipmap 图像会比通过自定义过滤器手动创建金字塔更快吗?

谢谢,稍后我将提供一些我无法开始工作的示例代码。

0 投票
2 回答
692 浏览

objective-c - Apple Metal Element-wise 矩阵乘法(Hadamard Product)

是否可以使用 Apple 的 Metal Performance Shaders 执行 Hadamard 产品?我看到可以使用this执行正常的矩阵乘法,但我特别在寻找一种元素乘法,或者一种巧妙的构造方法。(例如,是否可以将 MPSMatrix 转换为 MPSVector,然后使用向量执行乘积?)

更新:我很欣赏使用着色器的建议!我正在研究一个实现,这看起来很有希望!一旦我有工作,我会发布解决方案。

0 投票
1 回答
387 浏览

ios - 如何使用 CoreImage 或 Metal Performance Shaders 创建自定义颜色过滤器?

我需要根据 RGBA 值创建滤色器。我可以使用 Core Image 或 Metal Performance Shaders。Core Image 提供了一些默认过滤器。但我需要带有 RGBA 颜色代码的滤镜。是否可以创建这样的过滤器?

我试过这个,但这不是预期的结果。我期待像棕褐色色调过滤器具有不同的颜色。(过滤器应适用于整个框架)

它对我有用。得到这样的结果图像

在此处输入图像描述

但这不是预期的过滤器。我期待的只是彩色滤光片。喜欢

在此处输入图像描述

希望你明白我的意思。

0 投票
2 回答
291 浏览

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 中执行此操作,但我也可以快速阅读。

先感谢您。

0 投票
1 回答
216 浏览

metalkit - 将 MTLTexture 从 depth32Float 转换为 bgra8UNorm

我想使用金属性能着色器处理来自深度缓冲区的信息,例如使用高斯或索贝尔着色器。

MTLTexture使用depth32Float像素格式时遇到问题。MPSImageGaussianBlur或任何其他性能着色器不接受它作为源纹理。

我尝试使用转换它:depthBufferTexture.makeTextureView(pixelFormat: .bgra8Unorm)但收到错误消息:

validateArgumentsForTextureViewOnDevice:1406:断言失败source texture pixelFormat (MTLPixelFormatDepth32Float) not castable.

有什么方法可以转换depth32Floatbgra8UNorm或任何其他像素格式吗?

0 投票
1 回答
151 浏览

objective-c - MPSMatrixMultiplication encodeToBuffer 有问题

我正在使用 MPSMatrixMultiplication,当我调用 encodeToCommandBuffer 时,它显示错误“起始矩阵必须包含在每个 MPSMatrix 对象中。” 我不确定这意味着什么。

我只是想做一个简单的计算,似乎如果我在 swift 中应用类似的代码和模式,它工作得很好,但在 Objective-c 中它给了我错误。

如果能指出我的代码中存在的问题,我将不胜感激。

0 投票
3 回答
80 浏览

ios - 不推荐使用 MPSCNNConvolutionDescriptor 神经元过滤器

在 iOS 11.0 中,一些 ConvolutionDespriptors 不推荐使用神经元过滤器。

我仍在使用它,但 Xcode 已经抱怨弃用,这是由于最后一个参数:

不幸的是,当前的 Apple 文档没有说明如何解决该问题。“neuronFilter”参数需要从调用中删除,但我该如何使用它呢?

有什么建议么 ?

0 投票
0 回答
162 浏览

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) 之外,打印语句只是为了尝试和调试

我讨厌粘贴这么多代码,但恐怕我无法真正隔离我的问题。

0 投票
1 回答
109 浏览

metal - Metal 结构大小的两个示例似乎相互矛盾

这个结构的大小是 36 字节:

float当s 和ints 分别为 4 个字节而 apacked_float3为 12 个字节时,这是有道理的。

它的大小是 88 字节:

float当s 是 8 个字节而 thepacked_float3是 16 个字节时,这是有道理的。

这些在同一个金属着色器中。这里的对齐发生了什么会导致这是真的?

如果 a 必须适合连续的 16 字节空间,我只能使匹配工作packed_float3,因此在第一个示例中,它适合在第一个之后int,但在第二个示例中,每个示例都必须开始自己的。是这样吗?16如果是这样,我在 Metal Shading 指南中可以找到的任何地方似乎都没有记录这个幻数。