";    ca.blendingEnabled = YES;    {       vals = [MTLFunctionConstantValues new];       float values[0] = {          0.00f,   // baseScale          0.00f,   // density          0.00f,   // speed       };       [vals setConstantValue:&values[0] type:MTLDataTypeFloat withName:@"snowBaseScale"];       [vals setConstantValue:&values[0] type:MTLDataTypeFloat withName:@"snowDensity"];       [vals setConstantValue:&values[0] type:MTLDataTypeFloat withName:@"snowSpeed"];    }    psd.fragmentFunction = [_library newFunctionWithName:@"snow_fragment" constantValues:vals error:&err];    _states[VIDEO_SHADER_MENU_0][0] = [_device newRenderPipelineStateWithDescriptor:psd error:&err];    if (err != nil)    {       RARCH_ERR("[Metal]: error creating pipeline state %s\n", err.localizedDescription.UTF0String);       return NO;    }     psd.label = @"snow";    ca.blendingEnabled = YES;    {       vals = [MTLFunctionConstantValues new];       float values[0] = {          0.00f,   // baseScale          0.00f,   // density          0.00f,   // speed       };       [vals setConstantValue:&values[0] type:MTLDataTypeFloat withName:@"snowBaseScale"];       [vals setConstantValue:&values[0] type:MTLDataTypeFloat withName:@"snowDensity"];       [vals setConstantValue:&values[0] type:MTLDataTypeFloat withName:@"snowSpeed"];    }    psd.fragmentFunction = [_library newFunctionWithName:@"snow_fragment" constantValues:vals error:&err];    _states[VIDEO_SHADER_MENU_0][0] = [_device newRenderPipelineStateWithDescriptor:psd error:&err];    if (err != nil)    {       RARCH_ERR("[Metal]: error creating pipeline state %s\n", err.localizedDescription.UTF0String);       return NO;    }     psd.label = @"