mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 14:29:03 +02:00
Merge pull request #10359 from samcake/ambient
Fixing the by region update transfer of the compressed texture
This commit is contained in:
commit
7c36dd3282
2 changed files with 10 additions and 4 deletions
|
@ -525,11 +525,14 @@ void GL41VariableAllocationTexture::populateTransferQueue() {
|
||||||
|
|
||||||
// break down the transfers into chunks so that no single transfer is
|
// break down the transfers into chunks so that no single transfer is
|
||||||
// consuming more than X bandwidth
|
// consuming more than X bandwidth
|
||||||
|
// For compressed format, regions must be a multiple of the 4x4 tiles, so enforce 4 lines as the minimum block
|
||||||
auto mipSize = _gpuObject.getStoredMipFaceSize(sourceMip, face);
|
auto mipSize = _gpuObject.getStoredMipFaceSize(sourceMip, face);
|
||||||
const auto lines = mipDimensions.y;
|
const auto lines = mipDimensions.y;
|
||||||
auto bytesPerLine = mipSize / lines;
|
const uint32_t BLOCK_NUM_LINES { 4 };
|
||||||
|
const auto numBlocks = (lines + (BLOCK_NUM_LINES - 1)) / BLOCK_NUM_LINES;
|
||||||
|
auto bytesPerBlock = mipSize / numBlocks;
|
||||||
Q_ASSERT(0 == (mipSize % lines));
|
Q_ASSERT(0 == (mipSize % lines));
|
||||||
uint32_t linesPerTransfer = (uint32_t)(MAX_TRANSFER_SIZE / bytesPerLine);
|
uint32_t linesPerTransfer = BLOCK_NUM_LINES * (uint32_t)(MAX_TRANSFER_SIZE / bytesPerBlock);
|
||||||
uint32_t lineOffset = 0;
|
uint32_t lineOffset = 0;
|
||||||
while (lineOffset < lines) {
|
while (lineOffset < lines) {
|
||||||
uint32_t linesToCopy = std::min<uint32_t>(lines - lineOffset, linesPerTransfer);
|
uint32_t linesToCopy = std::min<uint32_t>(lines - lineOffset, linesPerTransfer);
|
||||||
|
|
|
@ -196,11 +196,14 @@ void GL45ResourceTexture::populateTransferQueue() {
|
||||||
|
|
||||||
// break down the transfers into chunks so that no single transfer is
|
// break down the transfers into chunks so that no single transfer is
|
||||||
// consuming more than X bandwidth
|
// consuming more than X bandwidth
|
||||||
|
// For compressed format, regions must be a multiple of the 4x4 tiles, so enforce 4 lines as the minimum block
|
||||||
auto mipSize = _gpuObject.getStoredMipFaceSize(sourceMip, face);
|
auto mipSize = _gpuObject.getStoredMipFaceSize(sourceMip, face);
|
||||||
const auto lines = mipDimensions.y;
|
const auto lines = mipDimensions.y;
|
||||||
auto bytesPerLine = mipSize / lines;
|
const uint32_t BLOCK_NUM_LINES { 4 };
|
||||||
|
const auto numBlocks = (lines + (BLOCK_NUM_LINES - 1)) / BLOCK_NUM_LINES;
|
||||||
|
auto bytesPerBlock = mipSize / numBlocks;
|
||||||
Q_ASSERT(0 == (mipSize % lines));
|
Q_ASSERT(0 == (mipSize % lines));
|
||||||
uint32_t linesPerTransfer = (uint32_t)(MAX_TRANSFER_SIZE / bytesPerLine);
|
uint32_t linesPerTransfer = BLOCK_NUM_LINES * (uint32_t)(MAX_TRANSFER_SIZE / bytesPerBlock);
|
||||||
uint32_t lineOffset = 0;
|
uint32_t lineOffset = 0;
|
||||||
while (lineOffset < lines) {
|
while (lineOffset < lines) {
|
||||||
uint32_t linesToCopy = std::min<uint32_t>(lines - lineOffset, linesPerTransfer);
|
uint32_t linesToCopy = std::min<uint32_t>(lines - lineOffset, linesPerTransfer);
|
||||||
|
|
Loading…
Reference in a new issue