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-02-03 20:29:38 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-02-03 20:29:55 +0300
commit8af5e2d246e3876d93e7fe3b288fcbabe7a843a8 (patch)
treeb13150ab9fb94161d27c42041b9067c20b4bd873 /source/blender/draw
parentc785a8e1661893f7d628ff641a1824418021e434 (diff)
EEVEE: Fix more shader issues
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/eevee/eevee_shader.cc23
-rw-r--r--source/blender/draw/engines/eevee/shaders/eevee_lookdev_background_frag.glsl1
-rw-r--r--source/blender/draw/engines/eevee/shaders/eevee_nodetree_eval_lib.glsl15
-rw-r--r--source/blender/draw/engines/eevee/shaders/eevee_subsurface_eval_frag.glsl1
-rw-r--r--source/blender/draw/engines/eevee/shaders/infos/eevee_material_info.hh14
5 files changed, 43 insertions, 11 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_shader.cc b/source/blender/draw/engines/eevee/eevee_shader.cc
index 792919cd8f6..14d022aabe0 100644
--- a/source/blender/draw/engines/eevee/eevee_shader.cc
+++ b/source/blender/draw/engines/eevee/eevee_shader.cc
@@ -272,6 +272,8 @@ void ShaderModule::material_create_info_ammend(GPUMaterial *gpumat, GPUCodegenOu
GPUCodegenOutput &codegen = *codegen_;
ShaderCreateInfo &info = *reinterpret_cast<ShaderCreateInfo *>(codegen.create_info);
+ info.auto_resource_location(true);
+
std::stringstream global_vars;
switch (geometry_type) {
case MAT_GEOM_MESH:
@@ -308,6 +310,22 @@ void ShaderModule::material_create_info_ammend(GPUMaterial *gpumat, GPUCodegenOu
break;
}
+ const bool do_fragment_attrib_load = (geometry_type == MAT_GEOM_WORLD);
+
+ if (do_fragment_attrib_load && !info.vertex_out_interfaces_.is_empty()) {
+ /* Codegen outputs only one interface. */
+ const StageInterfaceInfo &iface = *info.vertex_out_interfaces_.first();
+ /* Globals the attrib_load() can write to when it is in the fragment shader. */
+ global_vars << "struct " << iface.name << " {\n";
+ for (auto &inout : iface.inouts) {
+ global_vars << " " << inout.type << " " << inout.name << ";\n";
+ }
+ global_vars << "};\n";
+ global_vars << iface.name << " " << iface.instance_name << ";\n";
+
+ info.vertex_out_interfaces_.clear();
+ }
+
std::stringstream attr_load;
attr_load << "void attrib_load()\n";
attr_load << "{\n";
@@ -316,7 +334,7 @@ void ShaderModule::material_create_info_ammend(GPUMaterial *gpumat, GPUCodegenOu
std::stringstream vert_gen, frag_gen;
- if (geometry_type == MAT_GEOM_WORLD) {
+ if (do_fragment_attrib_load) {
frag_gen << global_vars.str() << attr_load.str();
}
else {
@@ -360,7 +378,7 @@ void ShaderModule::material_create_info_ammend(GPUMaterial *gpumat, GPUCodegenOu
frag_gen << ((codegen.thickness) ? codegen.thickness : "return 0.1;\n");
frag_gen << "}\n\n";
- info.fragment_source_generated = vert_gen.str();
+ info.fragment_source_generated = frag_gen.str();
}
/* Geometry Info. */
@@ -413,6 +431,7 @@ void ShaderModule::material_create_info_ammend(GPUMaterial *gpumat, GPUCodegenOu
}
else {
info.additional_info("eevee_surface_depth_simple");
+ info.fragment_source_generated = "";
}
break;
case MAT_PIPE_DEFERRED:
diff --git a/source/blender/draw/engines/eevee/shaders/eevee_lookdev_background_frag.glsl b/source/blender/draw/engines/eevee/shaders/eevee_lookdev_background_frag.glsl
index 0934aa3d2b4..b70b39a9467 100644
--- a/source/blender/draw/engines/eevee/shaders/eevee_lookdev_background_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/eevee_lookdev_background_frag.glsl
@@ -7,6 +7,7 @@
*/
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
+#pragma BLENDER_REQUIRE(common_math_lib.glsl)
void main()
{
diff --git a/source/blender/draw/engines/eevee/shaders/eevee_nodetree_eval_lib.glsl b/source/blender/draw/engines/eevee/shaders/eevee_nodetree_eval_lib.glsl
index 5bc3a1ecc0f..1df78ee62e3 100644
--- a/source/blender/draw/engines/eevee/shaders/eevee_nodetree_eval_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/eevee_nodetree_eval_lib.glsl
@@ -95,3 +95,18 @@ void ntree_eval_weights()
g_refraction_data.color.r += g_diffuse_data.color.r;
}
}
+
+/* Prototypes. */
+void attrib_load();
+vec3 nodetree_displacement();
+Closure nodetree_surface();
+Closure nodetree_volume();
+float nodetree_thickness();
+
+#ifdef EEVEE_MATERIAL_STUBS
+#define attrib_load()
+#define nodetree_displacement() vec3(0)
+#define nodetree_surface() CLOSURE_DEFAULT
+#define nodetree_volume() CLOSURE_DEFAULT
+#define nodetree_thickness() 0.1
+#endif
diff --git a/source/blender/draw/engines/eevee/shaders/eevee_subsurface_eval_frag.glsl b/source/blender/draw/engines/eevee/shaders/eevee_subsurface_eval_frag.glsl
index 25b47b5501e..70fe3af6832 100644
--- a/source/blender/draw/engines/eevee/shaders/eevee_subsurface_eval_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/eevee_subsurface_eval_frag.glsl
@@ -15,7 +15,6 @@
#pragma BLENDER_REQUIRE(common_math_geom_lib.glsl)
#pragma BLENDER_REQUIRE(eevee_sampling_lib.glsl)
#pragma BLENDER_REQUIRE(eevee_gbuffer_lib.glsl)
-#pragma BLENDER_REQUIRE(eevee_closure_lib.glsl)
vec3 burley_setup(vec3 radius, vec3 albedo)
{
diff --git a/source/blender/draw/engines/eevee/shaders/infos/eevee_material_info.hh b/source/blender/draw/engines/eevee/shaders/infos/eevee_material_info.hh
index 942ed0b7c55..01a20bc4b1e 100644
--- a/source/blender/draw/engines/eevee/shaders/infos/eevee_material_info.hh
+++ b/source/blender/draw/engines/eevee/shaders/infos/eevee_material_info.hh
@@ -39,11 +39,13 @@ GPU_SHADER_CREATE_INFO(eevee_surface_hair)
GPU_SHADER_CREATE_INFO(eevee_surface_lookdev)
.vertex_in(0, Type::VEC3, "pos")
.vertex_in(1, Type::VEC3, "nor")
- .vertex_source("eevee_surface_lookdev_vert.glsl");
+ .vertex_source("eevee_surface_lookdev_vert.glsl")
+ .additional_info("draw_mesh", "draw_resource_id_varying");
GPU_SHADER_CREATE_INFO(eevee_surface_world)
.builtins(BuiltinBits::VERTEX_ID)
- .vertex_source("eevee_surface_world_vert.glsl");
+ .vertex_source("eevee_surface_world_vert.glsl")
+ .additional_info("draw_modelmat", "draw_resource_id_varying");
/** \} */
@@ -121,6 +123,7 @@ GPU_SHADER_CREATE_INFO(eevee_surface_background)
* \{ */
GPU_SHADER_CREATE_INFO(eevee_background_lookdev)
+ .do_static_compilation(true)
.additional_info("eevee_shared")
.uniform_buf(0, "LightProbeInfoData", "probes_buf")
.sampler(0, ImageType::FLOAT_CUBE_ARRAY, "lightprobe_cube_tx")
@@ -162,12 +165,7 @@ GPU_SHADER_CREATE_INFO(eevee_volume_deferred)
#ifdef DEBUG
/* Stub functions defined by the material evaluation. */
-GPU_SHADER_CREATE_INFO(eevee_material_stub)
- .define("attrib_load()")
- .define("nodetree_displacement()", "vec3(0)")
- .define("nodetree_surface()", "CLOSURE_DEFAULT")
- .define("nodetree_volume()", "CLOSURE_DEFAULT")
- .define("nodetree_thickness()", "0.1");
+GPU_SHADER_CREATE_INFO(eevee_material_stub).define("EEVEE_MATERIAL_STUBS");
# define EEVEE_MAT_FINAL_VARIATION(name, ...) \
GPU_SHADER_CREATE_INFO(name) \