protected override void CreateRenderTargetViewImpl(DescriptorHeap target, uint descriptorHeapSlot, Resource resource, ref RenderTargetViewDescription description) { var renderTargetViewDescription = new SharpDX.Direct3D12.RenderTargetViewDescription { Format = Memory.Enums.ToDXGIFormat[(int) description.Format], Dimension = Memory.Enums.ToRTVDimension[(int)description.Dimension] }; switch (description.Dimension) { case Dimension.Buffer: renderTargetViewDescription.Buffer.ElementCount = (int) description.Buffer.ElementCount; renderTargetViewDescription.Buffer.FirstElement = (int) description.Buffer.FirstElement; break; case Dimension.Texture1D: renderTargetViewDescription.Texture1D.MipSlice = (int) description.Texture.MipSlice; break; case Dimension.Texture1DArray: renderTargetViewDescription.Texture1DArray.MipSlice = (int)description.Texture.MipSlice; renderTargetViewDescription.Texture1DArray.FirstArraySlice = (int) description.Texture.FirstSlice; renderTargetViewDescription.Texture1DArray.ArraySize = (int) description.Texture.SliceCount; break; case Dimension.Texture2D: renderTargetViewDescription.Texture2D.MipSlice = (int)description.Texture.MipSlice; renderTargetViewDescription.Texture2D.PlaneSlice = 0; // Not yet supported. break; case Dimension.Texture2DArray: renderTargetViewDescription.Texture2DArray.MipSlice = (int)description.Texture.MipSlice; renderTargetViewDescription.Texture2DArray.FirstArraySlice = (int)description.Texture.FirstSlice; renderTargetViewDescription.Texture2DArray.ArraySize = (int)description.Texture.SliceCount; renderTargetViewDescription.Texture2DArray.PlaneSlice = 0; // Not yet supported. break; case Dimension.Texture2DMs: // nothing break; case Dimension.Texture2DMsArray: renderTargetViewDescription.Texture2DMSArray.FirstArraySlice = (int)description.Texture.FirstSlice; renderTargetViewDescription.Texture2DMSArray.ArraySize = (int)description.Texture.SliceCount; break; case Dimension.Texture3D: renderTargetViewDescription.Texture3D.MipSlice = (int)description.Texture.MipSlice; renderTargetViewDescription.Texture3D.FirstDepthSlice = (int)description.Texture.FirstSlice; renderTargetViewDescription.Texture3D.DepthSliceCount = (int)description.Texture.SliceCount; break; default: throw new NotImplementedException("Given render target memory dimension not yet supported!"); } DeviceD3D12.CreateRenderTargetView(((Memory.Resource)resource).ResourceD3D12, renderTargetViewDescription, ((Binding.DescriptorHeap)target).GetCPUHandle(descriptorHeapSlot)); }
protected override void CreateRenderTargetViewImpl(DescriptorHeap target, uint descriptorHeapSlot, Resource resource, ref RenderTargetViewDescription description) { var renderTargetViewDescription = new SharpDX.Direct3D12.RenderTargetViewDescription { Format = Memory.Enums.ToDXGIFormat[(int)description.Format], Dimension = Memory.Enums.ToRTVDimension[(int)description.Dimension] }; switch (description.Dimension) { case Dimension.Buffer: renderTargetViewDescription.Buffer.ElementCount = (int)description.Buffer.ElementCount; renderTargetViewDescription.Buffer.FirstElement = (int)description.Buffer.FirstElement; break; case Dimension.Texture1D: renderTargetViewDescription.Texture1D.MipSlice = (int)description.Texture.MipSlice; break; case Dimension.Texture1DArray: renderTargetViewDescription.Texture1DArray.MipSlice = (int)description.Texture.MipSlice; renderTargetViewDescription.Texture1DArray.FirstArraySlice = (int)description.Texture.FirstSlice; renderTargetViewDescription.Texture1DArray.ArraySize = (int)description.Texture.SliceCount; break; case Dimension.Texture2D: renderTargetViewDescription.Texture2D.MipSlice = (int)description.Texture.MipSlice; renderTargetViewDescription.Texture2D.PlaneSlice = 0; // Not yet supported. break; case Dimension.Texture2DArray: renderTargetViewDescription.Texture2DArray.MipSlice = (int)description.Texture.MipSlice; renderTargetViewDescription.Texture2DArray.FirstArraySlice = (int)description.Texture.FirstSlice; renderTargetViewDescription.Texture2DArray.ArraySize = (int)description.Texture.SliceCount; renderTargetViewDescription.Texture2DArray.PlaneSlice = 0; // Not yet supported. break; case Dimension.Texture2DMs: // nothing break; case Dimension.Texture2DMsArray: renderTargetViewDescription.Texture2DMSArray.FirstArraySlice = (int)description.Texture.FirstSlice; renderTargetViewDescription.Texture2DMSArray.ArraySize = (int)description.Texture.SliceCount; break; case Dimension.Texture3D: renderTargetViewDescription.Texture3D.MipSlice = (int)description.Texture.MipSlice; renderTargetViewDescription.Texture3D.FirstDepthSlice = (int)description.Texture.FirstSlice; renderTargetViewDescription.Texture3D.DepthSliceCount = (int)description.Texture.SliceCount; break; default: throw new NotImplementedException("Given render target memory dimension not yet supported!"); } DeviceD3D12.CreateRenderTargetView(((Memory.Resource)resource).ResourceD3D12, renderTargetViewDescription, ((Binding.DescriptorHeap)target).GetCPUHandle(descriptorHeapSlot)); }
public override Resource Create(ref Resource.Descriptor desc, string label = "<unnamed resource>") { return new Memory.Resource(ref desc, this, label); }