X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fpanfrost%2Fpan_context.h;h=4c1580b33931c21cdea558e12f9e393fdaafad13;hb=2c5ba2ee6ea68aa3062156d1a4abfc3b2556775d;hp=b7c6bc51e46be2439f4215c88e29e588363a77b8;hpb=aaae6180bfeaced3d1c03c35340d4e39a34f66a6;p=mesa.git diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h index b7c6bc51e46..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,10 +97,19 @@ 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; + /* Compiler context */ + struct midgard_screen compiler; + /* Bound job and map of panfrost_job_key to jobs */ struct panfrost_job *job; struct hash_table *jobs; @@ -98,25 +117,28 @@ 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 varying_mem; - 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 */ - struct midgard_payload_vertex_tiler payload_vertex; - struct midgard_payload_vertex_tiler payload_tiler; + struct midgard_payload_vertex_tiler payloads[PIPE_SHADER_TYPES]; /* The fragment shader binary itself is pointed here (for the tripipe) but * also everything else in the shader core, including blending, the @@ -129,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 */ @@ -136,26 +159,20 @@ struct panfrost_context { union mali_attr attributes[PIPE_MAX_ATTRIBS]; - unsigned varying_height; - - 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]; - /* CSOs */ struct panfrost_rasterizer *rasterizer; - - struct panfrost_shader_variants *vs; - struct panfrost_shader_variants *fs; - + struct panfrost_shader_variants *shader[PIPE_SHADER_TYPES]; struct panfrost_vertex_state *vertex; struct pipe_vertex_buffer vertex_buffers[PIPE_MAX_ATTRIBS]; uint32_t vb_mask; + struct pipe_shader_buffer ssbo[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_BUFFERS]; + uint32_t ssbo_mask[PIPE_SHADER_TYPES]; + struct panfrost_sampler_state *samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; unsigned sampler_count[PIPE_SHADER_TYPES]; @@ -185,13 +202,6 @@ struct panfrost_context { /* True for t6XX, false for t8xx. */ bool is_t6xx; - /* If set, we'll require the use of single render-target framebuffer - * descriptors (SFBD), for older hardware -- specifically,