xref: /aosp_15_r20/external/libdrm/tests/tegra/vic.h (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
1*7688df22SAndroid Build Coastguard Worker /*
2*7688df22SAndroid Build Coastguard Worker  * Copyright © 2018 NVIDIA Corporation
3*7688df22SAndroid Build Coastguard Worker  *
4*7688df22SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*7688df22SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*7688df22SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*7688df22SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*7688df22SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*7688df22SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*7688df22SAndroid Build Coastguard Worker  *
11*7688df22SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included in
12*7688df22SAndroid Build Coastguard Worker  * all copies or substantial portions of the Software.
13*7688df22SAndroid Build Coastguard Worker  *
14*7688df22SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*7688df22SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*7688df22SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17*7688df22SAndroid Build Coastguard Worker  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*7688df22SAndroid Build Coastguard Worker  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*7688df22SAndroid Build Coastguard Worker  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*7688df22SAndroid Build Coastguard Worker  * OTHER DEALINGS IN THE SOFTWARE.
21*7688df22SAndroid Build Coastguard Worker  */
22*7688df22SAndroid Build Coastguard Worker 
23*7688df22SAndroid Build Coastguard Worker #ifndef VIC_H
24*7688df22SAndroid Build Coastguard Worker #define VIC_H
25*7688df22SAndroid Build Coastguard Worker 
26*7688df22SAndroid Build Coastguard Worker #include <stdio.h>
27*7688df22SAndroid Build Coastguard Worker 
28*7688df22SAndroid Build Coastguard Worker #include "host1x.h"
29*7688df22SAndroid Build Coastguard Worker 
30*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_PROGRESSIVE 0
31*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST 1
32*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST 2
33*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_TOP_FIELD 3
34*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_BOTTOM_FIELD 4
35*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_SUBPIC_PROGRESSIVE 5
36*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_SUBPIC_INTERLACED_TOP_FIELD_FIRST 6
37*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_SUBPIC_INTERLACED_BOTTOM_FIELD_FIRST 7
38*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_SUBPIC_TOP_FIELD 8
39*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_SUBPIC_BOTTOM_FIELD 9
40*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_TOP_FIELD_CHROMA_BOTTOM 10
41*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_BOTTOM_FIELD_CHROMA_TOP 11
42*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_SUBPIC_TOP_FIELD_CHROMA_BOTTOM 12
43*7688df22SAndroid Build Coastguard Worker #define DXVAHD_FRAME_FORMAT_SUBPIC_BOTTOM_FIELD_CHROMA_TOP 13
44*7688df22SAndroid Build Coastguard Worker 
45*7688df22SAndroid Build Coastguard Worker #define DXVAHD_ALPHA_FILL_MODE_OPAQUE 0
46*7688df22SAndroid Build Coastguard Worker #define DXVAHD_ALPHA_FILL_MODE_BACKGROUND 1
47*7688df22SAndroid Build Coastguard Worker #define DXVAHD_ALPHA_FILL_MODE_DESTINATION 2
48*7688df22SAndroid Build Coastguard Worker #define DXVAHD_ALPHA_FILL_MODE_SOURCE_STREAM 3
49*7688df22SAndroid Build Coastguard Worker #define DXVAHD_ALPHA_FILL_MODE_COMPOSITED 4
50*7688df22SAndroid Build Coastguard Worker #define DXVAHD_ALPHA_FILL_MODE_SOURCE_ALPHA 5
51*7688df22SAndroid Build Coastguard Worker 
52*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_SRCFACTC_K1 0
53*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_SRCFACTC_K1_TIMES_DST 1
54*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_SRCFACTC_NEG_K1_TIMES_DST 2
55*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_SRCFACTC_K1_TIMES_SRC 3
56*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_SRCFACTC_ZERO 4
57*7688df22SAndroid Build Coastguard Worker 
58*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTC_K1 0
59*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTC_K2 1
60*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTC_K1_TIMES_DST 2
61*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTC_NEG_K1_TIMES_DST 3
62*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTC_NEG_K1_TIMES_SRC 4
63*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTC_ZERO 5
64*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTC_ONE 6
65*7688df22SAndroid Build Coastguard Worker 
66*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_SRCFACTA_K1 0
67*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_SRCFACTA_K2 1
68*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_SRCFACTA_NEG_K1_TIMES_DST 2
69*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_SRCFACTA_ZERO 3
70*7688df22SAndroid Build Coastguard Worker 
71*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTA_K2 0
72*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTA_NEG_K1_TIMES_SRC 1
73*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTA_ZERO 2
74*7688df22SAndroid Build Coastguard Worker #define VIC_BLEND_DSTFACTA_ONE 3
75*7688df22SAndroid Build Coastguard Worker 
76*7688df22SAndroid Build Coastguard Worker #define VIC_BLK_KIND_PITCH 0
77*7688df22SAndroid Build Coastguard Worker #define VIC_BLK_KIND_GENERIC_16Bx2 1
78*7688df22SAndroid Build Coastguard Worker 
79*7688df22SAndroid Build Coastguard Worker #define VIC_PIXEL_FORMAT_L8 1
80*7688df22SAndroid Build Coastguard Worker #define VIC_PIXEL_FORMAT_R8 4
81*7688df22SAndroid Build Coastguard Worker #define VIC_PIXEL_FORMAT_A8R8G8B8 32
82*7688df22SAndroid Build Coastguard Worker #define VIC_PIXEL_FORMAT_R8G8B8A8 34
83*7688df22SAndroid Build Coastguard Worker #define VIC_PIXEL_FORMAT_Y8_U8V8_N420 67
84*7688df22SAndroid Build Coastguard Worker #define VIC_PIXEL_FORMAT_Y8_V8U8_N420 68
85*7688df22SAndroid Build Coastguard Worker 
86*7688df22SAndroid Build Coastguard Worker #define VIC_CACHE_WIDTH_16Bx16 0 /* BL16Bx2 */
87*7688df22SAndroid Build Coastguard Worker #define VIC_CACHE_WIDTH_32Bx8 1 /* BL16Bx2 */
88*7688df22SAndroid Build Coastguard Worker #define VIC_CACHE_WIDTH_64Bx4 2 /* BL16Bx2, PL */
89*7688df22SAndroid Build Coastguard Worker #define VIC_CACHE_WIDTH_128Bx2 3 /* BL16Bx2, PL */
90*7688df22SAndroid Build Coastguard Worker #define VIC_CACHE_WIDTH_256Bx1 4 /* PL */
91*7688df22SAndroid Build Coastguard Worker 
92*7688df22SAndroid Build Coastguard Worker struct vic_format_info {
93*7688df22SAndroid Build Coastguard Worker     unsigned int format;
94*7688df22SAndroid Build Coastguard Worker     unsigned int cpp;
95*7688df22SAndroid Build Coastguard Worker };
96*7688df22SAndroid Build Coastguard Worker 
97*7688df22SAndroid Build Coastguard Worker 
98*7688df22SAndroid Build Coastguard Worker #define VIC_UCLASS_INCR_SYNCPT 0x00
99*7688df22SAndroid Build Coastguard Worker #define VIC_UCLASS_METHOD_OFFSET 0x10
100*7688df22SAndroid Build Coastguard Worker #define VIC_UCLASS_METHOD_DATA 0x11
101*7688df22SAndroid Build Coastguard Worker 
VIC_PUSH_METHOD(struct drm_tegra_pushbuf * pushbuf,uint32_t ** ptrp,uint32_t method,uint32_t value)102*7688df22SAndroid Build Coastguard Worker static inline void VIC_PUSH_METHOD(struct drm_tegra_pushbuf *pushbuf,
103*7688df22SAndroid Build Coastguard Worker                                    uint32_t **ptrp, uint32_t method,
104*7688df22SAndroid Build Coastguard Worker                                    uint32_t value)
105*7688df22SAndroid Build Coastguard Worker {
106*7688df22SAndroid Build Coastguard Worker     *(*ptrp)++ = HOST1X_OPCODE_INCR(VIC_UCLASS_METHOD_OFFSET, 2);
107*7688df22SAndroid Build Coastguard Worker     *(*ptrp)++ = method >> 2;
108*7688df22SAndroid Build Coastguard Worker     *(*ptrp)++ = value;
109*7688df22SAndroid Build Coastguard Worker }
110*7688df22SAndroid Build Coastguard Worker 
VIC_PUSH_BUFFER(struct drm_tegra_pushbuf * pushbuf,uint32_t ** ptrp,uint32_t method,struct drm_tegra_mapping * map,unsigned long offset,unsigned long flags)111*7688df22SAndroid Build Coastguard Worker static inline void VIC_PUSH_BUFFER(struct drm_tegra_pushbuf *pushbuf,
112*7688df22SAndroid Build Coastguard Worker                                    uint32_t **ptrp, uint32_t method,
113*7688df22SAndroid Build Coastguard Worker                                    struct drm_tegra_mapping *map,
114*7688df22SAndroid Build Coastguard Worker                                    unsigned long offset, unsigned long flags)
115*7688df22SAndroid Build Coastguard Worker {
116*7688df22SAndroid Build Coastguard Worker     *(*ptrp)++ = HOST1X_OPCODE_INCR(VIC_UCLASS_METHOD_OFFSET, 2);
117*7688df22SAndroid Build Coastguard Worker     *(*ptrp)++ = method >> 2;
118*7688df22SAndroid Build Coastguard Worker 
119*7688df22SAndroid Build Coastguard Worker     drm_tegra_pushbuf_relocate(pushbuf, ptrp, map, offset, 8, flags);
120*7688df22SAndroid Build Coastguard Worker }
121*7688df22SAndroid Build Coastguard Worker 
122*7688df22SAndroid Build Coastguard Worker struct vic_image;
123*7688df22SAndroid Build Coastguard Worker struct vic;
124*7688df22SAndroid Build Coastguard Worker 
125*7688df22SAndroid Build Coastguard Worker struct vic_ops {
126*7688df22SAndroid Build Coastguard Worker     int (*fill)(struct vic *vic, struct vic_image *output,
127*7688df22SAndroid Build Coastguard Worker                 unsigned int left, unsigned int top,
128*7688df22SAndroid Build Coastguard Worker                 unsigned int right, unsigned int bottom,
129*7688df22SAndroid Build Coastguard Worker                 unsigned int alpha, unsigned red,
130*7688df22SAndroid Build Coastguard Worker                 unsigned int green, unsigned int blue);
131*7688df22SAndroid Build Coastguard Worker     int (*blit)(struct vic *vic, struct vic_image *output,
132*7688df22SAndroid Build Coastguard Worker                 struct vic_image *input);
133*7688df22SAndroid Build Coastguard Worker     int (*flip)(struct vic *vic, struct vic_image *output,
134*7688df22SAndroid Build Coastguard Worker                 struct vic_image *input);
135*7688df22SAndroid Build Coastguard Worker     int (*execute)(struct vic *vic,
136*7688df22SAndroid Build Coastguard Worker                    struct drm_tegra_pushbuf *pushbuf,
137*7688df22SAndroid Build Coastguard Worker                    uint32_t **ptrp,
138*7688df22SAndroid Build Coastguard Worker                    struct vic_image *output,
139*7688df22SAndroid Build Coastguard Worker                    struct vic_image **inputs,
140*7688df22SAndroid Build Coastguard Worker                    unsigned int num_inputs);
141*7688df22SAndroid Build Coastguard Worker     void (*free)(struct vic *vic);
142*7688df22SAndroid Build Coastguard Worker };
143*7688df22SAndroid Build Coastguard Worker 
144*7688df22SAndroid Build Coastguard Worker struct vic {
145*7688df22SAndroid Build Coastguard Worker     struct drm_tegra *drm;
146*7688df22SAndroid Build Coastguard Worker     struct drm_tegra_channel *channel;
147*7688df22SAndroid Build Coastguard Worker     struct drm_tegra_syncpoint *syncpt;
148*7688df22SAndroid Build Coastguard Worker     const struct vic_ops *ops;
149*7688df22SAndroid Build Coastguard Worker     unsigned int version;
150*7688df22SAndroid Build Coastguard Worker };
151*7688df22SAndroid Build Coastguard Worker 
152*7688df22SAndroid Build Coastguard Worker int vic_new(struct drm_tegra *drm, struct drm_tegra_channel *channel,
153*7688df22SAndroid Build Coastguard Worker             struct vic **vicp);
154*7688df22SAndroid Build Coastguard Worker void vic_free(struct vic *vic);
155*7688df22SAndroid Build Coastguard Worker 
156*7688df22SAndroid Build Coastguard Worker int vic_clear(struct vic *vic, struct vic_image *output, unsigned int alpha,
157*7688df22SAndroid Build Coastguard Worker               unsigned int red, unsigned int green, unsigned int blue);
158*7688df22SAndroid Build Coastguard Worker 
159*7688df22SAndroid Build Coastguard Worker struct vic_image {
160*7688df22SAndroid Build Coastguard Worker     struct drm_tegra_bo *bo;
161*7688df22SAndroid Build Coastguard Worker     struct drm_tegra_mapping *map;
162*7688df22SAndroid Build Coastguard Worker     unsigned int width;
163*7688df22SAndroid Build Coastguard Worker     unsigned int stride;
164*7688df22SAndroid Build Coastguard Worker     unsigned int pitch;
165*7688df22SAndroid Build Coastguard Worker     unsigned int height;
166*7688df22SAndroid Build Coastguard Worker     unsigned int format;
167*7688df22SAndroid Build Coastguard Worker     unsigned int kind;
168*7688df22SAndroid Build Coastguard Worker 
169*7688df22SAndroid Build Coastguard Worker     size_t align;
170*7688df22SAndroid Build Coastguard Worker     size_t size;
171*7688df22SAndroid Build Coastguard Worker };
172*7688df22SAndroid Build Coastguard Worker 
173*7688df22SAndroid Build Coastguard Worker const struct vic_format_info *vic_format_get_info(unsigned int format);
174*7688df22SAndroid Build Coastguard Worker 
175*7688df22SAndroid Build Coastguard Worker int vic_image_new(struct vic *vic, unsigned int width, unsigned int height,
176*7688df22SAndroid Build Coastguard Worker                   unsigned int format, unsigned int kind, uint32_t flags,
177*7688df22SAndroid Build Coastguard Worker                   struct vic_image **imagep);
178*7688df22SAndroid Build Coastguard Worker void vic_image_free(struct vic_image *image);
179*7688df22SAndroid Build Coastguard Worker void vic_image_dump(struct vic_image *image, FILE *fp);
180*7688df22SAndroid Build Coastguard Worker 
181*7688df22SAndroid Build Coastguard Worker #endif
182