From 70415af210dc9bc4d94d9a27d87fdff8137ad38c Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 1 Mar 2022 15:12:38 +0100 Subject: [PATCH 1/4] dtoolutil: Set system malloc tag to mimalloc when enabled --- dtool/src/dtoolutil/pandaSystem.cxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dtool/src/dtoolutil/pandaSystem.cxx b/dtool/src/dtoolutil/pandaSystem.cxx index fa09e065ca..44f4f2dc60 100644 --- a/dtool/src/dtoolutil/pandaSystem.cxx +++ b/dtool/src/dtoolutil/pandaSystem.cxx @@ -58,6 +58,8 @@ PandaSystem() : set_system_tag("system", "malloc", "dlmalloc"); #elif defined(USE_MEMORY_PTMALLOC2) set_system_tag("system", "malloc", "ptmalloc2"); +#elif defined(USE_MEMORY_MIMALLOC) + set_system_tag("system", "malloc", "mimalloc"); #else set_system_tag("system", "malloc", "malloc"); #endif From ac3aa64d336b16150e63078a7a7e4de1f1a7a3e5 Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 1 Mar 2022 15:13:30 +0100 Subject: [PATCH 2/4] express: Add docstring to DatagramIterator about Datagram lifetime Related to #1262 [skip ci] --- panda/src/express/datagramIterator.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/panda/src/express/datagramIterator.h b/panda/src/express/datagramIterator.h index 867c7de58c..5137022c5f 100644 --- a/panda/src/express/datagramIterator.h +++ b/panda/src/express/datagramIterator.h @@ -23,6 +23,9 @@ * A class to retrieve the individual data elements previously stored in a * Datagram. Elements may be retrieved one at a time; it is up to the caller * to know the correct type and order of each element. + * + * Note that it is the responsibility of the caller to ensure that the datagram + * object is not destructed while this DatagramIterator is in use. */ class EXPCL_PANDA_EXPRESS DatagramIterator { public: From ad187b29f826b80dd5b331a5283d43ee8f277911 Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 2 Mar 2022 10:01:57 +0100 Subject: [PATCH 3/4] makepanda: Force choose correct extension suffix for Windows Even when cross-compiling for 32-bit using a 64-bit copy of Python, and vice versa --- makepanda/makepandacore.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/makepanda/makepandacore.py b/makepanda/makepandacore.py index 0b7225432e..405ce75fc0 100644 --- a/makepanda/makepandacore.py +++ b/makepanda/makepandacore.py @@ -3489,11 +3489,17 @@ def SetOrigExt(x, v): ORIG_EXT[x] = v def GetExtensionSuffix(): - if sys.version_info >= (3, 0): + target = GetTarget() + + if sys.version_info >= (3, 5) and target == 'windows': + if GetTargetArch() == 'x64': + return '.cp%d%d-win_amd64.pyd' % (sys.version_info[:2]) + else: + return '.cp%d%d-win32.pyd' % (sys.version_info[:2]) + elif sys.version_info >= (3, 0): import _imp return _imp.extension_suffixes()[0] - target = GetTarget() if target == 'windows': return '.pyd' else: From 930e5da43816bb60bd4968618bd0368465d6f3f3 Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 2 Mar 2022 10:42:45 +0100 Subject: [PATCH 4/4] texture: Fix get_ram_image_as() with 3D and multiview textures Fixes #1277 --- panda/src/gobj/texture.cxx | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/panda/src/gobj/texture.cxx b/panda/src/gobj/texture.cxx index b0ad695ba1..318eaf59c9 100644 --- a/panda/src/gobj/texture.cxx +++ b/panda/src/gobj/texture.cxx @@ -1072,13 +1072,13 @@ set_ram_image_as(CPTA_uchar image, const string &supplied_format) { if (format == "A" && cdata->_num_components != 3) { // We can generally rely on alpha to be the last component. int component = cdata->_num_components - 1; - for (int p = 0; p < imgsize; ++p) { + for (size_t p = 0; p < imgsize; ++p) { newdata[component] = image[p]; } do_set_ram_image(cdata, newdata); return; } - for (int p = 0; p < imgsize; ++p) { + for (size_t p = 0; p < imgsize; ++p) { for (uchar s = 0; s < format.size(); ++s) { signed char component = -1; if (format.at(s) == 'B' || (cdata->_num_components <= 2 && format.at(s) != 'A')) { @@ -1110,7 +1110,7 @@ set_ram_image_as(CPTA_uchar image, const string &supplied_format) { do_set_ram_image(cdata, newdata); return; } - for (int p = 0; p < imgsize; ++p) { + for (size_t p = 0; p < imgsize; ++p) { for (uchar s = 0; s < format.size(); ++s) { signed char component = -1; if (format.at(s) == 'B' || (cdata->_num_components <= 2 && format.at(s) != 'A')) { @@ -7405,7 +7405,8 @@ get_ram_image_as(const string &requested_format) { gobj_cat.error() << "Couldn't find an uncompressed RAM image!\n"; return CPTA_uchar(get_class_type()); } - int imgsize = cdata->_x_size * cdata->_y_size; + size_t imgsize = (size_t)cdata->_x_size * (size_t)cdata->_y_size * + (size_t)cdata->_z_size * (size_t)cdata->_num_views; nassertr(cdata->_num_components > 0 && cdata->_num_components <= 4, CPTA_uchar(get_class_type())); nassertr(data.size() == (size_t)(cdata->_component_width * cdata->_num_components * imgsize), CPTA_uchar(get_class_type())); @@ -7443,7 +7444,7 @@ get_ram_image_as(const string &requested_format) { const uint32_t *src = (const uint32_t *)data.p(); uint32_t *dst = (uint32_t *)newdata.p(); - for (int p = 0; p < imgsize; ++p) { + for (size_t p = 0; p < imgsize; ++p) { uint32_t v = *src++; *dst++ = ((v & 0xff00ff00u)) | ((v & 0x00ff0000u) >> 16) | @@ -7530,14 +7531,14 @@ get_ram_image_as(const string &requested_format) { } if (format == "A" && cdata->_num_components != 3) { // We can generally rely on alpha to be the last component. - for (int p = 0; p < imgsize; ++p) { + for (size_t p = 0; p < imgsize; ++p) { dst[p] = src[alpha]; src += cdata->_num_components; } return newdata; } // Fallback case for other 8-bit-per-channel formats. - for (int p = 0; p < imgsize; ++p) { + for (size_t p = 0; p < imgsize; ++p) { for (size_t i = 0; i < format.size(); ++i) { if (format[i] == 'B' || (cdata->_num_components <= 2 && format[i] != 'A')) { *dst++ = src[0]; @@ -7563,7 +7564,7 @@ get_ram_image_as(const string &requested_format) { } // The slow and general case. - for (int p = 0; p < imgsize; ++p) { + for (size_t p = 0; p < imgsize; ++p) { for (size_t i = 0; i < format.size(); ++i) { int component = 0; if (format[i] == 'B' || (cdata->_num_components <= 2 && format[i] != 'A')) {