diff options
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders')
39 files changed, 612 insertions, 569 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..e93f241ad3c --- /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(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", "draw_view"); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \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..3e0124546b0 --- /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(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(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(Type::FLOAT, "mixFactor") + .push_constant(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..29468d6002a 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,9 @@ GPU_SHADER_CREATE_INFO(workbench_effect_cavity_common) .fragment_out(0, Type::VEC4, "fragColor") - .sampler(0, ImageType::FLOAT_2D, "depthBuffer") - .sampler(1, ImageType::FLOAT_2D, "normalBuffer") - .sampler(2, ImageType::UINT_2D, "objectIdBuffer") - .uniform_buf(3, "vec4", "samples_coords[512]") + .sampler(0, ImageType::FLOAT_2D, "normalBuffer") + .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"); @@ -14,15 +13,23 @@ GPU_SHADER_CREATE_INFO(workbench_effect_cavity_common) GPU_SHADER_CREATE_INFO(workbench_effect_cavity) .do_static_compilation(true) .define("USE_CAVITY") + .uniform_buf(3, "vec4", "samples_coords[512]") + .sampler(1, ImageType::DEPTH_2D, "depthBuffer") + .sampler(2, ImageType::FLOAT_2D, "cavityJitter") .additional_info("workbench_effect_cavity_common"); GPU_SHADER_CREATE_INFO(workbench_effect_curvature) .do_static_compilation(true) .define("USE_CURVATURE") + .sampler(1, ImageType::UINT_2D, "objectIdBuffer") .additional_info("workbench_effect_cavity_common"); GPU_SHADER_CREATE_INFO(workbench_effect_cavity_curvature) .do_static_compilation(true) .define("USE_CAVITY") .define("USE_CURVATURE") + .uniform_buf(3, "vec4", "samples_coords[512]") + .sampler(1, ImageType::DEPTH_2D, "depthBuffer") + .sampler(2, ImageType::FLOAT_2D, "cavityJitter") + .sampler(3, ImageType::UINT_2D, "objectIdBuffer") .additional_info("workbench_effect_cavity_common"); 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..252a7d4f3a3 --- /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(Type::VEC2, "invertedViewportSize") + .push_constant(Type::VEC2, "nearFar") + .push_constant(Type::VEC3, "dofParams") + .push_constant(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/infos/workbench_prepass_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh new file mode 100644 index 00000000000..29eadc8048a --- /dev/null +++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh @@ -0,0 +1,149 @@ + +#include "gpu_shader_create_info.hh" + +/* -------------------------------------------------------------------- */ +/** \name Object Type + * \{ */ + +GPU_SHADER_CREATE_INFO(workbench_mesh) + .vertex_in(0, Type::VEC3, "pos") + .vertex_in(1, Type::VEC3, "nor") + .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_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_resource_handle"); + +GPU_SHADER_CREATE_INFO(workbench_pointcloud) + .vertex_source("workbench_prepass_pointcloud_vert.glsl") + .additional_info("draw_pointcloud") + .additional_info("draw_resource_handle"); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Texture Type + * \{ */ + +GPU_SHADER_CREATE_INFO(workbench_texture_none).define("TEXTURE_NONE"); + +GPU_SHADER_CREATE_INFO(workbench_texture_single) + .sampler(2, ImageType::FLOAT_2D, "imageTexture", Frequency::BATCH) + .push_constant(Type::BOOL, "imagePremult") + .push_constant(Type::FLOAT, "imageTransparencyCutoff") + .define("V3D_SHADING_TEXTURE_COLOR"); + +GPU_SHADER_CREATE_INFO(workbench_texture_tile) + .sampler(2, ImageType::FLOAT_2D_ARRAY, "imageTileArray", Frequency::BATCH) + .sampler(3, ImageType::FLOAT_1D_ARRAY, "imageTileData", Frequency::BATCH) + .push_constant(Type::BOOL, "imagePremult") + .push_constant(Type::FLOAT, "imageTransparencyCutoff") + .define("V3D_SHADING_TEXTURE_COLOR") + .define("TEXTURE_IMAGE_ARRAY"); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Lighting Type (only for transparent) + * \{ */ + +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); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Material Interface + * \{ */ + +GPU_SHADER_INTERFACE_INFO(workbench_material_iface, "") + .smooth(Type::VEC3, "normal_interp") + .smooth(Type::VEC3, "color_interp") + .smooth(Type::FLOAT, "alpha_interp") + .smooth(Type::VEC2, "uv_interp") + .flat(Type::INT, "object_id") + .flat(Type::FLOAT, "roughness") + .flat(Type::FLOAT, "metallic"); + +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(Type::INT, "materialIndex") + .push_constant(Type::BOOL, "useMatcap") + .vertex_out(workbench_material_iface); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Pipeline Type + * \{ */ + +GPU_SHADER_CREATE_INFO(workbench_transparent_accum) + /* Note: Blending will be skipped on objectId because output is a + non-normalized integer buffer. */ + .fragment_out(0, Type::VEC4, "transparentAccum") + .fragment_out(1, Type::VEC4, "revealageAccum") + .fragment_out(2, Type::UINT, "objectId") + .push_constant(Type::BOOL, "forceShadowing") + .typedef_source("workbench_shader_shared.h") + .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") + .typedef_source("workbench_shader_shared.h") + .fragment_source("workbench_prepass_frag.glsl"); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Variations Declaration + * \{ */ + +#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_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..c26d3c3aaf8 --- /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(Type::FLOAT, "lightDistance") + .push_constant(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..dd9492481ec --- /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(Type::INT, "samplesLen") + .push_constant(Type::FLOAT, "noiseOfs") + .push_constant(Type::FLOAT, "stepLength") + .push_constant(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(Type::MAT4, "volumeTextureToObject") + /* FIXME(fclem): This overflow the push_constant limit. */ + .push_constant(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(Type::BOOL, "showPhi") + .push_constant(Type::BOOL, "showFlags") + .push_constant(Type::BOOL, "showPressure") + .push_constant(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(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(Type::INT, "sliceAxis") /* -1 is no slice. */ + .push_constant(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..880f17b0c9d 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_cavity_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_cavity_lib.glsl @@ -1,18 +1,12 @@ #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 */ +#ifdef USE_CAVITY + void cavity_compute(vec2 screenco, sampler2D depthBuffer, sampler2D normalBuffer, @@ -98,3 +92,5 @@ void cavity_compute(vec2 screenco, cavities = clamp(cavities * world_data.cavity_valley_factor, 0.0, 1.0); edges = edges * world_data.cavity_ridge_factor; } + +#endif /* USE_CAVITY */ 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..a6f7a1f522a 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_curvature_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_curvature_lib.glsl @@ -1,5 +1,7 @@ -#pragma BLENDER_REQUIRE(workbench_data_lib.glsl) +#pragma BLENDER_REQUIRE(workbench_common_lib.glsl) + +#ifdef USE_CURVATURE float curvature_soft_clamp(float curvature, float control) { @@ -45,3 +47,5 @@ void curvature_compute(vec2 uv, curvature = 2.0 * curvature_soft_clamp(normal_diff, world_data.curvature_ridge); } } + +#endif /* USE_CURVATURE */ 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_info.hh b/source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh deleted file mode 100644 index 1dd706c9460..00000000000 --- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh +++ /dev/null @@ -1,136 +0,0 @@ - -#include "gpu_shader_create_info.hh" - -/* -------------------------------------------------------------------- */ -/** \name Object Type - * \{ */ - -GPU_SHADER_CREATE_INFO(workbench_mesh) - .vertex_in(0, Type::VEC3, "pos") - .vertex_in(1, Type::VEC3, "nor") - .vertex_in(2, Type::VEC4, "ac") - .vertex_in(3, Type::VEC2, "au") - .vertex_source("workbench_prepass_vert.glsl") - .additional_info("draw_mesh"); - -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"); - -GPU_SHADER_CREATE_INFO(workbench_pointcloud) - .vertex_source("workbench_prepass_pointcloud_vert.glsl") - .additional_info("draw_pointcloud"); - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \name Texture Type - * \{ */ - -GPU_SHADER_CREATE_INFO(workbench_texture_none).define("TEXTURE_NONE"); - -GPU_SHADER_CREATE_INFO(workbench_texture_single) - .sampler(2, ImageType::FLOAT_2D, "imageTexture", Frequency::BATCH) - .push_constant(1, Type::BOOL, "imagePremult") - .push_constant(2, Type::FLOAT, "imageTransparencyCutoff") - .define("V3D_SHADING_TEXTURE_COLOR"); - -GPU_SHADER_CREATE_INFO(workbench_texture_tile) - .sampler(2, ImageType::FLOAT_2D_ARRAY, "imageTileArray", Frequency::BATCH) - .sampler(3, ImageType::FLOAT_1D_ARRAY, "imageTileData", Frequency::BATCH) - .push_constant(1, Type::BOOL, "imagePremult") - .push_constant(2, Type::FLOAT, "imageTransparencyCutoff") - .define("TEXTURE_IMAGE_ARRAY"); - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \name Lighting Type - * \{ */ - -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"); - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \name Material Interface - * \{ */ - -GPU_SHADER_INTERFACE_INFO(workbench_material_iface, "") - .smooth(Type::VEC3, "normal_interp") - .smooth(Type::VEC3, "color_interp") - .smooth(Type::FLOAT, "alpha_interp") - .smooth(Type::VEC2, "uv_interp") - .flat(Type::INT, "object_id") - .flat(Type::FLOAT, "roughness") - .flat(Type::FLOAT, "metallic"); - -GPU_SHADER_CREATE_INFO(workbench_material).vertex_out(workbench_material_iface); - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \name Pipeline Type - * \{ */ - -GPU_SHADER_CREATE_INFO(workbench_transparent_accum) - /* Note: Blending will be skipped on objectId because output is a - non-normalized integer buffer. */ - .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) - .typedef_source("workbench_shader_shared.h") - .fragment_source("workbench_transparent_accum_frag.glsl") - .additional_info("workbench_material"); - -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"); - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \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_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") - -/** \} */ 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 09bafb8ff11..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 @@ -1,41 +1,7 @@ -#extension GL_ARB_gpu_shader5 : enable - -#ifdef GL_ARB_gpu_shader5 +#ifdef GPU_ARB_gpu_shader5 # 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; @@ -76,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 2c9190bfcf4..9902884fc12 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl @@ -1,41 +1,7 @@ -#extension GL_ARB_gpu_shader5 : enable - -#ifdef GL_ARB_gpu_shader5 +#ifdef GPU_ARB_gpu_shader5 # 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; } |