/// <summary> /// Sets specified shader program and performs computations. /// </summary> /// <param name="shader">Name of shader program.</param> /// <param name="outputScale">Screen space scale factor.</param> /// <param name="output">Output render target.</param> /// <param name="input">Input render targets.</param> private void Dispatch(string shader, int outputScale, RenderTarget output, params RenderTarget[] input) { Viewport viewport = graphicsDevice.ImmediateContext.Rasterizer.GetViewports()[0]; graphicsDevice.ImmediateContext.ComputeShader.Set(effects[shader]); graphicsDevice.ImmediateContext.ComputeShader.SetConstantBuffer(constantBuffer, 0); for (int i = 0; i < input.Length; i++) { graphicsDevice.ImmediateContext.ComputeShader.SetShaderResource(input[i].GetShaderResourceView(), i); } graphicsDevice.ImmediateContext.ComputeShader.SetUnorderedAccessView(output.GetUnorderedAccessView(), 0); graphicsDevice.ImmediateContext.Dispatch((int)Math.Ceiling(viewport.Width / (32 * outputScale)), (int)Math.Ceiling(viewport.Height / (32 * outputScale)), 1); graphicsDevice.ImmediateContext.ComputeShader.SetUnorderedAccessView(null, 0); }
/// <summary> /// Sets specified shader program and performs computations. /// </summary> /// <param name="shader">Name of shader program.</param> /// <param name="outputScale">Screen space scale factor.</param> /// <param name="output">Output render target.</param> /// <param name="input">Input render targets.</param> private void Dispatch(string shader, int outputScale, RenderTarget output, params RenderTarget[] input) { Viewport viewport = graphicsDevice.ImmediateContext.Rasterizer.GetViewports()[0]; graphicsDevice.ImmediateContext.ComputeShader.Set(effects[shader]); graphicsDevice.ImmediateContext.ComputeShader.SetConstantBuffer(constantBuffer, 0); for (int i = 0; i < input.Length; i++) graphicsDevice.ImmediateContext.ComputeShader.SetShaderResource(input[i].GetShaderResourceView(), i); graphicsDevice.ImmediateContext.ComputeShader.SetUnorderedAccessView(output.GetUnorderedAccessView(), 0); graphicsDevice.ImmediateContext.Dispatch((int)Math.Ceiling(viewport.Width / (32 * outputScale)), (int)Math.Ceiling(viewport.Height / (32 * outputScale)), 1); graphicsDevice.ImmediateContext.ComputeShader.SetUnorderedAccessView(null, 0); }