I'm trying to set 2 constantbuffers (in register 4 and 5) in SharpDX but I'm not sure if I'm doing it right.
Is there any way to check it?
[D3D10]
HLSL
cbuffer GS_CONSTANT_BUFFER_EDGETABLE : register(b4)
{
int4 edgeTable[256];
};
cbuffer GS_CONSTANT_BUFFER_TRITABLE : register(b5)
{
int4 triTable[256][16];
};
C#
[StructLayout(LayoutKind.Sequential)]
public struct GS_CONSTANT_BUFFER_EDGETABLE
{
public Int4[] edgeTable;
}
[StructLayout(LayoutKind.Sequential)]
public struct GS_CONSTANT_BUFFER_TRITABLE
{
public Int4[][] triTable;
}
private GS_CONSTANT_BUFFER_EDGETABLE _dataEdge;
private GS_CONSTANT_BUFFER_TRITABLE _dataTri;
private Buffer _bufferEdge;
private Buffer _bufferTri;
BufferDescription desc = new BufferDescription();
desc.Usage = ResourceUsage.Dynamic;
desc.BindFlags = BindFlags.ConstantBuffer;
desc.CpuAccessFlags = CpuAccessFlags.Write;
desc.SizeInBytes = _dataEdge.edgeTable.Length * Marshal.SizeOf(_dataEdge.edgeTable[0]);
_bufferEdge = Buffer.Create(device, ref _dataEdge, desc);
desc.SizeInBytes = _dataTri.triTable.Length * Marshal.SizeOf(_dataTri.triTable[0][0]) * 16;
_bufferTri = Buffer.Create(device, ref _dataTri, desc);
for (int i = 0; i < Shader.Technique.Description.PassCount; ++i)
{
Shader.Technique.GetPassByIndex(i).Apply();
//_device.UpdateSubresource(ref _dataEdge, _bufferEdge, 4);
//_device.UpdateSubresource(ref _dataTri, _bufferTri, 5);
_device.GeometryShader.SetConstantBuffers(4, 2, _buffers);
_device.DrawIndexed(Model.IndexCount, 0, 0);
}