mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-09 23:30:13 +01:00
st/nine: Add pool check to SetTexture (v2)
D3DPOOL_SCRATCH is disallowed according to spec. D3DPOOL_SYSTEMMEM should be allowed but we don't handle it right for now. v2: Fixes segfault in SetTexture when unsetting the texture Cc: "10.4" <mesa-stable@lists.freedesktop.org> Tested-by: David Heidelberg <david@ixit.cz> Signed-off-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
parent
890f963d64
commit
4eea2496bc
1 changed files with 9 additions and 1 deletions
|
|
@ -2199,6 +2199,7 @@ NineDevice9_SetTexture( struct NineDevice9 *This,
|
|||
IDirect3DBaseTexture9 *pTexture )
|
||||
{
|
||||
struct nine_state *state = This->update;
|
||||
struct NineBaseTexture9 *tex = NineBaseTexture9(pTexture);
|
||||
|
||||
DBG("This=%p Stage=%u pTexture=%p\n", This, Stage, pTexture);
|
||||
|
||||
|
|
@ -2206,12 +2207,19 @@ NineDevice9_SetTexture( struct NineDevice9 *This,
|
|||
Stage == D3DDMAPSAMPLER ||
|
||||
(Stage >= D3DVERTEXTEXTURESAMPLER0 &&
|
||||
Stage <= D3DVERTEXTEXTURESAMPLER3), D3DERR_INVALIDCALL);
|
||||
user_assert(!tex || tex->base.pool != D3DPOOL_SCRATCH, D3DERR_INVALIDCALL);
|
||||
|
||||
if (unlikely(tex && tex->base.pool == D3DPOOL_SYSTEMMEM)) {
|
||||
/* TODO: Currently not implemented. Better return error
|
||||
* with message telling what's wrong */
|
||||
ERR("This=%p D3DPOOL_SYSTEMMEM not implemented for SetTexture\n", This);
|
||||
user_assert(tex->base.pool != D3DPOOL_SYSTEMMEM, D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
if (Stage >= D3DDMAPSAMPLER)
|
||||
Stage = Stage - D3DDMAPSAMPLER + NINE_MAX_SAMPLERS_PS;
|
||||
|
||||
if (!This->is_recording) {
|
||||
struct NineBaseTexture9 *tex = NineBaseTexture9(pTexture);
|
||||
struct NineBaseTexture9 *old = state->texture[Stage];
|
||||
if (old == tex)
|
||||
return D3D_OK;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue