/*
 * MTLRenderPassStencilAttachmentDescriptor+MoltenVK.m
 *
 * Copyright (c) 2020-2021 Chip Davis for CodeWeavers
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#include "MTLRenderPassStencilAttachmentDescriptor+MoltenVK.h"


@implementation MTLRenderPassStencilAttachmentDescriptor (MoltenVK)

-(MTLMultisampleStencilResolveFilter) stencilResolveFilterMVK {
	if ( [self respondsToSelector: @selector(stencilResolveFilter)] ) {
		return self.stencilResolveFilter;
	}
	return MTLMultisampleStencilResolveFilterSample0;
}

-(void) setStencilResolveFilterMVK: (MTLMultisampleStencilResolveFilter) filter {
	if ( [self respondsToSelector: @selector(setStencilResolveFilter:)] ) {
		self.stencilResolveFilter = filter;
	}
}

@end
