Exemplo n.º 1
0
        private T Reduce <T>(UploadBuffer data, ReduceShader shader) where T : struct
        {
            Console.WriteLine("num groups: " + Utility.DivideRoundUp(data.ByteSize / 4, ReduceShader.ElementsPerGroup));

            using (var buf = new GpuBuffer(4, data.ByteSize / 4))
            {
                buf.CopyFrom(data);

                using (var timer = new GpuTimer())
                {
                    timer.Start();
                    //for(int i = 0; i < 100; ++i)
                    shader.Run(buf, data.ByteSize / 4);
                    timer.Stop();
                    Console.WriteLine(timer.GetDelta());
                }

                using (var res = new DownloadBuffer(4))
                {
                    res.CopyFrom(buf, Marshal.SizeOf <T>());

                    var resData = res.GetData <T>();

                    return(resData);
                }
            }
        }