Пример #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);
                }
            }
        }
Пример #2
0
 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);
 }
Пример #3
0
 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);
 }
Пример #4
0
 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);
 }