Descriptor sets and refactoring

This commit is contained in:
Dynamitos
2024-04-13 23:51:38 +02:00
parent efb2c0e169
commit f5eb12a5de
31 changed files with 1688 additions and 1365 deletions
+181
View File
@@ -1,5 +1,8 @@
#include "Enums.h"
#include "Graphics/Enums.h"
#include "Metal/MTLArgument.hpp"
#include "Metal/MTLDepthStencil.hpp"
#include "Metal/MTLSampler.hpp"
#include <stdexcept>
using namespace Seele;
@@ -587,3 +590,181 @@ Gfx::SeAttachmentStoreOp Seele::Metal::cast(MTL::StoreAction storeOp) {
throw std::logic_error("Not implemented");
}
}
MTL::BindingAccess Seele::Metal::cast(Gfx::SeDescriptorAccessTypeFlags access) {
switch (access) {
case Gfx::SE_DESCRIPTOR_ACCESS_READ_ONLY_BIT:
return MTL::ArgumentAccessReadOnly;
case Gfx::SE_DESCRIPTOR_ACCESS_READ_WRITE_BIT:
return MTL::ArgumentAccessReadWrite;
case Gfx::SE_DESCRIPTOR_ACCESS_WRITE_ONLY_BIT:
return MTL::ArgumentAccessWriteOnly;
default:
throw std::logic_error("Not implemented");
}
}
Gfx::SeDescriptorAccessTypeFlags Seele::Metal::cast(MTL::BindingAccess access) {
switch (access) {
case MTL::ArgumentAccessReadOnly:
return Gfx::SE_DESCRIPTOR_ACCESS_READ_ONLY_BIT;
case MTL::ArgumentAccessReadWrite:
return Gfx::SE_DESCRIPTOR_ACCESS_READ_WRITE_BIT;
case MTL::ArgumentAccessWriteOnly:
return Gfx::SE_DESCRIPTOR_ACCESS_WRITE_ONLY_BIT;
default:
throw std::logic_error("Not implemented");
}
}
MTL::SamplerBorderColor Seele::Metal::cast(Gfx::SeBorderColor color) {
switch (color) {
case Gfx::SE_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:
return MTL::SamplerBorderColorTransparentBlack;
case Gfx::SE_BORDER_COLOR_INT_TRANSPARENT_BLACK:
return MTL::SamplerBorderColorTransparentBlack;
case Gfx::SE_BORDER_COLOR_FLOAT_OPAQUE_BLACK:
return MTL::SamplerBorderColorOpaqueBlack;
case Gfx::SE_BORDER_COLOR_INT_OPAQUE_BLACK:
return MTL::SamplerBorderColorOpaqueBlack;
case Gfx::SE_BORDER_COLOR_FLOAT_OPAQUE_WHITE:
return MTL::SamplerBorderColorOpaqueWhite;
case Gfx::SE_BORDER_COLOR_INT_OPAQUE_WHITE:
return MTL::SamplerBorderColorOpaqueWhite;
default:
throw std::logic_error("Not implemented");
}
}
Gfx::SeBorderColor Seele::Metal::cast(MTL::SamplerBorderColor color) {
switch (color) {
case MTL::SamplerBorderColorTransparentBlack:
return Gfx::SE_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK;
case MTL::SamplerBorderColorOpaqueBlack:
return Gfx::SE_BORDER_COLOR_FLOAT_OPAQUE_BLACK;
case MTL::SamplerBorderColorOpaqueWhite:
return Gfx::SE_BORDER_COLOR_FLOAT_OPAQUE_WHITE;
default:
throw std::logic_error("Not implemented");
}
}
MTL::CompareFunction Seele::Metal::cast(Gfx::SeCompareOp compare) {
switch (compare) {
case Gfx::SE_COMPARE_OP_NEVER:
return MTL::CompareFunctionNever;
case Gfx::SE_COMPARE_OP_LESS:
return MTL::CompareFunctionLess;
case Gfx::SE_COMPARE_OP_EQUAL:
return MTL::CompareFunctionEqual;
case Gfx::SE_COMPARE_OP_LESS_OR_EQUAL:
return MTL::CompareFunctionLessEqual;
case Gfx::SE_COMPARE_OP_GREATER:
return MTL::CompareFunctionGreater;
case Gfx::SE_COMPARE_OP_NOT_EQUAL:
return MTL::CompareFunctionNotEqual;
case Gfx::SE_COMPARE_OP_GREATER_OR_EQUAL:
return MTL::CompareFunctionGreaterEqual;
case Gfx::SE_COMPARE_OP_ALWAYS:
return MTL::CompareFunctionAlways;
default:
throw std::logic_error("Not implemented");
}
}
Gfx::SeCompareOp Seele::Metal::cast(MTL::CompareFunction compare) {
switch (compare) {
case MTL::CompareFunctionNever:
return Gfx::SE_COMPARE_OP_NEVER;
case MTL::CompareFunctionLess:
return Gfx::SE_COMPARE_OP_LESS;
case MTL::CompareFunctionEqual:
return Gfx::SE_COMPARE_OP_EQUAL;
case MTL::CompareFunctionLessEqual:
return Gfx::SE_COMPARE_OP_LESS_OR_EQUAL;
case MTL::CompareFunctionGreater:
return Gfx::SE_COMPARE_OP_GREATER;
case MTL::CompareFunctionNotEqual:
return Gfx::SE_COMPARE_OP_NOT_EQUAL;
case MTL::CompareFunctionGreaterEqual:
return Gfx::SE_COMPARE_OP_GREATER_OR_EQUAL;
case MTL::CompareFunctionAlways:
return Gfx::SE_COMPARE_OP_ALWAYS;
}
}
MTL::SamplerMinMagFilter Seele::Metal::cast(Gfx::SeFilter filter) {
switch (filter) {
case Gfx::SE_FILTER_NEAREST:
return MTL::SamplerMinMagFilterNearest;
case Gfx::SE_FILTER_LINEAR:
return MTL::SamplerMinMagFilterLinear;
case Gfx::SE_FILTER_CUBIC_IMG:
return MTL::SamplerMinMagFilterLinear;
default:
throw std::logic_error("Not implemented");
}
}
Gfx::SeFilter Seele::Metal::cast(MTL::SamplerMinMagFilter filter) {
switch (filter) {
case MTL::SamplerMinMagFilterNearest:
return Gfx::SE_FILTER_NEAREST;
case MTL::SamplerMinMagFilterLinear:
return Gfx::SE_FILTER_LINEAR;
}
}
MTL::SamplerMipFilter Seele::Metal::cast(Gfx::SeSamplerMipmapMode filter) {
switch (filter) {
case Seele::Gfx::SE_SAMPLER_MIPMAP_MODE_NEAREST:
return MTL::SamplerMipFilterNearest;
case Seele::Gfx::SE_SAMPLER_MIPMAP_MODE_LINEAR:
return MTL::SamplerMipFilterLinear;
default:
throw std::logic_error("Not implemented");
}
}
Gfx::SeSamplerMipmapMode Seele::Metal::cast(MTL::SamplerMipFilter filter) {
switch (filter) {
case MTL::SamplerMipFilterNotMipmapped:
return Gfx::SE_SAMPLER_MIPMAP_MODE_LINEAR;
case MTL::SamplerMipFilterNearest:
return Gfx::SE_SAMPLER_MIPMAP_MODE_NEAREST;
case MTL::SamplerMipFilterLinear:
return Gfx::SE_SAMPLER_MIPMAP_MODE_LINEAR;
}
}
MTL::SamplerAddressMode Seele::Metal::cast(Gfx::SeSamplerAddressMode mode) {
switch (mode) {
case Gfx::SE_SAMPLER_ADDRESS_MODE_REPEAT:
return MTL::SamplerAddressModeRepeat;
case Gfx::SE_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT:
return MTL::SamplerAddressModeMirrorRepeat;
case Gfx::SE_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE:
return MTL::SamplerAddressModeMirrorClampToEdge;
case Gfx::SE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER:
return MTL::SamplerAddressModeClampToBorderColor;
case Gfx::SE_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE:
return MTL::SamplerAddressModeMirrorClampToEdge;
}
}
Gfx::SeSamplerAddressMode Seele::Metal::cast(MTL::SamplerAddressMode mode) {
switch (mode) {
case MTL::SamplerAddressModeClampToEdge:
return Gfx::SE_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
case MTL::SamplerAddressModeMirrorClampToEdge:
return Gfx::SE_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE;
case MTL::SamplerAddressModeRepeat:
return Gfx::SE_SAMPLER_ADDRESS_MODE_REPEAT;
case MTL::SamplerAddressModeMirrorRepeat:
return Gfx::SE_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT;
case MTL::SamplerAddressModeClampToZero:
return Gfx::SE_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
case MTL::SamplerAddressModeClampToBorderColor:
return Gfx::SE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
}
}