[13/19] WineD3D: Add empty sampler entries to the state table

Stefan Dösinger stefan at codeweavers.com
Tue Dec 19 16:14:07 CST 2006


Samper states can't be managed seperately because they are per-texture in 
opengl and per-device in d3d. So SetTexture and SetSamplerState dirtify the 
samplers
-------------- next part --------------
From 53ac5924fc5fc8e25b95c65a286e759ff650eba3 Mon Sep 17 00:00:00 2001
From: Stefan Doesinger <stefan at codeweavers.com>
Date: Mon, 18 Dec 2006 12:08:49 +0100
Subject: [PATCH] WineD3D: Add empty sampler state entries to the state table

---
 dlls/wined3d/state.c           |   17 +++++++++++++++++
 dlls/wined3d/wined3d_private.h |    6 +++++-
 2 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index e7a1369..8881ba7 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -2127,4 +2127,21 @@ const struct StateEntry StateTable[] =
     { /*7, 30, undefined                            */      0 /* -> sampler state in ddraw / d3d8 */,           state_undefined     },
     { /*7, 31, undefined                            */      0 /* -> sampler state in ddraw / d3d8 */,           state_undefined     },
     { /*7, 32, WINED3DTSS_CONSTANT                  */      0 /* As long as we don't support D3DTA_CONSTANT */, state_nogl          },
+    /* Sampler states */
+    { /* 0, Sampler 0                               */      STATE_SAMPLER(0),                                   state_undefined     },
+    { /* 1, Sampler 1                               */      STATE_SAMPLER(1),                                   state_undefined     },
+    { /* 2, Sampler 2                               */      STATE_SAMPLER(2),                                   state_undefined     },
+    { /* 3, Sampler 3                               */      STATE_SAMPLER(3),                                   state_undefined     },
+    { /* 4, Sampler 3                               */      STATE_SAMPLER(4),                                   state_undefined     },
+    { /* 5, Sampler 5                               */      STATE_SAMPLER(5),                                   state_undefined     },
+    { /* 6, Sampler 6                               */      STATE_SAMPLER(6),                                   state_undefined     },
+    { /* 7, Sampler 7                               */      STATE_SAMPLER(7),                                   state_undefined     },
+    { /* 8, Sampler 8                               */      STATE_SAMPLER(8),                                   state_undefined     },
+    { /* 9, Sampler 9                               */      STATE_SAMPLER(9),                                   state_undefined     },
+    { /*10, Sampler 10                              */      STATE_SAMPLER(10),                                  state_undefined     },
+    { /*11, Sampler 11                              */      STATE_SAMPLER(11),                                  state_undefined     },
+    { /*12, Sampler 12                              */      STATE_SAMPLER(12),                                  state_undefined     },
+    { /*13, Sampler 13                              */      STATE_SAMPLER(13),                                  state_undefined     },
+    { /*14, Sampler 14                              */      STATE_SAMPLER(14),                                  state_undefined     },
+    { /*15, Sampler 15                              */      STATE_SAMPLER(15),                                  state_undefined     },
 };
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 3757bda..5c30b9c 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -416,7 +416,11 @@ #define STATE_IS_RENDER(a) ((a) >= STATE
 #define STATE_TEXTURESTAGE(stage, num) (STATE_RENDER(WINEHIGHEST_RENDER_STATE) + (stage) * WINED3D_HIGHEST_TEXTURE_STATE + (num))
 #define STATE_IS_TEXTURESTAGE(a) ((a) >= STATE_TEXTURESTAGE(0, 1) && (a) <= STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE))
 
-#define STATE_HIGHEST (STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE))
+/* + 1 because samplers start with 0 */
+#define STATE_SAMPLER(num) (STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE) + 1 + (num))
+#define STATE_IS_SAMPLER(num) ((num) >= STATE_SAMPLER(0) && (num) <= STATE_SAMPLER(MAX_SAMPLERS - 1))
+
+#define STATE_HIGHEST (STATE_SAMPLER(MAX_SAMPLERS - 1))
 
 struct StateEntry
 {
-- 
1.4.2.4



More information about the wine-patches mailing list