Haio
0.2.X
Homebrew Asset IO/CDN
Toggle main menu visibility
Loading...
Searching...
No Matches
gpu.cpp
Go to the documentation of this file.
1
#include <
haio_util.hpp
>
2
3
namespace
Haio::Util::GPU
{
4
5
Result<size_t>
payloadSize
(
Color
color,
Size
size) {
6
if
(size.
width
<= 0 || size.
height
<= 0) {
7
return
std::unexpected(
Error
{
ErrorCode::InvalidInput
,
"gpu container requires positive dimensions"
});
8
}
9
10
const
auto
pixels =
static_cast<
size_t
>
(size.
width
) *
static_cast<
size_t
>
(size.
height
);
11
switch
(color) {
12
case
Color::ETC1
:
return
etc1Size
(size);
13
case
Color::RGB565
:
return
pixels * 2;
14
case
Color::RGBA8888
:
return
pixels * 4;
15
default
:
break
;
16
}
17
return
std::unexpected(
Error
{
ErrorCode::UnsupportedFormat
,
"unsupported gpu payload colour"
});
18
}
19
20
Result<Profile>
profileFor
(
Color
color,
Size
size) {
21
HAIO_TRY
(bytes,
payloadSize
(color, size));
22
switch
(color) {
23
case
Color::ETC1
:
24
return
Profile
{0, 0,
GL_ETC1_RGB8_OES
,
GL_RGB
,
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
, 6, bytes};
25
case
Color::RGB565
:
26
return
Profile
{
GL_UNSIGNED_SHORT_5_6_5
,
GL_RGB
,
GL_RGB565
,
GL_RGB
,
VK_FORMAT_R5G6B5_UNORM_PACK16
,
27
pvrRaw
(
'r'
,
'g'
,
'b'
, 0, 5, 6, 5, 0), bytes};
28
default
:
29
return
Profile
{
GL_UNSIGNED_BYTE
,
GL_RGBA
,
GL_RGBA8
,
GL_RGBA
,
VK_FORMAT_R8G8B8A8_UNORM
,
30
pvrRaw
(
'r'
,
'g'
,
'b'
,
'a'
, 8, 8, 8, 8), bytes};
31
}
32
}
33
34
uint32_t
typeSize
(
const
Profile
& profile) {
35
return
profile.
glType
==
GL_UNSIGNED_SHORT_5_6_5
? 2u : 1u;
36
}
37
38
Result<Color>
colorFromGL
(uint32_t glType, uint32_t glFormat, uint32_t glInternal) {
39
if
(glType == 0 && glFormat == 0 && glInternal ==
GL_ETC1_RGB8_OES
)
return
Color::ETC1
;
40
if
(glType ==
GL_UNSIGNED_SHORT_5_6_5
&& glFormat ==
GL_RGB
&& glInternal ==
GL_RGB565
)
return
Color::RGB565
;
41
if
(glType ==
GL_UNSIGNED_BYTE
&& glFormat ==
GL_RGBA
&& glInternal ==
GL_RGBA8
)
return
Color::RGBA8888
;
42
return
std::unexpected(
Error
{
ErrorCode::UnsupportedFormat
,
"unsupported ktx payload colour"
});
43
}
44
45
Result<Color>
colorFromVK
(uint32_t format) {
46
if
(format ==
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
)
return
Color::ETC1
;
47
if
(format ==
VK_FORMAT_R5G6B5_UNORM_PACK16
)
return
Color::RGB565
;
48
if
(format ==
VK_FORMAT_R8G8B8A8_UNORM
)
return
Color::RGBA8888
;
49
return
std::unexpected(
Error
{
ErrorCode::UnsupportedFormat
,
"unsupported ktx2 payload colour"
});
50
}
51
52
Result<Color>
colorFromPVR
(uint64_t format) {
53
if
(format == 6)
return
Color::ETC1
;
54
if
(format ==
pvrRaw
(
'r'
,
'g'
,
'b'
, 0, 5, 6, 5, 0))
return
Color::RGB565
;
55
if
(format ==
pvrRaw
(
'r'
,
'g'
,
'b'
,
'a'
, 8, 8, 8, 8))
return
Color::RGBA8888
;
56
return
std::unexpected(
Error
{
ErrorCode::UnsupportedFormat
,
"unsupported pvr payload colour"
});
57
}
58
59
}
HAIO_TRY
#define HAIO_TRY(name, expr)
Definition
haio_codec.hpp:246
haio_util.hpp
Haio::Util::GPU
Definition
haio_util.hpp:92
Haio::Util::GPU::pvrRaw
constexpr uint64_t pvrRaw(char a, char b, char c, char d, uint8_t ba, uint8_t bb, uint8_t bc, uint8_t bd)
Definition
haio_util.hpp:115
Haio::Util::GPU::profileFor
Result< Profile > profileFor(Color color, Size size)
Definition
gpu.cpp:20
Haio::Util::GPU::GL_RGB565
constexpr uint32_t GL_RGB565
Definition
haio_util.hpp:99
Haio::Util::GPU::colorFromPVR
Result< Color > colorFromPVR(uint64_t format)
Definition
gpu.cpp:52
Haio::Util::GPU::GL_UNSIGNED_BYTE
constexpr uint32_t GL_UNSIGNED_BYTE
Definition
haio_util.hpp:94
Haio::Util::GPU::GL_ETC1_RGB8_OES
constexpr uint32_t GL_ETC1_RGB8_OES
Definition
haio_util.hpp:100
Haio::Util::GPU::colorFromGL
Result< Color > colorFromGL(uint32_t glType, uint32_t glFormat, uint32_t glInternal)
Definition
gpu.cpp:38
Haio::Util::GPU::VK_FORMAT_R5G6B5_UNORM_PACK16
constexpr uint32_t VK_FORMAT_R5G6B5_UNORM_PACK16
Definition
haio_util.hpp:101
Haio::Util::GPU::etc1Size
constexpr size_t etc1Size(Size size)
Definition
haio_util.hpp:122
Haio::Util::GPU::Profile::glType
uint32_t glType
Definition
haio_util.hpp:106
Haio::Util::GPU::typeSize
uint32_t typeSize(const Profile &profile)
Definition
gpu.cpp:34
Haio::Util::GPU::VK_FORMAT_R8G8B8A8_UNORM
constexpr uint32_t VK_FORMAT_R8G8B8A8_UNORM
Definition
haio_util.hpp:102
Haio::Util::GPU::GL_RGB
constexpr uint32_t GL_RGB
Definition
haio_util.hpp:96
Haio::Util::GPU::colorFromVK
Result< Color > colorFromVK(uint32_t format)
Definition
gpu.cpp:45
Haio::Util::GPU::GL_UNSIGNED_SHORT_5_6_5
constexpr uint32_t GL_UNSIGNED_SHORT_5_6_5
Definition
haio_util.hpp:95
Haio::Util::GPU::VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
constexpr uint32_t VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
Definition
haio_util.hpp:103
Haio::Util::GPU::GL_RGBA8
constexpr uint32_t GL_RGBA8
Definition
haio_util.hpp:98
Haio::Util::GPU::payloadSize
Result< size_t > payloadSize(Color color, Size size)
Definition
gpu.cpp:5
Haio::Util::GPU::GL_RGBA
constexpr uint32_t GL_RGBA
Definition
haio_util.hpp:97
Haio::Util::GPU::Profile
Definition
haio_util.hpp:105
Haio::Color
Color
Definition
haio_formats.hpp:106
Haio::Color::RGBA8888
@ RGBA8888
Definition
haio_formats.hpp:107
Haio::Color::RGB565
@ RGB565
Definition
haio_formats.hpp:109
Haio::Color::ETC1
@ ETC1
Definition
haio_formats.hpp:138
Haio::Result
std::expected< T, Error > Result
Definition
haio_codec.hpp:32
Haio::Size::height
int height
Definition
haio_object.hpp:14
Haio::ErrorCode::UnsupportedFormat
@ UnsupportedFormat
Definition
haio_codec.hpp:19
Haio::ErrorCode::InvalidInput
@ InvalidInput
Definition
haio_codec.hpp:18
Haio::Size::width
int width
Definition
haio_object.hpp:13
Haio::Error
Definition
haio_codec.hpp:26
Haio::Size
Definition
haio_object.hpp:12
library
common
utils
gpu.cpp
Generated by
1.18.0