[v5 5/8] d3dx9: Implement fxlc constants (expressions) in effect.

Matteo Bruni matteo.mystral at gmail.com
Tue Mar 22 17:07:37 CDT 2016


2016-03-21 14:55 GMT+01:00 Paul Gofman <gofmanp at gmail.com>:

> +static unsigned int regstore_is_val_set_reg(struct d3dx_regstore *rs, unsigned int table, unsigned int reg_idx)
> +{
> +    return rs->table_value_set[table][reg_idx / PRES_BITMASK_BLOCK_SIZE] &
> +            (1ul << (reg_idx % PRES_BITMASK_BLOCK_SIZE));
> +}

Actually you don't want "ul" here, just "u".

> +static void regstore_set_float(struct d3dx_regstore *rs, unsigned int table, unsigned int offset, float v)
> +{
> +    BYTE *p;
> +    unsigned int reg_idx;
> +
> +    p = (BYTE *)rs->tables[table] + table_info[table].component_size * offset;
> +    switch (table_info[table].type)
> +    {
> +        case PRES_VT_FLOAT : *(float *)p = v; break;
> +        case PRES_VT_DOUBLE: *(double *)p = v; break;
> +        case PRES_VT_INT   : *(int *)p = roundf(v); break;
> +        case PRES_VT_BOOL  : *(BOOL *)p = !!v; break;
> +    }
> +    reg_idx = OFFSET2REG(table, offset);
> +    rs->table_value_set[table][reg_idx / PRES_BITMASK_BLOCK_SIZE] |=
> +            1ul << (reg_idx % PRES_BITMASK_BLOCK_SIZE);

Same here.

> +static HRESULT set_constants_param(struct d3dx_regstore *rs, struct d3dx_const_tab *const_tab,
> +        D3DXHANDLE hc, struct d3dx_parameter *param)
> +{
> +    ID3DXConstantTable *ctab = const_tab->ctab;
> +    D3DXCONSTANT_DESC desc;
> +    unsigned int const_count, param_count, i, j, n, table, start_offset;
> +    unsigned int nminor, nmajor, major_stride, inp_ind;

Nitpick, also rename nmajor/nminor to major_size or just major (resp.
minor). inp_ind also feels like it has room for improvement, although
I don't have any good suggestion.

> +#define ARGS_ARRAY_SIZE 8
> +static HRESULT execute_preshader(struct d3dx_preshader *pres)
> +{
> +    unsigned int i, j, k;
> +    float args[ARGS_ARRAY_SIZE];

Doesn't this need to be double to preserve the precision of the
immediate operands / literals? I guess that means the regstore should
also be able to return doubles.



More information about the wine-devel mailing list