Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用金属缓冲器碰撞_Multithreading_Macos_Metal - Fatal编程技术网

Multithreading 使用金属缓冲器碰撞

Multithreading 使用金属缓冲器碰撞,multithreading,macos,metal,Multithreading,Macos,Metal,我使用背景线程创建金属缓冲区: var vertices:UnsafeMutablePointer<Float>?=nil var indexes:UnsafeMutablePointer<UInt32>?=nil var vertexCount: UInt32=UInt32() var indexCount: UInt32=UInt32() triangulatePoints(hull, &vertices, &indexes, &vertex

我使用背景线程创建金属缓冲区:

var vertices:UnsafeMutablePointer<Float>?=nil
var indexes:UnsafeMutablePointer<UInt32>?=nil
var vertexCount: UInt32=UInt32()
var indexCount: UInt32=UInt32()

triangulatePoints(hull, &vertices, &indexes, &vertexCount, &indexCount)

defer {
    free(vertices)
    free(indexes)
}

if let vertexBuffer=device.makeBuffer(bytes: vertices!,
                                      length: Int(vertexCount)*MemoryLayout<Float>.size*3,
                                      options: .storageModeShared),
   let indexBuffer=device.makeBuffer(bytes: indexes!,
                                     length: Int(indexCount)*MemoryLayout<UInt32>.size,
                                     options: .storageModeShared) 
{
   metalObject=MetalObject(vertices: vertexBuffer, indices: indexBuffer)
}
MetalObject
s是简单的容器,也存储在其他容器中:

class MetalObject: NSObject {
    var vertexBuffer: MTLBuffer
    var indexBuffer: MTLBuffer

    init(vertices: MTLBuffer, indices:MTLBuffer) {
        vertexBuffer=vertices
        indexBuffer=indices
    }
}

class MetalImageLayer: NSObject {
    var layers=[MetalPolarityLayer]()
}

class MetalPolarityLayer: NSObject {
    var elements=[MetalObject]() //For general objects that need to be drawn piece by piece
    var regions=[MetalObject]() //For region objects that can be instanced
}
在调试模式下,我经常在使用
EXC\u BAD\u访问(code=1,address=0x40dedededbec8)的行
metalObject=metalObject(顶点:vertexBuffer,索引:indexBuffer)
上发生崩溃。堆栈跟踪如下所示:

#0  0x000000010166a6e2 in swift_unknownRetain ()
#1  0x000000010005bf5f in StrokeLine.constructMetalBuffers(withPrecision:device:) at Image+Metal.swift:445
#2  0x000000010005c8b2 in @objc StrokeLine.constructMetalBuffers(withPrecision:device:) ()
#3  0x0000000100050b4d in Image.constructMetalBuffers(withPrecision:device:) at Image+Metal.swift:40
#4  0x0000000100051082 in @objc Image.constructMetalBuffers(withPrecision:device:) ()
#5  0x0000000100067eef in closure #1 in WindowLayer.observeValue(forKeyPath:of:change:context:) at WindowLayer.swift:181
从调试器检查
vertexBuffer
,然后给出:
po vertexBuffer
错误:执行被中断,原因:EXC\u错误\u访问(代码=1,地址=0x2e7466697770)。

另一方面,在发布模式下,我有时会遇到崩溃

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
abort() called

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x00007fff60084fce __pthread_kill + 10
1   libsystem_pthread.dylib         0x00007fff601c2150 pthread_kill + 333
2   libsystem_c.dylib               0x00007fff5ffe132a abort + 127
3   com.apple.IOAccelerator         0x00007fff5279a1ea ioAccelResourceListAddNewGroupAndResource + 221
4   com.apple.IOAccelerator         0x00007fff52799d19 IOAccelResourceListAddResource + 304
5   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32aa02ef IGBufferMemory<31ul>::listId(unsigned int) + 85
6   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32aa654b ShaderBindingStage::updateUAVTable(unsigned int, unsigned int, bool) + 459
7   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9fe0d ShaderBindingStage::updateBindingTableData() + 1631
8   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9f70b ShaderBindingStage::writeTableIf() + 55
9   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9cc11 IGAccelRenderCommandEncoder::programPipeline(sPrimitiveData const&) + 4685
10  com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9b7b4 IGAccelRenderCommandEncoder::drawIndexedPrimitives(MTLPrimitiveType, unsigned int, MTLIndexType, MTLIGAccelBuffer*, unsigned int, unsigned int, unsigned int, unsigned int) + 710
11  com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9b40c -[MTLIGAccelRenderCommandEncoder drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:] + 324
崩溃线程:0调度队列:com.apple.main-Thread
异常类型:EXC_崩溃(SIGABRT)
异常代码:0x0000000000,0x0000000000000000
例外说明:EXC_尸体通知
特定于应用程序的信息:
调用了abort()
线程0崩溃::调度队列:com.apple.main-Thread
0 libsystem_kernel.dylib 0x00007fff60084fce_uuupthread_kill+10
1 libsystem_pthread.dylib 0x00007fff601c2150 pthread_kill+333
2 libsystem_c.dylib 0x00007fff5ffe132a中止+127
3 com.apple.IOAccelerator 0x00007fff5279a1ea IOAccelerResourceListAddNewGroupandResource+221
4 com.apple.IOAccelerator 0x00007fff52799d19 IOAccelerResourceListAddResource+304
5 com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32aa02ef IGBufferMemory::listId(无符号整数)+85
6 com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32aa654b ShaderBindingStage::updateUAVTable(unsigned int,unsigned int,bool)+459
7 com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9fe0d ShaderBindingStage::updateBindingTableData()+1631
8 com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9f70b着色器绑定阶段::writeTableIf()+55
9 com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9cc11 IGAccelRenderCommandEncoder::programPipeline(sPrimitiveData const&)+4685
10 com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9b7b4 IGAccelRenderCommandEncoder::drawIndexedPrimitives(MTLPrimitiveType、unsigned int、MTLIndexType、MTLIGAccelBuffer*、unsigned int、unsigned int、unsigned int、unsigned int)+710
11 com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9b40c-[MTLIGAccelRenderCommandEncoder drawindexedprimitions:indexCount:indexType:indexBuffer:indexBufferOffset:+324
没有记录可能导致崩溃的更多信息

使用仪器来寻找僵尸没有结果


我应该如何找出这里出了什么问题?

MetalObject的代码是什么?调试版本崩溃的堆栈跟踪是什么?它出现在代码的哪一行?什么是
顶点
索引
?如何将
MetalObject
s发送到主线程?您好,感谢您调查我的问题。我添加了很多信息。我希望这就是你需要的。那么,Image+Metal的代码是什么呢。swift:445,这显然是引起坠机的那一行。另外,我假设
triangulatePoints()
正在为
顶点和
索引分配空间,对吗?代码是
metalObject=metalObject(顶点:vertexBuffer,索引:indexBuffer)
,因此它是我复制的第一段代码的最后一行。三角化函数使用malloc,例如:
*顶点=(float*)malloc(例如节点数()*sizeof(float)*3)
Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
abort() called

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x00007fff60084fce __pthread_kill + 10
1   libsystem_pthread.dylib         0x00007fff601c2150 pthread_kill + 333
2   libsystem_c.dylib               0x00007fff5ffe132a abort + 127
3   com.apple.IOAccelerator         0x00007fff5279a1ea ioAccelResourceListAddNewGroupAndResource + 221
4   com.apple.IOAccelerator         0x00007fff52799d19 IOAccelResourceListAddResource + 304
5   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32aa02ef IGBufferMemory<31ul>::listId(unsigned int) + 85
6   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32aa654b ShaderBindingStage::updateUAVTable(unsigned int, unsigned int, bool) + 459
7   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9fe0d ShaderBindingStage::updateBindingTableData() + 1631
8   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9f70b ShaderBindingStage::writeTableIf() + 55
9   com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9cc11 IGAccelRenderCommandEncoder::programPipeline(sPrimitiveData const&) + 4685
10  com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9b7b4 IGAccelRenderCommandEncoder::drawIndexedPrimitives(MTLPrimitiveType, unsigned int, MTLIndexType, MTLIGAccelBuffer*, unsigned int, unsigned int, unsigned int, unsigned int) + 710
11  com.apple.driver.AppleIntelKBLGraphicsMTLDriver 0x00007fff32a9b40c -[MTLIGAccelRenderCommandEncoder drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:] + 324