GPU: Inform Users on GPU Driver Support level #70416

Closed
opened 2019-10-01 11:58:05 +02:00 by Jeroen Bakker · 9 comments
Member

Many GPU issues can be related to driver issues. It is not clear to users that their OS/HW/Driver combination has issues and needs to be updated.
This task will detect the combination and the support level we give.

There are 3 support level

  • Fully supported: the combination is known to be working.
  • Limited support: the combination can work, but might have some issues.
  • Unsupported: the combination is known not to work with Blender.

A popup will be shown to the user (using a OS Message/Dialog Box) about the support level and a link to a docs.blender.org page describing what can be done to get better support.

Question:
An unknown driver combination should by default get a fully supported stamp. This might lead to future driver releases to not work correctly, and needs a new blender release for us to update the blacklisting.
IMO this seems to be the best solution, as there are more driver releases then blender releases and gives a more friendly interaction with blender.

Impact:
windowmanager/wm_platform_support

  • add a callback function that will is passed to the GHOST context creation. This function will return a text and link that will be displayed
in an OS specific message box. The needs to be added to the `GHOST_CreateOpenGLContext`. When Blender is running in background the callback should
never display any message box, but display the message in the console.
  • add a parameter or logic to WM_opengl_context_create to detect if it is creating it for the main window. If it is it should pass the callback function to GHOST_CreateOpenGLContext otherwise NULL.
    GHOST

  • GHOST_CreateOpenGLContext add callback function for support level.

  • add a message box/dialog box per OS. Text + Help button that opens an url to a support page

docs.blender.org

  • Add page how to update your driver. These pages will be per os/gpu vendor. Something like https://docs.blender.org/manual/en/latest/troubleshooting/gpu/windows/intel.html
Many GPU issues can be related to driver issues. It is not clear to users that their OS/HW/Driver combination has issues and needs to be updated. This task will detect the combination and the support level we give. There are 3 support level * Fully supported: the combination is known to be working. * Limited support: the combination can work, but might have some issues. * Unsupported: the combination is known not to work with Blender. A popup will be shown to the user (using a OS Message/Dialog Box) about the support level and a link to a docs.blender.org page describing what can be done to get better support. Question: An unknown driver combination should by default get a fully supported stamp. This might lead to future driver releases to not work correctly, and needs a new blender release for us to update the blacklisting. IMO this seems to be the best solution, as there are more driver releases then blender releases and gives a more friendly interaction with blender. Impact: **windowmanager/wm_platform_support** * add a callback function that will is passed to the GHOST context creation. This function will return a text and link that will be displayed ``` in an OS specific message box. The needs to be added to the `GHOST_CreateOpenGLContext`. When Blender is running in background the callback should never display any message box, but display the message in the console. ``` * add a parameter or logic to `WM_opengl_context_create` to detect if it is creating it for the main window. If it is it should pass the callback function to `GHOST_CreateOpenGLContext` otherwise NULL. **GHOST** * `GHOST_CreateOpenGLContext` add callback function for support level. * add a message box/dialog box per OS. Text + `Help` button that opens an url to a support page **docs.blender.org** * Add page how to update your driver. These pages will be per os/gpu vendor. Something like `https://docs.blender.org/manual/en/latest/troubleshooting/gpu/windows/intel.html`
Jeroen Bakker self-assigned this 2019-10-01 11:58:05 +02:00
Author
Member

Added subscribers: @Jeroen-Bakker, @LazyDodo

Added subscribers: @Jeroen-Bakker, @LazyDodo
Author
Member

Added subscriber: @fclem

Added subscriber: @fclem

Added subscriber: @brecht

Added subscriber: @brecht

The link should go to docs.blender.org instead of wiki.blender.org, since this is user documentation and not developer documentation.

We can indeed detect the OS and graphics card vendor, and send the user to a specific page like docs.blender.org/manual/en/latest/troubleshooting/gpu/windows/intel.html.

An unknown driver combination should by default get a fully supported stamp. This might lead to future driver releases to not work correctly, and needs a new blender release for us to update the blacklisting.
IMO this seems to be the best solution, as there are more driver releases then blender releases and gives a more friendly interaction with blender.

Agree, we should do blacklisting, not whitelisting.

The link should go to docs.blender.org instead of wiki.blender.org, since this is user documentation and not developer documentation. We can indeed detect the OS and graphics card vendor, and send the user to a specific page like `docs.blender.org/manual/en/latest/troubleshooting/gpu/windows/intel.html`. > An unknown driver combination should by default get a fully supported stamp. This might lead to future driver releases to not work correctly, and needs a new blender release for us to update the blacklisting. > IMO this seems to be the best solution, as there are more driver releases then blender releases and gives a more friendly interaction with blender. Agree, we should do blacklisting, not whitelisting.
Author
Member

@LazyDodo added a diff on showing system warnings/errors in GHOST.

Keep the patch here for reference P1122: Ghost message box

diff --git a/intern/ghost/GHOST_C-api.h b/intern/ghost/GHOST_C-api.h
index 20bb144a924..96c2017c697 100644
--- a/intern/ghost/GHOST_C-api.h
+++ b/intern/ghost/GHOST_C-api.h
@@ -949,6 +949,22 @@ extern void GHOST_BeginIME(GHOST_WindowHandle windowhandle,
  */
 extern void GHOST_EndIME(GHOST_WindowHandle windowhandle);
 
+/**
+ * Display a warning with OS Native messaging
+ * \param systemhandle The handle to the system
+ * \param title caption for the warning
+ * \param text  text body for the warning
+ */
+extern void GHOST_Warning(GHOST_SystemHandle systemhandle, const char *title, const char *text);
+
+/**
+ * Display an error with OS Native messaging
+ * \param systemhandle The handle to the system
+ * \param title caption for the error
+ * \param text  text body for the error
+ */
+extern void GHOST_Error(GHOST_SystemHandle systemhandle, const char *title, const char *text);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/intern/ghost/GHOST_ISystem.h b/intern/ghost/GHOST_ISystem.h
index 27be80a2f20..0d793888eaa 100644
--- a/intern/ghost/GHOST_ISystem.h
+++ b/intern/ghost/GHOST_ISystem.h
@@ -435,6 +435,20 @@ class GHOST_ISystem {
    */
   virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const = 0;
 
+  /**
+   * Display a warning with OS Native messaging
+   * \param title caption for the warning
+   * \param text  text body for the warning
+   */
+  virtual void warning(const STR_String &title, const STR_String &text) const = 0;
+
+  /**
+   * Display a error with OS Native messaging
+   * \param title caption for the warning
+   * \param text  text body for the warning
+   */
+  virtual void error(const STR_String &title, const STR_String &text) const = 0;
+
  protected:
   /**
    * Initialize the system.
diff --git a/intern/ghost/intern/GHOST_C-api.cpp b/intern/ghost/intern/GHOST_C-api.cpp
index a1a209af77a..c2b94038247 100644
--- a/intern/ghost/intern/GHOST_C-api.cpp
+++ b/intern/ghost/intern/GHOST_C-api.cpp
@@ -838,3 +838,15 @@ void GHOST_EndIME(GHOST_WindowHandle windowhandle)
 }
 
 #endif /* WITH_INPUT_IME */
+
+void GHOST_Warning(GHOST_SystemHandle systemhandle, const char *title, const char *text)
+{
+  GHOST_ISystem *system = (GHOST_ISystem *)systemhandle;
+  system->warning(title, text);
+}
+
+void GHOST_Error(GHOST_SystemHandle systemhandle, const char *title, const char *text)
+{
+  GHOST_ISystem *system = (GHOST_ISystem *)systemhandle;
+  system->error(title, text);
+}
\ No newline at end of file
diff --git a/intern/ghost/intern/GHOST_System.h b/intern/ghost/intern/GHOST_System.h
index fbf8af01e59..46bfe35f6b1 100644
--- a/intern/ghost/intern/GHOST_System.h
+++ b/intern/ghost/intern/GHOST_System.h
@@ -40,6 +40,7 @@ class GHOST_Event;
 class GHOST_TimerManager;
 class GHOST_Window;
 class GHOST_WindowManager;
+class STR_String;
 #ifdef WITH_INPUT_NDOF
 class GHOST_NDOFManager;
 #endif
@@ -317,6 +318,20 @@ class GHOST_System : public GHOST_ISystem {
    */
   virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const = 0;
 
+  /**
+   * Display a warning with OS Native messaging
+   * \param title caption for the warning
+   * \param text  text body for the warning
+   */
+  virtual void warning(const STR_String &title, const STR_String &text) const = 0;
+
+  /**
+   * Display a error with OS Native messaging
+   * \param title caption for the warning
+   * \param text  text body for the warning
+   */
+  virtual void error(const STR_String &title, const STR_String &text) const = 0;
+
  protected:
   /**
    * Initialize the system.
diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp
index 9073ed9944b..59aee00f2e1 100644
--- a/intern/ghost/intern/GHOST_SystemWin32.cpp
+++ b/intern/ghost/intern/GHOST_SystemWin32.cpp
@@ -356,12 +356,10 @@ GHOST_IContext *GHOST_SystemWin32::createOffscreenContext()
     goto finished;
   }
   else {
-    MessageBox(NULL,
-               "A graphics card and driver with support for OpenGL 3.3 or higher is required.\n"
-               "Installing the latest driver for your graphics card may resolve the issue.\n\n"
-               "The program will now close.",
-               "Blender - Unsupported Graphics Card or Driver",
-               MB_OK | MB_ICONERROR);
+    error("Blender - Unsupported Graphics Card or Driver",
+          "A graphics card and driver with support for OpenGL 3.3 or higher is required.\n"
+          "Installing the latest driver for your graphics card may resolve the issue.\n\n"
+          "The program will now close.");
     delete context;
     exit();
   }
@@ -1871,3 +1869,11 @@ int GHOST_SystemWin32::toggleConsole(int action)
 
   return m_consoleStatus;
 }
+
+void GHOST_SystemWin32::warning(const STR_String &title, const STR_String &text) const
+{
+}
+
+void GHOST_SystemWin32::error(const STR_String &title, const STR_String &text) const
+{
+}
diff --git a/intern/ghost/intern/GHOST_SystemWin32.h b/intern/ghost/intern/GHOST_SystemWin32.h
index 7ac6a3e3e20..b2d4a86a86f 100644
--- a/intern/ghost/intern/GHOST_SystemWin32.h
+++ b/intern/ghost/intern/GHOST_SystemWin32.h
@@ -203,6 +203,20 @@ class GHOST_SystemWin32 : public GHOST_System {
    */
   void putClipboard(GHOST_TInt8 *buffer, bool selection) const;
 
+  /**
+   * Display a warning with OS Native messaging
+   * \param title caption for the warning
+   * \param text  text body for the warning
+   */
+  void warning(const STR_String &title, const STR_String &text) const;
+
+  /**
+   * Display a error with OS Native messaging
+   * \param title caption for the warning
+   * \param text  text body for the warning
+   */
+  void error(const STR_String &title, const STR_String &text) const;
+
   /**
    * Creates a drag'n'drop event and pushes it immediately onto the event queue.
    * Called by GHOST_DropTargetWin32 class.
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 568b904dcb7..544157df81a 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -818,6 +818,9 @@ void WM_generic_callback_free(struct wmGenericCallback *callback);
 
 void WM_generic_user_data_free(struct wmGenericUserData *user_data);
 
+void WM_system_warning(const char *title, const char *text);
+void WM_system_error(const char *title, const char *text);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 2c26a15dce0..52bc65c8354 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -2394,4 +2394,14 @@ void WM_opengl_context_release(void *context)
   GHOST_ReleaseOpenGLContext((GHOST_ContextHandle)context);
 }
 
+void WM_system_warning(const char *title, const char *text)
+{
+  GHOST_Warning(g_system, title, text);
+}
+
+void WM_system_error(const char *title, const char *text)
+{
+  GHOST_Error(g_system, title, text);
+}
+
 /** \} */
@LazyDodo added a diff on showing system warnings/errors in GHOST. Keep the patch here for reference [P1122: Ghost message box](https://archive.blender.org/developer/P1122.txt) ```diff diff --git a/intern/ghost/GHOST_C-api.h b/intern/ghost/GHOST_C-api.h index 20bb144a924..96c2017c697 100644 --- a/intern/ghost/GHOST_C-api.h +++ b/intern/ghost/GHOST_C-api.h @@ -949,6 +949,22 @@ extern void GHOST_BeginIME(GHOST_WindowHandle windowhandle, */ extern void GHOST_EndIME(GHOST_WindowHandle windowhandle); +/** + * Display a warning with OS Native messaging + * \param systemhandle The handle to the system + * \param title caption for the warning + * \param text text body for the warning + */ +extern void GHOST_Warning(GHOST_SystemHandle systemhandle, const char *title, const char *text); + +/** + * Display an error with OS Native messaging + * \param systemhandle The handle to the system + * \param title caption for the error + * \param text text body for the error + */ +extern void GHOST_Error(GHOST_SystemHandle systemhandle, const char *title, const char *text); + #ifdef __cplusplus } #endif diff --git a/intern/ghost/GHOST_ISystem.h b/intern/ghost/GHOST_ISystem.h index 27be80a2f20..0d793888eaa 100644 --- a/intern/ghost/GHOST_ISystem.h +++ b/intern/ghost/GHOST_ISystem.h @@ -435,6 +435,20 @@ class GHOST_ISystem { */ virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const = 0; + /** + * Display a warning with OS Native messaging + * \param title caption for the warning + * \param text text body for the warning + */ + virtual void warning(const STR_String &title, const STR_String &text) const = 0; + + /** + * Display a error with OS Native messaging + * \param title caption for the warning + * \param text text body for the warning + */ + virtual void error(const STR_String &title, const STR_String &text) const = 0; + protected: /** * Initialize the system. diff --git a/intern/ghost/intern/GHOST_C-api.cpp b/intern/ghost/intern/GHOST_C-api.cpp index a1a209af77a..c2b94038247 100644 --- a/intern/ghost/intern/GHOST_C-api.cpp +++ b/intern/ghost/intern/GHOST_C-api.cpp @@ -838,3 +838,15 @@ void GHOST_EndIME(GHOST_WindowHandle windowhandle) } #endif /* WITH_INPUT_IME */ + +void GHOST_Warning(GHOST_SystemHandle systemhandle, const char *title, const char *text) +{ + GHOST_ISystem *system = (GHOST_ISystem *)systemhandle; + system->warning(title, text); +} + +void GHOST_Error(GHOST_SystemHandle systemhandle, const char *title, const char *text) +{ + GHOST_ISystem *system = (GHOST_ISystem *)systemhandle; + system->error(title, text); +} \ No newline at end of file diff --git a/intern/ghost/intern/GHOST_System.h b/intern/ghost/intern/GHOST_System.h index fbf8af01e59..46bfe35f6b1 100644 --- a/intern/ghost/intern/GHOST_System.h +++ b/intern/ghost/intern/GHOST_System.h @@ -40,6 +40,7 @@ class GHOST_Event; class GHOST_TimerManager; class GHOST_Window; class GHOST_WindowManager; +class STR_String; #ifdef WITH_INPUT_NDOF class GHOST_NDOFManager; #endif @@ -317,6 +318,20 @@ class GHOST_System : public GHOST_ISystem { */ virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const = 0; + /** + * Display a warning with OS Native messaging + * \param title caption for the warning + * \param text text body for the warning + */ + virtual void warning(const STR_String &title, const STR_String &text) const = 0; + + /** + * Display a error with OS Native messaging + * \param title caption for the warning + * \param text text body for the warning + */ + virtual void error(const STR_String &title, const STR_String &text) const = 0; + protected: /** * Initialize the system. diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp index 9073ed9944b..59aee00f2e1 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.cpp +++ b/intern/ghost/intern/GHOST_SystemWin32.cpp @@ -356,12 +356,10 @@ GHOST_IContext *GHOST_SystemWin32::createOffscreenContext() goto finished; } else { - MessageBox(NULL, - "A graphics card and driver with support for OpenGL 3.3 or higher is required.\n" - "Installing the latest driver for your graphics card may resolve the issue.\n\n" - "The program will now close.", - "Blender - Unsupported Graphics Card or Driver", - MB_OK | MB_ICONERROR); + error("Blender - Unsupported Graphics Card or Driver", + "A graphics card and driver with support for OpenGL 3.3 or higher is required.\n" + "Installing the latest driver for your graphics card may resolve the issue.\n\n" + "The program will now close."); delete context; exit(); } @@ -1871,3 +1869,11 @@ int GHOST_SystemWin32::toggleConsole(int action) return m_consoleStatus; } + +void GHOST_SystemWin32::warning(const STR_String &title, const STR_String &text) const +{ +} + +void GHOST_SystemWin32::error(const STR_String &title, const STR_String &text) const +{ +} diff --git a/intern/ghost/intern/GHOST_SystemWin32.h b/intern/ghost/intern/GHOST_SystemWin32.h index 7ac6a3e3e20..b2d4a86a86f 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.h +++ b/intern/ghost/intern/GHOST_SystemWin32.h @@ -203,6 +203,20 @@ class GHOST_SystemWin32 : public GHOST_System { */ void putClipboard(GHOST_TInt8 *buffer, bool selection) const; + /** + * Display a warning with OS Native messaging + * \param title caption for the warning + * \param text text body for the warning + */ + void warning(const STR_String &title, const STR_String &text) const; + + /** + * Display a error with OS Native messaging + * \param title caption for the warning + * \param text text body for the warning + */ + void error(const STR_String &title, const STR_String &text) const; + /** * Creates a drag'n'drop event and pushes it immediately onto the event queue. * Called by GHOST_DropTargetWin32 class. diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 568b904dcb7..544157df81a 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -818,6 +818,9 @@ void WM_generic_callback_free(struct wmGenericCallback *callback); void WM_generic_user_data_free(struct wmGenericUserData *user_data); +void WM_system_warning(const char *title, const char *text); +void WM_system_error(const char *title, const char *text); + #ifdef __cplusplus } #endif diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 2c26a15dce0..52bc65c8354 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -2394,4 +2394,14 @@ void WM_opengl_context_release(void *context) GHOST_ReleaseOpenGLContext((GHOST_ContextHandle)context); } +void WM_system_warning(const char *title, const char *text) +{ + GHOST_Warning(g_system, title, text); +} + +void WM_system_error(const char *title, const char *text) +{ + GHOST_Error(g_system, title, text); +} + /** \} */ ```

Added subscriber: @Russ1642

Added subscriber: @Russ1642

Blacklisting is fine but don't give an "everything's great" message by default. It's ok to say "This GPU/driver combination's support level is unknown".

Blacklisting is fine but don't give an "everything's great" message by default. It's ok to say "This GPU/driver combination's support level is unknown".

Changed status from 'Open' to: 'Resolved'

Changed status from 'Open' to: 'Resolved'

Follow up tasks:

  • #70520 (Fill limited and unuspported GPUs list)
  • #70521 (Better button labels for limited and unsupported GPU warning)
Follow up tasks: * #70520 (Fill limited and unuspported GPUs list) * #70521 (Better button labels for limited and unsupported GPU warning)
Thomas Dinges added this to the 2.81 milestone 2023-02-08 16:46:56 +01:00
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
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
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
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
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
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
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
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 Info 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
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#70416
No description provided.