#include <assert.h>
#include "pan_resource.h"
#include "pan_job.h"
+#include "pan_blend.h"
#include "pipe/p_compiler.h"
#include "pipe/p_config.h"
int fd;
};
-#define PANFROST_MAX_TRANSIENT_ENTRIES 64
-
-struct panfrost_transient_pool {
- /* Memory blocks in the pool */
- struct panfrost_memory_entry *entries[PANFROST_MAX_TRANSIENT_ENTRIES];
-
- /* Number of entries we own */
- unsigned entry_count;
-
- /* Current entry that we are writing to, zero-indexed, strictly less than entry_count */
- unsigned entry_index;
-
- /* Number of bytes into the current entry we are */
- off_t entry_offset;
-
- /* Entry size (all entries must be homogenous) */
- size_t entry_size;
-};
-
struct panfrost_context {
/* Gallium context */
struct pipe_context base;
struct pipe_framebuffer_state pipe_framebuffer;
- /* The number of concurrent FBOs allowed depends on the number of pools
- * used; pools are ringed for parallelism opportunities */
-
- struct panfrost_transient_pool transient_pools[2];
- int cmdstream_i;
-
struct panfrost_memory cmdstream_persistent;
struct panfrost_memory shaders;
struct panfrost_memory scratchpad;
int dirty;
unsigned vertex_count;
+ unsigned instance_count;
+
+ /* If instancing is enabled, vertex count padded for instance; if
+ * it is disabled, just equal to plain vertex count */
+ unsigned padded_count;
union mali_attr attributes[PIPE_MAX_ATTRIBS];
* there's no real advantage to doing so */
bool require_sfbd;
- uint32_t out_sync;
+ uint32_t out_sync;
};
/* Corresponds to the CSO */
unsigned tiler_gl_enables;
};
-struct panfrost_blend_state {
- struct pipe_blend_state base;
-
- /* Whether a blend shader is in use */
- bool has_blend_shader;
-
- /* Compiled fixed function command */
- struct mali_blend_equation equation;
- float constant;
-
- /* Compiled blend shader */
- mali_ptr blend_shader;
- int blend_work_count;
-};
-
/* Variants bundle together to form the backing CSO, bundling multiple
* shaders with varying emulated features baked in (alpha test
* parameters, etc) */
/* Compiled, mapped descriptor, ready for the hardware */
bool compiled;
struct mali_shader_meta *tripipe;
- mali_ptr tripipe_gpu;
/* Non-descript information */
int uniform_count;
void
panfrost_shader_compile(struct panfrost_context *ctx, struct mali_shader_meta *meta, 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);
+
+/* Instancing */
+
+mali_ptr
+panfrost_vertex_buffer_address(struct panfrost_context *ctx, unsigned i);
+
+void
+panfrost_emit_vertex_data(struct panfrost_job *batch);
+
+struct pan_shift_odd {
+ unsigned shift;
+ unsigned odd;
+};
+
+struct pan_shift_odd
+panfrost_padded_vertex_count(
+ unsigned vertex_count,
+ bool primitive_pot);
+
+
+unsigned
+pan_expand_shift_odd(struct pan_shift_odd o);
+
+
#endif