wined3d: Move video memory tracking to the adapter.
This commit is contained in:
parent
5ab977e2aa
commit
243ac3ed75
@ -99,7 +99,7 @@ static void WINAPI IWineD3DDeviceImpl_AddResource(IWineD3DDevice *iface, IWineD3
|
||||
*pp##type = NULL; \
|
||||
return WINED3DERR_OUTOFVIDEOMEMORY; \
|
||||
} \
|
||||
globalChangeGlRam(_size); \
|
||||
WineD3DAdapterChangeGLRam(This, _size); \
|
||||
} \
|
||||
object->resource.allocatedMemory = (0 == _size ? NULL : Pool == WINED3DPOOL_DEFAULT ? NULL : HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, _size)); \
|
||||
if (object->resource.allocatedMemory == NULL && _size != 0 && Pool != WINED3DPOOL_DEFAULT) { \
|
||||
@ -2295,24 +2295,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetDirect3D(IWineD3DDevice *iface, IWin
|
||||
}
|
||||
|
||||
static UINT WINAPI IWineD3DDeviceImpl_GetAvailableTextureMem(IWineD3DDevice *iface) {
|
||||
/** NOTE: There's a probably a hack-around for this one by putting as many pbuffers, VBOs (or whatever)
|
||||
* into the video ram as possible and seeing how many fit
|
||||
* you can also get the correct initial value from nvidia and ATI's driver via X
|
||||
* texture memory is video memory + AGP memory
|
||||
*******************/
|
||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||
static BOOL showfixmes = TRUE;
|
||||
if (showfixmes) {
|
||||
FIXME("(%p) : stub, simulating %dMB for now, returning %dMB left\n", This,
|
||||
(wined3d_settings.emulated_textureram/(1024*1024)),
|
||||
((wined3d_settings.emulated_textureram - wineD3DGlobalStatistics->glsurfaceram) / (1024*1024)));
|
||||
showfixmes = FALSE;
|
||||
}
|
||||
|
||||
TRACE("(%p) : simulating %dMB, returning %dMB left\n", This,
|
||||
(wined3d_settings.emulated_textureram/(1024*1024)),
|
||||
((wined3d_settings.emulated_textureram - wineD3DGlobalStatistics->glsurfaceram) / (1024*1024)));
|
||||
(This->adapter->TextureRam/(1024*1024)),
|
||||
((This->adapter->TextureRam - This->adapter->UsedTextureRam) / (1024*1024)));
|
||||
/* return simulated texture memory left */
|
||||
return (wined3d_settings.emulated_textureram - wineD3DGlobalStatistics->glsurfaceram);
|
||||
return (This->adapter->TextureRam - This->adapter->UsedTextureRam);
|
||||
}
|
||||
|
||||
|
||||
|
@ -277,6 +277,14 @@ static BOOL WineD3D_CreateFakeGLContext(void) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Adjust the amount of used texture memory */
|
||||
long WineD3DAdapterChangeGLRam(IWineD3DDeviceImpl *D3DDevice, long glram){
|
||||
UINT Adapter = D3DDevice->adapterNo;
|
||||
|
||||
Adapters[Adapter].UsedTextureRam += glram;
|
||||
TRACE("Adjusted gl ram by %ld to %d\n", glram, Adapters[Adapter].UsedTextureRam);
|
||||
return Adapters[Adapter].UsedTextureRam;
|
||||
}
|
||||
|
||||
/**********************************************************
|
||||
* IUnknown parts follows
|
||||
@ -1034,16 +1042,11 @@ BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) {
|
||||
}
|
||||
TRACE("FOUND (fake) card: 0x%x (vendor id), 0x%x (device id)\n", gl_info->gl_vendor, gl_info->gl_card);
|
||||
|
||||
/* Unless VideoMemorySize is set in the registry, the default is 0
|
||||
* TODO: put emulated_textureram in the device */
|
||||
if(wined3d_settings.emulated_textureram == 0) {
|
||||
/* If we have an estimate use it, else default to 64MB */
|
||||
if(vidmem)
|
||||
wined3d_settings.emulated_textureram = vidmem*1024*1024; /* convert from MBs to bytes */
|
||||
else
|
||||
wined3d_settings.emulated_textureram = WINE_DEFAULT_VIDMEM;
|
||||
TRACE("Emulating %d MB of texture memory\n", wined3d_settings.emulated_textureram);
|
||||
}
|
||||
/* If we have an estimate use it, else default to 64MB; */
|
||||
if(vidmem)
|
||||
gl_info->vidmem = vidmem*1024*1024; /* convert from MBs to bytes */
|
||||
else
|
||||
gl_info->vidmem = WINE_DEFAULT_VIDMEM;
|
||||
|
||||
/* Load all the lookup tables
|
||||
TODO: It may be a good idea to make minLookup and maxLookup const and populate them in wined3d_private.h where they are declared */
|
||||
@ -2743,6 +2746,14 @@ BOOL InitAdapters(void) {
|
||||
Adapters[0].driver = "Display";
|
||||
Adapters[0].description = "Direct3D HAL";
|
||||
|
||||
/* Use the VideoRamSize registry setting when set */
|
||||
if(wined3d_settings.emulated_textureram)
|
||||
Adapters[0].TextureRam = wined3d_settings.emulated_textureram;
|
||||
else
|
||||
Adapters[0].TextureRam = Adapters[0].gl_info.vidmem;
|
||||
Adapters[0].UsedTextureRam = 0;
|
||||
TRACE("Emulating %dMB of texture ram\n", Adapters[0].TextureRam);
|
||||
|
||||
/* Initialize the Adapter's DeviceName which is required for ChangeDisplaySettings and friends */
|
||||
DisplayDevice.cb = sizeof(DisplayDevice);
|
||||
EnumDisplayDevicesW(NULL, 0 /* Adapter 0 = iDevNum 0 */, &DisplayDevice, 0);
|
||||
|
@ -71,7 +71,7 @@ void IWineD3DResourceImpl_CleanUp(IWineD3DResource *iface){
|
||||
TRACE("(%p) Cleaning up resource\n", This);
|
||||
if (This->resource.pool == WINED3DPOOL_DEFAULT) {
|
||||
TRACE("Decrementing device memory pool by %u\n", This->resource.size);
|
||||
globalChangeGlRam(-This->resource.size);
|
||||
WineD3DAdapterChangeGLRam(This->resource.wineD3DDevice, -This->resource.size);
|
||||
}
|
||||
|
||||
LIST_FOR_EACH_SAFE(e1, e2, &This->resource.privateData) {
|
||||
|
@ -46,19 +46,6 @@ wined3d_settings_t wined3d_settings =
|
||||
NULL /* No wine logo by default */
|
||||
};
|
||||
|
||||
WineD3DGlobalStatistics *wineD3DGlobalStatistics = NULL;
|
||||
|
||||
long globalChangeGlRam(long glram){
|
||||
/* FIXME: replace this function with object tracking */
|
||||
int result;
|
||||
|
||||
wineD3DGlobalStatistics->glsurfaceram += glram;
|
||||
TRACE("Adjusted gl ram by %ld to %d\n", glram, wineD3DGlobalStatistics->glsurfaceram);
|
||||
result = wineD3DGlobalStatistics->glsurfaceram;
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
IWineD3D* WINAPI WineDirect3DCreate(UINT SDKVersion, UINT dxVersion, IUnknown *parent) {
|
||||
IWineD3DImpl* object;
|
||||
|
||||
@ -76,13 +63,6 @@ IWineD3D* WINAPI WineDirect3DCreate(UINT SDKVersion, UINT dxVersion, IUnknown *p
|
||||
object->ref = 1;
|
||||
object->parent = parent;
|
||||
|
||||
/*Create a structure for storing global data in*/
|
||||
if(wineD3DGlobalStatistics == NULL){
|
||||
TRACE("Creating global statistics store\n");
|
||||
wineD3DGlobalStatistics = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wineD3DGlobalStatistics));
|
||||
|
||||
}
|
||||
|
||||
TRACE("Created WineD3D object @ %p for d3d%d support\n", object, dxVersion);
|
||||
|
||||
return (IWineD3D *)object;
|
||||
|
@ -326,23 +326,6 @@ typedef struct IWineD3DSurfaceImpl IWineD3DSurfaceImpl;
|
||||
typedef struct IWineD3DPaletteImpl IWineD3DPaletteImpl;
|
||||
typedef struct IWineD3DDeviceImpl IWineD3DDeviceImpl;
|
||||
|
||||
/* Tracking */
|
||||
|
||||
/* TODO: Move some of this to the device */
|
||||
long globalChangeGlRam(long glram);
|
||||
|
||||
/* Memory and object tracking */
|
||||
|
||||
/*Structure for holding information on all direct3d objects
|
||||
useful for making sure tracking is ok and when release is called on a device!
|
||||
and probably quite handy for debugging and dumping states out
|
||||
*/
|
||||
typedef struct WineD3DGlobalStatistics {
|
||||
int glsurfaceram; /* The aproximate amount of glTexture memory allocated for textures */
|
||||
} WineD3DGlobalStatistics;
|
||||
|
||||
extern WineD3DGlobalStatistics* wineD3DGlobalStatistics;
|
||||
|
||||
/* Global variables */
|
||||
extern const float identity[16];
|
||||
|
||||
@ -597,10 +580,13 @@ struct WineD3DAdapter
|
||||
WCHAR DeviceName[CCHDEVICENAME]; /* DeviceName for use with e.g. ChangeDisplaySettings */
|
||||
int nCfgs;
|
||||
WineD3D_PixelFormat *cfgs;
|
||||
unsigned int TextureRam; /* Amount of texture memory both video ram + AGP/TurboCache/HyperMemory/.. */
|
||||
unsigned int UsedTextureRam;
|
||||
};
|
||||
|
||||
extern BOOL InitAdapters(void);
|
||||
extern BOOL initPixelFormats(WineD3D_GL_Info *gl_info);
|
||||
extern long WineD3DAdapterChangeGLRam(IWineD3DDeviceImpl *D3DDevice, long glram);
|
||||
|
||||
/*****************************************************************************
|
||||
* High order patch management
|
||||
|
@ -3702,6 +3702,7 @@ typedef struct _WineD3D_GL_Info {
|
||||
|
||||
GL_Vendors gl_vendor;
|
||||
GL_Cards gl_card;
|
||||
UINT vidmem;
|
||||
DWORD gl_driver_version;
|
||||
CHAR gl_renderer[255];
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user