This commit is contained in:
Бранимир Караџић
2019-02-04 12:56:59 -08:00
parent 457f0700f6
commit 7b92fc0afd
3 changed files with 8 additions and 22 deletions

View File

@@ -537,21 +537,10 @@ namespace bx
return result; return result;
} }
inline BX_CONSTEXPR_FUNC uint32_t strideAlign16(uint32_t _offset, uint32_t _stride) template<uint32_t Min>
inline BX_CONSTEXPR_FUNC uint32_t strideAlign(uint32_t _offset, uint32_t _stride)
{ {
const uint32_t align = uint32_lcm(16, _stride); const uint32_t align = uint32_lcm(Min, _stride);
const uint32_t mod = uint32_mod(_offset, align);
const uint32_t mask = uint32_cmpeq(mod, 0);
const uint32_t tmp0 = uint32_selb(mask, 0, align);
const uint32_t tmp1 = uint32_add(_offset, tmp0);
const uint32_t result = uint32_sub(tmp1, mod);
return result;
}
inline BX_CONSTEXPR_FUNC uint32_t strideAlign256(uint32_t _offset, uint32_t _stride)
{
const uint32_t align = uint32_lcm(256, _stride);
const uint32_t mod = uint32_mod(_offset, align); const uint32_t mod = uint32_mod(_offset, align);
const uint32_t mask = uint32_cmpeq(mod, 0); const uint32_t mask = uint32_cmpeq(mod, 0);
const uint32_t tmp0 = uint32_selb(mask, 0, align); const uint32_t tmp0 = uint32_selb(mask, 0, align);

View File

@@ -217,13 +217,10 @@ namespace bx
/// ///
BX_CONSTEXPR_FUNC uint32_t strideAlign(uint32_t _offset, uint32_t _stride); BX_CONSTEXPR_FUNC uint32_t strideAlign(uint32_t _offset, uint32_t _stride);
/// Align to arbitrary stride and 16-bytes. /// Align to arbitrary stride and Min bytes.
/// ///
BX_CONSTEXPR_FUNC uint32_t strideAlign16(uint32_t _offset, uint32_t _stride); template<uint32_t Min>
BX_CONSTEXPR_FUNC uint32_t strideAlign(uint32_t _offset, uint32_t _stride);
/// Align to arbitrary stride and 256-bytes.
///
BX_CONSTEXPR_FUNC uint32_t strideAlign256(uint32_t _offset, uint32_t _stride);
/// Convert float to half-float. /// Convert float to half-float.
/// ///

View File

@@ -14,10 +14,10 @@ TEST_CASE("StrideAlign")
REQUIRE(12 == bx::strideAlign(ii+1, 12) ); REQUIRE(12 == bx::strideAlign(ii+1, 12) );
} }
REQUIRE(0 == bx::strideAlign16(0, 12) ); REQUIRE(0 == bx::strideAlign<16>(0, 12) );
for (uint32_t ii = 0; ii < 12; ++ii) for (uint32_t ii = 0; ii < 12; ++ii)
{ {
REQUIRE(48 == bx::strideAlign16(ii+1, 12) ); REQUIRE(48 == bx::strideAlign<16>(ii+1, 12) );
} }
uint32_t offset = 11; uint32_t offset = 11;