[Mesa-dev] [PATCH 1/2] st/nine: introduce SetVersion() for present interface v1.4
Axel Davy
davyaxel0 at gmail.com
Sat Apr 6 21:25:00 UTC 2019
Just to give a follow-up on this patch for the mailing list, we
discussed on irc that there was already a way to advertise mesa version
(the d3dadapter9 version).
Axel
On 04/04/2019 12:34, Andre Heider wrote:
> A follow up patch requires a behaviour change, so we need to negotiate
> the present version to be used to keep backward compatiblity.
>
> We already get the supported version from the WINE side via GetVersion().
> Introduce the member SetVersion() to pass back the maximum common
> version.
>
> Signed-off-by: Andre Heider <a.heider at gmail.com>
> ---
>
> Corresponding d3d9-nine.dll patch:
> https://github.com/iXit/wine-nine-standalone/commit/c7d3b86ee3dc40f897508cd13a3862c277cbe08c
>
> include/d3dadapter/present.h | 3 +++
> src/gallium/state_trackers/nine/adapter9.c | 11 +++++++++++
> 2 files changed, 14 insertions(+)
>
> diff --git a/include/d3dadapter/present.h b/include/d3dadapter/present.h
> index 0325ebc511f..2f784837cfb 100644
> --- a/include/d3dadapter/present.h
> +++ b/include/d3dadapter/present.h
> @@ -151,6 +151,8 @@ typedef struct ID3DPresentGroupVtbl
> /* used to create additional presentation interfaces along the way */
> HRESULT (WINAPI *CreateAdditionalPresent)(ID3DPresentGroup *This, D3DPRESENT_PARAMETERS *pPresentationParameters, ID3DPresent **ppPresent);
> void (WINAPI *GetVersion) (ID3DPresentGroup *This, int *major, int *minor);
> + /* Available since version 1.4 */
> + void (WINAPI *SetVersion) (ID3DPresentGroup *This, int major, int minor);
> } ID3DPresentGroupVtbl;
>
> struct ID3DPresentGroup
> @@ -167,6 +169,7 @@ struct ID3DPresentGroup
> #define ID3DPresentGroup_GetPresent(p,a,b) (p)->lpVtbl->GetPresent(p,a,b)
> #define ID3DPresentGroup_CreateAdditionalPresent(p,a,b) (p)->lpVtbl->CreateAdditionalPresent(p,a,b)
> #define ID3DPresentGroup_GetVersion(p,a,b) (p)->lpVtbl->GetVersion(p,a,b)
> +#define ID3DPresentGroup_SetVersion(p,a,b) (p)->lpVtbl->SetVersion(p,a,b)
>
> #endif /* __cplusplus */
>
> diff --git a/src/gallium/state_trackers/nine/adapter9.c b/src/gallium/state_trackers/nine/adapter9.c
> index 3aa95b93b2f..4f648e894b8 100644
> --- a/src/gallium/state_trackers/nine/adapter9.c
> +++ b/src/gallium/state_trackers/nine/adapter9.c
> @@ -34,6 +34,9 @@
>
> #define DBG_CHANNEL DBG_ADAPTER
>
> +/* The maximum supported present version */
> +#define MAX_PRESENT_VERSION_MINOR 4
> +
> HRESULT
> NineAdapter9_ctor( struct NineAdapter9 *This,
> struct NineUnknownParams *pParams,
> @@ -999,6 +1002,14 @@ NineAdapter9_CreateDevice( struct NineAdapter9 *This,
> return D3DERR_NOTAVAILABLE;
> }
>
> + if (minor >= 4) {
> + /* d3d9-nine.dll might support a higher present version than we do.
> + * Limit it to our supported version to keep expected behaviour.
> + */
> + minor = MIN2(minor, MAX_PRESENT_VERSION_MINOR);
> + ID3DPresentGroup_SetVersion(pPresentationGroup, major, minor);
> + }
> +
> hr = NineAdapter9_GetScreen(This, DeviceType, &screen);
> if (FAILED(hr)) {
> DBG("Failed to get pipe_screen.\n");
More information about the mesa-dev
mailing list