如何将计算着色器的结果传递给顶点着色器?

How to pass result from compute shader to vertex shader?

我的代码有效。 首先,我创建一个缓冲区以通过 CopyResource 从计算着色器获取缓冲区。

然后我创建一个指针调用 p1 并从 MappedResource1 获取结果指针。 之后,我创建顶点缓冲区并进行渲染。

但我认为这不是从计算着色器获取顶点缓冲区的最佳方式:

D3D11_BUFFER_DESC desc;
ZeroMemory(&desc, sizeof(desc));
mFirstBuffer->GetDesc(&desc);
desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
desc.Usage = D3D11_USAGE_STAGING;
desc.BindFlags = 0;
desc.MiscFlags = 0;
if (SUCCEEDED(device->CreateBuffer(&desc, nullptr, &debugbuf)))
{
    context->CopyResource(debugbuf, mFirstBuffer.Get());
}
unsigned int stride = sizeof(InstanceData);
unsigned int offset = 0;
D3D11_MAPPED_SUBRESOURCE MappedResource1;
InstanceData *p1;

context->Map(debugbuf, 0, D3D11_MAP_READ, 0, &MappedResource1);
p1 = (InstanceData*)MappedResource1.pData;
context->Unmap(debugbuf, 0);

D3D11_SUBRESOURCE_DATA VertexBufferData;
VertexBufferData.pSysMem = p1;
VertexBufferData.SysMemPitch = 0;
VertexBufferData.SysMemSlicePitch = 0;
D3D11_BUFFER_DESC desc2;
desc2.ByteWidth = sizeof(InstanceData) * MillionParticleCount;
desc2.Usage = D3D11_USAGE_DEFAULT;
desc2.BindFlags = D3D11_BIND_VERTEX_BUFFER;
desc2.CPUAccessFlags = 0;
desc2.MiscFlags = 0;
desc2.StructureByteStride = 0;
device->CreateBuffer(&desc2, &VertexBufferData, &vertexBuffer);

context->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);

看了很多sample,都是把compute shader和vertex shader写在一个文件里,所以可以直接从compute shader中得到结果。

在我的代码中,计算着色器和顶点着色器写在不同的文件中。 我应该如何优化我的代码?

最后我使用了我的旧方法 post