private AttributeInfo GenerateInputElementsImpl( SourceRange range, string name, MidBuiltinType type, int vertexStream, IndexSourceInfo index, UInt32 baseOffset, int inputSlotIndex) { var format = MapBuiltinTypeFormat(type); return(new InputElementInfo(range) { Name = name, Format = format, ByteOffset = baseOffset, Index = index, InputSlotIndex = inputSlotIndex, }); }
private AttributeInfo GenerateInputElementsImpl( SourceRange range, string name, MidStructRef type, int vertexStream, IndexSourceInfo index, UInt32 baseOffset, int inputSlotIndex) { var fields = new List <FieldInfo>(); UInt32 totalOffset = baseOffset; foreach (var f in type.Fields) { // \todo: Align fields.Add(new FieldInfo { Field = f, Info = GenerateInputElements( range, string.Format("{0}_{1}", name, f.Name.ToString()), f.Type, vertexStream, index, totalOffset) }); totalOffset += GetSizeOf(f.Type); } return(new StructInfo(range) { Fields = fields.ToArray() }); }
public override void EmitImplSetup() { var uniformElement = GetElement("Uniform"); var iaElement = GetElement("AssembledVertex"); _vertexIDAttr = GetAttribute(iaElement, "IA_VertexID").Attribute; _instanceIDAttr = GetAttribute(iaElement, "IA_InstanceID").Attribute; _info[_vertexIDAttr] = new IndexSourceInfo(_vertexIDAttr.Range) { InputSlotClass = InitBlock.Enum32("D3D11_INPUT_CLASSIFICATION", "D3D11_INPUT_PER_VERTEX_DATA", D3D11_INPUT_CLASSIFICATION.D3D11_INPUT_PER_VERTEX_DATA), StepRate = 0 }; _info[_instanceIDAttr] = new IndexSourceInfo(_instanceIDAttr.Range) { InputSlotClass = InitBlock.Enum32("D3D11_INPUT_CLASSIFICATION", "D3D11_INPUT_PER_INSTANCE_DATA", D3D11_INPUT_CLASSIFICATION.D3D11_INPUT_PER_INSTANCE_DATA), StepRate = 1 }; InitBlock.AppendComment("D3D11 Input Assembler"); var inputElementInits = (from a in iaElement.Attributes where a.IsOutput let name = SharedHLSL.MapName(a) let attrInfo = TryDecomposeAttr(a.Range, a) where attrInfo != null from e in DeclareInputElements(InitBlock, name, attrInfo) select e).ToArray(); if (_inputElementCount != 0) { var inputElementDescsVal = InitBlock.Temp( "inputElementDescs", InitBlock.Array( EmitTarget.GetBuiltinType("D3D11_INPUT_ELEMENT_DESC"), inputElementInits)); var inputLayoutPointerType = EmitTarget.GetOpaqueType("ID3D11InputLayout*"); inputLayoutField = EmitClass.AddPrivateField( inputLayoutPointerType, "_inputLayout"); InitBlock.SetArrow( CtorThis, inputLayoutField, EmitTarget.GetNullPointer(inputLayoutPointerType)); InitBlock.CallCOM( CtorDevice, "ID3D11Device", "CreateInputLayout", inputElementDescsVal.GetAddress(), InitBlock.LiteralU32((UInt32)_inputElementCount), EmitPass.VertexShaderBytecodeVal, EmitPass.VertexShaderBytecodeSizeVal, InitBlock.GetArrow(CtorThis, inputLayoutField).GetAddress()); DtorBlock.CallCOM( DtorBlock.GetArrow(DtorThis, inputLayoutField), "IUnknown", "Release"); } }
private AttributeInfo GenerateInputElementsImpl( SourceRange range, string name, MidBuiltinType type, int vertexStream, IndexSourceInfo index, UInt32 baseOffset, int inputSlotIndex) { var format = MapBuiltinTypeFormat(type); return new InputElementInfo(range) { Name = name, Format = format, ByteOffset = baseOffset, Index = index, InputSlotIndex = inputSlotIndex, }; }
private AttributeInfo GenerateInputElementsImpl( SourceRange range, string name, MidStructRef type, int vertexStream, IndexSourceInfo index, UInt32 baseOffset, int inputSlotIndex) { var fields = new List<FieldInfo>(); UInt32 totalOffset = baseOffset; foreach (var f in type.Fields) { // \todo: Align fields.Add(new FieldInfo { Field = f, Info = GenerateInputElements( range, string.Format("{0}_{1}", name, f.Name.ToString()), f.Type, vertexStream, index, totalOffset) }); totalOffset += GetSizeOf(f.Type); } return new StructInfo(range) { Fields = fields.ToArray() }; }