@@ -463,6 +463,115 @@ static DXGI_FORMAT SDLToD3D12_DepthFormat[] = {
463
463
};
464
464
SDL_COMPILE_TIME_ASSERT (SDLToD3D12_DepthFormat , SDL_arraysize (SDLToD3D12_DepthFormat ) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE );
465
465
466
+ static DXGI_FORMAT SDLToD3D12_TypelessFormat [] = {
467
+ DXGI_FORMAT_UNKNOWN , // INVALID
468
+ DXGI_FORMAT_UNKNOWN , // A8_UNORM
469
+ DXGI_FORMAT_UNKNOWN , // R8_UNORM
470
+ DXGI_FORMAT_UNKNOWN , // R8G8_UNORM
471
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_UNORM
472
+ DXGI_FORMAT_UNKNOWN , // R16_UNORM
473
+ DXGI_FORMAT_UNKNOWN , // R16G16_UNORM
474
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_UNORM
475
+ DXGI_FORMAT_UNKNOWN , // R10G10B10A2_UNORM
476
+ DXGI_FORMAT_UNKNOWN , // B5G6R5_UNORM
477
+ DXGI_FORMAT_UNKNOWN , // B5G5R5A1_UNORM
478
+ DXGI_FORMAT_UNKNOWN , // B4G4R4A4_UNORM
479
+ DXGI_FORMAT_UNKNOWN , // B8G8R8A8_UNORM
480
+ DXGI_FORMAT_UNKNOWN , // BC1_UNORM
481
+ DXGI_FORMAT_UNKNOWN , // BC2_UNORM
482
+ DXGI_FORMAT_UNKNOWN , // BC3_UNORM
483
+ DXGI_FORMAT_UNKNOWN , // BC4_UNORM
484
+ DXGI_FORMAT_UNKNOWN , // BC5_UNORM
485
+ DXGI_FORMAT_UNKNOWN , // BC7_UNORM
486
+ DXGI_FORMAT_UNKNOWN , // BC6H_FLOAT
487
+ DXGI_FORMAT_UNKNOWN , // BC6H_UFLOAT
488
+ DXGI_FORMAT_UNKNOWN , // R8_SNORM
489
+ DXGI_FORMAT_UNKNOWN , // R8G8_SNORM
490
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_SNORM
491
+ DXGI_FORMAT_UNKNOWN , // R16_SNORM
492
+ DXGI_FORMAT_UNKNOWN , // R16G16_SNORM
493
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_SNORM
494
+ DXGI_FORMAT_UNKNOWN , // R16_FLOAT
495
+ DXGI_FORMAT_UNKNOWN , // R16G16_FLOAT
496
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_FLOAT
497
+ DXGI_FORMAT_UNKNOWN , // R32_FLOAT
498
+ DXGI_FORMAT_UNKNOWN , // R32G32_FLOAT
499
+ DXGI_FORMAT_UNKNOWN , // R32G32B32A32_FLOAT
500
+ DXGI_FORMAT_UNKNOWN , // R11G11B10_UFLOAT
501
+ DXGI_FORMAT_UNKNOWN , // R8_UINT
502
+ DXGI_FORMAT_UNKNOWN , // R8G8_UINT
503
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_UINT
504
+ DXGI_FORMAT_UNKNOWN , // R16_UINT
505
+ DXGI_FORMAT_UNKNOWN , // R16G16_UINT
506
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_UINT
507
+ DXGI_FORMAT_UNKNOWN , // R32_UINT
508
+ DXGI_FORMAT_UNKNOWN , // R32G32_UINT
509
+ DXGI_FORMAT_UNKNOWN , // R32G32B32A32_UINT
510
+ DXGI_FORMAT_UNKNOWN , // R8_INT
511
+ DXGI_FORMAT_UNKNOWN , // R8G8_INT
512
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_INT
513
+ DXGI_FORMAT_UNKNOWN , // R16_INT
514
+ DXGI_FORMAT_UNKNOWN , // R16G16_INT
515
+ DXGI_FORMAT_UNKNOWN , // R16G16B16A16_INT
516
+ DXGI_FORMAT_UNKNOWN , // R32_INT
517
+ DXGI_FORMAT_UNKNOWN , // R32G32_INT
518
+ DXGI_FORMAT_UNKNOWN , // R32G32B32A32_INT
519
+ DXGI_FORMAT_UNKNOWN , // R8G8B8A8_UNORM_SRGB
520
+ DXGI_FORMAT_UNKNOWN , // B8G8R8A8_UNORM_SRGB
521
+ DXGI_FORMAT_UNKNOWN , // BC1_UNORM_SRGB
522
+ DXGI_FORMAT_UNKNOWN , // BC2_UNORM_SRGB
523
+ DXGI_FORMAT_UNKNOWN , // BC3_UNORM_SRGB
524
+ DXGI_FORMAT_UNKNOWN , // BC7_UNORM_SRGB
525
+ DXGI_FORMAT_R16_TYPELESS , // D16_UNORM
526
+ DXGI_FORMAT_R24G8_TYPELESS , // D24_UNORM
527
+ DXGI_FORMAT_R32_TYPELESS , // D32_FLOAT
528
+ DXGI_FORMAT_R24G8_TYPELESS , // D24_UNORM_S8_UINT
529
+ DXGI_FORMAT_R32G8X24_TYPELESS , // D32_FLOAT_S8_UINT
530
+ DXGI_FORMAT_UNKNOWN , // ASTC_4x4_UNORM
531
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x4_UNORM
532
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x5_UNORM
533
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x5_UNORM
534
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x6_UNORM
535
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x5_UNORM
536
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x6_UNORM
537
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x8_UNORM
538
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x5_UNORM
539
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x6_UNORM
540
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x8_UNORM
541
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x10_UNORM
542
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x10_UNORM
543
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x12_UNORM
544
+ DXGI_FORMAT_UNKNOWN , // ASTC_4x4_UNORM_SRGB
545
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x4_UNORM_SRGB
546
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x5_UNORM_SRGB
547
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x5_UNORM_SRGB
548
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x6_UNORM_SRGB
549
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x5_UNORM_SRGB
550
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x6_UNORM_SRGB
551
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x8_UNORM_SRGB
552
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x5_UNORM_SRGB
553
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x6_UNORM_SRGB
554
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x8_UNORM_SRGB
555
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x10_UNORM_SRGB
556
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x10_UNORM_SRGB
557
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x12_UNORM_SRGB
558
+ DXGI_FORMAT_UNKNOWN , // ASTC_4x4_FLOAT
559
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x4_FLOAT
560
+ DXGI_FORMAT_UNKNOWN , // ASTC_5x5_FLOAT
561
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x5_FLOAT
562
+ DXGI_FORMAT_UNKNOWN , // ASTC_6x6_FLOAT
563
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x5_FLOAT
564
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x6_FLOAT
565
+ DXGI_FORMAT_UNKNOWN , // ASTC_8x8_FLOAT
566
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x5_FLOAT
567
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x6_FLOAT
568
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x8_FLOAT
569
+ DXGI_FORMAT_UNKNOWN , // ASTC_10x10_FLOAT
570
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x10_FLOAT
571
+ DXGI_FORMAT_UNKNOWN , // ASTC_12x12_FLOAT
572
+ };
573
+ SDL_COMPILE_TIME_ASSERT (SDLToD3D12_TypelessFormat , SDL_arraysize (SDLToD3D12_TypelessFormat ) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE );
574
+
466
575
static D3D12_COMPARISON_FUNC SDLToD3D12_CompareOp [] = {
467
576
D3D12_COMPARISON_FUNC_NEVER , // INVALID
468
577
D3D12_COMPARISON_FUNC_NEVER , // NEVER
@@ -3184,6 +3293,10 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3184
3293
D3D12_CLEAR_VALUE clearValue ;
3185
3294
DXGI_FORMAT format ;
3186
3295
bool useClearValue = false;
3296
+ bool needsSRV =
3297
+ (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_SAMPLER ) ||
3298
+ (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ ) ||
3299
+ (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ );
3187
3300
bool needsUAV =
3188
3301
(createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_WRITE ) ||
3189
3302
(createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE );
@@ -3203,6 +3316,7 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3203
3316
if (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COLOR_TARGET ) {
3204
3317
resourceFlags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ;
3205
3318
useClearValue = true;
3319
+ clearValue .Format = format ;
3206
3320
clearValue .Color [0 ] = SDL_GetFloatProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_R_FLOAT , 0 );
3207
3321
clearValue .Color [1 ] = SDL_GetFloatProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_G_FLOAT , 0 );
3208
3322
clearValue .Color [2 ] = SDL_GetFloatProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_B_FLOAT , 0 );
@@ -3212,9 +3326,10 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3212
3326
if (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET ) {
3213
3327
resourceFlags |= D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL ;
3214
3328
useClearValue = true;
3329
+ clearValue .Format = SDLToD3D12_DepthFormat [createinfo -> format ];
3215
3330
clearValue .DepthStencil .Depth = SDL_GetFloatProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_DEPTH_FLOAT , 0 );
3216
3331
clearValue .DepthStencil .Stencil = (UINT8 )SDL_GetNumberProperty (createinfo -> props , SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_NUMBER , 0 );
3217
- format = SDLToD3D12_DepthFormat [createinfo -> format ];
3332
+ format = needsSRV ? SDLToD3D12_TypelessFormat [ createinfo -> format ] : SDLToD3D12_DepthFormat [createinfo -> format ];
3218
3333
}
3219
3334
3220
3335
if (needsUAV ) {
@@ -3256,7 +3371,6 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3256
3371
}
3257
3372
3258
3373
initialState = isSwapchainTexture ? D3D12_RESOURCE_STATE_PRESENT : D3D12_INTERNAL_DefaultTextureResourceState (createinfo -> usage );
3259
- clearValue .Format = desc .Format ;
3260
3374
3261
3375
res = ID3D12Device_CreateCommittedResource (
3262
3376
renderer -> device ,
@@ -3276,9 +3390,7 @@ static D3D12Texture *D3D12_INTERNAL_CreateTexture(
3276
3390
texture -> resource = handle ;
3277
3391
3278
3392
// Create the SRV if applicable
3279
- if ((createinfo -> usage & SDL_GPU_TEXTUREUSAGE_SAMPLER ) ||
3280
- (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ ) ||
3281
- (createinfo -> usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ )) {
3393
+ if (needsSRV ) {
3282
3394
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc ;
3283
3395
3284
3396
D3D12_INTERNAL_AssignStagingDescriptorHandle (
0 commit comments