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); } } }
public SharedModel() { Upload = new UploadBuffer(256); // big enough for 4 matrix4 Download = new DownloadBuffer(256); ScaleShader = new MitchellNetravaliScaleShader(QuadShader, Upload); Convert = new ConvertFormatShader(QuadShader, Upload); }
public PixelValueShader(SharedModel shared) { shader2D = new DirectX.Shader(DirectX.Shader.Type.Compute, GetSource(ShaderBuilder.Builder2D), "PixelValueShader"); shader3D = new DirectX.Shader(DirectX.Shader.Type.Compute, GetSource(ShaderBuilder.Builder3D), "PixelValueShader"); readBuffer = shared.Download; cbuffer = shared.Upload; dstBuffer = new GpuBuffer(4 * 4, 1); }
public SharedModel() { Upload = new UploadBuffer(256); // big enough for 4 matrix4 Download = new DownloadBuffer(256); ScaleShader = new MitchellNetravaliScaleShader(QuadShader, Upload); Convert = new ConvertFormatShader(QuadShader, Upload); Sync = new SyncQuery(); LinearSampler = CreateSamplerState(true); PointSampler = CreateSamplerState(false); }