mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-09-03 16:15:44 +00:00
Fix metal renderer compilation
This commit is contained in:
parent
cb2ba129e8
commit
964b5632d1
6 changed files with 153 additions and 151 deletions
|
@ -1,26 +1,41 @@
|
|||
#pragma once
|
||||
#include <list>
|
||||
#include <memory>
|
||||
#include "kernel_types.hpp"
|
||||
|
||||
#include "helpers.hpp"
|
||||
|
||||
class Memory;
|
||||
|
||||
enum class FcramRegion {
|
||||
App = 0x100,
|
||||
Sys = 0x200,
|
||||
Base = 0x300,
|
||||
};
|
||||
|
||||
struct FcramBlock {
|
||||
u32 paddr;
|
||||
s32 pages;
|
||||
|
||||
FcramBlock(u32 paddr, s32 pages) : paddr(paddr), pages(pages) {}
|
||||
};
|
||||
|
||||
using FcramBlockList = std::list<FcramBlock>;
|
||||
|
||||
class KFcram {
|
||||
struct Region {
|
||||
struct Block {
|
||||
s32 pages;
|
||||
s32 pageOffs;
|
||||
s32 pageOffset;
|
||||
bool used;
|
||||
|
||||
Block(s32 pages, u32 pageOffs) : pages(pages), pageOffs(pageOffs), used(false) {}
|
||||
Block(s32 pages, u32 pageOffset) : pages(pages), pageOffset(pageOffset), used(false) {}
|
||||
};
|
||||
|
||||
std::list<Block> blocks;
|
||||
u32 start;
|
||||
s32 pages;
|
||||
s32 freePages;
|
||||
|
||||
public:
|
||||
Region() : start(0), pages(0) {}
|
||||
void reset(u32 start, size_t size);
|
||||
|
@ -35,6 +50,7 @@ class KFcram {
|
|||
Region appRegion, sysRegion, baseRegion;
|
||||
uint8_t* fcram;
|
||||
std::unique_ptr<u32> refs;
|
||||
|
||||
public:
|
||||
KFcram(Memory& memory);
|
||||
void reset(size_t ramSize, size_t appSize, size_t sysSize, size_t baseSize);
|
||||
|
|
|
@ -1,23 +1,32 @@
|
|||
#pragma once
|
||||
#include <array>
|
||||
#include <cstring>
|
||||
|
||||
#include "fs/archive_base.hpp"
|
||||
#include "handles.hpp"
|
||||
#include "helpers.hpp"
|
||||
#include "result/result.hpp"
|
||||
|
||||
enum class KernelObjectType : u8 {
|
||||
AddressArbiter, Archive, Directory, File, MemoryBlock, Process, ResourceLimit, Session, Dummy,
|
||||
AddressArbiter,
|
||||
Archive,
|
||||
Directory,
|
||||
File,
|
||||
MemoryBlock,
|
||||
Process,
|
||||
ResourceLimit,
|
||||
Session,
|
||||
Dummy,
|
||||
// Bundle waitable objects together in the enum to let the compiler optimize certain checks better
|
||||
Event, Mutex, Port, Semaphore, Timer, Thread
|
||||
Event,
|
||||
Mutex,
|
||||
Port,
|
||||
Semaphore,
|
||||
Timer,
|
||||
Thread
|
||||
};
|
||||
|
||||
enum class ResourceLimitCategory : int {
|
||||
Application = 0,
|
||||
SystemApplet = 1,
|
||||
LibraryApplet = 2,
|
||||
Misc = 3
|
||||
};
|
||||
enum class ResourceLimitCategory : int { Application = 0, SystemApplet = 1, LibraryApplet = 2, Misc = 3 };
|
||||
|
||||
// Reset types (for use with events and timers)
|
||||
enum class ResetType {
|
||||
|
@ -26,13 +35,7 @@ enum class ResetType {
|
|||
Pulse = 2, // Only meaningful for timers: same as ONESHOT but it will periodically signal the timer instead of just once.
|
||||
};
|
||||
|
||||
enum class ArbitrationType {
|
||||
Signal = 0,
|
||||
WaitIfLess = 1,
|
||||
DecrementAndWaitIfLess = 2,
|
||||
WaitIfLessTimeout = 3,
|
||||
DecrementAndWaitIfLessTimeout = 4
|
||||
};
|
||||
enum class ArbitrationType { Signal = 0, WaitIfLess = 1, DecrementAndWaitIfLess = 2, WaitIfLessTimeout = 3, DecrementAndWaitIfLessTimeout = 4 };
|
||||
|
||||
enum class ProcessorID : s32 {
|
||||
AllCPUs = -1,
|
||||
|
@ -44,12 +47,6 @@ enum class ProcessorID : s32 {
|
|||
New3DSExtra2 = 3
|
||||
};
|
||||
|
||||
enum class FcramRegion {
|
||||
App = 0x100,
|
||||
Sys = 0x200,
|
||||
Base = 0x300
|
||||
};
|
||||
|
||||
struct AddressArbiter {};
|
||||
|
||||
struct ResourceLimits {
|
||||
|
@ -71,7 +68,8 @@ struct Event {
|
|||
// Some events (for now, only the DSP semaphore events) need to execute a callback when signalled
|
||||
// This enum stores what kind of callback they should execute
|
||||
enum class CallbackType : u32 {
|
||||
None, DSPSemaphore,
|
||||
None,
|
||||
DSPSemaphore,
|
||||
};
|
||||
|
||||
u64 waitlist; // A bitfield where each bit symbolizes if the thread with thread with the corresponding index is waiting on the event
|
||||
|
@ -209,8 +207,8 @@ struct MemoryBlock {
|
|||
u32 otherPermission = 0;
|
||||
bool mapped = false;
|
||||
|
||||
MemoryBlock(u32 addr, u32 size, u32 myPerm, u32 otherPerm) : addr(addr), size(size), myPermission(myPerm), otherPermission(otherPerm),
|
||||
mapped(false) {}
|
||||
MemoryBlock(u32 addr, u32 size, u32 myPerm, u32 otherPerm)
|
||||
: addr(addr), size(size), myPermission(myPerm), otherPermission(otherPerm), mapped(false) {}
|
||||
};
|
||||
|
||||
// Generic kernel object class
|
||||
|
@ -232,9 +230,7 @@ struct KernelObject {
|
|||
return static_cast<T*>(data);
|
||||
}
|
||||
|
||||
const char* getTypeName() const {
|
||||
return kernelObjectTypeToString(type);
|
||||
}
|
||||
const char* getTypeName() const { return kernelObjectTypeToString(type); }
|
||||
|
||||
// Retrieves a reference to the waitlist for a specified object
|
||||
// We return a reference because this function is only called in the kernel threading internals
|
||||
|
@ -252,15 +248,7 @@ struct KernelObject {
|
|||
case KernelObjectType::Timer: return getData<Timer>()->waitlist;
|
||||
|
||||
// This should be unreachable once we fully implement sync objects
|
||||
default: [[unlikely]]
|
||||
Helpers::panic("Called GetWaitList on kernel object without a waitlist (Type: %s)", getTypeName());
|
||||
default: [[unlikely]] Helpers::panic("Called GetWaitList on kernel object without a waitlist (Type: %s)", getTypeName());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct FcramBlock {
|
||||
u32 paddr;
|
||||
s32 pages;
|
||||
|
||||
FcramBlock(u32 paddr, s32 pages) : paddr(paddr), pages(pages) {}
|
||||
};
|
|
@ -11,7 +11,7 @@
|
|||
#include "handles.hpp"
|
||||
#include "helpers.hpp"
|
||||
#include "host_memory/host_memory.h"
|
||||
#include "kernel/kernel_types.hpp"
|
||||
#include "kernel/fcram.hpp"
|
||||
#include "loader/3dsx.hpp"
|
||||
#include "loader/ncsd.hpp"
|
||||
#include "result/result.hpp"
|
||||
|
|
|
@ -14,10 +14,10 @@ namespace PICA {
|
|||
|
||||
bool needsSwizzle = false;
|
||||
MTL::TextureSwizzleChannels swizzle{
|
||||
.red = MTL::TextureSwizzleRed,
|
||||
.green = MTL::TextureSwizzleGreen,
|
||||
.blue = MTL::TextureSwizzleBlue,
|
||||
.alpha = MTL::TextureSwizzleAlpha,
|
||||
MTL::TextureSwizzleRed,
|
||||
MTL::TextureSwizzleGreen,
|
||||
MTL::TextureSwizzleBlue,
|
||||
MTL::TextureSwizzleAlpha,
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -130,8 +130,7 @@ namespace PICA {
|
|||
case PrimType::TriangleFan:
|
||||
Helpers::warn("Triangle fans are not supported on Metal, using triangles instead");
|
||||
return MTL::PrimitiveTypeTriangle;
|
||||
case PrimType::GeometryPrimitive:
|
||||
return MTL::PrimitiveTypeTriangle;
|
||||
case PrimType::GeometryPrimitive: return MTL::PrimitiveTypeTriangle;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#include "memory.hpp"
|
||||
|
||||
|
||||
void KFcram::Region::reset(u32 start, size_t size) {
|
||||
this->start = start;
|
||||
pages = size >> 12;
|
||||
|
@ -22,7 +21,7 @@ void KFcram::Region::alloc(std::list<FcramBlock>& out, s32 allocPages, bool line
|
|||
|
||||
// If the current block is bigger than the allocation, split it
|
||||
if (it->pages > allocPages) {
|
||||
Block newBlock(it->pages - allocPages, it->pageOffs + allocPages);
|
||||
Block newBlock(it->pages - allocPages, it->pageOffset + allocPages);
|
||||
it->pages = allocPages;
|
||||
blocks.insert(it, newBlock);
|
||||
}
|
||||
|
@ -32,7 +31,7 @@ void KFcram::Region::alloc(std::list<FcramBlock>& out, s32 allocPages, bool line
|
|||
allocPages -= it->pages;
|
||||
freePages -= it->pages;
|
||||
|
||||
u32 paddr = start + (it->pageOffs << 12);
|
||||
u32 paddr = start + (it->pageOffset << 12);
|
||||
FcramBlock outBlock(paddr, it->pages);
|
||||
out.push_back(outBlock);
|
||||
|
||||
|
|
|
@ -16,24 +16,24 @@ namespace PICA {
|
|||
decodeTexelAI8ToRG8,
|
||||
true,
|
||||
{
|
||||
.red = MTL::TextureSwizzleRed,
|
||||
.green = MTL::TextureSwizzleRed,
|
||||
.blue = MTL::TextureSwizzleRed,
|
||||
.alpha = MTL::TextureSwizzleGreen,
|
||||
MTL::TextureSwizzleRed,
|
||||
MTL::TextureSwizzleRed,
|
||||
MTL::TextureSwizzleRed,
|
||||
MTL::TextureSwizzleGreen,
|
||||
}}, // IA8
|
||||
{MTL::PixelFormatRG8Unorm, 2, decodeTexelGR8ToRG8}, // RG8
|
||||
{MTL::PixelFormatR8Unorm,
|
||||
1,
|
||||
decodeTexelI8ToR8,
|
||||
true,
|
||||
{.red = MTL::TextureSwizzleRed, .green = MTL::TextureSwizzleRed, .blue = MTL::TextureSwizzleRed, .alpha = MTL::TextureSwizzleOne}}, // I8
|
||||
{MTL::TextureSwizzleRed, MTL::TextureSwizzleRed, MTL::TextureSwizzleRed, MTL::TextureSwizzleOne}}, // I8
|
||||
{MTL::PixelFormatA8Unorm, 1, decodeTexelA8ToA8}, // A8
|
||||
{MTL::PixelFormatABGR4Unorm, 2, decodeTexelAI4ToABGR4}, // IA4
|
||||
{MTL::PixelFormatR8Unorm,
|
||||
1,
|
||||
decodeTexelI4ToR8,
|
||||
true,
|
||||
{.red = MTL::TextureSwizzleRed, .green = MTL::TextureSwizzleRed, .blue = MTL::TextureSwizzleRed, .alpha = MTL::TextureSwizzleOne}}, // I4
|
||||
{MTL::TextureSwizzleRed, MTL::TextureSwizzleRed, MTL::TextureSwizzleRed, MTL::TextureSwizzleOne}}, // I4
|
||||
{MTL::PixelFormatA8Unorm, 1, decodeTexelA4ToA8}, // A4
|
||||
{MTL::PixelFormatRGBA8Unorm, 4, decodeTexelETC1ToRGBA8}, // ETC1
|
||||
{MTL::PixelFormatRGBA8Unorm, 4, decodeTexelETC1A4ToRGBA8}, // ETC1A4
|
||||
|
@ -57,10 +57,10 @@ namespace PICA {
|
|||
decodeTexelAI4ToRG8,
|
||||
true,
|
||||
{
|
||||
.red = MTL::TextureSwizzleRed,
|
||||
.green = MTL::TextureSwizzleRed,
|
||||
.blue = MTL::TextureSwizzleRed,
|
||||
.alpha = MTL::TextureSwizzleGreen,
|
||||
MTL::TextureSwizzleRed,
|
||||
MTL::TextureSwizzleRed,
|
||||
MTL::TextureSwizzleRed,
|
||||
MTL::TextureSwizzleGreen,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue