|
|
@@ -631,15 +631,7 @@ namespace bgfx
|
|
|
|
|
|
struct ConvertOp
|
|
|
{
|
|
|
- enum Enum
|
|
|
- {
|
|
|
- Set,
|
|
|
- Copy,
|
|
|
- Convert,
|
|
|
- };
|
|
|
-
|
|
|
Attrib::Enum attr;
|
|
|
- Enum op;
|
|
|
uint32_t src;
|
|
|
uint32_t dest;
|
|
|
uint32_t size;
|
|
|
@@ -648,6 +640,12 @@ namespace bgfx
|
|
|
ConvertOp convertOp[Attrib::Count];
|
|
|
uint32_t numOps = 0;
|
|
|
|
|
|
+ const uint8_t* src = (const uint8_t*)_srcData;
|
|
|
+ uint32_t srcStride = _srcLayout.getStride();
|
|
|
+
|
|
|
+ uint8_t* dest = (uint8_t*)_destData;
|
|
|
+ uint32_t destStride = _destLayout.getStride();
|
|
|
+
|
|
|
for (uint32_t ii = 0; ii < Attrib::Count; ++ii)
|
|
|
{
|
|
|
Attrib::Enum attr = (Attrib::Enum)ii;
|
|
|
@@ -668,25 +666,25 @@ namespace bgfx
|
|
|
if (_srcLayout.has(attr) )
|
|
|
{
|
|
|
cop.src = _srcLayout.getOffset(attr);
|
|
|
- cop.op = _destLayout.m_attributes[attr] == _srcLayout.m_attributes[attr] ? ConvertOp::Copy : ConvertOp::Convert;
|
|
|
+
|
|
|
+ if (_destLayout.m_attributes[attr] == _srcLayout.m_attributes[attr])
|
|
|
+ {
|
|
|
+ bx::memCopy(dest + cop.dest, destStride, src + cop.src, srcStride, cop.size, _num);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ++numOps;
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- cop.op = ConvertOp::Set;
|
|
|
+ bx::memSet(dest + cop.dest, destStride, 0, cop.size, _num);
|
|
|
}
|
|
|
-
|
|
|
- ++numOps;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (0 < numOps)
|
|
|
{
|
|
|
- const uint8_t* src = (const uint8_t*)_srcData;
|
|
|
- uint32_t srcStride = _srcLayout.getStride();
|
|
|
-
|
|
|
- uint8_t* dest = (uint8_t*)_destData;
|
|
|
- uint32_t destStride = _destLayout.getStride();
|
|
|
-
|
|
|
float unpacked[4];
|
|
|
|
|
|
for (uint32_t ii = 0; ii < _num; ++ii)
|
|
|
@@ -694,25 +692,11 @@ namespace bgfx
|
|
|
for (uint32_t jj = 0; jj < numOps; ++jj)
|
|
|
{
|
|
|
const ConvertOp& cop = convertOp[jj];
|
|
|
-
|
|
|
- switch (cop.op)
|
|
|
- {
|
|
|
- case ConvertOp::Set:
|
|
|
- bx::memSet(dest + cop.dest, 0, cop.size);
|
|
|
- break;
|
|
|
-
|
|
|
- case ConvertOp::Copy:
|
|
|
- bx::memCopy(dest + cop.dest, src + cop.src, cop.size);
|
|
|
- break;
|
|
|
-
|
|
|
- case ConvertOp::Convert:
|
|
|
- vertexUnpack(unpacked, cop.attr, _srcLayout, src);
|
|
|
- vertexPack(unpacked, true, cop.attr, _destLayout, dest);
|
|
|
- break;
|
|
|
- }
|
|
|
+ vertexUnpack(unpacked, cop.attr, _srcLayout, src);
|
|
|
+ vertexPack(unpacked, true, cop.attr, _destLayout, dest);
|
|
|
}
|
|
|
|
|
|
- src += srcStride;
|
|
|
+ src += srcStride;
|
|
|
dest += destStride;
|
|
|
}
|
|
|
}
|