X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgallium%2Fdrivers%2Fradeonsi%2Fsi_shader.h;h=2649a7cd5b7496062e72c7fc6e937040f5971544;hb=32694456f7d87df0d24a7d6a0746ae7d35c6f63a;hp=43d1b0d1bc1e1525e6785d2266012a3d6bd674b2;hpb=226f650d9222a191130ee673d2cb4405da972c4a;p=mesa.git diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index 43d1b0d1bc1..2649a7cd5b7 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -241,11 +241,16 @@ enum { }; /* Fields of driver-defined VS state SGPR. */ -/* Clamp vertex color output (only used in VS as VS). */ #define S_VS_STATE_CLAMP_VERTEX_COLOR(x) (((unsigned)(x) & 0x1) << 0) #define C_VS_STATE_CLAMP_VERTEX_COLOR 0xFFFFFFFE #define S_VS_STATE_INDEXED(x) (((unsigned)(x) & 0x1) << 1) #define C_VS_STATE_INDEXED 0xFFFFFFFD +#define S_VS_STATE_OUTPRIM(x) (((unsigned)(x) & 0x3) << 2) +#define C_VS_STATE_OUTPRIM 0xFFFFFFF3 +#define S_VS_STATE_PROVOKING_VTX_INDEX(x) (((unsigned)(x) & 0x3) << 4) +#define C_VS_STATE_PROVOKING_VTX_INDEX 0xFFFFFFCF +#define S_VS_STATE_STREAMOUT_QUERY_ENABLED(x) (((unsigned)(x) & 0x1) << 6) +#define C_VS_STATE_STREAMOUT_QUERY_ENABLED 0xFFFFFFBF #define S_VS_STATE_LS_OUT_PATCH_SIZE(x) (((unsigned)(x) & 0x1FFF) << 8) #define C_VS_STATE_LS_OUT_PATCH_SIZE 0xFFE000FF #define S_VS_STATE_LS_OUT_VERTEX_SIZE(x) (((unsigned)(x) & 0xFF) << 24) @@ -331,6 +336,7 @@ struct si_shader_selector { struct si_shader *main_shader_part; struct si_shader *main_shader_part_ls; /* as_ls is set in the key */ struct si_shader *main_shader_part_es; /* as_es is set in the key */ + struct si_shader *main_shader_part_ngg; /* as_ngg is set in the key */ struct si_shader *gs_copy_shader; @@ -469,6 +475,7 @@ union si_shader_part_key { unsigned last_input:4; unsigned as_ls:1; unsigned as_es:1; + unsigned as_ngg:1; /* Prologs for monolithic shaders shouldn't set EXEC. */ unsigned is_monolithic:1; } vs_prolog; @@ -524,11 +531,12 @@ struct si_shader_key { } ps; } part; - /* These two are initially set according to the NEXT_SHADER property, + /* These three are initially set according to the NEXT_SHADER property, * or guessed if the property doesn't seem correct. */ unsigned as_es:1; /* export shader, which precedes GS */ unsigned as_ls:1; /* local shader, which precedes TCS */ + unsigned as_ngg:1; /* VS, TES, or GS compiled as NGG primitive shader */ /* Flags for monolithic compilation only. */ struct { @@ -640,6 +648,15 @@ struct si_shader { struct ac_shader_config config; struct si_shader_info info; + struct { + uint16_t ngg_emit_size; /* in dwords */ + uint16_t hw_max_esverts; + uint16_t max_gsprims; + uint16_t max_out_verts; + uint16_t prim_amp_factor; + bool max_vert_out_per_gs_instance; + } ngg; + /* Shader key + LLVM IR + disassembly + statistics. * Generated for debug contexts only. */ @@ -654,7 +671,6 @@ struct si_shader { unsigned vgt_gsvs_ring_offset_1; unsigned vgt_gsvs_ring_offset_2; unsigned vgt_gsvs_ring_offset_3; - unsigned vgt_gs_out_prim_type; unsigned vgt_gsvs_ring_itemsize; unsigned vgt_gs_max_vert_out; unsigned vgt_gs_vert_itemsize; @@ -667,6 +683,22 @@ struct si_shader { unsigned vgt_esgs_ring_itemsize; } gs; + struct { + unsigned ge_max_output_per_subgroup; + unsigned ge_ngg_subgrp_cntl; + unsigned vgt_primitiveid_en; + unsigned vgt_gs_onchip_cntl; + unsigned vgt_gs_instance_cnt; + unsigned vgt_esgs_ring_itemsize; + unsigned vgt_reuse_off; + unsigned spi_vs_out_config; + unsigned spi_shader_idx_format; + unsigned spi_shader_pos_format; + unsigned pa_cl_vte_cntl; + unsigned pa_cl_ngg_cntl; + unsigned vgt_gs_max_vert_out; /* for API GS */ + } ngg; + struct { unsigned vgt_gs_mode; unsigned vgt_primitiveid_en; @@ -690,6 +722,7 @@ struct si_shader { /*For save precompute registers value */ unsigned vgt_tf_param; /* VGT_TF_PARAM */ unsigned vgt_vertex_reuse_block_cntl; /* VGT_VERTEX_REUSE_BLOCK_CNTL */ + unsigned ge_cntl; }; struct si_shader_part { @@ -753,6 +786,8 @@ si_get_main_shader_part(struct si_shader_selector *sel, return &sel->main_shader_part_ls; if (key->as_es) return &sel->main_shader_part_es; + if (key->as_ngg) + return &sel->main_shader_part_ngg; return &sel->main_shader_part; }