xref: /aosp_15_r20/external/libdrm/tests/amdgpu/shader_code.h (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
1 /*
2  * Copyright 2022 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22 */
23 
24 #ifndef _shader_code_h_
25 #define _shader_code_h_
26 
27 #ifndef ARRAY_SIZE
28 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
29 #endif
30 
31 enum amdgpu_test_gfx_version {
32 	AMDGPU_TEST_GFX_V9 = 0,
33 	AMDGPU_TEST_GFX_V10,
34 	AMDGPU_TEST_GFX_V11,
35 	AMDGPU_TEST_GFX_MAX,
36 };
37 
38 enum cs_type {
39 	CS_BUFFERCLEAR = 0,
40 	CS_BUFFERCOPY,
41 	CS_HANG,
42 	CS_HANG_SLOW,
43 };
44 
45 enum ps_type {
46 	PS_CONST,
47 	PS_TEX,
48 	PS_HANG,
49 	PS_HANG_SLOW
50 };
51 
52 enum vs_type {
53 	VS_RECTPOSTEXFAST,
54 };
55 
56 struct reg_info {
57 	uint32_t reg_offset;			///< Memory mapped register offset
58 	uint32_t reg_value;			///< register value
59 };
60 
61 #include "shader_code_hang.h"
62 #include "shader_code_gfx9.h"
63 #include "shader_code_gfx10.h"
64 #include "shader_code_gfx11.h"
65 
66 struct shader_test_cs_shader {
67 	const uint32_t *shader;
68 	uint32_t shader_size;
69 	const struct reg_info *sh_reg;
70 	uint32_t num_sh_reg;
71 	const struct reg_info *context_reg;
72 	uint32_t num_context_reg;
73 };
74 
75 struct shader_test_ps_shader {
76 	const uint32_t *shader;
77 	unsigned shader_size;
78 	uint32_t patchinfo_code_size;
79 	const uint32_t *patchinfo_code;
80 	const uint32_t *patchinfo_code_offset;
81 	const struct reg_info *sh_reg;
82 	uint32_t num_sh_reg;
83 	const struct reg_info *context_reg;
84 	uint32_t num_context_reg;
85 };
86 
87 struct shader_test_vs_shader {
88 	const uint32_t *shader;
89 	uint32_t shader_size;
90 	const struct reg_info *sh_reg;
91 	uint32_t num_sh_reg;
92 	const struct reg_info *context_reg;
93 	uint32_t num_context_reg;
94 };
95 
96 static const struct shader_test_cs_shader shader_test_cs[AMDGPU_TEST_GFX_MAX][2] = {
97 	// gfx9, cs_bufferclear
98 	{{bufferclear_cs_shader_gfx9, sizeof(bufferclear_cs_shader_gfx9), bufferclear_cs_shader_registers_gfx9, ARRAY_SIZE(bufferclear_cs_shader_registers_gfx9)},
99 	// gfx9, cs_buffercopy
100 	{buffercopy_cs_shader_gfx9, sizeof(buffercopy_cs_shader_gfx9), bufferclear_cs_shader_registers_gfx9, ARRAY_SIZE(bufferclear_cs_shader_registers_gfx9)}},
101 	// gfx10, cs_bufferclear
102 	{{bufferclear_cs_shader_gfx10, sizeof(bufferclear_cs_shader_gfx10), bufferclear_cs_shader_registers_gfx9, ARRAY_SIZE(bufferclear_cs_shader_registers_gfx9)},
103 	// gfx10, cs_buffercopy
104 	{buffercopy_cs_shader_gfx10, sizeof(bufferclear_cs_shader_gfx10), bufferclear_cs_shader_registers_gfx9, ARRAY_SIZE(bufferclear_cs_shader_registers_gfx9)}},
105 	// gfx11, cs_bufferclear
106 	{{bufferclear_cs_shader_gfx11, sizeof(bufferclear_cs_shader_gfx11), bufferclear_cs_shader_registers_gfx11, ARRAY_SIZE(bufferclear_cs_shader_registers_gfx11)},
107 	// gfx11, cs_buffercopy
108 	{buffercopy_cs_shader_gfx11, sizeof(bufferclear_cs_shader_gfx11), bufferclear_cs_shader_registers_gfx11, ARRAY_SIZE(bufferclear_cs_shader_registers_gfx11)}},
109 };
110 
111 #define SHADER_PS_INFO(_ps, _n) \
112 	{ps_##_ps##_shader_gfx##_n, sizeof(ps_##_ps##_shader_gfx##_n), \
113 	ps_##_ps##_shader_patchinfo_code_size_gfx##_n, \
114 	&(ps_##_ps##_shader_patchinfo_code_gfx##_n)[0][0][0], \
115 	ps_##_ps##_shader_patchinfo_offset_gfx##_n, \
116 	ps_##_ps##_sh_registers_gfx##_n, ps_##_ps##_num_sh_registers_gfx##_n, \
117 	ps_##_ps##_context_registers_gfx##_n, ps_##_ps##_num_context_registers_gfx##_n}
118 static const struct shader_test_ps_shader shader_test_ps[AMDGPU_TEST_GFX_MAX][2] = {
119 	{SHADER_PS_INFO(const, 9), SHADER_PS_INFO(tex, 9)},
120 	{SHADER_PS_INFO(const, 10), SHADER_PS_INFO(tex, 10)},
121 	{SHADER_PS_INFO(const, 11), SHADER_PS_INFO(tex, 11)},
122 };
123 
124 #define SHADER_VS_INFO(_vs, _n) \
125 	{vs_##_vs##_shader_gfx##_n, sizeof(vs_##_vs##_shader_gfx##_n), \
126 	vs_##_vs##_sh_registers_gfx##_n, vs_##_vs##_num_sh_registers_gfx##_n, \
127 	vs_##_vs##_context_registers_gfx##_n, vs_##_vs##_num_context_registers_gfx##_n}
128 static const struct shader_test_vs_shader shader_test_vs[AMDGPU_TEST_GFX_MAX][1] = {
129 	{SHADER_VS_INFO(RectPosTexFast, 9)},
130 	{SHADER_VS_INFO(RectPosTexFast, 10)},
131 	{SHADER_VS_INFO(RectPosTexFast, 11)},
132 };
133 
134 struct shader_test_gfx_info {
135 	const uint32_t *preamble_cache;
136 	uint32_t size_preamble_cache;
137 	const uint32_t *cached_cmd;
138 	uint32_t size_cached_cmd;
139 	uint32_t sh_reg_base;
140 	uint32_t context_reg_base;
141 };
142 
143 #define SHADER_TEST_GFX_INFO(_n) \
144 	preamblecache_gfx##_n, sizeof(preamblecache_gfx##_n), \
145 	cached_cmd_gfx##_n, sizeof(cached_cmd_gfx##_n), \
146 	sh_reg_base_gfx##_n, context_reg_base_gfx##_n
147 
148 static struct shader_test_gfx_info shader_test_gfx_info[AMDGPU_TEST_GFX_MAX] = {
149 	{SHADER_TEST_GFX_INFO(9),},
150 	{SHADER_TEST_GFX_INFO(10),},
151 	{SHADER_TEST_GFX_INFO(11),},
152 };
153 #endif
154