diff options
author | Marek Olšák <[email protected]> | 2014-11-09 23:35:08 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2014-11-16 01:28:26 +0100 |
commit | 48f1409c3bf392f4b277eb6ecaf64e68e314e259 (patch) | |
tree | 78c13ec7d8b8e58b94640401d7ebdd74866b0c2b /src/gallium | |
parent | e6a2d3f7b621d1984f82b557175a8af9555b80ac (diff) |
tgsi/ureg: simplify code for declaring properties
Tested-by: Nick Sarnie <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_ureg.c | 153 | ||||
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_ureg.h | 35 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_simple_shaders.c | 2 |
3 files changed, 13 insertions, 177 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c index 6d3ac918a59..f524dfbca5c 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c @@ -165,15 +165,7 @@ struct ureg_program struct const_decl const_decls; struct const_decl const_decls2D[PIPE_MAX_CONSTANT_BUFFERS]; - unsigned property_gs_input_prim; - unsigned property_gs_output_prim; - unsigned property_gs_max_vertices; - unsigned property_gs_invocations; - unsigned char property_fs_coord_origin; /* = TGSI_FS_COORD_ORIGIN_* */ - unsigned char property_fs_coord_pixel_center; /* = TGSI_FS_COORD_PIXEL_CENTER_* */ - unsigned char property_fs_color0_writes_all_cbufs; /* = TGSI_FS_COLOR0_WRITES_ALL_CBUFS * */ - unsigned char property_fs_depth_layout; /* TGSI_FS_DEPTH_LAYOUT */ - boolean property_vs_window_space_position; /* TGSI_VS_WINDOW_SPACE_POSITION */ + unsigned properties[TGSI_PROPERTY_COUNT]; unsigned nr_addrs; unsigned nr_preds; @@ -278,65 +270,10 @@ ureg_dst_register( unsigned file, void -ureg_property_gs_input_prim(struct ureg_program *ureg, - unsigned input_prim) +ureg_property(struct ureg_program *ureg, unsigned name, unsigned value) { - ureg->property_gs_input_prim = input_prim; -} - -void -ureg_property_gs_output_prim(struct ureg_program *ureg, - unsigned output_prim) -{ - ureg->property_gs_output_prim = output_prim; -} - -void -ureg_property_gs_max_vertices(struct ureg_program *ureg, - unsigned max_vertices) -{ - ureg->property_gs_max_vertices = max_vertices; -} -void -ureg_property_gs_invocations(struct ureg_program *ureg, - unsigned invocations) -{ - ureg->property_gs_invocations = invocations; -} - -void -ureg_property_fs_coord_origin(struct ureg_program *ureg, - unsigned fs_coord_origin) -{ - ureg->property_fs_coord_origin = fs_coord_origin; -} - -void -ureg_property_fs_coord_pixel_center(struct ureg_program *ureg, - unsigned fs_coord_pixel_center) -{ - ureg->property_fs_coord_pixel_center = fs_coord_pixel_center; -} - -void -ureg_property_fs_color0_writes_all_cbufs(struct ureg_program *ureg, - unsigned fs_color0_writes_all_cbufs) -{ - ureg->property_fs_color0_writes_all_cbufs = fs_color0_writes_all_cbufs; -} - -void -ureg_property_fs_depth_layout(struct ureg_program *ureg, - unsigned fs_depth_layout) -{ - ureg->property_fs_depth_layout = fs_depth_layout; -} - -void -ureg_property_vs_window_space_position(struct ureg_program *ureg, - boolean vs_window_space_position) -{ - ureg->property_vs_window_space_position = vs_window_space_position; + assert(name < Elements(ureg->properties)); + ureg->properties[name] = value; } struct ureg_src @@ -1452,77 +1389,9 @@ static void emit_decls( struct ureg_program *ureg ) { unsigned i; - if (ureg->property_gs_input_prim != ~0) { - assert(ureg->processor == TGSI_PROCESSOR_GEOMETRY); - - emit_property(ureg, - TGSI_PROPERTY_GS_INPUT_PRIM, - ureg->property_gs_input_prim); - } - - if (ureg->property_gs_output_prim != ~0) { - assert(ureg->processor == TGSI_PROCESSOR_GEOMETRY); - - emit_property(ureg, - TGSI_PROPERTY_GS_OUTPUT_PRIM, - ureg->property_gs_output_prim); - } - - if (ureg->property_gs_max_vertices != ~0) { - assert(ureg->processor == TGSI_PROCESSOR_GEOMETRY); - - emit_property(ureg, - TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES, - ureg->property_gs_max_vertices); - } - - if (ureg->property_gs_invocations != ~0) { - assert(ureg->processor == TGSI_PROCESSOR_GEOMETRY); - - emit_property(ureg, - TGSI_PROPERTY_GS_INVOCATIONS, - ureg->property_gs_invocations); - } - - if (ureg->property_fs_coord_origin) { - assert(ureg->processor == TGSI_PROCESSOR_FRAGMENT); - - emit_property(ureg, - TGSI_PROPERTY_FS_COORD_ORIGIN, - ureg->property_fs_coord_origin); - } - - if (ureg->property_fs_coord_pixel_center) { - assert(ureg->processor == TGSI_PROCESSOR_FRAGMENT); - - emit_property(ureg, - TGSI_PROPERTY_FS_COORD_PIXEL_CENTER, - ureg->property_fs_coord_pixel_center); - } - - if (ureg->property_fs_color0_writes_all_cbufs) { - assert(ureg->processor == TGSI_PROCESSOR_FRAGMENT); - - emit_property(ureg, - TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS, - ureg->property_fs_color0_writes_all_cbufs); - } - - if (ureg->property_fs_depth_layout) { - assert(ureg->processor == TGSI_PROCESSOR_FRAGMENT); - - emit_property(ureg, - TGSI_PROPERTY_FS_DEPTH_LAYOUT, - ureg->property_fs_depth_layout); - } - - if (ureg->property_vs_window_space_position) { - assert(ureg->processor == TGSI_PROCESSOR_VERTEX); - - emit_property(ureg, - TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION, - ureg->property_vs_window_space_position); - } + for (i = 0; i < Elements(ureg->properties); i++) + if (ureg->properties[i] != ~0) + emit_property(ureg, i, ureg->properties[i]); if (ureg->processor == TGSI_PROCESSOR_VERTEX) { for (i = 0; i < UREG_MAX_INPUT; i++) { @@ -1773,15 +1642,15 @@ void ureg_free_tokens( const struct tgsi_token *tokens ) struct ureg_program *ureg_create( unsigned processor ) { + int i; struct ureg_program *ureg = CALLOC_STRUCT( ureg_program ); if (ureg == NULL) goto no_ureg; ureg->processor = processor; - ureg->property_gs_input_prim = ~0; - ureg->property_gs_output_prim = ~0; - ureg->property_gs_max_vertices = ~0; - ureg->property_gs_invocations = ~0; + + for (i = 0; i < Elements(ureg->properties); i++) + ureg->properties[i] = ~0; ureg->free_temps = util_bitmask_create(); if (ureg->free_temps == NULL) diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h b/src/gallium/auxiliary/tgsi/tgsi_ureg.h index f014b5304a5..f254b1eb1a8 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h @@ -153,40 +153,7 @@ ureg_create_shader_and_destroy( struct ureg_program *p, */ void -ureg_property_gs_input_prim(struct ureg_program *ureg, - unsigned input_prim); - -void -ureg_property_gs_output_prim(struct ureg_program *ureg, - unsigned output_prim); - -void -ureg_property_gs_max_vertices(struct ureg_program *ureg, - unsigned max_vertices); - -void -ureg_property_gs_invocations(struct ureg_program *ureg, - unsigned invocations); - -void -ureg_property_fs_coord_origin(struct ureg_program *ureg, - unsigned fs_coord_origin); - -void -ureg_property_fs_coord_pixel_center(struct ureg_program *ureg, - unsigned fs_coord_pixel_center); - -void -ureg_property_fs_color0_writes_all_cbufs(struct ureg_program *ureg, - unsigned fs_color0_writes_all_cbufs); - -void -ureg_property_fs_depth_layout(struct ureg_program *ureg, - unsigned fs_depth_layout); - -void -ureg_property_vs_window_space_position(struct ureg_program *ureg, - boolean vs_window_space_position); +ureg_property(struct ureg_program *ureg, unsigned name, unsigned value); /*********************************************************************** diff --git a/src/gallium/auxiliary/util/u_simple_shaders.c b/src/gallium/auxiliary/util/u_simple_shaders.c index 280ed8f4cb9..0eeb7d99173 100644 --- a/src/gallium/auxiliary/util/u_simple_shaders.c +++ b/src/gallium/auxiliary/util/u_simple_shaders.c @@ -84,7 +84,7 @@ util_make_vertex_passthrough_shader_with_so(struct pipe_context *pipe, return NULL; if (window_space) - ureg_property_vs_window_space_position(ureg, TRUE); + ureg_property(ureg, TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION, TRUE); for (i = 0; i < num_attribs; i++) { struct ureg_src src; |