Wednesday, April 12, 2006, 4:02:58 PM, Ivan Gyurdiev wrote:
> The point of this patch is to pull out things like modifier processing
> (write masks, saturate, swizzle) from different case statements, and put
> them in a more common path, which simplifies code, and makes sure we
> don't miss cases. Also, reorder things as appropriate to get rid of the
> crazy continue/switch flow control that's confusing me. Dead code paths
> were also if0'ed.
> Patch introduces undesired effect that now input and output modifiers
> are allowed on all instructions, which is definitely not valid according
> to MSDN. However, I don't think we should care at this point, since
> processing of valid shaders, and simplifying the code path should take
> precedence. We can add validation later in a more appropriate place [
> the current "validation" is to completely disable or enable modifiers on
> certain instructions, which is not correct either - and it should fail,
> not just print a fixme on error ].
> Patch will enable processing _bx2 modifier on certain texture
> instructions, which is valid in shaders 1.2/1.3. Also, is negation and
> swizzling valid on texture instructions in 3.0? If it is, this will
> process it. Also will enable write mask processing in some texture
> instructions where it previously wasn't, generating more correct shader.
I'm afraid this page changes too much at one go. You should split it into
separate pieces. For example:
> TRACE("Found opcode D3D:%s GL:%s, PARAMS:%d, \n",
> - curOpcode->name, curOpcode->glname, curOpcode->num_params);
> + curOpcode->name, curOpcode->glname, curOpcode->num_params - 1);
should be one patch. Btw why are you adding -1 here?
This could be turned into one big patch that is no-op:
> /* Cubemap textures will be more used than 3D ones. */
> - sprintf(tmpLine, "TEX T%lu, TMP, texture[%lu], CUBE;\n", reg, reg);
> + sprintf(tmpLine, "TEX T%lu, TMP, texture[%lu], CUBE;\n", output, output);
Vitaliy Margolen