|
61 | 61 | { |
62 | 62 | plCommandBuffer* ptCommandBuffer; |
63 | 63 | id<MTLBlitCommandEncoder> tEncoder; |
| 64 | + bool bActive; |
64 | 65 | plBlitEncoder* ptNext; |
65 | 66 | } plBlitEncoder; |
66 | 67 |
|
|
537 | 538 | pl_copy_buffer_to_texture(plBlitEncoder* ptEncoder, plBufferHandle tBufferHandle, plTextureHandle tTextureHandle, uint32_t uRegionCount, const plBufferImageCopy* ptRegions) |
538 | 539 | { |
539 | 540 | plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer; |
| 541 | + |
| 542 | + if(!ptEncoder->bActive) |
| 543 | + { |
| 544 | + ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder]; |
| 545 | + ptEncoder->bActive = true; |
| 546 | + } |
| 547 | + |
540 | 548 | plDevice* ptDevice = ptCmdBuffer->ptDevice; |
541 | 549 |
|
542 | 550 | plMetalBuffer* ptBuffer = &ptDevice->sbtBuffersHot[tBufferHandle.uIndex]; |
|
573 | 581 | pl_copy_texture(plBlitEncoder* ptEncoder, plTextureHandle tSrcHandle, plTextureHandle tDstHandle, uint32_t uRegionCount, const plImageCopy* ptRegions) |
574 | 582 | { |
575 | 583 | plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer; |
| 584 | + |
| 585 | + if(!ptEncoder->bActive) |
| 586 | + { |
| 587 | + ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder]; |
| 588 | + ptEncoder->bActive = true; |
| 589 | + } |
| 590 | + |
576 | 591 | plDevice* ptDevice = ptCmdBuffer->ptDevice; |
577 | 592 | const plMetalTexture* ptMetalSrcTexture = &ptDevice->sbtTexturesHot[tSrcHandle.uIndex]; |
578 | 593 | const plMetalTexture* ptMetalDstTexture = &ptDevice->sbtTexturesHot[tDstHandle.uIndex]; |
|
611 | 626 | pl_copy_texture_to_buffer(plBlitEncoder* ptEncoder, plTextureHandle tTextureHandle, plBufferHandle tBufferHandle, uint32_t uRegionCount, const plBufferImageCopy* ptRegions) |
612 | 627 | { |
613 | 628 | plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer; |
| 629 | + |
| 630 | + if(!ptEncoder->bActive) |
| 631 | + { |
| 632 | + ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder]; |
| 633 | + ptEncoder->bActive = true; |
| 634 | + } |
| 635 | + |
614 | 636 | plDevice* ptDevice = ptCmdBuffer->ptDevice; |
615 | 637 | const plTexture* ptTexture = pl__get_texture(ptDevice, tTextureHandle); |
616 | 638 | const plMetalTexture* ptMetalTexture = &ptDevice->sbtTexturesHot[tTextureHandle.uIndex]; |
|
647 | 669 | pl_copy_buffer(plBlitEncoder* ptEncoder, plBufferHandle tSource, plBufferHandle tDestination, uint32_t uSourceOffset, uint32_t uDestinationOffset, size_t szSize) |
648 | 670 | { |
649 | 671 | plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer; |
| 672 | + |
| 673 | + if(!ptEncoder->bActive) |
| 674 | + { |
| 675 | + ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder]; |
| 676 | + ptEncoder->bActive = true; |
| 677 | + } |
| 678 | + |
650 | 679 | plDevice* ptDevice = ptCmdBuffer->ptDevice; |
651 | 680 | [ptEncoder->tEncoder copyFromBuffer:ptDevice->sbtBuffersHot[tSource.uIndex].tBuffer sourceOffset:uSourceOffset toBuffer:ptDevice->sbtBuffersHot[tDestination.uIndex].tBuffer destinationOffset:uDestinationOffset size:szSize]; |
652 | 681 | } |
|
767 | 796 | pl_generate_mipmaps(plBlitEncoder* ptEncoder, plTextureHandle tTexture) |
768 | 797 | { |
769 | 798 | plCommandBuffer* ptCmdBuffer = ptEncoder->ptCommandBuffer; |
| 799 | + |
| 800 | + if(!ptEncoder->bActive) |
| 801 | + { |
| 802 | + ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder]; |
| 803 | + ptEncoder->bActive = true; |
| 804 | + } |
| 805 | + |
770 | 806 | plDevice* ptDevice = ptCmdBuffer->ptDevice; |
771 | 807 |
|
772 | 808 | plTexture* ptTexture = pl__get_texture(ptDevice, tTexture); |
|
2229 | 2265 | pl_begin_blit_pass(plCommandBuffer* ptCmdBuffer) |
2230 | 2266 | { |
2231 | 2267 | plBlitEncoder* ptEncoder = pl__get_new_blit_encoder(); |
2232 | | - ptEncoder->tEncoder = [ptCmdBuffer->tCmdBuffer blitCommandEncoder]; |
| 2268 | + |
2233 | 2269 | // plFrameContext* ptFrame = pl__get_frame_resources(ptDevice); |
2234 | 2270 | // [tBlitEncoder waitForFence:ptFrame->tFence]; |
2235 | 2271 | ptEncoder->ptCommandBuffer = ptCmdBuffer; |
|
2239 | 2275 | static void |
2240 | 2276 | pl_end_blit_pass(plBlitEncoder* ptEncoder) |
2241 | 2277 | { |
2242 | | - [ptEncoder->tEncoder endEncoding]; |
| 2278 | + if(ptEncoder->bActive) |
| 2279 | + { |
| 2280 | + [ptEncoder->tEncoder endEncoding]; |
| 2281 | + } |
| 2282 | + ptEncoder->bActive = false; |
2243 | 2283 | pl__return_blit_encoder(ptEncoder); |
2244 | 2284 | } |
2245 | 2285 |
|
|
0 commit comments