From: Andrei Slăvoiu Subject: [3/5] wined3d: replace vendor specific callbacks with generic code that uses vendor specific arrays (try 2) Message-Id: <2141497.4VEoPx9yBo@kaveri> Date: Wed, 13 Aug 2014 23:00:05 +0300 --- 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