blob: 5bb118ae4c8ebaa1056cba613209268eb05abad7 [file] [log] [blame]
// Copyright 2021 The Fuchsia 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 RENDER_COMMAND_STREAMER_H
#define RENDER_COMMAND_STREAMER_H
#include "engine_command_streamer.h"
class RenderEngineCommandStreamer : public EngineCommandStreamer {
public:
explicit RenderEngineCommandStreamer(EngineCommandStreamer::Owner* owner,
std::unique_ptr<GpuMapping> hw_status_page);
static std::unique_ptr<RenderInitBatch> CreateRenderInitBatch(uint32_t device_id);
// |address_space| used to map the render init batch.
bool RenderInit(std::shared_ptr<MsdIntelContext> context,
std::unique_ptr<RenderInitBatch> init_batch,
std::shared_ptr<AddressSpace> address_space);
// Creates an indirect context batch to be used by all contexst,
// mapped into the given |address_space| which should be the global GTT.
std::unique_ptr<IndirectContextBatch> CreateIndirectContextBatch(
std::shared_ptr<AddressSpace> address_space);
private:
uint32_t GetContextSize() const override { return PAGE_SIZE * 20; }
bool WriteBatchToRingBuffer(MappedBatch* mapped_batch, uint32_t* sequence_number_out) override;
bool PipeControl(MsdIntelContext* context, uint32_t flags, uint32_t* sequence_number);
friend class TestEngineCommandStreamer;
};
#endif // RENDER_COMMAND_STREAMER_H