public override void Trace(RayBuffer rayBuffer) { var device = this; var raysArg = rayBuffer.RaysInfo; GCHandle raysHandle = GCHandle.Alloc(raysArg, GCHandleType.Pinned); clContext.kernel.SetValueArgument(7, rayBuffer.GetRayCount()); device.clContext.commands.Write(device.rays, true, 0, rayBuffer.Size, raysHandle.AddrOfPinnedObject(), null); device.clContext.commands.Execute(device.clContext.kernel, null, new long[] { rayBuffer.RaysInfo.Length }, new long[] { 32 }, null); //device.clContext.commands.Finish(); GCHandle arrCHandle = GCHandle.Alloc(rayBuffer.rayHits, GCHandleType.Pinned); device.clContext.commands.Read(device.rayHits, true, 0, rayBuffer.Size, arrCHandle.AddrOfPinnedObject(), null); //var cc = rayBuffer.rayHits.Where(item => item.Index >0 && item.Index < 12); //foreach (var rayHit in cc) //{ // Tracer.TraceLine("FirstTriangle hit {0}", rayHit.Index); //} //device.clContext.commands.Finish(); rayBuffer.traced = true; arrCHandle.Free(); raysHandle.Free(); }
public override void Trace(RayBuffer rayBuffer) { #if DEBUG try { #endif var device = this; var raysArg = rayBuffer.RaysInfo; GCHandle raysHandle = GCHandle.Alloc(raysArg, GCHandleType.Pinned); clContext.kernel.SetValueArgument(7, rayBuffer.GetRayCount()); device.clContext.commands.Write(device.rays, true, 0, rayBuffer.Size, raysHandle.AddrOfPinnedObject(), null); device.clContext.commands.Execute(device.clContext.kernel, null, new long[] {rayBuffer.RaysInfo.Length}, new long[] {32}, null); //device.clContext.commands.Finish(); GCHandle arrCHandle = GCHandle.Alloc(rayBuffer.rayHits, GCHandleType.Pinned); device.clContext.commands.Read(device.rayHits, false, 0, rayBuffer.Size, arrCHandle.AddrOfPinnedObject(), null); //device.clContext.commands.Finish(); rayBuffer.traced = true; arrCHandle.Free(); raysHandle.Free(); #if DEBUG } catch (Exception ex) { Tracer.TraceLine("Exception in Trace Method {0}", ex.Message); Tracer.TraceLine("{0}", ex.StackTrace); } #endif }
public override void Trace(RayBuffer rayBuffer) { var device = this; var raysArg = rayBuffer.RaysInfo; TLHit[] hits = new TLHit[rayBuffer.Size]; GCHandle raysHandle = GCHandle.Alloc(raysArg, GCHandleType.Pinned); GCHandle trrCHandle = GCHandle.Alloc(hits, GCHandleType.Pinned); TopLevelKernel.SetValueArgument(4, rayBuffer.GetRayCount()); device.clContext.commands.Write(device.rays, true, 0, rayBuffer.Size, raysHandle.AddrOfPinnedObject(), null); device.clContext.commands.Execute(TopLevelKernel, null, new long[] { rayBuffer.RaysInfo.Length }, new long[] { 32 }, null); device.clContext.commands.Finish(); device.clContext.commands.Read(tlhits, true, 0, rayBuffer.Size, trrCHandle.AddrOfPinnedObject(), null); //device.clContext.commands.Finish(); //Comparer<RayHit> comparer = Comparer<RayHit>.Create((t1,t2) => { return t1.Index.CompareTo(t2.Index); }); //Array.Sort(rayBuffer.rayHits, comparer); //Array.Sort(rayBuffer.RaysInfo, (data, rayData) => { data.}); //device.clContext.commands.Write(device.rayHits, true, 0, rayBuffer.Size, arrCHandle.AddrOfPinnedObject(), null); BottomLevelKernel.SetValueArgument(8, rayBuffer.GetRayCount()); BottomLevelKernel.SetMemoryArgument(9, tlhits); GCHandle arrCHandle = GCHandle.Alloc(rayBuffer.rayHits, GCHandleType.Pinned); device.clContext.commands.Execute(BottomLevelKernel, null, new long[] { rayBuffer.RaysInfo.Length }, new long[] { 32 }, null); device.clContext.commands.Read(device.rayHits, true, 0, rayBuffer.Size, arrCHandle.AddrOfPinnedObject(), null); device.clContext.commands.Finish(); rayBuffer.traced = true; arrCHandle.Free(); raysHandle.Free(); }
public override void Trace(RayBuffer rayBuffer) { var device = this; var raysArg = rayBuffer.RaysInfo; GCHandle raysHandle = GCHandle.Alloc(raysArg, GCHandleType.Pinned); clContext.kernel.SetValueArgument(7, rayBuffer.GetRayCount()); device.clContext.commands.Write(device.rays, true, 0, rayBuffer.Size, raysHandle.AddrOfPinnedObject(), null); device.clContext.commands.Execute(device.clContext.kernel, null, new long[] { rayBuffer.RaysInfo.Length }, new long[] { 32 }, null); //device.clContext.commands.Finish(); GCHandle arrCHandle = GCHandle.Alloc(rayBuffer.rayHits, GCHandleType.Pinned); device.clContext.commands.Read(device.rayHits, true, 0, rayBuffer.Size, arrCHandle.AddrOfPinnedObject(), null); //device.clContext.commands.Finish(); rayBuffer.traced = true; arrCHandle.Free(); raysHandle.Free(); }