[2/3] wined3d: Call IWineD3DDeviceImpl_FindTexUnitMap() when
activating the context
H. Verbeet
hverbeet at gmail.com
Tue Jun 12 16:08:22 CDT 2007
It'll probably end up getting called less this way, and should
simplify the logic for when to update the map a bit.
Changelog:
- Call IWineD3DDeviceImpl_FindTexUnitMap() when activating the context
-------------- next part --------------
---
dlls/wined3d/context.c | 3 +++
dlls/wined3d/device.c | 21 +--------------------
dlls/wined3d/wined3d_private.h | 1 +
3 files changed, 5 insertions(+), 20 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index c2834c7..ee9e96e 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -801,6 +801,9 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU
glEnable(GL_TEXTURE_SHADER_NV);
checkGLcall("glEnable(GL_TEXTURE_SHADER_NV)");
}
+ if (GL_SUPPORT(NV_REGISTER_COMBINERS)) {
+ IWineD3DDeviceImpl_FindTexUnitMap(This);
+ }
for(i=0; i < context->numDirtyEntries; i++) {
dirtyState = context->dirtyArray[i];
idx = dirtyState >> 5;
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index f3bf509..ce5b528 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3210,7 +3210,7 @@ static inline void markTextureStagesDirty(IWineD3DDeviceImpl *This, DWORD stage)
}
}
-static void IWineD3DDeviceImpl_FindTexUnitMap(IWineD3DDeviceImpl *This) {
+void IWineD3DDeviceImpl_FindTexUnitMap(IWineD3DDeviceImpl *This) {
DWORD i, tex;
/* This code can assume that GL_NV_register_combiners are supported, otherwise
* it is never called.
@@ -3305,11 +3305,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetPixelShader(IWineD3DDevice *iface, I
TRACE("(%p) : setting pShader(%p)\n", This, pShader);
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_PIXELSHADER);
- /* Rebuild the texture unit mapping if nvrc's are supported */
- if(GL_SUPPORT(NV_REGISTER_COMBINERS)) {
- IWineD3DDeviceImpl_FindTexUnitMap(This);
- }
-
return WINED3D_OK;
}
@@ -3997,13 +3992,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetTextureStageState(IWineD3DDevice *if
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_TEXTURESTAGE(Stage, Type));
- /* Rebuild the stage -> gl texture unit mapping if register combiners are supported
- * If there is a pixel shader there will be a 1:1 mapping, no need to touch it. SetPixelShader
- * will call FindTexUnitMap too.
- */
- if(GL_SUPPORT(NV_REGISTER_COMBINERS) && !This->stateBlock->pixelShader) {
- IWineD3DDeviceImpl_FindTexUnitMap(This);
- }
return WINED3D_OK;
}
@@ -4111,13 +4099,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetTexture(IWineD3DDevice *iface, DWORD
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_SAMPLER(Stage));
- /* Verify the texture unit mapping(and rebuild it if needed) if we use nvrcs and no
- * pixel shader is used
- */
- if(GL_SUPPORT(NV_REGISTER_COMBINERS) && !This->stateBlock->pixelShader) {
- IWineD3DDeviceImpl_FindTexUnitMap(This);
- }
-
return WINED3D_OK;
}
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 6673bc0..49081b1 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -745,6 +745,7 @@ struct IWineD3DDeviceImpl
extern const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl;
+void IWineD3DDeviceImpl_FindTexUnitMap(IWineD3DDeviceImpl *This);
void IWineD3DDeviceImpl_MarkStateDirty(IWineD3DDeviceImpl *This, DWORD state);
static inline BOOL isStateDirty(WineD3DContext *context, DWORD state) {
DWORD idx = state >> 5;
More information about the wine-patches
mailing list