[Bf-blender-cvs] [dd9579ccd43] soc-2019-npr: LANPR: Added error message for failed DPIX shaders.

YimingWu noreply at git.blender.org
Fri Jun 28 08:05:44 CEST 2019


Commit: dd9579ccd437876f226f334c00c75d244f25d5f5
Author: YimingWu
Date:   Fri Jun 28 14:05:11 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBdd9579ccd437876f226f334c00c75d244f25d5f5

LANPR: Added error message for failed DPIX shaders.

===================================================================

M	release/scripts/startup/bl_ui/properties_render.py
M	source/blender/draw/engines/lanpr/lanpr_access.c
M	source/blender/draw/engines/lanpr/lanpr_all.h
M	source/blender/draw/engines/lanpr/lanpr_dpix.c
M	source/blender/draw/engines/lanpr/lanpr_engine.c
M	source/blender/makesrna/intern/rna_scene.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 5449d266b37..79d610759ad 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -731,6 +731,10 @@ class RENDER_PT_lanpr(RenderButtonsPanel, Panel):
 
         layout.prop(lanpr, "master_mode", expand=True) 
 
+        if mode == "DPIX" and lanpr.shader_error:
+            layout.label(text="DPIX transfor shader compile error!")
+            return;
+
         if scene.render.engine!='BLENDER_LANPR':
             layout.label(text='Only Software mode result is used to generate GP stroke.')
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_access.c b/source/blender/draw/engines/lanpr/lanpr_access.c
index 3d3af4352e0..9d0e0a94f35 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.c
+++ b/source/blender/draw/engines/lanpr/lanpr_access.c
@@ -133,6 +133,11 @@ void lanpr_update_data_for_external(Depsgraph *depsgraph)
   }
 }
 
+bool lanpr_dpix_shader_error()
+{
+  return lanpr_share.dpix_shader_error;
+}
+
 void lanpr_copy_data(Scene *from, Scene *to)
 {
   SceneLANPR *lanpr = &from->lanpr;
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index e04ef61c93c..96c8e39bc93 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -93,6 +93,7 @@ typedef struct LANPR_SharedResource {
   /* DPIX */
   GPUShader *dpix_transform_shader;
   GPUShader *dpix_preview_shader;
+  int dpix_shader_error;
 
   /* Software */
   GPUShader *software_shader;
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 27b2f4ef504..bda66b799fe 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -89,6 +89,10 @@ void lanpr_init_atlas_inputs(void *ved)
         NULL,
         datatoc_lanpr_dpix_project_clip_frag_glsl,
         NULL);
+    if (!lanpr_share.dpix_transform_shader) {
+      lanpr_share.dpix_shader_error = 1;
+      printf("LANPR: DPIX transform shader compile error.");
+    }
   }
   if (!lanpr_share.dpix_preview_shader) {
     lanpr_share.dpix_preview_shader = DRW_shader_create(
@@ -96,6 +100,10 @@ void lanpr_init_atlas_inputs(void *ved)
         datatoc_lanpr_dpix_preview_geom_glsl,
         datatoc_lanpr_dpix_preview_frag_glsl,
         NULL);
+    if (!lanpr_share.dpix_transform_shader) {
+      lanpr_share.dpix_shader_error = 1;
+      printf("LANPR: DPIX transform shader compile error.");
+    }
   }
 }
 void lanpr_destroy_atlas(void *ved)
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 51f1adf894b..780c271a7be 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -256,7 +256,8 @@ static void lanpr_cache_init(void *vedata)
     DRW_shgroup_uniform_int(stl->g_data->edge_thinning_shgrp, "stage", &stl->g_data->stage, 1);
     DRW_shgroup_call(stl->g_data->edge_thinning_shgrp, quad, NULL);
   }
-  else if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer) {
+  else if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer &&
+           !lanpr_share.dpix_shader_error) {
     LANPR_LineLayer *ll = lanpr->line_layers.first;
     psl->dpix_transform_pass = DRW_pass_create("DPIX Transform Stage", DRW_STATE_WRITE_COLOR);
     stl->g_data->dpix_transform_shgrp = DRW_shgroup_create(lanpr_share.dpix_transform_shader,
@@ -438,7 +439,8 @@ static void lanpr_cache_populate(void *vedata, Object *ob)
     DRW_shgroup_call_no_cull(stl->g_data->multipass_shgrp, geom, ob);
   }
 
-  if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer) {
+  if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer &&
+      !lanpr_share.dpix_shader_error) {
     int idx = pd->begin_index;
     if (lanpr->reloaded) {
       pd->begin_index = lanpr_feed_atlas_data_obj(vedata,
@@ -465,7 +467,8 @@ static void lanpr_cache_finish(void *vedata)
   float mat[4][4];
   unit_m4(mat);
 
-  if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer) {
+  if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer &&
+      !lanpr_share.dpix_shader_error) {
     if (lanpr->reloaded) {
       if (lanpr_share.render_buffer_shared) {
         lanpr_feed_atlas_data_intersection_cache(vedata,
@@ -558,7 +561,7 @@ static void lanpr_draw_scene_exec(void *vedata, GPUFrameBuffer *dfb, int is_rend
   SceneLANPR *lanpr = &scene->lanpr;
   View3D *v3d = draw_ctx->v3d;
 
-  if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX) {
+  if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && !lanpr_share.dpix_shader_error) {
     DRW_draw_pass(psl->color_pass);
     lanpr_dpix_draw_scene(txl, fbl, psl, stl->g_data, lanpr, dfb, is_render);
   }
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 6c382c62e65..87cb6c13dd2 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2483,6 +2483,13 @@ void rna_lanpr_active_line_layer_set(PointerRNA *ptr, PointerRNA value)
   lanpr->active_layer = value.data;
 }
 
+extern bool lanpr_dpix_shader_error();
+
+static bool rna_lanpr_shader_error_get(PointerRNA *ptr)
+{
+  return lanpr_dpix_shader_error();
+}
+
 #else
 
 /* Grease Pencil Interpolation tool settings */
@@ -7362,6 +7369,12 @@ static void rna_def_scene_lanpr(BlenderRNA *brna)
                            "Enable Chain Connection",
                            "Connect short chains in the image space into one longer chain");
 
+  prop = RNA_def_property(srna, "shader_error", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_default(prop, 0);
+  RNA_def_property_boolean_funcs(prop, "rna_lanpr_shader_error_get", "");
+  RNA_def_property_ui_text(
+      prop, "DPIX Shader Error", "Can't compile DPIX transform shader on your GPU.");
+
   prop = RNA_def_property(srna, "chaining_geometry_threshold", PROP_FLOAT, PROP_NONE);
   RNA_def_property_float_default(prop, 0.1f);
   RNA_def_property_ui_text(prop,



More information about the Bf-blender-cvs mailing list