The compiler errors generally warn me that MTLPackedFloat4x3 has no subscripts. Columns in MTLPackedFloat4x3 are represented as a fixed-sized C-array, and imported into Swift as a tuple. So, you need to access each column by tuple member access like .0, .1, .2 or .3. Or else access whole columns as a tuple. I would do it in this way. First, prepare an initializer taking SIMD matrix. extension MTLPackedFloat4x3 { ttinit(_ mat4x4: matrix_float4x4) { ttttself.init(columns: ( ttttttMTLPackedFloat3(mat4x4[0]), ttttttMTLPackedFloat3(mat4x4[1]), ttttttMTLPackedFloat3(mat4x4[2]), ttttttMTLPackedFloat3(mat4x4[3]) tttt)) tt} } extension MTLPackedFloat3 { ttinit(_ vec4: simd_float4) { ttttself.init() ttttself.elements = (vec4[0], vec4[1], vec4[2]) tt} } And set whole transformationMatrix at once. anInstanceDescriptorPointer.pointee.transformationMatrix = MTLPackedFloat4x3(aNodeInstance.transform)