/// <summary> /// No documentation for Direct3D12 /// </summary> /// <param name="startSlot">No documentation.</param> /// <param name="descRef">No documentation.</param> /// <param name="numBuffers">No documentation.</param> /// <include file='.\..\Documentation\CodeComments.xml' path="/comments/comment[@id='ID3D12GraphicsCommandList::SetVertexBuffers']/*"/> /// <unmanaged>void ID3D12GraphicsCommandList::SetVertexBuffers([In] unsigned int StartSlot,[In, Buffer, Optional] const D3D12_VERTEX_BUFFER_VIEW* pDesc,[In] unsigned int NumBuffers)</unmanaged> /// <unmanaged-short>ID3D12GraphicsCommandList::SetVertexBuffers</unmanaged-short> public void SetVertexBuffer(int startSlot, SharpDX.Direct3D12.VertexBufferView descRef) { unsafe { SetVertexBuffers(startSlot, 1, (IntPtr)(&descRef)); } }
// @TODO - I need to wrap command list separately!, it is just temporary method! SHOULD!! FIX!! public void setVertexBuffers(SharpDX.Direct3D12.GraphicsCommandList commandList) { SharpDX.Direct3D12.VertexBufferView positionVertexBufferView = ((Gen2Layer.H1VertexBufferView)m_PositionVertexBuffer.View).View; SharpDX.Direct3D12.VertexBufferView normalVertexBufferView = ((Gen2Layer.H1VertexBufferView)m_NormalVertexBuffer.View).View; SharpDX.Direct3D12.VertexBufferView texcoordVertexBufferView = ((Gen2Layer.H1VertexBufferView)m_TexcoordVertexBuffers[0].View).View; SharpDX.Direct3D12.VertexBufferView colorVertexBufferView = ((Gen2Layer.H1VertexBufferView)m_ColorVertexBuffer.View).View; commandList.SetVertexBuffer(0, positionVertexBufferView); commandList.SetVertexBuffer(1, normalVertexBufferView); commandList.SetVertexBuffer(2, texcoordVertexBufferView); commandList.SetVertexBuffer(3, colorVertexBufferView); }
// @TODO - I need to wrap command list separately!, it is just temporary method! SHOULD!! FIX!! public void setVertexBuffers(SharpDX.Direct3D12.GraphicsCommandList commandList) { SharpDX.Direct3D12.VertexBufferView PositionBufferView = ((Gen2Layer.H1VertexBufferView)m_ShaderData.PositionBuffer.View).View; SharpDX.Direct3D12.VertexBufferView TangentZBufferView = ((Gen2Layer.H1VertexBufferView)m_ShaderData.TangentZBuffer.View).View; SharpDX.Direct3D12.VertexBufferView TangentXBufferView = ((Gen2Layer.H1VertexBufferView)m_ShaderData.TangentXBuffer.View).View; SharpDX.Direct3D12.VertexBufferView BoneIndicesView = ((Gen2Layer.H1VertexBufferView)m_ShaderData.BoneIndices.View).View; SharpDX.Direct3D12.VertexBufferView BoneWeightsView = ((Gen2Layer.H1VertexBufferView)m_ShaderData.BoneWeights.View).View; SharpDX.Direct3D12.VertexBufferView Texcoord0BufferView = ((Gen2Layer.H1VertexBufferView)m_ShaderData.TexcoordBuffers[0].View).View; SharpDX.Direct3D12.VertexBufferView ColorBufferView = ((Gen2Layer.H1VertexBufferView)m_ShaderData.ColorBuffer.View).View; commandList.SetVertexBuffer(0, PositionBufferView); commandList.SetVertexBuffer(1, TangentZBufferView); commandList.SetVertexBuffer(2, TangentXBufferView); commandList.SetVertexBuffer(3, BoneIndicesView); commandList.SetVertexBuffer(4, BoneWeightsView); commandList.SetVertexBuffer(5, Texcoord0BufferView); commandList.SetVertexBuffer(6, ColorBufferView); }
public PipelineAssets(Pipeline pipeline) { var rootSignatureParameters = new SharpDX.Direct3D12.RootParameter[] { new SharpDX.Direct3D12.RootParameter( SharpDX.Direct3D12.ShaderVisibility.Vertex, new SharpDX.Direct3D12.DescriptorRange() { RangeType = SharpDX.Direct3D12.DescriptorRangeType.ConstantBufferView, BaseShaderRegister = 0, OffsetInDescriptorsFromTableStart = int.MinValue, DescriptorCount = 1 } ) }; var rootSignatureDescription = new SharpDX.Direct3D12.RootSignatureDescription(SharpDX.Direct3D12.RootSignatureFlags.AllowInputAssemblerInputLayout, rootSignatureParameters); var rootSignature = pipeline.D3D12Device.CreateRootSignature(rootSignatureDescription.Serialize()); var vertexShader = new SharpDX.Direct3D12.ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("src/Shaders/FlatColor.hlsl", "VSMain", "vs_5_0")); var pixelShader = new SharpDX.Direct3D12.ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("src/Shaders/FlatColor.hlsl", "PSMain", "ps_5_0")); var inputElementDescs = new[] { new SharpDX.Direct3D12.InputElement("POSITION", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0, 0), new SharpDX.Direct3D12.InputElement("COLOR", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 12, 0) }; var pipelineStateObjectDescription = new SharpDX.Direct3D12.GraphicsPipelineStateDescription() { InputLayout = new SharpDX.Direct3D12.InputLayoutDescription(inputElementDescs), RootSignature = rootSignature, VertexShader = vertexShader, PixelShader = pixelShader, RasterizerState = SharpDX.Direct3D12.RasterizerStateDescription.Default(), BlendState = SharpDX.Direct3D12.BlendStateDescription.Default(), DepthStencilFormat = SharpDX.DXGI.Format.D32_Float, DepthStencilState = new SharpDX.Direct3D12.DepthStencilStateDescription() { IsDepthEnabled = false, IsStencilEnabled = false }, SampleMask = int.MaxValue, PrimitiveTopologyType = SharpDX.Direct3D12.PrimitiveTopologyType.Triangle, RenderTargetCount = 1, Flags = SharpDX.Direct3D12.PipelineStateFlags.None, SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0), StreamOutput = new SharpDX.Direct3D12.StreamOutputDescription() }; pipelineStateObjectDescription.RenderTargetFormats[0] = SharpDX.DXGI.Format.R8G8B8A8_UNorm; var pipelineState = pipeline.D3D12Device.CreateGraphicsPipelineState(pipelineStateObjectDescription); var cbvHeapDescription = new SharpDX.Direct3D12.DescriptorHeapDescription() { DescriptorCount = 1, Flags = SharpDX.Direct3D12.DescriptorHeapFlags.ShaderVisible, Type = SharpDX.Direct3D12.DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView }; var constantBufferViewHeap = pipeline.D3D12Device.CreateDescriptorHeap(cbvHeapDescription); var constantBuffer = pipeline.D3D12Device.CreateCommittedResource(new SharpDX.Direct3D12.HeapProperties(SharpDX.Direct3D12.HeapType.Upload), SharpDX.Direct3D12.HeapFlags.None, SharpDX.Direct3D12.ResourceDescription.Buffer(1024 * 64), SharpDX.Direct3D12.ResourceStates.GenericRead); var cbvDescription = new SharpDX.Direct3D12.ConstantBufferViewDescription() { BufferLocation = constantBuffer.GPUVirtualAddress, SizeInBytes = (SharpDX.Utilities.SizeOf <ConstantBuffer>() + 255) & ~255 }; pipeline.D3D12Device.CreateConstantBufferView(cbvDescription, constantBufferViewHeap.CPUDescriptorHandleForHeapStart); var constantBufferPointer = constantBuffer.Map(0); var triangleVertices = new[] { new Vertex() { Position = new SharpDX.Vector3(0.0f, 0.25f, 0.0f), Color = new SharpDX.Vector4(1.0f, 0.0f, 0.0f, 1.0f) }, new Vertex() { Position = new SharpDX.Vector3(0.25f, -0.25f, 0.0f), Color = new SharpDX.Vector4(0.0f, 1.0f, 0.0f, 1.0f) }, new Vertex() { Position = new SharpDX.Vector3(-0.25f, -0.25f, 0.0f), Color = new SharpDX.Vector4(0.0f, 0.0f, 1.0f, 1.0f) } }; var vertexBufferSize = SharpDX.Utilities.SizeOf(triangleVertices); var vertexBuffer = pipeline.D3D12Device.CreateCommittedResource(new SharpDX.Direct3D12.HeapProperties(SharpDX.Direct3D12.HeapType.Upload), SharpDX.Direct3D12.HeapFlags.None, SharpDX.Direct3D12.ResourceDescription.Buffer(vertexBufferSize), SharpDX.Direct3D12.ResourceStates.GenericRead); var pVertexDataBegin = vertexBuffer.Map(0); SharpDX.Utilities.Write(pVertexDataBegin, triangleVertices, 0, triangleVertices.Length); vertexBuffer.Unmap(0); var vertexBufferView = new SharpDX.Direct3D12.VertexBufferView(); vertexBufferView.BufferLocation = vertexBuffer.GPUVirtualAddress; vertexBufferView.StrideInBytes = SharpDX.Utilities.SizeOf <Vertex>(); vertexBufferView.SizeInBytes = vertexBufferSize; PipelineState = pipelineState; RootSignature = rootSignature; VertexBufferView = vertexBufferView; ConstantBufferViewHeap = constantBufferViewHeap; ConstantBufferPointer = constantBufferPointer; }