Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/drivers/vc4/vc4_resource.h
4570 views
1
/*
2
* Copyright © 2014 Broadcom
3
* Copyright (C) 2012 Rob Clark <[email protected]>
4
*
5
* Permission is hereby granted, free of charge, to any person obtaining a
6
* copy of this software and associated documentation files (the "Software"),
7
* to deal in the Software without restriction, including without limitation
8
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
* and/or sell copies of the Software, and to permit persons to whom the
10
* Software is furnished to do so, subject to the following conditions:
11
*
12
* The above copyright notice and this permission notice (including the next
13
* paragraph) shall be included in all copies or substantial portions of the
14
* Software.
15
*
16
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22
* IN THE SOFTWARE.
23
*/
24
25
#ifndef VC4_RESOURCE_H
26
#define VC4_RESOURCE_H
27
28
#include "vc4_screen.h"
29
#include "kernel/vc4_packet.h"
30
#include "util/u_transfer.h"
31
32
struct vc4_transfer {
33
struct pipe_transfer base;
34
void *map;
35
};
36
37
struct vc4_resource_slice {
38
uint32_t offset;
39
uint32_t stride;
40
uint32_t size;
41
/** One of VC4_TILING_FORMAT_* */
42
uint8_t tiling;
43
};
44
45
struct vc4_surface {
46
struct pipe_surface base;
47
uint32_t offset;
48
uint8_t tiling;
49
};
50
51
struct vc4_resource {
52
struct pipe_resource base;
53
struct vc4_bo *bo;
54
struct renderonly_scanout *scanout;
55
struct vc4_resource_slice slices[VC4_MAX_MIP_LEVELS];
56
uint32_t cube_map_stride;
57
int cpp;
58
bool tiled;
59
/** One of VC4_TEXTURE_TYPE_* */
60
enum vc4_texture_data_type vc4_format;
61
62
/**
63
* Number of times the resource has been written to.
64
*
65
* This is used to track when we need to update this shadow resource
66
* from its parent in the case of GL_TEXTURE_BASE_LEVEL (which we
67
* can't support in hardware) or GL_UNSIGNED_INTEGER index buffers.
68
*/
69
uint64_t writes;
70
71
/**
72
* Bitmask of PIPE_CLEAR_COLOR0, PIPE_CLEAR_DEPTH, PIPE_CLEAR_STENCIL
73
* for which parts of the resource are defined.
74
*
75
* Used for avoiding fallback to quad clears for clearing just depth,
76
* when the stencil contents have never been initialized. Note that
77
* we're lazy and fields not present in the buffer (DEPTH in a color
78
* buffer) may get marked.
79
*/
80
uint32_t initialized_buffers;
81
};
82
83
static inline struct vc4_resource *
84
vc4_resource(struct pipe_resource *prsc)
85
{
86
return (struct vc4_resource *)prsc;
87
}
88
89
static inline struct vc4_surface *
90
vc4_surface(struct pipe_surface *psurf)
91
{
92
return (struct vc4_surface *)psurf;
93
}
94
95
static inline struct vc4_transfer *
96
vc4_transfer(struct pipe_transfer *ptrans)
97
{
98
return (struct vc4_transfer *)ptrans;
99
}
100
101
void vc4_resource_screen_init(struct pipe_screen *pscreen);
102
void vc4_resource_context_init(struct pipe_context *pctx);
103
struct pipe_resource *vc4_resource_create(struct pipe_screen *pscreen,
104
const struct pipe_resource *tmpl);
105
void vc4_update_shadow_baselevel_texture(struct pipe_context *pctx,
106
struct pipe_sampler_view *view);
107
struct pipe_resource *vc4_get_shadow_index_buffer(struct pipe_context *pctx,
108
const struct pipe_draw_info *info,
109
uint32_t offset,
110
uint32_t count,
111
uint32_t *shadow_offset);
112
void vc4_dump_surface(struct pipe_surface *psurf);
113
114
#endif /* VC4_RESOURCE_H */
115
116