Metal Backend: Add fallback for Add-ons that use BGL or Incorrect shader-code with GPU module. #103863

Closed
opened 4 weeks ago by Jeroen-Bakker · 6 comments
Collaborator

In order to make metal default for blender it should not crash when add-ons are enabled that use the BGL module or has shaders that don't compile on Metal.
The idea as discussed is to have a fallback opengl context around where GL calls can be passed to, so it doesn't fail when Metal backend isn't supported. This fallback won't draw/read from the screen, it only makes sure that Blender doesn't crash. Perhaps in stead of an OpenGL context we could create a dummy context where unsupported calls will land.

Looking at how BGL accesses OpenGL we could modify the BGL_Wrap to do nothing when Metal is the active backend.

See release/scripts/addons/measureit/measureit_render.py.

buffer = bgl.Buffer(bgl.GL_BYTE, width * height * 4)
        bgl.glReadBuffer(bgl.GL_COLOR_ATTACHMENT0)
        bgl.glReadPixels(0, 0, width, height, bgl.GL_RGBA, bgl.GL_UNSIGNED_BYTE, buffer)```

In the case shaders cannot compile the metal backend will set a flag that will control an error message to be displayed to the user.

In order to make metal default for blender it should not crash when add-ons are enabled that use the BGL module or has shaders that don't compile on Metal. The idea as discussed is to have a fallback opengl context around where GL calls can be passed to, so it doesn't fail when Metal backend isn't supported. This fallback won't draw/read from the screen, it only makes sure that Blender doesn't crash. Perhaps in stead of an OpenGL context we could create a dummy context where unsupported calls will land. Looking at how BGL accesses OpenGL we could modify the `BGL_Wrap` to do nothing when Metal is the active backend. See `release/scripts/addons/measureit/measureit_render.py`. ``` buffer = bgl.Buffer(bgl.GL_BYTE, width * height * 4) bgl.glReadBuffer(bgl.GL_COLOR_ATTACHMENT0) bgl.glReadPixels(0, 0, width, height, bgl.GL_RGBA, bgl.GL_UNSIGNED_BYTE, buffer)``` In the case shaders cannot compile the metal backend will set a flag that will control an error message to be displayed to the user.
Jeroen-Bakker self-assigned this 4 weeks ago
Poster
Collaborator
Added subscribers: @Jeroen-Bakker, @Michael-Parkin-White-Apple
Poster
Collaborator

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'
Collaborator

Added subscriber: @PratikPB2123

Added subscriber: @PratikPB2123

Added subscriber: @mycoconut

Added subscriber: @mycoconut
Collaborator

This issue was referenced by cac6b6f388

This issue was referenced by cac6b6f388812cb3f0d0e2515fa4ac7f13335903
Alaska commented 3 weeks ago

Added subscriber: @Alaska

Added subscriber: @Alaska
Jeroen-Bakker closed this issue 2 days ago
blender-bot added
Status › Archived
and removed
Status › Confirmed
labels 2 days ago
Sign in to join this conversation.
No Label
Interest/Alembic
Interest/Animation & Rigging
Interest/Asset Browser
Interest/Asset Browser Project Overview
Interest/Audio
Interest/Automated Testing
Interest/Blender Asset Bundle
Interest/Collada
Interest/Compositing
Interest/Core
Interest/Cycles
Interest/Dependency Graph
Interest/Development Management
Interest/Eevee & Viewport
Interest/Freestyle
Interest/Geometry Nodes
Interest/Grease Pencil
Interest/ID Management
Interest/Images & Movies
Interest/Import/Export
Interest/Line Art
Interest/Masking
Interest/Modeling
Interest/Modifiers
Interest/Motion Tracking
Interest/Nodes & Physics
Interest/Overrides
Interest/Performance
Interest/Performance
Interest/Physics
Interest/Pipeline, Assets & I/O
Interest/Platforms, Builds, Tests & Devices
Interest/Python API
Interest/Render & Cycles
Interest/Render Pipeline
Interest/Sculpt, Paint & Texture
Interest/Text Editor
Interest/Translations
Interest/Triaging
Interest/Undo
Interest/USD
Interest/User Interface
Interest/UV Editing
Interest/VFX & Video
Interest/Video Sequencer
Interest/Virtual Reality
legacy module/Animation & Rigging
legacy module/Core
legacy module/Development Management
legacy module/Eevee & Viewport
legacy module/Grease Pencil
legacy module/Modeling
legacy module/Nodes & Physics
legacy module/Pipeline, Assets & IO
legacy module/Platforms, Builds, Tests & Devices
legacy module/Python API
legacy module/Rendering & Cycles
legacy module/Sculpt, Paint & Texture
legacy module/Triaging
legacy module/User Interface
legacy module/VFX & Video
legacy project/1.0.0-beta.2
legacy project/Asset Browser (Archived)
legacy project/BF Blender: 2.8
legacy project/BF Blender: After Release
legacy project/BF Blender: Next
legacy project/BF Blender: Regressions
legacy project/BF Blender: Unconfirmed
legacy project/Blender 2.70
legacy project/Code Quest
legacy project/Datablocks and Libraries
legacy project/Eevee
legacy project/Game Animation
legacy project/Game Audio
legacy project/Game Data Conversion
legacy project/Game Engine
legacy project/Game Logic
legacy project/Game Physics
legacy project/Game Python
legacy project/Game Rendering
legacy project/Game UI
legacy project/GPU / Viewport
legacy project/GSoC
legacy project/Infrastructure: Websites
legacy project/LibOverrides - Usability and UX
legacy project/Milestone 1: Basic, Local Asset Browser
legacy project/Nodes
legacy project/OpenGL Error
legacy project/Papercut
legacy project/Pose Library Basics
legacy project/Retrospective
legacy project/Tracker Curfew
legacy project/Wintab High Frequency
Meta/Good First Issue
Meta/Papercut
migration/requires-manual-verification
Module › Animation & Rigging
Module › Core
Module › Development Management
Module › Eevee & Viewport
Module › Grease Pencil
Module › Modeling
Module › Nodes & Physics
Module › Pipeline, Assets & IO
Module › Platforms, Builds, Tests & Devices
Module › Python API
Module › Render & Cycles
Module › Sculpt, Paint & Texture
Module › Triaging
Module › User Interface
Module › VFX & Video
Platform/FreeBSD
Platform/Linux
Platform/macOS
Platform/Windows
Priority › High
Priority › Low
Priority › Normal
Priority › Unbreak Now!
Status › Archived
Status › Confirmed
Status › Duplicate
Status › Needs Information from Developers
Status › Needs Information from User
Status › Needs Triage
Status › Resolved
Type › Bug
Type › Design
Type › Known Issue
Type › Patch
Type › Report
Type › To Do
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#103863
Loading…
There is no content yet.