X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Futil%2Fralloc.c;h=f36f8bf365425a2c7a18d95865d9f912f9d21234;hb=7ba2333cc17e7f0a1520866bcfd60a991d34295e;hp=fc35661996d77010620c1f7fa29593387d9ab6e2;hpb=efb1ccadca89b1b3f39fb52b7b83154dff764a15;p=mesa.git diff --git a/src/util/ralloc.c b/src/util/ralloc.c index fc35661996d..f36f8bf3654 100644 --- a/src/util/ralloc.c +++ b/src/util/ralloc.c @@ -53,7 +53,11 @@ _CRTIMP int _vscprintf(const char *format, va_list argptr); */ struct #ifdef _MSC_VER +#if _WIN64 +__declspec(align(16)) +#else __declspec(align(8)) +#endif #elif defined(__LP64__) __attribute__((aligned(16))) #else @@ -197,6 +201,21 @@ reralloc_size(const void *ctx, void *ptr, size_t size) return resize(ptr, size); } +void * +rerzalloc_size(const void *ctx, void *ptr, size_t old_size, size_t new_size) +{ + if (unlikely(ptr == NULL)) + return rzalloc_size(ctx, new_size); + + assert(ralloc_parent(ptr) == ctx); + ptr = resize(ptr, new_size); + + if (new_size > old_size) + memset((char *)ptr + old_size, 0, new_size - old_size); + + return ptr; +} + void * ralloc_array_size(const void *ctx, size_t size, unsigned count) { @@ -224,6 +243,16 @@ reralloc_array_size(const void *ctx, void *ptr, size_t size, unsigned count) return reralloc_size(ctx, ptr, size * count); } +void * +rerzalloc_array_size(const void *ctx, void *ptr, size_t size, + unsigned old_count, unsigned new_count) +{ + if (new_count > SIZE_MAX/size) + return NULL; + + return rerzalloc_size(ctx, ptr, size * old_count, size * new_count); +} + void ralloc_free(void *ptr) {