@@ -475,6 +475,115 @@ static DXGI_FORMAT SDLToD3D12_DepthFormat[] = {
475
475
};
476
476
SDL_COMPILE_TIME_ASSERT (SDLToD3D12_DepthFormat , SDL_arraysize (SDLToD3D12_DepthFormat ) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE );
477
477
478
+ static DXGI_FORMAT SDLToD3D12_TypelessFormat [] = {
479
+ DXGI_FORMAT_UNKNOWN , // INVALID
480
+ DXGI_FORMAT_UNKNOWN , // A8_UNORM
481
+ DXGI_FORMAT_UNKNOWN , // R8_UNORM
482
+ DXGI_FORMAT_UNKNOWN , // R8G8_UNORM
483
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_UNORM
484
+ DXGI_FORMAT_UNKNOWN , // R16_UNORM
485
+ DXGI_FORMAT_UNKNOWN , // R16G16_UNORM
486
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_UNORM
487
+ DXGI_FORMAT_UNKNOWN , // R10G10B10A2_UNORM
488
+ DXGI_FORMAT_UNKNOWN , // B5G6R5_UNORM
489
+ DXGI_FORMAT_UNKNOWN , // B5G5R5A1_UNORM
490
+ DXGI_FORMAT_UNKNOWN , // B4G4R4A4_UNORM
491
+ DXGI_FORMAT_UNKNOWN , // B8G8R8A8_UNORM
492
+ DXGI_FORMAT_UNKNOWN , // BC1_UNORM
493
+ DXGI_FORMAT_UNKNOWN , // BC2_UNORM
494
+ DXGI_FORMAT_UNKNOWN , // BC3_UNORM
495
+ DXGI_FORMAT_UNKNOWN , // BC4_UNORM
496
+ DXGI_FORMAT_UNKNOWN , // BC5_UNORM
497
+ DXGI_FORMAT_UNKNOWN , // BC7_UNORM
498
+ DXGI_FORMAT_UNKNOWN , // BC6H_FLOAT
499
+ DXGI_FORMAT_UNKNOWN , // BC6H_UFLOAT
500
+ DXGI_FORMAT_UNKNOWN , // R8_SNORM
501
+ DXGI_FORMAT_UNKNOWN , // R8G8_SNORM
502
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_SNORM
503
+ DXGI_FORMAT_UNKNOWN , // R16_SNORM
504
+ DXGI_FORMAT_UNKNOWN , // R16G16_SNORM
505
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_SNORM
506
+ DXGI_FORMAT_UNKNOWN , // R16_FLOAT
507
+ DXGI_FORMAT_UNKNOWN , // R16G16_FLOAT
508
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_FLOAT
509
+ DXGI_FORMAT_UNKNOWN , // R32_FLOAT
510
+ DXGI_FORMAT_UNKNOWN , // R32G32_FLOAT
511
+ DXGI_FORMAT_UNKNOWN , // R32G32B32A32_FLOAT
512
+ DXGI_FORMAT_UNKNOWN , // R11G11B10_UFLOAT
513
+ DXGI_FORMAT_UNKNOWN , // R8_UINT
514
+ DXGI_FORMAT_UNKNOWN , // R8G8_UINT
515
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_UINT
516
+ DXGI_FORMAT_UNKNOWN , // R16_UINT
517
+ DXGI_FORMAT_UNKNOWN , // R16G16_UINT
518
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_UINT
519
+ DXGI_FORMAT_UNKNOWN , // R32_UINT
520
+ DXGI_FORMAT_UNKNOWN , // R32G32_UINT
521
+ DXGI_FORMAT_UNKNOWN , // R32G32B32A32_UINT
522
+ DXGI_FORMAT_UNKNOWN , // R8_INT
523
+ DXGI_FORMAT_UNKNOWN , // R8G8_INT
524
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_INT
525
+ DXGI_FORMAT_UNKNOWN , // R16_INT
526
+ DXGI_FORMAT_UNKNOWN , // R16G16_INT
527
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_INT
528
+ DXGI_FORMAT_UNKNOWN , // R32_INT
529
+ DXGI_FORMAT_UNKNOWN , // R32G32_INT
530
+ DXGI_FORMAT_UNKNOWN , // R32G32B32A32_INT
531
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_UNORM_SRGB
532
+ DXGI_FORMAT_UNKNOWN , // B8G8R8A8_UNORM_SRGB
533
+ DXGI_FORMAT_UNKNOWN , // BC1_UNORM_SRGB
534
+ DXGI_FORMAT_UNKNOWN , // BC2_UNORM_SRGB
535
+ DXGI_FORMAT_UNKNOWN , // BC3_UNORM_SRGB
536
+ DXGI_FORMAT_UNKNOWN , // BC7_UNORM_SRGB
537
+ DXGI_FORMAT_R16_TYPELESS , // D16_UNORM
538
+ DXGI_FORMAT_R24G8_TYPELESS , // D24_UNORM
539
+ DXGI_FORMAT_R32_TYPELESS , // D32_FLOAT
540
+ DXGI_FORMAT_R24G8_TYPELESS , // D24_UNORM_S8_UINT
541
+ DXGI_FORMAT_R32G8X24_TYPELESS , // D32_FLOAT_S8_UINT
542
+ DXGI_FORMAT_UNKNOWN , // ASTC_4x4_UNORM
543
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x4_UNORM
544
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x5_UNORM
545
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x5_UNORM
546
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x6_UNORM
547
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x5_UNORM
548
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x6_UNORM
549
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x8_UNORM
550
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x5_UNORM
551
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x6_UNORM
552
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x8_UNORM
553
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x10_UNORM
554
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x10_UNORM
555
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x12_UNORM
556
+ DXGI_FORMAT_UNKNOWN , // ASTC_4x4_UNORM_SRGB
557
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x4_UNORM_SRGB
558
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x5_UNORM_SRGB
559
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x5_UNORM_SRGB
560
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x6_UNORM_SRGB
561
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x5_UNORM_SRGB
562
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x6_UNORM_SRGB
563
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x8_UNORM_SRGB
564
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x5_UNORM_SRGB
565
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x6_UNORM_SRGB
566
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x8_UNORM_SRGB
567
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x10_UNORM_SRGB
568
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x10_UNORM_SRGB
569
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x12_UNORM_SRGB
570
+ DXGI_FORMAT_UNKNOWN , // ASTC_4x4_FLOAT
571
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x4_FLOAT
572
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x5_FLOAT
573
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x5_FLOAT
574
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x6_FLOAT
575
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x5_FLOAT
576
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x6_FLOAT
577
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x8_FLOAT
578
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x5_FLOAT
579
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x6_FLOAT
580
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x8_FLOAT
581
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x10_FLOAT
582
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x10_FLOAT
583
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x12_FLOAT
584
+ };
585
+ SDL_COMPILE_TIME_ASSERT (SDLToD3D12_TypelessFormat , SDL_arraysize (SDLToD3D12_TypelessFormat ) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE );
586
+
478
587
static D3D12_COMPARISON_FUNC SDLToD3D12_CompareOp [] = {
479
588
D3D12_COMPARISON_FUNC_NEVER , // INVALID
480
589
D3D12_COMPARISON_FUNC_NEVER , // NEVER
@@ -3188,6 +3297,10 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3188
3297
D3D12_CLEAR_VALUE clearValue ;
3189
3298
DXGI_FORMAT format ;
3190
3299
bool useClearValue = false;
3300
+ bool needsSRV =
3301
+ (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_SAMPLER ) ||
3302
+ (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ ) ||
3303
+ (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ );
3191
3304
bool needsUAV =
3192
3305
(createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_WRITE ) ||
3193
3306
(createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE );
@@ -3207,6 +3320,7 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3207
3320
if (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COLOR_TARGET ) {
3208
3321
resourceFlags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ;
3209
3322
useClearValue = true;
3323
+ clearValue .Format = format ;
3210
3324
clearValue .Color [0 ] = SDL_GetFloatProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_R_FLOAT , 0 );
3211
3325
clearValue .Color [1 ] = SDL_GetFloatProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_G_FLOAT , 0 );
3212
3326
clearValue .Color [2 ] = SDL_GetFloatProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_B_FLOAT , 0 );
@@ -3216,9 +3330,10 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3216
3330
if (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET ) {
3217
3331
resourceFlags |= D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL ;
3218
3332
useClearValue = true;
3333
+ clearValue .Format = SDLToD3D12_DepthFormat [createinfo -> format ];
3219
3334
clearValue .DepthStencil .Depth = SDL_GetFloatProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_DEPTH_FLOAT , 0 );
3220
3335
clearValue .DepthStencil .Stencil = (UINT8 )SDL_GetNumberProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_NUMBER , 0 );
3221
- format = SDLToD3D12_DepthFormat [createinfo -> format ];
3336
+ format = needsSRV ? SDLToD3D12_TypelessFormat [ createinfo -> format ] : SDLToD3D12_DepthFormat [createinfo -> format ];
3222
3337
}
3223
3338
3224
3339
if (needsUAV ) {
@@ -3260,7 +3375,6 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3260
3375
}
3261
3376
3262
3377
initialState = isSwapchainTexture ? D3D12_RESOURCE_STATE_PRESENT : D3D12_INTERNAL_DefaultTextureResourceState (createinfo -> usage );
3263
- clearValue .Format = desc .Format ;
3264
3378
3265
3379
res = ID3D12Device_CreateCommittedResource (
3266
3380
renderer -> device ,
@@ -3280,9 +3394,7 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3280
3394
texture -> resource = handle ;
3281
3395
3282
3396
// Create the SRV if applicable
3283
- if ((createinfo -> usage & SDL_GPU_TEXTUREUSAGE_SAMPLER ) ||
3284
- (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ ) ||
3285
- (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ )) {
3397
+ if (needsSRV ) {
3286
3398
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc ;
3287
3399
3288
3400
D3D12_INTERNAL_AssignStagingDescriptorHandle (
0 commit comments