Fix samples on null backend (add swapchain impl)
BUG=
Change-Id: I96e6c58b4ec46af58f7c0a97c88308075efe68dd
Reviewed-on: https://dawn-review.googlesource.com/c/3700
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_native/null/NullBackend.cpp b/src/dawn_native/null/NullBackend.cpp
index 196f8de..3cd5a41 100644
--- a/src/dawn_native/null/NullBackend.cpp
+++ b/src/dawn_native/null/NullBackend.cpp
@@ -14,6 +14,7 @@
#include "dawn_native/null/NullBackend.h"
+#include "common/SwapChainUtils.h"
#include "dawn_native/BackendConnection.h"
#include "dawn_native/Commands.h"
#include "dawn_native/NullBackend.h"
@@ -261,4 +262,35 @@
void SwapChain::OnBeforePresent(TextureBase*) {
}
+ // CreateNativeSwapChainImpl
+
+ class NativeSwapChainImpl {
+ public:
+ using WSIContext = struct {};
+ void Init(WSIContext* context) {
+ }
+ dawnSwapChainError Configure(dawnTextureFormat format,
+ dawnTextureUsageBit,
+ uint32_t width,
+ uint32_t height) {
+ return DAWN_SWAP_CHAIN_NO_ERROR;
+ }
+ dawnSwapChainError GetNextTexture(dawnSwapChainNextTexture* nextTexture) {
+ return DAWN_SWAP_CHAIN_NO_ERROR;
+ }
+ dawnSwapChainError Present() {
+ return DAWN_SWAP_CHAIN_NO_ERROR;
+ }
+ dawn::TextureFormat GetPreferredFormat() const {
+ return dawn::TextureFormat::R8G8B8A8Unorm;
+ }
+ };
+
+ DAWN_NATIVE_EXPORT dawnSwapChainImplementation CreateNativeSwapChainImpl() {
+ dawnSwapChainImplementation impl;
+ impl = CreateSwapChainImplementation(new NativeSwapChainImpl());
+ impl.textureUsage = DAWN_TEXTURE_USAGE_BIT_PRESENT;
+ return impl;
+ }
+
}} // namespace dawn_native::null
diff --git a/src/include/dawn_native/NullBackend.h b/src/include/dawn_native/NullBackend.h
index be7c3e7..21fe1d0 100644
--- a/src/include/dawn_native/NullBackend.h
+++ b/src/include/dawn_native/NullBackend.h
@@ -16,10 +16,12 @@
#define DAWNNATIVE_NULLBACKEND_H_
#include <dawn/dawn.h>
+#include <dawn/dawn_wsi.h>
#include <dawn_native/dawn_native_export.h>
namespace dawn_native { namespace null {
DAWN_NATIVE_EXPORT dawnDevice CreateDevice();
+ DAWN_NATIVE_EXPORT dawnSwapChainImplementation CreateNativeSwapChainImpl();
}} // namespace dawn_native::null
#endif // DAWNNATIVE_NULLBACKEND_H_
diff --git a/src/utils/NullBinding.cpp b/src/utils/NullBinding.cpp
index 558531e..1620dd2 100644
--- a/src/utils/NullBinding.cpp
+++ b/src/utils/NullBinding.cpp
@@ -26,11 +26,17 @@
return dawn_native::null::CreateDevice();
}
uint64_t GetSwapChainImplementation() override {
- return 0;
+ if (mSwapchainImpl.userData == nullptr) {
+ mSwapchainImpl = dawn_native::null::CreateNativeSwapChainImpl();
+ }
+ return reinterpret_cast<uint64_t>(&mSwapchainImpl);
}
dawnTextureFormat GetPreferredSwapChainTextureFormat() override {
return DAWN_TEXTURE_FORMAT_R8_G8_B8_A8_UNORM;
}
+
+ private:
+ dawnSwapChainImplementation mSwapchainImpl = {};
};
BackendBinding* CreateNullBinding() {