[PATCH 5/5] d3d9: Report d3d9 adapter group information in device caps.

Henri Verbeet hverbeet at gmail.com
Mon Mar 16 07:02:28 CDT 2020


On Fri, 13 Mar 2020 at 13:07, Zhiyi Zhang <zzhang at codeweavers.com> wrote:
> -HRESULT vdecl_convert_fvf(DWORD FVF, D3DVERTEXELEMENT9 **ppVertexElements) DECLSPEC_HIDDEN;
> -D3DFORMAT d3dformat_from_wined3dformat(enum wined3d_format_id format) DECLSPEC_HIDDEN;
> -BOOL is_gdi_compat_wined3dformat(enum wined3d_format_id format) DECLSPEC_HIDDEN;
> -enum wined3d_format_id wined3dformat_from_d3dformat(D3DFORMAT format) DECLSPEC_HIDDEN;
> -unsigned int wined3dmapflags_from_d3dmapflags(unsigned int flags, unsigned int usage) DECLSPEC_HIDDEN;
> -void present_parameters_from_wined3d_swapchain_desc(D3DPRESENT_PARAMETERS *present_parameters,
> -        const struct wined3d_swapchain_desc *swapchain_desc, DWORD presentation_interval) DECLSPEC_HIDDEN;
> -void d3dcaps_from_wined3dcaps(D3DCAPS9 *caps, const struct wined3d_caps *wined3d_caps) DECLSPEC_HIDDEN;
> -
>  struct d3d9
>  {
>      IDirect3D9Ex IDirect3D9Ex_iface;
> @@ -71,6 +62,16 @@ struct d3d9
>      BOOL extended;
>  };
>
> +HRESULT vdecl_convert_fvf(DWORD FVF, D3DVERTEXELEMENT9 **ppVertexElements) DECLSPEC_HIDDEN;
> +D3DFORMAT d3dformat_from_wined3dformat(enum wined3d_format_id format) DECLSPEC_HIDDEN;
> +BOOL is_gdi_compat_wined3dformat(enum wined3d_format_id format) DECLSPEC_HIDDEN;
> +enum wined3d_format_id wined3dformat_from_d3dformat(D3DFORMAT format) DECLSPEC_HIDDEN;
> +unsigned int wined3dmapflags_from_d3dmapflags(unsigned int flags, unsigned int usage) DECLSPEC_HIDDEN;
> +void present_parameters_from_wined3d_swapchain_desc(D3DPRESENT_PARAMETERS *present_parameters,
> +        const struct wined3d_swapchain_desc *swapchain_desc, DWORD presentation_interval) DECLSPEC_HIDDEN;
> +void d3dcaps_from_wined3dcaps(D3DCAPS9 *caps, const struct wined3d_caps *wined3d_caps,
> +        const struct d3d9 *d3d9, unsigned int adapter_ordinal) DECLSPEC_HIDDEN;
> +
If you're going to move these, you may as well fix the parameter
names. On the other hand, you could also consider doing something like
the following:

    void d3d9_caps_from_wined3dcaps(const struct d3d9 *d3d9, unsigned
int adapter_ordinal,
            D3DCAPS9 *caps, const struct wined3d_caps *wined3d_caps)
DECLSPEC_HIDDEN;

and just leaving the other declarations where they are.

> +    /* Get adapter group information */
> +    output_idx = adapter_ordinal;
> +    wined3d_output = d3d9->wined3d_outputs[output_idx];
> +    wined3d_adapter = wined3d_output_get_adapter(wined3d_output);
> +
> +    master_output = wined3d_adapter_get_output(wined3d_adapter, 0);
> +    for (output_idx = 0; output_idx < d3d9->wined3d_output_count; ++output_idx)
> +    {
> +        if (master_output == d3d9->wined3d_outputs[output_idx])
> +        {
> +            caps->MasterAdapterOrdinal = output_idx;
> +            break;
> +        }
> +    }
> +
> +    output_count = wined3d_adapter_get_output_count(wined3d_adapter);
> +    for (output_idx = 0; output_idx < output_count; ++output_idx)
> +    {
> +        if (wined3d_output == wined3d_adapter_get_output(wined3d_adapter, output_idx))
> +        {
> +            caps->AdapterOrdinalInGroup = output_idx;
> +            break;
> +        }
> +    }
> +
> +    caps->NumberOfAdaptersInGroup = caps->AdapterOrdinalInGroup ? 0 : output_count;
>  }
If you store the output ordinal in the wined3d_output_desc structure,
the above would become:

    caps->MasterAdapterOrdinal = output_idx - output_desc.orindal;
    caps->AdapterOrdinalInGroup = output_desc.ordinal;



More information about the wine-devel mailing list