#include "pipe/p_state.h"
#include "util/slab.h"
+#include "util/list.h"
#include <vulkan/vulkan.h>
struct blitter_context;
struct primconvert_context;
+struct list_head;
struct zink_blend_state;
struct zink_depth_stencil_alpha_state;
return (struct zink_sampler_view *)pview;
}
-#define ZINK_DIRTY_PROGRAM (1 << 0)
+struct zink_so_target {
+ struct pipe_stream_output_target base;
+ struct pipe_resource *counter_buffer;
+ VkDeviceSize counter_buffer_offset;
+ uint32_t stride;
+ bool counter_buffer_valid;
+};
+
+static inline struct zink_so_target *
+zink_so_target(struct pipe_stream_output_target *so_target)
+{
+ return (struct zink_so_target *)so_target;
+}
+
+#define ZINK_SHADER_COUNT (PIPE_SHADER_TYPES - 1)
struct zink_context {
struct pipe_context base;
VkQueue queue;
- VkDescriptorPool descpool;
-
struct pipe_constant_buffer ubos[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS];
struct pipe_framebuffer_state fb_state;
struct zink_vertex_elements_state *element_state;
struct zink_rasterizer_state *rast_state;
- struct zink_shader *gfx_stages[PIPE_SHADER_TYPES - 1];
+ struct zink_shader *gfx_stages[ZINK_SHADER_COUNT];
struct zink_gfx_pipeline_state gfx_pipeline_state;
struct hash_table *program_cache;
struct zink_gfx_program *curr_program;
- unsigned dirty;
+
+ unsigned dirty_shader_stages : 6; /* mask of changed shader stages */
struct hash_table *render_pass_cache;
struct zink_framebuffer *framebuffer;
+ struct pipe_viewport_state viewport_states[PIPE_MAX_VIEWPORTS];
+ struct pipe_scissor_state scissor_states[PIPE_MAX_VIEWPORTS];
VkViewport viewports[PIPE_MAX_VIEWPORTS];
- unsigned num_viewports;
-
VkRect2D scissors[PIPE_MAX_VIEWPORTS];
- unsigned num_scissors;
+ unsigned num_viewports;
struct pipe_vertex_buffer buffers[PIPE_MAX_ATTRIBS];
uint32_t buffers_enabled_mask;
+ void *sampler_states[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
VkSampler samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
+ unsigned num_samplers[PIPE_SHADER_TYPES];
struct pipe_sampler_view *image_views[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_SAMPLER_VIEWS];
+ unsigned num_image_views[PIPE_SHADER_TYPES];
+ float line_width;
float blend_constants[4];
- uint32_t stencil_ref[2];
+ struct pipe_stencil_ref stencil_ref;
+
+ struct list_head suspended_queries;
+ bool queries_disabled;
+
+ struct pipe_resource *dummy_buffer;
+ struct pipe_resource *null_buffers[5]; /* used to create zink_framebuffer->null_surface, one buffer per samplecount */
+
+ uint32_t num_so_targets;
+ struct pipe_stream_output_target *so_targets[PIPE_MAX_SO_OUTPUTS];
+ bool dirty_so_targets;
+ bool xfb_barrier;
};
static inline struct zink_context *
}
static inline struct zink_batch *
-zink_context_curr_batch(struct zink_context *ctx)
+zink_curr_batch(struct zink_context *ctx)
{
assert(ctx->curr_batch < ARRAY_SIZE(ctx->batches));
return ctx->batches + ctx->curr_batch;
}
+struct zink_batch *
+zink_batch_rp(struct zink_context *ctx);
+
+struct zink_batch *
+zink_batch_no_rp(struct zink_context *ctx);
+
void
zink_resource_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
VkImageAspectFlags aspect, VkImageLayout new_layout);
void
zink_context_query_init(struct pipe_context *ctx);
+void
+zink_blit(struct pipe_context *pctx,
+ const struct pipe_blit_info *info);
+
+void
+zink_draw_vbo(struct pipe_context *pctx,
+ const struct pipe_draw_info *dinfo);
+
#endif