#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"
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 {
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;
/* 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 */
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 */
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];
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];
/* Should we enable helper invocations */
bool helper_invocations;
+
+ struct panfrost_bo *bo;
};
/* A collection of varyings (the CSO) */
struct mali_shader_meta *meta,
enum pipe_shader_ir ir_type,
const void *ir,
- const char *src,
gl_shader_stage stage,
- 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);
+ struct panfrost_shader_state *state,
+ uint64_t *outputs_written);
/* Instancing */
void
panfrost_compute_context_init(struct pipe_context *pctx);
+/* Varyings */
+
+void
+panfrost_emit_varying_descriptor(
+ struct panfrost_context *ctx,
+ unsigned vertex_count);
+
#endif