Lines Matching defs:program
68 init_program(Program* program, Stage stage, const struct aco_shader_info* info,
72 program->stage = stage;
73 program->config = config;
74 program->info = *info;
75 program->gfx_level = gfx_level;
78 case GFX6: program->family = CHIP_TAHITI; break;
79 case GFX7: program->family = CHIP_BONAIRE; break;
80 case GFX8: program->family = CHIP_POLARIS10; break;
81 case GFX9: program->family = CHIP_VEGA10; break;
82 case GFX10: program->family = CHIP_NAVI10; break;
83 default: program->family = CHIP_UNKNOWN; break;
86 program->family = family;
88 program->wave_size = info->wave_size;
89 program->lane_mask = program->wave_size == 32 ? s1 : s2;
91 program->dev.lds_encoding_granule = gfx_level >= GFX11 && stage == fragment_fs ? 1024 :
93 program->dev.lds_alloc_granule = gfx_level >= GFX10_3 ? 1024 : program->dev.lds_encoding_granule;
94 program->dev.lds_limit = gfx_level >= GFX7 ? 65536 : 32768;
96 program->dev.has_16bank_lds = family == CHIP_KABINI || family == CHIP_STONEY;
98 program->dev.vgpr_limit = 256;
99 program->dev.physical_vgprs = 256;
100 program->dev.vgpr_alloc_granule = 4;
103 program->dev.physical_sgprs = 5120; /* doesn't matter as long as it's at least 128 * 40 */
104 program->dev.physical_vgprs = program->wave_size == 32 ? 1024 : 512;
105 program->dev.sgpr_alloc_granule = 128;
106 program->dev.sgpr_limit =
109 program->dev.vgpr_alloc_granule = program->wave_size == 32 ? 16 : 8;
111 program->dev.vgpr_alloc_granule = program->wave_size == 32 ? 8 : 4;
112 } else if (program->gfx_level >= GFX8) {
113 program->dev.physical_sgprs = 800;
114 program->dev.sgpr_alloc_granule = 16;
115 program->dev.sgpr_limit = 102;
117 program->dev.sgpr_alloc_granule = 96; /* workaround hardware bug */
119 program->dev.physical_sgprs = 512;
120 program->dev.sgpr_alloc_granule = 8;
121 program->dev.sgpr_limit = 104;
124 program->dev.max_wave64_per_simd = 10;
125 if (program->gfx_level >= GFX10_3)
126 program->dev.max_wave64_per_simd = 16;
127 else if (program->gfx_level == GFX10)
128 program->dev.max_wave64_per_simd = 20;
129 else if (program->family >= CHIP_POLARIS10 && program->family <= CHIP_VEGAM)
130 program->dev.max_wave64_per_simd = 8;
132 program->dev.simd_per_cu = program->gfx_level >= GFX10 ? 2 : 4;
134 switch (program->family) {
141 case CHIP_RENOIR: program->dev.xnack_enabled = true; break;
145 program->dev.sram_ecc_enabled = program->family == CHIP_ARCTURUS;
147 program->dev.has_fast_fma32 = program->gfx_level >= GFX9;
148 if (program->family == CHIP_TAHITI || program->family == CHIP_CARRIZO ||
149 program->family == CHIP_HAWAII)
150 program->dev.has_fast_fma32 = true;
151 program->dev.has_mac_legacy32 = program->gfx_level <= GFX7 || program->gfx_level >= GFX10;
153 program->dev.fused_mad_mix = program->gfx_level >= GFX10;
154 if (program->family == CHIP_VEGA12 || program->family == CHIP_VEGA20 ||
155 program->family == CHIP_ARCTURUS || program->family == CHIP_ALDEBARAN)
156 program->dev.fused_mad_mix = true;
158 if (program->gfx_level >= GFX11) {
159 program->dev.scratch_global_offset_min = -4096;
160 program->dev.scratch_global_offset_max = 4095;
161 } else if (program->gfx_level >= GFX10 || program->gfx_level == GFX8) {
162 program->dev.scratch_global_offset_min = -2048;
163 program->dev.scratch_global_offset_max = 2047;
164 } else if (program->gfx_level == GFX9) {
166 program->dev.scratch_global_offset_min = 0;
167 program->dev.scratch_global_offset_max = 4095;
170 program->wgp_mode = wgp_mode;
172 program->progress = CompilationProgress::after_isel;
174 program->next_fp_mode.preserve_signed_zero_inf_nan32 = false;
175 program->next_fp_mode.preserve_signed_zero_inf_nan16_64 = false;
176 program->next_fp_mode.must_flush_denorms32 = false;
177 program->next_fp_mode.must_flush_denorms16_64 = false;
178 program->next_fp_mode.care_about_round32 = false;
179 program->next_fp_mode.care_about_round16_64 = false;
180 program->next_fp_mode.denorm16_64 = fp_denorm_keep;
181 program->next_fp_mode.denorm32 = 0;
182 program->next_fp_mode.round16_64 = fp_round_ne;
183 program->next_fp_mode.round32 = fp_round_ne;