Original Post
Hi I am new here so I dont know if this is a common n00b problem.
So I am creating my structured buffer like this
[source lang="cpp"]HRESULT CRenderer::CreateStructuredBuffer ( unsigned int arg_dElementCount, unsigned int arg_dElementSize, void * arg_pData )
{
HRESULT status = S_OK;
D3D11_BUFFER_DESC objBufferDesc;
D3D11_SUBRESOURCE_DATA objInitData;
D3D11_SHADER_RESOURCE_VIEW_DESC objResViewDesc;
ZeroMemory(&objBufferDesc, sizeof(objBufferDesc));
ZeroMemory(&objInitData, sizeof(objInitData));
ZeroMemory(&objResViewDesc, sizeof(objResViewDesc));
objBufferDesc.ByteWidth = arg_dElementCount * arg_dElementSize;
objBufferDesc.StructureByteStride = arg_dElementSize;
objBufferDesc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
objBufferDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
objBufferDesc.Usage = D3D11_USAGE_DEFAULT;
objBufferDesc.CPUAccessFlags = 0;
objInitData.pSysMem = arg_pData;
this->m_dxStructuredBufferArray.push_back ( NULL );
status = this->m_dxDevice->CreateBuffer (
&objBufferDesc,
&objInitData,
&(this->m_dxStructuredBufferArray[this->m_dNumOfStructuredBuffers++])
);
if (FAILED(status))
{
return status;
}
objResViewDesc.Format = DXGI_FORMAT_UNKNOWN;
objResViewDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
objResViewDesc.Buffer.ElementOffset = 0;
objResViewDesc.Buffer.ElementWidth = arg_dElementSize;
objResViewDesc.Buffer.FirstElement = 0;
objResViewDesc.Buffer.NumElements = arg_dElementCount;
this->m_dxResourceViews.push_back ( NULL );
status = this->m_dxDevice->CreateShaderResourceView (
this->m_dxStructuredBufferArray[this->m_dNumOfStructuredBuffers-1],
&objResViewDesc,
&(this->m_dxResourceViews[this->m_dNumOfStructuredBuffers-1])
);
if (FAILED(status))
{
return status;
}
return status;
}[/source]
And I am calling it like this
[source lang="cpp"] status = objRenderer.CreateStructuredBuffer ( objWorldReader.GetInstanceCount ( ), sizeof(SInstance), objWorldReader.GetInstances ( ) );
if ( FAILED(status) )
return 1;
[/source]
But it seems when I view the buffer in PIX in a simple passthrough Shader, I just see zeros. Now I know the structure may need to be 16 byte aligned since I encountered a similar problem before, so I have declared my structure like this.
[source lang="cpp"]struct SInstance
{
__declspec(align(16)) XMMATRIX matLocation;
int dTemplateType;
};
[/source]
But now I really dont know what's going on and I am really out of my depth. Please Help!!!!
So I am creating my structured buffer like this
[source lang="cpp"]HRESULT CRenderer::CreateStructuredBuffer ( unsigned int arg_dElementCount, unsigned int arg_dElementSize, void * arg_pData )
{
HRESULT status = S_OK;
D3D11_BUFFER_DESC objBufferDesc;
D3D11_SUBRESOURCE_DATA objInitData;
D3D11_SHADER_RESOURCE_VIEW_DESC objResViewDesc;
ZeroMemory(&objBufferDesc, sizeof(objBufferDesc));
ZeroMemory(&objInitData, sizeof(objInitData));
ZeroMemory(&objResViewDesc, sizeof(objResViewDesc));
objBufferDesc.ByteWidth = arg_dElementCount * arg_dElementSize;
objBufferDesc.StructureByteStride = arg_dElementSize;
objBufferDesc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
objBufferDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
objBufferDesc.Usage = D3D11_USAGE_DEFAULT;
objBufferDesc.CPUAccessFlags = 0;
objInitData.pSysMem = arg_pData;
this->m_dxStructuredBufferArray.push_back ( NULL );
status = this->m_dxDevice->CreateBuffer (
&objBufferDesc,
&objInitData,
&(this->m_dxStructuredBufferArray[this->m_dNumOfStructuredBuffers++])
);
if (FAILED(status))
{
return status;
}
objResViewDesc.Format = DXGI_FORMAT_UNKNOWN;
objResViewDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
objResViewDesc.Buffer.ElementOffset = 0;
objResViewDesc.Buffer.ElementWidth = arg_dElementSize;
objResViewDesc.Buffer.FirstElement = 0;
objResViewDesc.Buffer.NumElements = arg_dElementCount;
this->m_dxResourceViews.push_back ( NULL );
status = this->m_dxDevice->CreateShaderResourceView (
this->m_dxStructuredBufferArray[this->m_dNumOfStructuredBuffers-1],
&objResViewDesc,
&(this->m_dxResourceViews[this->m_dNumOfStructuredBuffers-1])
);
if (FAILED(status))
{
return status;
}
return status;
}[/source]
And I am calling it like this
[source lang="cpp"] status = objRenderer.CreateStructuredBuffer ( objWorldReader.GetInstanceCount ( ), sizeof(SInstance), objWorldReader.GetInstances ( ) );
if ( FAILED(status) )
return 1;
[/source]
But it seems when I view the buffer in PIX in a simple passthrough Shader, I just see zeros. Now I know the structure may need to be 16 byte aligned since I encountered a similar problem before, so I have declared my structure like this.
[source lang="cpp"]struct SInstance
{
__declspec(align(16)) XMMATRIX matLocation;
int dTemplateType;
};
[/source]
But now I really dont know what's going on and I am really out of my depth. Please Help!!!!