|
@@ -1232,27 +1232,33 @@ namespace bgfx
|
|
|
};
|
|
};
|
|
|
#undef SORT_KEY_RENDER_DRAW
|
|
#undef SORT_KEY_RENDER_DRAW
|
|
|
|
|
|
|
|
|
|
+ constexpr uint8_t kBlitKeyViewShift = 32-kSortKeyViewNumBits;
|
|
|
|
|
+ constexpr uint32_t kBlitKeyViewMask = uint32_t(BGFX_CONFIG_MAX_VIEWS-1)<<kBlitKeyViewShift;
|
|
|
|
|
+ constexpr uint8_t kBlitKeyItemShift = 0;
|
|
|
|
|
+ constexpr uint32_t kBlitKeyItemMask = UINT16_MAX;
|
|
|
|
|
+
|
|
|
struct BlitKey
|
|
struct BlitKey
|
|
|
{
|
|
{
|
|
|
uint32_t encode()
|
|
uint32_t encode()
|
|
|
{
|
|
{
|
|
|
- return 0
|
|
|
|
|
- | (uint32_t(m_view) << 24)
|
|
|
|
|
- | uint32_t(m_item)
|
|
|
|
|
- ;
|
|
|
|
|
|
|
+ const uint32_t view = (uint32_t(m_view) << kBlitKeyViewShift) & kBlitKeyViewMask;
|
|
|
|
|
+ const uint32_t item = (uint32_t(m_item) << kBlitKeyItemShift) & kBlitKeyItemMask;
|
|
|
|
|
+ const uint64_t key = view|item;
|
|
|
|
|
+
|
|
|
|
|
+ return key;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void decode(uint32_t _key)
|
|
void decode(uint32_t _key)
|
|
|
{
|
|
{
|
|
|
- m_item = uint16_t(_key & UINT16_MAX);
|
|
|
|
|
- m_view = ViewId(_key >> 24);
|
|
|
|
|
|
|
+ m_item = uint16_t( (_key & kBlitKeyItemMask) >> kBlitKeyItemShift);
|
|
|
|
|
+ m_view = ViewId( (_key & kBlitKeyViewMask) >> kBlitKeyViewShift);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static uint32_t remapView(uint32_t _key, ViewId _viewRemap[BGFX_CONFIG_MAX_VIEWS])
|
|
static uint32_t remapView(uint32_t _key, ViewId _viewRemap[BGFX_CONFIG_MAX_VIEWS])
|
|
|
{
|
|
{
|
|
|
- const ViewId oldView = ViewId(_key >> 24);
|
|
|
|
|
- const uint32_t view = uint32_t(_viewRemap[oldView]) << 24;
|
|
|
|
|
- const uint32_t key = (_key & ~UINT32_C(0xff000000) ) | view;
|
|
|
|
|
|
|
+ const ViewId oldView = ViewId( (_key & kBlitKeyViewMask) >> kBlitKeyViewShift);
|
|
|
|
|
+ const uint32_t view = uint32_t( (_viewRemap[oldView] << kBlitKeyViewShift) & kBlitKeyViewMask);
|
|
|
|
|
+ const uint32_t key = (_key & ~kBlitKeyViewMask) | view;
|
|
|
return key;
|
|
return key;
|
|
|
}
|
|
}
|
|
|
|
|
|