[3/5] wined3d: replace vendor specific callbacks with generic code that uses vendor specific arrays (try 2)
Andrei Slăvoiu
andrei.slavoiu at gmail.com
Wed Aug 13 15:00:05 CDT 2014
---
dlls/wined3d/directx.c | 86 +++++++++++++++++++++++++-------------------------
1 file changed, 43 insertions(+), 43 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index d1eeee8..5fdba54 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -88,6 +88,7 @@ enum wined3d_d3d_level
WINED3D_D3D_LEVEL_9_SM3,
WINED3D_D3D_LEVEL_10,
WINED3D_D3D_LEVEL_11,
+ WINED3D_D3D_LEVEL_COUNT
};
/* The d3d device ID */
@@ -2173,45 +2174,43 @@ intel_gl_vendor_table[] =
{GL_VENDOR_MESA, "Mesa Intel driver", cards_intel, ARRAY_SIZE(cards_intel)},
};
-static enum wined3d_pci_device select_card_fallback_nvidia(const struct wined3d_gl_info *gl_info)
+static const enum wined3d_pci_device
+card_fallback_nvidia[] =
{
- enum wined3d_d3d_level d3d_level = d3d_level_from_gl_info(gl_info);
- if (d3d_level >= WINED3D_D3D_LEVEL_10)
- return CARD_NVIDIA_GEFORCE_8800GTX;
- if (d3d_level >= WINED3D_D3D_LEVEL_9_SM3)
- return CARD_NVIDIA_GEFORCE_6800;
- if (d3d_level >= WINED3D_D3D_LEVEL_9_SM2)
- return CARD_NVIDIA_GEFORCEFX_5800;
- if (d3d_level >= WINED3D_D3D_LEVEL_8)
- return CARD_NVIDIA_GEFORCE3;
- if (d3d_level >= WINED3D_D3D_LEVEL_7)
- return CARD_NVIDIA_GEFORCE;
- if (d3d_level >= WINED3D_D3D_LEVEL_6)
- return CARD_NVIDIA_RIVA_TNT;
- return CARD_NVIDIA_RIVA_128;
-}
-
-static enum wined3d_pci_device select_card_fallback_amd(const struct wined3d_gl_info *gl_info)
+ CARD_NVIDIA_RIVA_128, /* D3D5 */
+ CARD_NVIDIA_RIVA_TNT, /* D3D6 */
+ CARD_NVIDIA_GEFORCE, /* D3D7 */
+ CARD_NVIDIA_GEFORCE3, /* D3D8 */
+ CARD_NVIDIA_GEFORCEFX_5800, /* D3D9_SM2 */
+ CARD_NVIDIA_GEFORCE_6800, /* D3D9_SM3 */
+ CARD_NVIDIA_GEFORCE_8800GTX, /* D3D10 */
+ CARD_NVIDIA_GEFORCE_GTX470, /* D3D11 */
+},
+card_fallback_amd[] =
{
- enum wined3d_d3d_level d3d_level = d3d_level_from_gl_info(gl_info);
- if (d3d_level >= WINED3D_D3D_LEVEL_10)
- return CARD_AMD_RADEON_HD2900;
- if (d3d_level >= WINED3D_D3D_LEVEL_9_SM2)
- return CARD_AMD_RADEON_9500;
- if (d3d_level >= WINED3D_D3D_LEVEL_8)
- return CARD_AMD_RADEON_8500;
- if (d3d_level >= WINED3D_D3D_LEVEL_7)
- return CARD_AMD_RADEON_7200;
- return CARD_AMD_RAGE_128PRO;
-}
-
-static enum wined3d_pci_device select_card_fallback_intel(const struct wined3d_gl_info *gl_info)
+ CARD_AMD_RAGE_128PRO, /* D3D5 */
+ CARD_AMD_RAGE_128PRO, /* D3D6 */
+ CARD_AMD_RADEON_7200, /* D3D7 */
+ CARD_AMD_RADEON_8500, /* D3D8 */
+ CARD_AMD_RADEON_9500, /* D3D9_SM2 */
+ CARD_AMD_RADEON_X1600, /* D3D9_SM3 */
+ CARD_AMD_RADEON_HD2900, /* D3D10 */
+ CARD_AMD_RADEON_HD5600, /* D3D11 */
+},
+card_fallback_intel[] =
{
- enum wined3d_d3d_level d3d_level = d3d_level_from_gl_info(gl_info);
- if (d3d_level >= WINED3D_D3D_LEVEL_10)
- return CARD_INTEL_G45;
- return CARD_INTEL_915G;
-}
+ CARD_INTEL_915G, /* D3D5 */
+ CARD_INTEL_915G, /* D3D6 */
+ CARD_INTEL_915G, /* D3D7 */
+ CARD_INTEL_915G, /* D3D8 */
+ CARD_INTEL_915G, /* D3D9_SM2 */
+ CARD_INTEL_915G, /* D3D9_SM3 */
+ CARD_INTEL_G45, /* D3D10 */
+ CARD_INTEL_IVBD, /* D3D11 */
+};
+C_ASSERT(ARRAY_SIZE(card_fallback_nvidia) == WINED3D_D3D_LEVEL_COUNT);
+C_ASSERT(ARRAY_SIZE(card_fallback_amd) == WINED3D_D3D_LEVEL_COUNT);
+C_ASSERT(ARRAY_SIZE(card_fallback_intel) == WINED3D_D3D_LEVEL_COUNT);
static enum wined3d_pci_device select_card_handler(const struct gl_vendor_selection *table,
unsigned int table_size, enum wined3d_gl_vendor gl_vendor, const char *gl_renderer)
@@ -2244,22 +2243,22 @@ static const struct
const char *description; /* Description of the card selector i.e. Apple OS/X Intel */
const struct gl_vendor_selection *gl_vendor_selection;
unsigned int gl_vendor_count;
- enum wined3d_pci_device (*select_card_fallback)(const struct wined3d_gl_info *gl_info);
+ const enum wined3d_pci_device *card_fallback; /* An array with D3D_LEVEL_COUNT elements */
}
card_vendor_table[] =
{
{HW_VENDOR_AMD, "AMD", amd_gl_vendor_table,
sizeof(amd_gl_vendor_table) / sizeof(*amd_gl_vendor_table),
- select_card_fallback_amd},
+ card_fallback_amd},
{HW_VENDOR_NVIDIA, "Nvidia", nvidia_gl_vendor_table,
sizeof(nvidia_gl_vendor_table) / sizeof(*nvidia_gl_vendor_table),
- select_card_fallback_nvidia},
+ card_fallback_nvidia},
{HW_VENDOR_VMWARE, "VMware", vmware_gl_vendor_table,
sizeof(vmware_gl_vendor_table) / sizeof(*vmware_gl_vendor_table),
- select_card_fallback_amd},
+ card_fallback_amd},
{HW_VENDOR_INTEL, "Intel", intel_gl_vendor_table,
sizeof(intel_gl_vendor_table) / sizeof(*intel_gl_vendor_table),
- select_card_fallback_intel},
+ card_fallback_intel},
};
@@ -2317,6 +2316,7 @@ static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info *
* memory can be overruled using a registry setting. */
unsigned int i;
+ enum wined3d_d3d_level d3d_level = d3d_level_from_gl_info(gl_info);
enum wined3d_pci_device device;
for (i = 0; i < (sizeof(card_vendor_table) / sizeof(*card_vendor_table)); ++i)
@@ -2331,7 +2331,7 @@ static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info *
return device;
TRACE("Unrecognized renderer %s, falling back to default.\n", debugstr_a(gl_renderer));
- return card_vendor_table[i].select_card_fallback(gl_info);
+ return card_vendor_table[i].card_fallback[d3d_level];
}
FIXME("No card selector available for card vendor %04x (using GL_RENDERER %s).\n",
@@ -2339,7 +2339,7 @@ static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info *
/* Default to generic Nvidia hardware based on the supported OpenGL extensions. */
*card_vendor = HW_VENDOR_NVIDIA;
- return select_card_fallback_nvidia(gl_info);
+ return card_fallback_nvidia[d3d_level];
}
static const struct wined3d_vertex_pipe_ops *select_vertex_implementation(const struct wined3d_gl_info *gl_info,
--
2.0.4
More information about the wine-patches
mailing list