什么时候将数据复制到GPU内存?

时间:2013-04-04 14:33:56

标签: directx shader directx-11 directcompute

我的程序中有一些众所周知的步骤:

CreateBuffer

Create..View

CSSet..Views

Dispatch

将数据复制到GPU的哪一步?

2 个答案:

答案 0 :(得分:1)

DirectX manages the memory为您和数据在需要时复制到GPU。

答案 1 :(得分:1)

他们拒绝投票的原因是因为看起来好像你没有在Google搜索中付出任何努力。

答案:调用创建方法时,DirectX通常会将数据从系统内存传输到视频内存中。创建方法的示例是“ID3D11Device :: CreateBuffer”。此方法需要指向数据所在位置的指针,以便将其从系统RAM复制到视频RAM。但是,如果传入的指针是空指针,那么它只是设置边的空间量,以便稍后复制它。

示例:

如果你创建一个动态顶点缓冲区而你最初没有传入数据,那么你将不得不使用map / unmap将数据复制到视频内存中。

// Fill in a buffer description.
  D3D11_BUFFER_DESC bufferDesc;
  bufferDesc.Usage            = D3D11_USAGE_DYNAMIC;
  bufferDesc.ByteWidth        = sizeof(Vertex_dynamic) * m_iHowManyVertices;
  bufferDesc.BindFlags        = D3D11_BIND_VERTEX_BUFFER;
  bufferDesc.CPUAccessFlags   = D3D11_CPU_ACCESS_WRITE;
  bufferDesc.MiscFlags        = 0;
  bufferDesc.StructureByteStride = NULL;

  // Fill in the subresource data.
  D3D11_SUBRESOURCE_DATA InitData;
  InitData.pSysMem = &_vData[0];
  InitData.SysMemPitch = NULL;
  InitData.SysMemSlicePitch = NULL;

  // Create the vertex buffer.
/*Data is being copyed right now*/
 m_pDxDevice->CreateBuffer(&bufferDesc, &InitData, &m_pDxVertexBuffer_PiecePos);