#ifndef H_LIMA_CONTEXT
#define H_LIMA_CONTEXT
+#include "util/list.h"
#include "util/slab.h"
-#include "util/u_dynarray.h"
#include "pipe/p_context.h"
#include "pipe/p_state.h"
int shift_min;
};
-struct lima_context_clear {
- unsigned buffers;
- uint32_t color_8pc;
- uint32_t depth;
- uint32_t stencil;
- uint64_t color_16pc;
-};
-
struct lima_depth_stencil_alpha_state {
struct pipe_depth_stencil_alpha_state base;
};
struct lima_fs_shader_state {
+ struct pipe_shader_state base;
void *shader;
int shader_size;
int stack_size;
+ uint8_t swizzles[PIPE_MAX_SAMPLERS][4];
bool uses_discard;
struct lima_bo *bo;
};
};
struct lima_ctx_plb_pp_stream_key {
- uint32_t plb_index;
- uint32_t tiled_w;
- uint32_t tiled_h;
+ uint16_t plb_index;
+ /* Coordinates are in tiles */
+ uint16_t minx, miny, maxx, maxy;
+ /* FB params */
+ uint16_t shift_w, shift_h;
+ uint16_t block_w, block_h;
};
struct lima_ctx_plb_pp_stream {
+ struct list_head lru_list;
struct lima_ctx_plb_pp_stream_key key;
- uint32_t refcnt;
struct lima_bo *bo;
- uint32_t offset[4];
+ uint32_t offset[8];
};
struct lima_pp_stream_state {
LIMA_CONTEXT_DIRTY_TEXTURES = (1 << 14),
} dirty;
- unsigned resolve;
-
struct u_upload_mgr *uploader;
struct blitter_context *blitter;
struct lima_context_framebuffer framebuffer;
struct lima_context_viewport_state viewport;
struct pipe_scissor_state scissor;
- struct pipe_scissor_state damage_rect;
- struct lima_context_clear clear;
+ struct pipe_scissor_state clipped_scissor;
struct lima_vs_shader_state *vs;
struct lima_fs_shader_state *fs;
struct lima_vertex_element_state *vertex_elements;
uint32_t gp_output_point_size_offt;
struct hash_table *plb_pp_stream;
+ struct list_head plb_pp_stream_lru_list;
uint32_t plb_index;
+ size_t plb_stream_cache_size;
struct lima_ctx_buff_state buffer_state[lima_ctx_buff_num];
- struct util_dynarray vs_cmd_array;
- struct util_dynarray plbu_cmd_array;
- struct util_dynarray plbu_cmd_head;
+ /* current job */
+ struct lima_job *job;
+
+ /* map from lima_job_key to lima_job */
+ struct hash_table *jobs;
- struct lima_submit *submit;
+ /* map from pipe_resource to lima_job which write to it */
+ struct hash_table *write_jobs;
int in_sync_fd;
uint32_t in_sync[2];
struct pipe_debug_callback debug;
- int pp_max_stack_size;
-
unsigned index_offset;
struct lima_resource *index_res;
};
lima_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags);
void lima_flush(struct lima_context *ctx);
-
-bool lima_need_flush(struct lima_context *ctx, struct lima_bo *bo, bool write);
+void lima_flush_job_accessing_bo(
+ struct lima_context *ctx, struct lima_bo *bo, bool write);
+void lima_flush_previous_job_writing_resource(
+ struct lima_context *ctx, struct pipe_resource *prsc);
#endif