[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