diff options
Diffstat (limited to '3rdparty/bgfx/examples/41-tess/cs_terrain_init.sc')
-rw-r--r-- | 3rdparty/bgfx/examples/41-tess/cs_terrain_init.sc | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/3rdparty/bgfx/examples/41-tess/cs_terrain_init.sc b/3rdparty/bgfx/examples/41-tess/cs_terrain_init.sc new file mode 100644 index 00000000000..b15f2397024 --- /dev/null +++ b/3rdparty/bgfx/examples/41-tess/cs_terrain_init.sc @@ -0,0 +1,43 @@ +#include "bgfx_compute.sh" + +#include "uniforms.sh" + +BUFFER_WR(u_SubdBufferOut, uint, 1); +BUFFER_RW(u_CulledSubdBuffer, uint, 2); +BUFFER_RW(indirectBuffer, uvec4, 3); +BUFFER_RW(atomicCounterBuffer, uint, 4); +BUFFER_WR(u_SubdBufferIn, uint, 8); + +NUM_THREADS(1u, 1u, 1u) +void main() +{ + uint subd = 6 << (2 * u_gpu_subd - 1); + + if((2 * u_gpu_subd - 1) <= 0) { + subd = 3u; + } + + drawIndexedIndirect(indirectBuffer, 0u, subd, 0u, 0u, 0u, 0u); + dispatchIndirect(indirectBuffer, 1u, 2u / UPDATE_INDIRECT_VALUE_DIVIDE + 1u, 1u, 1u); + + u_SubdBufferOut[0] = 0; + u_SubdBufferOut[1] = 1; + u_SubdBufferOut[2] = 1; + u_SubdBufferOut[3] = 1; + + u_CulledSubdBuffer[0] = 0; + u_CulledSubdBuffer[1] = 1; + u_CulledSubdBuffer[2] = 1; + u_CulledSubdBuffer[3] = 1; + + u_SubdBufferIn[0] = 0; + u_SubdBufferIn[1] = 1; + u_SubdBufferIn[2] = 1; + u_SubdBufferIn[3] = 1; + + uint tmp; + + atomicFetchAndExchange(atomicCounterBuffer[0], 0, tmp); + atomicFetchAndExchange(atomicCounterBuffer[1], 0, tmp); + atomicFetchAndExchange(atomicCounterBuffer[2], 2, tmp); +} |