Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support opengl 3.3 #163

Open
theoparis opened this issue Aug 26, 2024 · 4 comments
Open

Support opengl 3.3 #163

theoparis opened this issue Aug 26, 2024 · 4 comments

Comments

@theoparis
Copy link

I have a older thinkpad and I cannot run the Zed editor because blade requires newer opengl features (BUFFER_STORAGE and DYNAMIC_ARRAY_SIZE)... Is there any chance these can be made optional?

Thread "main" panicked with "called `Result::unwrap()` on an `Err` value: MissingFeatures(Features(BUFFER_STORAGE | DYNAMIC_ARRAY_SIZE))" at /home/theo/.cargo/git/checkouts/blade-b2bcd1de1cf7ab6a/7f54ddf/blade-graphics/src/gles/pipeline.rs:158:14

@kvark
Copy link
Owner

kvark commented Aug 27, 2024

Thank you for filing!
Could you attach the outputs of glxinfo and eglinfo here?
Rewriting GPU layer without having buffer storage or dynamic array size is possible but quite a lot of work.

@theoparis
Copy link
Author

Here is the output from those commands:

glxinfo:
glxinfo.txt
eglinfo:
eglinfo.txt

I do have other computers and I can use Neovim however it'd be nice if Zed/blade worked on this laptop as well. I didn't realize it would take a lot of work. I also tried Zed with Vulkan but unfortunately its unusable with lavapipe.

@kvark
Copy link
Owner

kvark commented Aug 28, 2024

I took another look at the code. It doesn't seem as bad. Something isn't right here, though, it should be working right away.

MissingFeatures(Features(BUFFER_STORAGE | DYNAMIC_ARRAY_SIZE))

This is an error from Naga, and it reports Naga backend capabilities. On Blade side we have a similarly named BUFFER_STORAGE, which should be true given your EGL extension list:

capabilities.set(
            super::Capabilities::BUFFER_STORAGE,
            extensions.contains("GL_EXT_buffer_storage"),
        );

This should make our Naga configuration to use GLES-3.20 version:

let force_explicit_bindings = self
            .capabilities
            .contains(super::Capabilities::BUFFER_STORAGE);
        let mut naga_options = glsl::Options {
            version: glsl::Version::Embedded {
                version: if force_explicit_bindings { 320 } else { 300 },
                is_webgl: cfg!(target_arch = "wasm32"),
            },
            writer_flags: extra_flags | glsl::WriterFlags::ADJUST_COORDINATE_SPACE,
            binding_map: Default::default(),
            zero_initialize_workgroup_memory: false,
        };

And that should unlock both features that the error is talking about on Naga side:

check_feature!(BUFFER_STORAGE, 400, 310);
check_feature!(DYNAMIC_ARRAY_SIZE, 430, 310);

I wonder if you'd be interested in running this through rust-gdb and stepping through this code to see what's going on?

@theoparis
Copy link
Author

Alright, I'll try debugging it further. Also, I just ran the blade bunnymark demo with GLES and it worked fine 🤔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants
@kvark @theoparis and others