wined3d: Add a separate structure for driver info.

This commit is contained in:
Henri Verbeet 2009-10-26 10:12:16 +01:00 committed by Alexandre Julliard
parent 69bf130476
commit 5fbe5ee027
3 changed files with 53 additions and 47 deletions

View File

@ -991,6 +991,34 @@ static const struct driver_version_information driver_version_table[] =
/* TODO: Add information about legacy ATI hardware, Intel and other cards. */ /* TODO: Add information about legacy ATI hardware, Intel and other cards. */
}; };
static void init_driver_info(struct wined3d_driver_info *driver_info, WORD vendor, WORD device)
{
unsigned int i;
driver_info->name = "Display";
driver_info->description = "Direct3D HAL";
driver_info->version_high = MAKEDWORD_VERSION(7, 1);
driver_info->version_low = MAKEDWORD_VERSION(8, 6); /* Nvidia RIVA TNT, arbitrary */
for (i = 0; i < (sizeof(driver_version_table) / sizeof(driver_version_table[0])); ++i)
{
if (vendor == driver_version_table[i].vendor && device == driver_version_table[i].card)
{
TRACE_(d3d_caps)("Found card %04x:%04x in driver DB.\n", vendor, device);
driver_info->description = driver_version_table[i].description;
driver_info->version_high = MAKEDWORD_VERSION(driver_version_table[i].hipart_hi,
driver_version_table[i].hipart_lo);
driver_info->version_low = MAKEDWORD_VERSION(driver_version_table[i].lopart_hi,
driver_version_table[i].lopart_lo);
break;
}
}
TRACE_(d3d_caps)("Reporting (fake) driver version 0x%08x-0x%08x.\n",
driver_info->version_high, driver_info->version_low);
}
/* Context activation is done by the caller. */ /* Context activation is done by the caller. */
static void fixup_extensions(struct wined3d_gl_info *gl_info, const char *gl_renderer) static void fixup_extensions(struct wined3d_gl_info *gl_info, const char *gl_renderer)
{ {
@ -1005,28 +1033,6 @@ static void fixup_extensions(struct wined3d_gl_info *gl_info, const char *gl_ren
/* Find out if PBOs work as they are supposed to. */ /* Find out if PBOs work as they are supposed to. */
test_pbo_functionality(gl_info); test_pbo_functionality(gl_info);
/* Fixup the driver version we'll report to the app. */
gl_info->driver_version = MAKEDWORD_VERSION(8, 6); /* Nvidia RIVA TNT, arbitrary */
gl_info->driver_version_hipart = MAKEDWORD_VERSION(7, 1);
for (i = 0; i < (sizeof(driver_version_table) / sizeof(driver_version_table[0])); ++i)
{
if (gl_info->gl_vendor == driver_version_table[i].vendor
&& gl_info->gl_card == driver_version_table[i].card)
{
TRACE_(d3d_caps)("Found card 0x%04x, 0x%04x in driver version DB.\n",
gl_info->gl_vendor, gl_info->gl_card);
gl_info->driver_version = MAKEDWORD_VERSION(driver_version_table[i].lopart_hi,
driver_version_table[i].lopart_lo);
gl_info->driver_version_hipart = MAKEDWORD_VERSION(driver_version_table[i].hipart_hi,
driver_version_table[i].hipart_lo);
gl_info->driver_description = driver_version_table[i].description;
break;
}
}
TRACE_(d3d_caps)("Reporting (fake) driver version 0x%08X-0x%08X.\n",
gl_info->driver_version_hipart, gl_info->driver_version);
} }
static DWORD wined3d_parse_gl_version(const char *gl_version) static DWORD wined3d_parse_gl_version(const char *gl_version)
@ -1534,7 +1540,7 @@ static GL_Cards wined3d_guess_card(const struct wined3d_gl_info *gl_info, const
} }
/* Context activation is done by the caller. */ /* Context activation is done by the caller. */
static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_gl_info *gl_info) static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, struct wined3d_gl_info *gl_info)
{ {
const char *GL_Extensions = NULL; const char *GL_Extensions = NULL;
const char *WGL_Extensions = NULL; const char *WGL_Extensions = NULL;
@ -2075,6 +2081,7 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_gl_info *gl_info)
} }
fixup_extensions(gl_info, gl_renderer); fixup_extensions(gl_info, gl_renderer);
init_driver_info(driver_info, gl_info->gl_vendor, gl_info->gl_card);
add_gl_compat_wrappers(gl_info); add_gl_compat_wrappers(gl_info);
HeapFree(GetProcessHeap(), 0, gl_renderer); HeapFree(GetProcessHeap(), 0, gl_renderer);
@ -2296,6 +2303,7 @@ static HRESULT WINAPI IWineD3DImpl_GetAdapterDisplayMode(IWineD3D *iface, UINT A
static HRESULT WINAPI IWineD3DImpl_GetAdapterIdentifier(IWineD3D *iface, UINT Adapter, DWORD Flags, static HRESULT WINAPI IWineD3DImpl_GetAdapterIdentifier(IWineD3D *iface, UINT Adapter, DWORD Flags,
WINED3DADAPTER_IDENTIFIER* pIdentifier) { WINED3DADAPTER_IDENTIFIER* pIdentifier) {
IWineD3DImpl *This = (IWineD3DImpl *)iface; IWineD3DImpl *This = (IWineD3DImpl *)iface;
struct wined3d_adapter *adapter;
size_t len; size_t len;
TRACE_(d3d_caps)("(%p}->(Adapter: %d, Flags: %x, pId=%p)\n", This, Adapter, Flags, pIdentifier); TRACE_(d3d_caps)("(%p}->(Adapter: %d, Flags: %x, pId=%p)\n", This, Adapter, Flags, pIdentifier);
@ -2304,25 +2312,22 @@ static HRESULT WINAPI IWineD3DImpl_GetAdapterIdentifier(IWineD3D *iface, UINT Ad
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
} }
adapter = &This->adapters[Adapter];
/* Return the information requested */ /* Return the information requested */
TRACE_(d3d_caps)("device/Vendor Name and Version detection using FillGLCaps\n"); TRACE_(d3d_caps)("device/Vendor Name and Version detection using FillGLCaps\n");
if (pIdentifier->driver_size) if (pIdentifier->driver_size)
{ {
len = min(strlen(This->adapters[Adapter].driver), pIdentifier->driver_size - 1); const char *name = adapter->driver_info.name;
memcpy(pIdentifier->driver, This->adapters[Adapter].driver, len); len = min(strlen(name), pIdentifier->driver_size - 1);
memcpy(pIdentifier->driver, name, len);
pIdentifier->driver[len] = '\0'; pIdentifier->driver[len] = '\0';
} }
if (pIdentifier->description_size) if (pIdentifier->description_size)
{ {
const char *description; const char *description = adapter->driver_info.description;
if (This->adapters[Adapter].gl_info.driver_description)
description = This->adapters[Adapter].gl_info.driver_description;
else
description = This->adapters[Adapter].description;
len = min(strlen(description), pIdentifier->description_size - 1); len = min(strlen(description), pIdentifier->description_size - 1);
memcpy(pIdentifier->description, description, len); memcpy(pIdentifier->description, description, len);
pIdentifier->description[len] = '\0'; pIdentifier->description[len] = '\0';
@ -2344,10 +2349,10 @@ static HRESULT WINAPI IWineD3DImpl_GetAdapterIdentifier(IWineD3D *iface, UINT Ad
pIdentifier->device_name[len] = '\0'; pIdentifier->device_name[len] = '\0';
} }
pIdentifier->driver_version.u.HighPart = This->adapters[Adapter].gl_info.driver_version_hipart; pIdentifier->driver_version.u.HighPart = adapter->driver_info.version_high;
pIdentifier->driver_version.u.LowPart = This->adapters[Adapter].gl_info.driver_version; pIdentifier->driver_version.u.LowPart = adapter->driver_info.version_low;
pIdentifier->vendor_id = This->adapters[Adapter].gl_info.gl_vendor; pIdentifier->vendor_id = adapter->gl_info.gl_vendor;
pIdentifier->device_id = This->adapters[Adapter].gl_info.gl_card; pIdentifier->device_id = adapter->gl_info.gl_card;
pIdentifier->subsystem_id = 0; pIdentifier->subsystem_id = 0;
pIdentifier->revision = 0; pIdentifier->revision = 0;
memcpy(&pIdentifier->device_identifier, &IID_D3DDEVICE_D3DUID, sizeof(pIdentifier->device_identifier)); memcpy(&pIdentifier->device_identifier, &IID_D3DDEVICE_D3DUID, sizeof(pIdentifier->device_identifier));
@ -4702,7 +4707,7 @@ BOOL InitAdapters(IWineD3DImpl *This)
goto nogl_adapter; goto nogl_adapter;
} }
ret = IWineD3DImpl_FillGLCaps(&adapter->gl_info); ret = IWineD3DImpl_FillGLCaps(&adapter->driver_info, &adapter->gl_info);
if(!ret) { if(!ret) {
ERR("Failed to initialize gl caps for default adapter\n"); ERR("Failed to initialize gl caps for default adapter\n");
WineD3D_ReleaseFakeGLContext(&fake_gl_ctx); WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
@ -4717,9 +4722,6 @@ BOOL InitAdapters(IWineD3DImpl *This)
hdc = fake_gl_ctx.dc; hdc = fake_gl_ctx.dc;
adapter->driver = "Display";
adapter->description = "Direct3D HAL";
/* Use the VideoRamSize registry setting when set */ /* Use the VideoRamSize registry setting when set */
if(wined3d_settings.emulated_textureram) if(wined3d_settings.emulated_textureram)
adapter->TextureRam = wined3d_settings.emulated_textureram; adapter->TextureRam = wined3d_settings.emulated_textureram;
@ -4897,8 +4899,8 @@ nogl_adapter:
This->adapters[0].monitorPoint.x = -1; This->adapters[0].monitorPoint.x = -1;
This->adapters[0].monitorPoint.y = -1; This->adapters[0].monitorPoint.y = -1;
This->adapters[0].driver = "Display"; This->adapters[0].driver_info.name = "Display";
This->adapters[0].description = "WineD3D DirectDraw Emulation"; This->adapters[0].driver_info.description = "WineD3D DirectDraw Emulation";
if(wined3d_settings.emulated_textureram) { if(wined3d_settings.emulated_textureram) {
This->adapters[0].TextureRam = wined3d_settings.emulated_textureram; This->adapters[0].TextureRam = wined3d_settings.emulated_textureram;
} else { } else {

View File

@ -4141,9 +4141,6 @@ struct wined3d_gl_info
GL_Vendors gl_vendor; GL_Vendors gl_vendor;
GL_Cards gl_card; GL_Cards gl_card;
UINT vidmem; UINT vidmem;
DWORD driver_version;
DWORD driver_version_hipart;
const char *driver_description;
UINT max_buffers; UINT max_buffers;
UINT max_lights; UINT max_lights;

View File

@ -1228,6 +1228,14 @@ typedef struct WineD3D_PixelFormat
int numSamples; int numSamples;
} WineD3D_PixelFormat; } WineD3D_PixelFormat;
struct wined3d_driver_info
{
const char *name;
const char *description;
DWORD version_high;
DWORD version_low;
};
/* The adapter structure */ /* The adapter structure */
struct wined3d_adapter struct wined3d_adapter
{ {
@ -1235,8 +1243,7 @@ struct wined3d_adapter
BOOL opengl; BOOL opengl;
POINT monitorPoint; POINT monitorPoint;
struct wined3d_gl_info gl_info; struct wined3d_gl_info gl_info;
const char *driver; struct wined3d_driver_info driver_info;
const char *description;
WCHAR DeviceName[CCHDEVICENAME]; /* DeviceName for use with e.g. ChangeDisplaySettings */ WCHAR DeviceName[CCHDEVICENAME]; /* DeviceName for use with e.g. ChangeDisplaySettings */
int nCfgs; int nCfgs;
WineD3D_PixelFormat *cfgs; WineD3D_PixelFormat *cfgs;