Commit Graph

883 Commits

Author SHA1 Message Date
Jozufozu
01a7936a05 Joining the occult
- Implement hi-z occlusion culling
- Generate depth pyramid just before issuing cull dispatches
- Currently use raw texel fetches but this may be causing loss
- Add _flw_cullData to frame uniforms
2024-09-14 12:55:03 -07:00
Jozufozu
81cb2340e7 The hardest problem
- Rename most InstancePager terminology
- Rename MODEL_INDEX buffer stuffs
2024-09-14 12:55:03 -07:00
Jozufozu
b5680a0fd6 On-call paging
- Only update the page table when an allocation is resized
- Only upload the page table after it's uploaded
- Combine various setters for InstancePager.Allocation and
  IndirectInstancer
- Free pages when an allocation is deleted
2024-09-14 12:55:02 -07:00
Jozufozu
637f0538fc Growing pains
- Fix bit logic on the GPU
- Manually manage the size of the storage and pageTable buffers
- Make object2Page and page2Object static
- Fix instance writing loop
- Fix page table always having full pages
- Fix allocations not shrinking
2024-09-14 12:55:01 -07:00
Jozufozu
0af1127745 Paging Dr. Instancer
- Goal: avoid needing to re-upload everything when instance count for
  one instancer changes
- Solution: store instances in pages of 32
- Allocate pages in a GPU arena
- Store one uint per page to indicate which model the instances in the
  page belong to, and how many instances are actually stored in the page
- Instancers eagerly allocate and free pages as their instance count
  changes
- Instancers will not necessarily store instances contiguously anymore,
  but that's okay because any given cull workgroup will only reference a
  single page
- Culling threads *will* write instances contiguously however, and so we
  still need to keep track of a base instance per instancer, and the
  target buffer logic does not change
2024-09-14 12:55:01 -07:00
IThundxr
93650111b1
fix remapping 2024-09-14 09:59:11 -04:00
IThundxr
3176f1d0f5
Fix issues 2024-09-14 09:40:33 -04:00
IThundxr
fc61ff1c98
Add sodium 0.6 compat 2024-09-14 09:20:59 -04:00
IThundxr
42290b207f
Merge remote-tracking branch 'upstream/1.20/dev' into feat/multi-loader-1.21
# Conflicts:
#	buildSrc/build.gradle.kts
#	buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
#	forge/build.gradle.kts
#	gradle.properties
#	gradle/wrapper/gradle-wrapper.properties
2024-09-14 08:57:52 -04:00
Jozufozu
dfc1e3a397 Looming danger
- Bump arch loom and gradle versions
- Do not set default refmap name
- Enable legacy mixin ap in loom
- Individually add sourcesets to looms refmap stuffs
2024-09-09 21:28:02 -07:00
Rhys⁣⁣⁣⁣⁣⁣⁣
fb41248c4c
fix loom version getting (#254)
* fix loom version getting
very cursed but it works :)

* remove commented out stuff in settings.gradle.kts, unnecessary plugins in buildSrc, and configure buildSrc to download sources/javadoc
2024-09-09 19:11:05 -07:00
PepperCode1
14ca1d3286 Allow VertexViews to hold a memory owner
- Remove MemoryBlock parameter from SimpleQuadMesh constructors
2024-09-09 19:01:19 -07:00
IThundxr
3453715f81
forge porting 2024-08-22 20:31:52 -04:00
IThundxr
0919c0f02b
Merge remote-tracking branch 'upstream/1.20/dev' into feat/multi-loader-1.21
# Conflicts:
#	forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
#	forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
2024-08-22 20:30:26 -04:00
IThundxr
a932d5daa0
Merge remote-tracking branch 'upstream/1.20/dev' into feat/multi-loader-1.21
# Conflicts:
#	forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
2024-08-22 20:29:53 -04:00
IThundxr
6cf9f36c0c
iris support 2024-08-22 20:28:52 -04:00
IThundxr
c32fccc133
Sodium 0.6 2024-08-22 19:41:28 -04:00
IThundxr
4e1a4b6490
fix jittery visual animations 2024-08-16 22:54:01 -04:00
Jozufozu
1a8ed8db28 Keeping our priorities straight
- Implement backend priority system
- Give indirect priority 1000 and instancing 500
- Generate the sorted list of backends on demand in case one changes
  priority at runtime
2024-08-15 21:45:14 -07:00
Jozufozu
a5f49c6738 Hol up
- Use way fewer memory barriers
- I didn't realize that GL_SHADER_STORAGE_BARRIER_BIT was global instead
  of operating only on the currently bound buffers. Oh, well
- Move apply program binding to IndirectDrawManager
- Fix embedded instances flickering when first loading a world. Need to
  actually bind the matrix buffer for the cull shader. Not sure how it
  worked at all before
- Minor styling/cleanup
2024-08-15 20:57:28 -07:00
IThundxr
44f045b961
Fix lighting 2024-08-15 17:51:25 -04:00
Jozufozu
7a7d58adf2 Embeds your embeddings
- Optimize embeddings on indirect backend by uploading all matrices in
  an SSBO
- Allocate matrices in an arena
- Flatten IndirectCullingGroups to only be parameterized by
  InstanceType, so now all instances from all embeddings get culled in
  the same dispatch
- Sort indirect draws by whether they're embedded before anything else
- Include an "embedded" boolean in the MultiDraw record to decide which
  shader to use
- Include "matrixIndex" field in model descriptor and indirect draw
  structs
- Use matrixIndex == 0 to indicate that a matrix is the identity to
  avoid unnecessary work in the cull shader
- Add helper to write a mat3 as 3 vec4s
2024-08-15 11:41:33 -07:00
Jozufozu
b7d2b2ac7c Ubern't
- De-uberify the light shader
- Remove lightSources index
- Include LightShader in PipelineProgramKey and parameterize the
  pipeline fragment shader by it
- Profiling suggests that specializing the shaders uses significantly
  less GPU time, and we may want to do this for actual user-authored
  material shaders (and cutout?) as well
- Sort LightShader highest in the material comparator
- Implement a materialEquals method so IndirectCullingGroup can bucket
  draws on more that just material reference equality
- Do not store any particular draw program in IndirectCullingGroup
2024-08-12 17:35:31 -07:00
Jozufozu
2d37c3894d We (un)roll
- Manually unroll all loops in light_lut with the help of macros
  - Pretty significant perf gains on my 5600G
- I tried assembling a bitmask of the blocks we actually want to fetch
  and branching in each _FLW_LIGHT_FETCH in an attempt to reduce the
  bandwidth required but that turned out much slower. Perhaps there's
  still some middle-ground to be found for axis-aligned normals
- Re-order the 8-arrays in _flw_lightForDirection to be xzy to be
  consistent with everything else and improve the memory access pattern
2024-08-12 15:37:29 -07:00
IThundxr
5313585f3e
update neoforge & fix mixins 2024-08-11 10:05:39 -04:00
Jozufozu
76a4b35ce6 Assimilate Backend Config
- Merge flywheel-backend config into an object within the base flywheel
  config
- On forge, push a path in the toml
- On fabric, serialize a nested json object
- Still expose the BackendConfig via FlwBackendXplat, but have the impl
  set a static field in the xplat impl
- Revert debug shulker box changes in previous commit
2024-08-10 12:54:15 -07:00
IThundxr
f2c0b79085
uncomment the comments
"i commented out the particle stuff for testing something
 uh you can revert that" -IMS
2024-08-10 10:32:46 -04:00
IThundxr
475b1d8d7d
fix view -IMS 2024-08-10 10:31:20 -04:00
Jozufozu
744c40a56a Installing a light switch
- Guard 3 different flw_light impls via #define
- Guard the inner face correction behind another #define
- Add LightSmoothness enum to decide which flw_light impl to use
- Make LightSmoothness configurable via a new BackendConfig
- Add command to switch LightSmoothness on the fly
- Note: currently requires a resource reload so we don't need to compile
  4x as many shaders
2024-08-09 14:45:17 -07:00
Jozufozu
3dc4cf0841 All okay
- Use struct to separate light and ao fields
- Move light config TODO to impl
- Fix formatting in InstancerProvider docs
2024-08-01 12:14:14 -07:00
Jozufozu
3692dbdf3c Ayo!
- Calculate AO in flw_light
- Pack block light, sky light, and valid block count into a single uint
  when reading the 3x3x3 light volume for a fragment. This saves a
  significant amount of memory and integer additions in the shader, but
  does require slightly more alu ops overall for the packing/unpacking
- Add pragma optionNV (unroll all) for significant perf boost, may want
  to manually unroll to be cross-platform
- Remove redundant flw_light
2024-08-01 11:12:47 -07:00
IThundxr
68393d11bb
fix(mixins): broken LevelRenderer injector 2024-07-29 19:19:58 -04:00
IThundxr
b55afc9b72
Merge remote-tracking branch 'refs/remotes/upstream/1.20/dev' into feat/multi-loader-1.21 2024-07-28 19:00:44 -04:00
Jozufozu
601b70704a Solidly lit
- Upload a bitset for each section indicating if blocks are solid
- When interpolating light, count the number of transparent blocks and
  divide to avoid the incorrect "AO" effect near the ground
2024-07-28 15:57:05 -07:00
Jozufozu
8dce80ba61 The origin of all your problems
- Expose an ivec3 flw_renderOrigin in the shader api
- Internally add flw_renderOrigin in flw_light(*)
- flw_lightFetch expects an actual world position still
2024-07-28 13:16:50 -07:00
IThundxr
44c2f78458
merge: post merge fixes & porting 2024-07-27 22:03:46 -04:00
IThundxr
5e642245b7
Merge remote-tracking branch 'refs/remotes/upstream/1.20/dev' into feat/multi-loader-1.21
# Conflicts:
#	common/src/lib/java/dev/engine_room/flywheel/lib/material/Materials.java
#	common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshHelper.java
#	common/src/lib/java/dev/engine_room/flywheel/lib/visual/component/ShadowComponent.java
#	common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
#	common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/SectionCompilerMixin.java
#	forge/src/api/java/dev/engine_room/flywheel/api/event/BeginFrameEvent.java
#	forge/src/api/java/dev/engine_room/flywheel/api/event/RenderStageEvent.java
#	forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
#	forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
#	forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
2024-07-27 21:59:46 -04:00
Jozufozu
fe89e0024a Courier transformed
- SimpleQuadMesh holds a reference to its backing MemoryBlock so the
  cleaner doesn't drop it
- Fixes issue where meshes suddenly start rendering garbage
2024-07-27 18:00:44 -07:00
Jozufozu
69411fb36f Uber smooth
- Add material shader component to specify smooth lighting behavior
- Allows much easier composition of smooth lighting/material shader
  effects, and potentially gives backends the option to specialize
  shaders on the complexity of shader lighting
- Pack fog, cutout, and light into a single uint
2024-07-27 15:31:08 -07:00
Jozufozu
cdc68244e7 An original thought
- Require embeddings to specify an origin coordinate on creation
2024-07-27 14:12:28 -07:00
Jozufozu
b8f6bf841d Biased towards artistic control
- Extend InstancerProvider to allow visuals to bias the render order of
  their instancers
- Keep the old InstancerProvider#instancer method with a bias of 0
- Add an explanation of render order in InstancerProvider
2024-07-26 16:32:05 -07:00
PepperCode1
eb2ba12a98
Formalize most public API (#253)
* Start on general API formalization

* More API improvements

- Add Engine#onLightUpdate; remove LightUpdateHolder and backend/ClientChunkCacheMixin
- Add Effect#level
- Add VisualizationHelper#queueAdd and #queueRemove for Effects
- Fix PartialModel not assigning bakedModel field when populating on init
- Fix PartialModel.ALL using weak keys instead of weak values
- Make Simple*Visualizer and corresponding inner Builder classes final
- Restore FlatLit#light overload that accepts block and sky light values separately
- Add AbstractBlockEntityVisual#relight overloads that accept Iterator and Iterable
- Reorganize classes in impl.vizualization

* TaskExecutor simplification

- Move TaskExecutor#sync* methods to TaskExecutorImpl
- Move Flag and RaisePlan to impl
- Remove TaskExecutor#scheduleForMainThread and #isMainThread methods
- Remove SyncedPlan
- Add Engine#setupRender
- Remove TaskExecutor parameters from Engine#render* methods
- Convert Engine$CrumblingBlock into an interface
- Unmark RenderContext as NonExtendable to allow fulfilling the purpose described in the doc of VisualizationManager#renderDispatcher

* Remove registry freeze callbacks

- Lazily initialize MaterialShaderIndices
- Rename MaterialShaders#*Shader to #*Source
- Move BackendImplemented to api.backend package
2024-07-26 14:21:35 -06:00
IThundxr
246939b6a5
Merge remote-tracking branch 'refs/remotes/upstream/1.20/dev' into feat/multi-loader-1.21 2024-07-19 18:18:37 -04:00
Jozufozu
cc0ad90242 Lit on init
- Automatically call updateLight upon visual creation
2024-07-19 12:50:08 -07:00
PepperCode1
fe0eacad8e Light clean up
- Ensure section set returned by SectionTracker is Unmodifiable to avoid copy in LightUpdatedVisualStorage
- Do not recompute section set in ShaderLightVisualStorage if not dirty
- Fix BlockEntityStorage not clearing posLookup on recreation or invalidation
- Fix Storage.invalidate not clearing everything
- Inline TopLevelEmbeddedEnvironment and NestedEmbeddedEnvironment into AbstractEmbeddedEnvironment and rename to EmbeddedEnvironment
- Move some classes between packages
- Remove unused fields in EmbeddingUniforms
- Remove suffix on field names in BufferBindings
- Rename enqueueLightUpdateSection methods to onLightUpdate
- Rename SectionCollectorImpl to SectionTracker
- Rename classes, methods, fields, and parameters and edit javadoc and comments to match previously done renames, new renames, and other existing classes
2024-07-15 15:15:34 -07:00
Jozufozu
1ea94a859e The name game
- Rename the light visuals to have distinct names
- Rename SectionProperty -> SectionCollector because it isn't really a
  property
2024-07-15 15:15:34 -07:00
Jozufozu
caa02f2666 Lighter tracking
- Deduplicate section tracking logic between Lit and SmoothLit
- Now there is one SectionPropertyImpl which the 2 storages add
  listeners to
2024-07-15 15:15:34 -07:00
Jozufozu
c4c4d45b0b Sunset box
- Unused in flywheel and not a productive utility for others with the
  new features
2024-07-15 15:15:34 -07:00
Jozufozu
0c5995bad8 It's not a phase!
- Optimize collecting light section edges
- Kinda an absurd amount of code, but I'm not sure how to parameterize
  by an axis without having capturing lambdas
- Around 3-4x faster
2024-07-15 15:15:34 -07:00
Jozufozu
2cced88749 Lazy as can be
- Only push light sections to the engine when the set of sections
  requested by visuals changes
- Clean up light storage plan and comment code
- Remove LIGHT_VOLUME debug mode as it's no longer used
2024-07-15 15:15:34 -07:00