protected override ITextureFilter CreateFilter(ITextureFilter sourceFilter)
            {
                if (sourceFilter.Output.Size == Renderer.TargetSize)
                {
                    return(sourceFilter);
                }

                try
                {
                    m_DxvaHd = Renderer.CreateDxvaHd((Size)sourceFilter.Output.Size, 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.Output.Format != TextureFormat.Unorm8)
                {
                    // Convert input to Unorm8 (and unforunately murdering quality at the same time)
                    var copy = CompileShader("Copy.hlsl").Configure(linearSampling: false, format: TextureFormat.Unorm8);
                    input = new ShaderFilter(copy, input);
                }

                var result = new DxvaHdResizeFilter(m_DxvaHd, input);

                return(YuvMode ? result.ConvertToRgb() : result);
            }
Ejemplo n.º 2
0
                public DxvaHdResizeFilter(IDxvaHd dxvaHd, ITextureFilter inputFilter)
                    : base(from input in inputFilter
                           let output = new TextureOutput(Renderer.TargetSize, TextureFormat.Unorm8)
                                        select output.Do(dxvaHd.Render, input))
                {
                    if (inputFilter.Format() != TextureFormat.Unorm8)
                    {
                        throw new RenderScriptException("Input format must be Unorm8.");
                    }

                    m_DxvaHd = dxvaHd;
                }
Ejemplo n.º 3
0
 public DxvaHdResizeFilter(IDxvaHd dxvaHd, IFilter inputFilter)
     : base(inputFilter)
 {
     m_DxvaHd = dxvaHd;
 }
 public DxvaHdResizeFilter(IDxvaHd dxvaHd, ITextureFilter inputFilter)
     : base(inputFilter)
 {
     m_DxvaHd = dxvaHd;
     SetSize(Renderer.TargetSize);
 }