feat(viz): graph_force_layout_gpu compute + spatial hash (issue 0049h)
Layout force-directed en GPU usando 5 compute shaders 4.3 + spatial hash
grid 64x64. API simetrica con graph_force_layout (CPU) para que el consumer
pueda swappear sin cambios. atomicCompSwap loop para float-add portable.
- cpp/functions/viz/graph_force_layout_gpu.{h,cpp,md}: nuevo modulo
- cpp/functions/gfx/gl_loader: anade glDispatchCompute, glMemoryBarrier,
glBindBufferBase, glGetBufferSubData (Windows wgl)
- cpp/tests/test_graph_force_layout_gpu.cpp: smoke + pinned + CPU vs GPU.
Crea ventana GLFW oculta GL 4.3; SKIP si headless o sin compute.
- demos_graph: checkbox "GPU layout" para swappear CPU/GPU en runtime
- issue movido a dev/issues/completed/
This commit is contained in:
@@ -49,6 +49,10 @@ PFNGLFRAMEBUFFERTEXTUREPROC fn_glFramebufferTexture = nullptr;
|
||||
PFNGLBUFFERSUBDATAPROC fn_glBufferSubData = nullptr;
|
||||
PFNGLVERTEXATTRIBIPOINTERPROC fn_glVertexAttribIPointer = nullptr;
|
||||
PFNGLTEXBUFFERPROC fn_glTexBuffer = nullptr;
|
||||
PFNGLDISPATCHCOMPUTEPROC fn_glDispatchCompute = nullptr;
|
||||
PFNGLMEMORYBARRIERPROC fn_glMemoryBarrier = nullptr;
|
||||
PFNGLBINDBUFFERBASEPROC fn_glBindBufferBase = nullptr;
|
||||
PFNGLGETBUFFERSUBDATAPROC fn_glGetBufferSubData = nullptr;
|
||||
|
||||
namespace fn::gfx {
|
||||
|
||||
@@ -104,6 +108,10 @@ bool gl_loader_init() {
|
||||
LOAD(glBufferSubData);
|
||||
LOAD(glVertexAttribIPointer);
|
||||
LOAD(glTexBuffer);
|
||||
LOAD(glDispatchCompute);
|
||||
LOAD(glMemoryBarrier);
|
||||
LOAD(glBindBufferBase);
|
||||
LOAD(glGetBufferSubData);
|
||||
|
||||
#undef LOAD
|
||||
return true;
|
||||
|
||||
@@ -59,6 +59,11 @@
|
||||
extern PFNGLBUFFERSUBDATAPROC fn_glBufferSubData;
|
||||
extern PFNGLVERTEXATTRIBIPOINTERPROC fn_glVertexAttribIPointer;
|
||||
extern PFNGLTEXBUFFERPROC fn_glTexBuffer;
|
||||
// Compute shaders + SSBOs — issue 0049h (graph_force_layout_gpu)
|
||||
extern PFNGLDISPATCHCOMPUTEPROC fn_glDispatchCompute;
|
||||
extern PFNGLMEMORYBARRIERPROC fn_glMemoryBarrier;
|
||||
extern PFNGLBINDBUFFERBASEPROC fn_glBindBufferBase;
|
||||
extern PFNGLGETBUFFERSUBDATAPROC fn_glGetBufferSubData;
|
||||
|
||||
#define glAttachShader fn_glAttachShader
|
||||
#define glBindBuffer fn_glBindBuffer
|
||||
@@ -107,6 +112,10 @@
|
||||
#define glBufferSubData fn_glBufferSubData
|
||||
#define glVertexAttribIPointer fn_glVertexAttribIPointer
|
||||
#define glTexBuffer fn_glTexBuffer
|
||||
#define glDispatchCompute fn_glDispatchCompute
|
||||
#define glMemoryBarrier fn_glMemoryBarrier
|
||||
#define glBindBufferBase fn_glBindBufferBase
|
||||
#define glGetBufferSubData fn_glGetBufferSubData
|
||||
#else
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#include <GL/gl.h>
|
||||
|
||||
Reference in New Issue
Block a user