[PATCH 2/5] wined3d: Wrap resource->heapMemory into a structure
Stefan Dösinger
stefandoesinger at gmail.com
Mon Aug 19 10:08:21 CDT 2013
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Am 2013-08-19 14:34, schrieb Henri Verbeet:
> On 19 August 2013 14:20, Stefan Dösinger
> <stefandoesinger at gmail.com> wrote:
>> Am 2013-08-19 13:53, schrieb Henri Verbeet:
>>> That's actually a bug in what I posted.
>> What's your suggested fix? Allocating size + align + alignment,
>> and adding alignment to mem if mem happens to be already
>> aligned?
>>
> I think it needs to be "align = max(sizeof(*p), alignment);", but
> that's actually for the aligned + 1 case.
With some inspiration from _aligned_offset_malloc in msvcrt I came up
with this:
void *wined3d_alloc_resource_mem(SIZE_T size)
{
void **p;
SIZE_T align = RESOURCE_ALIGNMENT - 1 + sizeof(*p);
void *mem;
if (!(mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size +
align)))
return NULL;
p = (void **)(((ULONG_PTR)mem + align) & ~(RESOURCE_ALIGNMENT -
1)) - 1;
*p = mem;
return ++p;
}
void wined3d_free_resource_mem(void *mem)
{
void **p = mem;
if (!mem)
return;
HeapFree(GetProcessHeap(), 0, *(--p));
}
I'm not entirely sure about the SIZE_T align = RESOURCE_ALIGNMENT - 1
+ sizeof(*p); line though. Msvcrt doesn't have the - 1, and allocating
size + RESOURCE_ALIGNMENT bytes might be enough. msvcrt allocates the
equivalent of size + RESOURCE_ALIGNMENT + sizeof(void *).
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.20 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
iQIcBAEBAgAGBQJSEjTlAAoJEN0/YqbEcdMwHhsP/3jldV7GHrhg8Asj1wxksNbz
vXorIHDwBQQQFmcj4d5o7zyXsMho/SfebMeesmtJCtmfZeOasWjE02vgnbZSbU1T
OA4Aow7orGeGWUCYddtJYLoDwC4HSaIXb/8HO5rCNnM1tVboHn0XXBM5q24t+fZo
jbmX6Ma6QtD/b6dV+TCvh8YUih5Yy/lTr0Fq1c3nrodz7JTbHqu7qfdpK2QPqB4P
ekRtHofPTLKLAxwZFw5Vc5hdUZ1xfejUuKgzQWnPFbb/jHFdN9gC+2mZdn0YbyEs
hATXQX8N2oakjgzkBg1eyZInhPLHFTNrz5EfR0tolv+ytXdy0YfcOjSYkYOODkNb
bUr1l1uTBw2trVYFtx52XqkhuoXZhj2DAbGtM2vmd81Sttce1CnZd08jcedDllon
sSZ28lkvwxVL6N6pNkrpTWjaKj3RcaAhqJm5zj+MHX95w8gPl6oFps1lCrLXVaDP
gsC9FeHL3QPf7Hb5arJvcxbH17CVRi+i4irJIgnOgJMLkZGK3+jbadKHPHA0D2i8
lTewyhf70+FJd04yZ0yoiXTYcJbZU9BkQMKxbTpywoUP8+3ZJ3n7PMe+CoFyphr1
fzZFR0sV/T4kCLBbH8YeTsiWluB0ioOCsh9cyNZrz6C2Dy5PmNmwTN0dWpi7LukF
tamCuVqBu//pY5YUuq9d
=7d25
-----END PGP SIGNATURE-----
More information about the wine-devel
mailing list