sead
Loading...
Searching...
No Matches
aglUniformBlock.h
Go to the documentation of this file.
1#pragma once
2
3#include <common/aglShaderLocation.h>
4#include <heap/seadHeap.h>
5#include <math/seadVector.h>
6
7namespace agl {
8
10{
11 struct Member
12 {
16 };
17 static_assert(sizeof(Member) == 6, "agl::UniformBlock::Member size mismatch");
18
25 static_assert(sizeof(Header) == 8, "agl::UniformBlock::Header size mismatch");
26
27public:
28 static const u32 cUniformBlockAlignment = 0x100;
29 static const u32 cCPUCacheLineSize = 0x20;
30
31public:
32 enum Type
33 {
40
41 // "not implemented yet."
42 //cType_ = 6,
43 //cType_ = 7,
44 //cType_ = 8,
45 //cType_ = 9,
46 //cType_ = 10,
47 //cType_ = 11,
48
49 //cType_ = 12, // mat4?
50 //cType_ = 13, // ^^
51 //cType_ = 14, // ^^
52
54 };
55
56public:
58 virtual ~UniformBlock();
59
60 void startDeclare(s32 num, sead::Heap* heap);
61 void declare(Type type, s32 num);
62 void declare(const UniformBlock& block);
63 void create(sead::Heap* heap);
64 void destroy();
65 void dcbz() const;
66 void flush(void* p_memory, bool invalidate_gpu) const;
67 void flush(bool invalidate_gpu) const { flush(mCurrentBuffer, invalidate_gpu); }
68 void flushNoSync(void* p_memory, bool invalidate_gpu) const;
69 void flushNoSync(bool invalidate_gpu) const { flushNoSync(mCurrentBuffer, invalidate_gpu); }
70
71 bool setUniform(const void* p_data, const UniformBlockLocation& location, u32 offset, size_t size) const;
72 bool setUniform(const UniformBlockLocation& location) const;
73
74 void setBool(void* p_memory, s32 index, bool data, s32 array_index = 0) const;
75 void setBool(s32 index, bool data, s32 array_index = 0) const;
76 void setBool(void* p_memory, s32 index, const bool* p_data, s32 array_num, s32 array_index = 0) const;
77 void setBool(s32 index, const bool* p_data, s32 array_num, s32 array_index = 0) const;
78
79 void setInt(void* p_memory, s32 index, s32 data, s32 array_index = 0) const;
80 void setInt(s32 index, s32 data, s32 array_index = 0) const;
81 void setInt(void* p_memory, s32 index, const s32* p_data, s32 array_num, s32 array_index = 0) const;
82 void setInt(s32 index, const s32* p_data, s32 array_num, s32 array_index = 0) const;
83
84 void setFloat(void* p_memory, s32 index, f32 data, s32 array_index = 0) const;
85 void setFloat(s32 index, f32 data, s32 array_index = 0) const;
86 void setFloat(void* p_memory, s32 index, const f32* p_data, s32 array_num, s32 array_index = 0) const;
87 void setFloat(s32 index, const f32* p_data, s32 array_num, s32 array_index = 0) const;
88
89 void setVector2f(void* p_memory, s32 index, const sead::Vector2f& data, s32 array_index = 0) const;
90 void setVector2f(s32 index, const sead::Vector2f& data, s32 array_index = 0) const;
91 void setVector2f(void* p_memory, s32 index, const sead::Vector2f* p_data, s32 array_num, s32 array_index = 0) const;
92 void setVector2f(s32 index, const sead::Vector2f* p_data, s32 array_num, s32 array_index = 0) const;
93
94 void setVector3f(void* p_memory, s32 index, const sead::Vector3f& data, s32 array_index = 0) const;
95 void setVector3f(s32 index, const sead::Vector3f& data, s32 array_index = 0) const;
96 void setVector3f(void* p_memory, s32 index, const sead::Vector3f* p_data, s32 array_num, s32 array_index = 0) const;
97 void setVector3f(s32 index, const sead::Vector3f* p_data, s32 array_num, s32 array_index = 0) const;
98
99 void setVector4f(void* p_memory, s32 index, const sead::Vector4f& data, s32 array_index = 0) const;
100 void setVector4f(s32 index, const sead::Vector4f& data, s32 array_index = 0) const;
101 void setVector4f(void* p_memory, s32 index, const sead::Vector4f* p_data, s32 array_num, s32 array_index = 0) const;
102 void setVector4f(s32 index, const sead::Vector4f* p_data, s32 array_num, s32 array_index = 0) const;
103
104private:
105 void setData_(void* p_memory, s32 index, const void* p_data, s32 array_index, s32 array_num) const;
106
107private:
108 enum Flags
109 {
112 };
113
118};
119static_assert(sizeof(UniformBlock) == 0x14, "agl::UniformBlock size mismatch");
120
121}
122
123#ifdef __cplusplus
124
125#include <common/aglUniformBlock.hpp>
126
127#endif // __cplusplus
Definition aglShaderLocation.h:97
Definition aglUniformBlock.h:10
void setInt(void *p_memory, s32 index, s32 data, s32 array_index=0) const
Definition aglUniformBlock.hpp:34
void startDeclare(s32 num, sead::Heap *heap)
Definition aglUniformBlock.cpp:46
void setVector3f(void *p_memory, s32 index, const sead::Vector3f &data, s32 array_index=0) const
Definition aglUniformBlock.hpp:94
void setBool(s32 index, const bool *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:28
void setVector4f(s32 index, const sead::Vector4f *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:129
void setInt(s32 index, s32 data, s32 array_index=0) const
Definition aglUniformBlock.hpp:39
u8 * mCurrentBuffer
Definition aglUniformBlock.h:115
void setInt(s32 index, const s32 *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:49
void create(sead::Heap *heap)
Definition aglUniformBlock.cpp:100
void declare(Type type, s32 num)
Definition aglUniformBlock.cpp:61
void setFloat(void *p_memory, s32 index, const f32 *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:64
void flushNoSync(void *p_memory, bool invalidate_gpu) const
Definition aglUniformBlock.cpp:160
void setVector4f(void *p_memory, s32 index, const sead::Vector4f &data, s32 array_index=0) const
Definition aglUniformBlock.hpp:114
void setVector3f(s32 index, const sead::Vector3f *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:109
void flush(bool invalidate_gpu) const
Definition aglUniformBlock.h:67
sead::BitFlag8 mFlag
Definition aglUniformBlock.h:117
void setFloat(void *p_memory, s32 index, f32 data, s32 array_index=0) const
Definition aglUniformBlock.hpp:54
void setVector3f(void *p_memory, s32 index, const sead::Vector3f *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:104
void setVector3f(s32 index, const sead::Vector3f &data, s32 array_index=0) const
Definition aglUniformBlock.hpp:99
void setVector2f(s32 index, const sead::Vector2f &data, s32 array_index=0) const
Definition aglUniformBlock.hpp:79
void setVector2f(void *p_memory, s32 index, const sead::Vector2f *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:84
virtual ~UniformBlock()
Definition aglUniformBlock.cpp:41
Header * mpHeader
Definition aglUniformBlock.h:114
void setFloat(s32 index, const f32 *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:69
void flushNoSync(bool invalidate_gpu) const
Definition aglUniformBlock.h:69
void declare(const UniformBlock &block)
Definition aglUniformBlock.cpp:88
UniformBlock()
Definition aglUniformBlock.cpp:33
bool setUniform(const UniformBlockLocation &location) const
Definition aglUniformBlock.hpp:7
void setInt(void *p_memory, s32 index, const s32 *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:44
void setVector2f(void *p_memory, s32 index, const sead::Vector2f &data, s32 array_index=0) const
Definition aglUniformBlock.hpp:74
void setBool(s32 index, bool data, s32 array_index=0) const
Definition aglUniformBlock.hpp:17
void flush(void *p_memory, bool invalidate_gpu) const
Definition aglUniformBlock.cpp:151
static const u32 cUniformBlockAlignment
Definition aglUniformBlock.h:28
void setBool(void *p_memory, s32 index, bool data, s32 array_index=0) const
Definition aglUniformBlock.hpp:12
static const u32 cCPUCacheLineSize
Definition aglUniformBlock.h:29
void destroy()
Definition aglUniformBlock.cpp:111
void setBool(void *p_memory, s32 index, const bool *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:22
void setFloat(s32 index, f32 data, s32 array_index=0) const
Definition aglUniformBlock.hpp:59
Type
Definition aglUniformBlock.h:33
@ cType_int
Definition aglUniformBlock.h:35
@ cType_vec3
Definition aglUniformBlock.h:38
@ cType_vec2
Definition aglUniformBlock.h:37
@ cType_bool
Definition aglUniformBlock.h:34
@ cType_vec4
Definition aglUniformBlock.h:39
@ cType_float
Definition aglUniformBlock.h:36
@ cType_Num
Definition aglUniformBlock.h:53
bool setUniform(const void *p_data, const UniformBlockLocation &location, u32 offset, size_t size) const
Definition aglUniformBlock.cpp:169
void setVector4f(void *p_memory, s32 index, const sead::Vector4f *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:124
void dcbz() const
Definition aglUniformBlock.cpp:135
void setVector2f(s32 index, const sead::Vector2f *p_data, s32 array_num, s32 array_index=0) const
Definition aglUniformBlock.hpp:89
void setData_(void *p_memory, s32 index, const void *p_data, s32 array_index, s32 array_num) const
Definition aglUniformBlock.cpp:192
u32 mBlockSize
Definition aglUniformBlock.h:116
Flags
Definition aglUniformBlock.h:109
@ cFlag_OwnHeader
Definition aglUniformBlock.h:110
@ cFlag_OwnBuffer
Definition aglUniformBlock.h:111
void setVector4f(s32 index, const sead::Vector4f &data, s32 array_index=0) const
Definition aglUniformBlock.hpp:119
Definition seadHeap.h:23
Definition aglDisplayList.cpp:5
Definition seadAssert.h:44
Vector2< f32 > Vector2f
Definition seadVector.h:238
Vector3< f32 > Vector3f
Definition seadVector.h:239
Vector4< f32 > Vector4f
Definition seadVector.h:240
BitFlag< u8 > BitFlag8
Definition seadBitFlag.h:123
Definition aglUniformBlock.h:20
u16 mMemberCount
Definition aglUniformBlock.h:23
u16 mMemberNum
Definition aglUniformBlock.h:22
Member * mpMember
Definition aglUniformBlock.h:21
Definition aglUniformBlock.h:12
u16 mOffset
Definition aglUniformBlock.h:15
u16 mNum
Definition aglUniformBlock.h:14
u8 mType
Definition aglUniformBlock.h:13