30 query->map_ptr[0] = 0;
53 query->buffer_object = buffer_object;
63 query->buffer_object = 0;
84 if (!context_gl->
c.device->cs->thread)
87 if (
query->buffer_object)
98 if (!
query->buffer_object)
141 query->parent_ops = parent_ops;
146 query->data_size = data_size;
147 query->query_ops = query_ops;
190 TRACE(
"Fence not issued.\n");
198 WARN(
"Fence tested from wrong thread.\n");
224 ERR(
"glClientWaitSync returned %#x.\n", gl_ret);
248 ERR(
"Fence created despite lack of GL support.\n");
267 TRACE(
"Fence not issued.\n");
279 WARN(
"Fence finished from wrong thread.\n");
305 ERR(
"glClientWaitSync returned %#x.\n", gl_ret);
323 ERR(
"Fence created without GL support.\n");
383 WARN(
"Fences not supported.\n");
398 if (!(
object =
calloc(1,
sizeof(*
object))))
407 TRACE(
"Created fence %p.\n",
object);
417 TRACE(
"%p increasing refcount to %u.\n",
query, refcount);
436 TRACE(
"%p decreasing refcount to %u.\n",
query, refcount);
443 query->parent_ops->wined3d_object_destroyed(
query->parent);
445 device->adapter->adapter_ops->adapter_destroy_query(
query);
455 TRACE(
"query %p, data %p, data_size %u, flags %#x.\n",
460 WARN(
"Query is building, returning S_FALSE.\n");
466 WARN(
"Query wasn't started yet.\n");
470 if (
query->counter_main !=
query->counter_retrieved
474 query->device->cs->c.ops->flush(&
query->device->cs->c);
482 if (
query->buffer_object)
495 return query->data_size;
518 FIXME(
"%p Wrong thread, returning 1.\n",
query);
557 FIXME(
"(%p) Wrong thread, reporting GPU idle.\n",
query);
561 ERR(
"The GL event query failed.\n");
565 ERR(
"Unexpected wined3d_event_query_test result %#x.\n",
ret);
574 return query->parent;
598 ERR(
"Event query issued with START flag - what to do?\n");
628 FIXME(
"Wrong thread, can't restart query.\n");
668 FIXME(
"Wrong thread, can't end query.\n");
689 FIXME(
"%p Wrong thread, returning 1.\n",
query);
696 checkGLcall(
"glGetQueryObjectuiv(GL_QUERY_RESULT_AVAILABLE)");
702 checkGLcall(
"glGetQueryObjectui64v(GL_QUERY_RESULT)");
722 WARN(
"Ignoring WINED3DISSUE_BEGIN with a TIMESTAMP query.\n");
758 GLuint written_available, generated_available;
766 FIXME(
"%p Wrong thread, returning 0 primitives.\n",
query);
776 TRACE(
"Available %#x, %#x.\n", written_available, generated_available);
778 if (written_available && generated_available)
782 TRACE(
"Returning %s, %s primitives.\n",
790 return written_available && generated_available;
831 FIXME(
"Wrong thread, can't restart query.\n");
878 FIXME(
"Wrong thread, can't end query.\n");
971 FIXME(
"Wrong thread, can't restart query.\n");
1014 FIXME(
"Wrong thread, can't end query.\n");
1046 TRACE(
"device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
1049 if (!(
object =
calloc(1,
sizeof(*
object))))
1054 WARN(
"Event queries not supported.\n");
1062 TRACE(
"Created query %p.\n",
object);
1063 *
query = &
object->query;
1091 TRACE(
"device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
1096 WARN(
"Unsupported in local OpenGL implementation: ARB_OCCLUSION_QUERY.\n");
1100 if (!(
object =
calloc(1,
sizeof(*
object))))
1106 TRACE(
"Created query %p.\n",
object);
1107 *
query = &
object->query;
1135 TRACE(
"device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
1140 WARN(
"Unsupported in local OpenGL implementation: ARB_TIMER_QUERY.\n");
1144 if (!(
object =
calloc(1,
sizeof(*
object))))
1150 TRACE(
"Created query %p.\n",
object);
1151 *
query = &
object->query;
1175 TRACE(
"device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
1180 WARN(
"Unsupported in local OpenGL implementation: ARB_TIMER_QUERY.\n");
1184 if (!(
object =
calloc(1,
sizeof(*
object))))
1196 static const UINT64 freq = 1000 * 1000 * 1000;
1202 TRACE(
"Created query %p.\n",
object);
1239 TRACE(
"device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
1244 WARN(
"OpenGL implementation does not support primitive queries.\n");
1249 WARN(
"OpenGL implementation does not support indexed queries.\n");
1253 if (!(
object =
calloc(1,
sizeof(*
object))))
1260 TRACE(
"Created query %p.\n",
object);
1261 *
query = &
object->query;
1288 TRACE(
"device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
1293 WARN(
"OpenGL implementation does not support pipeline statistics queries.\n");
1297 if (!(
object =
calloc(1,
sizeof(*
object))))
1303 TRACE(
"Created query %p.\n",
object);
1304 *
query = &
object->query;
1312 TRACE(
"device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
1341 FIXME(
"Unhandled query type %#x.\n",
type);
1404 pool_info.
flags = 0;
1444 FIXME(
"Unhandled query type %#x.\n",
type);
1474 if (pool_idx->
pool_vk->vk_event)
1478 pool_idx->
pool_vk->vk_event));
1498 result = (
void *)query_vk->
q.data;
1502 result->occlusion += tmp.occlusion;
1506 result->timestamp = tmp.timestamp;
1510 ps_result = &
result->pipeline_statistics;
1511 ps_tmp = &tmp.pipeline_statistics;
1530 result->so_statistics.primitives_written += tmp.so_statistics.primitives_written;
1531 result->so_statistics.primitives_generated += tmp.so_statistics.primitives_generated;
1535 FIXME(
"Unhandled query type %#x.\n", query_vk->
q.type);
1549 pool_vk = query_vk->
pool_idx.pool_vk;
1568 pool_vk = query_vk->
pool_idx.pool_vk;
1596 ERR(
"Failed to allocate entry.\n");
1602 query_vk->
flags &= ~WINED3D_QUERY_VK_FLAG_ACTIVE;
1626 query->device->cs->c.ops->flush(&
query->device->cs->c);
1647 VkCommandBuffer vk_command_buffer;
1667 query_vk->
pool_idx.idx, context_vk);
1671 ERR(
"Failed to allocate new query.\n");
1722 else if (query_vk->
pool_idx.pool_vk)
1726 query_vk->
pool_idx.idx, context_vk);
1730 query_vk->
flags = 0;
1774 query->device->cs->c.ops->flush(&
query->device->cs->c);
1775 return *(
BOOL *)
query->data = signalled;
1813 create_info.
flags = 0;
1848 VkCommandBuffer command_buffer;
1853 TRACE(
"Ignoring WINED3DISSUE_BEGIN.\n");
1865 ERR(
"Failed to allocate new query.\n");
1900 unsigned int data_size;
1903 TRACE(
"device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
1910 data_size =
sizeof(
BOOL);
1920 WARN(
"Timestamp queries not supported.\n");
1930 WARN(
"Timestamp queries not supported.\n");
1948 WARN(
"Stream output queries not supported.\n");
1955 FIXME(
"Unhandled query type %#x.\n",
type);
1959 if (!(query_vk =
calloc(1,
sizeof(*query_vk) + data_size)))
1961 data = query_vk + 1;
1964 query_vk->
q.poll_in_cs =
false;
1973 disjoint_data =
data;
1982 TRACE(
"Created query %p.\n", query_vk);
1991 TRACE(
"device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
COMPILER_DEPENDENT_UINT64 UINT64
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static int list_empty(struct list_entry *head)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
void wined3d_context_gl_free_fence(struct wined3d_fence *fence)
void wined3d_context_gl_free_timestamp_query(struct wined3d_timestamp_query *query)
void wined3d_context_gl_free_pipeline_statistics_query(struct wined3d_pipeline_statistics_query *query)
void wined3d_context_gl_free_so_statistics_query(struct wined3d_so_statistics_query *query)
struct wined3d_context_gl * wined3d_context_gl_reacquire(struct wined3d_context_gl *context_gl)
void wined3d_context_gl_alloc_pipeline_statistics_query(struct wined3d_context_gl *context_gl, struct wined3d_pipeline_statistics_query *query)
void wined3d_context_gl_alloc_occlusion_query(struct wined3d_context_gl *context_gl, struct wined3d_occlusion_query *query)
void wined3d_context_gl_alloc_so_statistics_query(struct wined3d_context_gl *context_gl, struct wined3d_so_statistics_query *query)
void wined3d_context_gl_free_occlusion_query(struct wined3d_occlusion_query *query)
void wined3d_context_gl_alloc_fence(struct wined3d_context_gl *context_gl, struct wined3d_fence *fence)
void wined3d_context_gl_alloc_timestamp_query(struct wined3d_context_gl *context_gl, struct wined3d_timestamp_query *query)
void wined3d_context_vk_end_current_render_pass(struct wined3d_context_vk *context_vk)
VkCommandBuffer wined3d_context_vk_get_command_buffer(struct wined3d_context_vk *context_vk)
void wined3d_context_vk_destroy_vk_event(struct wined3d_context_vk *context_vk, VkEvent vk_event, uint64_t command_buffer_id)
bool wined3d_context_vk_allocate_query(struct wined3d_context_vk *context_vk, enum wined3d_query_type type, struct wined3d_query_pool_idx_vk *pool_idx)
void wined3d_cs_destroy_object(struct wined3d_cs *cs, void(*callback)(void *object), void *object)
void CDECL wined3d_device_context_issue_query(struct wined3d_device_context *context, struct wined3d_query *query, unsigned int flags)
static void wined3d_so_statistics_query_ops_destroy(struct wined3d_query *query)
static HRESULT wined3d_timestamp_disjoint_query_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
static HRESULT wined3d_pipeline_query_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
static const struct wined3d_query_ops wined3d_query_event_vk_ops
static struct wined3d_so_statistics_query * wined3d_so_statistics_query_from_query(struct wined3d_query *query)
static BOOL wined3d_occlusion_query_ops_issue(struct wined3d_query *query, uint32_t flags)
static void wined3d_so_statistics_query_end(struct wined3d_so_statistics_query *query, struct wined3d_context_gl *context_gl)
static void wined3d_pipeline_query_ops_destroy(struct wined3d_query *query)
void wined3d_query_vk_resume(struct wined3d_query_vk *query_vk, struct wined3d_context_vk *context_vk)
static void wined3d_query_vk_destroy(struct wined3d_query *query)
static UINT64 get_query_result64(GLuint id, const struct wined3d_gl_info *gl_info)
static BOOL wined3d_query_timestamp_vk_issue(struct wined3d_query *query, uint32_t flags)
static BOOL wined3d_occlusion_query_ops_poll(struct wined3d_query *query, uint32_t flags)
static BOOL wined3d_event_query_ops_issue(struct wined3d_query *query, uint32_t flags)
enum wined3d_query_type CDECL wined3d_query_get_type(const struct wined3d_query *query)
static void wined3d_timestamp_query_ops_destroy(struct wined3d_query *query)
static const struct wined3d_query_ops wined3d_query_vk_ops
HRESULT CDECL wined3d_query_get_data(struct wined3d_query *query, void *data, UINT data_size, uint32_t flags)
static BOOL wined3d_pipeline_query_ops_poll(struct wined3d_query *query, uint32_t flags)
static void wined3d_query_vk_begin(struct wined3d_query_vk *query_vk, struct wined3d_context_vk *context_vk, VkCommandBuffer vk_command_buffer)
static BOOL wined3d_so_statistics_query_ops_issue(struct wined3d_query *query, uint32_t flags)
static BOOL wined3d_query_buffer_queue_result(struct wined3d_context_gl *context_gl, struct wined3d_query *query, GLuint id)
static BOOL wined3d_timestamp_disjoint_query_ops_issue(struct wined3d_query *query, uint32_t flags)
static const struct wined3d_query_ops wined3d_query_timestamp_disjoint_vk_ops
void wined3d_fence_issue(struct wined3d_fence *fence, struct wined3d_device *device)
bool wined3d_query_pool_vk_init(struct wined3d_query_pool_vk *pool_vk, struct wined3d_context_vk *context_vk, enum wined3d_query_type type, struct list *free_pools)
static BOOL wined3d_query_vk_issue(struct wined3d_query *query, uint32_t flags)
static void wined3d_query_vk_remove_pending_queries(struct wined3d_context_vk *context_vk, struct wined3d_query_vk *query_vk)
static struct wined3d_event_query * wined3d_event_query_from_query(struct wined3d_query *query)
static HRESULT wined3d_timestamp_query_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
void wined3d_query_vk_suspend(struct wined3d_query_vk *query_vk, struct wined3d_context_vk *context_vk)
HRESULT wined3d_query_gl_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
static const struct wined3d_query_ops pipeline_query_ops
static BOOL wined3d_query_vk_poll(struct wined3d_query *query, uint32_t flags)
void wined3d_fence_destroy(struct wined3d_fence *fence)
HRESULT CDECL wined3d_query_issue(struct wined3d_query *query, uint32_t flags)
static struct wined3d_timestamp_query * wined3d_timestamp_query_from_query(struct wined3d_query *query)
void *CDECL wined3d_query_get_parent(const struct wined3d_query *query)
static BOOL wined3d_pipeline_query_ops_issue(struct wined3d_query *query, uint32_t flags)
static const struct wined3d_query_ops timestamp_disjoint_query_ops
void wined3d_query_pool_vk_cleanup(struct wined3d_query_pool_vk *pool_vk, struct wined3d_context_vk *context_vk)
static void wined3d_occlusion_query_ops_destroy(struct wined3d_query *query)
static BOOL wined3d_query_event_vk_poll(struct wined3d_query *query, uint32_t flags)
void wined3d_query_pool_vk_mark_free(struct wined3d_context_vk *context_vk, struct wined3d_query_pool_vk *pool_vk, uint32_t start, uint32_t count)
ULONG CDECL wined3d_query_incref(struct wined3d_query *query)
HRESULT CDECL wined3d_query_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
static BOOL wined3d_timestamp_query_ops_poll(struct wined3d_query *query, uint32_t flags)
static HRESULT wined3d_so_statistics_query_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
static struct wined3d_pipeline_statistics_query * wined3d_pipeline_statistics_query_from_query(struct wined3d_query *query)
HRESULT wined3d_fence_create(struct wined3d_device *device, struct wined3d_fence **fence)
static void wined3d_query_destroy_object(void *object)
UINT CDECL wined3d_query_get_data_size(const struct wined3d_query *query)
enum wined3d_fence_result wined3d_fence_test(const struct wined3d_fence *fence, struct wined3d_device *device, uint32_t flags)
ULONG CDECL wined3d_query_decref(struct wined3d_query *query)
static void wined3d_query_create_buffer_object(struct wined3d_context_gl *context_gl, struct wined3d_query *query)
static void wined3d_query_vk_end(struct wined3d_query_vk *query_vk, struct wined3d_context_vk *context_vk, VkCommandBuffer vk_command_buffer)
static BOOL wined3d_timestamp_disjoint_query_ops_poll(struct wined3d_query *query, uint32_t flags)
static void wined3d_event_query_ops_destroy(struct wined3d_query *query)
bool wined3d_query_vk_accumulate_data(struct wined3d_query_vk *query_vk, struct wined3d_device_vk *device_vk, const struct wined3d_query_pool_idx_vk *pool_idx)
static BOOL wined3d_timestamp_query_ops_issue(struct wined3d_query *query, uint32_t flags)
static const struct wined3d_query_ops wined3d_query_timestamp_vk_ops
static void wined3d_timestamp_disjoint_query_ops_destroy(struct wined3d_query *query)
static void wined3d_fence_free(struct wined3d_fence *fence)
static BOOL wined3d_so_statistics_query_ops_poll(struct wined3d_query *query, uint32_t flags)
bool wined3d_query_pool_vk_allocate_query(struct wined3d_query_pool_vk *pool_vk, size_t *idx)
static const struct wined3d_query_ops occlusion_query_ops
enum wined3d_fence_result wined3d_fence_wait(const struct wined3d_fence *fence, struct wined3d_device *device)
void wined3d_query_gl_destroy_buffer_object(struct wined3d_context_gl *context_gl, struct wined3d_query *query)
static BOOL wined3d_query_event_vk_issue(struct wined3d_query *query, uint32_t flags)
static BOOL wined3d_event_query_ops_poll(struct wined3d_query *query, uint32_t flags)
HRESULT wined3d_query_vk_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
static struct wined3d_occlusion_query * wined3d_occlusion_query_from_query(struct wined3d_query *query)
static void wined3d_query_pool_vk_mark_complete(struct wined3d_query_pool_vk *pool_vk, size_t idx, struct wined3d_context_vk *context_vk)
static void wined3d_pipeline_statistics_query_end(struct wined3d_pipeline_statistics_query *query, struct wined3d_context_gl *context_gl)
static BOOL wined3d_query_buffer_is_valid(struct wined3d_query *query)
static HRESULT wined3d_event_query_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
static HRESULT wined3d_fence_init(struct wined3d_fence *fence, const struct wined3d_gl_info *gl_info)
static const struct wined3d_query_ops event_query_ops
static void wined3d_query_buffer_invalidate(struct wined3d_query *query)
static void wined3d_query_init(struct wined3d_query *query, struct wined3d_device *device, enum wined3d_query_type type, const void *data, DWORD data_size, const struct wined3d_query_ops *query_ops, void *parent, const struct wined3d_parent_ops *parent_ops)
static const struct wined3d_query_ops so_statistics_query_ops
static const struct wined3d_query_ops timestamp_query_ops
static HRESULT wined3d_occlusion_query_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
const char * wined3d_debug_vkresult(VkResult vr)
BOOL wined3d_array_reserve(void **elements, SIZE_T *capacity, SIZE_T count, SIZE_T size)
static WCHAR available[MAX_STRING_RESOURCE_LEN]
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
#define GL_PRIMITIVES_GENERATED
#define GL_ALREADY_SIGNALED
#define GL_QUERY_RESULT_AVAILABLE
#define GL_SAMPLES_PASSED
#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
#define GL_GEOMETRY_SHADER_INVOCATIONS
#define GL_CONDITION_SATISFIED
#define GL_TIMEOUT_EXPIRED
#define GL_SYNC_FLUSH_COMMANDS_BIT
#define GL_SYNC_GPU_COMMANDS_COMPLETE
#define GL_ALL_COMPLETED_NV
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define memcpy(s1, s2, n)
VkQueryPipelineStatisticFlags pipelineStatistics
VkQueryPoolCreateFlags flags
struct wined3d_gl_info gl_info
struct wined3d_vk_info vk_info
VkPhysicalDeviceLimits device_limits
const struct wined3d_gl_info * gl_info
struct list active_queries
struct list completed_query_pools
struct wined3d_command_buffer_vk current_command_buffer
uint64_t completed_command_buffer_id
const struct wined3d_vk_info * vk_info
VkRenderPass vk_render_pass
struct list render_pass_queries
struct wined3d_vk_info vk_info
struct wined3d_context_vk context_vk
struct wined3d_fence fence
union wined3d_gl_fence_object object
struct wined3d_context_gl * context_gl
BOOL supported[WINED3D_GL_EXT_COUNT]
struct wined3d_context_gl * context_gl
struct wined3d_query_data_pipeline_statistics statistics
union wined3d_gl_pipeline_statistics_query u
struct wined3d_context_gl * context_gl
UINT64 clipping_input_primitives
UINT64 primitives_submitted
UINT64 vertices_submitted
UINT64 clipping_output_primitives
struct wined3d_query_pool_vk * pool_vk
uint32_t allocated[WINED3D_BITMAP_SIZE(WINED3D_QUERY_POOL_SIZE)]
uint32_t completed[WINED3D_BITMAP_SIZE(WINED3D_QUERY_POOL_SIZE)]
struct list completed_entry
VkQueryPool vk_query_pool
struct wined3d_query_pool_idx_vk * pending
struct wined3d_query_pool_idx_vk pool_idx
uint64_t command_buffer_id
const struct wined3d_parent_ops * parent_ops
struct wined3d_query_data_so_statistics statistics
struct wined3d_context_gl * context_gl
union wined3d_gl_so_statistics_query u
struct wined3d_context_gl * context_gl
#define CONTAINING_RECORD(address, type, field)
struct wined3d_gl_pipeline_statistics_query::@344 query
struct wined3d_gl_so_statistics_query::@343 query
@ VK_QUERY_CONTROL_PRECISE_BIT
void VKAPI_CALL vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query)
VkResult VKAPI_CALL vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkQueryPool *pQueryPool)
void VKAPI_CALL vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags)
VkResult VKAPI_CALL vkGetEventStatus(VkDevice device, VkEvent event)
@ VK_QUERY_TYPE_PIPELINE_STATISTICS
@ VK_QUERY_TYPE_OCCLUSION
@ VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
@ VK_QUERY_TYPE_TIMESTAMP
VkResult VKAPI_CALL vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void *pData, VkDeviceSize stride, VkQueryResultFlags flags)
VkResult VKAPI_CALL vkCreateEvent(VkDevice device, const VkEventCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkEvent *pEvent)
void VKAPI_CALL vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks *pAllocator)
void VKAPI_CALL vkCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index)
VkResult VKAPI_CALL vkResetEvent(VkDevice device, VkEvent event)
@ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT
@ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT
@ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT
@ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT
@ VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT
@ VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT
@ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT
@ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT
@ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT
@ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT
@ VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
void VKAPI_CALL vkCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index)
void VKAPI_CALL vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
void VKAPI_CALL vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query)
@ VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
@ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
void VKAPI_CALL vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks *pAllocator)
@ VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
@ VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB
#define GL_PRIMITIVES_SUBMITTED_ARB
#define GL_MAP_COHERENT_BIT
#define GL_MAP_PERSISTENT_BIT
#define GL_CLIPPING_INPUT_PRIMITIVES_ARB
#define GL_VERTEX_SHADER_INVOCATIONS_ARB
#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB
#define GL_COMPUTE_SHADER_INVOCATIONS_ARB
#define GL_VERTICES_SUBMITTED_ARB
#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB
#define GL_TESS_CONTROL_SHADER_PATCHES_ARB
#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB
#define WINED3DISSUE_BEGIN
#define WINED3DGETDATA_FLUSH
#define WINED3DERR_NOTAVAILABLE
@ WINED3D_QUERY_TYPE_TIMESTAMP_FREQ
@ WINED3D_QUERY_TYPE_SO_STATISTICS_STREAM2
@ WINED3D_QUERY_TYPE_SO_STATISTICS
@ WINED3D_QUERY_TYPE_PIPELINE_STATISTICS
@ WINED3D_QUERY_TYPE_SO_STATISTICS_STREAM0
@ WINED3D_QUERY_TYPE_SO_STATISTICS_STREAM1
@ WINED3D_QUERY_TYPE_TIMESTAMP
@ WINED3D_QUERY_TYPE_EVENT
@ WINED3D_QUERY_TYPE_TIMESTAMP_DISJOINT
@ WINED3D_QUERY_TYPE_OCCLUSION
@ WINED3D_QUERY_TYPE_SO_STATISTICS_STREAM3
#define WINED3DERR_INVALIDCALL
@ ARB_PIPELINE_STATISTICS_QUERY
@ WINED3D_GL_PRIMITIVE_QUERY
@ ARB_TRANSFORM_FEEDBACK3
@ ARB_QUERY_BUFFER_OBJECT
static bool wined3d_fence_supported(const struct wined3d_gl_info *gl_info)
@ WINED3D_FENCE_WRONG_THREAD
@ WINED3D_FENCE_NOT_STARTED
void WINAPI wined3d_mutex_unlock(void)
void WINAPI wined3d_mutex_lock(void)
static BOOL wined3d_bitmap_clear(uint32_t *map, unsigned int idx)
static unsigned int wined3d_bitmap_ffz(const uint32_t *bitmap, unsigned int bit_count, unsigned int start)
#define WINED3D_QUERY_POOL_SIZE
static void context_release(struct wined3d_context *context)
static BOOL wined3d_bitmap_set(uint32_t *map, unsigned int idx)
static struct wined3d_context * context_acquire(struct wined3d_device *device, struct wined3d_texture *texture, unsigned int sub_resource_idx)
#define WINED3D_QUERY_VK_FLAG_RENDER_PASS
static void wined3d_context_vk_reference_query(const struct wined3d_context_vk *context_vk, struct wined3d_query_vk *query_vk)
#define WINED3D_QUERY_VK_FLAG_ACTIVE
@ WINED3D_VK_EXT_TRANSFORM_FEEDBACK
#define WINED3D_QUERY_VK_FLAG_STARTED