[PATCH 2/6] d3dx9: Factor out get_constant_dimensions() function.

Paul Gofman gofmanp at gmail.com
Wed May 24 04:46:52 CDT 2017


Signed-off-by: Paul Gofman <gofmanp at gmail.com>
---
 dlls/d3dx9_36/preshader.c | 43 +++++++++++++++++++++++++++----------------
 1 file changed, 27 insertions(+), 16 deletions(-)

diff --git a/dlls/d3dx9_36/preshader.c b/dlls/d3dx9_36/preshader.c
index 29a2346..262b7c1 100644
--- a/dlls/d3dx9_36/preshader.c
+++ b/dlls/d3dx9_36/preshader.c
@@ -979,6 +979,31 @@ void d3dx_free_param_eval(struct d3dx_param_eval *peval)
     HeapFree(GetProcessHeap(), 0, peval);
 }
 
+static void get_constant_dimensions(struct d3dx_const_param_eval_output *const_set, BOOL *transpose,
+        unsigned int *major, unsigned int *minor, unsigned int *major_stride, unsigned int *n,
+        unsigned int *count)
+{
+    struct d3dx_parameter *param = const_set->param;
+    unsigned int table = const_set->table;
+
+    *transpose = (const_set->constant_class == D3DXPC_MATRIX_COLUMNS && param->class == D3DXPC_MATRIX_ROWS)
+            || (param->class == D3DXPC_MATRIX_COLUMNS && const_set->constant_class == D3DXPC_MATRIX_ROWS);
+    if (const_set->constant_class == D3DXPC_MATRIX_COLUMNS)
+    {
+        *major = param->columns;
+        *minor = param->rows;
+    }
+    else
+    {
+        *major = param->rows;
+        *minor = param->columns;
+    }
+    *major_stride = max(*minor, get_offset_reg(table, 1));
+    *n = min(*major * *major_stride,
+            get_offset_reg(table, const_set->register_count) + *major_stride - 1) / *major_stride;
+    *count = *n * *minor;
+}
+
 static void set_constants(struct d3dx_regstore *rs, struct d3dx_const_tab *const_tab,
         ULONG64 new_update_version)
 {
@@ -998,23 +1023,9 @@ static void set_constants(struct d3dx_regstore *rs, struct d3dx_const_tab *const
         if (!is_param_dirty(param, const_tab->update_version))
             continue;
 
-        transpose = (const_set->constant_class == D3DXPC_MATRIX_COLUMNS && param->class == D3DXPC_MATRIX_ROWS)
-                || (param->class == D3DXPC_MATRIX_COLUMNS && const_set->constant_class == D3DXPC_MATRIX_ROWS);
-        if (const_set->constant_class == D3DXPC_MATRIX_COLUMNS)
-        {
-            major = param->columns;
-            minor = param->rows;
-        }
-        else
-        {
-            major = param->rows;
-            minor = param->columns;
-        }
+        get_constant_dimensions(const_set, &transpose, &major, &minor, &major_stride, &n, &count);
         start_offset = get_offset_reg(table, const_set->register_index);
-        major_stride = max(minor, get_offset_reg(table, 1));
-        n = min(major * major_stride,
-                get_offset_reg(table, const_set->register_count) + major_stride - 1) / major_stride;
-        count = n * minor;
+
         if (((param->type == D3DXPT_FLOAT && table_type == PRES_VT_FLOAT)
                 || (param->type == D3DXPT_INT && table_type == PRES_VT_INT)
                 || (param->type == D3DXPT_BOOL && table_type == PRES_VT_BOOL))
-- 
2.9.3




More information about the wine-patches mailing list