blob: a377171ec90ba4dd301afce604c5afacf43f6354 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef GPU_COMMAND_BUFFER_CLIENT_DAWN_CLIENT_SERIALIZER_H_
#define GPU_COMMAND_BUFFER_CLIENT_DAWN_CLIENT_SERIALIZER_H_
#include <dawn_wire/WireClient.h>
#include <memory>
#include "gpu/command_buffer/client/transfer_buffer.h"
namespace gpu {
struct SharedMemoryLimits;
class TransferBuffer;
namespace webgpu {
class DawnClientMemoryTransferService;
class WebGPUCmdHelper;
class WebGPUImplementation;
class DawnClientSerializer final : public dawn_wire::CommandSerializer {
public:
static std::unique_ptr<DawnClientSerializer> Create(
WebGPUImplementation* client,
WebGPUCmdHelper* helper,
DawnClientMemoryTransferService* memory_transfer_service,
const SharedMemoryLimits& limits);
DawnClientSerializer(WebGPUImplementation* client,
WebGPUCmdHelper* helper,
DawnClientMemoryTransferService* memory_transfer_service,
std::unique_ptr<TransferBuffer> transfer_buffer,
uint32_t buffer_initial_size);
~DawnClientSerializer() override;
// dawn_wire::CommandSerializer implementation
size_t GetMaximumAllocationSize() const final;
void* GetCmdSpace(size_t size) final;
bool Flush() final;
// Signal that it's important that the previously encoded commands are
// flushed. Calling |AwaitingFlush| will return whether or not a flush still
// needs to occur.
void SetAwaitingFlush(bool awaiting_flush);
// Check if the serializer has commands that have been serialized but not
// flushed after |SetAwaitingFlush| was passed |true|.
bool AwaitingFlush() const { return awaiting_flush_; }
// Disconnect the serializer. Commands are forgotten and future calls to
// |GetCmdSpace| will do nothing.
void Disconnect();
private:
WebGPUImplementation* client_;
WebGPUCmdHelper* helper_;
DawnClientMemoryTransferService* memory_transfer_service_;
uint32_t put_offset_ = 0;
std::unique_ptr<TransferBuffer> transfer_buffer_;
uint32_t buffer_initial_size_;
ScopedTransferBufferPtr buffer_;
bool awaiting_flush_ = false;
};
} // namespace webgpu
} // namespace gpu
#endif // GPU_COMMAND_BUFFER_CLIENT_DAWN_CLIENT_SERIALIZER_H_