-
Notifications
You must be signed in to change notification settings - Fork 0
/
mlx_image.swift
48 lines (36 loc) · 1.3 KB
/
mlx_image.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import Metal
public class MlxImg
{
public var texture: MTLTexture
/// var texture_buff: MTLBuffer
public var texture_sizeline: Int
public var texture_data: UnsafeMutablePointer<UInt32>
public var texture_width: Int
public var texture_height: Int
public var onGPU = 0
convenience public init(d device:MTLDevice, w width:Int, h height:Int)
{
self.init(d:device, w:width, h:height, t:0)
}
public init(d device:MTLDevice, w width:Int, h height:Int, t target:Int)
{
texture_width = width
texture_height = height
texture_sizeline = width * 4
texture_sizeline = 256 * (texture_sizeline / 256 + (texture_sizeline%256 >= 1 ? 1 : 0) )
let textureDesc = MTLTextureDescriptor()
textureDesc.width = texture_width
textureDesc.height = texture_height
textureDesc.usage = .shaderRead
if (target == 1)
{
textureDesc.usage = .renderTarget
textureDesc.storageMode = .private
}
textureDesc.pixelFormat = MTLPixelFormat.bgra8Unorm
let texture_buff = device.makeBuffer(length: texture_sizeline * height)!
texture = texture_buff.makeTexture(descriptor:textureDesc, offset:0, bytesPerRow:texture_sizeline)!
let tmpptr = texture_buff.contents()
texture_data = tmpptr.assumingMemoryBound(to:UInt32.self)
}
}