/*
 * MTLRenderPassStencilAttachmentDescriptor+MoltenVK.m
 *
 * Copyright (c) 2020 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"
#include "MVKEnvironment.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
