Example #1
0
        protected sealed override void RenderOutput(ITargetTexture output)
        {
            Render(output);

            DisposeHelper.DisposeElements(m_Buffers);
            m_Buffers.Clear();
        }
Example #2
0
        protected sealed override void RenderOutput(ITargetTexture output)
        {
            if (GlobalWorkSizes == null)
            {
                throw new ArgumentNullException("OpenCL global workgroup sizes not set.");
            }

            Renderer.RunClKernel(Shader, GlobalWorkSizes, LocalWorkSizes);
        }
Example #3
0
                protected override void Render(ITexture2D texture, ITargetTexture target)
                {
                    // Render all frames but only present half of them
                    // In real life scenario, you'd probably want to use Renderer.RenderQueue[i].Frame
                    // to do something useful with the current frame.
                    // (Note: Renderer.RenderQueue.First().Frame is the frame before the current, while
                    //        Renderer.RenderQueue.Last().Frame is earliest frame in the queue.
                    //        Renderer.RenderQueue will have no elements to start off with!)
                    Renderer.Render(target, texture, false);

                    // Note: To get actual odd/even frame number, you should calculate from
                    //       Renderer.FrameRateHz and Renderer.FrameTimeStampMicrosec instead of relying on m_Counter
                    // Note: Setting PresentFrame to false will cause MPDN to disable FluidMotion
                    Renderer.PresentFrame = ((m_Counter % 2) == 0) || Renderer.RenderQueue.Count <= 1;
                    m_Counter++;
                }
Example #4
0
        protected void LoadTextureConstants(IList <IBaseTexture> inputs, ITargetTexture output)
        {
            var index = 0;

            foreach (var input in inputs)
            {
                var linearSampling = PerTextureLinearSampling
                                     .Cast <bool?>()
                                     .ElementAtOrDefault(index)
                                     ?? LinearSampling;
                SetTextureConstant(index, input, linearSampling);
                LoadSizeConstant(index.ToString(), input.GetSize());
                index++;
            }

            /* Add Output Size */
            LoadSizeConstant("Output", output.GetSize());
        }
            protected override void LoadArguments(IList <IBaseTexture> inputs, ITargetTexture output)
            {
                var inputTexture = (ITexture2D)inputs[0];

                GlobalWorkSizes = GlobalWorkSizesHelper.Get(inputTexture.Width, inputTexture.Height, LocalWorkSizes);

                // Use the 'temp' texture from first pass as input
                Shader.SetTempTextureArg(0, inputTexture); // srcImg
                Shader.SetOutputTextureArg(1, output);     // dstImg
                if (m_ReloadWeights)
                {
                    Shader.SetBufferArg(2, m_Buffer);                                       // weights
                    Shader.SetArg(3, m_NeuronCount);                                        // nnst
                }
                Shader.SetArg(4, m_Horizontal ? inputTexture.Height : inputTexture.Width);  // SrcWidth
                Shader.SetArg(5, m_Horizontal ? inputTexture.Width  : inputTexture.Height); // SrcHeight
                Shader.SetArg(6, m_Horizontal ? 1 : 0);                                     // SwapXy
            }
Example #6
0
        public override void LoadArguments(IList <IBaseTexture> inputs, ITargetTexture output)
        {
            IList <ITexture2D> inputs2D;

            try
            {
                inputs2D = inputs.Cast <ITexture2D>().ToList();
            }
            catch (InvalidCastException e)
            {
                throw new ArgumentException("OpenCL only supports 2D textures.", e);
            }

            var index = 0;

            foreach (var input in inputs2D)
            {
                Shader.SetInputTextureArg(index++, input);
            }

            Shader.SetOutputTextureArg(index++, output);
            LoadAdditionalInputs(index);
        }
Example #7
0
            public override IFilter CreateFilter(IFilter sourceFilter)
            {
                Cleanup();

                if (sourceFilter.OutputSize == Renderer.TargetSize)
                {
                    return(sourceFilter);
                }

                try
                {
                    m_DxvaHd = Renderer.CreateDxvaHd((Size)sourceFilter.OutputSize, TextureFormat.Unorm8,
                                                     Renderer.TargetSize, TextureFormat.Unorm8, Quality);
                }
                catch (DxvaHdException)
                {
                    // DXVA HD not available; fallback
                    Renderer.FallbackOccurred = true;
                    return(sourceFilter);
                }

                var input = YuvMode ? sourceFilter.ConvertToYuv() : sourceFilter;

                if (sourceFilter.OutputFormat != TextureFormat.Unorm8)
                {
                    // Convert input to Unorm8 (and unforunately murdering quality at the same time)
                    var copy = CompileShader("Copy.hlsl").Configure(linearSampling: false);
                    m_TextureUnorm8 = Renderer.CreateRenderTarget((Size)input.OutputSize, TextureFormat.Unorm8);
                    input           = new CopyShaderFilter(m_TextureUnorm8, copy, input);
                }

                var result = new DxvaHdResizeFilter(m_DxvaHd, input);

                result.SetSize(Renderer.TargetSize);

                return(YuvMode ? result.ConvertToRgb() : result);
            }
Example #8
0
 public override void LoadArguments(IList <IBaseTexture> inputs, ITargetTexture output)
 {
     LoadTextureConstants(inputs, output);
     LoadShaderConstants();
     LoadCustomConstants();
 }
Example #9
0
 public void Render(IEnumerable <IBaseTexture> inputs, ITargetTexture output)
 {
     LoadArguments(inputs.ToList(), output);
     RenderOutput(output);
 }
                    protected override void LoadArguments(IList <IBaseTexture> inputs, ITargetTexture output)
                    {
                        base.LoadArguments(inputs, output);

                        // Load Legacy Constants
                        Shader.SetConstant(0, new Vector4(output.Width, output.Height, m_Counter++ & 0x7fffff, Renderer.FrameTimeStampMicrosec / 1000000.0f), false);
                        Shader.SetConstant(1, new Vector4(1.0f / output.Width, 1.0f / output.Height, 0, 0), false);
                    }
Example #11
0
 public static void PutTexture(ITargetTexture texture)
 {
     s_SavedTextures.Add(texture);
 }
 private static void Scale(ITargetTexture output, ITexture2D input)
 {
     Renderer.Scale(output, input, Renderer.LumaUpscaler, Renderer.LumaDownscaler);
 }
Example #13
0
 public static void PutTexture(ITargetTexture texture)
 {
     s_SavedTextures.Add(texture);
 }
 protected override void Render(ITexture2D input, ITargetTexture output)
 {
     Renderer.ConvertToYuv(output, input, Colorimetric, OutputLimitedRange);
 }
 protected override void Render(ITexture2D input, ITargetTexture target)
 {
     Renderer.Scale(target, input, m_Channels, m_Offset, m_Upscaler, m_Downscaler, m_Convolver);
 }
Example #16
0
 protected virtual void SetOutputTexture(ITargetTexture targetTexture)
 {
     Target = targetTexture;
 }
Example #17
0
 protected override void SetOutputTexture(ITargetTexture targetTexture)
 {
     Target = targetTexture;
 }
Example #18
0
 protected sealed override void Render(ITargetTexture output)
 {
     Renderer.Render(output, Shader);
 }
Example #19
0
 public abstract void LoadArguments(IList <IBaseTexture> inputs, ITargetTexture output);
Example #20
0
 protected sealed override void Render(ITargetTexture output)
 {
     Renderer.Compute(output, Shader, ThreadGroupX, ThreadGroupY, ThreadGroupZ);
 }
Example #21
0
 public CopyShaderFilter(ITargetTexture outputTarget, ShaderFilterSettings <IShader> settings,
                         params IFilter <IBaseTexture>[] inputFilters)
     : base(settings, inputFilters)
 {
     m_OutputTarget = outputTarget;
 }
Example #22
0
 protected abstract void RenderOutput(ITargetTexture output);
 private static void Scale(ITargetTexture output, ITexture2D input)
 {
     Renderer.Scale(output, input, Renderer.LumaUpscaler, Renderer.LumaDownscaler);
 }
Example #24
0
 protected abstract void Render(TTexture input, ITargetTexture output);