From 1c7bff4d36ce3c8fb5ba23f4bd9ec44adc54d1e6 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 25 Jun 2015 21:46:36 +0200 Subject: [PATCH] d3d12: Use align instead of powerOf2Align --- rpcs3/Emu/RSX/D3D12/D3D12.h | 11 ----------- rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp | 2 +- rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp | 8 ++++---- rpcs3/Emu/RSX/D3D12/D3D12GSRender.h | 6 +++--- rpcs3/Emu/RSX/D3D12/D3D12Texture.cpp | 18 +++++++++--------- 5 files changed, 17 insertions(+), 28 deletions(-) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12.h b/rpcs3/Emu/RSX/D3D12/D3D12.h index 506d84b578..1ef175ea82 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12.h +++ b/rpcs3/Emu/RSX/D3D12/D3D12.h @@ -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. diff --git a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp index cfa3d36ffc..e78b22029c 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp @@ -365,7 +365,7 @@ std::pair, 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); diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp index 3e20059f98..7addfb7818 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp @@ -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; } diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h index f8af34128d..0734311d54 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h @@ -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; } } diff --git a/rpcs3/Emu/RSX/D3D12/D3D12Texture.cpp b/rpcs3/Emu/RSX/D3D12/D3D12Texture.cpp index aa50654274..a974c15659 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12Texture.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12Texture.cpp @@ -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);