All four Tested-by: Nick Sarnie <[email protected]> using Gallium Nine.
On Sun, Nov 9, 2014 at 6:08 PM, Marek Olšák <[email protected]> wrote: > From: Marek Olšák <[email protected]> > > --- > src/gallium/auxiliary/tgsi/tgsi_ureg.c | 153 > ++------------------------ > src/gallium/auxiliary/tgsi/tgsi_ureg.h | 35 +----- > src/gallium/auxiliary/util/u_simple_shaders.c | 2 +- > src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 12 +- > src/mesa/state_tracker/st_mesa_to_tgsi.c | 12 +- > src/mesa/state_tracker/st_program.c | 23 ++-- > 6 files changed, 43 insertions(+), 194 deletions(-) > > diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c > b/src/gallium/auxiliary/tgsi/tgsi_ureg.c > index 6d3ac91..f524dfb 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 f014b53..f254b1e 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 280ed8f..0eeb7d9 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; > diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > index 0920987..5eb702e 100644 > --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > @@ -4723,7 +4723,8 @@ emit_wpos(struct st_context *st, > } > else if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT)) { > /* the driver supports lower-left origin, need to invert Y */ > - ureg_property_fs_coord_origin(ureg, > TGSI_FS_COORD_ORIGIN_LOWER_LEFT); > + ureg_property(ureg, TGSI_PROPERTY_FS_COORD_ORIGIN, > + TGSI_FS_COORD_ORIGIN_LOWER_LEFT); > invert = TRUE; > } > else > @@ -4733,7 +4734,8 @@ emit_wpos(struct st_context *st, > /* Fragment shader wants origin in lower-left */ > if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT)) > /* the driver supports lower-left origin */ > - ureg_property_fs_coord_origin(ureg, > TGSI_FS_COORD_ORIGIN_LOWER_LEFT); > + ureg_property(ureg, TGSI_PROPERTY_FS_COORD_ORIGIN, > + TGSI_FS_COORD_ORIGIN_LOWER_LEFT); > else if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT)) > /* the driver supports upper-left origin, need to invert Y */ > invert = TRUE; > @@ -4746,7 +4748,8 @@ emit_wpos(struct st_context *st, > if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER)) { > /* the driver supports pixel center integer */ > adjY[1] = (float)t->fs_coord_y_flip; > - ureg_property_fs_coord_pixel_center(ureg, > TGSI_FS_COORD_PIXEL_CENTER_INTEGER); > + ureg_property(ureg, TGSI_PROPERTY_FS_COORD_PIXEL_CENTER, > + TGSI_FS_COORD_PIXEL_CENTER_INTEGER); > } > else if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER)) { > /* the driver supports pixel center half integer, need to bias > X,Y */ > @@ -4765,7 +4768,8 @@ emit_wpos(struct st_context *st, > else if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER)) { > /* the driver supports pixel center integer, need to bias X,Y */ > adjX = adjY[0] = adjY[1] = 0.5f; > - ureg_property_fs_coord_pixel_center(ureg, > TGSI_FS_COORD_PIXEL_CENTER_INTEGER); > + ureg_property(ureg, TGSI_PROPERTY_FS_COORD_PIXEL_CENTER, > + TGSI_FS_COORD_PIXEL_CENTER_INTEGER); > } > else > assert(0); > diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c > b/src/mesa/state_tracker/st_mesa_to_tgsi.c > index 5659c08..76341b5 100644 > --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c > +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c > @@ -893,7 +893,8 @@ emit_wpos(struct st_context *st, > } > else if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT)) { > /* the driver supports lower-left origin, need to invert Y */ > - ureg_property_fs_coord_origin(ureg, > TGSI_FS_COORD_ORIGIN_LOWER_LEFT); > + ureg_property(ureg, TGSI_PROPERTY_FS_COORD_ORIGIN, > + TGSI_FS_COORD_ORIGIN_LOWER_LEFT); > invert = TRUE; > } > else > @@ -903,7 +904,8 @@ emit_wpos(struct st_context *st, > /* Fragment shader wants origin in lower-left */ > if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT)) > /* the driver supports lower-left origin */ > - ureg_property_fs_coord_origin(ureg, > TGSI_FS_COORD_ORIGIN_LOWER_LEFT); > + ureg_property(ureg, TGSI_PROPERTY_FS_COORD_ORIGIN, > + TGSI_FS_COORD_ORIGIN_LOWER_LEFT); > else if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT)) > /* the driver supports upper-left origin, need to invert Y */ > invert = TRUE; > @@ -916,7 +918,8 @@ emit_wpos(struct st_context *st, > if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER)) { > /* the driver supports pixel center integer */ > adjY[1] = (float)!t->fs_coord_y_flip; > - ureg_property_fs_coord_pixel_center(ureg, > TGSI_FS_COORD_PIXEL_CENTER_INTEGER); > + ureg_property(ureg, TGSI_PROPERTY_FS_COORD_PIXEL_CENTER, > + TGSI_FS_COORD_PIXEL_CENTER_INTEGER); > } > else if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER)) { > /* the driver supports pixel center half integer, need to bias > X,Y */ > @@ -935,7 +938,8 @@ emit_wpos(struct st_context *st, > else if (pscreen->get_param(pscreen, > PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER)) { > /* the driver supports pixel center integer, need to bias X,Y */ > adjX = adjY[0] = adjY[1] = 0.5f; > - ureg_property_fs_coord_pixel_center(ureg, > TGSI_FS_COORD_PIXEL_CENTER_INTEGER); > + ureg_property(ureg, TGSI_PROPERTY_FS_COORD_PIXEL_CENTER, > + TGSI_FS_COORD_PIXEL_CENTER_INTEGER); > } > else > assert(0); > diff --git a/src/mesa/state_tracker/st_program.c > b/src/mesa/state_tracker/st_program.c > index 926086b..737c269 100644 > --- a/src/mesa/state_tracker/st_program.c > +++ b/src/mesa/state_tracker/st_program.c > @@ -742,21 +742,25 @@ st_translate_fragment_program(struct st_context *st, > debug_printf("\n"); > } > if (write_all == GL_TRUE) > - ureg_property_fs_color0_writes_all_cbufs(ureg, 1); > + ureg_property(ureg, TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS, 1); > > if (stfp->Base.FragDepthLayout != FRAG_DEPTH_LAYOUT_NONE) { > switch (stfp->Base.FragDepthLayout) { > case FRAG_DEPTH_LAYOUT_ANY: > - ureg_property_fs_depth_layout(ureg, TGSI_FS_DEPTH_LAYOUT_ANY); > + ureg_property(ureg, TGSI_PROPERTY_FS_DEPTH_LAYOUT, > + TGSI_FS_DEPTH_LAYOUT_ANY); > break; > case FRAG_DEPTH_LAYOUT_GREATER: > - ureg_property_fs_depth_layout(ureg, > TGSI_FS_DEPTH_LAYOUT_GREATER); > + ureg_property(ureg, TGSI_PROPERTY_FS_DEPTH_LAYOUT, > + TGSI_FS_DEPTH_LAYOUT_GREATER); > break; > case FRAG_DEPTH_LAYOUT_LESS: > - ureg_property_fs_depth_layout(ureg, TGSI_FS_DEPTH_LAYOUT_LESS); > + ureg_property(ureg, TGSI_PROPERTY_FS_DEPTH_LAYOUT, > + TGSI_FS_DEPTH_LAYOUT_LESS); > break; > case FRAG_DEPTH_LAYOUT_UNCHANGED: > - ureg_property_fs_depth_layout(ureg, > TGSI_FS_DEPTH_LAYOUT_UNCHANGED); > + ureg_property(ureg, TGSI_PROPERTY_FS_DEPTH_LAYOUT, > + TGSI_FS_DEPTH_LAYOUT_UNCHANGED); > break; > default: > assert(0); > @@ -1122,10 +1126,11 @@ st_translate_geometry_program(struct st_context > *st, > stgp->tgsi.tokens = NULL; > } > > - ureg_property_gs_input_prim(ureg, stgp->Base.InputType); > - ureg_property_gs_output_prim(ureg, stgp->Base.OutputType); > - ureg_property_gs_max_vertices(ureg, stgp->Base.VerticesOut); > - ureg_property_gs_invocations(ureg, stgp->Base.Invocations); > + ureg_property(ureg, TGSI_PROPERTY_GS_INPUT_PRIM, stgp->Base.InputType); > + ureg_property(ureg, TGSI_PROPERTY_GS_OUTPUT_PRIM, > stgp->Base.OutputType); > + ureg_property(ureg, TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES, > + stgp->Base.VerticesOut); > + ureg_property(ureg, TGSI_PROPERTY_GS_INVOCATIONS, > stgp->Base.Invocations); > > if (stgp->glsl_to_tgsi) > st_translate_program(st->ctx, > -- > 2.1.0 > > _______________________________________________ > mesa-dev mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
