2009/4/22 Tobias Jakobi <liquid.a...@gmx.net>:
> Henri Verbeet wrote:
>> Sure, but it's still internal bookkeeping of the backends. Everything
>> the backend needs from the outside world is the np2_fixup field from
>> struct ps_compile_args.
>>
>>> For ARB mode this is essential since something like the prog_link struct
>>> from GLSL doesn't exist there.
>> It's not terribly hard to introduce something like that. That could
>> mean adding a handle table to the ARB backend, or expanding prgId to
>> be a pointer, but that's ok.
> So, is that a suggestion? I don't think that's for me to decide.
>
> You should make clear if I should implement it this way or use another
> approach. From my point of view it makes sense to share the data, so
> putting this into ps_compiled_shader is my currently best option.
>
> But if you say, that the current approach is a no-go - I'll try the
> pointer-approach.
>
> So, how should I do it?
>
A handle table would probably make the most sense. A pointer would
work for ARB, but for GLSL that's just extra indirection that isn't
really needed.

>> The point is that writing "GLfloat* const_cache;" implies the * is
>> part of the type instead of the declarator. C doesn't work that way,
>> it's misleading at best.
> IMHO that's splitting hairs.
>
> You could apply the same this for pointer casting, forbidding something
> like
> var = (TYPE*)var2;
> and instead enforce
> var = (TYPE *)var2;
>
I think that's better, yes.

>> Not in the current code, no. But if you store the index of the fixup
>> parameter instead of the index of the packed uniform the parameter is
>> stored in, you can derive the index of the packed uniform as (idx >>
>> 1) and the position within that uniform as (idx & 1).
>>
> I don't think I can follow you.
>
> I tried some similar approach in the beginning, but it I think it failed
> if tex1 and tex3 need fixup, but tex2 does not.
> The approach didn't like "holes" in the indices. However we can't assume
> that all texture samples that need fixup are consecutive.
>
Tex fixup parameter for tex1 would have idx 0, the one for tex3 would
have idx 1. These would then be packed as PsamplerNP2Fixup0.xy and
PsamplerNP2Fixup0.zw.


Reply via email to