[Bf-blender-cvs] [ff78b59b7c4] soc-2019-npr: LANPR: GPU mode follow cache size settings.
YimingWu
noreply at git.blender.org
Thu Jul 4 06:33:59 CEST 2019
Commit: ff78b59b7c4639b52c2bd4f69374fc85ba81c55d
Author: YimingWu
Date: Thu Jul 4 12:33:30 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBff78b59b7c4639b52c2bd4f69374fc85ba81c55d
LANPR: GPU mode follow cache size settings.
===================================================================
M source/blender/draw/engines/lanpr/lanpr_all.h
M source/blender/draw/engines/lanpr/lanpr_dpix.c
M source/blender/draw/engines/lanpr/lanpr_engine.c
M source/blender/makesdna/DNA_scene_types.h
M source/blender/makesrna/intern/rna_scene.c
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 96c8e39bc93..20951373469 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -49,6 +49,7 @@
#include "BKE_customdata.h"
#include "DEG_depsgraph_query.h"
#include "GPU_draw.h"
+#include "GPU_texture.h"
#include "BLI_threads.h"
@@ -94,6 +95,7 @@ typedef struct LANPR_SharedResource {
GPUShader *dpix_transform_shader;
GPUShader *dpix_preview_shader;
int dpix_shader_error;
+ int texture_size;
/* Software */
GPUShader *software_shader;
@@ -111,8 +113,6 @@ typedef struct LANPR_SharedResource {
} LANPR_SharedResource;
-#define TNS_DPIX_TEXTURE_SIZE 2048
-
typedef struct LANPR_PassList {
/* Snake */
struct DRWPass *depth_pass;
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index bda66b799fe..022e3684600 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -31,6 +31,21 @@ extern char datatoc_lanpr_dpix_project_clip_frag_glsl[];
extern char datatoc_lanpr_dpix_preview_geom_glsl[];
extern char datatoc_lanpr_dpix_preview_frag_glsl[];
+int lanpr_dpix_texture_size(SceneLANPR *lanpr)
+{
+ switch (lanpr->gpu_cache_size) {
+ case LANPR_GPU_CACHE_SIZE_512:
+ return 512;
+ case LANPR_GPU_CACHE_SIZE_1K:
+ return 1024;
+ case LANPR_GPU_CACHE_SIZE_2K:
+ return 2048;
+ case LANPR_GPU_CACHE_SIZE_4K:
+ return 4096;
+ }
+ return 512;
+}
+
void lanpr_init_atlas_inputs(void *ved)
{
lanpr_share.ved_viewport = ved;
@@ -46,23 +61,35 @@ void lanpr_init_atlas_inputs(void *ved)
Object *camera = (rv3d && rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
SceneLANPR *lanpr = &draw_ctx->scene->lanpr;
+ int texture_size = lanpr_dpix_texture_size(lanpr);
+ lanpr_share.texture_size = texture_size;
+
+ if (txl->dpix_in_pl && GPU_texture_width(txl->dpix_in_pl) != texture_size) {
+ DRW_texture_free(txl->dpix_in_pl);
+ txl->dpix_in_pl = NULL;
+ DRW_texture_free(txl->dpix_in_pr);
+ txl->dpix_in_pr = NULL;
+ DRW_texture_free(txl->dpix_in_nl);
+ txl->dpix_in_nl = NULL;
+ DRW_texture_free(txl->dpix_in_nr);
+ txl->dpix_in_nr = NULL;
+ DRW_texture_free(txl->dpix_out_pl);
+ txl->dpix_out_pl = NULL;
+ DRW_texture_free(txl->dpix_out_pr);
+ txl->dpix_out_pr = NULL;
+ DRW_texture_free(txl->dpix_out_length);
+ txl->dpix_out_length = NULL;
+ }
+
if (lanpr->reloaded || !txl->dpix_in_pl) {
- DRW_texture_ensure_2d(
- &txl->dpix_in_pl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2d(
- &txl->dpix_in_pr, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2d(
- &txl->dpix_in_nl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2d(
- &txl->dpix_in_nr, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2d(
- &txl->dpix_in_edge_mask, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA8, 0);
- DRW_texture_ensure_2d(
- &txl->dpix_out_pl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2d(
- &txl->dpix_out_pr, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2d(
- &txl->dpix_out_length, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
+ DRW_texture_ensure_2d(&txl->dpix_in_pl, texture_size, texture_size, GPU_RGBA32F, 0);
+ DRW_texture_ensure_2d(&txl->dpix_in_pr, texture_size, texture_size, GPU_RGBA32F, 0);
+ DRW_texture_ensure_2d(&txl->dpix_in_nl, texture_size, texture_size, GPU_RGBA32F, 0);
+ DRW_texture_ensure_2d(&txl->dpix_in_nr, texture_size, texture_size, GPU_RGBA32F, 0);
+ DRW_texture_ensure_2d(&txl->dpix_in_edge_mask, texture_size, texture_size, GPU_RGBA8, 0);
+ DRW_texture_ensure_2d(&txl->dpix_out_pl, texture_size, texture_size, GPU_RGBA32F, 0);
+ DRW_texture_ensure_2d(&txl->dpix_out_pr, texture_size, texture_size, GPU_RGBA32F, 0);
+ DRW_texture_ensure_2d(&txl->dpix_out_length, texture_size, texture_size, GPU_RGBA32F, 0);
}
GPU_framebuffer_ensure_config(&fbl->dpix_transform,
@@ -287,16 +314,16 @@ int lanpr_feed_atlas_data_intersection_cache(void *vedata,
void lanpr_dpix_index_to_coord(int index, float *x, float *y)
{
- (*x) = tnsLinearItp(
- -1, 1, (float)(index % TNS_DPIX_TEXTURE_SIZE + 0.5) / (float)TNS_DPIX_TEXTURE_SIZE);
- (*y) = tnsLinearItp(
- -1, 1, (float)(index / TNS_DPIX_TEXTURE_SIZE + 0.5) / (float)TNS_DPIX_TEXTURE_SIZE);
+ int texture_size = lanpr_share.texture_size;
+ (*x) = tnsLinearItp(-1, 1, (float)(index % texture_size + 0.5) / (float)texture_size);
+ (*y) = tnsLinearItp(-1, 1, (float)(index / texture_size + 0.5) / (float)texture_size);
}
void lanpr_dpix_index_to_coord_absolute(int index, float *x, float *y)
{
- (*x) = (float)(index % TNS_DPIX_TEXTURE_SIZE) + 0.5;
- (*y) = (float)(index / TNS_DPIX_TEXTURE_SIZE) + 0.5;
+ int texture_size = lanpr_share.texture_size;
+ (*x) = (float)(index % texture_size) + 0.5;
+ (*y) = (float)(index / texture_size) + 0.5;
}
int lanpr_feed_atlas_trigger_preview_obj(void *vedata, Object *ob, int begin_index)
@@ -450,11 +477,13 @@ void lanpr_dpix_draw_scene(LANPR_TextureList *txl,
}
/* XXX: should implement view angle functions for ortho camera. */
+ int texture_size = lanpr_share.texture_size;
+
pd->dpix_viewport[2] = texw;
pd->dpix_viewport[3] = texh;
pd->dpix_is_perspective = is_persp;
pd->dpix_sample_step = 1;
- pd->dpix_buffer_width = TNS_DPIX_TEXTURE_SIZE;
+ pd->dpix_buffer_width = texture_size;
pd->dpix_depth_offset = 0.0001;
pd->dpix_znear = camera ? ((Camera *)camera->data)->clip_start : v3d->clip_start;
pd->dpix_zfar = camera ? ((Camera *)camera->data)->clip_end : v3d->clip_end;
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index b2ea2247046..99732b804be 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -183,6 +183,7 @@ static void lanpr_engine_free(void)
}
void lanpr_calculate_normal_object_vector(LANPR_LineLayer *ll, float *normal_object_direction);
+int lanpr_dpix_texture_size(SceneLANPR *lanpr);
static void lanpr_cache_init(void *vedata)
{
@@ -212,6 +213,9 @@ static void lanpr_cache_init(void *vedata)
SceneLANPR *lanpr = &scene->lanpr;
View3D *v3d = draw_ctx->v3d;
+ int texture_size = lanpr_dpix_texture_size(lanpr);
+ lanpr_share.texture_size = texture_size;
+
psl->color_pass = DRW_pass_create(
"color Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_WRITE_DEPTH);
stl->g_data->multipass_shgrp = DRW_shgroup_create(lanpr_share.multichannel_shader,
@@ -397,7 +401,7 @@ static void lanpr_cache_init(void *vedata)
stl->g_data->dpix_preview_shgrp, "normal_direction", normal_object_direction, 1);
pd->begin_index = 0;
- int fsize = sizeof(float) * 4 * TNS_DPIX_TEXTURE_SIZE * TNS_DPIX_TEXTURE_SIZE;
+ int fsize = sizeof(float) * 4 * texture_size * texture_size;
if (lanpr->reloaded) {
pd->atlas_pl = MEM_callocN(fsize, "atlas_point_l");
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 8a3fbd14466..87968e1eab3 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1682,7 +1682,7 @@ typedef struct SceneLANPR {
/* edge split modifier will cause problems in LANPR. */
int disable_edge_splits;
-
+
int gpu_cache_size; /* enum! */
/* offline render */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 4baf34ee949..fd1a2025f66 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -7198,7 +7198,6 @@ static void rna_def_scene_lanpr(BlenderRNA *brna)
{LANPR_GPU_CACHE_SIZE_4K, "S4K", 0, "4K", "4K px texture as cache"},
{0, NULL, 0, NULL, NULL}};
-
srna = RNA_def_struct(brna, "SceneLANPR", NULL);
RNA_def_struct_sdna(srna, "SceneLANPR");
RNA_def_struct_ui_text(srna, "Scene LANPR Config", "LANPR global config");
More information about the Bf-blender-cvs
mailing list