Skip to content

[W.I.P] Cleanroom Compute API - #590

Draft
Kuba663 wants to merge 258 commits into
CleanroomMC:feature/cleanroomgradlefrom
Kuba663:feature/compute
Draft

[W.I.P] Cleanroom Compute API#590
Kuba663 wants to merge 258 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 commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

Image GL Sharing done

@Kuba663

Kuba663 commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

With this GL Sharing is done

@Kuba663
Kuba663 changed the base branch from fix/lwjgl to feature/cleanroomgradle August 21, 2026 20:41
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.

4 participants