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-01-26 14:46:37 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-01-26 14:46:37 +0300
commit5b299e5999e2b59e30edd4e770f64aa700e482d6 (patch)
tree17052358b339e20c44ca942e62b735ef63b23f88 /source/blender/draw/engines/workbench/shaders
parent9bce134e56c28045aee37080f5c5b6622a07927b (diff)
D13910: Workbench: Port shaders to use GPUShaderCreateInfo
Also adds a few things to GPUShader for easily create shaders. Heavy usage of macros to compose the createInfo and avoid duplications and copy paste bugs. This makes the link between the shader request functions (in workbench_shader.cc) and the actual createInfo a bit obscure since the names are composed and not searchable. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D13910
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders')
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh41
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_effect_antialiasing_info.hh64
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_effect_cavity_info.hh (renamed from source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_info.hh)5
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_effect_dof_info.hh55
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_effect_outline_info.hh11
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_merge_infront_info.hh9
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh (renamed from source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh)93
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_shadow_info.hh98
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_transparent_resolve_info.hh10
-rw-r--r--source/blender/draw/engines/workbench/shaders/infos/workbench_volume_info.hh114
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_cavity_lib.glsl8
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl11
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_curvature_lib.glsl2
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl48
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_frag.glsl12
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl31
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_effect_outline_frag.glsl8
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_frag.glsl39
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_vert.glsl4
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_effect_taa_frag.glsl5
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl9
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_matcap_lib.glsl12
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl10
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_merge_infront_frag.glsl6
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl11
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_prepass_hair_vert.glsl20
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl15
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl22
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_shader_interface_lib.glsl17
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl45
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_shadow_debug_frag.glsl6
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl32
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_shadow_vert.glsl14
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl15
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_transparent_resolve_frag.glsl7
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl32
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl14
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl8
38 files changed, 498 insertions, 465 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
new file mode 100644
index 00000000000..030be382a14
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
@@ -0,0 +1,41 @@
+
+#include "gpu_shader_create_info.hh"
+
+/* -------------------------------------------------------------------- */
+/** \name Base Composite
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_composite)
+ .sampler(0, ImageType::FLOAT_2D, "normalBuffer", Frequency::PASS)
+ .sampler(1, ImageType::FLOAT_2D, "materialBuffer", Frequency::PASS)
+ .uniform_buf(4, "WorldData", "world_data", Frequency::PASS)
+ .push_constant(0, Type::BOOL, "forceShadowing")
+ .fragment_out(0, Type::VEC4, "fragColor")
+ .typedef_source("workbench_shader_shared.h")
+ .fragment_source("workbench_composite_frag.glsl")
+ .additional_info("draw_fullscreen");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Lighting Type
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_composite_studio)
+ .define("V3D_LIGHTING_STUDIO")
+ .additional_info("workbench_composite")
+ .do_static_compilation(true);
+
+GPU_SHADER_CREATE_INFO(workbench_composite_matcap)
+ .define("V3D_LIGHTING_MATCAP")
+ .sampler(2, ImageType::FLOAT_2D, "matcap_diffuse_tx", Frequency::PASS)
+ .sampler(3, ImageType::FLOAT_2D, "matcap_specular_tx", Frequency::PASS)
+ .additional_info("workbench_composite")
+ .do_static_compilation(true);
+
+GPU_SHADER_CREATE_INFO(workbench_composite_flat)
+ .define("V3D_LIGHTING_FLAT")
+ .additional_info("workbench_composite")
+ .do_static_compilation(true);
+
+/** \} */
diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_antialiasing_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_antialiasing_info.hh
new file mode 100644
index 00000000000..00978b5c43b
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_antialiasing_info.hh
@@ -0,0 +1,64 @@
+
+#include "gpu_shader_create_info.hh"
+
+/* -------------------------------------------------------------------- */
+/** \name TAA
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_taa)
+ .sampler(0, ImageType::FLOAT_2D, "colorBuffer")
+ .push_constant(0, Type::FLOAT, "samplesWeights", 9)
+ .fragment_out(0, Type::VEC4, "fragColor")
+ .fragment_source("workbench_effect_taa_frag.glsl")
+ .additional_info("draw_fullscreen")
+ .do_static_compilation(true);
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name SMAA
+ * \{ */
+
+GPU_SHADER_INTERFACE_INFO(workbench_smaa_iface, "")
+ .smooth(Type::VEC2, "uvs")
+ .smooth(Type::VEC2, "pixcoord")
+ .smooth(Type::VEC4, "offset[3]");
+
+GPU_SHADER_CREATE_INFO(workbench_smaa)
+ .define("SMAA_GLSL_3")
+ .define("SMAA_RT_METRICS", "viewportMetrics")
+ .define("SMAA_PRESET_HIGH")
+ .define("SMAA_LUMA_WEIGHT", "float4(1.0, 1.0, 1.0, 1.0)")
+ .define("SMAA_NO_DISCARD")
+ .vertex_out(workbench_smaa_iface)
+ .push_constant(1, Type::VEC4, "viewportMetrics")
+ .vertex_source("workbench_effect_smaa_vert.glsl")
+ .fragment_source("workbench_effect_smaa_frag.glsl");
+
+GPU_SHADER_CREATE_INFO(workbench_smaa_stage_0)
+ .define("SMAA_STAGE", "0")
+ .sampler(0, ImageType::FLOAT_2D, "colorTex")
+ .fragment_out(0, Type::VEC2, "out_edges")
+ .additional_info("workbench_smaa")
+ .do_static_compilation(true);
+
+GPU_SHADER_CREATE_INFO(workbench_smaa_stage_1)
+ .define("SMAA_STAGE", "1")
+ .sampler(0, ImageType::FLOAT_2D, "edgesTex")
+ .sampler(1, ImageType::FLOAT_2D, "areaTex")
+ .sampler(2, ImageType::FLOAT_2D, "searchTex")
+ .fragment_out(0, Type::VEC4, "out_weights")
+ .additional_info("workbench_smaa")
+ .do_static_compilation(true);
+
+GPU_SHADER_CREATE_INFO(workbench_smaa_stage_2)
+ .define("SMAA_STAGE", "2")
+ .sampler(0, ImageType::FLOAT_2D, "colorTex")
+ .sampler(1, ImageType::FLOAT_2D, "blendTex")
+ .push_constant(2, Type::FLOAT, "mixFactor")
+ .push_constant(3, Type::FLOAT, "taaAccumulatedWeight")
+ .fragment_out(0, Type::VEC4, "out_color")
+ .additional_info("workbench_smaa")
+ .do_static_compilation(true);
+
+/** \} */
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_cavity_info.hh
index 31e5f5e7641..60d79ed50d9 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_info.hh
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_cavity_info.hh
@@ -3,10 +3,13 @@
GPU_SHADER_CREATE_INFO(workbench_effect_cavity_common)
.fragment_out(0, Type::VEC4, "fragColor")
- .sampler(0, ImageType::FLOAT_2D, "depthBuffer")
+ .sampler(0, ImageType::DEPTH_2D, "depthBuffer")
.sampler(1, ImageType::FLOAT_2D, "normalBuffer")
.sampler(2, ImageType::UINT_2D, "objectIdBuffer")
+ .sampler(3, ImageType::FLOAT_2D, "cavityJitter")
.uniform_buf(3, "vec4", "samples_coords[512]")
+ .uniform_buf(4, "WorldData", "world_data", Frequency::PASS)
+ .typedef_source("workbench_shader_shared.h")
.fragment_source("workbench_effect_cavity_frag.glsl")
.additional_info("draw_fullscreen")
.additional_info("draw_view");
diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_dof_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_dof_info.hh
new file mode 100644
index 00000000000..a885fca6f07
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_dof_info.hh
@@ -0,0 +1,55 @@
+
+#include "gpu_shader_create_info.hh"
+
+GPU_SHADER_CREATE_INFO(workbench_effect_dof)
+ /* TODO(fclem): Split resources per stage. */
+ .sampler(0, ImageType::FLOAT_2D, "inputCocTex")
+ .sampler(1, ImageType::FLOAT_2D, "maxCocTilesTex")
+ .sampler(2, ImageType::FLOAT_2D, "sceneColorTex")
+ .sampler(3, ImageType::FLOAT_2D, "sceneDepthTex")
+ .sampler(4, ImageType::FLOAT_2D, "backgroundTex")
+ .sampler(5, ImageType::FLOAT_2D, "halfResColorTex")
+ .sampler(6, ImageType::FLOAT_2D, "blurTex")
+ .sampler(7, ImageType::FLOAT_2D, "noiseTex")
+ .push_constant(0, Type::VEC2, "invertedViewportSize")
+ .push_constant(1, Type::VEC2, "nearFar")
+ .push_constant(2, Type::VEC3, "dofParams")
+ .push_constant(3, Type::FLOAT, "noiseOffset")
+ .fragment_source("workbench_effect_dof_frag.glsl")
+ .additional_info("draw_fullscreen")
+ .additional_info("draw_view");
+
+GPU_SHADER_CREATE_INFO(workbench_effect_dof_prepare)
+ .define("PREPARE")
+ .fragment_out(0, Type::VEC4, "halfResColor")
+ .fragment_out(1, Type::VEC2, "normalizedCoc")
+ .additional_info("workbench_effect_dof")
+ .do_static_compilation(true);
+
+GPU_SHADER_CREATE_INFO(workbench_effect_dof_downsample)
+ .define("DOWNSAMPLE")
+ .fragment_out(0, Type::VEC4, "outColor")
+ .fragment_out(1, Type::VEC2, "outCocs")
+ .additional_info("workbench_effect_dof")
+ .do_static_compilation(true);
+
+GPU_SHADER_CREATE_INFO(workbench_effect_dof_blur1)
+ .define("BLUR1")
+ .define("NUM_SAMPLES", "49")
+ .uniform_buf(1, "vec4", "samples[49]")
+ .fragment_out(0, Type::VEC4, "blurColor")
+ .additional_info("workbench_effect_dof")
+ .do_static_compilation(true);
+
+GPU_SHADER_CREATE_INFO(workbench_effect_dof_blur2)
+ .define("BLUR2")
+ .fragment_out(0, Type::VEC4, "finalColor")
+ .additional_info("workbench_effect_dof")
+ .do_static_compilation(true);
+
+GPU_SHADER_CREATE_INFO(workbench_effect_dof_resolve)
+ .define("RESOLVE")
+ .fragment_out(0, Type::VEC4, "finalColorAdd", DualBlend::SRC_0)
+ .fragment_out(0, Type::VEC4, "finalColorMul", DualBlend::SRC_1)
+ .additional_info("workbench_effect_dof")
+ .do_static_compilation(true); \ No newline at end of file
diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_outline_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_outline_info.hh
new file mode 100644
index 00000000000..3849fe57a25
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_effect_outline_info.hh
@@ -0,0 +1,11 @@
+
+#include "gpu_shader_create_info.hh"
+
+GPU_SHADER_CREATE_INFO(workbench_effect_outline)
+ .typedef_source("workbench_shader_shared.h")
+ .fragment_source("workbench_effect_outline_frag.glsl")
+ .sampler(0, ImageType::UINT_2D, "objectIdBuffer")
+ .uniform_buf(4, "WorldData", "world_data", Frequency::PASS)
+ .fragment_out(0, Type::VEC4, "fragColor")
+ .additional_info("draw_fullscreen")
+ .do_static_compilation(true);
diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_merge_infront_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_merge_infront_info.hh
new file mode 100644
index 00000000000..78403c292f0
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_merge_infront_info.hh
@@ -0,0 +1,9 @@
+
+#include "gpu_shader_create_info.hh"
+
+GPU_SHADER_CREATE_INFO(workbench_merge_infront)
+ .fragment_out(0, Type::VEC4, "fragColor")
+ .sampler(0, ImageType::DEPTH_2D, "depthBuffer")
+ .fragment_source("workbench_merge_infront_frag.glsl")
+ .additional_info("draw_fullscreen")
+ .do_static_compilation(true);
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
index 1dd706c9460..5e3b593ee6f 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
@@ -11,17 +11,20 @@ GPU_SHADER_CREATE_INFO(workbench_mesh)
.vertex_in(2, Type::VEC4, "ac")
.vertex_in(3, Type::VEC2, "au")
.vertex_source("workbench_prepass_vert.glsl")
- .additional_info("draw_mesh");
+ .additional_info("draw_mesh")
+ .additional_info("draw_resource_handle");
GPU_SHADER_CREATE_INFO(workbench_hair)
.sampler(0, ImageType::FLOAT_BUFFER, "ac", Frequency::BATCH)
.sampler(1, ImageType::FLOAT_BUFFER, "au", Frequency::BATCH)
.vertex_source("workbench_prepass_hair_vert.glsl")
- .additional_info("draw_hair");
+ .additional_info("draw_hair")
+ .additional_info("draw_resource_handle");
GPU_SHADER_CREATE_INFO(workbench_pointcloud)
.vertex_source("workbench_prepass_pointcloud_vert.glsl")
- .additional_info("draw_pointcloud");
+ .additional_info("draw_pointcloud")
+ .additional_info("draw_resource_handle");
/** \} */
@@ -42,17 +45,21 @@ GPU_SHADER_CREATE_INFO(workbench_texture_tile)
.sampler(3, ImageType::FLOAT_1D_ARRAY, "imageTileData", Frequency::BATCH)
.push_constant(1, Type::BOOL, "imagePremult")
.push_constant(2, Type::FLOAT, "imageTransparencyCutoff")
+ .define("V3D_SHADING_TEXTURE_COLOR")
.define("TEXTURE_IMAGE_ARRAY");
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Lighting Type
+/** \name Lighting Type (only for transparent)
* \{ */
-GPU_SHADER_CREATE_INFO(workbench_lighting_studio).define("V3D_LIGHTING_STUDIO");
-GPU_SHADER_CREATE_INFO(workbench_lighting_matcap).define("V3D_LIGHTING_MATCAP");
GPU_SHADER_CREATE_INFO(workbench_lighting_flat).define("V3D_LIGHTING_FLAT");
+GPU_SHADER_CREATE_INFO(workbench_lighting_studio).define("V3D_LIGHTING_STUDIO");
+GPU_SHADER_CREATE_INFO(workbench_lighting_matcap)
+ .define("V3D_LIGHTING_MATCAP")
+ .sampler(4, ImageType::FLOAT_2D, "matcap_diffuse_tx", Frequency::PASS)
+ .sampler(5, ImageType::FLOAT_2D, "matcap_specular_tx", Frequency::PASS);
/** \} */
@@ -69,7 +76,12 @@ GPU_SHADER_INTERFACE_INFO(workbench_material_iface, "")
.flat(Type::FLOAT, "roughness")
.flat(Type::FLOAT, "metallic");
-GPU_SHADER_CREATE_INFO(workbench_material).vertex_out(workbench_material_iface);
+GPU_SHADER_CREATE_INFO(workbench_material)
+ .uniform_buf(4, "WorldData", "world_data", Frequency::PASS)
+ .uniform_buf(5, "vec4", "materials_data[4096]", Frequency::PASS)
+ .push_constant(4, Type::INT, "materialIndex")
+ .push_constant(5, Type::BOOL, "useMatcap")
+ .vertex_out(workbench_material_iface);
/** \} */
@@ -83,19 +95,16 @@ GPU_SHADER_CREATE_INFO(workbench_transparent_accum)
.fragment_out(0, Type::VEC4, "transparentAccum")
.fragment_out(1, Type::VEC4, "revealageAccum")
.fragment_out(2, Type::UINT, "objectId")
- .uniform_buf(4, "WorldData", "world_data", Frequency::PASS)
+ .push_constant(3, Type::BOOL, "forceShadowing")
.typedef_source("workbench_shader_shared.h")
- .fragment_source("workbench_transparent_accum_frag.glsl")
- .additional_info("workbench_material");
+ .fragment_source("workbench_transparent_accum_frag.glsl");
GPU_SHADER_CREATE_INFO(workbench_opaque)
.fragment_out(0, Type::VEC4, "materialData")
.fragment_out(1, Type::VEC2, "normalData")
.fragment_out(2, Type::UINT, "objectId")
- .uniform_buf(4, "WorldData", "world_data", Frequency::PASS)
.typedef_source("workbench_shader_shared.h")
- .fragment_source("workbench_prepass_frag.glsl")
- .additional_info("workbench_material");
+ .fragment_source("workbench_prepass_frag.glsl");
/** \} */
@@ -103,34 +112,38 @@ GPU_SHADER_CREATE_INFO(workbench_opaque)
/** \name Variations Declaration
* \{ */
-#define WORKBENCH_SURFACETYPE_VARIATIONS(prefix, ...) \
- GPU_SHADER_CREATE_INFO(prefix##_mesh) \
- .additional_info("workbench_mesh", __VA_ARGS__) \
- .do_static_compilation(true); \
- GPU_SHADER_CREATE_INFO(prefix##_hair) \
- .additional_info("workbench_hair", __VA_ARGS__) \
- .do_static_compilation(true); \
- GPU_SHADER_CREATE_INFO(prefix##_ptcloud) \
- .additional_info("workbench_pointcloud", __VA_ARGS__) \
- .do_static_compilation(true);
+#define WORKBENCH_FINAL_VARIATION(name, ...) \
+ GPU_SHADER_CREATE_INFO(name).additional_info(__VA_ARGS__).do_static_compilation(true);
+
+#define WORKBENCH_CLIPPING_VARIATIONS(prefix, ...) \
+ WORKBENCH_FINAL_VARIATION(prefix##_clip, "drw_clipped", __VA_ARGS__) \
+ WORKBENCH_FINAL_VARIATION(prefix##_no_clip, __VA_ARGS__)
+
+#define WORKBENCH_TEXTURE_VARIATIONS(prefix, ...) \
+ WORKBENCH_CLIPPING_VARIATIONS(prefix##_tex_none, "workbench_texture_none", __VA_ARGS__) \
+ WORKBENCH_CLIPPING_VARIATIONS(prefix##_tex_single, "workbench_texture_single", __VA_ARGS__) \
+ WORKBENCH_CLIPPING_VARIATIONS(prefix##_tex_tile, "workbench_texture_tile", __VA_ARGS__)
+
+#define WORKBENCH_DATATYPE_VARIATIONS(prefix, ...) \
+ WORKBENCH_TEXTURE_VARIATIONS(prefix##_mesh, "workbench_mesh", __VA_ARGS__) \
+ WORKBENCH_TEXTURE_VARIATIONS(prefix##_hair, "workbench_hair", __VA_ARGS__) \
+ WORKBENCH_TEXTURE_VARIATIONS(prefix##_ptcloud, "workbench_pointcloud", __VA_ARGS__)
#define WORKBENCH_PIPELINE_VARIATIONS(prefix, ...) \
- WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_transp_studio, \
- "workbench_transparent_accum", \
- "workbench_lighting_studio", \
- __VA_ARGS__) \
- WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_transp_matcap, \
- "workbench_transparent_accum", \
- "workbench_lighting_matcap", \
- __VA_ARGS__) \
- WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_transp_flat, \
- "workbench_transparent_accum", \
- "workbench_lighting_flat", \
- __VA_ARGS__) \
- WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_opaque, "workbench_opaque", __VA_ARGS__)
-
-WORKBENCH_PIPELINE_VARIATIONS(workbench_tex_none, "workbench_texture_none")
-WORKBENCH_PIPELINE_VARIATIONS(workbench_tex_single, "workbench_texture_single")
-WORKBENCH_PIPELINE_VARIATIONS(workbench_tex_tile, "workbench_texture_tile")
+ WORKBENCH_DATATYPE_VARIATIONS(prefix##_transp_studio, \
+ "workbench_transparent_accum", \
+ "workbench_lighting_studio", \
+ __VA_ARGS__) \
+ WORKBENCH_DATATYPE_VARIATIONS(prefix##_transp_matcap, \
+ "workbench_transparent_accum", \
+ "workbench_lighting_matcap", \
+ __VA_ARGS__) \
+ WORKBENCH_DATATYPE_VARIATIONS(prefix##_transp_flat, \
+ "workbench_transparent_accum", \
+ "workbench_lighting_flat", \
+ __VA_ARGS__) \
+ WORKBENCH_DATATYPE_VARIATIONS(prefix##_opaque, "workbench_opaque", __VA_ARGS__)
+
+WORKBENCH_PIPELINE_VARIATIONS(workbench, "workbench_material");
/** \} */
diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_shadow_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_shadow_info.hh
new file mode 100644
index 00000000000..64f491aa201
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_shadow_info.hh
@@ -0,0 +1,98 @@
+
+#include "gpu_shader_create_info.hh"
+
+/* -------------------------------------------------------------------- */
+/** \name Common
+ * \{ */
+
+GPU_SHADER_INTERFACE_INFO(workbench_shadow_iface, "vData")
+ .smooth(Type::VEC3, "pos")
+ .smooth(Type::VEC4, "frontPosition")
+ .smooth(Type::VEC4, "backPosition");
+
+GPU_SHADER_CREATE_INFO(workbench_shadow_common)
+ .vertex_in(0, Type::VEC3, "pos")
+ .vertex_out(workbench_shadow_iface)
+ .push_constant(0, Type::FLOAT, "lightDistance")
+ .push_constant(1, Type::VEC3, "lightDirection")
+ .vertex_source("workbench_shadow_vert.glsl")
+ .additional_info("draw_mesh");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Manifold Type
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_shadow_manifold)
+ .geometry_layout(PrimitiveIn::LINES_ADJACENCY, PrimitiveOut::TRIANGLE_STRIP, 4, 1)
+ .geometry_source("workbench_shadow_geom.glsl");
+
+GPU_SHADER_CREATE_INFO(workbench_shadow_no_manifold)
+ .geometry_layout(PrimitiveIn::LINES_ADJACENCY, PrimitiveOut::TRIANGLE_STRIP, 4, 2)
+ .geometry_source("workbench_shadow_geom.glsl");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Caps Type
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_shadow_caps)
+ .geometry_layout(PrimitiveIn::TRIANGLES, PrimitiveOut::TRIANGLE_STRIP, 3, 2)
+ .geometry_source("workbench_shadow_caps_geom.glsl");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Debug Type
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_shadow_no_debug)
+ .fragment_source("gpu_shader_depth_only_frag.glsl");
+
+GPU_SHADER_CREATE_INFO(workbench_shadow_debug)
+ .fragment_out(0, Type::VEC4, "materialData")
+ .fragment_out(1, Type::VEC4, "normalData")
+ .fragment_out(2, Type::UINT, "objectId")
+ .fragment_source("workbench_shadow_debug_frag.glsl");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Variations Declaration
+ * \{ */
+
+#define WORKBENCH_SHADOW_VARIATIONS(suffix, ...) \
+ GPU_SHADER_CREATE_INFO(workbench_shadow_pass_manifold_no_caps##suffix) \
+ .define("SHADOW_PASS") \
+ .additional_info("workbench_shadow_common", "workbench_shadow_manifold", __VA_ARGS__) \
+ .do_static_compilation(true); \
+ GPU_SHADER_CREATE_INFO(workbench_shadow_pass_no_manifold_no_caps##suffix) \
+ .define("SHADOW_PASS") \
+ .define("DOUBLE_MANIFOLD") \
+ .additional_info("workbench_shadow_common", "workbench_shadow_no_manifold", __VA_ARGS__) \
+ .do_static_compilation(true); \
+ GPU_SHADER_CREATE_INFO(workbench_shadow_fail_manifold_caps##suffix) \
+ .define("SHADOW_FAIL") \
+ .additional_info("workbench_shadow_common", "workbench_shadow_caps", __VA_ARGS__) \
+ .do_static_compilation(true); \
+ GPU_SHADER_CREATE_INFO(workbench_shadow_fail_manifold_no_caps##suffix) \
+ .define("SHADOW_FAIL") \
+ .additional_info("workbench_shadow_common", "workbench_shadow_manifold", __VA_ARGS__) \
+ .do_static_compilation(true); \
+ GPU_SHADER_CREATE_INFO(workbench_shadow_fail_no_manifold_caps##suffix) \
+ .define("SHADOW_FAIL") \
+ .define("DOUBLE_MANIFOLD") \
+ .additional_info("workbench_shadow_common", "workbench_shadow_caps", __VA_ARGS__) \
+ .do_static_compilation(true); \
+ GPU_SHADER_CREATE_INFO(workbench_shadow_fail_no_manifold_no_caps##suffix) \
+ .define("SHADOW_FAIL") \
+ .define("DOUBLE_MANIFOLD") \
+ .additional_info("workbench_shadow_common", "workbench_shadow_no_manifold", __VA_ARGS__) \
+ .do_static_compilation(true);
+
+WORKBENCH_SHADOW_VARIATIONS(, "workbench_shadow_no_debug")
+WORKBENCH_SHADOW_VARIATIONS(_debug, "workbench_shadow_debug")
+
+/** \} */
diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_transparent_resolve_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_transparent_resolve_info.hh
new file mode 100644
index 00000000000..e5b7bc8e2a7
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_transparent_resolve_info.hh
@@ -0,0 +1,10 @@
+
+#include "gpu_shader_create_info.hh"
+
+GPU_SHADER_CREATE_INFO(workbench_transparent_resolve)
+ .fragment_out(0, Type::VEC4, "fragColor")
+ .sampler(0, ImageType::FLOAT_2D, "transparentAccum")
+ .sampler(1, ImageType::FLOAT_2D, "transparentRevealage")
+ .fragment_source("workbench_transparent_resolve_frag.glsl")
+ .additional_info("draw_fullscreen")
+ .do_static_compilation(true);
diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_volume_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_volume_info.hh
new file mode 100644
index 00000000000..f212ba9ec1d
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_volume_info.hh
@@ -0,0 +1,114 @@
+
+#include "gpu_shader_create_info.hh"
+
+/* -------------------------------------------------------------------- */
+/** \name Volume shader base
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_volume)
+ .vertex_in(0, Type::VEC3, "pos")
+ .fragment_out(0, Type::VEC4, "fragColor")
+ .sampler(0, ImageType::DEPTH_2D, "depthBuffer")
+ .sampler(1, ImageType::FLOAT_3D, "densityTexture")
+ .push_constant(28, Type::INT, "samplesLen")
+ .push_constant(29, Type::FLOAT, "noiseOfs")
+ .push_constant(30, Type::FLOAT, "stepLength")
+ .push_constant(31, Type::FLOAT, "densityScale")
+ .vertex_source("workbench_volume_vert.glsl")
+ .fragment_source("workbench_volume_frag.glsl")
+ .additional_info("draw_object_infos");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Smoke variation
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_volume_smoke)
+ .define("VOLUME_SMOKE")
+ .sampler(2, ImageType::FLOAT_3D, "flameTexture")
+ .sampler(3, ImageType::FLOAT_1D, "flameColorTexture")
+ .additional_info("draw_mesh", "draw_resource_id_varying");
+
+GPU_SHADER_CREATE_INFO(workbench_volume_object)
+ .define("VOLUME_OBJECT")
+ .push_constant(0, Type::MAT4, "volumeTextureToObject")
+ /* FIXME(fclem): This overflow the push_constant limit. */
+ .push_constant(16, Type::MAT4, "volumeObjectToTexture")
+ .additional_info("draw_volume", "draw_resource_id_varying");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Color Band variation
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_volume_coba)
+ .define("USE_COBA")
+ .sampler(4, ImageType::UINT_3D, "flagTexture")
+ .sampler(5, ImageType::FLOAT_1D, "transferTexture")
+ .push_constant(18, Type::BOOL, "showPhi")
+ .push_constant(19, Type::BOOL, "showFlags")
+ .push_constant(20, Type::BOOL, "showPressure")
+ .push_constant(21, Type::FLOAT, "gridScale");
+
+GPU_SHADER_CREATE_INFO(workbench_volume_no_coba)
+ .sampler(4, ImageType::FLOAT_3D, "shadowTexture")
+ .sampler(5, ImageType::UINT_2D, "transferTexture")
+ .push_constant(18, Type::VEC3, "activeColor");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Sampling variation
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(workbench_volume_linear).define("USE_TRILINEAR");
+GPU_SHADER_CREATE_INFO(workbench_volume_cubic).define("USE_TRICUBIC");
+GPU_SHADER_CREATE_INFO(workbench_volume_closest).define("USE_CLOSEST");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Slice variation
+ * \{ */
+
+GPU_SHADER_INTERFACE_INFO(workbench_volume_iface, "").smooth(Type::VEC3, "localPos");
+
+GPU_SHADER_CREATE_INFO(workbench_volume_slice)
+ .define("VOLUME_SLICE")
+ .vertex_in(1, Type::VEC3, "uvs")
+ .vertex_out(workbench_volume_iface)
+ .push_constant(32, Type::INT, "sliceAxis") /* -1 is no slice. */
+ .push_constant(33, Type::FLOAT, "slicePosition");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Variations Declaration
+ * \{ */
+
+#define WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix, ...) \
+ GPU_SHADER_CREATE_INFO(prefix##_slice) \
+ .additional_info("workbench_volume_slice", __VA_ARGS__) \
+ .do_static_compilation(true); \
+ GPU_SHADER_CREATE_INFO(prefix##_no_slice) \
+ .additional_info(__VA_ARGS__) \
+ .do_static_compilation(true);
+
+#define WORKBENCH_VOLUME_COBA_VARIATIONS(prefix, ...) \
+ WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix##_coba, "workbench_volume_coba", __VA_ARGS__) \
+ WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix##_no_coba, "workbench_volume_no_coba", __VA_ARGS__)
+
+#define WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix, ...) \
+ WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_linear, "workbench_volume_linear", __VA_ARGS__) \
+ WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_cubic, "workbench_volume_cubic", __VA_ARGS__) \
+ WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_closest, "workbench_volume_closest", __VA_ARGS__)
+
+#define WORKBENCH_VOLUME_SMOKE_VARIATIONS(prefix, ...) \
+ WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix##_smoke, "workbench_volume_smoke", __VA_ARGS__) \
+ WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix##_object, "workbench_volume_object", __VA_ARGS__)
+
+WORKBENCH_VOLUME_SMOKE_VARIATIONS(workbench_volume, "workbench_volume")
+
+/** \} */
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_cavity_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_cavity_lib.glsl
index 9038aae533b..ad83d6f39e5 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_cavity_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_cavity_lib.glsl
@@ -1,15 +1,7 @@
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
-#pragma BLENDER_REQUIRE(workbench_data_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_common_lib.glsl)
-layout(std140) uniform samples_block
-{
- vec4 samples_coords[512];
-};
-
-uniform sampler2D cavityJitter;
-
/* From The Alchemy screen-space ambient obscurance algorithm
* http://graphics.cs.williams.edu/papers/AlchemyHPG11/VV11AlchemyAO.pdf */
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
index c5b2ce0fd99..5e43fe27f38 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
@@ -4,13 +4,6 @@
#pragma BLENDER_REQUIRE(workbench_matcap_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_world_light_lib.glsl)
-uniform sampler2D materialBuffer;
-uniform sampler2D normalBuffer;
-
-in vec4 uvcoordsvar;
-
-out vec4 fragColor;
-
void main()
{
/* Normal and Incident vector are in viewspace. Lighting is evaluated in viewspace. */
@@ -27,7 +20,7 @@ void main()
/* When using matcaps, mat_data.a is the back-face sign. */
N = (mat_data.a > 0.0) ? N : -N;
- fragColor.rgb = get_matcap_lighting(base_color, N, I);
+ fragColor.rgb = get_matcap_lighting(matcap_diffuse_tx, matcap_specular_tx, base_color, N, I);
#endif
#ifdef V3D_LIGHTING_STUDIO
@@ -38,7 +31,7 @@ void main()
fragColor.rgb = base_color;
#endif
- fragColor.rgb *= get_shadow(N);
+ fragColor.rgb *= get_shadow(N, forceShadowing);
fragColor.a = 1.0;
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_curvature_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_curvature_lib.glsl
index a4d81393dbc..18a093275c5 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_curvature_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_curvature_lib.glsl
@@ -1,6 +1,4 @@
-#pragma BLENDER_REQUIRE(workbench_data_lib.glsl)
-
float curvature_soft_clamp(float curvature, float control)
{
if (curvature < 0.5 / control) {
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
deleted file mode 100644
index c784c8b2db9..00000000000
--- a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#ifndef WORKBENCH_SHADER_SHARED_H
-struct LightData {
- vec4 direction;
- vec4 specular_color;
- vec4 diffuse_color_wrap; /* rgb: diffuse col a: wrapped lighting factor */
-};
-
-struct WorldData {
- vec4 viewport_size;
- vec4 object_outline_color;
- vec4 shadow_direction_vs;
- float shadow_focus;
- float shadow_shift;
- float shadow_mul;
- float shadow_add;
- /* - 16 bytes alignment - */
- LightData lights[4];
- vec4 ambient_color;
-
- int cavity_sample_start;
- int cavity_sample_end;
- float cavity_sample_count_inv;
- float cavity_jitter_scale;
-
- float cavity_valley_factor;
- float cavity_ridge_factor;
- float cavity_attenuation;
- float cavity_distance;
-
- float curvature_ridge;
- float curvature_valley;
- float ui_scale;
- float _pad0;
-
- int matcap_orientation;
- bool use_specular;
- int _pad1;
- int _pad2;
-};
-
-# define viewport_size_inv viewport_size.zw
-
-layout(std140) uniform world_block
-{
- WorldData world_data;
-};
-#endif
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_frag.glsl
index 0b571040df5..59222b588a0 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_frag.glsl
@@ -4,18 +4,6 @@
#pragma BLENDER_REQUIRE(workbench_cavity_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_curvature_lib.glsl)
-#ifndef DRW_SHADER_SHARED_H
-
-uniform sampler2D depthBuffer;
-uniform sampler2D normalBuffer;
-uniform usampler2D objectIdBuffer;
-
-in vec4 uvcoordsvar;
-
-out vec4 fragColor;
-
-#endif
-
void main()
{
float cavity = 0.0, edges = 0.0, curvature = 0.0;
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
index c4580e6ffc3..e9525ce9de0 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
@@ -7,19 +7,6 @@
* Converted and adapted from HLSL to GLSL by Clément Foucault
*/
-uniform vec2 invertedViewportSize;
-uniform vec2 nearFar;
-uniform vec3 dofParams;
-uniform float noiseOffset;
-uniform sampler2D inputCocTex;
-uniform sampler2D maxCocTilesTex;
-uniform sampler2D sceneColorTex;
-uniform sampler2D sceneDepthTex;
-uniform sampler2D backgroundTex;
-uniform sampler2D halfResColorTex;
-uniform sampler2D blurTex;
-uniform sampler2D noiseTex;
-
#define dof_aperturesize dofParams.x
#define dof_distance dofParams.y
#define dof_invsensorsize dofParams.z
@@ -53,9 +40,6 @@ float decode_signed_coc(vec2 cocs)
*/
#ifdef PREPARE
-layout(location = 0) out vec4 halfResColor;
-layout(location = 1) out vec2 normalizedCoc;
-
void main()
{
ivec4 texel = ivec4(gl_FragCoord.xyxy) * 2 + ivec4(0, 0, 1, 1);
@@ -99,9 +83,6 @@ void main()
*/
#ifdef DOWNSAMPLE
-layout(location = 0) out vec4 outColor;
-layout(location = 1) out vec2 outCocs;
-
void main()
{
vec4 texel = vec4(gl_FragCoord.xyxy) * 2.0 + vec4(0.0, 0.0, 1.0, 1.0);
@@ -216,14 +197,6 @@ void main()
* Outputs vertical blur and combined blur in MRT
*/
#ifdef BLUR1
-layout(location = 0) out vec4 blurColor;
-
-# define NUM_SAMPLES 49
-
-layout(std140) uniform dofSamplesBlock
-{
- vec4 samples[NUM_SAMPLES];
-};
vec2 get_random_vector(float offset)
{
@@ -308,7 +281,6 @@ void main()
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef BLUR2
-out vec4 finalColor;
void main()
{
@@ -385,9 +357,6 @@ void main()
*/
#ifdef RESOLVE
-layout(location = 0, index = 0) out vec4 finalColorAdd;
-layout(location = 0, index = 1) out vec4 finalColorMul;
-
void main()
{
/* Fullscreen pass */
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_outline_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_effect_outline_frag.glsl
index fb6fdb93462..5d74933abf4 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_effect_outline_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_outline_frag.glsl
@@ -1,12 +1,4 @@
-#pragma BLENDER_REQUIRE(workbench_data_lib.glsl)
-
-uniform usampler2D objectIdBuffer;
-
-in vec4 uvcoordsvar;
-
-out vec4 fragColor;
-
void main()
{
vec3 offset = vec3(world_data.viewport_size_inv, 0.0) * world_data.ui_scale;
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_frag.glsl
index 9797a5e3301..8b9e3f968ea 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_frag.glsl
@@ -1,50 +1,35 @@
-uniform sampler2D edgesTex;
-uniform sampler2D areaTex;
-uniform sampler2D searchTex;
-uniform sampler2D blendTex;
-uniform sampler2D colorTex;
-uniform float mixFactor;
-uniform float taaAccumulatedWeight;
-
-in vec2 uvs;
-in vec2 pixcoord;
-in vec4 offset[3];
-
-#if SMAA_STAGE == 0
-out vec2 fragColor;
-#else
-out vec4 fragColor;
-#endif
+#pragma BLENDER_REQUIRE(common_smaa_lib.glsl)
void main()
{
#if SMAA_STAGE == 0
/* Detect edges in color and revealage buffer. */
- fragColor = SMAALumaEdgeDetectionPS(uvs, offset, colorTex);
+ out_edges = SMAALumaEdgeDetectionPS(uvs, offset, colorTex);
/* Discard if there is no edge. */
- if (dot(fragColor, float2(1.0, 1.0)) == 0.0) {
+ if (dot(out_edges, float2(1.0, 1.0)) == 0.0) {
discard;
}
#elif SMAA_STAGE == 1
- fragColor = SMAABlendingWeightCalculationPS(
+ out_weights = SMAABlendingWeightCalculationPS(
uvs, pixcoord, offset, edgesTex, areaTex, searchTex, vec4(0));
#elif SMAA_STAGE == 2
- fragColor = vec4(0.0);
+ out_color = vec4(0.0);
if (mixFactor > 0.0) {
- fragColor += SMAANeighborhoodBlendingPS(uvs, offset[0], colorTex, blendTex) * mixFactor;
+ out_color += SMAANeighborhoodBlendingPS(uvs, offset[0], colorTex, blendTex) * mixFactor;
}
if (mixFactor < 1.0) {
- fragColor += texture(colorTex, uvs) * (1.0 - mixFactor);
+ out_color += texture(colorTex, uvs) * (1.0 - mixFactor);
}
- fragColor /= taaAccumulatedWeight;
- fragColor = exp2(fragColor) - 0.5;
+ out_color /= taaAccumulatedWeight;
+ /* Exit log2 space used for Antialiasing. */
+ out_color = exp2(out_color) - 0.5;
/* Avoid float precision issue. */
- if (fragColor.a > 0.999) {
- fragColor.a = 1.0;
+ if (out_color.a > 0.999) {
+ out_color.a = 1.0;
}
#endif
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_vert.glsl
index 07734d19972..b76433a23e5 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_smaa_vert.glsl
@@ -1,7 +1,5 @@
-out vec2 uvs;
-out vec2 pixcoord;
-out vec4 offset[3];
+#pragma BLENDER_REQUIRE(common_smaa_lib.glsl)
void main()
{
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_taa_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_effect_taa_frag.glsl
index d021e4696f7..0c4dee11756 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_effect_taa_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_taa_frag.glsl
@@ -1,9 +1,4 @@
-uniform sampler2D colorBuffer;
-uniform float samplesWeights[9];
-
-out vec4 fragColor;
-
void main()
{
vec2 texel_size = 1.0 / vec2(textureSize(colorBuffer, 0));
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl
index 49e3f57ab2e..78782bdc777 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl
@@ -25,15 +25,6 @@ bool node_tex_tile_lookup(inout vec3 co, sampler2DArray ima, sampler1DArray map)
return true;
}
-#ifndef WORKBENCH_SHADER_SHARED_H
-uniform sampler2DArray imageTileArray;
-uniform sampler1DArray imageTileData;
-uniform sampler2D imageTexture;
-
-uniform float imageTransparencyCutoff = 0.1;
-uniform bool imagePremult;
-#endif
-
vec3 workbench_image_color(vec2 uvs)
{
#ifdef V3D_SHADING_TEXTURE_COLOR
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_matcap_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_matcap_lib.glsl
index 2d18cc1b014..a0cec54251d 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_matcap_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_matcap_lib.glsl
@@ -1,6 +1,4 @@
-#pragma BLENDER_REQUIRE(workbench_data_lib.glsl)
-
vec2 matcap_uv_compute(vec3 I, vec3 N, bool flipped)
{
/* Quick creation of an orthonormal basis */
@@ -15,16 +13,14 @@ vec2 matcap_uv_compute(vec3 I, vec3 N, bool flipped)
return matcap_uv * 0.496 + 0.5;
}
-uniform sampler2D matcapDiffuseImage;
-uniform sampler2D matcapSpecularImage;
-
-vec3 get_matcap_lighting(vec3 base_color, vec3 N, vec3 I)
+vec3 get_matcap_lighting(
+ sampler2D diffuse_matcap, sampler2D specular_matcap, vec3 base_color, vec3 N, vec3 I)
{
bool flipped = world_data.matcap_orientation != 0;
vec2 uv = matcap_uv_compute(I, N, flipped);
- vec3 diffuse = textureLod(matcapDiffuseImage, uv, 0.0).rgb;
- vec3 specular = textureLod(matcapSpecularImage, uv, 0.0).rgb;
+ vec3 diffuse = textureLod(diffuse_matcap, uv, 0.0).rgb;
+ vec3 specular = textureLod(specular_matcap, uv, 0.0).rgb;
return diffuse * base_color + specular * float(world_data.use_specular);
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl
index 1d8950e34b3..b6dc26ecc65 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl
@@ -1,17 +1,9 @@
-layout(std140) uniform material_block
-{
- vec4 mat_data[4096];
-};
-
-/* If set to -1, the resource handle is used instead. */
-uniform int materialIndex;
-
void workbench_material_data_get(
int handle, out vec3 color, out float alpha, out float roughness, out float metallic)
{
handle = (materialIndex != -1) ? materialIndex : handle;
- vec4 data = mat_data[uint(handle) & 0xFFFu];
+ vec4 data = materials_data[uint(handle) & 0xFFFu];
color = data.rgb;
uint encoded_data = floatBitsToUint(data.w);
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_merge_infront_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_merge_infront_frag.glsl
index 856654549ca..ae564435258 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_merge_infront_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_merge_infront_frag.glsl
@@ -1,10 +1,4 @@
-uniform sampler2D depthBuffer;
-
-in vec4 uvcoordsvar;
-
-out vec4 fragColor;
-
void main()
{
float depth = texture(depthBuffer, uvcoordsvar.st).r;
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl
index 7a3ebc4035e..1b20171b3ff 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl
@@ -1,22 +1,13 @@
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
-#pragma BLENDER_REQUIRE(workbench_shader_interface_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_common_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_image_lib.glsl)
-#ifndef WORKBENCH_SHADER_SHARED_H
-layout(location = 0) out vec4 materialData;
-layout(location = 1) out vec2 normalData;
-layout(location = 2) out uint objectId;
-#endif
-
-uniform bool useMatcap = false;
-
void main()
{
normalData = workbench_normal_encode(gl_FrontFacing, normal_interp);
- materialData = vec4(color_interp, packed_rough_metal);
+ materialData = vec4(color_interp, workbench_float_pair_encode(roughness, metallic));
objectId = uint(object_id);
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_hair_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_hair_vert.glsl
index c3faa3957ef..65b9f4de4b6 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_hair_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_hair_vert.glsl
@@ -1,15 +1,10 @@
#pragma BLENDER_REQUIRE(common_hair_lib.glsl)
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
-#pragma BLENDER_REQUIRE(workbench_shader_interface_lib.glsl)
+#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_common_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_material_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_image_lib.glsl)
-#ifndef WORKBENCH_SHADER_SHARED_H
-uniform samplerBuffer ac; /* active color layer */
-uniform samplerBuffer au; /* active texture layer */
-#endif
-
/* From http://libnoise.sourceforge.net/noisegen/index.html */
float integer_noise(int n)
{
@@ -65,19 +60,12 @@ void main()
float hair_rand = integer_noise(hair_get_strand_id());
vec3 nor = workbench_hair_random_normal(tan, binor, hair_rand);
-#ifdef USE_WORLD_CLIP_PLANES
- world_clip_planes_calc_clip_distance(world_pos);
-#endif
+ view_clipping_distances(world_pos);
uv_interp = hair_get_customdata_vec2(au);
normal_interp = normalize(normal_world_to_view(nor));
-#ifndef WORKBENCH_SHADER_SHARED_H
-# ifdef OPAQUE_MATERIAL
- float metallic, roughness;
-# endif
-#endif
workbench_material_data_get(resource_handle, color_interp, alpha_interp, roughness, metallic);
if (materialIndex == 0) {
@@ -90,9 +78,5 @@ void main()
workbench_hair_random_material(hair_rand, color_interp, roughness, metallic);
-#ifdef OPAQUE_MATERIAL
- packed_rough_metal = workbench_float_pair_encode(roughness, metallic);
-#endif
-
object_id = int(uint(resource_handle) & 0xFFFFu) + 1;
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl
index 8efe10b8236..911d6f5b036 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl
@@ -1,7 +1,7 @@
+#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl)
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
#pragma BLENDER_REQUIRE(common_pointcloud_lib.glsl)
-#pragma BLENDER_REQUIRE(workbench_shader_interface_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_common_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_material_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_image_lib.glsl)
@@ -15,26 +15,15 @@ void main()
gl_Position = point_world_to_ndc(world_pos);
-#ifdef USE_WORLD_CLIP_PLANES
- world_clip_planes_calc_clip_distance(world_pos);
-#endif
+ view_clipping_distances(world_pos);
uv_interp = vec2(0.0);
-#ifndef WORKBENCH_SHADER_SHARED_H
-# ifdef OPAQUE_MATERIAL
- float metallic, roughness;
-# endif
-#endif
workbench_material_data_get(resource_handle, color_interp, alpha_interp, roughness, metallic);
if (materialIndex == 0) {
color_interp = vec3(1.0);
}
-#ifdef OPAQUE_MATERIAL
- packed_rough_metal = workbench_float_pair_encode(roughness, metallic);
-#endif
-
object_id = int(uint(resource_handle) & 0xFFFFu) + 1;
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
index 1f6a8a63944..3a63b141c5f 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
@@ -1,44 +1,26 @@
+#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl)
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
-#pragma BLENDER_REQUIRE(workbench_shader_interface_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_common_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_material_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_image_lib.glsl)
-#ifndef WORKBENCH_SHADER_SHARED_H
-in vec3 pos;
-in vec3 nor;
-in vec4 ac; /* active color */
-in vec2 au; /* active texture layer */
-#endif
-
void main()
{
vec3 world_pos = point_object_to_world(pos);
gl_Position = point_world_to_ndc(world_pos);
-#ifdef USE_WORLD_CLIP_PLANES
- world_clip_planes_calc_clip_distance(world_pos);
-#endif
+ view_clipping_distances(world_pos);
uv_interp = au;
normal_interp = normalize(normal_object_to_view(nor));
-#ifndef WORKBENCH_SHADER_SHARED_H
-# ifdef OPAQUE_MATERIAL
- float metallic, roughness;
-# endif
-#endif
workbench_material_data_get(resource_handle, color_interp, alpha_interp, roughness, metallic);
if (materialIndex == 0) {
color_interp = ac.rgb;
}
-#ifdef OPAQUE_MATERIAL
- packed_rough_metal = workbench_float_pair_encode(roughness, metallic);
-#endif
-
object_id = int(uint(resource_handle) & 0xFFFFu) + 1;
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_shader_interface_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_shader_interface_lib.glsl
deleted file mode 100644
index 178e61c8a8d..00000000000
--- a/source/blender/draw/engines/workbench/shaders/workbench_shader_interface_lib.glsl
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#ifndef WORKBENCH_SHADER_SHARED_H
-IN_OUT ShaderStageInterface
-{
- vec3 normal_interp;
- vec3 color_interp;
- float alpha_interp;
- vec2 uv_interp;
-# ifdef TRANSPARENT_MATERIAL
- flat float roughness;
- flat float metallic;
-# else
- flat float packed_rough_metal;
-# endif
- flat int object_id;
-};
-#endif
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl b/source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl
index 272f0621185..4a7b1522426 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl
@@ -2,38 +2,6 @@
# define USE_INVOC_EXT
#endif
-#ifdef DOUBLE_MANIFOLD
-# ifdef USE_INVOC_EXT
-# define invoc_len 2
-# else
-# define vert_len 6
-# endif
-#else
-# ifdef USE_INVOC_EXT
-# define invoc_len 2
-# else
-# define vert_len 6
-# endif
-#endif
-
-#ifdef USE_INVOC_EXT
-layout(triangles, invocations = invoc_len) in;
-layout(triangle_strip, max_vertices = 3) out;
-#else
-layout(triangles) in;
-layout(triangle_strip, max_vertices = vert_len) out;
-#endif
-
-uniform vec3 lightDirection = vec3(0.57, 0.57, -0.57);
-
-in VertexData
-{
- vec3 pos; /* local position */
- vec4 frontPosition; /* final ndc position */
- vec4 backPosition;
-}
-vData[];
-
vec4 get_pos(int v, bool backface)
{
return (backface) ? vData[v].backPosition : vData[v].frontPosition;
@@ -74,18 +42,19 @@ void main()
/* In case of non manifold geom, we only increase/decrease
* the stencil buffer by one but do every faces as they were facing the light. */
bool invert = backface;
+ const bool is_manifold = false;
#else
const bool invert = false;
- if (!backface) {
+ const bool is_manifold = true;
#endif
+
+ if (!is_manifold || !backface) {
#ifdef USE_INVOC_EXT
- bool do_front = (gl_InvocationID & 1) == 0;
- emit_cap(do_front, invert);
+ bool do_front = (gl_InvocationID & 1) == 0;
+ emit_cap(do_front, invert);
#else
emit_cap(true, invert);
emit_cap(false, invert);
#endif
-#ifndef DOUBLE_MANIFOLD
-}
-#endif
+ }
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_shadow_debug_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_shadow_debug_frag.glsl
index 6fa76510e6e..c9977a8d91a 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_shadow_debug_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_shadow_debug_frag.glsl
@@ -1,10 +1,4 @@
-out vec4 fragColor;
-
-layout(location = 0) out vec4 materialData;
-layout(location = 1) out vec4 normalData;
-layout(location = 2) out uint objectId;
-
void main()
{
const float a = 0.25;
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl b/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
index b4b6cd45d7a..9902884fc12 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
@@ -2,38 +2,6 @@
# define USE_INVOC_EXT
#endif
-#ifdef DOUBLE_MANIFOLD
-# ifdef USE_INVOC_EXT
-# define invoc_len 2
-# else
-# define vert_len 8
-# endif
-#else
-# ifdef USE_INVOC_EXT
-# define invoc_len 1
-# else
-# define vert_len 4
-# endif
-#endif
-
-#ifdef USE_INVOC_EXT
-layout(lines_adjacency, invocations = invoc_len) in;
-layout(triangle_strip, max_vertices = 4) out;
-#else
-layout(lines_adjacency) in;
-layout(triangle_strip, max_vertices = vert_len) out;
-#endif
-
-uniform vec3 lightDirection = vec3(0.57, 0.57, -0.57);
-
-in VertexData
-{
- vec3 pos; /* local position */
- vec4 frontPosition; /* final ndc position */
- vec4 backPosition;
-}
-vData[];
-
#define DEGENERATE_TRIS_WORKAROUND
#define DEGENERATE_TRIS_AREA_THRESHOLD 4e-17
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_shadow_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_shadow_vert.glsl
index e07f87525e2..a220434ec45 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_shadow_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_shadow_vert.glsl
@@ -1,17 +1,5 @@
-#define INFINITE 1000.0
-uniform vec3 lightDirection = vec3(0.57, 0.57, -0.57);
-uniform float lightDistance = 1e4;
-
-in vec3 pos;
-
-out VertexData
-{
- vec3 pos; /* local position */
- vec4 frontPosition; /* final ndc position */
- vec4 backPosition;
-}
-vData;
+#pragma BLENDER_REQUIRE(common_view_lib.glsl)
void main()
{
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl
index 0062cbe17a2..9c0f93c67d9 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl
@@ -1,21 +1,10 @@
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
-#pragma BLENDER_REQUIRE(workbench_shader_interface_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_common_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_image_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_matcap_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_world_light_lib.glsl)
-#ifndef WORKBENCH_SHADER_SHARED_H
-/* Revealage is actually stored in transparentAccum alpha channel.
- * This is a workaround to older hardware not having separate blend equation per render target. */
-layout(location = 0) out vec4 transparentAccum;
-layout(location = 1) out vec4 revealageAccum;
-
-/* NOTE: Blending will be skipped on objectId because output is a non-normalized integer buffer. */
-layout(location = 2) out uint objectId;
-#endif
-
/* Special function only to be used with calculate_transparent_weight(). */
float linear_zdepth(float depth, vec4 viewvecs[2], mat4 proj_mat)
{
@@ -69,7 +58,7 @@ void main()
#endif
#ifdef V3D_LIGHTING_MATCAP
- vec3 shaded_color = get_matcap_lighting(color, N, I);
+ vec3 shaded_color = get_matcap_lighting(matcap_diffuse_tx, matcap_specular_tx, color, N, I);
#endif
#ifdef V3D_LIGHTING_STUDIO
@@ -80,7 +69,7 @@ void main()
vec3 shaded_color = color;
#endif
- shaded_color *= get_shadow(N);
+ shaded_color *= get_shadow(N, forceShadowing);
/* Listing 4 */
float weight = calculate_transparent_weight() * alpha_interp;
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_transparent_resolve_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_transparent_resolve_frag.glsl
index d985737a35b..a2c45d2f8e3 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_transparent_resolve_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_transparent_resolve_frag.glsl
@@ -1,11 +1,4 @@
-uniform sampler2D transparentAccum;
-uniform sampler2D transparentRevealage;
-
-in vec4 uvcoordsvar;
-
-out vec4 fragColor;
-
/* Based on :
* McGuire and Bavoil, Weighted Blended Order-Independent Transparency, Journal of
* Computer Graphics Techniques (JCGT), vol. 2, no. 2, 122–141, 2013
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
index 48102b4dcca..076f6e80104 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
@@ -1,40 +1,8 @@
#pragma BLENDER_REQUIRE(common_math_lib.glsl)
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
-#pragma BLENDER_REQUIRE(gpu_shader_common_obinfos_lib.glsl)
-#pragma BLENDER_REQUIRE(workbench_data_lib.glsl)
#pragma BLENDER_REQUIRE(workbench_common_lib.glsl)
-uniform sampler2D depthBuffer;
-
-uniform sampler3D densityTexture;
-uniform sampler3D shadowTexture;
-uniform sampler3D flameTexture;
-uniform usampler3D flagTexture;
-uniform sampler1D flameColorTexture;
-uniform sampler1D transferTexture;
-uniform mat4 volumeObjectToTexture;
-
-uniform int samplesLen = 256;
-uniform float noiseOfs = 0.0;
-uniform float stepLength; /* Step length in local space. */
-uniform float densityScale; /* Simple Opacity multiplicator. */
-uniform float gridScale; /* Multiplicator for grid scaling. */
-uniform vec3 activeColor;
-
-uniform float slicePosition;
-uniform int sliceAxis; /* -1 is no slice, 0 is X, 1 is Y, 2 is Z. */
-
-uniform bool showPhi = false;
-uniform bool showFlags = false;
-uniform bool showPressure = false;
-
-#ifdef VOLUME_SLICE
-in vec3 localPos;
-#endif
-
-out vec4 fragColor;
-
float phase_function_isotropic()
{
return 1.0 / (4.0 * M_PI);
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl
index 7327a92e04f..d2b12f41421 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl
@@ -1,22 +1,8 @@
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
-#pragma BLENDER_REQUIRE(gpu_shader_common_obinfos_lib.glsl)
-
-uniform float slicePosition;
-uniform int sliceAxis; /* -1 is no slice, 0 is X, 1 is Y, 2 is Z. */
-
-uniform mat4 volumeTextureToObject;
-
-in vec3 pos;
RESOURCE_ID_VARYING
-#ifdef VOLUME_SLICE
-in vec3 uvs;
-
-out vec3 localPos;
-#endif
-
void main()
{
#ifdef VOLUME_SLICE
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl
index 41ef516ee4d..531ed461057 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl
@@ -1,6 +1,4 @@
-#pragma BLENDER_REQUIRE(workbench_data_lib.glsl)
-
/* [Drobot2014a] Low Level Optimizations for GCN */
vec4 fast_rcp(vec4 v)
{
@@ -120,12 +118,10 @@ vec3 get_world_lighting(vec3 base_color, float roughness, float metallic, vec3 N
return diffuse_light + specular_light;
}
-uniform bool forceShadowing = false;
-
-float get_shadow(vec3 N)
+float get_shadow(vec3 N, bool force_shadowing)
{
float light_factor = -dot(N, world_data.shadow_direction_vs.xyz);
float shadow_mix = smoothstep(world_data.shadow_shift, world_data.shadow_focus, light_factor);
- shadow_mix *= forceShadowing ? 0.0 : world_data.shadow_mul;
+ shadow_mix *= force_shadowing ? 0.0 : world_data.shadow_mul;
return shadow_mix + world_data.shadow_add;
}