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/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2022-08-19 22:02:02 +0300
committerBrecht Van Lommel <brecht@blender.org>2022-08-19 22:02:02 +0300
commit6b9209ddfab375c55b73c11ac798b76345b822a0 (patch)
tree08aa1760f2aebe814f4c11e04d3b1f5141800c13 /intern
parent6ef4267d5ef6fe91069c1ce1a131f49534eeb516 (diff)
parent51b79e4775e1f661df9aac60b7d355b72aa8b748 (diff)
Merge branch 'blender-v3.3-release'
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/CMakeLists.txt1
-rw-r--r--intern/cycles/blender/display_driver.cpp24
-rw-r--r--intern/cycles/graph/node_type.h2
-rw-r--r--intern/cycles/util/defines.h40
4 files changed, 24 insertions, 43 deletions
diff --git a/intern/cycles/blender/CMakeLists.txt b/intern/cycles/blender/CMakeLists.txt
index ab0937ac9eb..72f8a4cc15d 100644
--- a/intern/cycles/blender/CMakeLists.txt
+++ b/intern/cycles/blender/CMakeLists.txt
@@ -8,6 +8,7 @@ set(INC
../../../source/blender/makesdna
../../../source/blender/makesrna
../../../source/blender/blenlib
+ ../../../source/blender/gpu
${CMAKE_BINARY_DIR}/source/blender/makesrna/intern
)
diff --git a/intern/cycles/blender/display_driver.cpp b/intern/cycles/blender/display_driver.cpp
index 61cd88fb433..30ad3ecad51 100644
--- a/intern/cycles/blender/display_driver.cpp
+++ b/intern/cycles/blender/display_driver.cpp
@@ -7,6 +7,8 @@
#include "util/log.h"
#include "util/opengl.h"
+#include "GPU_platform.h"
+
extern "C" {
struct RenderEngine;
@@ -507,6 +509,7 @@ class DrawTileAndPBO {
DrawTile tile;
GLPixelBufferObject buffer_object;
+ bool need_update_texture_pixels = false;
};
/* --------------------------------------------------------------------
@@ -585,6 +588,8 @@ void BlenderDisplayDriver::next_tile_begin()
/* Moving to the next tile without giving render data for the current tile is not an expected
* situation. */
DCHECK(!need_clear_);
+ /* Texture should have been updated from the PBO at this point. */
+ DCHECK(!tiles_->current_tile.need_update_texture_pixels);
tiles_->finished_tiles.tiles.emplace_back(std::move(tiles_->current_tile.tile));
}
@@ -702,8 +707,18 @@ void BlenderDisplayDriver::update_end()
* One concern with this approach is that if the update happens more often than drawing then
* doing the unpack here occupies GPU transfer for no good reason. However, the render scheduler
* takes care of ensuring updates don't happen that often. In regular applications redraw will
- * happen much more often than this update. */
- update_tile_texture_pixels(tiles_->current_tile);
+ * happen much more often than this update.
+ *
+ * On some older GPUs on macOS, there is a driver crash when updating the texture for viewport
+ * renders while Blender is drawing. As a workaround update texture during draw, under assumption
+ * that there is no graphics interop on macOS and viewport render has a single tile. */
+ if (use_gl_context_ &&
+ GPU_type_matches_ex(GPU_DEVICE_NVIDIA, GPU_OS_MAC, GPU_DRIVER_ANY, GPU_BACKEND_ANY)) {
+ tiles_->current_tile.need_update_texture_pixels = true;
+ }
+ else {
+ update_tile_texture_pixels(tiles_->current_tile);
+ }
gl_upload_sync_ = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
glFlush();
@@ -953,6 +968,11 @@ void BlenderDisplayDriver::draw(const Params &params)
glEnableVertexAttribArray(texcoord_attribute);
glEnableVertexAttribArray(position_attribute);
+ if (tiles_->current_tile.need_update_texture_pixels) {
+ update_tile_texture_pixels(tiles_->current_tile);
+ tiles_->current_tile.need_update_texture_pixels = false;
+ }
+
draw_tile(zoom_,
texcoord_attribute,
position_attribute,
diff --git a/intern/cycles/graph/node_type.h b/intern/cycles/graph/node_type.h
index 65b16c9bf75..9101b51bb9f 100644
--- a/intern/cycles/graph/node_type.h
+++ b/intern/cycles/graph/node_type.h
@@ -171,7 +171,7 @@ struct NodeType {
#define SOCKET_DEFINE(name, ui_name, default_value, datatype, TYPE, flags, ...) \
{ \
static datatype defval = default_value; \
- CHECK_TYPE(T::name, datatype); \
+ static_assert(std::is_same_v<decltype(T::name), datatype>); \
type->register_input(ustring(#name), \
ustring(ui_name), \
TYPE, \
diff --git a/intern/cycles/util/defines.h b/intern/cycles/util/defines.h
index c7118ca09c9..1969529eff0 100644
--- a/intern/cycles/util/defines.h
+++ b/intern/cycles/util/defines.h
@@ -89,46 +89,6 @@
# define UNLIKELY(x) (x)
#endif
-#if defined(__GNUC__) || defined(__clang__)
-# if defined(__cplusplus)
-/* Some magic to be sure we don't have reference in the type. */
-template<typename T> static inline T decltype_helper(T x)
-{
- return x;
-}
-# define TYPEOF(x) decltype(decltype_helper(x))
-# else
-# define TYPEOF(x) typeof(x)
-# endif
-#endif
-
-/* Causes warning:
- * incompatible types when assigning to type 'Foo' from type 'Bar'
- * ... the compiler optimizes away the temp var */
-#ifdef __GNUC__
-# define CHECK_TYPE(var, type) \
- { \
- TYPEOF(var) * __tmp; \
- __tmp = (type *)NULL; \
- (void)__tmp; \
- } \
- (void)0
-
-# define CHECK_TYPE_PAIR(var_a, var_b) \
- { \
- TYPEOF(var_a) * __tmp; \
- __tmp = (typeof(var_b) *)NULL; \
- (void)__tmp; \
- } \
- (void)0
-#else
-# define CHECK_TYPE(var, type)
-# define CHECK_TYPE_PAIR(var_a, var_b)
-#endif
-
-/* can be used in simple macros */
-#define CHECK_TYPE_INLINE(val, type) ((void)(((type)0) != (val)))
-
#ifndef __KERNEL_GPU__
# include <cassert>
# define util_assert(statement) assert(statement)