Rebase against a64861fb66be722f3a93ab73152c5d477ba3bd3e.

This commit is contained in:
Zebediah Figura
2021-05-06 18:40:21 -05:00
parent 046b1ab22c
commit 50d26744b0
4 changed files with 52 additions and 60 deletions

View File

@@ -1,16 +1,15 @@
From 61f54e97ae31518f00e8d5b657810cd5b3ca828f Mon Sep 17 00:00:00 2001
From 65f4a8779955d77206459ba75b296ec0a5a6b587 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Mon, 20 Feb 2017 00:27:25 +0100
Subject: [PATCH] wined3d: Improve wined3d_cs_emit_update_sub_resource.
---
dlls/wined3d/cs.c | 78 ++++++++++++++++++++++++++++++++++
dlls/wined3d/device.c | 2 -
dlls/wined3d/cs.c | 76 ++++++++++++++++++++++++++++++++++
dlls/wined3d/wined3d_private.h | 1 +
3 files changed, 79 insertions(+), 2 deletions(-)
2 files changed, 77 insertions(+)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 32ea900e27d..52bea3d6a96 100644
index 5d9d19a85af..625caf750bf 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -427,6 +427,7 @@ struct wined3d_cs_update_sub_resource
@@ -21,12 +20,12 @@ index 32ea900e27d..52bea3d6a96 100644
};
struct wined3d_cs_add_dirty_texture_region
@@ -2527,6 +2528,51 @@ void wined3d_device_context_emit_update_sub_resource(struct wined3d_device_conte
@@ -2553,7 +2554,50 @@ static void wined3d_cs_update_sub_resource(struct wined3d_device_context *contex
const void *data, unsigned int row_pitch, unsigned int slice_pitch)
{
struct wined3d_cs_update_sub_resource *op;
+ size_t data_size, size;
+
+ if (resource->type != WINED3D_RTYPE_BUFFER && resource->format_flags & WINED3DFMT_FLAG_BLOCKS)
+ goto no_async;
+
@@ -69,11 +68,10 @@ index 32ea900e27d..52bea3d6a96 100644
+ return;
+
+no_async:
+ wined3d_resource_wait_idle(resource);
wined3d_resource_wait_idle(resource);
op = wined3d_device_context_require_space(context, sizeof(*op), WINED3D_CS_QUEUE_MAP);
op->opcode = WINED3D_CS_OP_UPDATE_SUB_RESOURCE;
@@ -2729,6 +2775,12 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void
@@ -2762,6 +2806,12 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void
/* WINED3D_CS_OP_GENERATE_MIPMAPS */ wined3d_cs_exec_generate_mipmaps,
};
@@ -86,7 +84,7 @@ index 32ea900e27d..52bea3d6a96 100644
static void *wined3d_cs_st_require_space(struct wined3d_device_context *context,
size_t size, enum wined3d_cs_queue_id queue_id)
{
@@ -2786,6 +2838,7 @@ static void wined3d_cs_st_finish(struct wined3d_device_context *context, enum wi
@@ -2819,6 +2869,7 @@ static void wined3d_cs_st_finish(struct wined3d_device_context *context, enum wi
static const struct wined3d_device_context_ops wined3d_cs_st_ops =
{
@@ -94,7 +92,7 @@ index 32ea900e27d..52bea3d6a96 100644
wined3d_cs_st_require_space,
wined3d_cs_st_submit,
wined3d_cs_st_finish,
@@ -2821,6 +2874,19 @@ static void wined3d_cs_mt_submit(struct wined3d_device_context *context, enum wi
@@ -2860,6 +2911,19 @@ static void wined3d_cs_mt_submit(struct wined3d_device_context *context, enum wi
wined3d_cs_queue_submit(&cs->queue[queue_id], cs);
}
@@ -114,7 +112,7 @@ index 32ea900e27d..52bea3d6a96 100644
static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size_t size, struct wined3d_cs *cs)
{
size_t queue_size = ARRAY_SIZE(queue->data);
@@ -2883,6 +2949,17 @@ static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size
@@ -2922,6 +2986,17 @@ static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size
return packet->data;
}
@@ -132,7 +130,7 @@ index 32ea900e27d..52bea3d6a96 100644
static void *wined3d_cs_mt_require_space(struct wined3d_device_context *context,
size_t size, enum wined3d_cs_queue_id queue_id)
{
@@ -2907,6 +2984,7 @@ static void wined3d_cs_mt_finish(struct wined3d_device_context *context, enum wi
@@ -2946,6 +3021,7 @@ static void wined3d_cs_mt_finish(struct wined3d_device_context *context, enum wi
static const struct wined3d_device_context_ops wined3d_cs_mt_ops =
{
@@ -140,24 +138,11 @@ index 32ea900e27d..52bea3d6a96 100644
wined3d_cs_mt_require_space,
wined3d_cs_mt_submit,
wined3d_cs_mt_finish,
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index b1f7568842e..36eba1fa75e 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -5146,8 +5146,6 @@ void CDECL wined3d_device_context_update_sub_resource(struct wined3d_device_cont
return;
}
- wined3d_resource_wait_idle(resource);
-
wined3d_device_context_emit_update_sub_resource(context, resource,
sub_resource_idx, box, data, row_pitch, depth_pitch);
}
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 34ec814685c..03a76029b0a 100644
index 6565b2044df..70f97446492 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4681,6 +4681,7 @@ struct wined3d_cs_queue
@@ -4685,6 +4685,7 @@ struct wined3d_cs_queue
struct wined3d_device_context_ops
{