X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fpanfrost%2Fpan_context.h;h=4c1580b33931c21cdea558e12f9e393fdaafad13;hb=2c5ba2ee6ea68aa3062156d1a4abfc3b2556775d;hp=f85d70a123df5497e07d13375c372d4b9eaf520b;hpb=8b53230d47e2287376fd407bb08eb993af7d47ad;p=mesa.git diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h index f85d70a123d..4c1580b3393 100644 --- a/src/gallium/drivers/panfrost/pan_context.h +++ b/src/gallium/drivers/panfrost/pan_context.h @@ -32,6 +32,7 @@ #include "pan_resource.h" #include "pan_job.h" #include "pan_blend.h" +#include "pan_encoder.h" #include "pipe/p_compiler.h" #include "pipe/p_config.h" @@ -44,6 +45,7 @@ #include "util/hash_table.h" #include "midgard/midgard_compile.h" +#include "compiler/shader_enums.h" /* Forward declare to avoid extra header dep */ struct prim_convert_context; @@ -78,8 +80,16 @@ struct panfrost_query { unsigned type; unsigned index; - /* Memory for the GPU to writeback the value of the query */ - struct panfrost_transfer transfer; + union { + /* For computed queries. 64-bit to prevent overflow */ + struct { + uint64_t start; + uint64_t end; + }; + + /* Memory for the GPU to writeback the value of the query */ + struct panfrost_transfer transfer; + }; }; struct panfrost_fence { @@ -87,6 +97,12 @@ struct panfrost_fence { int fd; }; +struct panfrost_streamout { + struct pipe_stream_output_target *targets[PIPE_MAX_SO_BUFFERS]; + uint32_t offsets[PIPE_MAX_SO_BUFFERS]; + unsigned num_targets; +}; + struct panfrost_context { /* Gallium context */ struct pipe_context base; @@ -101,19 +117,24 @@ struct panfrost_context { /* panfrost_resource -> panfrost_job */ struct hash_table *write_jobs; + /* Within a launch_grid call.. */ + const struct pipe_grid_info *compute_grid; + /* Bit mask for supported PIPE_DRAW for this hardware */ unsigned draw_modes; struct pipe_framebuffer_state pipe_framebuffer; + struct panfrost_streamout streamout; struct panfrost_memory cmdstream_persistent; - struct panfrost_memory shaders; struct panfrost_memory scratchpad; struct panfrost_memory tiler_heap; - struct panfrost_memory tiler_polygon_list; struct panfrost_memory tiler_dummy; struct panfrost_memory depth_stencil_buffer; + bool active_queries; + uint64_t prims_generated; + uint64_t tf_prims_generated; struct panfrost_query *occlusion_query; /* Each draw has corresponding vertex and tiler payloads */ @@ -130,6 +151,7 @@ struct panfrost_context { unsigned vertex_count; unsigned instance_count; + enum pipe_prim_type active_prim; /* If instancing is enabled, vertex count padded for instance; if * it is disabled, just equal to plain vertex count */ @@ -137,9 +159,6 @@ struct panfrost_context { union mali_attr attributes[PIPE_MAX_ATTRIBS]; - struct mali_single_framebuffer vt_framebuffer_sfbd; - struct bifrost_framebuffer vt_framebuffer_mfbd; - /* TODO: Multiple uniform buffers (index =/= 0), finer updates? */ struct panfrost_constant_buffer constant_buffer[PIPE_SHADER_TYPES]; @@ -212,9 +231,12 @@ struct panfrost_shader_state { bool writes_point_size; bool reads_point_coord; bool reads_face; + bool reads_frag_coord; struct mali_attr_meta varyings[PIPE_MAX_ATTRIBS]; gl_varying_slot varyings_loc[PIPE_MAX_ATTRIBS]; + struct pipe_stream_output_info stream_output; + uint64_t so_mask; unsigned sysval_count; unsigned sysval[MAX_SYSVAL_COUNT]; @@ -227,11 +249,21 @@ struct panfrost_shader_state { /* Should we enable helper invocations */ bool helper_invocations; + + struct panfrost_bo *bo; }; /* A collection of varyings (the CSO) */ struct panfrost_shader_variants { - struct pipe_shader_state base; + /* A panfrost_shader_variants can represent a shader for + * either graphics or compute */ + + bool is_compute; + + union { + struct pipe_shader_state base; + struct pipe_compute_state cbase; + }; struct panfrost_shader_state variants[MAX_SHADER_VARIANTS]; unsigned variant_count; @@ -305,30 +337,9 @@ panfrost_shader_compile( struct mali_shader_meta *meta, enum pipe_shader_ir ir_type, const void *ir, - const char *src, - int type, - struct panfrost_shader_state *state); - -void -panfrost_pack_work_groups_compute( - struct mali_vertex_tiler_prefix *out, - unsigned num_x, - unsigned num_y, - unsigned num_z, - unsigned size_x, - unsigned size_y, - unsigned size_z); - -void -panfrost_pack_work_groups_fused( - struct mali_vertex_tiler_prefix *vertex, - struct mali_vertex_tiler_prefix *tiler, - unsigned num_x, - unsigned num_y, - unsigned num_z, - unsigned size_x, - unsigned size_y, - unsigned size_z); + gl_shader_stage stage, + struct panfrost_shader_state *state, + uint64_t *outputs_written); /* Instancing */ @@ -357,4 +368,11 @@ pan_expand_shift_odd(struct pan_shift_odd o); void panfrost_compute_context_init(struct pipe_context *pctx); +/* Varyings */ + +void +panfrost_emit_varying_descriptor( + struct panfrost_context *ctx, + unsigned vertex_count); + #endif