mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-08 06:05:55 +00:00
This reverts commit 9bf529ec9421dcd6a27b9d07fbe3edf6bea598d3. Reason for revert: Fixed test failure by submitting basic render pass to clear out texture before running the tests. The test was failing previously because the texture pixel color was not cleared before running the tests, causing unexpected pixel colors to be compared. Creating a basic render pass clears the texture, but since the first test fails on submit expectedly, the pixel is never cleared. Bug: dawn:46 Change-Id: Ic190c2d8d6af3f9d8def3370b92c6974a82a0096 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/5500 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Natasha Lee <natlee@microsoft.com>
209 lines
7.7 KiB
C++
209 lines
7.7 KiB
C++
// Copyright 2017 The Dawn Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef DAWNNATIVE_NULL_DEVICENULL_H_
|
|
#define DAWNNATIVE_NULL_DEVICENULL_H_
|
|
|
|
#include "dawn_native/BindGroup.h"
|
|
#include "dawn_native/BindGroupLayout.h"
|
|
#include "dawn_native/Buffer.h"
|
|
#include "dawn_native/CommandBuffer.h"
|
|
#include "dawn_native/CommandEncoder.h"
|
|
#include "dawn_native/ComputePipeline.h"
|
|
#include "dawn_native/Device.h"
|
|
#include "dawn_native/InputState.h"
|
|
#include "dawn_native/PipelineLayout.h"
|
|
#include "dawn_native/Queue.h"
|
|
#include "dawn_native/RenderPipeline.h"
|
|
#include "dawn_native/RingBuffer.h"
|
|
#include "dawn_native/Sampler.h"
|
|
#include "dawn_native/ShaderModule.h"
|
|
#include "dawn_native/StagingBuffer.h"
|
|
#include "dawn_native/SwapChain.h"
|
|
#include "dawn_native/Texture.h"
|
|
#include "dawn_native/ToBackend.h"
|
|
#include "dawn_native/dawn_platform.h"
|
|
|
|
namespace dawn_native { namespace null {
|
|
|
|
class Adapter;
|
|
using BindGroup = BindGroupBase;
|
|
using BindGroupLayout = BindGroupLayoutBase;
|
|
class Buffer;
|
|
class CommandBuffer;
|
|
using ComputePipeline = ComputePipelineBase;
|
|
class Device;
|
|
using InputState = InputStateBase;
|
|
using PipelineLayout = PipelineLayoutBase;
|
|
class Queue;
|
|
using RenderPipeline = RenderPipelineBase;
|
|
using Sampler = SamplerBase;
|
|
using ShaderModule = ShaderModuleBase;
|
|
class SwapChain;
|
|
using Texture = TextureBase;
|
|
using TextureView = TextureViewBase;
|
|
|
|
struct NullBackendTraits {
|
|
using AdapterType = Adapter;
|
|
using BindGroupType = BindGroup;
|
|
using BindGroupLayoutType = BindGroupLayout;
|
|
using BufferType = Buffer;
|
|
using CommandBufferType = CommandBuffer;
|
|
using ComputePipelineType = ComputePipeline;
|
|
using DeviceType = Device;
|
|
using InputStateType = InputState;
|
|
using PipelineLayoutType = PipelineLayout;
|
|
using QueueType = Queue;
|
|
using RenderPipelineType = RenderPipeline;
|
|
using SamplerType = Sampler;
|
|
using ShaderModuleType = ShaderModule;
|
|
using SwapChainType = SwapChain;
|
|
using TextureType = Texture;
|
|
using TextureViewType = TextureView;
|
|
};
|
|
|
|
template <typename T>
|
|
auto ToBackend(T&& common) -> decltype(ToBackendBase<NullBackendTraits>(common)) {
|
|
return ToBackendBase<NullBackendTraits>(common);
|
|
}
|
|
|
|
struct PendingOperation {
|
|
virtual ~PendingOperation() = default;
|
|
virtual void Execute() = 0;
|
|
};
|
|
|
|
class Device : public DeviceBase {
|
|
public:
|
|
Device(Adapter* adapter);
|
|
~Device();
|
|
|
|
CommandBufferBase* CreateCommandBuffer(CommandEncoderBase* encoder) override;
|
|
InputStateBase* CreateInputState(InputStateBuilder* builder) override;
|
|
|
|
Serial GetCompletedCommandSerial() const final override;
|
|
Serial GetLastSubmittedCommandSerial() const final override;
|
|
Serial GetPendingCommandSerial() const override;
|
|
void TickImpl() override;
|
|
|
|
void AddPendingOperation(std::unique_ptr<PendingOperation> operation);
|
|
void SubmitPendingOperations();
|
|
|
|
ResultOrError<std::unique_ptr<StagingBufferBase>> CreateStagingBuffer(size_t size) override;
|
|
MaybeError CopyFromStagingToBuffer(StagingBufferBase* source,
|
|
uint32_t sourceOffset,
|
|
BufferBase* destination,
|
|
uint32_t destinationOffset,
|
|
uint32_t size) override;
|
|
|
|
private:
|
|
ResultOrError<BindGroupBase*> CreateBindGroupImpl(
|
|
const BindGroupDescriptor* descriptor) override;
|
|
ResultOrError<BindGroupLayoutBase*> CreateBindGroupLayoutImpl(
|
|
const BindGroupLayoutDescriptor* descriptor) override;
|
|
ResultOrError<BufferBase*> CreateBufferImpl(const BufferDescriptor* descriptor) override;
|
|
ResultOrError<ComputePipelineBase*> CreateComputePipelineImpl(
|
|
const ComputePipelineDescriptor* descriptor) override;
|
|
ResultOrError<PipelineLayoutBase*> CreatePipelineLayoutImpl(
|
|
const PipelineLayoutDescriptor* descriptor) override;
|
|
ResultOrError<QueueBase*> CreateQueueImpl() override;
|
|
ResultOrError<RenderPipelineBase*> CreateRenderPipelineImpl(
|
|
const RenderPipelineDescriptor* descriptor) override;
|
|
ResultOrError<SamplerBase*> CreateSamplerImpl(const SamplerDescriptor* descriptor) override;
|
|
ResultOrError<ShaderModuleBase*> CreateShaderModuleImpl(
|
|
const ShaderModuleDescriptor* descriptor) override;
|
|
ResultOrError<SwapChainBase*> CreateSwapChainImpl(
|
|
const SwapChainDescriptor* descriptor) override;
|
|
ResultOrError<TextureBase*> CreateTextureImpl(const TextureDescriptor* descriptor) override;
|
|
ResultOrError<TextureViewBase*> CreateTextureViewImpl(
|
|
TextureBase* texture,
|
|
const TextureViewDescriptor* descriptor) override;
|
|
|
|
Serial mCompletedSerial = 0;
|
|
Serial mLastSubmittedSerial = 0;
|
|
std::vector<std::unique_ptr<PendingOperation>> mPendingOperations;
|
|
};
|
|
|
|
class Buffer : public BufferBase {
|
|
public:
|
|
Buffer(Device* device, const BufferDescriptor* descriptor);
|
|
~Buffer();
|
|
|
|
void MapReadOperationCompleted(uint32_t serial, void* ptr, bool isWrite);
|
|
|
|
private:
|
|
MaybeError SetSubDataImpl(uint32_t start, uint32_t count, const uint8_t* data) override;
|
|
void MapReadAsyncImpl(uint32_t serial) override;
|
|
void MapWriteAsyncImpl(uint32_t serial) override;
|
|
void UnmapImpl() override;
|
|
void DestroyImpl() override;
|
|
|
|
void MapAsyncImplCommon(uint32_t serial, bool isWrite);
|
|
|
|
std::unique_ptr<char[]> mBackingData;
|
|
};
|
|
|
|
class CommandBuffer : public CommandBufferBase {
|
|
public:
|
|
CommandBuffer(Device* device, CommandEncoderBase* encoder);
|
|
~CommandBuffer();
|
|
|
|
private:
|
|
CommandIterator mCommands;
|
|
};
|
|
|
|
class Queue : public QueueBase {
|
|
public:
|
|
Queue(Device* device);
|
|
~Queue();
|
|
|
|
private:
|
|
void SubmitImpl(uint32_t commandCount, CommandBufferBase* const* commands) override;
|
|
};
|
|
|
|
class SwapChain : public SwapChainBase {
|
|
public:
|
|
SwapChain(Device* device, const SwapChainDescriptor* descriptor);
|
|
~SwapChain();
|
|
|
|
protected:
|
|
TextureBase* GetNextTextureImpl(const TextureDescriptor* descriptor) override;
|
|
void OnBeforePresent(TextureBase*) override;
|
|
};
|
|
|
|
class NativeSwapChainImpl {
|
|
public:
|
|
using WSIContext = struct {};
|
|
void Init(WSIContext* context);
|
|
DawnSwapChainError Configure(DawnTextureFormat format,
|
|
DawnTextureUsageBit,
|
|
uint32_t width,
|
|
uint32_t height);
|
|
DawnSwapChainError GetNextTexture(DawnSwapChainNextTexture* nextTexture);
|
|
DawnSwapChainError Present();
|
|
dawn::TextureFormat GetPreferredFormat() const;
|
|
};
|
|
|
|
class StagingBuffer : public StagingBufferBase {
|
|
public:
|
|
StagingBuffer(size_t size, Device* device);
|
|
MaybeError Initialize() override;
|
|
|
|
private:
|
|
std::unique_ptr<uint8_t[]> mBuffer;
|
|
};
|
|
|
|
}} // namespace dawn_native::null
|
|
|
|
#endif // DAWNNATIVE_NULL_DEVICENULL_H_
|