From 4d32f051ab4af40c1e1308211f11243509b1405d Mon Sep 17 00:00:00 2001 From: rogerman Date: Mon, 9 Nov 2015 03:46:14 +0000 Subject: [PATCH] =?UTF-8?q?Render3D:=20-=20Explicitly=20make=20the=20Rende?= =?UTF-8?q?r3D=20class=20allocate=20itself=20with=20a=20cache-aligned=20ba?= =?UTF-8?q?se=20pointer.=20Fixes=20SSE2-related=20alignment=20crashes=20wi?= =?UTF-8?q?th=20OS/compiler=20combinations=20that=20don=E2=80=99t=2016-byt?= =?UTF-8?q?e=20align=20the=20base=20pointer=20for=20you.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- desmume/src/render3D.cpp | 16 ++++++++++++++++ desmume/src/render3D.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/desmume/src/render3D.cpp b/desmume/src/render3D.cpp index 8a25f0cad..96c145b91 100644 --- a/desmume/src/render3D.cpp +++ b/desmume/src/render3D.cpp @@ -190,6 +190,22 @@ void FragmentAttributesBuffer::SetAll(const FragmentAttributes &attr) } } +void* Render3D::operator new(size_t size) +{ + void *newPtr = malloc_alignedCacheLine(size); + if (newPtr == NULL) + { + throw std::bad_alloc(); + } + + return newPtr; +} + +void Render3D::operator delete(void *ptr) +{ + free_aligned(ptr); +} + Render3D::Render3D() { _renderID = RENDERID_NULL; diff --git a/desmume/src/render3D.h b/desmume/src/render3D.h index f720b7c4c..dd627d41c 100644 --- a/desmume/src/render3D.h +++ b/desmume/src/render3D.h @@ -129,6 +129,8 @@ protected: virtual Render3DError SetupViewport(const u32 viewportValue); public: + static void* operator new(size_t size); + static void operator delete(void *p); Render3D(); ~Render3D();