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
path: root/source
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2022-10-06 17:42:19 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-10-07 13:43:09 +0300
commit03a7f1d7b1103e693a5a3ee95ed5f4bc46b1ca54 (patch)
tree668be1884d269b12a716e50b138cc017f33aec5d /source
parent055680a89e4b37662daf0c397539866a42c6d54a (diff)
DRW: Move CameraTexCoFactors to engine specific storage
This is part of the effor to simplify the View struct in order to implement multiview rendering. The CameraTexCoFactors being only valid for a single view, and being only used in very few places, it make sense to move it to the engine side.
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c7
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h13
-rw-r--r--source/blender/draw/engines/eevee/eevee_render.c2
-rw-r--r--source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl8
-rw-r--r--source/blender/draw/engines/eevee/shaders/surface_lib.glsl9
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl2
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_camera.cc6
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_camera.hh2
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_defines.hh2
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_pipeline.cc6
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_shader_shared.hh2
-rw-r--r--source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl2
-rw-r--r--source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh9
-rw-r--r--source/blender/draw/intern/DRW_render.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c1
-rw-r--r--source/blender/draw/intern/draw_manager_data.cc12
-rw-r--r--source/blender/draw/intern/draw_shader_shared.h3
-rw-r--r--source/blender/draw/intern/draw_view.cc2
-rw-r--r--source/blender/draw/intern/shaders/common_view_lib.glsl3
19 files changed, 45 insertions, 48 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 1cb630e6d59..ff7dda1152c 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -231,6 +231,13 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata,
eevee_init_noise_texture();
}
+ if (draw_ctx->rv3d) {
+ copy_v4_v4(sldata->common_data.camera_uv_scale, draw_ctx->rv3d->viewcamtexcofac);
+ }
+ else {
+ copy_v4_fl4(sldata->common_data.camera_uv_scale, 1.0f, 1.0f, 0.0f, 0.0f);
+ }
+
if (!DRW_state_is_image_render() && ((stl->effects->enabled_effects & EFFECT_TAA) == 0)) {
sldata->common_data.alpha_hash_offset = 0.0f;
sldata->common_data.alpha_hash_scale = 1.0f;
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 6f30ffcb364..b7f2b0ae859 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -895,14 +895,11 @@ typedef struct EEVEE_CommonUniformBuffer {
float prb_irradiance_smooth; /* float */
float prb_lod_cube_max; /* float */
/* Misc */
- int ray_type; /* int */
- float ray_depth; /* float */
- float alpha_hash_offset; /* float */
- float alpha_hash_scale; /* float */
- float pad7; /* float */
- float pad8; /* float */
- float pad9; /* float */
- float pad10; /* float */
+ int ray_type; /* int */
+ float ray_depth; /* float */
+ float alpha_hash_offset; /* float */
+ float alpha_hash_scale; /* float */
+ float camera_uv_scale[2], camera_uv_bias[2]; /* vec4 */
} EEVEE_CommonUniformBuffer;
BLI_STATIC_ASSERT_ALIGN(EEVEE_CommonUniformBuffer, 16)
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index c3b909f5fb9..1d18056e175 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -157,8 +157,6 @@ void EEVEE_render_view_sync(EEVEE_Data *vedata, RenderEngine *engine, struct Dep
DRW_view_reset();
DRW_view_default_set(view);
DRW_view_set_active(view);
-
- DRW_view_camtexco_set(view, g_data->camtexcofac);
}
void EEVEE_render_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
diff --git a/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl b/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
index c935eca6a39..0cf36817788 100644
--- a/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
@@ -1,4 +1,6 @@
+#define COMMON_UNIFORMS_LIB
+
layout(std140) uniform common_block
{
mat4 pastViewProjectionMatrix;
@@ -42,10 +44,8 @@ layout(std140) uniform common_block
float rayDepth;
float alphaHashOffset;
float alphaHashScale;
- float pad6;
- float pad7;
- float pad8;
- float pad9;
+ /* Misc */
+ vec4 cameraUvScaleBias;
};
/* rayType (keep in sync with ray_type) */
diff --git a/source/blender/draw/engines/eevee/shaders/surface_lib.glsl b/source/blender/draw/engines/eevee/shaders/surface_lib.glsl
index ac7519195c0..13a6498938b 100644
--- a/source/blender/draw/engines/eevee/shaders/surface_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/surface_lib.glsl
@@ -1,6 +1,7 @@
/** This describe the entire interface of the shader. */
#pragma BLENDER_REQUIRE(common_math_lib.glsl)
+#pragma BLENDER_REQUIRE(common_math_lib.glsl)
#define SURFACE_INTERFACE \
vec3 worldPosition; \
@@ -176,13 +177,13 @@ vec3 coordinate_screen(vec3 P)
/* Unsupported. It would make the probe camera-dependent. */
window.xy = vec2(0.5);
-#elif defined(WORLD_BACKGROUND)
+#elif defined(WORLD_BACKGROUND) && defined(COMMON_UNIFORMS_LIB)
window.xy = project_point(ProjectionMatrix, viewPosition).xy * 0.5 + 0.5;
- window.xy = window.xy * CameraTexCoFactors.xy + CameraTexCoFactors.zw;
+ window.xy = window.xy * cameraUvScaleBias.xy + cameraUvScaleBias.zw;
-#else /* MESH */
+#elif defined(COMMON_UNIFORMS_LIB) /* MESH */
window.xy = project_point(ProjectionMatrix, transform_point(ViewMatrix, P)).xy * 0.5 + 0.5;
- window.xy = window.xy * CameraTexCoFactors.xy + CameraTexCoFactors.zw;
+ window.xy = window.xy * cameraUvScaleBias.xy + cameraUvScaleBias.zw;
#endif
return window;
}
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
index eebcf56de28..90c36801dd5 100644
--- a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
@@ -53,7 +53,7 @@ vec3 coordinate_screen(vec3 P)
{
vec3 window = vec3(0.0);
window.xy = project_point(ProjectionMatrix, transform_point(ViewMatrix, P)).xy * 0.5 + 0.5;
- window.xy = window.xy * CameraTexCoFactors.xy + CameraTexCoFactors.zw;
+ window.xy = window.xy * cameraUvScaleBias.xy + cameraUvScaleBias.zw;
return window;
}
diff --git a/source/blender/draw/engines/eevee_next/eevee_camera.cc b/source/blender/draw/engines/eevee_next/eevee_camera.cc
index b9040f0f3ab..ad22219f0ae 100644
--- a/source/blender/draw/engines/eevee_next/eevee_camera.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_camera.cc
@@ -85,7 +85,9 @@ void Camera::sync()
DRW_view_winmat_get(inst_.drw_view, data.wininv.ptr(), true);
DRW_view_persmat_get(inst_.drw_view, data.persmat.ptr(), false);
DRW_view_persmat_get(inst_.drw_view, data.persinv.ptr(), true);
- DRW_view_camtexco_get(inst_.drw_view, data.uv_scale);
+ /* TODO(fclem): Derive from rv3d instead. */
+ data.uv_scale = float2(1.0f);
+ data.uv_bias = float2(0.0f);
}
else if (inst_.render) {
/* TODO(@fclem): Over-scan. */
@@ -106,6 +108,8 @@ void Camera::sync()
data.wininv = data.winmat.inverted();
data.persmat = data.winmat * data.viewmat;
data.persinv = data.persmat.inverted();
+ data.uv_scale = float2(1.0f);
+ data.uv_bias = float2(0.0f);
}
if (camera_eval) {
diff --git a/source/blender/draw/engines/eevee_next/eevee_camera.hh b/source/blender/draw/engines/eevee_next/eevee_camera.hh
index 49f9b14e11b..aaef0f5898d 100644
--- a/source/blender/draw/engines/eevee_next/eevee_camera.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_camera.hh
@@ -99,7 +99,7 @@ class Camera {
BLI_assert(data_.initialized);
return data_;
}
- const GPUUniformBuf *ubo_get() const
+ GPUUniformBuf *ubo_get() const
{
return data_;
}
diff --git a/source/blender/draw/engines/eevee_next/eevee_defines.hh b/source/blender/draw/engines/eevee_next/eevee_defines.hh
index 248dfae6df9..fca8737f661 100644
--- a/source/blender/draw/engines/eevee_next/eevee_defines.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_defines.hh
@@ -90,6 +90,8 @@
#define VELOCITY_CAMERA_CURR_BUF 4
#define VELOCITY_CAMERA_NEXT_BUF 5
+#define CAMERA_BUF_SLOT 6
+
/* Storage Buffers. */
#define LIGHT_CULL_BUF_SLOT 0
#define LIGHT_BUF_SLOT 1
diff --git a/source/blender/draw/engines/eevee_next/eevee_pipeline.cc b/source/blender/draw/engines/eevee_next/eevee_pipeline.cc
index cc5a4d56231..e6b37b4ad47 100644
--- a/source/blender/draw/engines/eevee_next/eevee_pipeline.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_pipeline.cc
@@ -79,6 +79,8 @@ void ForwardPipeline::sync()
/* Textures. */
prepass_ps_.bind_texture(RBUFS_UTILITY_TEX_SLOT, inst_.pipelines.utility_tx);
+ /* Uniform Buf. */
+ prepass_ps_.bind_ubo(CAMERA_BUF_SLOT, inst_.camera.ubo_get());
inst_.velocity.bind_resources(&prepass_ps_);
inst_.sampling.bind_resources(&prepass_ps_);
@@ -117,6 +119,8 @@ void ForwardPipeline::sync()
opaque_ps_.bind_ssbo(RBUFS_AOV_BUF_SLOT, &inst_.film.aovs_info);
/* Textures. */
opaque_ps_.bind_texture(RBUFS_UTILITY_TEX_SLOT, inst_.pipelines.utility_tx);
+ /* Uniform Buf. */
+ opaque_ps_.bind_ubo(CAMERA_BUF_SLOT, inst_.camera.ubo_get());
inst_.lights.bind_resources(&opaque_ps_);
inst_.sampling.bind_resources(&opaque_ps_);
@@ -140,6 +144,8 @@ void ForwardPipeline::sync()
/* Textures. */
sub.bind_texture(RBUFS_UTILITY_TEX_SLOT, inst_.pipelines.utility_tx);
+ /* Uniform Buf. */
+ opaque_ps_.bind_ubo(CAMERA_BUF_SLOT, inst_.camera.ubo_get());
inst_.lights.bind_resources(&sub);
inst_.sampling.bind_resources(&sub);
diff --git a/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh b/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh
index 8e96445d6b9..fd06cdc7f23 100644
--- a/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh
@@ -163,7 +163,7 @@ struct CameraData {
float4x4 viewinv;
float4x4 winmat;
float4x4 wininv;
- /** Camera UV scale and bias. Also known as `viewcamtexcofac`. */
+ /** Camera UV scale and bias. */
float2 uv_scale;
float2 uv_bias;
/** Panorama parameters. */
diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl
index 9422cb726b7..4b53375575c 100644
--- a/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl
+++ b/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl
@@ -345,7 +345,7 @@ vec3 coordinate_screen(vec3 P)
else {
/* TODO(fclem): Actual camera transform. */
window.xy = project_point(ProjectionMatrix, transform_point(ViewMatrix, P)).xy * 0.5 + 0.5;
- window.xy = window.xy * CameraTexCoFactors.xy + CameraTexCoFactors.zw;
+ window.xy = window.xy * camera_buf.uv_scale + camera_buf.uv_bias;
}
return window;
}
diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh
index 78d52d4b90e..b632564a9ca 100644
--- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh
+++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh
@@ -20,6 +20,8 @@ GPU_SHADER_CREATE_INFO(eevee_sampling_data)
GPU_SHADER_CREATE_INFO(eevee_utility_texture)
.sampler(RBUFS_UTILITY_TEX_SLOT, ImageType::FLOAT_2D_ARRAY, "utility_tx");
+GPU_SHADER_CREATE_INFO(eevee_camera).uniform_buf(CAMERA_BUF_SLOT, "CameraData", "camera_buf");
+
/** \} */
/* -------------------------------------------------------------------- */
@@ -114,7 +116,8 @@ GPU_SHADER_CREATE_INFO(eevee_surf_deferred)
// .image_out(6, Qualifier::READ_WRITE, GPU_RGBA16F, "rpass_volume_light")
/* TODO: AOVs maybe? */
.fragment_source("eevee_surf_deferred_frag.glsl")
- // .additional_info("eevee_aov_out", "eevee_sampling_data", "eevee_utility_texture")
+ // .additional_info("eevee_aov_out", "eevee_sampling_data", "eevee_camera",
+ // "eevee_utility_texture")
;
GPU_SHADER_CREATE_INFO(eevee_surf_forward)
@@ -127,6 +130,7 @@ GPU_SHADER_CREATE_INFO(eevee_surf_forward)
.fragment_source("eevee_surf_forward_frag.glsl")
.additional_info("eevee_cryptomatte_out",
"eevee_light_data",
+ "eevee_camera",
"eevee_utility_texture",
"eevee_sampling_data"
// "eevee_lightprobe_data",
@@ -141,7 +145,7 @@ GPU_SHADER_CREATE_INFO(eevee_surf_forward)
GPU_SHADER_CREATE_INFO(eevee_surf_depth)
.vertex_out(eevee_surf_iface)
.fragment_source("eevee_surf_depth_frag.glsl")
- .additional_info("eevee_sampling_data", "eevee_utility_texture");
+ .additional_info("eevee_sampling_data", "eevee_camera", "eevee_utility_texture");
GPU_SHADER_CREATE_INFO(eevee_surf_world)
.vertex_out(eevee_surf_iface)
@@ -151,6 +155,7 @@ GPU_SHADER_CREATE_INFO(eevee_surf_world)
.additional_info("eevee_aov_out",
"eevee_cryptomatte_out",
"eevee_render_pass_out",
+ "eevee_camera",
"eevee_utility_texture");
#undef image_out
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 1752198c349..c65938fd8ce 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -683,8 +683,6 @@ const DRWView *DRW_view_get_active(void);
* \note planes must be in world space.
*/
void DRW_view_clip_planes_set(DRWView *view, float (*planes)[4], int plane_len);
-void DRW_view_camtexco_set(DRWView *view, float texco[4]);
-void DRW_view_camtexco_get(const DRWView *view, float r_texco[4]);
/* For all getters, if view is NULL, default view is assumed. */
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 3272edef750..50ea27efba1 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -566,7 +566,6 @@ static void drw_manager_init(DRWManager *dst, GPUViewport *viewport, const int s
dst->pixsize = rv3d->pixsize;
dst->view_default = DRW_view_create(rv3d->viewmat, rv3d->winmat, NULL, NULL, NULL);
- DRW_view_camtexco_set(dst->view_default, rv3d->viewcamtexcofac);
if (dst->draw_ctx.sh_cfg == GPU_SHADER_CFG_CLIPPED) {
int plane_len = (RV3D_LOCK_FLAGS(rv3d) & RV3D_BOXCLIP) ? 4 : 6;
diff --git a/source/blender/draw/intern/draw_manager_data.cc b/source/blender/draw/intern/draw_manager_data.cc
index fc4e444e43e..1d678886380 100644
--- a/source/blender/draw/intern/draw_manager_data.cc
+++ b/source/blender/draw/intern/draw_manager_data.cc
@@ -2213,8 +2213,6 @@ DRWView *DRW_view_create(const float viewmat[4][4],
view->visibility_fn = visibility_fn;
view->parent = nullptr;
- copy_v4_fl4(view->storage.viewcamtexcofac, 1.0f, 1.0f, 0.0f, 0.0f);
-
if (DST.draw_ctx.evil_C && DST.draw_ctx.region) {
int region_origin[2] = {DST.draw_ctx.region->winrct.xmin, DST.draw_ctx.region->winrct.ymin};
wmWindow *win = CTX_wm_window(DST.draw_ctx.evil_C);
@@ -2357,16 +2355,6 @@ void DRW_view_clip_planes_set(DRWView *view, float (*planes)[4], int plane_len)
}
}
-void DRW_view_camtexco_set(DRWView *view, float texco[4])
-{
- copy_v4_v4(view->storage.viewcamtexcofac, texco);
-}
-
-void DRW_view_camtexco_get(const DRWView *view, float r_texco[4])
-{
- copy_v4_v4(r_texco, view->storage.viewcamtexcofac);
-}
-
void DRW_view_frustum_corners_get(const DRWView *view, BoundBox *corners)
{
memcpy(corners, &view->frustum_corners, sizeof(view->frustum_corners));
diff --git a/source/blender/draw/intern/draw_shader_shared.h b/source/blender/draw/intern/draw_shader_shared.h
index 13f21323552..b8c2d8890a5 100644
--- a/source/blender/draw/intern/draw_shader_shared.h
+++ b/source/blender/draw/intern/draw_shader_shared.h
@@ -69,8 +69,6 @@ struct ViewInfos {
float4 clip_planes[6];
float4 viewvecs[2];
- /* Should not be here. Not view dependent (only main view). */
- float4 viewcamtexcofac;
float2 viewport_size;
float2 viewport_size_inverse;
@@ -94,7 +92,6 @@ BLI_STATIC_ASSERT_ALIGN(ViewInfos, 16)
# define ProjectionMatrixInverse drw_view.wininv
# define clipPlanes drw_view.clip_planes
# define ViewVecs drw_view.viewvecs
-# define CameraTexCoFactors drw_view.viewcamtexcofac
#endif
/** \} */
diff --git a/source/blender/draw/intern/draw_view.cc b/source/blender/draw/intern/draw_view.cc
index bf3505c7645..3b16ea74a67 100644
--- a/source/blender/draw/intern/draw_view.cc
+++ b/source/blender/draw/intern/draw_view.cc
@@ -21,8 +21,6 @@ void View::sync(const float4x4 &view_mat, const float4x4 &win_mat)
data_.viewinv = view_mat.inverted();
data_.winmat = win_mat;
data_.wininv = win_mat.inverted();
- /* Should not be used anymore. */
- data_.viewcamtexcofac = float4(1.0f, 1.0f, 0.0f, 0.0f);
data_.is_inverted = (is_negative_m4(view_mat.ptr()) == is_negative_m4(win_mat.ptr()));
diff --git a/source/blender/draw/intern/shaders/common_view_lib.glsl b/source/blender/draw/intern/shaders/common_view_lib.glsl
index a7f8f858352..2382337e782 100644
--- a/source/blender/draw/intern/shaders/common_view_lib.glsl
+++ b/source/blender/draw/intern/shaders/common_view_lib.glsl
@@ -21,9 +21,6 @@ layout(std140) uniform viewBlock
/* View frustum corners [NDC(-1.0, -1.0, -1.0) & NDC(1.0, 1.0, 1.0)].
* Fourth components are near and far values. */
vec4 ViewVecs[2];
-
- /* TODO: move it elsewhere. */
- vec4 CameraTexCoFactors;
};
#endif /* USE_GPU_SHADER_CREATE_INFO */