Skip to content

Commit a469a55

Browse files
committed
chore: improve metal blit encoder warnings
1 parent 2174843 commit a469a55

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

extensions/pl_graphics_metal.m

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
{
6262
plCommandBuffer* ptCommandBuffer;
6363
id<MTLBlitCommandEncoder> tEncoder;
64+
bool bActive;
6465
plBlitEncoder* ptNext;
6566
} plBlitEncoder;
6667

@@ -537,6 +538,13 @@
537538
pl_copy_buffer_to_texture(plBlitEncoder* ptEncoder, plBufferHandle tBufferHandle, plTextureHandle tTextureHandle, uint32_t uRegionCount, const plBufferImageCopy* ptRegions)
538539
{
539540
plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer;
541+
542+
if(!ptEncoder->bActive)
543+
{
544+
ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder];
545+
ptEncoder->bActive = true;
546+
}
547+
540548
plDevice* ptDevice = ptCmdBuffer->ptDevice;
541549

542550
plMetalBuffer* ptBuffer = &ptDevice->sbtBuffersHot[tBufferHandle.uIndex];
@@ -573,6 +581,13 @@
573581
pl_copy_texture(plBlitEncoder* ptEncoder, plTextureHandle tSrcHandle, plTextureHandle tDstHandle, uint32_t uRegionCount, const plImageCopy* ptRegions)
574582
{
575583
plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer;
584+
585+
if(!ptEncoder->bActive)
586+
{
587+
ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder];
588+
ptEncoder->bActive = true;
589+
}
590+
576591
plDevice* ptDevice = ptCmdBuffer->ptDevice;
577592
const plMetalTexture* ptMetalSrcTexture = &ptDevice->sbtTexturesHot[tSrcHandle.uIndex];
578593
const plMetalTexture* ptMetalDstTexture = &ptDevice->sbtTexturesHot[tDstHandle.uIndex];
@@ -611,6 +626,13 @@
611626
pl_copy_texture_to_buffer(plBlitEncoder* ptEncoder, plTextureHandle tTextureHandle, plBufferHandle tBufferHandle, uint32_t uRegionCount, const plBufferImageCopy* ptRegions)
612627
{
613628
plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer;
629+
630+
if(!ptEncoder->bActive)
631+
{
632+
ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder];
633+
ptEncoder->bActive = true;
634+
}
635+
614636
plDevice* ptDevice = ptCmdBuffer->ptDevice;
615637
const plTexture* ptTexture = pl__get_texture(ptDevice, tTextureHandle);
616638
const plMetalTexture* ptMetalTexture = &ptDevice->sbtTexturesHot[tTextureHandle.uIndex];
@@ -647,6 +669,13 @@
647669
pl_copy_buffer(plBlitEncoder* ptEncoder, plBufferHandle tSource, plBufferHandle tDestination, uint32_t uSourceOffset, uint32_t uDestinationOffset, size_t szSize)
648670
{
649671
plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer;
672+
673+
if(!ptEncoder->bActive)
674+
{
675+
ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder];
676+
ptEncoder->bActive = true;
677+
}
678+
650679
plDevice* ptDevice = ptCmdBuffer->ptDevice;
651680
[ptEncoder->tEncoder copyFromBuffer:ptDevice->sbtBuffersHot[tSource.uIndex].tBuffer sourceOffset:uSourceOffset toBuffer:ptDevice->sbtBuffersHot[tDestination.uIndex].tBuffer destinationOffset:uDestinationOffset size:szSize];
652681
}
@@ -767,6 +796,13 @@
767796
pl_generate_mipmaps(plBlitEncoder* ptEncoder, plTextureHandle tTexture)
768797
{
769798
plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer;
799+
800+
if(!ptEncoder->bActive)
801+
{
802+
ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder];
803+
ptEncoder->bActive = true;
804+
}
805+
770806
plDevice* ptDevice = ptCmdBuffer->ptDevice;
771807

772808
plTexture* ptTexture = pl__get_texture(ptDevice, tTexture);
@@ -2229,7 +2265,7 @@
22292265
pl_begin_blit_pass(plCommandBuffer* ptCmdBuffer)
22302266
{
22312267
plBlitEncoder* ptEncoder = pl__get_new_blit_encoder();
2232-
ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder];
2268+
22332269
// plFrameContext* ptFrame = pl__get_frame_resources(ptDevice);
22342270
// [tBlitEncoder waitForFence:ptFrame->tFence];
22352271
ptEncoder->ptCommandBuffer = ptCmdBuffer;
@@ -2239,7 +2275,11 @@
22392275
static void
22402276
pl_end_blit_pass(plBlitEncoder* ptEncoder)
22412277
{
2242-
[ptEncoder->tEncoder endEncoding];
2278+
if(ptEncoder->bActive)
2279+
{
2280+
[ptEncoder->tEncoder endEncoding];
2281+
}
2282+
ptEncoder->bActive = false;
22432283
pl__return_blit_encoder(ptEncoder);
22442284
}
22452285

0 commit comments

Comments
 (0)