@@ -779,15 +779,15 @@ angle::Result FramebufferVk::blitWithCommand(ContextVk *contextVk,
779
779
ANGLE_TRY (contextVk->onImageTransferWrite (imageAspectMask, dstImage));
780
780
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer ();
781
781
782
- VkImageBlit blit = {};
783
- blit.srcSubresource .aspectMask = blitAspectMask;
784
- blit.srcSubresource .mipLevel = readRenderTarget->getLevelIndex ();
782
+ VkImageBlit blit = {};
783
+ blit.srcSubresource .aspectMask = blitAspectMask;
784
+ blit.srcSubresource .mipLevel = srcImage-> toVKLevel ( readRenderTarget->getLevelIndex ()). get ();
785
785
blit.srcSubresource .baseArrayLayer = readRenderTarget->getLayerIndex ();
786
786
blit.srcSubresource .layerCount = 1 ;
787
787
blit.srcOffsets [0 ] = {sourceArea.x0 (), sourceArea.y0 (), 0 };
788
788
blit.srcOffsets [1 ] = {sourceArea.x1 (), sourceArea.y1 (), 1 };
789
789
blit.dstSubresource .aspectMask = blitAspectMask;
790
- blit.dstSubresource .mipLevel = drawRenderTarget->getLevelIndex ();
790
+ blit.dstSubresource .mipLevel = dstImage-> toVKLevel ( drawRenderTarget->getLevelIndex ()). get ();
791
791
blit.dstSubresource .baseArrayLayer = drawRenderTarget->getLayerIndex ();
792
792
blit.dstSubresource .layerCount = 1 ;
793
793
blit.dstOffsets [0 ] = {destArea.x0 (), destArea.y0 (), 0 };
@@ -1028,7 +1028,7 @@ angle::Result FramebufferVk::blit(const gl::Context *context,
1028
1028
params.srcLayer = readRenderTarget->getLayerIndex ();
1029
1029
1030
1030
// Multisampled images are not allowed to have mips.
1031
- ASSERT (!isColorResolve || readRenderTarget->getLevelIndex () == 0 );
1031
+ ASSERT (!isColorResolve || readRenderTarget->getLevelIndex () == gl::LevelIndex ( 0 ) );
1032
1032
1033
1033
// If there was no clipping and the format capabilities allow us, use Vulkan's builtin blit.
1034
1034
// The reason clipping is prohibited in this path is that due to rounding errors, it would
@@ -1127,7 +1127,7 @@ angle::Result FramebufferVk::blit(const gl::Context *context,
1127
1127
params.srcLayer = readRenderTarget->getLayerIndex ();
1128
1128
1129
1129
// Multisampled images are not allowed to have mips.
1130
- ASSERT (!isDepthStencilResolve || readRenderTarget->getLevelIndex () == 0 );
1130
+ ASSERT (!isDepthStencilResolve || readRenderTarget->getLevelIndex () == gl::LevelIndex ( 0 ) );
1131
1131
1132
1132
// Similarly, only blit if there's been no clipping or rotating.
1133
1133
bool canBlitWithCommand = !isDepthStencilResolve && noClip &&
@@ -1158,8 +1158,9 @@ angle::Result FramebufferVk::blit(const gl::Context *context,
1158
1158
vk::DeviceScoped<vk::ImageView> stencilView (contextVk->getDevice ());
1159
1159
1160
1160
vk::ImageHelper *depthStencilImage = &readRenderTarget->getImageForCopy ();
1161
- uint32_t levelIndex = readRenderTarget->getLevelIndex ();
1162
- uint32_t layerIndex = readRenderTarget->getLayerIndex ();
1161
+ vk::LevelIndex levelIndex =
1162
+ depthStencilImage->toVKLevel (readRenderTarget->getLevelIndex ());
1163
+ uint32_t layerIndex = readRenderTarget->getLayerIndex ();
1163
1164
gl::TextureType textureType = vk::Get2DTextureType (depthStencilImage->getLayerCount (),
1164
1165
depthStencilImage->getSamples ());
1165
1166
@@ -1302,8 +1303,8 @@ angle::Result FramebufferVk::resolveColorWithCommand(ContextVk *contextVk,
1302
1303
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer ();
1303
1304
1304
1305
vk::ImageHelper &dstImage = drawRenderTarget->getImageForWrite ();
1305
- uint32_t levelVK = drawRenderTarget->getLevelIndex () - dstImage. getBaseLevel ( );
1306
- resolveRegion.dstSubresource .mipLevel = levelVK;
1306
+ vk::LevelIndex levelVK = dstImage. toVKLevel ( drawRenderTarget->getLevelIndex ());
1307
+ resolveRegion.dstSubresource .mipLevel = levelVK. get () ;
1307
1308
resolveRegion.dstSubresource .baseArrayLayer = drawRenderTarget->getLayerIndex ();
1308
1309
1309
1310
srcImage->resolve (&dstImage, resolveRegion, &commandBuffer);
@@ -1331,9 +1332,9 @@ angle::Result FramebufferVk::copyResolveToMultisampedAttachment(ContextVk *conte
1331
1332
// Note: neither vkCmdCopyImage nor vkCmdBlitImage allow the destination to be multisampled.
1332
1333
// There's no choice but to use a draw-based path to perform this copy.
1333
1334
1334
- gl::Extents extents = colorRenderTarget->getExtents ();
1335
- uint32_t levelVK = colorRenderTarget-> getLevelIndex () - src-> getBaseLevel ( );
1336
- uint32_t layer = colorRenderTarget->getLayerIndex ();
1335
+ gl::Extents extents = colorRenderTarget->getExtents ();
1336
+ vk::LevelIndex levelVK = src-> toVKLevel (colorRenderTarget-> getLevelIndex () );
1337
+ uint32_t layer = colorRenderTarget->getLayerIndex ();
1337
1338
1338
1339
UtilsVk::CopyImageParameters params;
1339
1340
params.srcOffset [0 ] = 0 ;
@@ -1342,7 +1343,7 @@ angle::Result FramebufferVk::copyResolveToMultisampedAttachment(ContextVk *conte
1342
1343
params.srcExtents [1 ] = extents.height ;
1343
1344
params.destOffset [0 ] = 0 ;
1344
1345
params.destOffset [1 ] = 0 ;
1345
- params.srcMip = levelVK;
1346
+ params.srcMip = levelVK. get () ;
1346
1347
params.srcLayer = layer;
1347
1348
params.srcHeight = extents.height ;
1348
1349
params.srcPremultiplyAlpha = false ;
@@ -2395,8 +2396,8 @@ angle::Result FramebufferVk::readPixelsImpl(ContextVk *contextVk,
2395
2396
void *pixels)
2396
2397
{
2397
2398
ANGLE_TRACE_EVENT0 (" gpu.angle" , " FramebufferVk::readPixelsImpl" );
2398
- uint32_t levelGL = renderTarget->getLevelIndex ();
2399
- uint32_t layer = renderTarget->getLayerIndex ();
2399
+ gl::LevelIndex levelGL = renderTarget->getLevelIndex ();
2400
+ uint32_t layer = renderTarget->getLayerIndex ();
2400
2401
return renderTarget->getImageForCopy ().readPixels (contextVk, area, packPixelsParams,
2401
2402
copyAspectFlags, levelGL, layer, pixels,
2402
2403
&mReadPixelBuffer );
0 commit comments