[GPU/WGF] Use ByteAddressBuffer in precompiled shaders

Drivers and hardware may provide more optimal paths for untyped buffers
compared to typed.

Also, ByteAddressBuffer may be bound via a root descriptor in Direct3D 12,
greatly simplifying the binding logic.

ByteAddressBuffer also doesn't have the 128 * 2^20 element count limit that
typed and structured buffers have, and doesn't require the structure stride
to be specified at resource creation time in Direct3D 11.
This commit is contained in:
Triang3l
2026-02-09 21:29:18 +03:00
parent c7f61342d7
commit 80dad41454
211 changed files with 121690 additions and 123176 deletions

View File

@@ -75,76 +75,41 @@ namespace gpu {
const TextureCache::LoadShaderInfo
TextureCache::load_shader_info_[kLoadShaderCount] = {
// k8bpb
{3, 4, 1, 4},
// k16bpb
{4, 4, 2, 4},
// k32bpb
{4, 4, 4, 3},
// k64bpb
{4, 4, 8, 2},
// k128bpb
{4, 4, 16, 1},
// kR5G5B5A1ToB5G5R5A1
{4, 4, 2, 4},
// kR5G6B5ToB5G6R5
{4, 4, 2, 4},
// kR5G5B6ToB5G6R5WithRBGASwizzle
{4, 4, 2, 4},
// kRGBA4ToBGRA4
{4, 4, 2, 4},
// kRGBA4ToARGB4
{4, 4, 2, 4},
// kGBGR8ToGRGB8
{4, 4, 4, 3},
// kGBGR8ToRGB8
{4, 4, 8, 3},
// kBGRG8ToRGBG8
{4, 4, 4, 3},
// kBGRG8ToRGB8
{4, 4, 8, 3},
// kR10G11B11ToRGBA16
{4, 4, 8, 3},
// kR10G11B11ToRGBA16SNorm
{4, 4, 8, 3},
// kR11G11B10ToRGBA16
{4, 4, 8, 3},
// kR11G11B10ToRGBA16SNorm
{4, 4, 8, 3},
// kR16UNormToFloat
{4, 4, 2, 4},
// kR16SNormToFloat
{4, 4, 2, 4},
// kRG16UNormToFloat
{4, 4, 4, 3},
// kRG16SNormToFloat
{4, 4, 4, 3},
// kRGBA16UNormToFloat
{4, 4, 8, 2},
// kRGBA16SNormToFloat
{4, 4, 8, 2},
// kDXT1ToRGBA8
{4, 4, 4, 2},
// kDXT3ToRGBA8
{4, 4, 4, 1},
// kDXT5ToRGBA8
{4, 4, 4, 1},
// kDXNToRG8
{4, 4, 2, 1},
// kDXT3A
{4, 4, 1, 2},
// kDXT3AAs1111ToBGRA4
{4, 4, 2, 2},
// kDXT3AAs1111ToARGB4
{4, 4, 2, 2},
// kDXT5AToR8
{4, 4, 1, 2},
// kCTX1
{4, 4, 2, 2},
// kDepthUnorm
{4, 4, 4, 3},
// kDepthFloat
{4, 4, 4, 3},
{1, 4}, // k8bpb
{2, 4}, // k16bpb
{4, 3}, // k32bpb
{8, 2}, // k64bpb
{16, 1}, // k128bpb
{2, 4}, // kR5G5B5A1ToB5G5R5A1
{2, 4}, // kR5G6B5ToB5G6R5
{2, 4}, // kR5G5B6ToB5G6R5WithRBGASwizzle
{2, 4}, // kRGBA4ToBGRA4
{2, 4}, // kRGBA4ToARGB4
{4, 3}, // kGBGR8ToGRGB8
{8, 3}, // kGBGR8ToRGB8
{4, 3}, // kBGRG8ToRGBG8
{8, 3}, // kBGRG8ToRGB8
{8, 3}, // kR10G11B11ToRGBA16
{8, 3}, // kR10G11B11ToRGBA16SNorm
{8, 3}, // kR11G11B10ToRGBA16
{8, 3}, // kR11G11B10ToRGBA16SNorm
{2, 4}, // kR16UNormToFloat
{2, 4}, // kR16SNormToFloat
{4, 3}, // kRG16UNormToFloat
{4, 3}, // kRG16SNormToFloat
{8, 2}, // kRGBA16UNormToFloat
{8, 2}, // kRGBA16SNormToFloat
{4, 2}, // kDXT1ToRGBA8
{4, 1}, // kDXT3ToRGBA8
{4, 1}, // kDXT5ToRGBA8
{2, 1}, // kDXNToRG8
{1, 2}, // kDXT3A
{2, 2}, // kDXT3AAs1111ToBGRA4
{2, 2}, // kDXT3AAs1111ToARGB4
{1, 2}, // kDXT5AToR8
{2, 2}, // kCTX1
{4, 3}, // kDepthUnorm
{4, 3}, // kDepthFloat
};
TextureCache::TextureCache(const RegisterFile& register_file,