/// <summary> /// for unit testing purposes. Converts naked srv to TextureArray2D /// </summary> internal Texture3D ConvertFromRaw3D(SharpDX.Direct3D11.ShaderResourceView srv, Size3 size, SharpDX.DXGI.Format dstFormat) { var res = new Texture3D(1, size, dstFormat, false); var dev = DirectX.Device.Get(); quad.Bind(true); dev.Pixel.Set(convert3D.Pixel); dev.Pixel.SetShaderResource(0, srv); cbuffer.SetData(new LayerLevelOffsetData { Layer = 0, Level = 0, Xoffset = 0, Yoffset = 0, Multiplier = 1.0f }); dev.Pixel.SetConstantBuffer(0, cbuffer.Handle); dev.OutputMerger.SetRenderTargets(res.GetRtView(0, 0)); dev.SetViewScissors(size.Width, size.Height); dev.DrawFullscreenTriangle(size.Depth); // remove bindings dev.Pixel.SetShaderResource(0, null); dev.OutputMerger.SetRenderTargets((RenderTargetView)null); quad.Unbind(); return(res); }
/// <summary> /// for unit testing purposes. Converts naked srv to TextureArray2D /// </summary> internal Texture3D ConvertFromRaw3D(SharpDX.Direct3D11.ShaderResourceView srv, Size3 size, SharpDX.DXGI.Format dstFormat, bool isInteger) { var res = new Texture3D(1, size, dstFormat, false); var dev = DirectX.Device.Get(); quad.Bind(true); if (isInteger) { if (convert3DInt == null) { convert3DInt = new DirectX.Shader(DirectX.Shader.Type.Pixel, GetSource(new ShaderBuilder3D("int4")), "ConvertInt"); } dev.Pixel.Set(convert3DInt.Pixel); } else { dev.Pixel.Set(convert3D.Pixel); } dev.Pixel.SetShaderResource(0, srv); cbuffer.SetData(new LayerLevelOffsetData { Layer = 0, Level = 0, Xoffset = 0, Yoffset = 0, Multiplier = 1.0f, UseOverlay = 0, Scale = 1 }); dev.Pixel.SetConstantBuffer(0, cbuffer.Handle); dev.OutputMerger.SetRenderTargets(res.GetRtView(LayerMipmapSlice.Mip0)); dev.SetViewScissors(size.Width, size.Height); dev.DrawFullscreenTriangle(size.Depth); // remove bindings dev.Pixel.SetShaderResource(0, null); dev.OutputMerger.SetRenderTargets((RenderTargetView)null); quad.Unbind(); return(res); }
public Texture3D ConvertTo3D(TextureArray2D src) { var dst = new Texture3D(1, new Size3(src.Size.X, src.Size.Y, src.NumLayers), Format.R32G32B32A32_Float, false); var dev = Device.Get(); quad.Bind(true); dev.Pixel.Set(shader3D.Pixel); dev.Pixel.SetShaderResource(0, src.View); dev.OutputMerger.SetRenderTargets(dst.GetRtView(LayerMipmapSlice.Mip0)); dev.SetViewScissors(dst.Size.Width, dst.Size.Height); dev.DrawFullscreenTriangle(dst.Size.Z); dev.Pixel.SetShaderResource(0, null); dev.OutputMerger.SetRenderTargets((RenderTargetView)null); quad.Unbind(); return(dst); }