Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*==========================================================================;
* * Copyright (C) 1995 Microsoft Corporation. All Rights Reserved. * * File: d3dmem.c * Content: Direct3D mem allocation *@@BEGIN_MSINTERNAL * * History: * Date By Reason * ==== == ====== * 10/12/95 stevela Initial rev with this header. *@@END_MSINTERNAL * ***************************************************************************/
#include "pch.cpp"
#pragma hdrstop
static D3DMALLOCFUNCTION malloc_function = (D3DMALLOCFUNCTION) MemAlloc; static D3DFREEFUNCTION free_function = MemFree;
#ifdef __USEGLOBALNEWANDDELETE
//----------------------------------------------------------------------------
//
// Global new and delete
//
//----------------------------------------------------------------------------
void* operator new(size_t s) { void *p; MallocAligned(&p,s); return p; };
void operator delete(void* p) { FreeAligned(p); }; #endif
#undef DPF_MODNAME
#define DPF_MODNAME "D3DMalloc"
HRESULT D3DAPI D3DMalloc(LPVOID* p_return, size_t size) { void* p;
if (!VALID_OUTPTR(p_return)) { DPF_ERR("Bad pointer given. Memory allocation fails"); return D3DERR_INVALIDCALL; } if (size > 0) { p = malloc_function(size); if (p == NULL) return (E_OUTOFMEMORY); } else { p = NULL; } *p_return = p;
return (D3D_OK); }
#undef DPF_MODNAME
#define DPF_MODNAME "D3DFree"
VOID D3DAPI D3DFree(LPVOID p) { if (p == NULL) return;
if (!VALID_DWORD_PTR(p)) { DPF_ERR("invalid pointer. Memory Free ignored"); return; } if (p) { free_function(p); } }
#undef DPF_MODNAME
#define DPF_MODNAME "MallocAligned"
#define CACHE_LINE 32
HRESULT MallocAligned(void** p_return, size_t size) { char* p; size_t offset; HRESULT error;
if (!p_return) return D3DERR_INVALIDCALL;
if (size > 0) { if ((error = D3DMalloc((void**) &p, size + CACHE_LINE)) != S_OK) { *p_return = NULL; return error; } offset = (size_t)(CACHE_LINE - ((ULONG_PTR)p & (CACHE_LINE - 1))); p += offset; ((size_t*)p)[-1] = offset; } else { p = NULL; } *p_return = p; return S_OK; }
#undef DPF_MODNAME
#define DPF_MODNAME "FreeAligned"
void FreeAligned(void* p) { if (p) { size_t offset = ((size_t*)p)[-1]; p = (void*) ((unsigned char*)p - offset); D3DFree(p); } } #undef DPF_MODNAME
#define DPF_MODNAME "CAlignedBuffer32::Grow"
//----------------------------------------------------------------------------
// Growing aligned buffer implementation.
//
HRESULT CAlignedBuffer32::Grow(DWORD growSize) { if (allocatedBuf) D3DFree(allocatedBuf); size = growSize; if (D3DMalloc(&allocatedBuf, size + 31) != S_OK) { allocatedBuf = 0; alignedBuf = 0; size = 0; return E_OUTOFMEMORY; } alignedBuf = (LPVOID)(((ULONG_PTR)allocatedBuf + 31 ) & ~31); return D3D_OK; }
|