diff --git a/packages/webgpu/cpp/rnwgpu/SurfaceRegistry.h b/packages/webgpu/cpp/rnwgpu/SurfaceRegistry.h index 3056cef52..9eec01472 100644 --- a/packages/webgpu/cpp/rnwgpu/SurfaceRegistry.h +++ b/packages/webgpu/cpp/rnwgpu/SurfaceRegistry.h @@ -154,6 +154,21 @@ class SurfaceInfo { private: void _configure() { if (surface) { + wgpu::SurfaceCapabilities capabilities; + surface.GetCapabilities(&capabilities); + + // Check if requested alpha mode is supported + bool alphaModeSupported = false; + for (size_t i = 0; i < capabilities.alphaModeCount; i++) { + if (capabilities.alphaModes[i] == config.alphaMode) { + alphaModeSupported = true; + break; + } + } + // Revert to Auto if requested mode is not supported + if (!alphaModeSupported) { + config.alphaMode = wgpu::CompositeAlphaMode::Auto; + } surface.Configure(&config); } else { wgpu::TextureDescriptor textureDesc; diff --git a/packages/webgpu/cpp/rnwgpu/api/GPUCanvasContext.cpp b/packages/webgpu/cpp/rnwgpu/api/GPUCanvasContext.cpp index 00b7ff257..c90acec44 100644 --- a/packages/webgpu/cpp/rnwgpu/api/GPUCanvasContext.cpp +++ b/packages/webgpu/cpp/rnwgpu/api/GPUCanvasContext.cpp @@ -20,10 +20,7 @@ void GPUCanvasContext::configure( !conv(surfaceConfiguration.format, configuration->format)) { throw std::runtime_error("Error with SurfaceConfiguration"); } - -#ifdef __APPLE__ surfaceConfiguration.alphaMode = configuration->alphaMode; -#endif _surfaceInfo->configure(surfaceConfiguration); }