st/nine: Fix present_buffers allocation

If has_present_buffers was false at first,
but after a device reset, it turns true (for
example if we begin to render to a multisampled
back buffer), there was a crash due to present_buffers
being uninitialised.
This patch fixes it.

Reviewed-by: Tiziano Bacocco <tizbac2@gmail.com>
Signed-off-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
Axel Davy 2015-01-17 13:43:38 +01:00
parent 792af626d4
commit 8b901e3011

View file

@ -271,12 +271,6 @@ NineSwapChain9_Resize( struct NineSwapChain9 *This,
if (!bufs)
return E_OUTOFMEMORY;
This->buffers = bufs;
if (has_present_buffers) {
This->present_buffers = REALLOC(This->present_buffers,
This->present_buffers == NULL ? 0 : oldBufferCount * sizeof(struct pipe_resource *),
newBufferCount * sizeof(struct pipe_resource *));
memset(This->present_buffers, 0, newBufferCount * sizeof(struct pipe_resource *));
}
This->present_handles = REALLOC(This->present_handles,
oldBufferCount * sizeof(D3DWindowBuffer *),
newBufferCount * sizeof(D3DWindowBuffer *));
@ -286,6 +280,15 @@ NineSwapChain9_Resize( struct NineSwapChain9 *This,
}
}
if (has_present_buffers &&
(newBufferCount != oldBufferCount || !This->present_buffers)) {
This->present_buffers = REALLOC(This->present_buffers,
This->present_buffers == NULL ? 0 :
oldBufferCount * sizeof(struct pipe_resource *),
newBufferCount * sizeof(struct pipe_resource *));
memset(This->present_buffers, 0, newBufferCount * sizeof(struct pipe_resource *));
}
for (i = 0; i < newBufferCount; ++i) {
tmplt.bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_TRANSFER_READ |
PIPE_BIND_TRANSFER_WRITE | PIPE_BIND_RENDER_TARGET;