[Bf-blender-cvs] [105452c1f57] tmp-eevee-aov: EEVEE AOV: Add support for 64 AOVs
Jeroen Bakker
noreply at git.blender.org
Thu Sep 24 15:00:54 CEST 2020
Commit: 105452c1f5791fce1f1759eef54c28216ab8bb77
Author: Jeroen Bakker
Date: Thu Sep 24 14:59:58 2020 +0200
Branches: tmp-eevee-aov
https://developer.blender.org/rB105452c1f5791fce1f1759eef54c28216ab8bb77
EEVEE AOV: Add support for 64 AOVs
Also adds fixes ShaderToColor node.
===================================================================
M source/blender/draw/engines/eevee/eevee_materials.c
M source/blender/draw/engines/eevee/eevee_private.h
===================================================================
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 12469c738e4..f579fd6c813 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -272,12 +272,6 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata,
data = (EEVEE_RenderPassData){true, true, true, true, true, false, true, false, 0};
sldata->renderpass_ubo.environment = GPU_uniformbuf_create_ex(
sizeof(data), &data, "renderpass_ubo.environment");
-
- for (int aov_index = 0; aov_index < MAX_AOVS; aov_index++) {
- data = (EEVEE_RenderPassData){false, false, false, false, false, false, false, true, 0};
- sldata->renderpass_ubo.aovs[aov_index] = GPU_uniformbuf_create_ex(
- sizeof(data), &data, "renderpass_ubo.aovs");
- }
}
/* Used combined pass by default. */
@@ -286,7 +280,7 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata,
{
g_data->num_aovs_used = 0;
if ((stl->g_data->render_passes & EEVEE_RENDER_PASS_AOV) != 0) {
- EEVEE_RenderPassData data = {false, false, false, false, false, false, false, true, 0};
+ EEVEE_RenderPassData data = {true, true, true, true, true, false, false, true, 0};
if (stl->g_data->aov_name_hash == EEVEE_AOV_HASH_ALL) {
ViewLayer *view_layer = draw_ctx->view_layer;
int aov_index = 0;
@@ -296,17 +290,34 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata,
}
int aov_name_hash = BLI_hash_string(aov->name);
data.renderPassAOVActive = aov_name_hash;
- GPU_uniformbuf_update(sldata->renderpass_ubo.aovs[aov_index], &data);
+ if (sldata->renderpass_ubo.aovs[aov_index]) {
+ GPU_uniformbuf_update(sldata->renderpass_ubo.aovs[aov_index], &data);
+ }
+ else {
+ sldata->renderpass_ubo.aovs[aov_index] = GPU_uniformbuf_create_ex(
+ sizeof(data), &data, "renderpass_ubo.aovs");
+ }
aov_index++;
}
g_data->num_aovs_used = aov_index;
}
else {
+ /* Rendering a single AOV in the 3d viewport */
data.renderPassAOVActive = stl->g_data->aov_name_hash;
- GPU_uniformbuf_update(sldata->renderpass_ubo.aovs[0], &data);
+ if (sldata->renderpass_ubo.aovs[0]) {
+ GPU_uniformbuf_update(sldata->renderpass_ubo.aovs[0], &data);
+ }
+ else {
+ sldata->renderpass_ubo.aovs[0] = GPU_uniformbuf_create_ex(
+ sizeof(data), &data, "renderpass_ubo.aovs");
+ }
g_data->num_aovs_used = 1;
}
}
+ /* Free AOV UBO's that are not in use. */
+ for (int aov_index = g_data->num_aovs_used; aov_index < MAX_AOVS; aov_index++) {
+ DRW_UBO_FREE_SAFE(sldata->renderpass_ubo.aovs[aov_index]);
+ }
}
/* HACK: EEVEE_material_get can create a new context. This can only be
@@ -1061,6 +1072,10 @@ void EEVEE_material_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *v
sldata->renderpass_ubo.aovs[aov_index]);
}
}
+ /* Free unused aov textures. */
+ for (int aov_index = pd->num_aovs_used; aov_index < MAX_AOVS; aov_index++) {
+ DRW_TEXTURE_FREE_SAFE(txl->aov_surface_accum[aov_index]);
+ }
/* Restore default. */
pd->renderpass_ubo = sldata->renderpass_ubo.combined;
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index dd76f8040b0..7f59152e464 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -53,6 +53,7 @@ extern struct DrawEngineType draw_engine_eevee_type;
#define MAX_SHADOW_CASCADE 8
#define MAX_SHADOW_CUBE (MAX_SHADOW - MAX_CASCADE_NUM * MAX_SHADOW_CASCADE)
#define MAX_BLOOM_STEP 16
+#define MAX_AOVS 64
// #define DEBUG_SHADOW_DISTRIBUTION
@@ -165,7 +166,6 @@ BLI_INLINE bool eevee_hdri_preview_overlay_enabled(const View3D *v3d)
EEVEE_RENDER_PASS_SPECULAR_COLOR | EEVEE_RENDER_PASS_SPECULAR_LIGHT | \
EEVEE_RENDER_PASS_ENVIRONMENT | EEVEE_RENDER_PASS_AOV)
#define EEVEE_AOV_HASH_ALL -1
-#define MAX_AOVS 8
/* Material shader variations */
enum {
More information about the Bf-blender-cvs
mailing list