Skip to content

Commit 848e200

Browse files
committed
fix pass structure
1 parent 5710f5e commit 848e200

File tree

1 file changed

+53
-16
lines changed

1 file changed

+53
-16
lines changed

src/FNA3D_Driver_SDL.c

+53-16
Original file line numberDiff line numberDiff line change
@@ -1094,6 +1094,8 @@ typedef struct SDLGPU_Renderer
10941094
uint8_t renderPassInProgress;
10951095
uint8_t needNewRenderPass;
10961096

1097+
uint8_t copyPassInProgress;
1098+
10971099
uint8_t shouldClearColorOnBeginPass;
10981100
uint8_t shouldClearDepthOnBeginPass;
10991101
uint8_t shouldClearStencilOnBeginPass;
@@ -1232,9 +1234,37 @@ static void SDLGPU_ResetCommandBufferState(
12321234
);
12331235
}
12341236

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+
12351263
static void SDLGPU_INTERNAL_FlushCommandsAndStall(
12361264
SDLGPU_Renderer *renderer
12371265
) {
1266+
SDLGPU_INTERNAL_EndPass(renderer);
1267+
12381268
SDL_GpuFence *fence = SDL_GpuSubmitAndAcquireFence(
12391269
renderer->device,
12401270
renderer->commandBuffer
@@ -1258,6 +1288,7 @@ static void SDLGPU_INTERNAL_FlushCommandsAndStall(
12581288
static void SDLGPU_INTERNAL_FlushCommands(
12591289
SDLGPU_Renderer *renderer
12601290
) {
1291+
SDLGPU_INTERNAL_EndPass(renderer);
12611292
SDL_GpuSubmit(renderer->device, renderer->commandBuffer);
12621293
SDLGPU_ResetCommandBufferState(renderer);
12631294
}
@@ -1275,6 +1306,8 @@ static void SDLGPU_SwapBuffers(
12751306
SDL_GpuTextureRegion dstRegion;
12761307
uint32_t width, height;
12771308

1309+
SDLGPU_INTERNAL_EndPass(renderer);
1310+
12781311
swapchainTexture = SDL_GpuAcquireSwapchainTexture(
12791312
renderer->device,
12801313
renderer->commandBuffer,
@@ -1477,22 +1510,6 @@ static void SDLGPU_Clear(
14771510
);
14781511
}
14791512

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-
14961513
static void SDLGPU_INTERNAL_BeginRenderPass(
14971514
SDLGPU_Renderer *renderer
14981515
) {
@@ -3049,6 +3066,22 @@ static void SDLGPU_AddDisposeRenderbuffer(
30493066
SDL_free(renderbufferHandle);
30503067
}
30513068

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+
30523085
static void SDLGPU_INTERNAL_SetTextureData(
30533086
SDLGPU_Renderer *renderer,
30543087
SDL_GpuTexture *texture,
@@ -3067,6 +3100,8 @@ static void SDLGPU_INTERNAL_SetTextureData(
30673100
SDL_GpuTextureRegion textureRegion;
30683101
SDL_GpuBufferImageCopy textureCopyParams;
30693102

3103+
SDLGPU_INTERNAL_BeginCopyPass(renderer);
3104+
30703105
/* Recreate transfer buffer if necessary */
30713106
if (renderer->textureUploadBufferOffset + dataLength >= renderer->textureUploadBufferSize)
30723107
{
@@ -3421,6 +3456,8 @@ static void SDLGPU_INTERNAL_SetBufferData(
34213456
SDL_GpuBufferCopy transferCopyParams;
34223457
SDL_GpuBufferCopy uploadParams;
34233458

3459+
SDLGPU_INTERNAL_BeginCopyPass(renderer);
3460+
34243461
/* Recreate transfer buffer if necessary */
34253462
if (renderer->bufferUploadBufferOffset + dataLength >= renderer->bufferUploadBufferSize)
34263463
{

0 commit comments

Comments
 (0)