DirectX 11 — вычислительный шейдер, копирование данных из графического процессора в процессор

Я только начал использовать Direct compute в попытке перенести симуляцию флюида, над которой я работал, на GPU. Я нашел очень похожий (если не идентичный) вопрос Вот однако, кажется, что решение моей проблемы не совпадает с их решением; У меня действительно есть CopyResource правильно! Как и в случае вставленного вопроса, я получаю буфер, заполненный нулями только при копировании обратно из графического процессора. Я действительно не вижу ошибки, поскольку я не понимаю, как я могу выйти за пределы. Я собираюсь извиниться за массовое вставление кода, которое должно произойти, но я хочу быть уверен, что я не ошибся в настройках.

Настройка выходного буфера, БПЛА и системного буфера

    outputDesc.Usage = D3D11_USAGE_DEFAULT;
outputDesc.BindFlags = D3D11_BIND_UNORDERED_ACCESS;
outputDesc.ByteWidth = sizeof(BoundaryConditions) * numElements;
outputDesc.CPUAccessFlags = 0;
outputDesc.StructureByteStride = sizeof(BoundaryConditions);
outputDesc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
result =_device->CreateBuffer(&outputDesc, 0, &m_outputBuffer);

outputDesc.Usage = D3D11_USAGE_STAGING;
outputDesc.BindFlags = 0;
outputDesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
result = _device->CreateBuffer(&outputDesc, 0, &m_outputresult);

D3D11_UNORDERED_ACCESS_VIEW_DESC uavDesc;
uavDesc.Format = DXGI_FORMAT_UNKNOWN;
uavDesc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER;
uavDesc.Buffer.FirstElement = 0;
uavDesc.Buffer.Flags = 0;
uavDesc.Buffer.NumElements = numElements;
result =_device->CreateUnorderedAccessView(m_outputBuffer, &uavDesc, &m_BoundaryConditionsUAV);

0

Решение

Holy Smokes я исправил ошибку! Я создавал вычислительный шейдер для другого указателя ID3D11ComputeShader! D: работает как шарм! Фью Прости и спасибо Адам!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]