@@ -88,9 +88,7 @@ let applyFilterGPUKernel (clContext: ClContext) localWorkSize =
8888
8989 let kernel = clContext.Compile kernel
9090
91- fun ( commandQueue : MailboxProcessor < _ >) ( filter : ClArray < float32 >) filterD ( img : ClArray < byte >) imgH imgW ->
92-
93- let result = clContext.CreateClArray( img.Length, allocationMode = AllocationMode.Default)
91+ fun ( commandQueue : MailboxProcessor < _ >) ( filter : ClArray < float32 >) filterD ( img : ClArray < byte >) imgH imgW ( result :ClArray < _ >) ->
9492
9593 let ndRange = Range1D.CreateValid( imgH * imgW, localWorkSize)
9694
@@ -114,24 +112,23 @@ let applyFiltersGPU (clContext: ClContext) localWorkSize =
114112 |]
115113 let clImage = clContext.CreateClArray<_> img
116114
117- let mutable res = None
115+ //let mutable res = None
116+ let mutable input = clImage// clContext.CreateClArray(img.Length, allocationMode = AllocationMode.Default)
117+ let mutable output = clContext.CreateClArray( img.Length, allocationMode = AllocationMode.Default)
118118
119119 for filter in filters do
120120 let filter = Array.concat filter
121121 let filterD = ( Array.length filter) / 2
122122 let clFilter = clContext.CreateClArray<_> filter
123- match res with
124- | None ->
125- res <- Some ( kernel queue clFilter filterD clImage imgH imgW)
126- | Some img ->
127- res <- Some ( kernel queue clFilter filterD img imgH imgW)
128- queue.Post( Msg.CreateFreeMsg img)
123+ let oldInput = input
124+ input <- kernel queue clFilter filterD input imgH imgW output
125+ output <- oldInput
129126 queue.Post( Msg.CreateFreeMsg clFilter)
130127
131128 let result ' = Array.zeroCreate ( imgH * imgW)
132- let result ' = queue.PostAndReply( fun ch -> Msg.CreateToHostMsg( res.Value , result', ch))
129+ let result ' = queue.PostAndReply( fun ch -> Msg.CreateToHostMsg( input , result', ch))
133130 let result = Array2D.zeroCreate imgH imgW
134131 Array.Parallel.iteri ( fun x v -> result.[ x / imgW, x % imgW] <- v) result'
135- queue.Post( Msg.CreateFreeMsg clImage )
136- queue.Post( Msg.CreateFreeMsg res.Value )
132+ queue.Post( Msg.CreateFreeMsg input )
133+ queue.Post( Msg.CreateFreeMsg output )
137134 result
0 commit comments