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
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2022-08-30 14:06:41 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-08-30 14:06:41 +0300
commite32180aafa5f7acfb1b07004faf76c8e575569d6 (patch)
tree4efe9326df3112046912eb28d82dca399fe7b71f
parentfce7e485787c7ef7435873352fa0ccc678926386 (diff)
Fix test cases
-rw-r--r--source/blender/draw/intern/draw_command.cc6
-rw-r--r--source/blender/draw/intern/draw_manager.cc3
-rw-r--r--source/blender/draw/intern/draw_pass.hh8
-rw-r--r--source/blender/draw/intern/draw_shader_shared.h3
-rw-r--r--source/blender/draw/intern/shaders/draw_resource_finalize_comp.glsl4
-rw-r--r--source/blender/draw/intern/shaders/draw_visibility_comp.glsl3
-rw-r--r--source/blender/draw/tests/draw_pass_test.cc1
7 files changed, 18 insertions, 10 deletions
diff --git a/source/blender/draw/intern/draw_command.cc b/source/blender/draw/intern/draw_command.cc
index 5e75d7c8e49..3a2afa0e5b7 100644
--- a/source/blender/draw/intern/draw_command.cc
+++ b/source/blender/draw/intern/draw_command.cc
@@ -36,6 +36,9 @@ void ShaderBind::execute(RecordingState &state) const
void ResourceBind::execute() const
{
+ if (slot == -1) {
+ return;
+ }
switch (type) {
case ResourceBind::Type::Sampler:
GPU_texture_bind_ex(is_reference ? *texture_ref : texture, sampler, slot, false);
@@ -54,6 +57,9 @@ void ResourceBind::execute() const
void PushConstant::execute(RecordingState &state) const
{
+ if (location == -1) {
+ return;
+ }
switch (type) {
case PushConstant::Type::IntValue:
GPU_shader_uniform_vector_int(state.shader, location, comp_len, array_len, int4_value);
diff --git a/source/blender/draw/intern/draw_manager.cc b/source/blender/draw/intern/draw_manager.cc
index e0bd766f781..6feae81b62f 100644
--- a/source/blender/draw/intern/draw_manager.cc
+++ b/source/blender/draw/intern/draw_manager.cc
@@ -78,6 +78,9 @@ void Manager::end_sync()
void Manager::debug_bind()
{
#ifdef DEBUG
+ if (DST.debug == nullptr) {
+ return;
+ }
GPU_storagebuf_bind(drw_debug_gpu_draw_buf_get(), DRW_DEBUG_DRAW_SLOT);
GPU_storagebuf_bind(drw_debug_gpu_print_buf_get(), DRW_DEBUG_PRINT_SLOT);
# ifndef DISABLE_DEBUG_SHADER_PRINT_BARRIER
diff --git a/source/blender/draw/intern/draw_pass.hh b/source/blender/draw/intern/draw_pass.hh
index 650fa30010c..56e99059c7b 100644
--- a/source/blender/draw/intern/draw_pass.hh
+++ b/source/blender/draw/intern/draw_pass.hh
@@ -811,16 +811,12 @@ template<class T> inline void PassBase<T>::bind(int slot, GPUUniformBuf *buffer)
template<class T>
inline void PassBase<T>::bind(int slot, GPUTexture *texture, eGPUSamplerState state)
{
- if (slot != -1) {
- create_command(Type::ResourceBind).resource_bind = {slot, texture, state};
- }
+ create_command(Type::ResourceBind).resource_bind = {slot, texture, state};
}
template<class T> inline void PassBase<T>::bind(int slot, draw::Image *image)
{
- if (slot != -1) {
- create_command(Type::ResourceBind).resource_bind = {slot, image};
- }
+ create_command(Type::ResourceBind).resource_bind = {slot, image};
}
template<class T> inline void PassBase<T>::bind(const char *name, GPUStorageBuf **buffer)
diff --git a/source/blender/draw/intern/draw_shader_shared.h b/source/blender/draw/intern/draw_shader_shared.h
index 267e88f704b..32829a1271f 100644
--- a/source/blender/draw/intern/draw_shader_shared.h
+++ b/source/blender/draw/intern/draw_shader_shared.h
@@ -116,7 +116,8 @@ enum eObjectInfoFlag {
OBJECT_FROM_SET = (1u << 2u),
OBJECT_ACTIVE = (1u << 3u),
OBJECT_NEGATIVE_SCALE = (1u << 4u),
- OBJECT_NO_INFO = 0xFFFFFFFFu
+ /* Avoid skipped info to change culling. */
+ OBJECT_NO_INFO = ~OBJECT_NEGATIVE_SCALE
};
struct ObjectInfos {
diff --git a/source/blender/draw/intern/shaders/draw_resource_finalize_comp.glsl b/source/blender/draw/intern/shaders/draw_resource_finalize_comp.glsl
index 70fe645c128..d834435e54e 100644
--- a/source/blender/draw/intern/shaders/draw_resource_finalize_comp.glsl
+++ b/source/blender/draw/intern/shaders/draw_resource_finalize_comp.glsl
@@ -22,6 +22,10 @@ void main()
vec3 p01 = bounds.bounding_corners[1].xyz - p0;
vec3 p02 = bounds.bounding_corners[2].xyz - p0;
vec3 p03 = bounds.bounding_corners[3].xyz - p0;
+ /* Avoid flat box. */
+ p01.x = max(p01.x, 1e-4);
+ p02.y = max(p02.y, 1e-4);
+ p03.z = max(p03.z, 1e-4);
vec3 diagonal = p01 + p02 + p03;
vec3 center = p0 + diagonal * 0.5;
float min_axis = min_v3(abs(diagonal));
diff --git a/source/blender/draw/intern/shaders/draw_visibility_comp.glsl b/source/blender/draw/intern/shaders/draw_visibility_comp.glsl
index d48c65786af..7ec58c8f919 100644
--- a/source/blender/draw/intern/shaders/draw_visibility_comp.glsl
+++ b/source/blender/draw/intern/shaders/draw_visibility_comp.glsl
@@ -38,12 +38,9 @@ void main()
/* Not visible. */
mask_visibility_bit();
}
-#if 0 /* Still has some quirks for now. Would be nice to fix as it would remove a lot of false \
- positive. */
else if (intersect_view(box) == false) {
/* Not visible. */
mask_visibility_bit();
}
-#endif
}
} \ No newline at end of file
diff --git a/source/blender/draw/tests/draw_pass_test.cc b/source/blender/draw/tests/draw_pass_test.cc
index 5a8adaa866a..d2ab3d925b5 100644
--- a/source/blender/draw/tests/draw_pass_test.cc
+++ b/source/blender/draw/tests/draw_pass_test.cc
@@ -125,6 +125,7 @@ static void test_draw_pass_sub_ordering()
expected << " .push_constant(-1, data=1)" << std::endl;
expected << " .Sub1" << std::endl;
expected << " .push_constant(-1, data=11)" << std::endl;
+ expected << " .push_constant(-1, data=12)" << std::endl;
expected << " .Sub2" << std::endl;
expected << " .push_constant(-1, data=21)" << std::endl;
expected << " .push_constant(-1, data=22)" << std::endl;