native fluid chunk dispatcher
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good

This commit is contained in:
austin 2024-12-06 13:51:15 -05:00
parent 7740672e2c
commit a8b473fc24
10 changed files with 135 additions and 4 deletions

View File

@ -1251,6 +1251,7 @@ Refactoring fluid sim code
Refactoring fluid sim headers
Refactor native test code under src/test
More test file refactoring
Native fluid chunk dispatcher

View File

@ -0,0 +1,21 @@
#ifndef FLUID_DISPATCH_H
#define FLUID_DISPATCH_H
#include "public.h"
#include "fluid/queue/chunk.h"
#include "fluid/env/environment.h"
/**
* Dispatches chunks to different simulation queues based on the chunk's properties
* @param numReadIn The number of chunks
* @param chunkViewC The array of chunks
* @param environment The environment storing the simulation queues
*/
LIBRARY_API void fluid_dispatch(int numReadIn, Chunk ** chunkViewC, Environment * environment);
#endif

View File

@ -1,8 +1,10 @@
#include <jni.h>
#ifndef ENVIRONMENT_H
#define ENVIRONMENT_H
#include <jni.h>
#include "public.h"
#include "fluid/queue/chunk.h"
/**
* The List lookup table
*/
@ -42,15 +44,34 @@ typedef struct {
jclass serverFluidChunkClass;
} JNILookupTable;
/**
* Stores the different queues of cells to simulate
*/
typedef struct {
Chunk ** cellularQueue;
} FluidSimQueue;
/**
* Stores data about the simulation environment
*/
typedef struct {
JNILookupTable lookupTable;
FluidSimQueue queue;
float gravity;
double existingDensity;
double newDensity;
float normalizationRatio;
} Environment;
/**
* Creates an environment
*/
LIBRARY_API Environment * fluid_environment_create();
/**
* Frees an environment
* @param environment The environment to free
*/
LIBRARY_API void fluid_environment_free(Environment * environment);
#endif

View File

@ -0,0 +1,23 @@
#include <stdlib.h>
#include "stb/stb_ds.h"
#include "fluid/dispatch/dispatcher.h"
#include "fluid/queue/chunk.h"
#include "fluid/env/environment.h"
/**
* Dispatches chunks to different simulation queues based on the chunk's properties
* @param numReadIn The number of chunks
* @param chunkViewC The array of chunks
* @param environment The environment storing the simulation queues
*/
LIBRARY_API void fluid_dispatch(int numReadIn, Chunk ** chunkViewC, Environment * environment){
FluidSimQueue queue = environment->queue;
for(int i = 0; i < numReadIn; i++){
Chunk * currentChunk = chunkViewC[i];
//TODO: conditionally add to queues based on some values (ie lod, spatial loc, etc)
stbds_arrput(queue.cellularQueue,currentChunk);
}
}

20
src/main/c/src/fluid/env/environment.c vendored Normal file
View File

@ -0,0 +1,20 @@
#include <stdlib.h>
#include "public.h"
#include "fluid/env/environment.h"
/**
* Creates an environment
*/
LIBRARY_API Environment * fluid_environment_create(){
Environment * rVal = (Environment *)malloc(sizeof(Environment));
return rVal;
}
/**
* Frees an environment
*/
LIBRARY_API void fluid_environment_free(Environment * environment){
free(environment);
}

View File

@ -8,9 +8,11 @@
//local includes
#include "fluid/queue/chunk.h"
#include "fluid/queue/chunkmask.h"
#include "fluid/queue/metadatacalc.h"
#include "fluid/env/environment.h"
#include "fluid/env/utilities.h"
#include "fluid/sim/grid/simulation.h"
#include "fluid/queue/metadatacalc.h"
#include "fluid/dispatch/dispatcher.h"
//defines
@ -53,6 +55,7 @@ JNIEXPORT void JNICALL Java_electrosphere_server_fluid_simulator_FluidAccelerate
jfloat dt
){
int numReadIn = readInChunks(env,chunkList,environment);
fluid_dispatch(numReadIn,chunkViewC,environment);
simulate(numReadIn,chunkViewC,environment,dt);
updateMetadata(env,numReadIn,chunkViewC,environment);
}
@ -88,7 +91,7 @@ JNIEXPORT void JNICALL Java_electrosphere_server_fluid_simulator_FluidAccelerate
//allocate if unallocated
if(environment == NULL){
environment = (Environment *)malloc(sizeof(Environment));
environment = fluid_environment_create();
}
//store variables from java side

View File

@ -1,5 +1,10 @@
#include <stdio.h>
//library includes
//include stb ds
#define STB_DS_IMPLEMENTATION
#include "stb/stb_ds.h"
int StormEngineTests(int argc, char **argv){
printf("it lives\n");
return 0;

View File

@ -0,0 +1,17 @@
#include "fluid/dispatch/dispatcher.h"
#include "fluid/env/environment.h"
#include "../../util/chunk_test_utils.h"
int fluid_dispatch_dispatcher_tests(){
int rVal = 0;
Environment * env = fluid_environment_create();
int queueSize = 10;
Chunk ** queue = chunk_create_queue(queueSize);
fluid_dispatch(queueSize,queue,env);
return rVal;
}

View File

@ -1,5 +1,6 @@
#include <stdlib.h>
#include "stb/stb_ds.h"
#include "fluid/queue/chunk.h"
#include "fluid/queue/chunkmask.h"
@ -37,6 +38,19 @@ void chunk_free(Chunk * chunk){
free(chunk);
}
/**
* Creates a chunk queue
* @param size The size of the queue to create
*/
Chunk ** chunk_create_queue(int size){
Chunk ** rVal = NULL;
for(int i = 0; i < size; i++){
Chunk * chunk = chunk_create(i,i,i);
stbds_arrput(rVal,chunk);
}
return rVal;
}
/**
* Empty test launcher
*/

View File

@ -65,4 +65,10 @@ void chunk_free(Chunk * chunk);
*/
void chunk_set_val(Chunk * chunk, int i, int arr);
/**
* Creates a chunk queue
* @param size The size of the queue to create
*/
Chunk ** chunk_create_queue(int size);
#endif