Fixed blit with view remapping.

This commit is contained in:
Branimir Karadžić 2016-11-20 14:29:37 -08:00
parent 2f2287aa34
commit 706facc788
6 changed files with 25 additions and 11 deletions

View File

@ -831,6 +831,11 @@ namespace bgfx
return true; // compute
}
static uint8_t decodeView(uint64_t _key)
{
return uint8_t( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT);
}
static uint64_t remapView(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS])
{
const uint8_t oldView = uint8_t( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT);

View File

@ -5314,7 +5314,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
int32_t numItems = _render->m_num;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
{
const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap);
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
statsKeyType[isCompute]++;
const bool viewChanged = 0
@ -5428,7 +5429,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
prim = s_primInfo[BX_COUNTOF(s_primName)]; // Force primitive type update after clear quad.
}
for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++)
const uint8_t blitView = SortKey::decodeView(encodedKey);
for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
{
const BlitItem& blit = _render->m_blitItem[blitItem];
blitKey.decode(_render->m_blitKeys[blitItem+1]);

View File

@ -4849,7 +4849,8 @@ data.NumQualityLevels = 0;
int32_t numItems = _render->m_num;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
{
const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap);
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
statsKeyType[isCompute]++;
const bool viewChanged = 0
@ -4907,7 +4908,8 @@ data.NumQualityLevels = 0;
prim = s_primInfo[BX_COUNTOF(s_primName)]; // Force primitive type update.
for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++)
const uint8_t blitView = SortKey::decodeView(encodedKey);
for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
{
const BlitItem& blit = _render->m_blitItem[blitItem];
blitKey.decode(_render->m_blitKeys[blitItem+1]);

View File

@ -3636,7 +3636,8 @@ namespace bgfx { namespace d3d9
{
for (uint32_t item = 0, numItems = _render->m_num; item < numItems; ++item)
{
const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap);
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
statsKeyType[isCompute]++;
if (isCompute)
@ -3718,7 +3719,8 @@ namespace bgfx { namespace d3d9
DX_CHECK(device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE) );
DX_CHECK(device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER) );
for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++)
const uint8_t blitView = SortKey::decodeView(encodedKey);
for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
{
const BlitItem& blit = _render->m_blitItem[blitItem];
blitKey.decode(_render->m_blitKeys[blitItem+1]);

View File

@ -6259,7 +6259,8 @@ namespace bgfx { namespace gl
int32_t numItems = _render->m_num;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
{
const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap);
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
statsKeyType[isCompute]++;
const bool viewChanged = 0
@ -6379,7 +6380,8 @@ namespace bgfx { namespace gl
if (m_blitSupported)
{
for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++)
const uint8_t blitView = SortKey::decodeView(encodedKey);
for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
{
const BlitItem& bi = _render->m_blitItem[blitItem];
blitKey.decode(_render->m_blitKeys[blitItem + 1]);

View File

@ -2996,7 +2996,8 @@ namespace bgfx { namespace mtl
int32_t numItems = _render->m_num;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
{
const bool isCompute = key.decode(_render->m_sortKeys[item], _render->m_viewRemap);
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
statsKeyType[isCompute]++;
const bool viewChanged = 0
@ -3047,8 +3048,8 @@ namespace bgfx { namespace mtl
viewState.m_rect.m_width /= 2;
}
for (; blitItem < numBlitItems && blitKey.m_view <= view; blitItem++)
const uint8_t blitView = SortKey::decodeView(encodedKey);
for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
{
if (0 != m_renderCommandEncoder)
{