X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fr600%2Fr600_shader.h;h=cfdb0200333f4067800909d79ea99d0bdf511d62;hb=a6b5845a0d7547198037a2e5ea5c7d3f6f5f9f26;hp=f49e1c1d64ec4d65b7bed8400dee3b3ecec1aa70;hpb=3bfa345c1eb3b0ec008d29fc0c62fe941412e4c6;p=mesa.git diff --git a/src/gallium/drivers/r600/r600_shader.h b/src/gallium/drivers/r600/r600_shader.h index f49e1c1d64e..cfdb0200333 100644 --- a/src/gallium/drivers/r600/r600_shader.h +++ b/src/gallium/drivers/r600/r600_shader.h @@ -30,6 +30,16 @@ extern "C" { #endif +/* Valid shader configurations: + * + * API shaders VS | TCS | TES | GS |pass| PS + * are compiled as: | | | |thru| + * | | | | | + * Only VS & PS: VS | -- | -- | -- | -- | PS + * With GS: ES | -- | -- | GS | VS | PS + * With Tessel.: LS | HS | VS | -- | -- | PS + * With both: LS | HS | ES | GS | VS | PS + */ struct r600_shader_io { unsigned name; @@ -52,8 +62,8 @@ struct r600_shader { unsigned ninput; unsigned noutput; unsigned nlds; - struct r600_shader_io input[40]; - struct r600_shader_io output[40]; + struct r600_shader_io input[64]; + struct r600_shader_io output[64]; boolean uses_kill; boolean fs_write_all; boolean two_side; @@ -75,8 +85,8 @@ struct r600_shader { boolean has_txq_cube_array_z_comp; boolean uses_tex_buffers; boolean gs_prim_id_input; - /* Temporarily workaround SB not handling CF_INDEX_[01] index registers */ - boolean uses_index_registers; + + uint8_t ps_conservative_z; /* Size in bytes of a data item in the ring(s) (single vertex data). Stages with only one ring items 123 will be set to 0. */ @@ -86,9 +96,14 @@ struct r600_shader { unsigned max_arrays; unsigned num_arrays; unsigned vs_as_es; + unsigned vs_as_ls; unsigned vs_as_gs_a; + unsigned tes_as_es; + unsigned tcs_prim_mode; unsigned ps_prim_id_input; struct r600_shader_array * arrays; + + boolean uses_doubles; }; union r600_shader_key { @@ -100,8 +115,15 @@ union r600_shader_key { struct { unsigned prim_id_out:8; unsigned as_es:1; /* export shader */ + unsigned as_ls:1; /* local shader */ unsigned as_gs_a:1; } vs; + struct { + unsigned as_es:1; + } tes; + struct { + unsigned prim_mode:3; + } tcs; }; struct r600_shader_array { @@ -132,6 +154,7 @@ struct r600_pipe_shader { TGSI_INTERPOLATE_LOC_CENTER/SAMPLE/COUNT. Other input values return -1. */ int eg_get_interpolator_index(unsigned interpolate, unsigned location); +int r600_get_lds_unique_index(unsigned semantic_name, unsigned index); #ifdef __cplusplus } // extern "C"