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); }
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; }
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); }