public ConfigStatus ToLaunchGameRequest( LaunchParams parameters, out LaunchGameRequest request) { ConfigStatus status = _queryParametersParser.ParametersToDictionary( parameters.QueryParams, out IDictionary <string, string> parametersDict); status = status.Merge( _queryParametersParser.ParseToParameters(parametersDict, parameters)); ISdkConfig sdkConfig = _sdkConfigFactory.LoadGgpSdkConfigOrDefault(); status = status.Merge( EnvironmentVariables(parameters, out IDictionary <string, string> envVariables)); status = status.Merge(CommandLineArguments(parameters, out string[] cmdArgs)); if ((parameters.Endpoint == StadiaEndpoint.PlayerEndpoint || parameters.Endpoint == StadiaEndpoint.AnyEndpoint) && !string.IsNullOrEmpty(parameters.TestAccount)) { status.AppendWarning( ErrorStrings.TestAccountsNotSupported(parameters.TestAccountGamerName)); parameters.TestAccount = null; } request = new LaunchGameRequest { Parent = Parent(sdkConfig, parameters), GameletName = parameters.GameletName, ApplicationName = parameters.ApplicationName, ExecutablePath = ExecutablePath(parameters), CommandLineArguments = cmdArgs, EnvironmentVariablePairs = envVariables, SurfaceEnforcementMode = parameters.SurfaceEnforcementMode, Debug = parameters.Debug, EnableDeveloperResumeOffer = parameters.Endpoint == StadiaEndpoint.AnyEndpoint }; status = status.Merge( _queryParametersParser.ParseToLaunchRequest(parametersDict, request)); status = status.Merge( _queryParametersParser.GetFinalQueryString(parametersDict, out string queryString)); parameters.QueryParams = queryString; if ((parameters.Endpoint == StadiaEndpoint.PlayerEndpoint || parameters.Endpoint == StadiaEndpoint.AnyEndpoint) && !string.IsNullOrEmpty(queryString)) { status.AppendWarning(ErrorStrings.QueryParamsNotSupported(queryString)); } return(status); }
ConfigStatus ParseParamsCustomParameters(LaunchParams parameters, IDictionary <string, string> queryParams) { ConfigStatus status = ParseParamsCmd(parameters, queryParams); return(status.Merge(ParseParamsVars(parameters, queryParams))); }
public ConfigStatus ParseToLaunchRequest( IDictionary <string, string> queryParams, LaunchGameRequest launchRequest) { ConfigStatus status = AssignValues(launchRequest, queryParams); return(status.Merge(ParseLaunchRequestCustomParameters(launchRequest, queryParams))); }
public ConfigStatus ParseToParameters(IDictionary <string, string> queryParams, LaunchParams parameters) { ConfigStatus status = AssignValues(parameters, queryParams); return(status.Merge(ParseParamsCustomParameters(parameters, queryParams))); }
/// <summary> /// Sets environment variables from query parameters. /// Environment variables are prioritized in the following way: /// <list type="number"> /// <item> /// <description> /// Query parameter 'vars' value. /// </description> /// </item> /// <item> /// <description> /// 'Stadia Environment Variables' setting. /// </description> /// </item> /// <item> /// <description> /// Other VSI settings(Rgp, RenderDoc, ...). /// </description> /// </item> /// <item> /// <description> /// Other Query parameters(color_tools, enable_llpc_in_amdvlk, ...). /// </description> /// </item> /// </list> /// 3d and 4th points don't overlap, so they are actually together on the 3d place. /// </summary> /// <param name="launchRequest"></param> /// <param name="queryParams"></param> /// <returns></returns> ConfigStatus ParseLaunchRequestCustomParameters(LaunchGameRequest launchRequest, IDictionary <string, string> queryParams) { ConfigStatus status = AddBoolEnvironmentVariable( launchRequest, queryParams, "ENABLE_VK_LAYER_VULKAN_COLOR_TOOLS", QueryParamMapping.ColorTools); status = status.Merge( ParseLaunchRequestVulkanDriverVariant(launchRequest, queryParams)); status = status.Merge(AddBoolEnvironmentVariable( launchRequest, queryParams, "GGP_VK_AMDVLK_USE_LLPC", QueryParamMapping.EnableLlpcInAmdvlk)); status = status.Merge(AddBoolEnvironmentVariable( launchRequest, queryParams, "ENABLE_GOOGLE_PIPELINE_DATA_EXPORT_LAYER", QueryParamMapping.EnablePipelineCacheSourceLayer)); return(status); }
ConfigStatus EnvironmentVariables(LaunchParams parameters, out IDictionary <string, string> envVariables) { ConfigStatus status = ConfigStatus.OkStatus(); string variablesString = parameters.GameletEnvironmentVars ?? string.Empty; envVariables = variablesString.Split(';') .Select(v => v.Trim()) .Where(v => !string.IsNullOrWhiteSpace(v)).Select(v => { List <string> parts = v.Split('=').ToList(); if (string.IsNullOrWhiteSpace(parts[0])) { status.AppendWarning(ErrorStrings.InvalidEnvironmentVariable(v)); return(Tuple.Create(string.Empty, string.Empty)); } return(Tuple.Create(parts[0], string.Join("=", parts.Skip(1)))); }).Where(t => !string.IsNullOrEmpty(t.Item1)).GroupBy(tuple => tuple.Item1).Select( tuple => { if (tuple.Count() > 1) { status.AppendWarning( ErrorStrings.MultipleEnvironmentVariableKeys(tuple.Key)); } return(tuple); }).ToDictionary(t => t.Key, t => t.Last().Item2); status = status.Merge(AddFlagsEnvironmentVariables(parameters, envVariables)); if (!status.IsOk) { status.AppendWarning(ErrorStrings.EditEnvironmentVariables); } return(status); }