Skip to content

Commit b08d79b

Browse files
GPU: Check that a texture format is valid for compute writes (#13044)
1 parent 604c192 commit b08d79b

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed

src/gpu/SDL_gpu.c

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,114 @@
186186
#define COPYPASS_DEVICE \
187187
((CommandBufferCommonHeader *)COPYPASS_COMMAND_BUFFER)->device
188188

189+
static bool TextureFormatIsComputeWritable[] = {
190+
false, // INVALID
191+
false, // A8_UNORM
192+
true, // R8_UNORM
193+
true, // R8G8_UNORM
194+
true, // R8G8B8A8_UNORM
195+
true, // R16_UNORM
196+
true, // R16G16_UNORM
197+
true, // R16G16B16A16_UNORM
198+
false, // R10G10B10A2_UNORM
199+
false, // B5G6R5_UNORM
200+
false, // B5G5R5A1_UNORM
201+
false, // B4G4R4A4_UNORM
202+
false, // B8G8R8A8_UNORM
203+
false, // BC1_UNORM
204+
false, // BC2_UNORM
205+
false, // BC3_UNORM
206+
false, // BC4_UNORM
207+
false, // BC5_UNORM
208+
false, // BC7_UNORM
209+
false, // BC6H_FLOAT
210+
false, // BC6H_UFLOAT
211+
true, // R8_SNORM
212+
true, // R8G8_SNORM
213+
true, // R8G8B8A8_SNORM
214+
true, // R16_SNORM
215+
true, // R16G16_SNORM
216+
true, // R16G16B16A16_SNORM
217+
true, // R16_FLOAT
218+
true, // R16G16_FLOAT
219+
true, // R16G16B16A16_FLOAT
220+
true, // R32_FLOAT
221+
true, // R32G32_FLOAT
222+
true, // R32G32B32A32_FLOAT
223+
false, // R11G11B10_UFLOAT
224+
true, // R8_UINT
225+
true, // R8G8_UINT
226+
true, // R8G8B8A8_UINT
227+
true, // R16_UINT
228+
true, // R16G16_UINT
229+
true, // R16G16B16A16_UINT
230+
true, // R32_UINT
231+
true, // R32G32_UINT
232+
true, // R32G32B32A32_UINT
233+
true, // R8_INT
234+
true, // R8G8_INT
235+
true, // R8G8B8A8_INT
236+
true, // R16_INT
237+
true, // R16G16_INT
238+
true, // R16G16B16A16_INT
239+
true, // R32_INT
240+
true, // R32G32_INT
241+
true, // R32G32B32A32_INT
242+
false, // R8G8B8A8_UNORM_SRGB
243+
false, // B8G8R8A8_UNORM_SRGB
244+
false, // BC1_UNORM_SRGB
245+
false, // BC3_UNORM_SRGB
246+
false, // BC3_UNORM_SRGB
247+
false, // BC7_UNORM_SRGB
248+
false, // D16_UNORM
249+
false, // D24_UNORM
250+
false, // D32_FLOAT
251+
false, // D24_UNORM_S8_UINT
252+
false, // D32_FLOAT_S8_UINT
253+
false, // ASTC_4x4_UNORM
254+
false, // ASTC_5x4_UNORM
255+
false, // ASTC_5x5_UNORM
256+
false, // ASTC_6x5_UNORM
257+
false, // ASTC_6x6_UNORM
258+
false, // ASTC_8x5_UNORM
259+
false, // ASTC_8x6_UNORM
260+
false, // ASTC_8x8_UNORM
261+
false, // ASTC_10x5_UNORM
262+
false, // ASTC_10x6_UNORM
263+
false, // ASTC_10x8_UNORM
264+
false, // ASTC_10x10_UNORM
265+
false, // ASTC_12x10_UNORM
266+
false, // ASTC_12x12_UNORM
267+
false, // ASTC_4x4_UNORM_SRGB
268+
false, // ASTC_5x4_UNORM_SRGB
269+
false, // ASTC_5x5_UNORM_SRGB
270+
false, // ASTC_6x5_UNORM_SRGB
271+
false, // ASTC_6x6_UNORM_SRGB
272+
false, // ASTC_8x5_UNORM_SRGB
273+
false, // ASTC_8x6_UNORM_SRGB
274+
false, // ASTC_8x8_UNORM_SRGB
275+
false, // ASTC_10x5_UNORM_SRGB
276+
false, // ASTC_10x6_UNORM_SRGB
277+
false, // ASTC_10x8_UNORM_SRGB
278+
false, // ASTC_10x10_UNORM_SRGB
279+
false, // ASTC_12x10_UNORM_SRGB
280+
false, // ASTC_12x12_UNORM_SRGB
281+
false, // ASTC_4x4_FLOAT
282+
false, // ASTC_5x4_FLOAT
283+
false, // ASTC_5x5_FLOAT
284+
false, // ASTC_6x5_FLOAT
285+
false, // ASTC_6x6_FLOAT
286+
false, // ASTC_8x5_FLOAT
287+
false, // ASTC_8x6_FLOAT
288+
false, // ASTC_8x8_FLOAT
289+
false, // ASTC_10x5_FLOAT
290+
false, // ASTC_10x6_FLOAT
291+
false, // ASTC_10x8_FLOAT
292+
false, // ASTC_10x10_FLOAT
293+
false, // ASTC_12x10_FLOAT
294+
false // ASTC_12x12_FLOAT
295+
};
296+
189297
// Drivers
190298

191299
#ifndef SDL_GPU_DISABLED
@@ -760,6 +868,13 @@ bool SDL_GPUTextureSupportsFormat(
760868
CHECK_TEXTUREFORMAT_ENUM_INVALID(format, false)
761869
}
762870

871+
if ((usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_WRITE) ||
872+
(usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE)) {
873+
if (!TextureFormatIsComputeWritable[format]) {
874+
return false;
875+
}
876+
}
877+
763878
return device->SupportsTextureFormat(
764879
device->driverData,
765880
format,

0 commit comments

Comments
 (0)