aboutsummaryrefslogtreecommitdiff
path: root/template
AgeCommit message (Collapse)Author
2020-06-20Fix usage of MomentsTexture in volumetric examplesAdrian Kummerlaender
2020-06-19Use lattice-internal moments buffer for particlesAdrian Kummerlaender
2020-06-19Use OpenCL buffer to access moments in streamline implAdrian Kummerlaender
2019-12-31Improve SDF rendering quality, performanceAdrian Kummerlaender
2019-12-28Adapt existing channel example to new SDF-based rendering and voxelizationAdrian Kummerlaender
2019-12-27Add SDF-based grid fin exampleAdrian Kummerlaender
2019-10-08Play around with 2d streamlinesAdrian Kummerlaender
2019-10-06Explicitly enable double precision floating point when requiredAdrian Kummerlaender
2019-10-06Use OpenCL access qualifiers only for image objectsAdrian Kummerlaender
It seems I was overeager in adding those qualifiers to non-image buffers as they are only defined by the standard in relation to image objects. Adding the qualifiers to normal buffers causes no observable performance difference on Nvidia targets and fails compilation when targeting AMD or Intel.
2019-09-25Use floats for texture storage, test curl visualizationAdrian Kummerlaender
Using `GL_RGBA32F` as the texture storage format instead of packing values into the unit interval.
2019-09-23Use new projection utilities in LDC 3DvisualizationAdrian Kummerlaender
2019-09-23Implement basic diffusive lighting in volumetric raytracerAdrian Kummerlaender
Approximated surface normals are encoded into the moments texture. These normals are restored when the ray marcher encounters an impermeable cell. Note that normals are shifted to be >= 0 as negative values are not representable using OpenGL textures. If this prototype works out it might be preferable to calculate better surface normals during preprocessing to be stored separately. Compare to 6123c8a.
2019-09-21Extract GL moments, particle buffers and add texture bufferAdrian Kummerlaender
2019-09-17Extract indicators, drawing of geometric primitivesAdrian Kummerlaender
2019-09-13Add 3d lid driven cavity OpenGL visualizationAdrian Kummerlaender
2019-09-11CleanupinkAdrian Kummerlaender
2019-09-06Add a fun little fake bonfire _simulation_Adrian Kummerlaender
…using appropriately colored aging particles
2019-09-04Reset stuck particles to starting positionAdrian Kummerlaender
2019-09-01Prototype "ink" particles visualizationAdrian Kummerlaender
2019-07-25Dampen channel inflowAdrian Kummerlaender
2019-06-29Implement layout and memory paddingAdrian Kummerlaender
There are at least two distinct areas where padding can be beneficial on a GPU: 1. Padding the global thread sizes to support specific thread layouts e.g. (32,1) layouts require the global lattice width to be a multiple of 32 2. Padding the memory layout at the lowest level to align memory accesses i.e. some GPUs read memory in 128 Byte chunks and as such it is beneficial if the operations are aligned accordingly For lattice and thread layout sizes that are exponents of two these two padding areas are equivalent. However when one operates on e.g. a (300,300) lattice using a (30,1) layout, padding to 128 bytes yields a performance improvement of about 10 MLUPS on a K2200. Note that I am getting quite unsatisfied with how the Lattice class and its suroundings continue to accumulate parameters. The naming distinction between Geometry, Grid, Memory and Lattice is also not very intuitive.
2019-06-22Add platform, precision and thread layout parametersAdrian Kummerlaender
2019-06-21Gather interop moments in a more generic mannerAdrian Kummerlaender
i.e. return unshifted moments in a implicitly ordered float4 array. Cell positions are reconstructed by a vertex shaded analogously to how it is done in compustream.
2019-06-20Prototype OpenGL interoperationAdrian Kummerlaender
2019-06-17Extract population offsetAdrian Kummerlaender
2019-06-16Declutter gid and offset calculationAdrian Kummerlaender
2019-06-15Add support for generating a D3Q19 kernelAdrian Kummerlaender
Note how this basically required no changes besides generalizing cell indexing and adding the symbolic formulation of a D3Q19 BGK collision step. Increasing the neighborhood communication from 9 to 19 cells leads to a significant performance "regression": The 3D kernel yields ~ 360 MLUPS compared to the 2D version's ~ 820 MLUPS.
2019-06-15Consistently name population buffersAdrian Kummerlaender
2019-06-14Extract geometry informationAdrian Kummerlaender
2019-06-13Further the separation between descriptor and latticeAdrian Kummerlaender
2019-06-13Tidy up symbolic kernel generationAdrian Kummerlaender
2019-06-13Add kernel customization point for velocity boundariesAdrian Kummerlaender
2019-06-12Make it easier to exchange initial equilibration logicAdrian Kummerlaender
2019-06-12Move kernel template into separate fileAdrian Kummerlaender