public void WritePartTest() { using (var mem = new StructSimpleMemory <MySimpleStruct>(Context, 100)) { MySimpleStruct[] dat = Enumerable.Range(0, 100) .Select(n => new MySimpleStruct() { X = n, Y = n + 10, Point = n * 2.2f }) .ToArray(); MySimpleStruct[] ans = new MySimpleStruct[100]; mem.Write(CommandQueue, true, 0, ans.Length, ans).Wait(); mem.Write(CommandQueue, true, 0, 25, dat).Wait(); mem.Read(CommandQueue, true, 0, 25, ans).Wait(); Assert.AreEqual(dat.Take(25), ans.Take(25)); mem.Write(CommandQueue, true, 25, 25, dat, 25).Wait(); mem.Write(CommandQueue, true, 50, 25, dat, 50).Wait(); mem.Write(CommandQueue, true, 75, 25, dat, 75).Wait(); mem.Read(CommandQueue, true, ans).Wait(); Assert.AreEqual(dat, ans); } }
public void ShaderTest() { const int WorkSize = 100; const int Adding = 53; using (var program = Context.CreateProgram(Source)) using (var kernel = program.CreateKernel("testKernel")) { var input = Enumerable.Range(0, 100) .Select(n => new MySimpleStruct() { X = n, Y = n + 10, Point = n * 2.2f }) .ToArray(); var output = new MySimpleStruct[WorkSize]; var expected = input .Select(v => new MySimpleStruct() { X = v.X + Adding, Y = v.Y + Adding, Point = v.Point + Adding, }) .ToArray(); kernel.SetWorkSize(WorkSize); using (var mem = new StructSimpleMemory <MySimpleStruct>(Context, 100)) { mem.Write(CommandQueue, true, 0, 50, input); mem.Write(CommandQueue, true, 50, WorkSize - 50, input, 50); kernel.SetArgs(mem, (int)Adding); kernel.NDRange(CommandQueue).Wait(); mem.Read(CommandQueue, true, output); Assert.AreEqual(expected, output); } } }