summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/zink/zink_batch.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/zink/zink_batch.h')
-rw-r--r--src/gallium/drivers/zink/zink_batch.h119
1 files changed, 15 insertions, 104 deletions
diff --git a/src/gallium/drivers/zink/zink_batch.h b/src/gallium/drivers/zink/zink_batch.h
index 4b077646369..67ffa9e0b04 100644
--- a/src/gallium/drivers/zink/zink_batch.h
+++ b/src/gallium/drivers/zink/zink_batch.h
@@ -24,7 +24,8 @@
#ifndef ZINK_BATCH_H
#define ZINK_BATCH_H
-#include <vulkan/vulkan.h>
+#include <vulkan/vulkan_core.h>
+#include "zink_types.h"
#include "util/list.h"
#include "util/set.h"
@@ -36,90 +37,6 @@
extern "C" {
#endif
-struct pipe_reference;
-
-struct zink_buffer_view;
-struct zink_context;
-struct zink_descriptor_set;
-struct zink_image_view;
-struct zink_program;
-struct zink_render_pass;
-struct zink_resource;
-struct zink_sampler_view;
-struct zink_surface;
-
-struct zink_batch_usage {
- uint32_t usage;
- cnd_t flush;
- mtx_t mtx;
- bool unflushed;
-};
-
-/* not real api don't use */
-bool
-batch_ptr_add_usage(struct zink_batch *batch, struct set *s, void *ptr);
-
-struct zink_batch_state {
- struct zink_fence fence;
-
- struct zink_batch_usage usage;
- struct zink_context *ctx;
- VkCommandPool cmdpool;
- VkCommandBuffer cmdbuf;
- VkCommandBuffer barrier_cmdbuf;
-
- VkQueue queue; //duplicated from batch for threading
- VkSemaphore sem;
-
- struct util_queue_fence flush_completed;
-
- struct pipe_resource *flush_res;
-
- struct set *programs;
-
- struct set *resources;
- struct set *surfaces;
- struct set *bufferviews;
-
- struct util_dynarray unref_resources;
-
- struct util_dynarray persistent_resources;
- struct util_dynarray zombie_samplers;
- struct util_dynarray dead_framebuffers;
-
- struct set *active_queries; /* zink_query objects which were active at some point in this batch */
-
- struct zink_batch_descriptor_data *dd;
-
- VkDeviceSize resource_size;
-
- /* this is a monotonic int used to disambiguate internal fences from their tc fence references */
- unsigned submit_count;
-
- bool is_device_lost;
- bool have_timelines;
- bool has_barriers;
- bool scanout_flush;
-};
-
-struct zink_batch {
- struct zink_batch_state *state;
-
- struct zink_batch_usage *last_batch_usage;
-
- unsigned work_count;
-
- bool has_work;
- bool last_was_compute;
- bool in_rp; //renderpass is currently active
-};
-
-
-static inline struct zink_batch_state *
-zink_batch_state(struct zink_fence *fence)
-{
- return (struct zink_batch_state *)fence;
-}
void
zink_reset_batch_state(struct zink_context *ctx, struct zink_batch_state *bs);
@@ -145,7 +62,7 @@ void
zink_end_batch(struct zink_context *ctx, struct zink_batch *batch);
void
-zink_batch_resource_usage_set(struct zink_batch *batch, struct zink_resource *res, bool write);
+zink_batch_add_wait_semaphore(struct zink_batch *batch, VkSemaphore sem);
void
zink_batch_reference_resource_rw(struct zink_batch *batch,
@@ -154,54 +71,43 @@ zink_batch_reference_resource_rw(struct zink_batch *batch,
void
zink_batch_reference_resource(struct zink_batch *batch, struct zink_resource *res);
-void
+bool
zink_batch_reference_resource_move(struct zink_batch *batch, struct zink_resource *res);
void
-zink_batch_reference_sampler_view(struct zink_batch *batch,
- struct zink_sampler_view *sv);
-
-void
zink_batch_reference_program(struct zink_batch *batch,
struct zink_program *pg);
void
-zink_batch_reference_image_view(struct zink_batch *batch,
- struct zink_image_view *image_view);
-
-void
-zink_batch_reference_bufferview(struct zink_batch *batch, struct zink_buffer_view *buffer_view);
-void
-zink_batch_reference_surface(struct zink_batch *batch, struct zink_surface *surface);
-
+zink_batch_bind_db(struct zink_context *ctx);
void
debug_describe_zink_batch_state(char *buf, const struct zink_batch_state *ptr);
-static inline bool
+static ALWAYS_INLINE bool
zink_batch_usage_is_unflushed(const struct zink_batch_usage *u)
{
return u && u->unflushed;
}
-static inline void
+static ALWAYS_INLINE void
zink_batch_usage_unset(struct zink_batch_usage **u, struct zink_batch_state *bs)
{
(void)p_atomic_cmpxchg((uintptr_t *)u, (uintptr_t)&bs->usage, (uintptr_t)NULL);
}
-static inline void
+static ALWAYS_INLINE void
zink_batch_usage_set(struct zink_batch_usage **u, struct zink_batch_state *bs)
{
*u = &bs->usage;
}
-static inline bool
+static ALWAYS_INLINE bool
zink_batch_usage_matches(const struct zink_batch_usage *u, const struct zink_batch_state *bs)
{
return u == &bs->usage;
}
-static inline bool
+static ALWAYS_INLINE bool
zink_batch_usage_exists(const struct zink_batch_usage *u)
{
return u && (u->usage || u->unflushed);
@@ -209,6 +115,8 @@ zink_batch_usage_exists(const struct zink_batch_usage *u)
bool
zink_screen_usage_check_completion(struct zink_screen *screen, const struct zink_batch_usage *u);
+bool
+zink_screen_usage_check_completion_fast(struct zink_screen *screen, const struct zink_batch_usage *u);
bool
zink_batch_usage_check_completion(struct zink_context *ctx, const struct zink_batch_usage *u);
@@ -216,6 +124,9 @@ zink_batch_usage_check_completion(struct zink_context *ctx, const struct zink_ba
void
zink_batch_usage_wait(struct zink_context *ctx, struct zink_batch_usage *u);
+void
+zink_batch_usage_try_wait(struct zink_context *ctx, struct zink_batch_usage *u);
+
#ifdef __cplusplus
}
#endif