[Mesa-dev] [PATCH 4/4] tgsi/ureg: simplify code for declaring properties
Commend Sarnex
commendsarnex at gmail.com
Fri Nov 14 13:03:38 PST 2014
All four Tested-by: Nick Sarnie <commendsarnex at gmail.com> using Gallium
Nine.
On Sun, Nov 9, 2014 at 6:08 PM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ---
> 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
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20141114/c42d6719/attachment-0001.html>
More information about the mesa-dev
mailing list