gecko-dev/dom/webgpu/BindGroupLayout.h
Dzmitry Malyshau 163a4a7ed8 Bug 1709462 - Fix freeing of WebGPU bind group layouts r=jimb
When the pipeline layout is implicit at pipeline creation,
we collect the IDs of BGLs, to be able to produce GPUBindGroupLayout
object upon user request. However, the produced object didn't know if
it owns the ID or borrows it, so it would issue a "drop" when going out of scope.

This change establishes this distinction. In addition, it gets the Pipeline Layout ID,
and together with the BGL ids, they are sent to GPU process upon pipeline destruction.

When the GPU process is done with these IDs used, it will kick back a message to the
Content process, allowing the IDs to be reclaimed.

Differential Revision: https://phabricator.services.mozilla.com/D114649
2021-05-18 16:26:27 +00:00

37 lines
909 B
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef GPU_BindGroupLayout_H_
#define GPU_BindGroupLayout_H_
#include "nsWrapperCache.h"
#include "ObjectModel.h"
#include "mozilla/webgpu/WebGPUTypes.h"
namespace mozilla {
namespace webgpu {
class Device;
class BindGroupLayout final : public ObjectBase, public ChildOf<Device> {
public:
GPU_DECL_CYCLE_COLLECTION(BindGroupLayout)
GPU_DECL_JS_WRAP(BindGroupLayout)
BindGroupLayout(Device* const aParent, RawId aId, bool aOwning);
const RawId mId;
const bool mOwning;
private:
~BindGroupLayout();
void Cleanup();
};
} // namespace webgpu
} // namespace mozilla
#endif // GPU_BindGroupLayout_H_