#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;
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,
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 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 {
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;
};
static inline struct etna_context *