r300/compiler: cleanup rc_run_compiler
authorMarek Olšák <maraeo@gmail.com>
Tue, 7 Dec 2010 23:18:05 +0000 (00:18 +0100)
committerMarek Olšák <maraeo@gmail.com>
Wed, 8 Dec 2010 03:39:50 +0000 (04:39 +0100)
src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c
src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c
src/mesa/drivers/dri/r300/compiler/radeon_compiler.c
src/mesa/drivers/dri/r300/compiler/radeon_compiler.h

index 23671e3cbc30bb98675b74774c519060abd8fa0c..3716deaa7e7b9a3430f7507cdf75503ccd343105 100644 (file)
@@ -138,9 +138,10 @@ void r3xx_compile_fragment_program(struct r300_fragment_program_compiler* c)
                {NULL, 0, 0, NULL, NULL}
        };
 
+       c->Base.type = RC_FRAGMENT_PROGRAM;
        c->Base.SwizzleCaps = c->Base.is_r500 ? &r500_swizzle_caps : &r300_swizzle_caps;
 
-       rc_run_compiler(&c->Base, fs_list, "Fragment Program");
+       rc_run_compiler(&c->Base, fs_list);
 
        rc_constants_copy(&c->code->constants, &c->Base.Program.Constants);
 }
index 0152bc905629c3bd6a70db6efceafd8fc49a988b..54f4cf3316dbad87429b0b8572a41f9400ce9e5c 100644 (file)
@@ -1066,9 +1066,10 @@ void r3xx_compile_vertex_program(struct r300_vertex_program_compiler *c)
                {NULL, 0, 0, NULL, NULL}
        };
 
+       c->Base.type = RC_VERTEX_PROGRAM;
        c->Base.SwizzleCaps = &r300_vertprog_swizzle_caps;
 
-       rc_run_compiler(&c->Base, vs_list, "Vertex Program");
+       rc_run_compiler(&c->Base, vs_list);
 
        c->code->InputsRead = c->Base.Program.InputsRead;
        c->code->OutputsWritten = c->Base.Program.OutputsWritten;
index 7cd86fb3ed4a4edc1f07341866e52e5534808fae..72673d75e559ab7a1ffc84b2ae62e9567d07a361 100644 (file)
@@ -398,7 +398,7 @@ void rc_get_stats(struct radeon_compiler *c, struct rc_program_stats *s)
        s->num_temp_regs = max_reg + 1;
 }
 
-static void print_stats(struct radeon_compiler * c)
+static void print_stats(struct radeon_compiler * c, const char *shader)
 {
        struct rc_program_stats s;
 
@@ -407,6 +407,7 @@ static void print_stats(struct radeon_compiler * c)
        if (s.num_insts < 4)
                return;
        fprintf(stderr,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
+                      "~ %s:\n"
                       "~%4u Instructions\n"
                       "~%4u Vector Instructions (RGB)\n"
                       "~%4u Scalar Instructions (Alpha)\n"
@@ -415,20 +416,19 @@ static void print_stats(struct radeon_compiler * c)
                       "~%4u Presub Operations\n"
                       "~%4u Temporary Registers\n"
                       "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n",
+                      shader,
                       s.num_insts, s.num_rgb_insts, s.num_alpha_insts,
                       s.num_fc_insts, s.num_tex_insts, s.num_presub_ops,
                       s.num_temp_regs);
 }
 
-/* Executes a list of compiler passes given in the parameter 'list'. */
-void rc_run_compiler(struct radeon_compiler *c, struct radeon_compiler_pass *list,
-                    const char *shader_name)
-{
-       if (c->Debug & RC_DBG_LOG) {
-               fprintf(stderr, "%s: before compilation\n", shader_name);
-               rc_print_program(&c->Program);
-       }
+static const char *shader_name[RC_NUM_PROGRAM_TYPES] = {
+       "Vertex Program",
+       "Fragment Program"
+};
 
+void rc_run_compiler_passes(struct radeon_compiler *c, struct radeon_compiler_pass *list)
+{
        for (unsigned i = 0; list[i].name; i++) {
                if (list[i].predicate) {
                        list[i].run(c, list[i].user);
@@ -437,13 +437,25 @@ void rc_run_compiler(struct radeon_compiler *c, struct radeon_compiler_pass *lis
                                return;
 
                        if ((c->Debug & RC_DBG_LOG) && list[i].dump) {
-                               fprintf(stderr, "%s: after '%s'\n", shader_name, list[i].name);
+                               fprintf(stderr, "%s: after '%s'\n", shader_name[c->type], list[i].name);
                                rc_print_program(&c->Program);
                        }
                }
        }
+}
+
+/* Executes a list of compiler passes given in the parameter 'list'. */
+void rc_run_compiler(struct radeon_compiler *c, struct radeon_compiler_pass *list)
+{
+       if (c->Debug & RC_DBG_LOG) {
+               fprintf(stderr, "%s: before compilation\n", shader_name[c->type]);
+               rc_print_program(&c->Program);
+       }
+
+       rc_run_compiler_passes(c, list);
+
        if (c->Debug & RC_DBG_STATS)
-               print_stats(c);
+               print_stats(c, shader_name[c->type]);
 }
 
 void rc_validate_final_shader(struct radeon_compiler *c, void *user)
index 2aa797801035f3121e9c547ba84646aba244cf60..e6633395895b7dbb2a0fe7ef3878b04a9ec2b436 100644 (file)
 
 struct rc_swizzle_caps;
 
+enum rc_program_type {
+       RC_VERTEX_PROGRAM,
+       RC_FRAGMENT_PROGRAM,
+       RC_NUM_PROGRAM_TYPES
+};
+
 struct radeon_compiler {
        struct memory_pool Pool;
        struct rc_program Program;
+       enum rc_program_type type;
        unsigned Debug:2;
        unsigned Error:1;
        char * ErrorMsg;
@@ -153,8 +160,8 @@ struct rc_program_stats {
 void rc_get_stats(struct radeon_compiler *c, struct rc_program_stats *s);
 
 /* Executes a list of compiler passes given in the parameter 'list'. */
-void rc_run_compiler(struct radeon_compiler *c, struct radeon_compiler_pass *list,
-                    const char *shader_name);
+void rc_run_compiler_passes(struct radeon_compiler *c, struct radeon_compiler_pass *list);
+void rc_run_compiler(struct radeon_compiler *c, struct radeon_compiler_pass *list);
 void rc_validate_final_shader(struct radeon_compiler *c, void *user);
 
 #endif /* RADEON_COMPILER_H */