;    _states[VIDEO_SHADER_MENU][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 = @"ribbon_blend";    ca.blendingEnabled = YES;    ca.sourceRGBBlendFactor = MTLBlendFactorOne;    ca.destinationRGBBlendFactor = MTLBlendFactorOne;    _states[VIDEO_SHADER_MENU][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 = @"ribbon_simple";    ca.blendingEnabled = NO;    psd.vertexFunction = [_library newFunctionWithName:@"ribbon_simple_vertex"];    psd.fragmentFunction = [_library newFunctionWithName:@"ribbon_simple_fragment"];    _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 = @"ribbon_simple_blend";    ca.blendingEnabled = YES;    ca.sourceRGBBlendFactor = MTLBlendFactorOne;    ca.destinationRGBBlendFactor = MTLBlendFactorOne;    _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;    }     return YES; }  - (bool)_init