[Bf-blender-cvs] [8501e93deaa] tmp-workbench-rewrite2: Refactor
Miguel Pozo
noreply at git.blender.org
Mon Oct 10 13:48:56 CEST 2022
Commit: 8501e93deaaf22a5f25c77967e861153e53dd560
Author: Miguel Pozo
Date: Mon Oct 10 13:45:45 2022 +0200
Branches: tmp-workbench-rewrite2
https://developer.blender.org/rB8501e93deaaf22a5f25c77967e861153e53dd560
Refactor
Split workbench_engine.cc into multiple files.
Move all the SceneResources loading logic directly into Instance.
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
M source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
R084 source/blender/draw/engines/workbench/workbench_defines.h source/blender/draw/engines/workbench/workbench_defines.hh
A source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
M source/blender/draw/engines/workbench/workbench_engine.cc
A source/blender/draw/engines/workbench/workbench_enums.hh
A source/blender/draw/engines/workbench/workbench_materials.cc
A source/blender/draw/engines/workbench/workbench_mesh_passes.cc
A source/blender/draw/engines/workbench/workbench_private.hh
A source/blender/draw/engines/workbench/workbench_shader_cache.cc
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 95ebbd054c0..d84f0df816b 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -155,15 +155,19 @@ set(SRC
engines/eevee_next/eevee_world.cc
engines/workbench/workbench_data.c
engines/workbench/workbench_effect_antialiasing.c
+ engines/workbench/workbench_effect_antialiasing.cc
engines/workbench/workbench_effect_cavity.c
engines/workbench/workbench_effect_dof.c
engines/workbench/workbench_effect_outline.c
engines/workbench/workbench_engine.c
engines/workbench/workbench_engine.cc
engines/workbench/workbench_materials.c
+ engines/workbench/workbench_materials.cc
+ engines/workbench/workbench_mesh_passes.cc
engines/workbench/workbench_opaque.c
engines/workbench/workbench_render.c
engines/workbench/workbench_shader.cc
+ engines/workbench/workbench_shader_cache.cc
engines/workbench/workbench_shadow.c
engines/workbench/workbench_transparent.c
engines/workbench/workbench_volume.c
@@ -678,6 +682,7 @@ set(GLSL_SRC
)
set(GLSL_C)
+
foreach(GLSL_FILE ${GLSL_SRC})
data_to_c_simple(${GLSL_FILE} GLSL_C)
endforeach()
@@ -689,6 +694,7 @@ list(APPEND LIB
)
set(GLSL_SOURCE_CONTENT "")
+
foreach(GLSL_FILE ${GLSL_SRC})
get_filename_component(GLSL_FILE_NAME ${GLSL_FILE} NAME)
string(REPLACE "." "_" GLSL_FILE_NAME_UNDERSCORES ${GLSL_FILE_NAME})
@@ -733,7 +739,6 @@ if(WITH_GTESTS)
endif()
endif()
-
blender_add_lib(bf_draw "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
# Needed so we can use dna_type_offsets.h for defaults initialization.
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
index 2cd795d3f7e..f2e996a1f0f 100644
--- a/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "gpu_shader_create_info.hh"
-#include "workbench_defines.h"
+#include "workbench_defines.hh"
/* -------------------------------------------------------------------- */
/** \name Base Composite
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
index ab4a2a2ac33..f4db7bc522f 100644
--- a/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "gpu_shader_create_info.hh"
-#include "workbench_defines.h"
+#include "workbench_defines.hh"
/* -------------------------------------------------------------------- */
/** \name Object Type
diff --git a/source/blender/draw/engines/workbench/workbench_defines.h b/source/blender/draw/engines/workbench/workbench_defines.hh
similarity index 84%
rename from source/blender/draw/engines/workbench/workbench_defines.h
rename to source/blender/draw/engines/workbench/workbench_defines.hh
index 33fe189c9ff..2b85c19b0a3 100644
--- a/source/blender/draw/engines/workbench/workbench_defines.h
+++ b/source/blender/draw/engines/workbench/workbench_defines.hh
@@ -5,3 +5,5 @@
#define WB_TILEMAP_SLOT 2
#define WB_MATERIAL_SLOT 0
#define WB_WORLD_SLOT 4
+
+#define WB_RESOLVE_GROUP_SIZE 8
diff --git a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
new file mode 100644
index 00000000000..a437717f7f6
--- /dev/null
+++ b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
@@ -0,0 +1,102 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include "workbench_private.hh"
+
+#include "smaa_textures.h"
+
+namespace blender::workbench {
+
+AntiAliasingPass::AntiAliasingPass()
+{
+ smaa_edge_detect_sh = GPU_shader_create_from_info_name("workbench_smaa_stage_0");
+ smaa_aa_weight_sh = GPU_shader_create_from_info_name("workbench_smaa_stage_1");
+ smaa_resolve_sh = GPU_shader_create_from_info_name("workbench_smaa_stage_2");
+
+ smaa_search_tx.ensure_2d(GPU_R8, {SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT});
+ GPU_texture_update(smaa_search_tx, GPU_DATA_UBYTE, searchTexBytes);
+ GPU_texture_filter_mode(smaa_search_tx, true);
+
+ smaa_area_tx.ensure_2d(GPU_RG8, {AREATEX_WIDTH, AREATEX_HEIGHT});
+ GPU_texture_update(smaa_area_tx, GPU_DATA_UBYTE, areaTexBytes);
+ GPU_texture_filter_mode(smaa_area_tx, true);
+}
+
+AntiAliasingPass::~AntiAliasingPass()
+{
+ if (smaa_edge_detect_sh) {
+ GPU_shader_free(smaa_edge_detect_sh);
+ }
+ if (smaa_aa_weight_sh) {
+ GPU_shader_free(smaa_aa_weight_sh);
+ }
+ if (smaa_resolve_sh) {
+ GPU_shader_free(smaa_resolve_sh);
+ }
+}
+
+void AntiAliasingPass::sync(SceneResources &resources)
+{
+ {
+ smaa_edge_detect_ps_.init();
+ smaa_edge_detect_ps_.state_set(DRW_STATE_WRITE_COLOR);
+ smaa_edge_detect_ps_.shader_set(smaa_edge_detect_sh);
+ smaa_edge_detect_ps_.bind_texture("colorTex", &resources.color_tx);
+ smaa_edge_detect_ps_.push_constant("viewportMetrics", &smaa_viewport_metrics, 1);
+ smaa_edge_detect_ps_.clear_color(float4(0.0f));
+ smaa_edge_detect_ps_.draw_procedural(GPU_PRIM_TRIS, 1, 3);
+ }
+ {
+ smaa_aa_weight_ps_.init();
+ smaa_aa_weight_ps_.state_set(DRW_STATE_WRITE_COLOR);
+ smaa_aa_weight_ps_.shader_set(smaa_aa_weight_sh);
+ smaa_aa_weight_ps_.bind_texture("edgesTex", &smaa_edge_tx);
+ smaa_aa_weight_ps_.bind_texture("areaTex", smaa_area_tx);
+ smaa_aa_weight_ps_.bind_texture("searchTex", smaa_search_tx);
+ smaa_aa_weight_ps_.push_constant("viewportMetrics", &smaa_viewport_metrics, 1);
+ smaa_aa_weight_ps_.clear_color(float4(0.0f));
+ smaa_aa_weight_ps_.draw_procedural(GPU_PRIM_TRIS, 1, 3);
+ }
+ {
+ smaa_resolve_ps_.init();
+ smaa_resolve_ps_.state_set(DRW_STATE_WRITE_COLOR);
+ smaa_resolve_ps_.shader_set(smaa_resolve_sh);
+ smaa_resolve_ps_.bind_texture("blendTex", &smaa_weight_tx);
+ smaa_resolve_ps_.bind_texture("colorTex", &resources.color_tx);
+ smaa_resolve_ps_.push_constant("viewportMetrics", &smaa_viewport_metrics, 1);
+ smaa_resolve_ps_.push_constant("mixFactor", &smaa_mix_factor, 1);
+ smaa_resolve_ps_.push_constant("taaAccumulatedWeight", &taa_weight_accum, 1);
+ smaa_resolve_ps_.clear_color(float4(0.0f));
+ smaa_resolve_ps_.draw_procedural(GPU_PRIM_TRIS, 1, 3);
+ }
+}
+
+void AntiAliasingPass::draw(Manager &manager,
+ View &view,
+ GPUTexture *depth_tx,
+ GPUTexture *color_tx)
+{
+ int2 size = {GPU_texture_width(depth_tx), GPU_texture_height(depth_tx)};
+
+ taa_weight_accum = 1.0f; /* TODO */
+
+ smaa_viewport_metrics = float4(1.0f / size.x, 1.0f / size.y, size.x, size.y);
+ smaa_mix_factor = 1.0f; /* TODO */
+
+ smaa_edge_tx.acquire(size, GPU_RG8);
+ smaa_edge_fb.ensure(GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(smaa_edge_tx));
+ smaa_edge_fb.bind();
+ manager.submit(smaa_edge_detect_ps_, view);
+
+ smaa_weight_tx.acquire(size, GPU_RGBA8);
+ smaa_weight_fb.ensure(GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(smaa_weight_tx));
+ smaa_weight_fb.bind();
+ manager.submit(smaa_aa_weight_ps_, view);
+ smaa_edge_tx.release();
+
+ smaa_resolve_fb.ensure(GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(color_tx));
+ smaa_resolve_fb.bind();
+ manager.submit(smaa_resolve_ps_, view);
+ smaa_weight_tx.release();
+}
+
+} // namespace blender::workbench
diff --git a/source/blender/draw/engines/workbench/workbench_engine.cc b/source/blender/draw/engines/workbench/workbench_engine.cc
index 509c82ea572..2f11ed48723 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.cc
+++ b/source/blender/draw/engines/workbench/workbench_engine.cc
@@ -2,625 +2,14 @@
#include "BKE_studiolight.h"
#include "DEG_depsgraph_query.h"
-#include "DRW_render.h"
#include "GPU_capabilities.h"
-#include "smaa_textures.h"
-
-#include "draw_manager.hh"
-#include "draw_pass.hh"
-
-#include "workbench_defines.h"
-#include "workbench_shader_shared.h"
+#include "workbench_private.hh"
namespace blender::workbench {
using namespace draw;
-#define WB_RESOLVE_GROUP_SIZE 8
-
-enum class eGeometryType {
- MESH = 0,
- CURVES,
- POINTCLOUD,
-};
-static constexpr int geometry_type_len = static_cast<int>(eGeometryType::POINTCLOUD) + 1;
-
-static inline const char *get_name(eGeometryType type)
-{
- switch (type) {
- case eGeometryType::MESH:
- return "Mesh";
- case eGeometryType::CURVES:
- return "Curves";
- case eGeometryType::POINTCLOUD:
- return "PointCloud";
- default:
- BLI_assert_unreachable();
- return "";
- }
-}
-
-static inline eGeometryType geometry_type_from_object(Object *ob)
-{
- switch (ob->type) {
- case OB_CURVES:
- return eGeometryType::CURVES;
- case OB_POINTCLOUD:
- return eGeometryType::POINTCLOUD;
- default:
- return eGeometryType::MESH;
- }
-}
-
-enum class ePipelineType {
- OPAQUE = 0,
- TRANSPARENT,
- SHADOW,
-};
-static constexpr int pipeline_type_len = static_cast<int>(ePipelineType::SHADOW) + 1;
-
-enum class eShadingType {
- FLAT = 0, /* V3D_LIGHTING_STUDIO */
- STUDIO, /* V3D_LIGHTING_MATCAP */
- MATCAP, /* V3D_LIGHTING_FLAT */
-};
-static constexpr int shading_type_len = static_cast<int>(eShadingType::MATCAP) + 1;
-
-enum class eColorType {
- MATERIAL = 0,
- TEXTURE,
-};
-static constexpr int color_type_len = static_cast<int>(eColorType::TEXTURE) + 1;
-
-enum class eMaterialSubType {
- NONE = 0,
- MATERIAL,
- RANDOM,
- SINGLE,
- OBJECT,
- ATTRIBUTE,
-};
-static constexpr int material_subtype_len = static_cast<int>(eMaterialSubType::ATTRIBUTE) + 1;
-
-struct Material {
- float3 base_color;
- /* Packed data into a int. Decoded in the shader. */
- uint packed_data;
-
- Material() = default;
-
- Material(float3 color)
- {
- base_color = color;
- packed_data = Material::pack_data(0.0f, 0.4f, 1.0f);
- }
- Material(::Object &ob,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list