diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index 24d08a02a38a845dce0b5f91d7012893f02a83a8..157aa6283acf149f7a0a350a1534f715ef5f3988 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -3882,7 +3882,7 @@ static HRESULT geometry_shader_init_stream_output(struct wined3d_shader *shader,
             return E_INVALIDARG;
         }
 
-        mask = ((1u << e->component_count) - 1) << component_idx;
+        mask = wined3d_mask_from_size(e->component_count) << component_idx;
         if ((output->mask & 0xff & mask) != mask)
         {
             WARN("Invalid component range %u-%u (mask %#x), output mask %#x.\n",