d3d: Explicitly translate texture stage states.
Ddraw and d3d8 already translate half of them, it turns out the lookup table actually saves lines there.
This commit is contained in:
parent
c51bc826e8
commit
352e60e6ed
@ -1266,100 +1266,70 @@ static HRESULT WINAPI IDirect3DDevice8Impl_SetTexture(LPDIRECT3DDEVICE8 iface, D
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct tss_lookup
|
||||||
|
{
|
||||||
|
BOOL sampler_state;
|
||||||
|
DWORD state;
|
||||||
|
}
|
||||||
|
tss_lookup[] =
|
||||||
|
{
|
||||||
|
{FALSE, WINED3DTSS_FORCE_DWORD}, /* 0, unused */
|
||||||
|
{FALSE, WINED3DTSS_COLOROP}, /* 1, D3DTSS_COLOROP */
|
||||||
|
{FALSE, WINED3DTSS_COLORARG1}, /* 2, D3DTSS_COLORARG1 */
|
||||||
|
{FALSE, WINED3DTSS_COLORARG2}, /* 3, D3DTSS_COLORARG2 */
|
||||||
|
{FALSE, WINED3DTSS_ALPHAOP}, /* 4, D3DTSS_ALPHAOP */
|
||||||
|
{FALSE, WINED3DTSS_ALPHAARG1}, /* 5, D3DTSS_ALPHAARG1 */
|
||||||
|
{FALSE, WINED3DTSS_ALPHAARG2}, /* 6, D3DTSS_ALPHAARG2 */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVMAT00}, /* 7, D3DTSS_BUMPENVMAT00 */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVMAT01}, /* 8, D3DTSS_BUMPENVMAT01 */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVMAT10}, /* 9, D3DTSS_BUMPENVMAT10 */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVMAT11}, /* 10, D3DTSS_BUMPENVMAT11 */
|
||||||
|
{FALSE, WINED3DTSS_TEXCOORDINDEX}, /* 11, D3DTSS_TEXCOORDINDEX */
|
||||||
|
{FALSE, WINED3DTSS_FORCE_DWORD}, /* 12, unused */
|
||||||
|
{TRUE, WINED3DSAMP_ADDRESSU}, /* 13, D3DTSS_ADDRESSU */
|
||||||
|
{TRUE, WINED3DSAMP_ADDRESSV}, /* 14, D3DTSS_ADDRESSV */
|
||||||
|
{TRUE, WINED3DSAMP_BORDERCOLOR}, /* 15, D3DTSS_BORDERCOLOR */
|
||||||
|
{TRUE, WINED3DSAMP_MAGFILTER}, /* 16, D3DTSS_MAGFILTER */
|
||||||
|
{TRUE, WINED3DSAMP_MINFILTER}, /* 17, D3DTSS_MINFILTER */
|
||||||
|
{TRUE, WINED3DSAMP_MIPFILTER}, /* 18, D3DTSS_MIPFILTER */
|
||||||
|
{TRUE, WINED3DSAMP_MIPMAPLODBIAS}, /* 19, D3DTSS_MIPMAPLODBIAS */
|
||||||
|
{TRUE, WINED3DSAMP_MAXMIPLEVEL}, /* 20, D3DTSS_MAXMIPLEVEL */
|
||||||
|
{TRUE, WINED3DSAMP_MAXANISOTROPY}, /* 21, D3DTSS_MAXANISOTROPY */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVLSCALE}, /* 22, D3DTSS_BUMPENVLSCALE */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVLOFFSET}, /* 23, D3DTSS_BUMPENVLOFFSET */
|
||||||
|
{FALSE, WINED3DTSS_TEXTURETRANSFORMFLAGS}, /* 24, D3DTSS_TEXTURETRANSFORMFLAGS */
|
||||||
|
{TRUE, WINED3DSAMP_ADDRESSW}, /* 25, D3DTSS_ADDRESSW */
|
||||||
|
{FALSE, WINED3DTSS_COLORARG0}, /* 26, D3DTSS_COLORARG0 */
|
||||||
|
{FALSE, WINED3DTSS_ALPHAARG0}, /* 27, D3DTSS_ALPHAARG0 */
|
||||||
|
{FALSE, WINED3DTSS_RESULTARG}, /* 28, D3DTSS_RESULTARG */
|
||||||
|
};
|
||||||
|
|
||||||
static HRESULT WINAPI IDirect3DDevice8Impl_GetTextureStageState(LPDIRECT3DDEVICE8 iface, DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) {
|
static HRESULT WINAPI IDirect3DDevice8Impl_GetTextureStageState(LPDIRECT3DDEVICE8 iface, DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) {
|
||||||
IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
|
IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
|
||||||
|
const struct tss_lookup *l = &tss_lookup[Type];
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
TRACE("(%p) Relay\n" , This);
|
TRACE("(%p) Relay\n" , This);
|
||||||
|
|
||||||
switch(Type) {
|
|
||||||
case D3DTSS_ADDRESSU:
|
|
||||||
Type = WINED3DSAMP_ADDRESSU;
|
|
||||||
break;
|
|
||||||
case D3DTSS_ADDRESSV:
|
|
||||||
Type = WINED3DSAMP_ADDRESSV;
|
|
||||||
break;
|
|
||||||
case D3DTSS_ADDRESSW:
|
|
||||||
Type = WINED3DSAMP_ADDRESSW;
|
|
||||||
break;
|
|
||||||
case D3DTSS_BORDERCOLOR:
|
|
||||||
Type = WINED3DSAMP_BORDERCOLOR;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MAGFILTER:
|
|
||||||
Type = WINED3DSAMP_MAGFILTER;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MAXANISOTROPY:
|
|
||||||
Type = WINED3DSAMP_MAXANISOTROPY;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MAXMIPLEVEL:
|
|
||||||
Type = WINED3DSAMP_MAXMIPLEVEL;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MINFILTER:
|
|
||||||
Type = WINED3DSAMP_MINFILTER;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MIPFILTER:
|
|
||||||
Type = WINED3DSAMP_MIPFILTER;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MIPMAPLODBIAS:
|
|
||||||
Type = WINED3DSAMP_MIPMAPLODBIAS;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
EnterCriticalSection(&d3d8_cs);
|
EnterCriticalSection(&d3d8_cs);
|
||||||
hr = IWineD3DDevice_GetTextureStageState(This->WineD3DDevice, Stage, Type, pValue);
|
|
||||||
LeaveCriticalSection(&d3d8_cs);
|
|
||||||
return hr;
|
|
||||||
}
|
|
||||||
|
|
||||||
EnterCriticalSection(&d3d8_cs);
|
if (l->sampler_state) hr = IWineD3DDevice_GetSamplerState(This->WineD3DDevice, Stage, l->state, pValue);
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->WineD3DDevice, Stage, Type, pValue);
|
else hr = IWineD3DDevice_GetTextureStageState(This->WineD3DDevice, Stage, l->state, pValue);
|
||||||
|
|
||||||
LeaveCriticalSection(&d3d8_cs);
|
LeaveCriticalSection(&d3d8_cs);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirect3DDevice8Impl_SetTextureStageState(LPDIRECT3DDEVICE8 iface, DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) {
|
static HRESULT WINAPI IDirect3DDevice8Impl_SetTextureStageState(LPDIRECT3DDEVICE8 iface, DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) {
|
||||||
IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
|
IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
|
||||||
|
const struct tss_lookup *l = &tss_lookup[Type];
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
TRACE("(%p) Relay\n" , This);
|
TRACE("(%p) Relay\n" , This);
|
||||||
|
|
||||||
switch(Type) {
|
|
||||||
case D3DTSS_ADDRESSU:
|
|
||||||
Type = WINED3DSAMP_ADDRESSU;
|
|
||||||
break;
|
|
||||||
case D3DTSS_ADDRESSV:
|
|
||||||
Type = WINED3DSAMP_ADDRESSV;
|
|
||||||
break;
|
|
||||||
case D3DTSS_ADDRESSW:
|
|
||||||
Type = WINED3DSAMP_ADDRESSW;
|
|
||||||
break;
|
|
||||||
case D3DTSS_BORDERCOLOR:
|
|
||||||
Type = WINED3DSAMP_BORDERCOLOR;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MAGFILTER:
|
|
||||||
Type = WINED3DSAMP_MAGFILTER;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MAXANISOTROPY:
|
|
||||||
Type = WINED3DSAMP_MAXANISOTROPY;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MAXMIPLEVEL:
|
|
||||||
Type = WINED3DSAMP_MAXMIPLEVEL;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MINFILTER:
|
|
||||||
Type = WINED3DSAMP_MINFILTER;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MIPFILTER:
|
|
||||||
Type = WINED3DSAMP_MIPFILTER;
|
|
||||||
break;
|
|
||||||
case D3DTSS_MIPMAPLODBIAS:
|
|
||||||
Type = WINED3DSAMP_MIPMAPLODBIAS;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
EnterCriticalSection(&d3d8_cs);
|
EnterCriticalSection(&d3d8_cs);
|
||||||
hr = IWineD3DDevice_SetTextureStageState(This->WineD3DDevice, Stage, Type, Value);
|
|
||||||
LeaveCriticalSection(&d3d8_cs);
|
|
||||||
return hr;
|
|
||||||
}
|
|
||||||
|
|
||||||
EnterCriticalSection(&d3d8_cs);
|
if (l->sampler_state) hr = IWineD3DDevice_SetSamplerState(This->WineD3DDevice, Stage, l->state, Value);
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->WineD3DDevice, Stage, Type, Value);
|
else hr = IWineD3DDevice_SetTextureStageState(This->WineD3DDevice, Stage, l->state, Value);
|
||||||
|
|
||||||
LeaveCriticalSection(&d3d8_cs);
|
LeaveCriticalSection(&d3d8_cs);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
@ -1008,13 +1008,50 @@ static HRESULT WINAPI IDirect3DDevice9Impl_SetTexture(LPDIRECT3DDEVICE9EX ifac
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const WINED3DTEXTURESTAGESTATETYPE tss_lookup[] =
|
||||||
|
{
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 0, unused */
|
||||||
|
WINED3DTSS_COLOROP, /* 1, D3DTSS_COLOROP */
|
||||||
|
WINED3DTSS_COLORARG1, /* 2, D3DTSS_COLORARG1 */
|
||||||
|
WINED3DTSS_COLORARG2, /* 3, D3DTSS_COLORARG2 */
|
||||||
|
WINED3DTSS_ALPHAOP, /* 4, D3DTSS_ALPHAOP */
|
||||||
|
WINED3DTSS_ALPHAARG1, /* 5, D3DTSS_ALPHAARG1 */
|
||||||
|
WINED3DTSS_ALPHAARG2, /* 6, D3DTSS_ALPHAARG2 */
|
||||||
|
WINED3DTSS_BUMPENVMAT00, /* 7, D3DTSS_BUMPENVMAT00 */
|
||||||
|
WINED3DTSS_BUMPENVMAT01, /* 8, D3DTSS_BUMPENVMAT01 */
|
||||||
|
WINED3DTSS_BUMPENVMAT10, /* 9, D3DTSS_BUMPENVMAT10 */
|
||||||
|
WINED3DTSS_BUMPENVMAT11, /* 10, D3DTSS_BUMPENVMAT11 */
|
||||||
|
WINED3DTSS_TEXCOORDINDEX, /* 11, D3DTSS_TEXCOORDINDEX */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 12, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 13, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 14, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 15, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 16, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 17, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 18, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 19, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 20, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 21, unused */
|
||||||
|
WINED3DTSS_BUMPENVLSCALE, /* 22, D3DTSS_BUMPENVLSCALE */
|
||||||
|
WINED3DTSS_BUMPENVLOFFSET, /* 23, D3DTSS_BUMPENVLOFFSET */
|
||||||
|
WINED3DTSS_TEXTURETRANSFORMFLAGS, /* 24, D3DTSS_TEXTURETRANSFORMFLAGS */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 25, unused */
|
||||||
|
WINED3DTSS_COLORARG0, /* 26, D3DTSS_COLORARG0 */
|
||||||
|
WINED3DTSS_ALPHAARG0, /* 27, D3DTSS_ALPHAARG0 */
|
||||||
|
WINED3DTSS_RESULTARG, /* 28, D3DTSS_RESULTARG */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 29, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 30, unused */
|
||||||
|
WINED3DTSS_FORCE_DWORD, /* 31, unused */
|
||||||
|
WINED3DTSS_CONSTANT, /* 32, D3DTSS_CONSTANT */
|
||||||
|
};
|
||||||
|
|
||||||
static HRESULT WINAPI IDirect3DDevice9Impl_GetTextureStageState(LPDIRECT3DDEVICE9EX iface, DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) {
|
static HRESULT WINAPI IDirect3DDevice9Impl_GetTextureStageState(LPDIRECT3DDEVICE9EX iface, DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) {
|
||||||
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
|
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
TRACE("(%p) Relay\n" , This);
|
TRACE("(%p) Relay\n" , This);
|
||||||
|
|
||||||
EnterCriticalSection(&d3d9_cs);
|
EnterCriticalSection(&d3d9_cs);
|
||||||
hr = IWineD3DDevice_GetTextureStageState(This->WineD3DDevice, Stage, Type, pValue);
|
hr = IWineD3DDevice_GetTextureStageState(This->WineD3DDevice, Stage, tss_lookup[Type], pValue);
|
||||||
LeaveCriticalSection(&d3d9_cs);
|
LeaveCriticalSection(&d3d9_cs);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
@ -1025,7 +1062,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_SetTextureStageState(LPDIRECT3DDEVI
|
|||||||
TRACE("(%p) Relay\n" , This);
|
TRACE("(%p) Relay\n" , This);
|
||||||
|
|
||||||
EnterCriticalSection(&d3d9_cs);
|
EnterCriticalSection(&d3d9_cs);
|
||||||
hr = IWineD3DDevice_SetTextureStageState(This->WineD3DDevice, Stage, Type, Value);
|
hr = IWineD3DDevice_SetTextureStageState(This->WineD3DDevice, Stage, tss_lookup[Type], Value);
|
||||||
LeaveCriticalSection(&d3d9_cs);
|
LeaveCriticalSection(&d3d9_cs);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
@ -4997,6 +4997,40 @@ IDirect3DDeviceImpl_3_SetTexture(IDirect3DDevice3 *iface,
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct tss_lookup
|
||||||
|
{
|
||||||
|
BOOL sampler_state;
|
||||||
|
DWORD state;
|
||||||
|
}
|
||||||
|
tss_lookup[] =
|
||||||
|
{
|
||||||
|
{FALSE, WINED3DTSS_FORCE_DWORD}, /* 0, unused */
|
||||||
|
{FALSE, WINED3DTSS_COLOROP}, /* 1, D3DTSS_COLOROP */
|
||||||
|
{FALSE, WINED3DTSS_COLORARG1}, /* 2, D3DTSS_COLORARG1 */
|
||||||
|
{FALSE, WINED3DTSS_COLORARG2}, /* 3, D3DTSS_COLORARG2 */
|
||||||
|
{FALSE, WINED3DTSS_ALPHAOP}, /* 4, D3DTSS_ALPHAOP */
|
||||||
|
{FALSE, WINED3DTSS_ALPHAARG1}, /* 5, D3DTSS_ALPHAARG1 */
|
||||||
|
{FALSE, WINED3DTSS_ALPHAARG2}, /* 6, D3DTSS_ALPHAARG2 */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVMAT00}, /* 7, D3DTSS_BUMPENVMAT00 */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVMAT01}, /* 8, D3DTSS_BUMPENVMAT01 */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVMAT10}, /* 9, D3DTSS_BUMPENVMAT10 */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVMAT11}, /* 10, D3DTSS_BUMPENVMAT11 */
|
||||||
|
{FALSE, WINED3DTSS_TEXCOORDINDEX}, /* 11, D3DTSS_TEXCOORDINDEX */
|
||||||
|
{TRUE, WINED3DSAMP_ADDRESSU}, /* 12, D3DTSS_ADDRESS */
|
||||||
|
{TRUE, WINED3DSAMP_ADDRESSU}, /* 13, D3DTSS_ADDRESSU */
|
||||||
|
{TRUE, WINED3DSAMP_ADDRESSV}, /* 14, D3DTSS_ADDRESSV */
|
||||||
|
{TRUE, WINED3DSAMP_BORDERCOLOR}, /* 15, D3DTSS_BORDERCOLOR */
|
||||||
|
{TRUE, WINED3DSAMP_MAGFILTER}, /* 16, D3DTSS_MAGFILTER */
|
||||||
|
{TRUE, WINED3DSAMP_MINFILTER}, /* 17, D3DTSS_MINFILTER */
|
||||||
|
{TRUE, WINED3DSAMP_MIPFILTER}, /* 18, D3DTSS_MIPFILTER */
|
||||||
|
{TRUE, WINED3DSAMP_MIPMAPLODBIAS}, /* 19, D3DTSS_MIPMAPLODBIAS */
|
||||||
|
{TRUE, WINED3DSAMP_MAXMIPLEVEL}, /* 20, D3DTSS_MAXMIPLEVEL */
|
||||||
|
{TRUE, WINED3DSAMP_MAXANISOTROPY}, /* 21, D3DTSS_MAXANISOTROPY */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVLSCALE}, /* 22, D3DTSS_BUMPENVLSCALE */
|
||||||
|
{FALSE, WINED3DTSS_BUMPENVLOFFSET}, /* 23, D3DTSS_BUMPENVLOFFSET */
|
||||||
|
{FALSE, WINED3DTSS_TEXTURETRANSFORMFLAGS}, /* 24, D3DTSS_TEXTURETRANSFORMFLAGS */
|
||||||
|
};
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* IDirect3DDevice7::GetTextureStageState
|
* IDirect3DDevice7::GetTextureStageState
|
||||||
*
|
*
|
||||||
@ -5023,52 +5057,40 @@ IDirect3DDeviceImpl_7_GetTextureStageState(IDirect3DDevice7 *iface,
|
|||||||
{
|
{
|
||||||
ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
|
ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
const struct tss_lookup *l = &tss_lookup[TexStageStateType];
|
||||||
TRACE("(%p)->(%08x,%08x,%p): Relay!\n", This, Stage, TexStageStateType, State);
|
TRACE("(%p)->(%08x,%08x,%p): Relay!\n", This, Stage, TexStageStateType, State);
|
||||||
|
|
||||||
if(!State)
|
if(!State)
|
||||||
return DDERR_INVALIDPARAMS;
|
return DDERR_INVALIDPARAMS;
|
||||||
|
|
||||||
EnterCriticalSection(&ddraw_cs);
|
EnterCriticalSection(&ddraw_cs);
|
||||||
|
|
||||||
|
if (l->sampler_state)
|
||||||
|
{
|
||||||
|
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice, Stage, l->state, State);
|
||||||
|
|
||||||
switch(TexStageStateType)
|
switch(TexStageStateType)
|
||||||
{
|
{
|
||||||
/* Mipfilter is a sampler state with different values */
|
/* Mipfilter is a sampler state with different values */
|
||||||
case D3DTSS_MIPFILTER:
|
case D3DTSS_MIPFILTER:
|
||||||
{
|
{
|
||||||
WINED3DTEXTUREFILTERTYPE value;
|
switch(*State)
|
||||||
|
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_MIPFILTER,
|
|
||||||
&value);
|
|
||||||
switch(value)
|
|
||||||
{
|
{
|
||||||
case WINED3DTEXF_NONE: *State = D3DTFP_NONE; break;
|
case WINED3DTEXF_NONE: *State = D3DTFP_NONE; break;
|
||||||
case WINED3DTEXF_POINT: *State = D3DTFP_POINT; break;
|
case WINED3DTEXF_POINT: *State = D3DTFP_POINT; break;
|
||||||
case WINED3DTEXF_LINEAR: *State = D3DTFP_LINEAR; break;
|
case WINED3DTEXF_LINEAR: *State = D3DTFP_LINEAR; break;
|
||||||
default:
|
default:
|
||||||
ERR("Unexpected mipfilter value %d\n", value);
|
ERR("Unexpected mipfilter value %#x\n", *State);
|
||||||
*State = D3DTFP_NONE;
|
*State = D3DTFP_NONE;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Minfilter is a sampler state too, equal values */
|
|
||||||
case D3DTSS_MINFILTER:
|
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_MINFILTER,
|
|
||||||
State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Magfilter has slightly different values */
|
/* Magfilter has slightly different values */
|
||||||
case D3DTSS_MAGFILTER:
|
case D3DTSS_MAGFILTER:
|
||||||
{
|
{
|
||||||
WINED3DTEXTUREFILTERTYPE wined3dfilter;
|
switch(*State)
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_MAGFILTER,
|
|
||||||
&wined3dfilter);
|
|
||||||
switch(wined3dfilter)
|
|
||||||
{
|
{
|
||||||
case WINED3DTEXF_POINT: *State = D3DTFG_POINT; break;
|
case WINED3DTEXF_POINT: *State = D3DTFG_POINT; break;
|
||||||
case WINED3DTEXF_LINEAR: *State = D3DTFG_LINEAR; break;
|
case WINED3DTEXF_LINEAR: *State = D3DTFG_LINEAR; break;
|
||||||
@ -5076,49 +5098,22 @@ IDirect3DDeviceImpl_7_GetTextureStageState(IDirect3DDevice7 *iface,
|
|||||||
case WINED3DTEXF_FLATCUBIC: *State = D3DTFG_FLATCUBIC; break;
|
case WINED3DTEXF_FLATCUBIC: *State = D3DTFG_FLATCUBIC; break;
|
||||||
case WINED3DTEXF_GAUSSIANCUBIC: *State = D3DTFG_GAUSSIANCUBIC; break;
|
case WINED3DTEXF_GAUSSIANCUBIC: *State = D3DTFG_GAUSSIANCUBIC; break;
|
||||||
default:
|
default:
|
||||||
ERR("Unexpected wined3d mag filter value %d\n", wined3dfilter);
|
ERR("Unexpected wined3d mag filter value %#x\n", *State);
|
||||||
*State = D3DTFG_POINT;
|
*State = D3DTFG_POINT;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case D3DTSS_ADDRESS:
|
|
||||||
case D3DTSS_ADDRESSU:
|
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_ADDRESSU,
|
|
||||||
State);
|
|
||||||
break;
|
|
||||||
case D3DTSS_ADDRESSV:
|
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_ADDRESSV,
|
|
||||||
State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_BORDERCOLOR:
|
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice, Stage, WINED3DSAMP_BORDERCOLOR, State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_MIPMAPLODBIAS:
|
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice, Stage, WINED3DSAMP_MIPMAPLODBIAS, State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_MAXMIPLEVEL:
|
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice, Stage, WINED3DSAMP_MAXMIPLEVEL, State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_MAXANISOTROPY:
|
|
||||||
hr = IWineD3DDevice_GetSamplerState(This->wineD3DDevice, Stage, WINED3DSAMP_MAXANISOTROPY, State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
hr = IWineD3DDevice_GetTextureStageState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
TexStageStateType,
|
|
||||||
State);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hr = IWineD3DDevice_GetTextureStageState(This->wineD3DDevice, Stage, l->state, State);
|
||||||
|
}
|
||||||
|
|
||||||
LeaveCriticalSection(&ddraw_cs);
|
LeaveCriticalSection(&ddraw_cs);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
@ -5187,106 +5182,66 @@ IDirect3DDeviceImpl_7_SetTextureStageState(IDirect3DDevice7 *iface,
|
|||||||
DWORD State)
|
DWORD State)
|
||||||
{
|
{
|
||||||
ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
|
ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
|
||||||
|
const struct tss_lookup *l = &tss_lookup[TexStageStateType];
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
TRACE("(%p)->(%08x,%08x,%08x): Relay!\n", This, Stage, TexStageStateType, State);
|
TRACE("(%p)->(%08x,%08x,%08x): Relay!\n", This, Stage, TexStageStateType, State);
|
||||||
|
|
||||||
EnterCriticalSection(&ddraw_cs);
|
EnterCriticalSection(&ddraw_cs);
|
||||||
|
|
||||||
|
if (l->sampler_state)
|
||||||
|
{
|
||||||
switch(TexStageStateType)
|
switch(TexStageStateType)
|
||||||
{
|
{
|
||||||
/* Mipfilter is a sampler state with different values */
|
/* Mipfilter is a sampler state with different values */
|
||||||
case D3DTSS_MIPFILTER:
|
case D3DTSS_MIPFILTER:
|
||||||
{
|
{
|
||||||
WINED3DTEXTUREFILTERTYPE value;
|
|
||||||
switch(State)
|
switch(State)
|
||||||
{
|
{
|
||||||
case D3DTFP_NONE: value = WINED3DTEXF_NONE; break;
|
case D3DTFP_NONE: State = WINED3DTEXF_NONE; break;
|
||||||
case D3DTFP_POINT: value = WINED3DTEXF_POINT; break;
|
case D3DTFP_POINT: State = WINED3DTEXF_POINT; break;
|
||||||
case 0: /* Unchecked */
|
case 0: /* Unchecked */
|
||||||
case D3DTFP_LINEAR: value = WINED3DTEXF_LINEAR; break;
|
case D3DTFP_LINEAR: State = WINED3DTEXF_LINEAR; break;
|
||||||
default:
|
default:
|
||||||
ERR("Unexpected mipfilter value %d\n", State);
|
ERR("Unexpected mipfilter value %d\n", State);
|
||||||
value = WINED3DTEXF_NONE;
|
State = WINED3DTEXF_NONE;
|
||||||
}
|
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_MIPFILTER,
|
|
||||||
value);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Minfilter is a sampler state too, equal values */
|
|
||||||
case D3DTSS_MINFILTER:
|
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_MINFILTER,
|
|
||||||
State);
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Magfilter has slightly different values */
|
/* Magfilter has slightly different values */
|
||||||
case D3DTSS_MAGFILTER:
|
case D3DTSS_MAGFILTER:
|
||||||
{
|
{
|
||||||
WINED3DTEXTUREFILTERTYPE wined3dfilter;
|
switch(State)
|
||||||
switch((D3DTEXTUREMAGFILTER) State)
|
|
||||||
{
|
{
|
||||||
case D3DTFG_POINT: wined3dfilter = WINED3DTEXF_POINT; break;
|
case D3DTFG_POINT: State = WINED3DTEXF_POINT; break;
|
||||||
case D3DTFG_LINEAR: wined3dfilter = WINED3DTEXF_LINEAR; break;
|
case D3DTFG_LINEAR: State = WINED3DTEXF_LINEAR; break;
|
||||||
case D3DTFG_FLATCUBIC: wined3dfilter = WINED3DTEXF_FLATCUBIC; break;
|
case D3DTFG_FLATCUBIC: State = WINED3DTEXF_FLATCUBIC; break;
|
||||||
case D3DTFG_GAUSSIANCUBIC: wined3dfilter = WINED3DTEXF_GAUSSIANCUBIC; break;
|
case D3DTFG_GAUSSIANCUBIC: State = WINED3DTEXF_GAUSSIANCUBIC; break;
|
||||||
case D3DTFG_ANISOTROPIC: wined3dfilter = WINED3DTEXF_ANISOTROPIC; break;
|
case D3DTFG_ANISOTROPIC: State = WINED3DTEXF_ANISOTROPIC; break;
|
||||||
default:
|
default:
|
||||||
ERR("Unexpected d3d7 mag filter type %d\n", State);
|
ERR("Unexpected d3d7 mag filter type %d\n", State);
|
||||||
wined3dfilter = WINED3DTEXF_POINT;
|
State = WINED3DTEXF_POINT;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_MAGFILTER,
|
|
||||||
wined3dfilter);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case D3DTSS_ADDRESS:
|
case D3DTSS_ADDRESS:
|
||||||
IWineD3DDevice_SetSamplerState(This->wineD3DDevice,
|
IWineD3DDevice_SetSamplerState(This->wineD3DDevice, Stage, WINED3DSAMP_ADDRESSV, State);
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_ADDRESSV,
|
|
||||||
State);
|
|
||||||
/* Drop through */
|
|
||||||
case D3DTSS_ADDRESSU:
|
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_ADDRESSU,
|
|
||||||
State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_ADDRESSV:
|
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
WINED3DSAMP_ADDRESSV,
|
|
||||||
State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_BORDERCOLOR:
|
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice, Stage, WINED3DSAMP_BORDERCOLOR, State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_MIPMAPLODBIAS:
|
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice, Stage, WINED3DSAMP_MIPMAPLODBIAS, State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_MAXMIPLEVEL:
|
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice, Stage, WINED3DSAMP_MAXMIPLEVEL, State);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_MAXANISOTROPY:
|
|
||||||
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice, Stage, WINED3DSAMP_MAXANISOTROPY, State);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
hr = IWineD3DDevice_SetTextureStageState(This->wineD3DDevice,
|
|
||||||
Stage,
|
|
||||||
TexStageStateType,
|
|
||||||
State);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hr = IWineD3DDevice_SetSamplerState(This->wineD3DDevice, Stage, l->state, State);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hr = IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, Stage, l->state, State);
|
||||||
|
}
|
||||||
|
|
||||||
LeaveCriticalSection(&ddraw_cs);
|
LeaveCriticalSection(&ddraw_cs);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user