[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