#include "util/slab.h"
struct pipe_screen;
-struct etna_shader;
+struct etna_shader_variant;
+struct etna_sampler_ts;
struct etna_index_buffer {
- struct pipe_index_buffer ib;
struct etna_reloc FE_INDEX_STREAM_BASE_ADDR;
uint32_t FE_INDEX_STREAM_CONTROL;
uint32_t FE_PRIMITIVE_RESTART_INDEX;
struct pipe_transfer base;
struct pipe_resource *rsc;
void *staging;
+ void *mapped;
};
struct etna_vertexbuf_state {
uint32_t enabled_mask;
};
+struct etna_shader_state {
+ void *bind_vs, *bind_fs;
+ struct etna_shader_variant *vs, *fs;
+};
+
enum etna_immediate_contents {
ETNA_IMMEDIATE_UNUSED = 0,
ETNA_IMMEDIATE_CONSTANT,
+ ETNA_IMMEDIATE_UNIFORM,
ETNA_IMMEDIATE_TEXRECT_SCALE_X,
ETNA_IMMEDIATE_TEXRECT_SCALE_Y,
+ ETNA_IMMEDIATE_UBO0_ADDR,
+ ETNA_IMMEDIATE_UBOMAX_ADDR = ETNA_IMMEDIATE_UBO0_ADDR + 255,
};
struct etna_shader_uniform_info {
enum etna_immediate_contents *imm_contents;
uint32_t *imm_data;
uint32_t imm_count;
- uint32_t const_count;
};
struct etna_context {
struct pipe_context base;
+ /* GPU-specific implementation to emit texture state */
+ void (*emit_texture_state)(struct etna_context *pctx);
+ /* Get sampler TS pointer for sampler view */
+ struct etna_sampler_ts *(*ts_for_sampler_view)(struct pipe_sampler_view *pview);
+
struct etna_specs specs;
struct etna_screen *screen;
struct etna_cmd_stream *stream;
ETNA_DIRTY_SHADER = (1 << 16),
ETNA_DIRTY_TS = (1 << 17),
ETNA_DIRTY_TEXTURE_CACHES = (1 << 18),
+ ETNA_DIRTY_DERIVE_TS = (1 << 19),
} dirty;
uint32_t prim_hwsupport;
struct primconvert_context *primconvert;
- /* list of resources used by currently-unsubmitted renders */
- struct list_head used_resources;
-
struct slab_child_pool transfer_pool;
struct blitter_context *blitter;
struct compiled_viewport_state viewport;
unsigned num_fragment_sampler_views;
uint32_t active_sampler_views;
+ uint32_t dirty_sampler_views;
struct pipe_sampler_view *sampler_view[PIPE_MAX_SAMPLERS];
struct pipe_constant_buffer constant_buffer[PIPE_SHADER_TYPES];
struct etna_vertexbuf_state vertex_buffer;
struct etna_index_buffer index_buffer;
-
- /* pointers to the bound state. these are mainly kept around for the blitter */
- struct etna_shader *vs;
- struct etna_shader *fs;
+ struct etna_shader_state shader;
/* saved parameter-like state. these are mainly kept around for the blitter */
struct pipe_framebuffer_state framebuffer_s;
struct pipe_viewport_state viewport_s;
struct pipe_scissor_state scissor_s;
- /* cached state of entire GPU */
- struct etna_3d_state gpu3d;
-
/* stats/counters */
struct {
uint64_t prims_emitted;
uint64_t draw_calls;
+ uint64_t rs_operations;
} stats;
struct pipe_debug_callback debug;
+ int in_fence_fd;
+
+ /* list of active hardware queries */
+ struct list_head active_hw_queries;
+
+ struct etna_bo *dummy_rt;
+ struct etna_reloc dummy_rt_reloc;
+
+ /* set of resources used by currently-unsubmitted renders */
+ struct set *used_resources_read;
+ struct set *used_resources_write;
};
static inline struct etna_context *