mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-08 07:05:40 +12:00
metal: check for format support
This commit is contained in:
parent
3a654b3609
commit
2111c94f1e
3 changed files with 16 additions and 3 deletions
|
@ -16,6 +16,7 @@ void decodeTexelAI8ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> i
|
||||||
void decodeTexelGR8ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
void decodeTexelGR8ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
||||||
void decodeTexelI8ToR8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
void decodeTexelI8ToR8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
||||||
void decodeTexelA8ToA8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
void decodeTexelA8ToA8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
||||||
|
void decodeTexelAI4ToABGR4(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
||||||
void decodeTexelAI4ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
void decodeTexelAI4ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
||||||
void decodeTexelI4ToR8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
void decodeTexelI4ToR8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
||||||
void decodeTexelA4ToA8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
void decodeTexelA4ToA8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData);
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace PICA {
|
||||||
{MTL::PixelFormatRG8Unorm, 2, decodeTexelGR8ToRG8}, // RG8
|
{MTL::PixelFormatRG8Unorm, 2, decodeTexelGR8ToRG8}, // RG8
|
||||||
{MTL::PixelFormatR8Unorm, 1, decodeTexelI8ToR8}, // I8
|
{MTL::PixelFormatR8Unorm, 1, decodeTexelI8ToR8}, // I8
|
||||||
{MTL::PixelFormatA8Unorm, 1, decodeTexelA8ToA8}, // A8
|
{MTL::PixelFormatA8Unorm, 1, decodeTexelA8ToA8}, // A8
|
||||||
{MTL::PixelFormatRG8Unorm, 2, decodeTexelAI4ToRG8}, // IA4
|
{MTL::PixelFormatABGR4Unorm, 2, decodeTexelAI4ToABGR4}, // IA4
|
||||||
{MTL::PixelFormatR8Unorm, 1, decodeTexelI4ToR8}, // I4
|
{MTL::PixelFormatR8Unorm, 1, decodeTexelI4ToR8}, // I4
|
||||||
{MTL::PixelFormatA8Unorm, 1, decodeTexelA4ToA8}, // A4
|
{MTL::PixelFormatA8Unorm, 1, decodeTexelA4ToA8}, // A4
|
||||||
{MTL::PixelFormatRGBA8Unorm, 4, decodeTexelETC1ToRGBA8}, // ETC1
|
{MTL::PixelFormatRGBA8Unorm, 4, decodeTexelETC1ToRGBA8}, // ETC1
|
||||||
|
@ -25,8 +25,10 @@ namespace PICA {
|
||||||
|
|
||||||
void checkForPixelFormatSupport(MTL::Device* device) {
|
void checkForPixelFormatSupport(MTL::Device* device) {
|
||||||
if (!device->supportsFamily(MTL::GPUFamilyApple1)) {
|
if (!device->supportsFamily(MTL::GPUFamilyApple1)) {
|
||||||
// TODO
|
pixelFormatInfos[2] = {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelA1BGR5ToRGBA8};
|
||||||
throw;
|
pixelFormatInfos[3] = {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelB5G6R5ToRGBA8};
|
||||||
|
pixelFormatInfos[4] = {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelABGR4ToRGBA8};
|
||||||
|
pixelFormatInfos[9] = {MTL::PixelFormatRG8Unorm, 2, decodeTexelAI4ToRG8};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -176,6 +176,16 @@ void decodeTexelA8ToA8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inD
|
||||||
outData.push_back(alpha);
|
outData.push_back(alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void decodeTexelAI4ToABGR4(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData) {
|
||||||
|
const u32 offset = getSwizzledOffset(u, v, size.u(), 1);
|
||||||
|
const u8 texel = inData[offset];
|
||||||
|
const u8 alpha = texel & 0xf;
|
||||||
|
const u8 intensity = texel >> 4;
|
||||||
|
|
||||||
|
outData.push_back((intensity << 4) | intensity);
|
||||||
|
outData.push_back((alpha << 4) | intensity);
|
||||||
|
}
|
||||||
|
|
||||||
void decodeTexelAI4ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData) {
|
void decodeTexelAI4ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span<const u8> inData, std::vector<u8>& outData) {
|
||||||
const u32 offset = getSwizzledOffset(u, v, size.u(), 1);
|
const u32 offset = getSwizzledOffset(u, v, size.u(), 1);
|
||||||
const u8 texel = inData[offset];
|
const u8 texel = inData[offset];
|
||||||
|
|
Loading…
Add table
Reference in a new issue