Skip to content

Commit 4b4097c

Browse files
author
tuxalin
committed
-added more utility functions for the command buffer and key
1 parent 0492d5c commit 4b4097c

File tree

2 files changed

+50
-9
lines changed

2 files changed

+50
-9
lines changed

CommandBuffer.h

+30-8
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ namespace cb
6969
}
7070

7171
template<typename T>
72-
explicit operator T()
72+
explicit operator T()
7373
{
7474
return(T)key;
7575
}
@@ -118,6 +118,8 @@ namespace cb
118118
template <class CommandClass, typename AuxilaryData>
119119
CommandClass* addCommandData(const key_t& key, const AuxilaryData& data);
120120
template <class CommandClass, typename AuxilaryData>
121+
CommandClass* addCommandData(const key_t& key, const std::vector<AuxilaryData>& data);
122+
template <class CommandClass, typename AuxilaryData>
121123
CommandClass* addCommandData(const key_t& key, const AuxilaryData* data, uint32_t count);
122124
/// Adds the given command packet with the given key.
123125
///@note Only references the original packet's auxiliary data.
@@ -136,6 +138,8 @@ namespace cb
136138
template <class CommandClass, class AppendCommandClass, typename AuxilaryData>
137139
CommandClass* appendCommandData(AppendCommandClass* cmd, const AuxilaryData& data);
138140
template <class CommandClass, class AppendCommandClass, typename AuxilaryData>
141+
CommandClass* appendCommandData(AppendCommandClass* prevCmd, const std::vector<AuxilaryData>& data);
142+
template <class CommandClass, class AppendCommandClass, typename AuxilaryData>
139143
CommandClass* appendCommandData(AppendCommandClass* prevCmd, const AuxilaryData* data, uint32_t count);
140144
template <class CommandClass, typename AuxilaryData>
141145
CommandClass* appendCommandData(cb::CommandPacket* cmd, const AuxilaryData& data);
@@ -320,10 +324,19 @@ namespace cb
320324
return addCommandData<CommandClass>(key, &data, 1);
321325
}
322326

327+
COMMAND_TEMPLATE
328+
template <class CommandClass, typename AuxilaryData>
329+
CommandClass* COMMAND_QUAL::addCommandData(const key_t& key, const std::vector<AuxilaryData>& data)
330+
{
331+
return addCommandData<CommandClass>(key, data.data(), data.size());
332+
}
333+
323334
COMMAND_TEMPLATE
324335
template <class CommandClass, typename AuxilaryData>
325336
CommandClass* COMMAND_QUAL::addCommandData(const key_t& key, const AuxilaryData* data, uint32_t count)
326337
{
338+
static_assert(cb::detail::is_pod<AuxilaryData>::value, "AUXILARY_DATA_INVALID_TYPE");
339+
327340
const uint32_t size = sizeof(AuxilaryData) * count;
328341
CommandClass* cmd = addCommand<CommandClass>(key, size);
329342

@@ -395,10 +408,19 @@ namespace cb
395408
return appendCommandData<CommandClass>(prevCmd, &data, 1);
396409
}
397410

411+
COMMAND_TEMPLATE
412+
template <class CommandClass, class AppendCommandClass, typename AuxilaryData>
413+
CommandClass* COMMAND_QUAL::appendCommandData(AppendCommandClass* prevCmd, const std::vector<AuxilaryData>& data)
414+
{
415+
return appendCommandData<CommandClass>(prevCmd, data.data(), data.size());
416+
}
417+
398418
COMMAND_TEMPLATE
399419
template <class CommandClass, class AppendCommandClass, typename AuxilaryData>
400420
CommandClass* COMMAND_QUAL::appendCommandData(AppendCommandClass* prevCmd, const AuxilaryData* data, uint32_t count)
401421
{
422+
static_assert(cb::detail::is_pod<AuxilaryData>::value, "AUXILARY_DATA_INVALID_TYPE");
423+
402424
const uint32_t size = sizeof(AuxilaryData) * count;
403425
CommandClass* cmd = appendCommand<CommandClass>(prevCmd, size);
404426

@@ -449,14 +471,14 @@ namespace cb
449471
cmd->size = sizeof(AuxilaryData);
450472
return packet;
451473
}
452-
453-
COMMAND_TEMPLATE
454-
void COMMAND_QUAL::sort(sort_func_t sortFunc /*= std::sort<CommandPair*>*/)
455-
{
474+
475+
COMMAND_TEMPLATE
476+
void COMMAND_QUAL::sort(sort_func_t sortFunc /*= std::sort<CommandPair*>*/)
477+
{
456478
sortFunc(m_commands.data(), m_commands.data() + (int)m_currentIndex.load(std::memory_order_acquire));
457-
458-
assert(m_commands.size() > m_currentIndex.load(std::memory_order_acquire));
459-
}
479+
480+
assert(m_commands.size() > m_currentIndex.load(std::memory_order_acquire));
481+
}
460482

461483
COMMAND_TEMPLATE
462484
void COMMAND_QUAL::clear()

CommandKeys.h

+20-1
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,11 @@ namespace cb
137137

138138
explicit operator uint64_t();
139139

140-
///@note The priority is inversed, i.e. lower values have highest priority.
140+
static DrawKey makeDefault(cb::ViewLayerType viewLayer);
141141
static DrawKey makeDefault(uint32_t viewportId, cb::ViewLayerType viewLayer = ViewLayerType::e3D);
142+
///@note The priority is inversed, i.e. lower values have highest priority.
142143
static DrawKey makeCustom(cb::ViewLayerType viewLayer, uint32_t priority);
144+
static DrawKey makeCustom(uint32_t viewportId, cb::ViewLayerType viewLayer, uint32_t priority);
143145

144146
static void sanityChecks();
145147
}; // struct DrawKey
@@ -235,6 +237,13 @@ namespace cb
235237
return value > other.value;
236238
}
237239

240+
inline DrawKey DrawKey::makeDefault(cb::ViewLayerType viewLayer)
241+
{
242+
DrawKey key(0);
243+
key.viewLayer = static_cast<uint32_t>(viewLayer);
244+
return key;
245+
}
246+
238247
inline DrawKey DrawKey::makeDefault(uint32_t viewportId, cb::ViewLayerType viewLayer)
239248
{
240249
DrawKey key(0);
@@ -251,6 +260,16 @@ namespace cb
251260
return key;
252261
}
253262

263+
inline DrawKey DrawKey::makeCustom(uint32_t viewportId, cb::ViewLayerType viewLayer, uint32_t priority)
264+
{
265+
DrawKey key(0);
266+
key.viewportId = viewportId;
267+
key.viewLayer = static_cast<uint32_t>(viewLayer);
268+
key.custom.enabled = true;
269+
key.custom.priority = (2 << kPriorityBits) - 1 - priority;
270+
return key;
271+
}
272+
254273
inline void DrawKey::sanityChecks()
255274
{
256275
// sanity checks for little-endian platforms

0 commit comments

Comments
 (0)