Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/drivers/panfrost/pan_screen.h
4570 views
1
/**************************************************************************
2
*
3
* Copyright 2018-2019 Alyssa Rosenzweig
4
* Copyright 2018-2019 Collabora, Ltd.
5
* All Rights Reserved.
6
*
7
* Permission is hereby granted, free of charge, to any person obtaining a
8
* copy of this software and associated documentation files (the
9
* "Software"), to deal in the Software without restriction, including
10
* without limitation the rights to use, copy, modify, merge, publish,
11
* distribute, sub license, and/or sell copies of the Software, and to
12
* permit persons to whom the Software is furnished to do so, subject to
13
* the following conditions:
14
*
15
* The above copyright notice and this permission notice (including the
16
* next paragraph) shall be included in all copies or substantial portions
17
* of the Software.
18
*
19
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22
* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
23
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
*
27
**************************************************************************/
28
29
#ifndef PAN_SCREEN_H
30
#define PAN_SCREEN_H
31
32
#include <xf86drm.h>
33
#include "pipe/p_screen.h"
34
#include "pipe/p_defines.h"
35
#include "renderonly/renderonly.h"
36
#include "util/u_dynarray.h"
37
#include "util/bitset.h"
38
#include "util/set.h"
39
40
#include "pan_device.h"
41
#include "pan_mempool.h"
42
43
struct panfrost_batch;
44
struct panfrost_context;
45
struct panfrost_resource;
46
struct panfrost_shader_state;
47
struct pan_fb_info;
48
49
/* Virtual table of per-generation (GenXML) functions */
50
51
struct panfrost_vtable {
52
/* Prepares the renderer state descriptor for a given compiled shader,
53
* and if desired uploads it as well */
54
void (*prepare_rsd)(struct panfrost_device *,
55
struct panfrost_shader_state *,
56
struct panfrost_pool *, bool);
57
58
/* Emits a thread local storage descriptor */
59
void (*emit_tls)(struct panfrost_batch *);
60
61
/* Emits a framebuffer descriptor */
62
void (*emit_fbd)(struct panfrost_batch *, const struct pan_fb_info *);
63
64
/* Emits a fragment job */
65
mali_ptr (*emit_fragment_job)(struct panfrost_batch *, const struct pan_fb_info *);
66
67
/* General destructor */
68
void (*screen_destroy)(struct pipe_screen *);
69
70
/* Preload framebuffer */
71
void (*preload)(struct panfrost_batch *, struct pan_fb_info *);
72
};
73
74
struct panfrost_screen {
75
struct pipe_screen base;
76
struct panfrost_device dev;
77
struct {
78
struct panfrost_pool bin_pool;
79
struct panfrost_pool desc_pool;
80
} blitter;
81
struct {
82
struct panfrost_pool bin_pool;
83
} indirect_draw;
84
85
struct panfrost_vtable vtbl;
86
};
87
88
static inline struct panfrost_screen *
89
pan_screen(struct pipe_screen *p)
90
{
91
return (struct panfrost_screen *)p;
92
}
93
94
static inline struct panfrost_device *
95
pan_device(struct pipe_screen *p)
96
{
97
return &(pan_screen(p)->dev);
98
}
99
100
struct pipe_fence_handle *
101
panfrost_fence_create(struct panfrost_context *ctx);
102
103
void
104
panfrost_cmdstream_screen_init(struct panfrost_screen *screen);
105
106
#endif /* PAN_SCREEN_H */
107
108