[PATCH 4/4] wined3d: Move state handling to wined3d_cs_emit_set_shader().

Zebediah Figura z.figura12 at gmail.com
Mon Mar 1 22:42:14 CST 2021


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/wined3d/cs.c     | 12 ++++++++
 dlls/wined3d/device.c | 68 -------------------------------------------
 2 files changed, 12 insertions(+), 68 deletions(-)

diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 4ae9f1f8c09..561d577f441 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -1623,7 +1623,19 @@ static void wined3d_cs_exec_set_shader(struct wined3d_cs *cs, const void *data)
 
 void wined3d_cs_emit_set_shader(struct wined3d_cs *cs, enum wined3d_shader_type type, struct wined3d_shader *shader)
 {
+    struct wined3d_state *state = cs->state;
     struct wined3d_cs_set_shader *op;
+    struct wined3d_shader *prev;
+
+    prev = state->shader[type];
+    if (shader == prev)
+        return;
+
+    if (shader)
+        wined3d_shader_incref(shader);
+    state->shader[type] = shader;
+    if (prev)
+        wined3d_shader_decref(prev);
 
     op = wined3d_cs_require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT);
     op->opcode = WINED3D_CS_OP_SET_SHADER;
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 7b9fd830a37..9ffeeac187b 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -2083,21 +2083,9 @@ struct wined3d_vertex_declaration * CDECL wined3d_device_get_vertex_declaration(
 
 void CDECL wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader)
 {
-    struct wined3d_state *state = device->cs->state;
-    struct wined3d_shader *prev;
-
     TRACE("device %p, shader %p.\n", device, shader);
 
-    prev = state->shader[WINED3D_SHADER_TYPE_VERTEX];
-    if (shader == prev)
-        return;
-
-    if (shader)
-        wined3d_shader_incref(shader);
-    state->shader[WINED3D_SHADER_TYPE_VERTEX] = shader;
     wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_VERTEX, shader);
-    if (prev)
-        wined3d_shader_decref(prev);
 }
 
 struct wined3d_shader * CDECL wined3d_device_get_vertex_shader(const struct wined3d_device *device)
@@ -2321,21 +2309,9 @@ static void wined3d_device_set_vs_consts_f(struct wined3d_device *device,
 
 void CDECL wined3d_device_set_pixel_shader(struct wined3d_device *device, struct wined3d_shader *shader)
 {
-    struct wined3d_state *state = device->cs->state;
-    struct wined3d_shader *prev;
-
     TRACE("device %p, shader %p.\n", device, shader);
 
-    prev = state->shader[WINED3D_SHADER_TYPE_PIXEL];
-    if (shader == prev)
-        return;
-
-    if (shader)
-        wined3d_shader_incref(shader);
-    state->shader[WINED3D_SHADER_TYPE_PIXEL] = shader;
     wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_PIXEL, shader);
-    if (prev)
-        wined3d_shader_decref(prev);
 }
 
 struct wined3d_shader * CDECL wined3d_device_get_pixel_shader(const struct wined3d_device *device)
@@ -2431,20 +2407,9 @@ static void wined3d_device_set_ps_consts_f(struct wined3d_device *device,
 
 void CDECL wined3d_device_set_hull_shader(struct wined3d_device *device, struct wined3d_shader *shader)
 {
-    struct wined3d_state *state = device->cs->state;
-    struct wined3d_shader *prev;
-
     TRACE("device %p, shader %p.\n", device, shader);
 
-    prev = state->shader[WINED3D_SHADER_TYPE_HULL];
-    if (shader == prev)
-        return;
-    if (shader)
-        wined3d_shader_incref(shader);
-    state->shader[WINED3D_SHADER_TYPE_HULL] = shader;
     wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_HULL, shader);
-    if (prev)
-        wined3d_shader_decref(prev);
 }
 
 struct wined3d_shader * CDECL wined3d_device_get_hull_shader(const struct wined3d_device *device)
@@ -2487,20 +2452,9 @@ struct wined3d_sampler * CDECL wined3d_device_get_hs_sampler(const struct wined3
 
 void CDECL wined3d_device_set_domain_shader(struct wined3d_device *device, struct wined3d_shader *shader)
 {
-    struct wined3d_state *state = device->cs->state;
-    struct wined3d_shader *prev;
-
     TRACE("device %p, shader %p.\n", device, shader);
 
-    prev = state->shader[WINED3D_SHADER_TYPE_DOMAIN];
-    if (shader == prev)
-        return;
-    if (shader)
-        wined3d_shader_incref(shader);
-    state->shader[WINED3D_SHADER_TYPE_DOMAIN] = shader;
     wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_DOMAIN, shader);
-    if (prev)
-        wined3d_shader_decref(prev);
 }
 
 struct wined3d_shader * CDECL wined3d_device_get_domain_shader(const struct wined3d_device *device)
@@ -2543,20 +2497,9 @@ struct wined3d_sampler * CDECL wined3d_device_get_ds_sampler(const struct wined3
 
 void CDECL wined3d_device_set_geometry_shader(struct wined3d_device *device, struct wined3d_shader *shader)
 {
-    struct wined3d_state *state = device->cs->state;
-    struct wined3d_shader *prev;
-
     TRACE("device %p, shader %p.\n", device, shader);
 
-    prev = state->shader[WINED3D_SHADER_TYPE_GEOMETRY];
-    if (shader == prev)
-        return;
-    if (shader)
-        wined3d_shader_incref(shader);
-    state->shader[WINED3D_SHADER_TYPE_GEOMETRY] = shader;
     wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_GEOMETRY, shader);
-    if (prev)
-        wined3d_shader_decref(prev);
 }
 
 struct wined3d_shader * CDECL wined3d_device_get_geometry_shader(const struct wined3d_device *device)
@@ -2598,20 +2541,9 @@ struct wined3d_sampler * CDECL wined3d_device_get_gs_sampler(const struct wined3
 
 void CDECL wined3d_device_set_compute_shader(struct wined3d_device *device, struct wined3d_shader *shader)
 {
-    struct wined3d_state *state = device->cs->state;
-    struct wined3d_shader *prev;
-
     TRACE("device %p, shader %p.\n", device, shader);
 
-    prev = state->shader[WINED3D_SHADER_TYPE_COMPUTE];
-    if (shader == prev)
-        return;
-    if (shader)
-        wined3d_shader_incref(shader);
-    state->shader[WINED3D_SHADER_TYPE_COMPUTE] = shader;
     wined3d_cs_emit_set_shader(device->cs, WINED3D_SHADER_TYPE_COMPUTE, shader);
-    if (prev)
-        wined3d_shader_decref(prev);
 }
 
 struct wined3d_shader * CDECL wined3d_device_get_compute_shader(const struct wined3d_device *device)
-- 
2.20.1




More information about the wine-devel mailing list