Hi all - 

I’m converting Apple’s Swift Sample "Adopting Metal II: Designing and 
Implementing a Real-World Metal Renderer” in Xcode 8 beta6 to the latest 
UnsafeMutablePointer API for untyped memory access.  
Changes are necessary in MetalView.swift (Apple hasn’t updated their sample 
code for the latest beta yet…) 
The Swift Compiler crashes (Segmentation Fault: 11) on the attempt:

        // Grab a pointer to the constant buffer's data store
        // Since we are using Swift, it is easier to cast the pointer to the 
ShadowPass type to fill the constant buffer
        // We need to make a copy of these so the block captures the correct 
data

//      let shadowPtr = 
UnsafeMutablePointer<ShadowPass>(constantBufferForFrame.contents())
        let shadowPtr = constantBufferForFrame.contents().bindMemory(to: 
ShadowPass.self, capacity: MemoryLayout<ShadowPass>.size)
        shadowPtr.pointee = shadowPassData[0]

        //More Swift specific stuff - advance pointer and cast to MainPass

//      let mainPtr = UnsafeMutablePointer<MainPass>(shadowPtr.advanced(by: 1))
//      mainPtr.pointee = mainPassFrameData
        let mainPtr : UnsafeMutablePointer<MainPass>  = shadowPtr.advanced(by: 
1).withMemoryRebound(to: MainPass.self, capacity: MemoryLayout<MainPass>.size) {
            $0.pointee = mainPassFrameData
        }
        
        //Advance and cast to ObjectData
        
//      var ptr = UnsafeMutablePointer<ObjectData>(mainPtr.advanced(by: 1))
        var ptr : UnsafeMutablePointer<ObjectData> = mainPtr.advanced(by: 
1).withMemoryRebound(to: ObjectData.self, capacity: 
MemoryLayout<ObjectData>.size) {_ in
        }

        let shadowOffset = 0
        let mainPassOffset = MemoryLayout<ShadowPass>.size + shadowOffset
        let objectDataOffset = MemoryLayout<MainPass>.size + mainPassOffset

        // Update position of all the objects
        if multithreadedUpdate {
            DispatchQueue.concurrentPerform(iterations: objectsToRender) { i in
                let thisPtr = ptr.advanced(by: i)
                _ = self.renderables[i].UpdateData(ptr, deltaTime: 1.0/60.0)
            }
        }
        else {
            for index in 0..<objectsToRender {
                ptr = renderables[index].UpdateData(ptr, deltaTime: 1.0/60.0)
            }
        }
        
        ptr = ptr.advanced(by: objectsToRender)
        
        _ = groundPlane!.UpdateData(ptr, deltaTime: 1.0/60.0)

Any help is appreciated.  I have the latest Xcode log handy if necessary.  
Here’s a clip of the stack trace.

0  swift                    0x000000010714a99d 
PrintStackTraceSignalHandler(void*) + 45
1  swift                    0x000000010714a3e6 SignalHandler(int) + 470
2  libsystem_platform.dylib 0x00007fff91461bba _sigtramp + 26
3  libsystem_platform.dylib 000000000000000000 _sigtramp + 1857676384
4  swift                    0x00000001047207b3 (anonymous 
namespace)::SILGenApply::visitExpr(swift::Expr*) + 51
5  swift                    0x0000000104723ace (anonymous 
namespace)::SILGenApply::visitApplyExpr(swift::ApplyExpr*) + 5182
6  swift                    0x0000000104711cc1 
prepareApplyExpr(swift::Lowering::SILGenFunction&, swift::Expr*) + 273
7  swift                    0x00000001047624e7 swift::ASTVisitor<(anonymous 
namespace)::RValueEmitter, swift::Lowering::RValue, void, void, void, void, 
void, swift::Lowering::SGFContext>::visit(swift::Expr*, 
swift::Lowering::SGFContext) + 103
8  swift                    0x0000000104762313 
swift::Lowering::SILGenFunction::emitExprInto(swift::Expr*, 
swift::Lowering::Initialization*) + 195
9  swift                    0x000000010474fbc3 
swift::Lowering::SILGenFunction::emitPatternBinding(swift::PatternBindingDecl*, 
unsigned int) + 195
10 swift                    0x00000001047077bd 
swift::ASTVisitor<swift::Lowering::SILGenFunction, void, void, void, void, 
void, void>::visit(swift::Decl*) + 125
11 swift                    0x00000001047c0019 swift::ASTVisitor<(anonymous 
namespace)::StmtEmitter, void, void, void, void, void, 
void>::visit(swift::Stmt*) + 4169
12 swift                    0x00000001047809ba 
swift::Lowering::SILGenFunction::emitFunction(swift::FuncDecl*) + 314
13 swift                    0x00000001046fd775 
swift::Lowering::SILGenModule::emitFunction(swift::FuncDecl*)::$_1::operator()(swift::SILFunction*)
 const + 1877
14 swift                    0x00000001046fc322 
swift::Lowering::SILGenModule::emitFunction(swift::FuncDecl*) + 626
15 swift                    0x00000001047c7007 (anonymous 
namespace)::SILGenType::emitType() + 1271
16 swift                    0x00000001047c6a9e 
swift::Lowering::SILGenModule::visitNominalTypeDecl(swift::NominalTypeDecl*) + 
30
17 swift                    0x0000000104709093 
swift::Lowering::SILGenModule::emitSourceFile(swift::SourceFile*, unsigned int) 
+ 1795
18 swift                    0x000000010470ad4d 
swift::SILModule::constructSIL(swift::ModuleDecl*, swift::SILOptions&, 
swift::FileUnit*, llvm::Optional<unsigned int>, bool, bool) + 1629
19 swift                    0x00000001045621bf 
performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, 
llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*) + 19487
20 swift                    0x000000010455b2c5 
swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, 
swift::FrontendObserver*) + 17029
21 swift                    0x000000010451888d main + 8685
22 libdyld.dylib            0x00007fff91255255 start + 1


Patrice

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to