diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index f3e2dc7..9fa9a20 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -349,7 +349,7 @@
         if (comment) continue;
 
         /* Fetch opcode */
-        fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size, shader_version);
+        fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size);
 
         /* Unhandled opcode, and its parameters */
         if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
@@ -401,7 +401,7 @@
             local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
             if (!lconst) return E_OUTOFMEMORY;
 
-            fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version);
+            fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
             lconst->idx = dst.register_idx;
 
             memcpy(lconst->value, pToken, 4 * sizeof(DWORD));
@@ -431,7 +431,7 @@
             local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
             if (!lconst) return E_OUTOFMEMORY;
 
-            fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version);
+            fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
             lconst->idx = dst.register_idx;
 
             memcpy(lconst->value, pToken, 4 * sizeof(DWORD));
@@ -447,7 +447,7 @@
             local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
             if (!lconst) return E_OUTOFMEMORY;
 
-            fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version);
+            fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
             lconst->idx = dst.register_idx;
 
             memcpy(lconst->value, pToken, sizeof(DWORD));
@@ -461,7 +461,7 @@
         {
             struct wined3d_shader_src_param src, rel_addr;
 
-            fe->shader_read_src_param(&pToken, &src, &rel_addr, shader_version);
+            fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
 
             /* Rep and Loop always use an integer constant for the control parameters */
             if (ins.handler_idx == WINED3DSIH_REP)
@@ -470,7 +470,7 @@
             }
             else
             {
-                fe->shader_read_src_param(&pToken, &src, &rel_addr, shader_version);
+                fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
                 reg_maps->integer_constants |= 1 << src.register_idx;
             }
 
@@ -488,7 +488,7 @@
         {
             struct wined3d_shader_src_param src, rel_addr;
 
-            fe->shader_read_src_param(&pToken, &src, &rel_addr, shader_version);
+            fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
             reg_maps->labels[src.register_idx] = 1;
         }
         /* Set texture, address, temporary registers */
@@ -508,7 +508,7 @@
                 struct wined3d_shader_dst_param dst_param;
                 struct wined3d_shader_src_param dst_rel_addr;
 
-                fe->shader_read_dst_param(&pToken, &dst_param, &dst_rel_addr, shader_version);
+                fe->shader_read_dst_param(fe_data, &pToken, &dst_param, &dst_rel_addr);
 
                 /* WINED3DSPR_TEXCRDOUT is the same as WINED3DSPR_OUTPUT. _OUTPUT can be > MAX_REG_TEXCRD and
                  * is used in >= 3.0 shaders. Filter 3.0 shaders to prevent overflows, and also filter pixel
@@ -580,7 +580,7 @@
             {
                 struct wined3d_shader_src_param src_param, src_rel_addr;
 
-                fe->shader_read_src_param(&pToken, &src_param, &src_rel_addr, shader_version);
+                fe->shader_read_src_param(fe_data, &pToken, &src_param, &src_rel_addr);
                 shader_record_register_usage(This, reg_maps, src_param.register_type,
                         src_param.register_idx, !!src_param.rel_addr, pshader);
             }
@@ -892,7 +892,7 @@
         if (comment) continue;
 
         /* Read opcode */
-        fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size, shader_version);
+        fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size);
 
         /* Unknown opcode and its parameters */
         if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
@@ -927,7 +927,7 @@
         }
 
         /* Destination token */
-        if (ins.dst_count) fe->shader_read_dst_param(&pToken, &dst_param, &dst_rel_addr, shader_version);
+        if (ins.dst_count) fe->shader_read_dst_param(fe_data, &pToken, &dst_param, &dst_rel_addr);
 
         /* Predication token */
         if (ins.predicate) ins.predicate = *pToken++;
@@ -935,7 +935,7 @@
         /* Other source tokens */
         for (i = 0; i < ins.src_count; ++i)
         {
-            fe->shader_read_src_param(&pToken, &src_param[i], &src_rel_addr[i], shader_version);
+            fe->shader_read_src_param(fe_data, &pToken, &src_param[i], &src_rel_addr[i]);
         }
 
         /* Call appropriate function for output target */
@@ -1000,7 +1000,7 @@
             continue;
         }
 
-        fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size, shader_version);
+        fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size);
         if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
         {
             TRACE("Skipping unrecognized instruction.\n");
@@ -1024,7 +1024,7 @@
             struct wined3d_shader_dst_param dst;
             struct wined3d_shader_src_param rel_addr;
 
-            fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version);
+            fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
 
             TRACE("def c%u = %f, %f, %f, %f", shader_get_float_offset(dst.register_type, dst.register_idx),
                     *(const float *)(pToken),
@@ -1038,7 +1038,7 @@
             struct wined3d_shader_dst_param dst;
             struct wined3d_shader_src_param rel_addr;
 
-            fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version);
+            fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
 
             TRACE("defi i%u = %d, %d, %d, %d", dst.register_idx,
                     *(pToken),
@@ -1052,7 +1052,7 @@
             struct wined3d_shader_dst_param dst;
             struct wined3d_shader_src_param rel_addr;
 
-            fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version);
+            fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
 
             TRACE("defb b%u = %s", dst.register_idx, *pToken ? "true" : "false");
             ++pToken;
@@ -1065,14 +1065,14 @@
 
             if (ins.dst_count)
             {
-                fe->shader_read_dst_param(&pToken, &dst_param, &dst_rel_addr, shader_version);
+                fe->shader_read_dst_param(fe_data, &pToken, &dst_param, &dst_rel_addr);
             }
 
             /* Print out predication source token first - it follows
              * the destination token. */
             if (ins.predicate)
             {
-                fe->shader_read_src_param(&pToken, &src_param, &src_rel_addr, shader_version);
+                fe->shader_read_src_param(fe_data, &pToken, &src_param, &src_rel_addr);
                 TRACE("(");
                 shader_dump_src_param(&src_param, shader_version);
                 TRACE(") ");
@@ -1115,7 +1115,7 @@
             /* Other source tokens */
             for (i = ins.dst_count; i < (ins.dst_count + ins.src_count); ++i)
             {
-                fe->shader_read_src_param(&pToken, &src_param, &src_rel_addr, shader_version);
+                fe->shader_read_src_param(fe_data, &pToken, &src_param, &src_rel_addr);
                 TRACE(!i ? " " : ", ");
                 shader_dump_src_param(&src_param, shader_version);
             }
diff --git a/dlls/wined3d/shader_sm1.c b/dlls/wined3d/shader_sm1.c
index d13df03..2291599 100644
--- a/dlls/wined3d/shader_sm1.c
+++ b/dlls/wined3d/shader_sm1.c
@@ -108,6 +108,7 @@
 
 struct wined3d_sm1_data
 {
+    DWORD shader_version;
     const struct wined3d_sm1_opcode_info *opcode_table;
 };
 
@@ -440,24 +441,28 @@
 
 static void shader_sm1_read_header(void *data, const DWORD **ptr, DWORD *shader_version)
 {
+    struct wined3d_sm1_data *priv = data;
+
     TRACE("version: 0x%08x\n", **ptr);
     *shader_version = *(*ptr)++;
+
+    priv->shader_version = *shader_version;
 }
 
 static void shader_sm1_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
-        UINT *param_size, DWORD shader_version)
+        UINT *param_size)
 {
     struct wined3d_sm1_data *priv = data;
     const struct wined3d_sm1_opcode_info *opcode_info;
     DWORD opcode_token;
 
     opcode_token = *(*ptr)++;
-    opcode_info = shader_get_opcode(priv->opcode_table, shader_version, opcode_token);
+    opcode_info = shader_get_opcode(priv->opcode_table, priv->shader_version, opcode_token);
     if (!opcode_info)
     {
         FIXME("Unrecognized opcode: token=0x%08x\n", opcode_token);
         ins->handler_idx = WINED3DSIH_TABLE_SIZE;
-        *param_size = shader_skip_unrecognized(*ptr, shader_version);
+        *param_size = shader_skip_unrecognized(*ptr, priv->shader_version);
         return;
     }
 
@@ -467,15 +472,16 @@
     ins->predicate = opcode_token & WINED3DSHADER_INSTRUCTION_PREDICATED;
     ins->dst_count = opcode_info->dst_count ? 1 : 0;
     ins->src_count = opcode_info->param_count - opcode_info->dst_count;
-    *param_size = shader_skip_opcode(opcode_info, opcode_token, shader_version);
+    *param_size = shader_skip_opcode(opcode_info, opcode_token, priv->shader_version);
 }
 
-static void shader_sm1_read_src_param(const DWORD **ptr, struct wined3d_shader_src_param *src_param,
-        struct wined3d_shader_src_param *src_rel_addr, DWORD shader_version)
+static void shader_sm1_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
+        struct wined3d_shader_src_param *src_rel_addr)
 {
+    struct wined3d_sm1_data *priv = data;
     DWORD token, addr_token;
 
-    *ptr += shader_get_param(*ptr, shader_version, &token, &addr_token);
+    *ptr += shader_get_param(*ptr, priv->shader_version, &token, &addr_token);
     if (token & WINED3DSHADER_ADDRMODE_RELATIVE)
     {
         shader_parse_src_param(addr_token, NULL, src_rel_addr);
@@ -487,12 +493,13 @@
     }
 }
 
-static void shader_sm1_read_dst_param(const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
-        struct wined3d_shader_src_param *dst_rel_addr, DWORD shader_version)
+static void shader_sm1_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
+        struct wined3d_shader_src_param *dst_rel_addr)
 {
+    struct wined3d_sm1_data *priv = data;
     DWORD token, addr_token;
 
-    *ptr += shader_get_param(*ptr, shader_version, &token, &addr_token);
+    *ptr += shader_get_param(*ptr, priv->shader_version, &token, &addr_token);
     if (token & WINED3DSHADER_ADDRMODE_RELATIVE)
     {
         shader_parse_src_param(addr_token, NULL, dst_rel_addr);
diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c
index 9a5707a..f56d197 100644
--- a/dlls/wined3d/shader_sm4.c
+++ b/dlls/wined3d/shader_sm4.c
@@ -66,6 +66,7 @@
 
 struct wined3d_sm4_data
 {
+    DWORD shader_version;
     const DWORD *end;
 };
 
@@ -134,10 +135,12 @@
     *shader_version = *(*ptr)++;
     TRACE("token count: %u\n", **ptr);
     priv->end += *(*ptr)++;
+
+    priv->shader_version = *shader_version;
 }
 
 static void shader_sm4_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
-        UINT *param_size, DWORD shader_version)
+        UINT *param_size)
 {
     const struct wined3d_sm4_opcode_info *opcode_info;
     DWORD token = *(*ptr)++;
@@ -161,8 +164,8 @@
     ins->src_count = opcode_info->src_count;
 }
 
-static void shader_sm4_read_src_param(const DWORD **ptr, struct wined3d_shader_src_param *src_param,
-        struct wined3d_shader_src_param *src_rel_addr, DWORD shader_version)
+static void shader_sm4_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
+        struct wined3d_shader_src_param *src_rel_addr)
 {
     DWORD token = *(*ptr)++;
     enum wined3d_sm4_register_type register_type;
@@ -213,8 +216,8 @@
     src_param->rel_addr = NULL;
 }
 
-static void shader_sm4_read_dst_param(const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
-        struct wined3d_shader_src_param *dst_rel_addr, DWORD shader_version)
+static void shader_sm4_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
+        struct wined3d_shader_src_param *dst_rel_addr)
 {
     DWORD token = *(*ptr)++;
     UINT register_idx = *(*ptr)++;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 38c8e1e..bf4f88a 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -682,12 +682,11 @@
     void *(*shader_init)(const DWORD *ptr);
     void (*shader_free)(void *data);
     void (*shader_read_header)(void *data, const DWORD **ptr, DWORD *shader_version);
-    void (*shader_read_opcode)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
-            UINT *param_size, DWORD shader_version);
-    void (*shader_read_src_param)(const DWORD **ptr, struct wined3d_shader_src_param *src_param,
-            struct wined3d_shader_src_param *src_rel_addr, DWORD shader_version);
-    void (*shader_read_dst_param)(const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
-            struct wined3d_shader_src_param *dst_rel_addr, DWORD shader_version);
+    void (*shader_read_opcode)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, UINT *param_size);
+    void (*shader_read_src_param)(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
+            struct wined3d_shader_src_param *src_rel_addr);
+    void (*shader_read_dst_param)(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
+            struct wined3d_shader_src_param *dst_rel_addr);
     void (*shader_read_semantic)(const DWORD **ptr, struct wined3d_shader_semantic *semantic);
     void (*shader_read_comment)(const DWORD **ptr, const char **comment);
     BOOL (*shader_is_end)(void *data, const DWORD **ptr);
