[Mesa-dev] [PATCH 07/14] i965: Add brw_scalar_prog_key structure

Jordan Justen jordan.l.justen at intel.com
Mon Sep 1 09:44:31 PDT 2014


All fields were migrated from brw_wm_prog_key. In future updates, we can move
these FS specific fields back into brw_wm_prog_key.

The scalar_visitor and scalar_generator class mainly use these structures now.

Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
---
 src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp    |  2 +-
 src/mesa/drivers/dri/i965/brw_context.h            |  2 +-
 src/mesa/drivers/dri/i965/brw_fs.cpp               |  7 ++++---
 src/mesa/drivers/dri/i965/brw_program.h            | 24 ++++++++++++++++++++++
 src/mesa/drivers/dri/i965/brw_scalar.h             |  7 ++++---
 src/mesa/drivers/dri/i965/brw_scalar_generator.cpp |  2 +-
 src/mesa/drivers/dri/i965/brw_scalar_visitor.cpp   |  2 +-
 src/mesa/drivers/dri/i965/brw_wm.c                 | 12 ++++++-----
 src/mesa/drivers/dri/i965/brw_wm.h                 | 22 +-------------------
 9 files changed, 44 insertions(+), 36 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp
index e04dfd5..843875b 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp
@@ -30,7 +30,7 @@ brw_blorp_eu_emitter::brw_blorp_eu_emitter(struct brw_context *brw,
                                            bool debug_flag)
    : mem_ctx(ralloc_context(NULL)),
      generator(brw, mem_ctx,
-               rzalloc(mem_ctx, struct brw_wm_prog_key),
+               (brw_scalar_prog_key*) rzalloc(mem_ctx, struct brw_wm_prog_key),
                (brw_scalar_prog_data*) rzalloc(mem_ctx, struct brw_wm_prog_data),
                NULL, NULL, false, debug_flag)
 {
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index bd9c25d..8313a4b 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -316,7 +316,7 @@ struct brw_stage_prog_data {
 
 /* Data about a particular attempt to compile a program.  Note that
  * there can be many of these, each in a different GL state
- * corresponding to a different brw_wm_prog_key struct, with different
+ * corresponding to a different brw_scalar_prog_key struct, with different
  * compiled programs.
  *
  * Note: brw_scalar_prog_data_compare() must be updated when adding fields to this
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index e1618fe..9f14039 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -3440,7 +3440,7 @@ brw_wm_fs_emit(struct brw_context *brw,
    }
 
    const unsigned *assembly = NULL;
-   scalar_generator g(brw, mem_ctx, key, prog_data, prog, fp,
+   scalar_generator g(brw, mem_ctx, &key->base, prog_data, prog, fp,
                       v.runtime_check_aads_emit, INTEL_DEBUG & DEBUG_WM);
    assembly = g.generate_assembly(simd8_cfg, simd16_cfg,
                                   final_assembly_size);
@@ -3463,7 +3463,8 @@ bool
 brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
 {
    struct brw_context *brw = brw_context(ctx);
-   struct brw_wm_prog_key key;
+   struct brw_wm_prog_key wm_key;
+   struct brw_scalar_prog_key& key = wm_key.base;
 
    if (!prog->_LinkedShaders[MESA_SHADER_FRAGMENT])
       return true;
@@ -3527,7 +3528,7 @@ brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
    uint32_t old_prog_offset = brw->wm.base.prog_offset;
    struct brw_wm_prog_data *old_prog_data = brw->wm.prog_data;
 
-   bool success = do_wm_prog(brw, prog, bfp, &key);
+   bool success = do_wm_prog(brw, prog, bfp, &wm_key);
 
    brw->wm.base.prog_offset = old_prog_offset;
    brw->wm.prog_data = old_prog_data;
diff --git a/src/mesa/drivers/dri/i965/brw_program.h b/src/mesa/drivers/dri/i965/brw_program.h
index a8650c3..792bbc6 100644
--- a/src/mesa/drivers/dri/i965/brw_program.h
+++ b/src/mesa/drivers/dri/i965/brw_program.h
@@ -57,6 +57,30 @@ struct brw_sampler_prog_key_data {
    uint8_t gen6_gather_wa[MAX_SAMPLERS];
 };
 
+struct brw_scalar_prog_key {
+   uint8_t iz_lookup;
+   GLuint stats_wm:1;
+   GLuint flat_shade:1;
+   GLuint persample_shading:1;
+   GLuint persample_2x:1;
+   GLuint nr_color_regions:5;
+   GLuint replicate_alpha:1;
+   GLuint render_to_fbo:1;
+   GLuint clamp_fragment_color:1;
+   GLuint compute_pos_offset:1;
+   GLuint compute_sample_id:1;
+   GLuint line_aa:2;
+   GLuint high_quality_derivatives:1;
+
+   GLushort drawable_height;
+   GLbitfield64 input_slots_valid;
+   GLuint program_string_id:32;
+   GLenum alpha_test_func;          /* < For Gen4/5 MRT alpha test */
+   float alpha_test_ref;
+
+   struct brw_sampler_prog_key_data tex;
+};
+
 #ifdef __cplusplus
 extern "C" {
 #endif
diff --git a/src/mesa/drivers/dri/i965/brw_scalar.h b/src/mesa/drivers/dri/i965/brw_scalar.h
index b5d4372..d19ab56 100644
--- a/src/mesa/drivers/dri/i965/brw_scalar.h
+++ b/src/mesa/drivers/dri/i965/brw_scalar.h
@@ -50,6 +50,7 @@ extern "C" {
 #include "brw_eu.h"
 #include "brw_wm.h"
 #include "brw_shader.h"
+#include "brw_program.h"
 #include "intel_asm_annotation.h"
 
 #ifdef __cplusplus
@@ -481,7 +482,7 @@ public:
    void visit_atomic_counter_intrinsic(ir_call *ir);
 
    struct gl_fragment_program *fp;
-   const struct brw_wm_prog_key *const key;
+   const struct brw_scalar_prog_key *const key;
    struct brw_scalar_prog_data *prog_data;
    unsigned int sanity_param_count;
 
@@ -584,7 +585,7 @@ class scalar_generator
 public:
    scalar_generator(struct brw_context *brw,
                     void *mem_ctx,
-                    const struct brw_wm_prog_key *key,
+                    const struct brw_scalar_prog_key *key,
                     struct brw_scalar_prog_data *prog_data,
                     struct gl_shader_program *prog,
                     struct gl_fragment_program *fp,
@@ -690,7 +691,7 @@ private:
    struct gl_context *ctx;
 
    struct brw_compile *p;
-   const struct brw_wm_prog_key *const key;
+   const struct brw_scalar_prog_key *const key;
    struct brw_scalar_prog_data *prog_data;
 
    struct gl_shader_program *prog;
diff --git a/src/mesa/drivers/dri/i965/brw_scalar_generator.cpp b/src/mesa/drivers/dri/i965/brw_scalar_generator.cpp
index 74c5b79..02b327c 100644
--- a/src/mesa/drivers/dri/i965/brw_scalar_generator.cpp
+++ b/src/mesa/drivers/dri/i965/brw_scalar_generator.cpp
@@ -38,7 +38,7 @@ extern "C" {
 
 scalar_generator::scalar_generator(struct brw_context *brw,
                                    void *mem_ctx,
-                                   const struct brw_wm_prog_key *key,
+                                   const struct brw_scalar_prog_key *key,
                                    struct brw_scalar_prog_data *prog_data,
                                    struct gl_shader_program *prog,
                                    struct gl_fragment_program *fp,
diff --git a/src/mesa/drivers/dri/i965/brw_scalar_visitor.cpp b/src/mesa/drivers/dri/i965/brw_scalar_visitor.cpp
index d98b2cc..e1b1fd7 100644
--- a/src/mesa/drivers/dri/i965/brw_scalar_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_scalar_visitor.cpp
@@ -3257,7 +3257,7 @@ scalar_visitor::scalar_visitor(struct brw_context *brw,
                                unsigned dispatch_width)
    : backend_visitor(brw, shader_prog, &fp->Base, &prog_data->base.base,
                      MESA_SHADER_FRAGMENT),
-     key(key), prog_data(&prog_data->base),
+     key(&key->base), prog_data(&prog_data->base),
      dispatch_width(dispatch_width)
 {
    this->fp = fp;
diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c
index e627fbc..e913e78 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -177,8 +177,8 @@ bool do_wm_prog(struct brw_context *brw,
    prog_data.base.base.nr_params = param_count;
 
    prog_data.base.barycentric_interp_modes =
-      brw_compute_barycentric_interp_modes(brw, key->flat_shade,
-                                           key->persample_shading,
+      brw_compute_barycentric_interp_modes(brw, key->base.flat_shade,
+                                           key->base.persample_shading,
                                            &fp->program);
 
    program = brw_wm_fs_emit(brw, mem_ctx, key, &prog_data,
@@ -244,11 +244,12 @@ brw_debug_recompile_sampler_key(struct brw_context *brw,
 void
 brw_wm_debug_recompile(struct brw_context *brw,
                        struct gl_shader_program *prog,
-                       const struct brw_wm_prog_key *key)
+                       const struct brw_wm_prog_key *wm_key)
 {
    struct brw_cache_item *c = NULL;
-   const struct brw_wm_prog_key *old_key = NULL;
+   const struct brw_scalar_prog_key *old_key = NULL;
    bool found = false;
+   const struct brw_scalar_prog_key *key = &wm_key->base;
 
    perf_debug("Recompiling fragment shader for program %d\n", prog->Name);
 
@@ -394,12 +395,13 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
 }
 
 static void brw_wm_populate_key( struct brw_context *brw,
-				 struct brw_wm_prog_key *key )
+				 struct brw_wm_prog_key *wm_key )
 {
    struct gl_context *ctx = &brw->ctx;
    /* BRW_NEW_FRAGMENT_PROGRAM */
    const struct brw_fragment_program *fp =
       (struct brw_fragment_program *)brw->fragment_program;
+   struct brw_scalar_prog_key *key = &wm_key->base;
    const struct gl_program *prog = (struct gl_program *) brw->fragment_program;
    GLuint lookup = 0;
    GLuint line_aa;
diff --git a/src/mesa/drivers/dri/i965/brw_wm.h b/src/mesa/drivers/dri/i965/brw_wm.h
index 2a2dde5..8a19364 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.h
+++ b/src/mesa/drivers/dri/i965/brw_wm.h
@@ -58,27 +58,7 @@
 #define AA_ALWAYS    2
 
 struct brw_wm_prog_key {
-   uint8_t iz_lookup;
-   GLuint stats_wm:1;
-   GLuint flat_shade:1;
-   GLuint persample_shading:1;
-   GLuint persample_2x:1;
-   GLuint nr_color_regions:5;
-   GLuint replicate_alpha:1;
-   GLuint render_to_fbo:1;
-   GLuint clamp_fragment_color:1;
-   GLuint compute_pos_offset:1;
-   GLuint compute_sample_id:1;
-   GLuint line_aa:2;
-   GLuint high_quality_derivatives:1;
-
-   GLushort drawable_height;
-   GLbitfield64 input_slots_valid;
-   GLuint program_string_id:32;
-   GLenum alpha_test_func;          /* < For Gen4/5 MRT alpha test */
-   float alpha_test_ref;
-
-   struct brw_sampler_prog_key_data tex;
+   struct brw_scalar_prog_key base;
 };
 
 /**
-- 
2.1.0



More information about the mesa-dev mailing list