Skip to content

feat(api): Cleanroom Compute API - #590

Open
Kuba663 wants to merge 365 commits into
CleanroomMC:feature/cleanroomgradlefrom
Kuba663:feature/compute
Open

feat(api): Cleanroom Compute API#590
Kuba663 wants to merge 365 commits into
CleanroomMC:feature/cleanroomgradlefrom
Kuba663:feature/compute

Conversation

@Kuba663

@Kuba663 Kuba663 commented Jul 18, 2026

Copy link
Copy Markdown
Collaborator
Leaving this here because the MVP is almost ready. This is untested, I will undraft when the unit tests are done and passing. The previous PR was to the wrong branch and would have completely broken the project.

Cleanroom Compute API

Run OpenCL kernels from Cleanroom for maximum parallelism.

The goal

Have an easy to use API for running OCL code from Cleanroom, mod developers should be unable to cause memory and state leaks (if state leaks are even possible).

Code for running a kernel should look like this (as of now):

CommandQueue queue = Compute.instance().queueDispatch.dispatch("Queue1"); // Queues shoudl be re-used multiple times
queue.dispatchKernel(kernel, args, offsets, sizes).next(kernel2, args2, offsets2, sizes2).run();
queue.close();

The other goal is to prevent the inferno that would break out if multiple different modders start including their own OCL jar in their mods for optimization.
Also, OpenCL supports SoA so it can work with Kirino a tad better than compute shaders which require AoS conversion.

The whole thing will use JSON files in the resources to red metadata and automatically detect headers.

#include <mod/example.h> // this is ok
#include <example.h> // this is not

TODO

  • Initializing OpenCL
  • Compiling Programs
  • Command Queues
  • Kernel invocation
  • Strong argument typing.
  • Range Invocation
  • Task Invocation
  • Parameter Abstraction
  • Buffer and image creation (OCL seems to have problems with non-MemoryStack buffers)
  • Buffer type
  • Creation
  • Reading
  • Writing
  • Image type
  • Creation
  • Reading
  • Writing
  • Some abstraction to bind them together to reduce the amount of methods.
  • Pipes
  • Handling cases where OCL is unavaliable
  • Writing unit tests (priority)
  • Setup
  • Program Compilation
  • Kernel Execution
  • Buffer Usage (might partially fall under Kernel Execution)
  • Buffer flag conflicts
  • Image Usage (might partially fall under Kernel Execution)
  • Cleanup code
  • Fix the current program JSONs
  • More argument metadata (which is the size of which, etc.)
  • Smart Pointers
  • Documentation

Look into discussion #567 for more.
Supersedes #587

@Kuba663 Kuba663 self-assigned this Jul 18, 2026
@Kuba663 Kuba663 added the enhancement New feature or request label Jul 18, 2026
@Kuba663 Kuba663 mentioned this pull request Jul 18, 2026
8 tasks
@Kuba663

Kuba663 commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator Author

Buffer creation and writing partially done.

Kuba663 added 23 commits August 11, 2026 19:51
Ensure that only the 1, 2, 3, 4, 8 and 16 value vectors are allowed.
Ensure that only the 1, 2, 3, 4, 8 and 16 value vectors are allowed.
Ensure that only the 1, 2, 3, 4, 8 and 16 value vectors are allowed.
Ensure that only the 1, 2, 3, 4, 8 and 16 value vectors are allowed.
Ensure that only the 1, 2, 3, 4, 8 and 16 value vectors are allowed.
Ensure that only the 1, 2, 3, 4, 8 and 16 value vectors are allowed.
Ensure that only the 1, 2, 3, 4, 8 and 16 value vectors are allowed.
This will get very confusing and problematic when reading is introduced, better rename it now instead of struggling later,.
@Kuba663

Kuba663 commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator Author

Buffers done

There was a problem with `get_local_id`, which I mistook for `get_global_id`.
First actual OpenCL program execution, test should pass when executed on its own.
@Kuba663

Kuba663 commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator Author

Documentation done.

@Kuba663

Kuba663 commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator Author

GC Sweep unlock done, it should perform garbage collection now.

@Kuba663
Kuba663 marked this pull request as ready for review August 27, 2026 13:51
@Kuba663
Kuba663 requested a review from Rongmario August 27, 2026 13:51
@Kuba663 Kuba663 changed the title [W.I.P] Cleanroom Compute API feat(api): Cleanroom Compute API Aug 27, 2026
@Rongmario Rongmario added this to the Cleanroom 0.7.0 milestone Aug 27, 2026
Kuba663 added 15 commits August 27, 2026 16:25
…feature/compute

# Conflicts:
#	module/cleanroom/src/main/java/com/cleanroommc/hackery/Reflection.java
#	module/cleanroom/src/main/java/com/cleanroommc/hackery/ReflectionHackery.java
#	module/cleanroom/src/main/java/com/cleanroommc/hackery/enums/EnumHackery.java
#	module/cleanroom/src/test/java/com/cleanroommc/hackery/EnumHackeryTest.java
#	module/forge/src/main/java/net/minecraftforge/client/EnumHelperClient.java
#	module/forge/src/main/java/net/minecraftforge/common/util/EnumHelper.java
#	module/forge/src/main/java/net/minecraftforge/fml/common/registry/ItemStackHolderRef.java
#	module/forge/src/main/java/net/minecraftforge/registries/ObjectHolderRef.java
#	module/kirino
I need to re-clone the repo. Wait.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants