29
29
#include <SDL.h>
30
30
31
31
#define STARTING_TRANSFER_BUFFER_SIZE 8000000 /* 8MB */
32
- #define FAST_TRANSFER_SIZE 64000000 /* 64MB */
33
32
34
33
typedef struct FNA3D_TransferBufferPool
35
34
{
36
- FNA3D_TransferBuffer * fastTransferBuffer ;
37
- uint8_t fastTransferBufferAvailable ;
38
-
39
- FNA3D_TransferBuffer * * availableSlowTransferBuffers ;
40
- uint32_t availableSlowTransferBufferCount ;
41
- uint32_t availableSlowTransferBufferCapacity ;
35
+ FNA3D_TransferBuffer * * availableTransferBuffers ;
36
+ uint32_t availableTransferBufferCount ;
37
+ uint32_t availableTransferBufferCapacity ;
42
38
} FNA3D_TransferBufferPool ;
43
39
44
40
/* Command buffers have various resources associated with them
@@ -225,24 +221,17 @@ static void FNA3D_CommandBuffer_CleanContainer(
225
221
transferBuffer = container -> transferBuffers [i ];
226
222
transferBuffer -> offset = 0 ;
227
223
228
- if (transferBuffer == manager -> transferBufferPool .fastTransferBuffer )
224
+ if (manager -> transferBufferPool . availableTransferBufferCount == manager -> transferBufferPool .availableTransferBufferCapacity )
229
225
{
230
- manager -> transferBufferPool .fastTransferBufferAvailable = 1 ;
226
+ manager -> transferBufferPool .availableTransferBufferCapacity += 1 ;
227
+ manager -> transferBufferPool .availableTransferBuffers = SDL_realloc (
228
+ manager -> transferBufferPool .availableTransferBuffers ,
229
+ manager -> transferBufferPool .availableTransferBufferCapacity * sizeof (FNA3D_TransferBuffer * )
230
+ );
231
231
}
232
- else
233
- {
234
- if (manager -> transferBufferPool .availableSlowTransferBufferCount == manager -> transferBufferPool .availableSlowTransferBufferCapacity )
235
- {
236
- manager -> transferBufferPool .availableSlowTransferBufferCapacity += 1 ;
237
- manager -> transferBufferPool .availableSlowTransferBuffers = SDL_realloc (
238
- manager -> transferBufferPool .availableSlowTransferBuffers ,
239
- manager -> transferBufferPool .availableSlowTransferBufferCapacity * sizeof (FNA3D_TransferBuffer * )
240
- );
241
- }
242
232
243
- manager -> transferBufferPool .availableSlowTransferBuffers [manager -> transferBufferPool .availableSlowTransferBufferCount ] = transferBuffer ;
244
- manager -> transferBufferPool .availableSlowTransferBufferCount += 1 ;
245
- }
233
+ manager -> transferBufferPool .availableTransferBuffers [manager -> transferBufferPool .availableTransferBufferCount ] = transferBuffer ;
234
+ manager -> transferBufferPool .availableTransferBufferCount += 1 ;
246
235
}
247
236
container -> transferBufferCount = 0 ;
248
237
@@ -315,21 +304,10 @@ FNA3D_CommandBufferManager* FNA3D_CreateCommandBufferManager(
315
304
* Initialize buffer space
316
305
*/
317
306
318
- manager -> transferBufferPool .fastTransferBuffer = (FNA3D_TransferBuffer * ) SDL_malloc (
319
- sizeof (FNA3D_TransferBuffer )
320
- );
321
- manager -> transferBufferPool .fastTransferBuffer -> offset = 0 ;
322
- manager -> transferBufferPool .fastTransferBuffer -> buffer = manager -> driver .CreateTransferBuffer (
323
- manager -> driver .driverData ,
324
- FAST_TRANSFER_SIZE ,
325
- 1
326
- );
327
- manager -> transferBufferPool .fastTransferBufferAvailable = 1 ;
328
-
329
- manager -> transferBufferPool .availableSlowTransferBufferCapacity = 4 ;
330
- manager -> transferBufferPool .availableSlowTransferBufferCount = 0 ;
331
- manager -> transferBufferPool .availableSlowTransferBuffers = (FNA3D_TransferBuffer * * ) SDL_malloc (
332
- manager -> transferBufferPool .availableSlowTransferBufferCapacity * sizeof (FNA3D_TransferBuffer * )
307
+ manager -> transferBufferPool .availableTransferBufferCapacity = 4 ;
308
+ manager -> transferBufferPool .availableTransferBufferCount = 0 ;
309
+ manager -> transferBufferPool .availableTransferBuffers = (FNA3D_TransferBuffer * * ) SDL_malloc (
310
+ manager -> transferBufferPool .availableTransferBufferCapacity * sizeof (FNA3D_TransferBuffer * )
333
311
);
334
312
335
313
return manager ;
@@ -382,22 +360,16 @@ void FNA3D_DestroyCommandBufferManager(
382
360
SDL_free (commandBufferContainer );
383
361
}
384
362
385
- manager -> driver .DestroyBuffer (
386
- manager -> driver .driverData ,
387
- manager -> transferBufferPool .fastTransferBuffer -> buffer
388
- );
389
- SDL_free (manager -> transferBufferPool .fastTransferBuffer );
390
-
391
- for (i = 0 ; i < manager -> transferBufferPool .availableSlowTransferBufferCount ; i += 1 )
363
+ for (i = 0 ; i < manager -> transferBufferPool .availableTransferBufferCount ; i += 1 )
392
364
{
393
365
manager -> driver .DestroyBuffer (
394
366
manager -> driver .driverData ,
395
- manager -> transferBufferPool .availableSlowTransferBuffers [i ]-> buffer
367
+ manager -> transferBufferPool .availableTransferBuffers [i ]-> buffer
396
368
);
397
369
398
- SDL_free (manager -> transferBufferPool .availableSlowTransferBuffers [i ]);
370
+ SDL_free (manager -> transferBufferPool .availableTransferBuffers [i ]);
399
371
}
400
- SDL_free (manager -> transferBufferPool .availableSlowTransferBuffers );
372
+ SDL_free (manager -> transferBufferPool .availableTransferBuffers );
401
373
402
374
SDL_DestroyMutex (manager -> commandLock );
403
375
SDL_DestroyMutex (manager -> transferLock );
@@ -759,24 +731,9 @@ FNA3D_TransferBuffer* FNA3D_CommandBuffer_AcquireTransferBuffer(
759
731
);
760
732
}
761
733
762
- /* Is the fast transfer buffer available? */
763
- if ( manager -> transferBufferPool .fastTransferBufferAvailable &&
764
- requiredSize < FAST_TRANSFER_SIZE )
765
- {
766
- transferBuffer = manager -> transferBufferPool .fastTransferBuffer ;
767
- manager -> transferBufferPool .fastTransferBufferAvailable = 0 ;
768
-
769
- commandBufferContainer -> transferBuffers [commandBufferContainer -> transferBufferCount ] = transferBuffer ;
770
- commandBufferContainer -> transferBufferCount += 1 ;
771
-
772
- /* If the fast transfer buffer is available, the offset is always zero */
773
- return transferBuffer ;
774
- }
775
-
776
- /* Nope, let's get a slow buffer */
777
- for (i = 0 ; i < manager -> transferBufferPool .availableSlowTransferBufferCount ; i += 1 )
734
+ for (i = 0 ; i < manager -> transferBufferPool .availableTransferBufferCount ; i += 1 )
778
735
{
779
- transferBuffer = manager -> transferBufferPool .availableSlowTransferBuffers [i ];
736
+ transferBuffer = manager -> transferBufferPool .availableTransferBuffers [i ];
780
737
parentBufferSize = manager -> driver .GetBufferSize (
781
738
manager -> driver .driverData ,
782
739
transferBuffer -> buffer
@@ -788,8 +745,8 @@ FNA3D_TransferBuffer* FNA3D_CommandBuffer_AcquireTransferBuffer(
788
745
commandBufferContainer -> transferBuffers [commandBufferContainer -> transferBufferCount ] = transferBuffer ;
789
746
commandBufferContainer -> transferBufferCount += 1 ;
790
747
791
- manager -> transferBufferPool .availableSlowTransferBuffers [i ] = manager -> transferBufferPool .availableSlowTransferBuffers [manager -> transferBufferPool .availableSlowTransferBufferCount - 1 ];
792
- manager -> transferBufferPool .availableSlowTransferBufferCount -= 1 ;
748
+ manager -> transferBufferPool .availableTransferBuffers [i ] = manager -> transferBufferPool .availableTransferBuffers [manager -> transferBufferPool .availableTransferBufferCount - 1 ];
749
+ manager -> transferBufferPool .availableTransferBufferCount -= 1 ;
793
750
794
751
transferBuffer -> offset = offset ;
795
752
return transferBuffer ;
@@ -809,8 +766,7 @@ FNA3D_TransferBuffer* FNA3D_CommandBuffer_AcquireTransferBuffer(
809
766
transferBuffer -> offset = 0 ;
810
767
transferBuffer -> buffer = manager -> driver .CreateTransferBuffer (
811
768
manager -> driver .driverData ,
812
- size ,
813
- 0
769
+ size
814
770
);
815
771
816
772
if (transferBuffer -> buffer == NULL )
0 commit comments