const DWORD* pToken = pFunction;
const SHADER_OPCODE* curOpcode = NULL;
DWORD opcode_token;
- unsigned int len = 0;
DWORD i;
TRACE("(%p) : Parsing program\n", This);
WINED3DSHADER_VERSION_MAJOR(This->baseShader.hex_version),
WINED3DSHADER_VERSION_MINOR(This->baseShader.hex_version));
++pToken;
- ++len;
continue;
}
if (shader_is_comment(*pToken)) /* comment */
++pToken;
TRACE("//%s\n", (const char*)pToken);
pToken += comment_len;
- len += comment_len + 1;
continue;
}
opcode_token = *pToken++;
curOpcode = shader_get_opcode(This->baseShader.shader_ins, This->baseShader.hex_version, opcode_token);
- len++;
if (!curOpcode)
{
FIXME("Unrecognized opcode: token=0x%08x\n", opcode_token);
tokens_read = shader_skip_unrecognized(pToken, This->baseShader.hex_version);
pToken += tokens_read;
- len += tokens_read;
}
else
{
TRACE(" ");
shader_dump_param(param, 0, 0, This->baseShader.hex_version);
pToken += 2;
- len += 2;
}
else if (curOpcode->opcode == WINED3DSIO_DEF)
{
*(const float *)(pToken + 3),
*(const float *)(pToken + 4));
pToken += 5;
- len += 5;
}
else if (curOpcode->opcode == WINED3DSIO_DEFI)
{
*(pToken + 3),
*(pToken + 4));
pToken += 5;
- len += 5;
}
else if (curOpcode->opcode == WINED3DSIO_DEFB)
{
TRACE("defb b%u = %s", *pToken & WINED3DSP_REGNUM_MASK,
*(pToken + 1)? "true": "false");
pToken += 2;
- len += 2;
}
else
{
{
tokens_read = shader_get_param(pToken, This->baseShader.hex_version, ¶m, &addr_token);
pToken += tokens_read;
- len += tokens_read;
shader_dump_ins_modifiers(param);
TRACE(" ");
if (opcode_token & WINED3DSHADER_INSTRUCTION_PREDICATED)
{
pToken++;
- len++;
}
/* Other source tokens */
{
tokens_read = shader_get_param(pToken, This->baseShader.hex_version, ¶m, &addr_token);
pToken += tokens_read;
- len += tokens_read;
TRACE((i == 0)? " " : ", ");
shader_dump_param(param, addr_token, 1, This->baseShader.hex_version);
TRACE("\n");
}
}
- This->baseShader.functionLength = (len + 1) * sizeof(DWORD);
+ ++pToken;
+
+ This->baseShader.functionLength = ((char *)pToken - (char *)pFunction);
}
void shader_cleanup(IWineD3DBaseShader *iface)