@@ -1094,6 +1094,8 @@ typedef struct SDLGPU_Renderer
1094
1094
uint8_t renderPassInProgress ;
1095
1095
uint8_t needNewRenderPass ;
1096
1096
1097
+ uint8_t copyPassInProgress ;
1098
+
1097
1099
uint8_t shouldClearColorOnBeginPass ;
1098
1100
uint8_t shouldClearDepthOnBeginPass ;
1099
1101
uint8_t shouldClearStencilOnBeginPass ;
@@ -1232,9 +1234,37 @@ static void SDLGPU_ResetCommandBufferState(
1232
1234
);
1233
1235
}
1234
1236
1237
+ static void SDLGPU_INTERNAL_EndPass (
1238
+ SDLGPU_Renderer * renderer
1239
+ ) {
1240
+ if (renderer -> renderPassInProgress )
1241
+ {
1242
+ SDL_GpuEndRenderPass (
1243
+ renderer -> device ,
1244
+ renderer -> commandBuffer
1245
+ );
1246
+ }
1247
+
1248
+ if (renderer -> copyPassInProgress )
1249
+ {
1250
+ SDL_GpuEndCopyPass (
1251
+ renderer -> device ,
1252
+ renderer -> commandBuffer
1253
+ );
1254
+ }
1255
+
1256
+ renderer -> renderPassInProgress = 0 ;
1257
+ renderer -> copyPassInProgress = 0 ;
1258
+ renderer -> needNewRenderPass = 1 ;
1259
+ renderer -> currentGraphicsPipeline = NULL ;
1260
+ renderer -> needNewGraphicsPipeline = 1 ;
1261
+ }
1262
+
1235
1263
static void SDLGPU_INTERNAL_FlushCommandsAndStall (
1236
1264
SDLGPU_Renderer * renderer
1237
1265
) {
1266
+ SDLGPU_INTERNAL_EndPass (renderer );
1267
+
1238
1268
SDL_GpuFence * fence = SDL_GpuSubmitAndAcquireFence (
1239
1269
renderer -> device ,
1240
1270
renderer -> commandBuffer
@@ -1258,6 +1288,7 @@ static void SDLGPU_INTERNAL_FlushCommandsAndStall(
1258
1288
static void SDLGPU_INTERNAL_FlushCommands (
1259
1289
SDLGPU_Renderer * renderer
1260
1290
) {
1291
+ SDLGPU_INTERNAL_EndPass (renderer );
1261
1292
SDL_GpuSubmit (renderer -> device , renderer -> commandBuffer );
1262
1293
SDLGPU_ResetCommandBufferState (renderer );
1263
1294
}
@@ -1275,6 +1306,8 @@ static void SDLGPU_SwapBuffers(
1275
1306
SDL_GpuTextureRegion dstRegion ;
1276
1307
uint32_t width , height ;
1277
1308
1309
+ SDLGPU_INTERNAL_EndPass (renderer );
1310
+
1278
1311
swapchainTexture = SDL_GpuAcquireSwapchainTexture (
1279
1312
renderer -> device ,
1280
1313
renderer -> commandBuffer ,
@@ -1477,22 +1510,6 @@ static void SDLGPU_Clear(
1477
1510
);
1478
1511
}
1479
1512
1480
- static void SDLGPU_INTERNAL_EndPass (
1481
- SDLGPU_Renderer * renderer
1482
- ) {
1483
- if (renderer -> renderPassInProgress )
1484
- {
1485
- SDL_GpuEndRenderPass (
1486
- renderer -> device ,
1487
- renderer -> commandBuffer
1488
- );
1489
-
1490
- renderer -> currentGraphicsPipeline = NULL ;
1491
- renderer -> needNewGraphicsPipeline = 1 ;
1492
- renderer -> renderPassInProgress = 0 ;
1493
- }
1494
- }
1495
-
1496
1513
static void SDLGPU_INTERNAL_BeginRenderPass (
1497
1514
SDLGPU_Renderer * renderer
1498
1515
) {
@@ -3049,6 +3066,22 @@ static void SDLGPU_AddDisposeRenderbuffer(
3049
3066
SDL_free (renderbufferHandle );
3050
3067
}
3051
3068
3069
+ static void SDLGPU_INTERNAL_BeginCopyPass (
3070
+ SDLGPU_Renderer * renderer
3071
+ ) {
3072
+ if (!renderer -> copyPassInProgress )
3073
+ {
3074
+ SDLGPU_INTERNAL_EndPass (renderer );
3075
+
3076
+ SDL_GpuBeginCopyPass (
3077
+ renderer -> device ,
3078
+ renderer -> commandBuffer
3079
+ );
3080
+
3081
+ renderer -> copyPassInProgress = 1 ;
3082
+ }
3083
+ }
3084
+
3052
3085
static void SDLGPU_INTERNAL_SetTextureData (
3053
3086
SDLGPU_Renderer * renderer ,
3054
3087
SDL_GpuTexture * texture ,
@@ -3067,6 +3100,8 @@ static void SDLGPU_INTERNAL_SetTextureData(
3067
3100
SDL_GpuTextureRegion textureRegion ;
3068
3101
SDL_GpuBufferImageCopy textureCopyParams ;
3069
3102
3103
+ SDLGPU_INTERNAL_BeginCopyPass (renderer );
3104
+
3070
3105
/* Recreate transfer buffer if necessary */
3071
3106
if (renderer -> textureUploadBufferOffset + dataLength >= renderer -> textureUploadBufferSize )
3072
3107
{
@@ -3421,6 +3456,8 @@ static void SDLGPU_INTERNAL_SetBufferData(
3421
3456
SDL_GpuBufferCopy transferCopyParams ;
3422
3457
SDL_GpuBufferCopy uploadParams ;
3423
3458
3459
+ SDLGPU_INTERNAL_BeginCopyPass (renderer );
3460
+
3424
3461
/* Recreate transfer buffer if necessary */
3425
3462
if (renderer -> bufferUploadBufferOffset + dataLength >= renderer -> bufferUploadBufferSize )
3426
3463
{
0 commit comments