MTLContext provides functionality for command encoding, binding management and graphics device management. MTLImmediate provides simple draw enablement with dynamically encoded data. These draws utilise temporary scratch buffer memory to provide minimal bandwidth overhead during workload submission.
This patch also contains empty placeholders for MTLBatch and MTLDrawList to enable testing of first pixels on-screen without failure.
The Metal API also requires access to the GHOST_Context to ensure the same pre-initialized Metal GPU device is used by the viewport. Given the explicit nature of Metal, explicit control is also needed over presentation, to ensure correct work scheduling and rendering pipeline state.
Authored by Apple: Michael Parkin-White
Ref T96261
(The diff is based on 043f59cb3b)
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D15953
63 lines
1.7 KiB
C++
63 lines
1.7 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright 2020 Blender Foundation. All rights reserved. */
|
|
|
|
/** \file
|
|
* \ingroup gpu
|
|
*
|
|
* GPUBackend derived class contain allocators that do not need a context bound.
|
|
* The backend is init at startup and is accessible using GPU_backend_get() */
|
|
|
|
#pragma once
|
|
|
|
#include "GPU_vertex_buffer.h"
|
|
|
|
namespace blender {
|
|
namespace gpu {
|
|
|
|
class Context;
|
|
|
|
class Batch;
|
|
class DrawList;
|
|
class FrameBuffer;
|
|
class IndexBuf;
|
|
class QueryPool;
|
|
class Shader;
|
|
class Texture;
|
|
class UniformBuf;
|
|
class StorageBuf;
|
|
class VertBuf;
|
|
|
|
class GPUBackend {
|
|
public:
|
|
virtual ~GPUBackend() = default;
|
|
virtual void delete_resources() = 0;
|
|
|
|
static GPUBackend *get();
|
|
|
|
virtual void samplers_update() = 0;
|
|
virtual void compute_dispatch(int groups_x_len, int groups_y_len, int groups_z_len) = 0;
|
|
virtual void compute_dispatch_indirect(StorageBuf *indirect_buf) = 0;
|
|
|
|
virtual Context *context_alloc(void *ghost_window, void *ghost_context) = 0;
|
|
|
|
virtual Batch *batch_alloc() = 0;
|
|
virtual DrawList *drawlist_alloc(int list_length) = 0;
|
|
virtual FrameBuffer *framebuffer_alloc(const char *name) = 0;
|
|
virtual IndexBuf *indexbuf_alloc() = 0;
|
|
virtual QueryPool *querypool_alloc() = 0;
|
|
virtual Shader *shader_alloc(const char *name) = 0;
|
|
virtual Texture *texture_alloc(const char *name) = 0;
|
|
virtual UniformBuf *uniformbuf_alloc(int size, const char *name) = 0;
|
|
virtual StorageBuf *storagebuf_alloc(int size, GPUUsageType usage, const char *name) = 0;
|
|
virtual VertBuf *vertbuf_alloc() = 0;
|
|
|
|
/* Render Frame Coordination --
|
|
* Used for performing per-frame actions globally */
|
|
virtual void render_begin() = 0;
|
|
virtual void render_end() = 0;
|
|
virtual void render_step() = 0;
|
|
};
|
|
|
|
} // namespace gpu
|
|
} // namespace blender
|