@@ -779,15 +779,15 @@ angle::Result FramebufferVk::blitWithCommand(ContextVk *contextVk,
779779 ANGLE_TRY (contextVk->onImageTransferWrite (imageAspectMask, dstImage));
780780 vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer ();
781781
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 ();
785785 blit.srcSubresource .baseArrayLayer = readRenderTarget->getLayerIndex ();
786786 blit.srcSubresource .layerCount = 1 ;
787787 blit.srcOffsets [0 ] = {sourceArea.x0 (), sourceArea.y0 (), 0 };
788788 blit.srcOffsets [1 ] = {sourceArea.x1 (), sourceArea.y1 (), 1 };
789789 blit.dstSubresource .aspectMask = blitAspectMask;
790- blit.dstSubresource .mipLevel = drawRenderTarget->getLevelIndex ();
790+ blit.dstSubresource .mipLevel = dstImage-> toVKLevel ( drawRenderTarget->getLevelIndex ()). get ();
791791 blit.dstSubresource .baseArrayLayer = drawRenderTarget->getLayerIndex ();
792792 blit.dstSubresource .layerCount = 1 ;
793793 blit.dstOffsets [0 ] = {destArea.x0 (), destArea.y0 (), 0 };
@@ -1028,7 +1028,7 @@ angle::Result FramebufferVk::blit(const gl::Context *context,
10281028 params.srcLayer = readRenderTarget->getLayerIndex ();
10291029
10301030 // Multisampled images are not allowed to have mips.
1031- ASSERT (!isColorResolve || readRenderTarget->getLevelIndex () == 0 );
1031+ ASSERT (!isColorResolve || readRenderTarget->getLevelIndex () == gl::LevelIndex ( 0 ) );
10321032
10331033 // If there was no clipping and the format capabilities allow us, use Vulkan's builtin blit.
10341034 // 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,
11271127 params.srcLayer = readRenderTarget->getLayerIndex ();
11281128
11291129 // Multisampled images are not allowed to have mips.
1130- ASSERT (!isDepthStencilResolve || readRenderTarget->getLevelIndex () == 0 );
1130+ ASSERT (!isDepthStencilResolve || readRenderTarget->getLevelIndex () == gl::LevelIndex ( 0 ) );
11311131
11321132 // Similarly, only blit if there's been no clipping or rotating.
11331133 bool canBlitWithCommand = !isDepthStencilResolve && noClip &&
@@ -1158,8 +1158,9 @@ angle::Result FramebufferVk::blit(const gl::Context *context,
11581158 vk::DeviceScoped<vk::ImageView> stencilView (contextVk->getDevice ());
11591159
11601160 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 ();
11631164 gl::TextureType textureType = vk::Get2DTextureType (depthStencilImage->getLayerCount (),
11641165 depthStencilImage->getSamples ());
11651166
@@ -1302,8 +1303,8 @@ angle::Result FramebufferVk::resolveColorWithCommand(ContextVk *contextVk,
13021303 vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer ();
13031304
13041305 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 () ;
13071308 resolveRegion.dstSubresource .baseArrayLayer = drawRenderTarget->getLayerIndex ();
13081309
13091310 srcImage->resolve (&dstImage, resolveRegion, &commandBuffer);
@@ -1331,9 +1332,9 @@ angle::Result FramebufferVk::copyResolveToMultisampedAttachment(ContextVk *conte
13311332 // Note: neither vkCmdCopyImage nor vkCmdBlitImage allow the destination to be multisampled.
13321333 // There's no choice but to use a draw-based path to perform this copy.
13331334
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 ();
13371338
13381339 UtilsVk::CopyImageParameters params;
13391340 params.srcOffset [0 ] = 0 ;
@@ -1342,7 +1343,7 @@ angle::Result FramebufferVk::copyResolveToMultisampedAttachment(ContextVk *conte
13421343 params.srcExtents [1 ] = extents.height ;
13431344 params.destOffset [0 ] = 0 ;
13441345 params.destOffset [1 ] = 0 ;
1345- params.srcMip = levelVK;
1346+ params.srcMip = levelVK. get () ;
13461347 params.srcLayer = layer;
13471348 params.srcHeight = extents.height ;
13481349 params.srcPremultiplyAlpha = false ;
@@ -2395,8 +2396,8 @@ angle::Result FramebufferVk::readPixelsImpl(ContextVk *contextVk,
23952396 void *pixels)
23962397{
23972398 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 ();
24002401 return renderTarget->getImageForCopy ().readPixels (contextVk, area, packPixelsParams,
24012402 copyAspectFlags, levelGL, layer, pixels,
24022403 &mReadPixelBuffer );
0 commit comments