st/nine: Align texture memory
Align texture memory on 32 byte boundry to allow SSE/AVX memcpy to work on locked rects. This fixes some crashes with games using SSE. Reviewed-by: David Heidelberg <david@ixit.cz> Reviewed-by: Axel Davy <axel.davy@ens.fr> Signed-off-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
parent
3c4864fa55
commit
886227d363
|
@ -106,7 +106,7 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
|
|||
face_size = nine_format_get_size_and_offsets(pf, level_offsets,
|
||||
EdgeLength, EdgeLength,
|
||||
info->last_level);
|
||||
This->managed_buffer = MALLOC(6 * face_size);
|
||||
This->managed_buffer = align_malloc(6 * face_size, 32);
|
||||
if (!This->managed_buffer)
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
|
|
@ -104,11 +104,11 @@ NineSurface9_ctor( struct NineSurface9 *This,
|
|||
/* Ram buffer with no parent. Has to allocate the resource itself */
|
||||
if (!pResource && !pContainer) {
|
||||
assert(!user_buffer);
|
||||
This->data = MALLOC(
|
||||
This->data = align_malloc(
|
||||
nine_format_get_level_alloc_size(This->base.info.format,
|
||||
pDesc->Width,
|
||||
pDesc->Height,
|
||||
0));
|
||||
0), 32);
|
||||
if (!This->data)
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
|
|
@ -152,10 +152,10 @@ NineTexture9_ctor( struct NineTexture9 *This,
|
|||
* apps access sublevels of texture even if they locked only first
|
||||
* level) */
|
||||
level_offsets = alloca(sizeof(unsigned) * (info->last_level + 1));
|
||||
user_buffer = MALLOC(
|
||||
user_buffer = align_malloc(
|
||||
nine_format_get_size_and_offsets(pf, level_offsets,
|
||||
Width, Height,
|
||||
info->last_level));
|
||||
info->last_level), 32);
|
||||
This->managed_buffer = user_buffer;
|
||||
if (!This->managed_buffer)
|
||||
return E_OUTOFMEMORY;
|
||||
|
|
|
@ -43,7 +43,7 @@ NineVolume9_AllocateData( struct NineVolume9 *This )
|
|||
DBG("(%p(This=%p),level=%u) Allocating 0x%x bytes of system memory.\n",
|
||||
This->base.container, This, This->level, size);
|
||||
|
||||
This->data = (uint8_t *)MALLOC(size);
|
||||
This->data = (uint8_t *)align_malloc(size, 32);
|
||||
if (!This->data)
|
||||
return E_OUTOFMEMORY;
|
||||
return D3D_OK;
|
||||
|
|
Loading…
Reference in New Issue