|
1 | 1 | #include "Cafe/HW/Latte/Renderer/Metal/LatteToMtl.h"
|
2 | 2 | #include "Common/precompiled.h"
|
3 | 3 | #include "Metal/MTLDepthStencil.hpp"
|
| 4 | +#include "Metal/MTLRenderCommandEncoder.hpp" |
4 | 5 | #include "Metal/MTLSampler.hpp"
|
5 | 6 |
|
6 | 7 | std::map<Latte::E_GX2SURFFMT, MtlPixelFormatInfo> MTL_COLOR_FORMAT_TABLE = {
|
@@ -247,22 +248,38 @@ TextureDecoder* GetMtlTextureDecoder(Latte::E_GX2SURFFMT format, bool isDepth)
|
247 | 248 | }
|
248 | 249 | }
|
249 | 250 |
|
250 |
| -MTL::PrimitiveType GetMtlPrimitiveType(LattePrimitiveMode mode) |
| 251 | +MTL::PrimitiveType GetMtlPrimitiveType(LattePrimitiveMode primitiveMode) |
251 | 252 | {
|
252 |
| - switch (mode) |
| 253 | + switch (primitiveMode) |
253 | 254 | {
|
254 |
| - case LattePrimitiveMode::POINTS: |
255 |
| - return MTL::PrimitiveTypePoint; |
256 |
| - case LattePrimitiveMode::LINES: |
257 |
| - return MTL::PrimitiveTypeLine; |
258 |
| - case LattePrimitiveMode::TRIANGLES: |
259 |
| - return MTL::PrimitiveTypeTriangle; |
260 |
| - case LattePrimitiveMode::TRIANGLE_STRIP: |
261 |
| - return MTL::PrimitiveTypeTriangleStrip; |
262 |
| - default: |
263 |
| - // TODO: uncomment |
264 |
| - //printf("unimplemented primitive type %u\n", (uint32)mode); |
265 |
| - return MTL::PrimitiveTypeTriangle; |
| 255 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::POINTS: |
| 256 | + return MTL::PrimitiveTypePoint; |
| 257 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::LINES: |
| 258 | + return MTL::PrimitiveTypeLine; |
| 259 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::LINE_STRIP: |
| 260 | + return MTL::PrimitiveTypeLineStrip; |
| 261 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::LINE_LOOP: |
| 262 | + return MTL::PrimitiveTypeLineStrip; // line loops are emulated as line strips with an extra connecting strip at the end |
| 263 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::LINE_STRIP_ADJACENT: // Tropical Freeze level 3-6 |
| 264 | + debug_printf("Metal doesn't support line strip adjacent primitive, using line strip instead\n"); |
| 265 | + return MTL::PrimitiveTypeLineStrip; |
| 266 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::TRIANGLES: |
| 267 | + return MTL::PrimitiveTypeTriangle; |
| 268 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::TRIANGLE_FAN: |
| 269 | + debug_printf("Metal doesn't support triangle fan primitive, using triangle strip instead\n"); |
| 270 | + return MTL::PrimitiveTypeTriangleStrip; |
| 271 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::TRIANGLE_STRIP: |
| 272 | + return MTL::PrimitiveTypeTriangleStrip; |
| 273 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::QUADS: |
| 274 | + return MTL::PrimitiveTypeTriangle; // quads are emulated as 2 triangles |
| 275 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::QUAD_STRIP: |
| 276 | + return MTL::PrimitiveTypeTriangle; // quad strips are emulated as (count-2)/2 triangles |
| 277 | + case Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE::RECTS: |
| 278 | + return MTL::PrimitiveTypeTriangle; // rects are emulated as 2 triangles |
| 279 | + default: |
| 280 | + cemuLog_logDebug(LogType::Force, "Metal-Unsupported: Render pipeline with primitive mode {} created", primitiveMode); |
| 281 | + cemu_assert_debug(false); |
| 282 | + return MTL::PrimitiveTypeTriangle; |
266 | 283 | }
|
267 | 284 | }
|
268 | 285 |
|
|
0 commit comments