intel/compiler: Make visitors take debug_enabled as a parameter
The callers already have this value, and we would like to make it follow different rules other than stage that might not be visible to the helper function, so just pass explicitly. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9779>
This commit is contained in:

committed by
Marge Bot

parent
758eb18c6f
commit
7fb1e58651
@@ -682,7 +682,7 @@ fs_visitor::vfail(const char *format, va_list va)
|
||||
|
||||
this->fail_msg = msg;
|
||||
|
||||
if (debug_enabled) {
|
||||
if (unlikely(debug_enabled)) {
|
||||
fprintf(stderr, "%s", msg);
|
||||
}
|
||||
}
|
||||
@@ -9104,7 +9104,8 @@ brw_compile_fs(const struct brw_compiler *compiler,
|
||||
|
||||
v8 = new fs_visitor(compiler, params->log_data, mem_ctx, &key->base,
|
||||
&prog_data->base, nir, 8,
|
||||
params->shader_time ? params->shader_time_index8 : -1);
|
||||
params->shader_time ? params->shader_time_index8 : -1,
|
||||
debug_enabled);
|
||||
if (!v8->run_fs(allow_spilling, false /* do_rep_send */)) {
|
||||
params->error_str = ralloc_strdup(mem_ctx, v8->fail_msg);
|
||||
delete v8;
|
||||
@@ -9135,7 +9136,8 @@ brw_compile_fs(const struct brw_compiler *compiler,
|
||||
/* Try a SIMD16 compile */
|
||||
v16 = new fs_visitor(compiler, params->log_data, mem_ctx, &key->base,
|
||||
&prog_data->base, nir, 16,
|
||||
params->shader_time ? params->shader_time_index16 : -1);
|
||||
params->shader_time ? params->shader_time_index16 : -1,
|
||||
debug_enabled);
|
||||
v16->import_uniforms(v8);
|
||||
if (!v16->run_fs(allow_spilling, params->use_rep_send)) {
|
||||
compiler->shader_perf_log(params->log_data,
|
||||
@@ -9162,7 +9164,8 @@ brw_compile_fs(const struct brw_compiler *compiler,
|
||||
/* Try a SIMD32 compile */
|
||||
v32 = new fs_visitor(compiler, params->log_data, mem_ctx, &key->base,
|
||||
&prog_data->base, nir, 32,
|
||||
params->shader_time ? params->shader_time_index32 : -1);
|
||||
params->shader_time ? params->shader_time_index32 : -1,
|
||||
debug_enabled);
|
||||
v32->import_uniforms(v8);
|
||||
if (!v32->run_fs(allow_spilling, false)) {
|
||||
compiler->shader_perf_log(params->log_data,
|
||||
@@ -9498,7 +9501,7 @@ brw_compile_cs(const struct brw_compiler *compiler, void *log_data,
|
||||
nir, 8, debug_enabled);
|
||||
v8 = new fs_visitor(compiler, log_data, mem_ctx, &key->base,
|
||||
&prog_data->base,
|
||||
nir8, 8, shader_time_index);
|
||||
nir8, 8, shader_time_index, debug_enabled);
|
||||
if (!v8->run_cs(true /* allow_spilling */)) {
|
||||
if (error_str)
|
||||
*error_str = ralloc_strdup(mem_ctx, v8->fail_msg);
|
||||
@@ -9524,7 +9527,7 @@ brw_compile_cs(const struct brw_compiler *compiler, void *log_data,
|
||||
nir, 16, debug_enabled);
|
||||
v16 = new fs_visitor(compiler, log_data, mem_ctx, &key->base,
|
||||
&prog_data->base,
|
||||
nir16, 16, shader_time_index);
|
||||
nir16, 16, shader_time_index, debug_enabled);
|
||||
if (v8)
|
||||
v16->import_uniforms(v8);
|
||||
|
||||
@@ -9572,7 +9575,7 @@ brw_compile_cs(const struct brw_compiler *compiler, void *log_data,
|
||||
nir, 32, debug_enabled);
|
||||
v32 = new fs_visitor(compiler, log_data, mem_ctx, &key->base,
|
||||
&prog_data->base,
|
||||
nir32, 32, shader_time_index);
|
||||
nir32, 32, shader_time_index, debug_enabled);
|
||||
if (v8)
|
||||
v32->import_uniforms(v8);
|
||||
else if (v16)
|
||||
@@ -9729,7 +9732,7 @@ brw_compile_bs(const struct brw_compiler *compiler, void *log_data,
|
||||
if (likely(!(INTEL_DEBUG & DEBUG_NO8))) {
|
||||
v8 = new fs_visitor(compiler, log_data, mem_ctx, &key->base,
|
||||
&prog_data->base, shader,
|
||||
8, -1 /* shader time */);
|
||||
8, -1 /* shader time */, debug_enabled);
|
||||
const bool allow_spilling = true;
|
||||
if (!v8->run_bs(allow_spilling)) {
|
||||
if (error_str)
|
||||
@@ -9747,7 +9750,7 @@ brw_compile_bs(const struct brw_compiler *compiler, void *log_data,
|
||||
if (!has_spilled && likely(!(INTEL_DEBUG & DEBUG_NO16))) {
|
||||
v16 = new fs_visitor(compiler, log_data, mem_ctx, &key->base,
|
||||
&prog_data->base, shader,
|
||||
16, -1 /* shader time */);
|
||||
16, -1 /* shader time */, debug_enabled);
|
||||
const bool allow_spilling = (v == NULL);
|
||||
if (!v16->run_bs(allow_spilling)) {
|
||||
compiler->shader_perf_log(log_data,
|
||||
|
@@ -100,13 +100,15 @@ public:
|
||||
const nir_shader *shader,
|
||||
unsigned dispatch_width,
|
||||
int shader_time_index,
|
||||
bool debug_enabled,
|
||||
const struct brw_vue_map *input_vue_map = NULL);
|
||||
fs_visitor(const struct brw_compiler *compiler, void *log_data,
|
||||
void *mem_ctx,
|
||||
struct brw_gs_compile *gs_compile,
|
||||
struct brw_gs_prog_data *prog_data,
|
||||
const nir_shader *shader,
|
||||
int shader_time_index);
|
||||
int shader_time_index,
|
||||
bool debug_enabled);
|
||||
void init();
|
||||
~fs_visitor();
|
||||
|
||||
|
@@ -901,8 +901,10 @@ fs_visitor::fs_visitor(const struct brw_compiler *compiler, void *log_data,
|
||||
const nir_shader *shader,
|
||||
unsigned dispatch_width,
|
||||
int shader_time_index,
|
||||
bool debug_enabled,
|
||||
const struct brw_vue_map *input_vue_map)
|
||||
: backend_shader(compiler, log_data, mem_ctx, shader, prog_data),
|
||||
: backend_shader(compiler, log_data, mem_ctx, shader, prog_data,
|
||||
debug_enabled),
|
||||
key(key), gs_compile(NULL), prog_data(prog_data),
|
||||
input_vue_map(input_vue_map),
|
||||
live_analysis(this), regpressure_analysis(this),
|
||||
@@ -919,9 +921,10 @@ fs_visitor::fs_visitor(const struct brw_compiler *compiler, void *log_data,
|
||||
struct brw_gs_compile *c,
|
||||
struct brw_gs_prog_data *prog_data,
|
||||
const nir_shader *shader,
|
||||
int shader_time_index)
|
||||
int shader_time_index,
|
||||
bool debug_enabled)
|
||||
: backend_shader(compiler, log_data, mem_ctx, shader,
|
||||
&prog_data->base.base),
|
||||
&prog_data->base.base, debug_enabled),
|
||||
key(&c->key.base), gs_compile(c),
|
||||
prog_data(&prog_data->base.base),
|
||||
live_analysis(this), regpressure_analysis(this),
|
||||
|
@@ -719,7 +719,8 @@ backend_shader::backend_shader(const struct brw_compiler *compiler,
|
||||
void *log_data,
|
||||
void *mem_ctx,
|
||||
const nir_shader *shader,
|
||||
struct brw_stage_prog_data *stage_prog_data)
|
||||
struct brw_stage_prog_data *stage_prog_data,
|
||||
bool debug_enabled)
|
||||
: compiler(compiler),
|
||||
log_data(log_data),
|
||||
devinfo(compiler->devinfo),
|
||||
@@ -727,9 +728,9 @@ backend_shader::backend_shader(const struct brw_compiler *compiler,
|
||||
stage_prog_data(stage_prog_data),
|
||||
mem_ctx(mem_ctx),
|
||||
cfg(NULL), idom_analysis(this),
|
||||
stage(shader->info.stage)
|
||||
stage(shader->info.stage),
|
||||
debug_enabled(debug_enabled)
|
||||
{
|
||||
debug_enabled = INTEL_DEBUG & intel_debug_flag_for_shader_stage(stage);
|
||||
stage_name = _mesa_shader_stage_to_string(stage);
|
||||
stage_abbrev = _mesa_shader_stage_to_abbrev(stage);
|
||||
}
|
||||
@@ -1422,7 +1423,7 @@ brw_compile_tes(const struct brw_compiler *compiler,
|
||||
assembly = g.get_assembly();
|
||||
} else {
|
||||
brw::vec4_tes_visitor v(compiler, log_data, key, prog_data,
|
||||
nir, mem_ctx, shader_time_index);
|
||||
nir, mem_ctx, shader_time_index, debug_enabled);
|
||||
if (!v.run()) {
|
||||
if (error_str)
|
||||
*error_str = ralloc_strdup(mem_ctx, v.fail_msg);
|
||||
|
@@ -47,7 +47,8 @@ protected:
|
||||
void *log_data,
|
||||
void *mem_ctx,
|
||||
const nir_shader *shader,
|
||||
struct brw_stage_prog_data *stage_prog_data);
|
||||
struct brw_stage_prog_data *stage_prog_data,
|
||||
bool debug_enabled);
|
||||
|
||||
public:
|
||||
virtual ~backend_shader();
|
||||
|
@@ -2946,7 +2946,8 @@ brw_compile_vs(const struct brw_compiler *compiler,
|
||||
|
||||
fs_visitor v(compiler, params->log_data, mem_ctx, &key->base,
|
||||
&prog_data->base.base, nir, 8,
|
||||
params->shader_time ? params->shader_time_index : -1);
|
||||
params->shader_time ? params->shader_time_index : -1,
|
||||
debug_enabled);
|
||||
if (!v.run_vs()) {
|
||||
params->error_str = ralloc_strdup(mem_ctx, v.fail_msg);
|
||||
return NULL;
|
||||
@@ -2977,7 +2978,8 @@ brw_compile_vs(const struct brw_compiler *compiler,
|
||||
|
||||
vec4_vs_visitor v(compiler, params->log_data, key, prog_data,
|
||||
nir, mem_ctx,
|
||||
params->shader_time ? params->shader_time_index : -1);
|
||||
params->shader_time ? params->shader_time_index : -1,
|
||||
debug_enabled);
|
||||
if (!v.run()) {
|
||||
params->error_str = ralloc_strdup(mem_ctx, v.fail_msg);
|
||||
return NULL;
|
||||
|
@@ -72,7 +72,8 @@ public:
|
||||
const nir_shader *shader,
|
||||
void *mem_ctx,
|
||||
bool no_spills,
|
||||
int shader_time_index);
|
||||
int shader_time_index,
|
||||
bool debug_enabled);
|
||||
|
||||
dst_reg dst_null_f()
|
||||
{
|
||||
|
@@ -43,10 +43,11 @@ vec4_gs_visitor::vec4_gs_visitor(const struct brw_compiler *compiler,
|
||||
const nir_shader *shader,
|
||||
void *mem_ctx,
|
||||
bool no_spills,
|
||||
int shader_time_index)
|
||||
int shader_time_index,
|
||||
bool debug_enabled)
|
||||
: vec4_visitor(compiler, log_data, &c->key.base.tex,
|
||||
&prog_data->base, shader, mem_ctx,
|
||||
no_spills, shader_time_index),
|
||||
no_spills, shader_time_index, debug_enabled),
|
||||
c(c),
|
||||
gs_prog_data(prog_data)
|
||||
{
|
||||
@@ -820,7 +821,7 @@ brw_compile_gs(const struct brw_compiler *compiler, void *log_data,
|
||||
|
||||
if (is_scalar) {
|
||||
fs_visitor v(compiler, log_data, mem_ctx, &c, prog_data, nir,
|
||||
shader_time_index);
|
||||
shader_time_index, debug_enabled);
|
||||
if (v.run_gs()) {
|
||||
prog_data->base.dispatch_mode = DISPATCH_MODE_SIMD8;
|
||||
prog_data->base.base.dispatch_grf_start_reg = v.payload.num_regs;
|
||||
@@ -856,7 +857,8 @@ brw_compile_gs(const struct brw_compiler *compiler, void *log_data,
|
||||
prog_data->base.dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT;
|
||||
|
||||
brw::vec4_gs_visitor v(compiler, log_data, &c, prog_data, nir,
|
||||
mem_ctx, true /* no_spills */, shader_time_index);
|
||||
mem_ctx, true /* no_spills */,
|
||||
shader_time_index, debug_enabled);
|
||||
|
||||
/* Backup 'nr_params' and 'param' as they can be modified by the
|
||||
* the DUAL_OBJECT visitor. If it fails, we will run the fallback
|
||||
@@ -926,12 +928,12 @@ brw_compile_gs(const struct brw_compiler *compiler, void *log_data,
|
||||
|
||||
if (compiler->devinfo->gen >= 7)
|
||||
gs = new brw::vec4_gs_visitor(compiler, log_data, &c, prog_data,
|
||||
nir, mem_ctx, false /* no_spills */,
|
||||
shader_time_index);
|
||||
nir, mem_ctx, false /* no_spills */,
|
||||
shader_time_index, debug_enabled);
|
||||
else
|
||||
gs = new brw::gen6_gs_visitor(compiler, log_data, &c, prog_data, prog,
|
||||
nir, mem_ctx, false /* no_spills */,
|
||||
shader_time_index);
|
||||
nir, mem_ctx, false /* no_spills */,
|
||||
shader_time_index, debug_enabled);
|
||||
|
||||
if (!gs->run()) {
|
||||
if (error_str)
|
||||
|
@@ -47,7 +47,8 @@ public:
|
||||
const nir_shader *shader,
|
||||
void *mem_ctx,
|
||||
bool no_spills,
|
||||
int shader_time_index);
|
||||
int shader_time_index,
|
||||
bool debug_enabled);
|
||||
|
||||
virtual void nir_setup_inputs();
|
||||
|
||||
|
@@ -41,9 +41,10 @@ vec4_tcs_visitor::vec4_tcs_visitor(const struct brw_compiler *compiler,
|
||||
const nir_shader *nir,
|
||||
void *mem_ctx,
|
||||
int shader_time_index,
|
||||
bool debug_enabled,
|
||||
const struct brw_vue_map *input_vue_map)
|
||||
: vec4_visitor(compiler, log_data, &key->base.tex, &prog_data->base,
|
||||
nir, mem_ctx, false, shader_time_index),
|
||||
nir, mem_ctx, false, shader_time_index, debug_enabled),
|
||||
input_vue_map(input_vue_map), key(key)
|
||||
{
|
||||
}
|
||||
@@ -459,7 +460,7 @@ brw_compile_tcs(const struct brw_compiler *compiler,
|
||||
if (is_scalar) {
|
||||
fs_visitor v(compiler, log_data, mem_ctx, &key->base,
|
||||
&prog_data->base.base, nir, 8,
|
||||
shader_time_index, &input_vue_map);
|
||||
shader_time_index, debug_enabled, &input_vue_map);
|
||||
if (!v.run_tcs()) {
|
||||
if (error_str)
|
||||
*error_str = ralloc_strdup(mem_ctx, v.fail_msg);
|
||||
@@ -470,7 +471,7 @@ brw_compile_tcs(const struct brw_compiler *compiler,
|
||||
|
||||
fs_generator g(compiler, log_data, mem_ctx,
|
||||
&prog_data->base.base, false, MESA_SHADER_TESS_CTRL);
|
||||
if (INTEL_DEBUG & DEBUG_TCS) {
|
||||
if (unlikely(debug_enabled)) {
|
||||
g.enable_debug(ralloc_asprintf(mem_ctx,
|
||||
"%s tessellation control shader %s",
|
||||
nir->info.label ? nir->info.label
|
||||
@@ -486,7 +487,8 @@ brw_compile_tcs(const struct brw_compiler *compiler,
|
||||
assembly = g.get_assembly();
|
||||
} else {
|
||||
brw::vec4_tcs_visitor v(compiler, log_data, key, prog_data,
|
||||
nir, mem_ctx, shader_time_index, &input_vue_map);
|
||||
nir, mem_ctx, shader_time_index,
|
||||
debug_enabled, &input_vue_map);
|
||||
if (!v.run()) {
|
||||
if (error_str)
|
||||
*error_str = ralloc_strdup(mem_ctx, v.fail_msg);
|
||||
|
@@ -46,6 +46,7 @@ public:
|
||||
const nir_shader *nir,
|
||||
void *mem_ctx,
|
||||
int shader_time_index,
|
||||
bool debug_enabled,
|
||||
const struct brw_vue_map *input_vue_map);
|
||||
|
||||
protected:
|
||||
|
@@ -39,9 +39,10 @@ vec4_tes_visitor::vec4_tes_visitor(const struct brw_compiler *compiler,
|
||||
struct brw_tes_prog_data *prog_data,
|
||||
const nir_shader *shader,
|
||||
void *mem_ctx,
|
||||
int shader_time_index)
|
||||
int shader_time_index,
|
||||
bool debug_enabled)
|
||||
: vec4_visitor(compiler, log_data, &key->base.tex, &prog_data->base,
|
||||
shader, mem_ctx, false, shader_time_index)
|
||||
shader, mem_ctx, false, shader_time_index, debug_enabled)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -44,7 +44,8 @@ public:
|
||||
struct brw_tes_prog_data *prog_data,
|
||||
const nir_shader *nir,
|
||||
void *mem_ctx,
|
||||
int shader_time_index);
|
||||
int shader_time_index,
|
||||
bool debug_enabled);
|
||||
|
||||
protected:
|
||||
virtual void nir_emit_intrinsic(nir_intrinsic_instr *instr);
|
||||
|
@@ -1763,8 +1763,10 @@ vec4_visitor::vec4_visitor(const struct brw_compiler *compiler,
|
||||
const nir_shader *shader,
|
||||
void *mem_ctx,
|
||||
bool no_spills,
|
||||
int shader_time_index)
|
||||
: backend_shader(compiler, log_data, mem_ctx, shader, &prog_data->base),
|
||||
int shader_time_index,
|
||||
bool debug_enabled)
|
||||
: backend_shader(compiler, log_data, mem_ctx, shader, &prog_data->base,
|
||||
debug_enabled),
|
||||
key_tex(key_tex),
|
||||
prog_data(prog_data),
|
||||
fail_msg(NULL),
|
||||
@@ -1810,7 +1812,7 @@ vec4_visitor::fail(const char *format, ...)
|
||||
|
||||
this->fail_msg = msg;
|
||||
|
||||
if (debug_enabled) {
|
||||
if (unlikely(debug_enabled)) {
|
||||
fprintf(stderr, "%s", msg);
|
||||
}
|
||||
}
|
||||
|
@@ -37,7 +37,8 @@ public:
|
||||
struct brw_vs_prog_data *vs_prog_data,
|
||||
const nir_shader *shader,
|
||||
void *mem_ctx,
|
||||
int shader_time_index);
|
||||
int shader_time_index,
|
||||
bool debug_enabled);
|
||||
|
||||
protected:
|
||||
virtual void setup_payload();
|
||||
|
@@ -103,9 +103,11 @@ vec4_vs_visitor::vec4_vs_visitor(const struct brw_compiler *compiler,
|
||||
struct brw_vs_prog_data *vs_prog_data,
|
||||
const nir_shader *shader,
|
||||
void *mem_ctx,
|
||||
int shader_time_index)
|
||||
int shader_time_index,
|
||||
bool debug_enabled)
|
||||
: vec4_visitor(compiler, log_data, &key->base.tex, &vs_prog_data->base,
|
||||
shader, mem_ctx, false /* no_spills */, shader_time_index),
|
||||
shader, mem_ctx, false /* no_spills */, shader_time_index,
|
||||
debug_enabled),
|
||||
key(key),
|
||||
vs_prog_data(vs_prog_data)
|
||||
{
|
||||
|
@@ -43,9 +43,10 @@ public:
|
||||
const nir_shader *shader,
|
||||
void *mem_ctx,
|
||||
bool no_spills,
|
||||
int shader_time_index) :
|
||||
int shader_time_index,
|
||||
bool debug_enabled) :
|
||||
vec4_gs_visitor(comp, log_data, c, prog_data, shader, mem_ctx, no_spills,
|
||||
shader_time_index),
|
||||
shader_time_index, debug_enabled),
|
||||
prog(prog)
|
||||
{
|
||||
}
|
||||
|
@@ -59,7 +59,7 @@ public:
|
||||
struct brw_wm_prog_data *prog_data,
|
||||
nir_shader *shader)
|
||||
: fs_visitor(compiler, NULL, mem_ctx, NULL,
|
||||
&prog_data->base, shader, 8, -1) {}
|
||||
&prog_data->base, shader, 8, -1, false) {}
|
||||
};
|
||||
|
||||
|
||||
|
@@ -49,7 +49,7 @@ public:
|
||||
struct brw_wm_prog_data *prog_data,
|
||||
nir_shader *shader)
|
||||
: fs_visitor(compiler, NULL, mem_ctx, NULL,
|
||||
&prog_data->base, shader, 8, -1) {}
|
||||
&prog_data->base, shader, 8, -1, false) {}
|
||||
};
|
||||
|
||||
|
||||
|
@@ -49,7 +49,7 @@ public:
|
||||
struct brw_wm_prog_data *prog_data,
|
||||
nir_shader *shader)
|
||||
: fs_visitor(compiler, NULL, mem_ctx, NULL,
|
||||
&prog_data->base, shader, 16, -1) {}
|
||||
&prog_data->base, shader, 16, -1, false) {}
|
||||
};
|
||||
|
||||
|
||||
|
@@ -52,7 +52,7 @@ void scoreboard_test::SetUp()
|
||||
nir_shader *shader =
|
||||
nir_shader_create(ctx, MESA_SHADER_FRAGMENT, NULL, NULL);
|
||||
|
||||
v = new fs_visitor(compiler, NULL, ctx, NULL, &prog_data->base, shader, 8, -1);
|
||||
v = new fs_visitor(compiler, NULL, ctx, NULL, &prog_data->base, shader, 8, -1, false);
|
||||
|
||||
devinfo->gen = 12;
|
||||
devinfo->genx10 = devinfo->gen * 10;
|
||||
|
@@ -52,7 +52,7 @@ public:
|
||||
nir_shader *shader,
|
||||
struct brw_vue_prog_data *prog_data)
|
||||
: vec4_visitor(compiler, NULL, NULL, prog_data, shader, mem_ctx,
|
||||
false, -1)
|
||||
false, -1, false)
|
||||
{
|
||||
prog_data->dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT;
|
||||
}
|
||||
|
@@ -50,7 +50,7 @@ public:
|
||||
nir_shader *shader,
|
||||
struct brw_vue_prog_data *prog_data)
|
||||
: vec4_visitor(compiler, NULL, NULL, prog_data, shader, mem_ctx,
|
||||
false /* no_spills */, -1)
|
||||
false /* no_spills */, -1, false)
|
||||
{
|
||||
prog_data->dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT;
|
||||
}
|
||||
|
@@ -48,7 +48,7 @@ public:
|
||||
nir_shader *shader,
|
||||
struct brw_vue_prog_data *prog_data)
|
||||
: vec4_visitor(compiler, NULL, NULL, prog_data, shader, mem_ctx,
|
||||
false /* no_spills */, -1)
|
||||
false /* no_spills */, -1, false)
|
||||
{
|
||||
prog_data->dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT;
|
||||
}
|
||||
|
@@ -53,7 +53,7 @@ public:
|
||||
nir_shader *shader,
|
||||
struct brw_vue_prog_data *prog_data)
|
||||
: vec4_visitor(compiler, NULL, NULL, prog_data, shader, mem_ctx,
|
||||
false /* no_spills */, -1)
|
||||
false /* no_spills */, -1, false)
|
||||
{
|
||||
prog_data->dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT;
|
||||
}
|
||||
|
Reference in New Issue
Block a user