Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2022-05-19 01:31:01 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-05-19 01:35:36 +0300
commitf4028630bfdaa0e22be0872f209505dbb6b0aa2d (patch)
treef496d55445f7c0634007517d6f08ba8fc2ca9e13
parent769cdccd0e56f1a513f9555d31485f06b363860e (diff)
EEVEE-Next: Display error instead of crashing on unsupported hardware
This message will remain in effect until we bump up the minimum hardware requirement.
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_engine.cc34
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_instance.cc2
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_instance.hh2
3 files changed, 36 insertions, 2 deletions
diff --git a/source/blender/draw/engines/eevee_next/eevee_engine.cc b/source/blender/draw/engines/eevee_next/eevee_engine.cc
index d6d169620ab..be0adfad568 100644
--- a/source/blender/draw/engines/eevee_next/eevee_engine.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_engine.cc
@@ -5,6 +5,7 @@
#include "BKE_global.h"
#include "BLI_rect.h"
+#include "GPU_capabilities.h"
#include "GPU_framebuffer.h"
#include "ED_view3d.h"
@@ -24,10 +25,17 @@ struct EEVEE_Data {
DRWViewportEmptyList *psl;
DRWViewportEmptyList *stl;
eevee::Instance *instance;
+
+ char info[GPU_INFO_SIZE];
};
static void eevee_engine_init(void *vedata)
{
+ /* TODO(fclem): Remove once it is minimum required. */
+ if (!GPU_shader_storage_buffer_objects_support()) {
+ return;
+ }
+
EEVEE_Data *ved = reinterpret_cast<EEVEE_Data *>(vedata);
if (ved->instance == nullptr) {
ved->instance = new eevee::Instance();
@@ -81,22 +89,37 @@ static void eevee_engine_init(void *vedata)
static void eevee_draw_scene(void *vedata)
{
+ EEVEE_Data *ved = reinterpret_cast<EEVEE_Data *>(vedata);
+ if (!GPU_shader_storage_buffer_objects_support()) {
+ STRNCPY(ved->info, "Error: No shader storage buffer support");
+ return;
+ }
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
- reinterpret_cast<EEVEE_Data *>(vedata)->instance->draw_viewport(dfbl);
+ ved->instance->draw_viewport(dfbl);
+ STRNCPY(ved->info, ved->instance->info.c_str());
}
static void eevee_cache_init(void *vedata)
{
+ if (!GPU_shader_storage_buffer_objects_support()) {
+ return;
+ }
reinterpret_cast<EEVEE_Data *>(vedata)->instance->begin_sync();
}
static void eevee_cache_populate(void *vedata, Object *object)
{
+ if (!GPU_shader_storage_buffer_objects_support()) {
+ return;
+ }
reinterpret_cast<EEVEE_Data *>(vedata)->instance->object_sync(object);
}
static void eevee_cache_finish(void *vedata)
{
+ if (!GPU_shader_storage_buffer_objects_support()) {
+ return;
+ }
reinterpret_cast<EEVEE_Data *>(vedata)->instance->end_sync();
}
@@ -107,6 +130,9 @@ static void eevee_engine_free()
static void eevee_instance_free(void *instance)
{
+ if (!GPU_shader_storage_buffer_objects_support()) {
+ return;
+ }
delete reinterpret_cast<eevee::Instance *>(instance);
}
@@ -115,11 +141,17 @@ static void eevee_render_to_image(void *UNUSED(vedata),
struct RenderLayer *layer,
const struct rcti *UNUSED(rect))
{
+ if (!GPU_shader_storage_buffer_objects_support()) {
+ return;
+ }
UNUSED_VARS(engine, layer);
}
static void eevee_render_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
{
+ if (!GPU_shader_storage_buffer_objects_support()) {
+ return;
+ }
UNUSED_VARS(engine, scene, view_layer);
}
diff --git a/source/blender/draw/engines/eevee_next/eevee_instance.cc b/source/blender/draw/engines/eevee_next/eevee_instance.cc
index 263acd701a2..d037b46eaef 100644
--- a/source/blender/draw/engines/eevee_next/eevee_instance.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_instance.cc
@@ -50,6 +50,8 @@ void Instance::init(const int2 &output_res,
v3d = v3d_;
rv3d = rv3d_;
+ info = "";
+
update_eval_members();
main_view.init(output_res);
diff --git a/source/blender/draw/engines/eevee_next/eevee_instance.hh b/source/blender/draw/engines/eevee_next/eevee_instance.hh
index dd72169c854..84be59fc5f0 100644
--- a/source/blender/draw/engines/eevee_next/eevee_instance.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_instance.hh
@@ -58,7 +58,7 @@ class Instance {
const RegionView3D *rv3d;
/* Info string displayed at the top of the render / viewport. */
- char info[64];
+ std::string info = "";
public:
Instance()