compute shaderによるanimationの計算
Compute Shader
ray tracingパイプラインのみでレンダリングしているとvertex shaderでのアニメーションの計算を行わないので、compute shaderでの計算方法を模索していた。
とりあえず、ソースデータからデスティネーションデータにデータをコピーするところまでは成功。
GPU計算結果のデバッグ
shaderのデバッグで困るのが、計算結果のデバッグがIDEのデバッグ機能などで見れないこと。
GPU側のメモリまでは見に行けないので、デバッグ専用にGPU計算結果を一度CPU側のメモリに格納し直してから見直す必要がある。(と思う)
(他に簡単な方法があればご教授ください)
VkDeviceMemory(Local(CPU)) | => | VkDeviceMemory(Device(GPU)) | => | Data(CPU) |
CPU側で準備 | コピー | GPUで計算 | コピー | data |
local deviceとして使用しているdevice memoryから、compute shaderで計算後にデータを格納し直す。
方法としては、CPU=>GPUでメモリをコピーしている向きと逆向きでデータをコピーすればOK
vkMapMemory(device, bufferMemory, 0, dataSize, 0, &tmpBuffer); memcpy(data, tmpBuffer, dataSize); vkUnmapMemory(device, bufferMemory);
memcpy()関数自体はCで用意されている関数で
#include
void *memcpy(void *buf1, const void *buf2, size_t n);第一引数にコピー先のメモリブロックのポインタ
第二引数にコピー元のメモリブロックのポインタ
第三引数はコピーサイズ
https://bituse.info/c_func/56
なので、vkMapMemoryでVkDeviceMemory(Device(GPU))を指定した後、memcpy()のdataに、格納したい配列のアドレスを渡す。