[PATCH 4/5] d3dx9_36: Implemented ID3DXConstantTable_SetMatrix and ID3DXConstantTable_SetMatrixArray

Travis Athougies iammisc at gmail.com
Fri Jan 21 17:23:48 CST 2011


Oh I'm sorry. I now see what you mean, you were talking about the
register index parameter to Set*ShaderConstantF? Yes, that should be
changed. I will submit updated patches shortly.

Travis.

On Fri, Jan 21, 2011 at 3:22 PM, Travis Athougies <iammisc at gmail.com> wrote:
> matrix + i will advance by the size of 1 D3DXMATRIX, since matrix is a
> pointer to a D3DXMATRIX. Michael is right, I thought the code was
> clearer with the pointer arithmetic, but I now see more people are
> familiar with the array indexing style.
>
> Travis.
>
> On Fri, Jan 21, 2011 at 8:47 AM, Matteo Bruni <matteo.mystral at gmail.com> wrote:
>> 2011/1/21 Michael Stefaniuc <mstefani at redhat.com>:
>>> On 01/21/2011 06:56 AM, Travis Athougies wrote:
>>>> On Thu, Jan 20, 2011 at 7:27 AM, Matteo Bruni<matteo.mystral at gmail.com>
>>>>  wrote:
>>>>>
>>>>> 2011/1/20 Travis Athougies<iammisc at gmail.com>:
>>>>>>
>>>>>> +            /* D3DXMATRIX is a union, one of whose elements is an
>>>>>> array, so it can be cast to a float pointer */
>>>>>> +           if (is_vertex_shader(This->desc.Version))
>>>>>> +               IDirect3DDevice9_SetVertexShaderConstantF(device,
>>>>>> desc.RegisterIndex + i, (float *)(matrix + i),
>>>>>> +                        desc.RegisterCount);
>>>>>> +           else
>>>>>> +               IDirect3DDevice9_SetPixelShaderConstantF(device,
>>>>>> desc.RegisterIndex + i, (float *)(matrix + i),
>>>>>> +                        desc.RegisterCount);
>>>>>
>>>>> Can't you just pass matrix->m[i] as parameter, instead of that cast?
>>>>>
>>>>
>>>> Uh no. If I were to do that, matrix->m[1] would be the second row, not
>>>> the second matrix. I'm trying to get at the second matrix. To
>>>> illustrate this, suppose the matrix were at 0x8000 (not going to
>>>> happen, but just pretend). matrix->m[1] would be at 0x8010, since
>>>> floats are 4 bytes. However, the next matrix is actually at 0x8040
>>>> (since sizeof(float) * 16 [the number of elements in the matrix] =
>>>> 64).
>>>
>>> So you want a pointer to the first element of the "i"th matrix, right?
>>>    &matrix[i]._11
>>> No cast, no explicit pointer arithmetic.
>>>
>>
>> Oh, right, I misread that (and Michael's suggestion is good). But then
>> I would expect the register index to be incremented by
>> desc.RegisterCount at each iteration. RegisterCount is supposedly 4,
>> but what if it is not? This calls for some SetMatrixArray tests.
>>
>
>
>
> --
> Travis Athougies
>



-- 
Travis Athougies




More information about the wine-devel mailing list