草庐IT

swift - 在下一个计算着色器中使用一个计算着色器的结果的正确方法是什么

假设我在Metal中分配了两个计算着色器A和B。我不希望B在A完成之前运行。目前我正在将每个着色器编码到它们自己的命令缓冲区中并像这样提交:commandBufferA.commit()commandBufferA.waitUntilCompleted()commandBufferB.commit()这是正确的技术吗? 最佳答案 如果您需要在CPU上使用内核的结果,则在命令缓冲区上调用waitUntilCompleted()很有用,但如果您的意图只是使用后续计算命令中的计算命令(调度)。如果计算命令之间存在数据依赖性,则前者写入的结

ios - iOS 上数组的 Swift metal 并行求和计算

基于@Kametrixomanswer,我做了一些测试应用程序来并行计算数组中的总和。我的测试应用程序如下所示:importUIKitimportMetalclassViewController:UIViewController{//Datatype,hastobethesameasintheshadertypealiasDataType=CIntoverridefuncviewDidLoad(){super.viewDidLoad()letdata=(0..)->DataType{letcount=data.countletelementsPerSum:Int=Int(sqrt(Do

swift - 如何将 16 位图像加载到 Metal 纹理中?

使用MTKTextureLoader.newTexture的推荐方法不适用于16位图像。named:版本默默地将图像转换为8位像素格式cgImage:版本以Imagedecodingfailed结束UIImage和NSImage都支持加载16位图像,并且有它们方便的.cgimage方法,可以在一行中转换为CGImage,因此在两个平台上获取CGImage都得到了解决。我如何编写一个转换CGImage并返回16位Metal纹理的函数? 最佳答案 下面的loadEXRTexture函数加载扩展范围的图像并将其像素转换为半精度float,

swift - MTKTextureLoader 导致灰度图像出现 strip

我正在尝试在Metal着色器中实现一个简单的LUT颜色分级。它适用于彩色LUT,但当LUT为灰度时,问题就会出现。首先,加载灰度图像会导致“图像解码失败”错误,已通过thisbugworkaround修复。.通过将图像重新表征为Assets包中的纹理,它可以成功加载,但输出图像上存在strip。果然,捕获GPU帧显示纹理中已引入strip:在资源包或源PNG上进行快速查看时,不会出现此strip。检查纹理的像素格式表明它已被编码为ASTC_4x4_sRGB,Appledocumentationstates是一种用于低动态范围内容的压缩格式。似乎这种压缩可能是导致LUT纹理降级的原因。通

ios Metal : limit on number of variables used in a shader

我在为我的着色器添加一些复杂性后,今天开始收到以下错误:Executionofthecommandbufferwasabortedduetoanerrorduringexecution.Discarded(victimofGPUerror/recovery)(IOAFcode5)我发现它与实际添加的代码无关,但实际上我添加了更多变量和函数调用。我尝试从着色器中删除其他复杂性,错误被删除。我发现的另一件事是,当我将fastmath设置为false时,问题也消失了。我的第一个猜测是,当快速数学打开时,变量的数量会有某种限制。有这样的限制吗?还有其他想法为什么会发生这种错误吗?

swift - 使用 Metal Framework 将图像保存到磁盘时命令缓冲区的执行被中止/GPU 错误

我正在开发同时使用ARKit和Metal/MetalKit框架的IOS应用程序(ios12)。我正在捕获图像并将它们压缩并将它们保存到手机的文档目录中。手机每移动10厘米就会捕获图像。但是,大约10分钟后(保存了大约300MB的数据后)应用程序崩溃并吐出错误:"Executionofthecommandbufferwasabortedduetoanerrorduringexecution.Discarded(victimofGPUerror/recovery)(IOAFcode5)"有没有人看到这个或了解可能是什么问题? 最佳答案

ios - 如何使用 Metal 自定义计算着色器并获得非常流畅的性能?

我正在尝试使用苹果提供的默认MPSKernal滤镜和自定义computeShaders通过Metal应用实时相机滤镜。在计算着色器中,我使用MPSImageGaussianBlur进行了就地编码代码在这里funcencode(tocommandBuffer:MTLCommandBuffer,sourceTexture:MTLTexture,destinationTexture:MTLTexture,cropRect:MTLRegion=MTLRegion.init(),offset:CGPoint){letblur=MPSImageGaussianBlur(device:device,

swift - 如何使用 MDL 使用边界框进行 HitTest

我正在尝试计算与MDL边界框的交集,我的代码基于WM在http://metalbyexample.com/picking-hit-testing/#more-738发表的精彩文章t0应该是最近点的想法https://www.scratchapixel.com/lessons/3d-basic-rendering/minimal-ray-tracer-rendering-simple-shapes/ray-sphere-intersectionhttps://www.scratchapixel.com/lessons/3d-basic-rendering/minimal-ray-trac

swift - 如何使用 Metal 和 Swift 对 CAMetalLayer 进行深度测试?

最近我决定学习如何将Metal框架与Swift结合使用。我阅读了一些教程,观看了视频,做了一些事情,最后我不得不使用深度测试让事情看起来不错。我以前没有做过如此底层的图形编程,所以我在整个互联网上浏览了深度测试的工作原理以及如何使用CAMetalLayer和Metal实现它。然而,我发现的所有深度测试示例都是使用OpenGL完成的,我无法在Metal中找到此类功能。如何使用Metal和Swift通过CAMetalLayer实现深度测试?提前致谢! 最佳答案 这是一个很好的例子。http://metalbyexample.com/up

ios - Metal Custom CIFilter 不同的返回值

我正在编写CIFilter,但结果像素颜色与Metal函数的返回值不同。内核Metal#includeextern"C"{namespacecoreimage{float4foo(sample_trgb){returnfloat4(0.3f,0.5f,0.7f,1.0f);}}Metal过滤器.swiftimportCoreImageclassMetalFilter:CIFilter{privateletkernel:CIColorKernelvarinputImage:CIImage?overrideinit(){leturl=Bundle.main.url(forResource: