Skip to content

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

Draft
Kuba663 wants to merge 70 commits into
CleanroomMC:fix/lwjglfrom
Kuba663:feature/compute
Draft

[W.I.P] Cleanroom Compute API#590
Kuba663 wants to merge 70 commits into
CleanroomMC:fix/lwjglfrom
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 invokation
  • Buffer and image creation (OCL seems to have problems with non-MemoryStack buffers)
  • Handling cases where OCL is unavaliable
  • Writing unit tests (priority)
  • Cleanup code

Look into discussion #567 for more.
Supersedes #587

Kuba663 added 30 commits July 4, 2026 19:21
Used to ensure that CR doesn't load an obsolete program binary.
This will need the command queue to work, it's late today, will work on it tomorrow.

TODO: Implement invocations
Done for tests, might be replaced later
Setup tests require running the setup and that could interrupt the actual tests for OCL features like compilation, kernels, etc.
Cache uses too much stack memory.

A MemoryStack would have to be created per binary.

Cache will be reworked anyway so it's delayed for now.
@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
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.

1 participant