Swift Generic Functions
0 likes • Oct 15, 2022
Swift
Loading...
More Swift Posts
import simdprivate func test() {let screenWidth: Int = 256let screenHeight: Int = 240let pixelBufferPtr = UnsafeMutableBufferPointer<BGRA>.allocate(capacity: screenWidth * screenHeight)let runCount = 1000let start = Date.nowfor _ in 0 ..< runCount {var index = 0var palletIndex = 0let palletCount = BGRAPallet.countwhile index < pixelBufferPtr.count {let bgra = BGRAPallet[palletIndex]let bgraVector = simd_uint4(bgra.blue, bgra.green, bgra.red, bgra.alpha)let maxCount = min(pixelBufferPtr.count - index, 4)let pixelBuffer = pixelBufferPtr.baseAddress! + indexpixelBuffer.storeBytes(of: bgraVector, as: simd_uint4.self)palletIndex += 1if palletIndex == palletCount {palletIndex = 0}index += maxCount}}let elapsed = Date.now.timeIntervalSince(start)print("Average time per run: \((Int(elapsed) * 1000) / runCount) ms")}//if for some reason your system doesnt support simd_uint4, you can try the following:// private func test() {// let screenWidth: Int = 256// let screenHeight: Int = 240// let pixelBufferPtr = UnsafeMutableBufferPointer<BGRA>.allocate(capacity: screenWidth * screenHeight)// let runCount = 1000// let start = Date.now// for _ in 0 ..< runCount {// let pixelBuffer = pixelBufferPtr.baseAddress!// let pixelBufferCount = pixelBufferPtr.count// let palletCount = BGRAPallet.count// var palletIndex = 0// for i in stride(from: 0, to: pixelBufferCount, by: 4) {// let bgra = BGRAPallet[palletIndex]// pixelBuffer[i] = bgra// pixelBuffer[i + 1] = bgra// pixelBuffer[i + 2] = bgra// pixelBuffer[i + 3] = bgra// palletIndex += 1// if palletIndex == palletCount {// palletIndex = 0// }// }// }// let elapsed = Date.now.timeIntervalSince(start)// print("Average time per run: \((Int(elapsed) * 1000) / runCount) ms")// }