feature(opencl): enable bindless image support for OpenCL frontend - #956
Open
juanchuletas wants to merge 4 commits into
Open
feature(opencl): enable bindless image support for OpenCL frontend#956juanchuletas wants to merge 4 commits into
juanchuletas wants to merge 4 commits into
Conversation
Enable BindlessHeapsHelper initialization for the OpenCL frontend by querying hardware capability via releaseHelper instead of returning false unconditionally in getGlobalBindlessHeapConfiguration. Add opt-in bindless image creation through CL_MEM_BINDLESS_IMAGE_INTEL property. When set, Image::create allocates a bindless slot in the global Surface State Heap using the shared BindlessHeapsHelper infrastructure already used by the Level Zero frontend. Signed-off-by: juan.garcia.cpp@gmail.com
…de for supported hardware Enable getBindlessMode to query hardware capability instead of defaulting to false. Add CL_IMAGE_BINDLESS_HANDLE_INTEL query key to clGetImageInfo for retrieving the bindless handle from an image. Signed-off-by: Juan Garcia <juan.garcia.cpp@gmail.com>
Remove getBindlessMode check from createBindlessHeapsHelper so the global Surface State Heap is created based on hardware capability alone. Keep getBindlessMode returning false for OpenCL to preserve normal bound-mode dispatch for all kernel arguments. This allows bindless images to explicitly allocate slots in the persistent heap via CL_MEM_BINDLESS_IMAGE_INTEL without breaking existing kernel execution. Signed-off-by: Juan Garcia <juan.garcia.cpp@gmail.com>
Kernel::patchBindlessSurfaceStatesInCrossThreadData ran on every dispatch and unconditionally re-patched the cross-thread-data offset for any explicit arg with a valid bindless offset, using the local per-dispatch Surface State Heap indexing scheme. For bindless images this was overwriting the offset that setArgImageWithMipLevel had already patched to point at the image's persistent slot in the global SSH, so the shader always read whatever (uninitialized) data happened to sit in the local SSH slot instead of the actual image descriptor. Do not repatch image args whose bound cl_mem is a genuine bindless image (CL_MEM_BINDLESS_IMAGE_INTEL), since those already carry the correct address into their own persistent slot. Signed-off-by: Juan Garcia <juan.garcia.cpp@gmail.com>
juanchuletas
force-pushed
the
bindless-images-ocl
branch
from
August 3, 2026 22:05
756ca6f to
647fcb8
Compare
Author
|
Update: Since the last update I added:
The last part took a while to get right. Three issues had to be fixed together:
Tested with a small C program that creates a 1x1 bindless image with a known pixel, compiles a kernel with the bindless flags, and reads the pixel back through Still missing :
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Enable BindlessHeapsHelper initialization for the OpenCL frontend by querying hardware capability via releaseHelper instead of returning false unconditionally in getGlobalBindlessHeapConfiguration.
Add opt-in bindless image creation through CL_MEM_BINDLESS_IMAGE_INTEL property. When set, Image::create allocates a bindless slot in the global Surface State Heap using the shared BindlessHeapsHelper infrastructure already used by the Level Zero frontend.
Signed-off-by: juan.garcia.cpp@gmail.com
Context
I am working on sycl_ext_oneapi_bindless_images in intel/llvm (PR #22257). The Unified Runtime OpenCL adapter returns UR_RESULT_ERROR_UNSUPPORTED_FEATURE for all bindless image entry points because the OpenCL has no bindless support.
This PR is the first step: enabling the shared BindlessHeapsHelper infrastructure for the OpenCL frontend and adding opt-in bindless slot allocation for images via CL_MEM_BINDLESS_IMAGE_INTEL.
Validated on Intel Arc A770:
Remaining work:
Handle retrieval API so applications can query the bindless handle
Extension string registration is needed kind of cl_intel_bindless_images