| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- using Ryujinx.Common;
- using static Ryujinx.Graphics.Texture.BlockLinearConstants;
- namespace Ryujinx.Graphics.Texture
- {
- public class OffsetCalculator
- {
- private int _stride;
- private bool _isLinear;
- private int _bytesPerPixel;
- private BlockLinearLayout _layoutConverter;
- public OffsetCalculator(
- int width,
- int height,
- int stride,
- bool isLinear,
- int gobBlocksInY,
- int bytesPerPixel)
- {
- _stride = stride;
- _isLinear = isLinear;
- _bytesPerPixel = bytesPerPixel;
- int wAlignment = GobStride / bytesPerPixel;
- int wAligned = BitUtils.AlignUp(width, wAlignment);
- if (!isLinear)
- {
- _layoutConverter = new BlockLinearLayout(
- wAligned,
- height,
- 1,
- gobBlocksInY,
- 1,
- bytesPerPixel);
- }
- }
- public int GetOffset(int x, int y)
- {
- if (_isLinear)
- {
- return x * _bytesPerPixel + y * _stride;
- }
- else
- {
- return _layoutConverter.GetOffset(x, y, 0);
- }
- }
- }
- }
|