Ich habe 2 Effekte. Ich habe gerade begonnen, mit Shadern und DirectX zu arbeiten, tut mir leid für die blöde Frage. Erster mit compute shader in es dauert RWStructuredBuffer.ID3D11UnorderedAccessView Daten zu StructuredBuffer
RWStructuredBuffer<Particle> Particles : register(u0);
Zweite ein:
StructuredBuffer<Particle> Particles : register(t0);
Ich habe Daten auf diese Weise:
//creating buffer for initial particles
D3D11_BUFFER_DESC cbDesc = {};
cbDesc.ByteWidth = sizeof(Particle)*PARTICLES_COUNT;
cbDesc.Usage = D3D11_USAGE::D3D11_USAGE_DEFAULT;
//cbDesc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_UNORDERED_ACCESS & D3D11_BIND_FLAG::D3D11_BIND_SHADER_RESOURCE;
cbDesc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_SHADER_RESOURCE;
cbDesc.CPUAccessFlags = 0;
cbDesc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
cbDesc.StructureByteStride = sizeof(Particle);
D3D11_BUFFER_DESC cbuavDesc = {};
cbuavDesc.ByteWidth = sizeof(Particle)*PARTICLES_COUNT;
cbuavDesc.Usage = D3D11_USAGE::D3D11_USAGE_DEFAULT;
//cbuavDesc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_UNORDERED_ACCESS & D3D11_BIND_FLAG::D3D11_BIND_SHADER_RESOURCE;
cbuavDesc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_UNORDERED_ACCESS;
cbuavDesc.CPUAccessFlags = 0;
cbuavDesc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
cbuavDesc.StructureByteStride = sizeof(Particle);
// Fill in the subresource data.
D3D11_SUBRESOURCE_DATA InitData = {};
InitData.pSysMem = &initialParticles;
InitData.SysMemPitch = sizeof(Particle)*PARTICLES_COUNT;
InitData.SysMemSlicePitch = 0;
hr = g_pd3dDevice->CreateBuffer(&cbDesc, &InitData, &solverParticles);
hr = g_pd3dDevice->CreateBuffer(&cbuavDesc, &InitData, &solverUAVParticles);
D3D11_UNORDERED_ACCESS_VIEW_DESC uvDesc = {};
uvDesc.Buffer.FirstElement = 0;
uvDesc.Buffer.NumElements = PARTICLES_COUNT;
uvDesc.Buffer.Flags = D3D11_BUFFER_UAV_FLAG_COUNTER;
uvDesc.Format = DXGI_FORMAT_UNKNOWN;
uvDesc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER;
D3D11_SHADER_RESOURCE_VIEW_DESC svDesc = {};
svDesc.Buffer.NumElements = PARTICLES_COUNT;
svDesc.Buffer.FirstElement = 0;
svDesc.Format = DXGI_FORMAT_UNKNOWN;
svDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
hr = g_pd3dDevice->CreateUnorderedAccessView(solverUAVParticles, &uvDesc, &g_uav);
hr = g_pd3dDevice->CreateShaderResourceView(solverParticles, &svDesc, &g_particlesStructuredBufferView);
Und geben:
hr = g_particlesUAV->SetUnorderedAccessView(g_uav);
hr = g_particlesStructuredBuffer->SetResource(g_particlesStructuredBufferView);
Leider zweite Effekt Anfangsdaten macht, aber ich brauche um bereits geänderte Daten von c ompute Shader. Ich habe keine hilfreiche Beispiele gefunden. Vielen Dank für jede Hilfe.