mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-21 03:55:32 +00:00
d3d12: Use align instead of powerOf2Align
This commit is contained in:
parent
5e33d5535d
commit
1c7bff4d36
5 changed files with 17 additions and 28 deletions
|
@ -18,17 +18,6 @@ void check(HRESULT hr)
|
|||
abort();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get next value that is aligned by the corresponding power of 2
|
||||
*/
|
||||
inline
|
||||
size_t powerOf2Align(size_t unalignedVal, size_t powerOf2)
|
||||
{
|
||||
// check that powerOf2 is power of 2
|
||||
assert(!(powerOf2 & (powerOf2 - 1)));
|
||||
return (unalignedVal + powerOf2 - 1) & ~(powerOf2 - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send data to dst pointer without polluting cache.
|
||||
* Usefull to write to mapped memory from upload heap.
|
||||
|
|
|
@ -365,7 +365,7 @@ std::pair<std::vector<D3D12_VERTEX_BUFFER_VIEW>, D3D12_INDEX_BUFFER_VIEW> D3D12G
|
|||
indexCount = 6 * m_indexed_array.m_data.size() / (4 * indexSize);
|
||||
else
|
||||
indexCount = m_draw_array_count * 6 / 4;
|
||||
size_t subBufferSize = powerOf2Align(indexCount * indexSize, 64);
|
||||
size_t subBufferSize = align(indexCount * indexSize, 64);
|
||||
|
||||
assert(m_vertexIndexData.canAlloc(subBufferSize));
|
||||
size_t heapOffset = m_vertexIndexData.alloc(subBufferSize);
|
||||
|
|
|
@ -1113,11 +1113,11 @@ ID3D12Resource * D3D12GSRender::writeColorBuffer(ID3D12Resource * RTT, ID3D12Gra
|
|||
{
|
||||
case CELL_GCM_SURFACE_A8R8G8B8:
|
||||
dxgiFormat = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
rowPitch = powerOf2Align(w * 4, 256);
|
||||
rowPitch = align(w * 4, 256);
|
||||
break;
|
||||
case CELL_GCM_SURFACE_F_W16Z16Y16X16:
|
||||
dxgiFormat = DXGI_FORMAT_R16G16B16A16_FLOAT;
|
||||
rowPitch = powerOf2Align(w * 8, 256);
|
||||
rowPitch = align(w * 8, 256);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1406,11 +1406,11 @@ void D3D12GSRender::semaphorePGRAPHBackendRelease(u32 offset, u32 value)
|
|||
switch (m_surface_color_format)
|
||||
{
|
||||
case CELL_GCM_SURFACE_A8R8G8B8:
|
||||
srcPitch = powerOf2Align(m_surface_clip_w * 4, 256);
|
||||
srcPitch = align(m_surface_clip_w * 4, 256);
|
||||
dstPitch = m_surface_clip_w * 4;
|
||||
break;
|
||||
case CELL_GCM_SURFACE_F_W16Z16Y16X16:
|
||||
srcPitch = powerOf2Align(m_surface_clip_w * 8, 256);
|
||||
srcPitch = align(m_surface_clip_w * 8, 256);
|
||||
dstPitch = m_surface_clip_w * 8;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -138,7 +138,7 @@ struct DataHeap
|
|||
bool canAlloc(size_t size)
|
||||
{
|
||||
size_t putPos = m_putPos, getPos = m_getPos;
|
||||
size_t allocSize = powerOf2Align(size, Alignment);
|
||||
size_t allocSize = align(size, Alignment);
|
||||
if (putPos + allocSize < m_size)
|
||||
{
|
||||
// range before get
|
||||
|
@ -168,12 +168,12 @@ struct DataHeap
|
|||
size_t putPos = m_putPos;
|
||||
if (putPos + size < m_size)
|
||||
{
|
||||
m_putPos += powerOf2Align(size, Alignment);
|
||||
m_putPos += align(size, Alignment);
|
||||
return putPos;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_putPos = powerOf2Align(size, Alignment);
|
||||
m_putPos = align(size, Alignment);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -157,7 +157,7 @@ writeTexelsGeneric(const char *src, char *dst, size_t widthInBlock, size_t heigh
|
|||
size_t currentHeight = heightInBlock, currentWidth = widthInBlock;
|
||||
for (unsigned mipLevel = 0; mipLevel < mipmapCount; mipLevel++)
|
||||
{
|
||||
size_t rowPitch = powerOf2Align(currentWidth * blockSize, 256);
|
||||
size_t rowPitch = align(currentWidth * blockSize, 256);
|
||||
|
||||
MipmapLevelInfo currentMipmapLevelInfo = {};
|
||||
currentMipmapLevelInfo.offset = offsetInDst;
|
||||
|
@ -188,7 +188,7 @@ writeTexelsSwizzled(const char *src, char *dst, size_t widthInBlock, size_t heig
|
|||
size_t currentHeight = heightInBlock, currentWidth = widthInBlock;
|
||||
for (unsigned mipLevel = 0; mipLevel < mipmapCount; mipLevel++)
|
||||
{
|
||||
size_t rowPitch = powerOf2Align(currentWidth * blockSize, 256);
|
||||
size_t rowPitch = align(currentWidth * blockSize, 256);
|
||||
|
||||
MipmapLevelInfo currentMipmapLevelInfo = {};
|
||||
currentMipmapLevelInfo.offset = offsetInDst;
|
||||
|
@ -231,7 +231,7 @@ writeCompressedTexel(const char *src, char *dst, size_t widthInBlock, size_t blo
|
|||
size_t currentHeight = heightInBlock, currentWidth = widthInBlock;
|
||||
for (unsigned mipLevel = 0; mipLevel < mipmapCount; mipLevel++)
|
||||
{
|
||||
size_t rowPitch = powerOf2Align(currentWidth * blockSize, 256);
|
||||
size_t rowPitch = align(currentWidth * blockSize, 256);
|
||||
|
||||
MipmapLevelInfo currentMipmapLevelInfo = {};
|
||||
currentMipmapLevelInfo.offset = offsetInDst;
|
||||
|
@ -244,7 +244,7 @@ writeCompressedTexel(const char *src, char *dst, size_t widthInBlock, size_t blo
|
|||
memcpy((char*)dst + offsetInDst + row * rowPitch, (char*)src + offsetInSrc + row * currentWidth * blockSize, currentWidth * blockSize);
|
||||
|
||||
offsetInDst += currentHeight * rowPitch;
|
||||
offsetInDst = powerOf2Align(offsetInDst, 512);
|
||||
offsetInDst = align(offsetInDst, 512);
|
||||
offsetInSrc += currentHeight * currentWidth * blockSize;
|
||||
currentHeight = MAX2(currentHeight / 2, 1);
|
||||
currentWidth = MAX2(currentWidth / 2, 1);
|
||||
|
@ -264,7 +264,7 @@ write16bTexelsGeneric(const char *src, char *dst, size_t widthInBlock, size_t he
|
|||
size_t srcPitch = widthInBlock * blockSize;
|
||||
for (unsigned mipLevel = 0; mipLevel < mipmapCount; mipLevel++)
|
||||
{
|
||||
size_t rowPitch = powerOf2Align(currentWidth * blockSize, 256);
|
||||
size_t rowPitch = align(currentWidth * blockSize, 256);
|
||||
|
||||
MipmapLevelInfo currentMipmapLevelInfo = {};
|
||||
currentMipmapLevelInfo.offset = offsetInDst;
|
||||
|
@ -302,7 +302,7 @@ write16bX4TexelsGeneric(const char *src, char *dst, size_t widthInBlock, size_t
|
|||
size_t srcPitch = widthInBlock * blockSize;
|
||||
for (unsigned mipLevel = 0; mipLevel < mipmapCount; mipLevel++)
|
||||
{
|
||||
size_t rowPitch = powerOf2Align(currentWidth * blockSize, 256);
|
||||
size_t rowPitch = align(currentWidth * blockSize, 256);
|
||||
|
||||
MipmapLevelInfo currentMipmapLevelInfo = {};
|
||||
currentMipmapLevelInfo.offset = offsetInDst;
|
||||
|
@ -490,7 +490,7 @@ ID3D12Resource *uploadSingleTexture(
|
|||
size_t heightInBlocks = (h + blockHeightInPixel - 1) / blockHeightInPixel;
|
||||
size_t widthInBlocks = (w + blockWidthInPixel - 1) / blockWidthInPixel;
|
||||
// Multiple of 256
|
||||
size_t rowPitch = powerOf2Align(blockSizeInByte * widthInBlocks, 256);
|
||||
size_t rowPitch = align(blockSizeInByte * widthInBlocks, 256);
|
||||
|
||||
ID3D12Resource *Texture;
|
||||
size_t textureSize = rowPitch * heightInBlocks * 2; // * 4 for mipmap levels
|
||||
|
@ -610,7 +610,7 @@ size_t getTextureSize(const RSXTexture &texture)
|
|||
case ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN) & CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8:
|
||||
default:
|
||||
LOG_ERROR(RSX, "Unimplemented Texture format : %x", format);
|
||||
break;
|
||||
return 0;
|
||||
case CELL_GCM_TEXTURE_B8:
|
||||
return w * h;
|
||||
case CELL_GCM_TEXTURE_A1R5G5B5:
|
||||
|
@ -707,7 +707,7 @@ size_t D3D12GSRender::UploadTextures()
|
|||
getCurrentResourceStorage().m_inflightCommandList.push_back(commandList);
|
||||
m_texturesCache[texaddr] = vramTexture;
|
||||
|
||||
u32 s = align(getTextureSize(m_textures[i]), 4096);
|
||||
u32 s = (u32)align(getTextureSize(m_textures[i]), 4096);
|
||||
LOG_WARNING(RSX, "PROTECTING %x of size %d", align(texaddr, 4096), s);
|
||||
m_protectedTextures.push_back(std::make_tuple(texaddr, align(texaddr, 4096), s));
|
||||
vm::page_protect(align(texaddr, 4096), s, 0, 0, vm::page_writable);
|
||||
|
|
Loading…
Add table
Reference in a new issue