Commit 5c63d93e authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

wined3d: Store the shader version in the frontend's private data.

parent 94cf6186
...@@ -349,7 +349,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 ...@@ -349,7 +349,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
if (comment) continue; if (comment) continue;
/* Fetch opcode */ /* Fetch opcode */
fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size, shader_version); fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size);
/* Unhandled opcode, and its parameters */ /* Unhandled opcode, and its parameters */
if (ins.handler_idx == WINED3DSIH_TABLE_SIZE) if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
...@@ -401,7 +401,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 ...@@ -401,7 +401,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant)); local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
if (!lconst) return E_OUTOFMEMORY; if (!lconst) return E_OUTOFMEMORY;
fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version); fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
lconst->idx = dst.register_idx; lconst->idx = dst.register_idx;
memcpy(lconst->value, pToken, 4 * sizeof(DWORD)); memcpy(lconst->value, pToken, 4 * sizeof(DWORD));
...@@ -431,7 +431,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 ...@@ -431,7 +431,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant)); local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
if (!lconst) return E_OUTOFMEMORY; if (!lconst) return E_OUTOFMEMORY;
fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version); fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
lconst->idx = dst.register_idx; lconst->idx = dst.register_idx;
memcpy(lconst->value, pToken, 4 * sizeof(DWORD)); memcpy(lconst->value, pToken, 4 * sizeof(DWORD));
...@@ -447,7 +447,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 ...@@ -447,7 +447,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant)); local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
if (!lconst) return E_OUTOFMEMORY; if (!lconst) return E_OUTOFMEMORY;
fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version); fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
lconst->idx = dst.register_idx; lconst->idx = dst.register_idx;
memcpy(lconst->value, pToken, sizeof(DWORD)); memcpy(lconst->value, pToken, sizeof(DWORD));
...@@ -461,7 +461,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 ...@@ -461,7 +461,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
{ {
struct wined3d_shader_src_param src, rel_addr; struct wined3d_shader_src_param src, rel_addr;
fe->shader_read_src_param(&pToken, &src, &rel_addr, shader_version); fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
/* Rep and Loop always use an integer constant for the control parameters */ /* Rep and Loop always use an integer constant for the control parameters */
if (ins.handler_idx == WINED3DSIH_REP) if (ins.handler_idx == WINED3DSIH_REP)
...@@ -470,7 +470,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 ...@@ -470,7 +470,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
} }
else else
{ {
fe->shader_read_src_param(&pToken, &src, &rel_addr, shader_version); fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
reg_maps->integer_constants |= 1 << src.register_idx; reg_maps->integer_constants |= 1 << src.register_idx;
} }
...@@ -488,7 +488,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 ...@@ -488,7 +488,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
{ {
struct wined3d_shader_src_param src, rel_addr; struct wined3d_shader_src_param src, rel_addr;
fe->shader_read_src_param(&pToken, &src, &rel_addr, shader_version); fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
reg_maps->labels[src.register_idx] = 1; reg_maps->labels[src.register_idx] = 1;
} }
/* Set texture, address, temporary registers */ /* Set texture, address, temporary registers */
...@@ -508,7 +508,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 ...@@ -508,7 +508,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
struct wined3d_shader_dst_param dst_param; struct wined3d_shader_dst_param dst_param;
struct wined3d_shader_src_param dst_rel_addr; struct wined3d_shader_src_param dst_rel_addr;
fe->shader_read_dst_param(&pToken, &dst_param, &dst_rel_addr, shader_version); fe->shader_read_dst_param(fe_data, &pToken, &dst_param, &dst_rel_addr);
/* WINED3DSPR_TEXCRDOUT is the same as WINED3DSPR_OUTPUT. _OUTPUT can be > MAX_REG_TEXCRD and /* WINED3DSPR_TEXCRDOUT is the same as WINED3DSPR_OUTPUT. _OUTPUT can be > MAX_REG_TEXCRD and
* is used in >= 3.0 shaders. Filter 3.0 shaders to prevent overflows, and also filter pixel * is used in >= 3.0 shaders. Filter 3.0 shaders to prevent overflows, and also filter pixel
...@@ -580,7 +580,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 ...@@ -580,7 +580,7 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
{ {
struct wined3d_shader_src_param src_param, src_rel_addr; struct wined3d_shader_src_param src_param, src_rel_addr;
fe->shader_read_src_param(&pToken, &src_param, &src_rel_addr, shader_version); fe->shader_read_src_param(fe_data, &pToken, &src_param, &src_rel_addr);
shader_record_register_usage(This, reg_maps, src_param.register_type, shader_record_register_usage(This, reg_maps, src_param.register_type,
src_param.register_idx, !!src_param.rel_addr, pshader); src_param.register_idx, !!src_param.rel_addr, pshader);
} }
...@@ -892,7 +892,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER *buffer, ...@@ -892,7 +892,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER *buffer,
if (comment) continue; if (comment) continue;
/* Read opcode */ /* Read opcode */
fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size, shader_version); fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size);
/* Unknown opcode and its parameters */ /* Unknown opcode and its parameters */
if (ins.handler_idx == WINED3DSIH_TABLE_SIZE) if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
...@@ -927,7 +927,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER *buffer, ...@@ -927,7 +927,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER *buffer,
} }
/* Destination token */ /* Destination token */
if (ins.dst_count) fe->shader_read_dst_param(&pToken, &dst_param, &dst_rel_addr, shader_version); if (ins.dst_count) fe->shader_read_dst_param(fe_data, &pToken, &dst_param, &dst_rel_addr);
/* Predication token */ /* Predication token */
if (ins.predicate) ins.predicate = *pToken++; if (ins.predicate) ins.predicate = *pToken++;
...@@ -935,7 +935,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER *buffer, ...@@ -935,7 +935,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER *buffer,
/* Other source tokens */ /* Other source tokens */
for (i = 0; i < ins.src_count; ++i) for (i = 0; i < ins.src_count; ++i)
{ {
fe->shader_read_src_param(&pToken, &src_param[i], &src_rel_addr[i], shader_version); fe->shader_read_src_param(fe_data, &pToken, &src_param[i], &src_rel_addr[i]);
} }
/* Call appropriate function for output target */ /* Call appropriate function for output target */
...@@ -1000,7 +1000,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, ...@@ -1000,7 +1000,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data,
continue; continue;
} }
fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size, shader_version); fe->shader_read_opcode(fe_data, &pToken, &ins, &param_size);
if (ins.handler_idx == WINED3DSIH_TABLE_SIZE) if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
{ {
TRACE("Skipping unrecognized instruction.\n"); TRACE("Skipping unrecognized instruction.\n");
...@@ -1024,7 +1024,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, ...@@ -1024,7 +1024,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data,
struct wined3d_shader_dst_param dst; struct wined3d_shader_dst_param dst;
struct wined3d_shader_src_param rel_addr; struct wined3d_shader_src_param rel_addr;
fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version); fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
TRACE("def c%u = %f, %f, %f, %f", shader_get_float_offset(dst.register_type, dst.register_idx), TRACE("def c%u = %f, %f, %f, %f", shader_get_float_offset(dst.register_type, dst.register_idx),
*(const float *)(pToken), *(const float *)(pToken),
...@@ -1038,7 +1038,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, ...@@ -1038,7 +1038,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data,
struct wined3d_shader_dst_param dst; struct wined3d_shader_dst_param dst;
struct wined3d_shader_src_param rel_addr; struct wined3d_shader_src_param rel_addr;
fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version); fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
TRACE("defi i%u = %d, %d, %d, %d", dst.register_idx, TRACE("defi i%u = %d, %d, %d, %d", dst.register_idx,
*(pToken), *(pToken),
...@@ -1052,7 +1052,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, ...@@ -1052,7 +1052,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data,
struct wined3d_shader_dst_param dst; struct wined3d_shader_dst_param dst;
struct wined3d_shader_src_param rel_addr; struct wined3d_shader_src_param rel_addr;
fe->shader_read_dst_param(&pToken, &dst, &rel_addr, shader_version); fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
TRACE("defb b%u = %s", dst.register_idx, *pToken ? "true" : "false"); TRACE("defb b%u = %s", dst.register_idx, *pToken ? "true" : "false");
++pToken; ++pToken;
...@@ -1065,14 +1065,14 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, ...@@ -1065,14 +1065,14 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data,
if (ins.dst_count) if (ins.dst_count)
{ {
fe->shader_read_dst_param(&pToken, &dst_param, &dst_rel_addr, shader_version); fe->shader_read_dst_param(fe_data, &pToken, &dst_param, &dst_rel_addr);
} }
/* Print out predication source token first - it follows /* Print out predication source token first - it follows
* the destination token. */ * the destination token. */
if (ins.predicate) if (ins.predicate)
{ {
fe->shader_read_src_param(&pToken, &src_param, &src_rel_addr, shader_version); fe->shader_read_src_param(fe_data, &pToken, &src_param, &src_rel_addr);
TRACE("("); TRACE("(");
shader_dump_src_param(&src_param, shader_version); shader_dump_src_param(&src_param, shader_version);
TRACE(") "); TRACE(") ");
...@@ -1115,7 +1115,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, ...@@ -1115,7 +1115,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data,
/* Other source tokens */ /* Other source tokens */
for (i = ins.dst_count; i < (ins.dst_count + ins.src_count); ++i) for (i = ins.dst_count; i < (ins.dst_count + ins.src_count); ++i)
{ {
fe->shader_read_src_param(&pToken, &src_param, &src_rel_addr, shader_version); fe->shader_read_src_param(fe_data, &pToken, &src_param, &src_rel_addr);
TRACE(!i ? " " : ", "); TRACE(!i ? " " : ", ");
shader_dump_src_param(&src_param, shader_version); shader_dump_src_param(&src_param, shader_version);
} }
......
...@@ -108,6 +108,7 @@ struct wined3d_sm1_opcode_info ...@@ -108,6 +108,7 @@ struct wined3d_sm1_opcode_info
struct wined3d_sm1_data struct wined3d_sm1_data
{ {
DWORD shader_version;
const struct wined3d_sm1_opcode_info *opcode_table; const struct wined3d_sm1_opcode_info *opcode_table;
}; };
...@@ -440,24 +441,28 @@ static void shader_sm1_free(void *data) ...@@ -440,24 +441,28 @@ static void shader_sm1_free(void *data)
static void shader_sm1_read_header(void *data, const DWORD **ptr, DWORD *shader_version) static void shader_sm1_read_header(void *data, const DWORD **ptr, DWORD *shader_version)
{ {
struct wined3d_sm1_data *priv = data;
TRACE("version: 0x%08x\n", **ptr); TRACE("version: 0x%08x\n", **ptr);
*shader_version = *(*ptr)++; *shader_version = *(*ptr)++;
priv->shader_version = *shader_version;
} }
static void shader_sm1_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, static void shader_sm1_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
UINT *param_size, DWORD shader_version) UINT *param_size)
{ {
struct wined3d_sm1_data *priv = data; struct wined3d_sm1_data *priv = data;
const struct wined3d_sm1_opcode_info *opcode_info; const struct wined3d_sm1_opcode_info *opcode_info;
DWORD opcode_token; DWORD opcode_token;
opcode_token = *(*ptr)++; opcode_token = *(*ptr)++;
opcode_info = shader_get_opcode(priv->opcode_table, shader_version, opcode_token); opcode_info = shader_get_opcode(priv->opcode_table, priv->shader_version, opcode_token);
if (!opcode_info) if (!opcode_info)
{ {
FIXME("Unrecognized opcode: token=0x%08x\n", opcode_token); FIXME("Unrecognized opcode: token=0x%08x\n", opcode_token);
ins->handler_idx = WINED3DSIH_TABLE_SIZE; ins->handler_idx = WINED3DSIH_TABLE_SIZE;
*param_size = shader_skip_unrecognized(*ptr, shader_version); *param_size = shader_skip_unrecognized(*ptr, priv->shader_version);
return; return;
} }
...@@ -467,15 +472,16 @@ static void shader_sm1_read_opcode(void *data, const DWORD **ptr, struct wined3d ...@@ -467,15 +472,16 @@ static void shader_sm1_read_opcode(void *data, const DWORD **ptr, struct wined3d
ins->predicate = opcode_token & WINED3DSHADER_INSTRUCTION_PREDICATED; ins->predicate = opcode_token & WINED3DSHADER_INSTRUCTION_PREDICATED;
ins->dst_count = opcode_info->dst_count ? 1 : 0; ins->dst_count = opcode_info->dst_count ? 1 : 0;
ins->src_count = opcode_info->param_count - opcode_info->dst_count; ins->src_count = opcode_info->param_count - opcode_info->dst_count;
*param_size = shader_skip_opcode(opcode_info, opcode_token, shader_version); *param_size = shader_skip_opcode(opcode_info, opcode_token, priv->shader_version);
} }
static void shader_sm1_read_src_param(const DWORD **ptr, struct wined3d_shader_src_param *src_param, static void shader_sm1_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
struct wined3d_shader_src_param *src_rel_addr, DWORD shader_version) struct wined3d_shader_src_param *src_rel_addr)
{ {
struct wined3d_sm1_data *priv = data;
DWORD token, addr_token; DWORD token, addr_token;
*ptr += shader_get_param(*ptr, shader_version, &token, &addr_token); *ptr += shader_get_param(*ptr, priv->shader_version, &token, &addr_token);
if (token & WINED3DSHADER_ADDRMODE_RELATIVE) if (token & WINED3DSHADER_ADDRMODE_RELATIVE)
{ {
shader_parse_src_param(addr_token, NULL, src_rel_addr); shader_parse_src_param(addr_token, NULL, src_rel_addr);
...@@ -487,12 +493,13 @@ static void shader_sm1_read_src_param(const DWORD **ptr, struct wined3d_shader_s ...@@ -487,12 +493,13 @@ static void shader_sm1_read_src_param(const DWORD **ptr, struct wined3d_shader_s
} }
} }
static void shader_sm1_read_dst_param(const DWORD **ptr, struct wined3d_shader_dst_param *dst_param, static void shader_sm1_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
struct wined3d_shader_src_param *dst_rel_addr, DWORD shader_version) struct wined3d_shader_src_param *dst_rel_addr)
{ {
struct wined3d_sm1_data *priv = data;
DWORD token, addr_token; DWORD token, addr_token;
*ptr += shader_get_param(*ptr, shader_version, &token, &addr_token); *ptr += shader_get_param(*ptr, priv->shader_version, &token, &addr_token);
if (token & WINED3DSHADER_ADDRMODE_RELATIVE) if (token & WINED3DSHADER_ADDRMODE_RELATIVE)
{ {
shader_parse_src_param(addr_token, NULL, dst_rel_addr); shader_parse_src_param(addr_token, NULL, dst_rel_addr);
......
...@@ -66,6 +66,7 @@ enum wined3d_sm4_immconst_type ...@@ -66,6 +66,7 @@ enum wined3d_sm4_immconst_type
struct wined3d_sm4_data struct wined3d_sm4_data
{ {
DWORD shader_version;
const DWORD *end; const DWORD *end;
}; };
...@@ -134,10 +135,12 @@ static void shader_sm4_read_header(void *data, const DWORD **ptr, DWORD *shader_ ...@@ -134,10 +135,12 @@ static void shader_sm4_read_header(void *data, const DWORD **ptr, DWORD *shader_
*shader_version = *(*ptr)++; *shader_version = *(*ptr)++;
TRACE("token count: %u\n", **ptr); TRACE("token count: %u\n", **ptr);
priv->end += *(*ptr)++; priv->end += *(*ptr)++;
priv->shader_version = *shader_version;
} }
static void shader_sm4_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, static void shader_sm4_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
UINT *param_size, DWORD shader_version) UINT *param_size)
{ {
const struct wined3d_sm4_opcode_info *opcode_info; const struct wined3d_sm4_opcode_info *opcode_info;
DWORD token = *(*ptr)++; DWORD token = *(*ptr)++;
...@@ -161,8 +164,8 @@ static void shader_sm4_read_opcode(void *data, const DWORD **ptr, struct wined3d ...@@ -161,8 +164,8 @@ static void shader_sm4_read_opcode(void *data, const DWORD **ptr, struct wined3d
ins->src_count = opcode_info->src_count; ins->src_count = opcode_info->src_count;
} }
static void shader_sm4_read_src_param(const DWORD **ptr, struct wined3d_shader_src_param *src_param, static void shader_sm4_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
struct wined3d_shader_src_param *src_rel_addr, DWORD shader_version) struct wined3d_shader_src_param *src_rel_addr)
{ {
DWORD token = *(*ptr)++; DWORD token = *(*ptr)++;
enum wined3d_sm4_register_type register_type; enum wined3d_sm4_register_type register_type;
...@@ -213,8 +216,8 @@ static void shader_sm4_read_src_param(const DWORD **ptr, struct wined3d_shader_s ...@@ -213,8 +216,8 @@ static void shader_sm4_read_src_param(const DWORD **ptr, struct wined3d_shader_s
src_param->rel_addr = NULL; src_param->rel_addr = NULL;
} }
static void shader_sm4_read_dst_param(const DWORD **ptr, struct wined3d_shader_dst_param *dst_param, static void shader_sm4_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
struct wined3d_shader_src_param *dst_rel_addr, DWORD shader_version) struct wined3d_shader_src_param *dst_rel_addr)
{ {
DWORD token = *(*ptr)++; DWORD token = *(*ptr)++;
UINT register_idx = *(*ptr)++; UINT register_idx = *(*ptr)++;
......
...@@ -682,12 +682,11 @@ struct wined3d_shader_frontend ...@@ -682,12 +682,11 @@ struct wined3d_shader_frontend
void *(*shader_init)(const DWORD *ptr); void *(*shader_init)(const DWORD *ptr);
void (*shader_free)(void *data); void (*shader_free)(void *data);
void (*shader_read_header)(void *data, const DWORD **ptr, DWORD *shader_version); void (*shader_read_header)(void *data, const DWORD **ptr, DWORD *shader_version);
void (*shader_read_opcode)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, void (*shader_read_opcode)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, UINT *param_size);
UINT *param_size, DWORD shader_version); void (*shader_read_src_param)(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
void (*shader_read_src_param)(const DWORD **ptr, struct wined3d_shader_src_param *src_param, struct wined3d_shader_src_param *src_rel_addr);
struct wined3d_shader_src_param *src_rel_addr, DWORD shader_version); void (*shader_read_dst_param)(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
void (*shader_read_dst_param)(const DWORD **ptr, struct wined3d_shader_dst_param *dst_param, struct wined3d_shader_src_param *dst_rel_addr);
struct wined3d_shader_src_param *dst_rel_addr, DWORD shader_version);
void (*shader_read_semantic)(const DWORD **ptr, struct wined3d_shader_semantic *semantic); void (*shader_read_semantic)(const DWORD **ptr, struct wined3d_shader_semantic *semantic);
void (*shader_read_comment)(const DWORD **ptr, const char **comment); void (*shader_read_comment)(const DWORD **ptr, const char **comment);
BOOL (*shader_is_end)(void *data, const DWORD **ptr); BOOL (*shader_is_end)(void *data, const DWORD **ptr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment