77# we cannot take a MTLBuffer's handle and work with that as it were a pointer to memory.
88# instead, the Metal APIs always take the original handle and an offset parameter.
99
10- struct MtlPointer {T}
10+ struct MtlPtr {T}
1111 buffer:: MTLBuffer
1212 offset:: UInt # in bytes
1313
14- function MtlPointer {T} (buffer:: MTLBuffer , offset= 0 ) where {T}
14+ function MtlPtr {T} (buffer:: MTLBuffer , offset= 0 ) where {T}
1515 new (buffer, offset)
1616 end
1717end
1818
19- Base. eltype (:: Type{<:MtlPointer {T}} ) where {T} = T
19+ Base. eltype (:: Type{<:MtlPtr {T}} ) where {T} = T
2020
2121# limited arithmetic
22- Base.:(+ )(x:: MtlPointer {T} , y:: Integer ) where {T} = MtlPointer {T} (x. buffer, x. offset+ y)
23- Base.:(- )(x:: MtlPointer {T} , y:: Integer ) where {T} = MtlPointer {T} (x. buffer, x. offset- y)
24- Base.:(+ )(x:: Integer , y:: MtlPointer {T} ) where {T} = MtlPointer {T} (x. buffer, y+ x. offset)
22+ Base.:(+ )(x:: MtlPtr {T} , y:: Integer ) where {T} = MtlPtr {T} (x. buffer, x. offset+ y)
23+ Base.:(- )(x:: MtlPtr {T} , y:: Integer ) where {T} = MtlPtr {T} (x. buffer, x. offset- y)
24+ Base.:(+ )(x:: Integer , y:: MtlPtr {T} ) where {T} = MtlPtr {T} (x. buffer, y+ x. offset)
2525
26- Base. convert (:: Type{Ptr{T}} , ptr:: MtlPointer ) where {T} =
26+ Base. convert (:: Type{Ptr{T}} , ptr:: MtlPtr ) where {T} =
2727 convert (Ptr{T}, ptr. buffer) + ptr. offset
2828
2929
3030# # operations
3131
3232# CPU -> GPU
33- function Base. unsafe_copyto! (dev:: MTLDevice , dst:: MtlPointer {T} , src:: Ptr{T} , N:: Integer ;
33+ function Base. unsafe_copyto! (dev:: MTLDevice , dst:: MtlPtr {T} , src:: Ptr{T} , N:: Integer ;
3434 queue:: MTLCommandQueue = global_queue (dev), async:: Bool = false ) where T
3535 storage_type = dst. buffer. storageMode
3636 if storage_type == MTL. MTLStorageModePrivate
3737 # stage through a shared buffer
38- # shared = alloc(dev, N*sizeof(T), src, storage=Shared)
38+ # shared = alloc(dev, N*sizeof(T), src; storage=Shared)
3939 # unsafe_copyto!(dev, dst, pointer(shared), N; queue, async=false)
4040 # free(shared)
41- tmp_buf = alloc (dev, N* sizeof (T), src, storage= Shared) # CPU -> GPU (Shared)
42- unsafe_copyto! (dev, MtlPointer {T} (dst. buffer, dst. offset), MtlPointer {T} (tmp_buf, 0 ), N; queue, async= false ) # GPU (Shared) -> GPU (Private)
41+ tmp_buf = alloc (dev, N* sizeof (T), src; storage= Shared) # CPU -> GPU (Shared)
42+ unsafe_copyto! (dev, MtlPtr {T} (dst. buffer, dst. offset), MtlPtr {T} (tmp_buf, 0 ), N; queue, async= false ) # GPU (Shared) -> GPU (Private)
4343 free (tmp_buf)
4444 elseif storage_type == MTL. MTLStorageModeShared
4545 unsafe_copyto! (convert (Ptr{T}, dst), src, N)
@@ -51,13 +51,13 @@ function Base.unsafe_copyto!(dev::MTLDevice, dst::MtlPointer{T}, src::Ptr{T}, N:
5151end
5252
5353# GPU -> CPU
54- function Base. unsafe_copyto! (dev:: MTLDevice , dst:: Ptr{T} , src:: MtlPointer {T} , N:: Integer ;
54+ function Base. unsafe_copyto! (dev:: MTLDevice , dst:: Ptr{T} , src:: MtlPtr {T} , N:: Integer ;
5555 queue:: MTLCommandQueue = global_queue (dev), async:: Bool = false ) where T
5656 storage_type = src. buffer. storageMode
5757 if storage_type == MTL. MTLStorageModePrivate
5858 # stage through a shared buffer
59- shared = alloc (dev, N* sizeof (T), storage= Shared)
60- unsafe_copyto! (dev, MtlPointer {T} (shared, 0 ), MtlPointer {T} (src. buffer, src. offset), N; queue, async= false )
59+ shared = alloc (dev, N* sizeof (T); storage= Shared)
60+ unsafe_copyto! (dev, MtlPtr {T} (shared, 0 ), MtlPtr {T} (src. buffer, src. offset), N; queue, async= false )
6161 unsafe_copyto! (dst, convert (Ptr{T}, shared), N)
6262 free (shared)
6363 elseif storage_type == MTL. MTLStorageModeShared
@@ -69,8 +69,8 @@ function Base.unsafe_copyto!(dev::MTLDevice, dst::Ptr{T}, src::MtlPointer{T}, N:
6969end
7070
7171# GPU -> GPU
72- @autoreleasepool function Base. unsafe_copyto! (dev:: MTLDevice , dst:: MtlPointer {T} ,
73- src:: MtlPointer {T} , N:: Integer ;
72+ @autoreleasepool function Base. unsafe_copyto! (dev:: MTLDevice , dst:: MtlPtr {T} ,
73+ src:: MtlPtr {T} , N:: Integer ;
7474 queue:: MTLCommandQueue = global_queue (dev),
7575 async:: Bool = false ) where T
7676 cmdbuf = MTLCommandBuffer (queue)
8181 async || wait_completed (cmdbuf)
8282end
8383
84- @autoreleasepool function unsafe_fill! (dev:: MTLDevice , ptr:: MtlPointer {T} ,
84+ @autoreleasepool function unsafe_fill! (dev:: MTLDevice , ptr:: MtlPtr {T} ,
8585 value:: Union{UInt8,Int8} , N:: Integer ) where T
8686 cmdbuf = MTLCommandBuffer (global_queue (dev))
8787 MTLBlitCommandEncoder (cmdbuf) do enc
0 commit comments