swr: [rasterizer] Fix run-time check asserts

One innocuous (uninitialized variable), and one not so innocuous
(stack corruption).
This commit is contained in:
Tim Rowley 2016-03-17 12:22:43 -06:00
parent 257db3610a
commit 9111d63228
2 changed files with 7 additions and 8 deletions

View file

@ -243,8 +243,8 @@ void ProcessDiscardInvalidateTiles(
macroTileEndY = (rect.bottom + macroHeight - 1) / macroHeight;
}
SWR_ASSERT(macroTileEndX < KNOB_NUM_HOT_TILES_X);
SWR_ASSERT(macroTileEndY < KNOB_NUM_HOT_TILES_Y);
SWR_ASSERT(macroTileEndX <= KNOB_NUM_HOT_TILES_X);
SWR_ASSERT(macroTileEndY <= KNOB_NUM_HOT_TILES_Y);
macroTileEndX = std::min<uint32_t>(macroTileEndX, KNOB_NUM_HOT_TILES_X);
macroTileEndY = std::min<uint32_t>(macroTileEndY, KNOB_NUM_HOT_TILES_Y);

View file

@ -146,14 +146,13 @@ float calcDeterminantInt(const __m128i vA, const __m128i vB)
//vMul = [A1*B2 - B1*A2]
vMul = _mm_sub_epi64(vMul, vMul2);
// According to emmintrin.h __mm_store1_pd(), address must be 16-byte aligned
OSALIGN(int64_t, 16) result;
_mm_store1_pd((double*)&result, _mm_castsi128_pd(vMul));
int64_t result;
_mm_store_sd((double*)&result, _mm_castsi128_pd(vMul));
double fResult = (double)result;
fResult = fResult * (1.0 / FIXED_POINT16_SCALE);
double dResult = (double)result;
dResult = dResult * (1.0 / FIXED_POINT16_SCALE);
return (float)fResult;
return (float)dResult;
}
INLINE