public ConstantBufferData(SharpDX.D3DCompiler.ConstantBuffer cb) { Name = cb.Description.Name ?? string.Empty; Size = cb.Description.Size; ParameterIndex = new List<int>(); var parameters = new List<EffectObject.d3dx_parameter>(); // Gather all the parameters. for (var i = 0; i < cb.Description.VariableCount; i++) { var vdesc = cb.GetVariable(i); var param = GetParameterFromType(vdesc.GetVariableType()); param.name = vdesc.Description.Name; param.semantic = string.Empty; param.bufferOffset = vdesc.Description.StartOffset; var size = param.columns * param.rows * 4; var data = new byte[size]; if (vdesc.Description.DefaultValue != IntPtr.Zero) Marshal.Copy(vdesc.Description.DefaultValue, data, 0, (int)size); param.data = data; parameters.Add(param); } // Sort them by the offset for some consistent results. Parameters = parameters.OrderBy(e => e.bufferOffset).ToList(); // Store the parameter offsets. ParameterOffset = new List<int>(); foreach (var param in Parameters) ParameterOffset.Add(param.bufferOffset); }
public static ConstantBuffeDictionary From(SharpDX.D3DCompiler.ConstantBuffer c) { var cb=new ConstantBuffeDictionary(); for (int i = 0; i < c.Description.VariableCount; ++i) { var v = c.GetVariable(i); cb.AddField(v.Description.Name, v.Description.Size); } return cb; }
private static void CompareConstantBuffer(SharpDX.D3DCompiler.ConstantBuffer expected, Chunks.Rdef.ConstantBuffer actual) { Assert.AreEqual((int) expected.Description.Flags, (int) actual.Flags); Assert.AreEqual(expected.Description.Name, actual.Name); Assert.AreEqual(expected.Description.Size, actual.Size); Assert.AreEqual((int) expected.Description.Type, (int) actual.BufferType); Assert.AreEqual(expected.Description.VariableCount, actual.Variables.Count); for (int i = 0; i < expected.Description.VariableCount; i++) CompareConstantBufferVariable(expected.GetVariable(i), actual.Variables[i]); }