mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-10 05:57:51 +00:00
Emulate store and multisample resolve on Metal
This patch implements "store and MSAA resolve" store operation on Metal drivers that don't support MTLStoreActionStoreAndMultisampleResolve with a workaround that does MSAA resolve in another render pass. Driver workaround is one type of Dawn Toggles. Dawn Toggles will include other optional optimizations and features that can be configured to use or not when we create Dawn Devices. As all Metal try bots don't need this toggle, to better test this patch on the try bots: 1. We add the support of forcing enabling a workaround when starting an Dawn end2end test so that we can test the workaround on the platforms where the workaround is disabled. 2. We add an optional parameter DeviceDescriptor to CreateDevice() so that we can custom the toggles the Dawn device should use. This patch also adds the support of querying toggle details from Instance and the names of the toggles in use from Device. These APIs are tested in the Dawn unittests added in this patch. BUG=dawn:56 TEST=dawn_end2end_tests TEST=dawn_unittests Change-Id: Iae31d2ded6057eee638b6099d3061e9d78b04d55 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/6620 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
This commit is contained in:
committed by
Commit Bot service account
parent
8e97b4c8a5
commit
15d4c2e63b
@@ -47,6 +47,22 @@ namespace dawn_native {
|
||||
class InstanceBase;
|
||||
class AdapterBase;
|
||||
|
||||
// An optional parameter of Adapter::CreateDevice() to send additional information when creating
|
||||
// a Device. For example, we can use it to enable a workaround, optimization or feature.
|
||||
struct DAWN_NATIVE_EXPORT DeviceDescriptor {
|
||||
std::vector<const char*> forceEnabledToggles;
|
||||
std::vector<const char*> forceDisabledToggles;
|
||||
};
|
||||
|
||||
// A struct to record the information of a toggle. A toggle is a code path in Dawn device that
|
||||
// can be manually configured to run or not outside Dawn, including workarounds, special
|
||||
// features and optimizations.
|
||||
struct ToggleInfo {
|
||||
const char* name;
|
||||
const char* description;
|
||||
const char* url;
|
||||
};
|
||||
|
||||
// An adapter is an object that represent on possibility of creating devices in the system.
|
||||
// Most of the time it will represent a combination of a physical GPU and an API. Not that the
|
||||
// same GPU can be represented by multiple adapters but on different APIs.
|
||||
@@ -68,7 +84,7 @@ namespace dawn_native {
|
||||
// Create a device on this adapter, note that the interface will change to include at least
|
||||
// a device descriptor and a pointer to backend specific options.
|
||||
// On an error, nullptr is returned.
|
||||
DawnDevice CreateDevice();
|
||||
DawnDevice CreateDevice(const DeviceDescriptor* deviceDescriptor = nullptr);
|
||||
|
||||
private:
|
||||
AdapterBase* mImpl = nullptr;
|
||||
@@ -107,6 +123,8 @@ namespace dawn_native {
|
||||
// Returns all the adapters that the instance knows about.
|
||||
std::vector<Adapter> GetAdapters() const;
|
||||
|
||||
const ToggleInfo* GetToggleInfo(const char* toggleName);
|
||||
|
||||
private:
|
||||
InstanceBase* mImpl = nullptr;
|
||||
};
|
||||
@@ -114,6 +132,9 @@ namespace dawn_native {
|
||||
// Backend-agnostic API for dawn_native
|
||||
DAWN_NATIVE_EXPORT DawnProcTable GetProcs();
|
||||
|
||||
// Query the names of all the toggles that are enabled in device
|
||||
DAWN_NATIVE_EXPORT std::vector<const char*> GetTogglesUsed(DawnDevice device);
|
||||
|
||||
} // namespace dawn_native
|
||||
|
||||
#endif // DAWNNATIVE_DAWNNATIVE_H_
|
||||
|
||||
Reference in New Issue
Block a user