// RUN: rm -rf %t ; mkdir -p %t // RUN: %target-build-swift %s -o %t/a.out4 -swift-version 4 && %target-run %t/a.out4 // REQUIRES: objc_interop // UNSUPPORTED: OS=watchos import StdlibUnittest import Metal var MetalTests = TestSuite("Metal") if #available(OSX 10.13, iOS 11.0, tvOS 11.0, *) { // Call each overlay to ensure nothing explodes MetalTests.test("MTLArgumentEncoder") { func apiAvailabilityTest() { /* Setup */ let device = MTLCreateSystemDefaultDevice()! let buf = device.makeBuffer( length: 64, options: MTLResourceOptions.storageModeShared)! let texDesc = MTLTextureDescriptor() texDesc.usage = MTLTextureUsage.renderTarget let tex = device.makeTexture(descriptor: texDesc)! let smplr = device.makeSamplerState(descriptor: MTLSamplerDescriptor()) var arguments = [MTLArgumentDescriptor]() arguments.append(MTLArgumentDescriptor()) arguments.append(MTLArgumentDescriptor()) arguments.append(MTLArgumentDescriptor()) arguments[0].dataType = MTLDataType.pointer arguments[0].index = 0 arguments[1].dataType = MTLDataType.texture arguments[1].index = 1 arguments[2].dataType = MTLDataType.sampler arguments[2].index = 2 /* Call APIs */ let argEncoder = device.makeArgumentEncoder(arguments: arguments)! argEncoder.setArgumentBuffer(buf, offset: 0) argEncoder.setBuffers([buf], offsets: [0], range: 0..<1) argEncoder.setTextures([tex], range: 1..<2) argEncoder.setSamplerStates([smplr], range: 2..<3) } } MetalTests.test("MTLBlitCommandEncoder") { func apiAvailabilityTest() { /* Setup */ let device = MTLCreateSystemDefaultDevice()! let queue = device.makeCommandQueue()! let cmdBuf = queue.makeCommandBuffer()! let bltCmdEncdr = cmdBuf.makeBlitCommandEncoder()! /* Call APIs */ let buf = device.makeBuffer(length: 4, options: MTLResourceOptions())! bltCmdEncdr.fill(buffer: buf, range: 0..