Commit dd094fe6 authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

wined3d: Explicitly pass the shader version to some more functions.

parent b9e10147
...@@ -131,17 +131,12 @@ static int shader_get_param(const DWORD *pToken, DWORD shader_version, DWORD *pa ...@@ -131,17 +131,12 @@ static int shader_get_param(const DWORD *pToken, DWORD shader_version, DWORD *pa
} }
/* Return the number of parameters to skip for an opcode */ /* Return the number of parameters to skip for an opcode */
static inline int shader_skip_opcode( static inline int shader_skip_opcode(const SHADER_OPCODE *curOpcode, DWORD opcode_token, DWORD shader_version)
IWineD3DBaseShaderImpl* This, {
const SHADER_OPCODE* curOpcode,
DWORD opcode_token) {
/* Shaders >= 2.0 may contain address tokens, but fortunately they /* Shaders >= 2.0 may contain address tokens, but fortunately they
* have a useful length mask - use it here. Shaders 1.0 contain no such tokens */ * have a useful length mask - use it here. Shaders 1.0 contain no such tokens */
return (WINED3DSHADER_VERSION_MAJOR(shader_version) >= 2)
return (WINED3DSHADER_VERSION_MAJOR(This->baseShader.hex_version) >= 2)? ? ((opcode_token & WINED3DSI_INSTLENGTH_MASK) >> WINED3DSI_INSTLENGTH_SHIFT) : curOpcode->num_params;
((opcode_token & WINED3DSI_INSTLENGTH_MASK) >> WINED3DSI_INSTLENGTH_SHIFT):
curOpcode->num_params;
} }
/* Read the parameters of an unrecognized opcode from the input stream /* Read the parameters of an unrecognized opcode from the input stream
...@@ -767,9 +762,8 @@ static void shader_dump_param(const DWORD param, const DWORD addr_token, int inp ...@@ -767,9 +762,8 @@ static void shader_dump_param(const DWORD param, const DWORD addr_token, int inp
} }
static void shader_color_correction(IWineD3DBaseShaderImpl *shader, static void shader_color_correction(IWineD3DBaseShaderImpl *shader,
IWineD3DDeviceImpl *device, const struct SHADER_OPCODE_ARG *arg) IWineD3DDeviceImpl *device, const struct SHADER_OPCODE_ARG *arg, DWORD shader_version)
{ {
DWORD hex_version = shader->baseShader.hex_version;
IWineD3DBaseTextureImpl *texture; IWineD3DBaseTextureImpl *texture;
struct color_fixup_desc fixup; struct color_fixup_desc fixup;
BOOL recorded = FALSE; BOOL recorded = FALSE;
...@@ -779,7 +773,7 @@ static void shader_color_correction(IWineD3DBaseShaderImpl *shader, ...@@ -779,7 +773,7 @@ static void shader_color_correction(IWineD3DBaseShaderImpl *shader,
switch(arg->opcode->opcode) switch(arg->opcode->opcode)
{ {
case WINED3DSIO_TEX: case WINED3DSIO_TEX:
if (hex_version < WINED3DPS_VERSION(2,0)) sampler_idx = arg->dst & WINED3DSP_REGNUM_MASK; if (WINED3DSHADER_VERSION_MAJOR(shader_version) < 2) sampler_idx = arg->dst & WINED3DSP_REGNUM_MASK;
else sampler_idx = arg->src[1] & WINED3DSP_REGNUM_MASK; else sampler_idx = arg->src[1] & WINED3DSP_REGNUM_MASK;
break; break;
...@@ -894,7 +888,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER* buffer, ...@@ -894,7 +888,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER* buffer,
WINED3DSIO_PHASE == curOpcode->opcode || WINED3DSIO_PHASE == curOpcode->opcode ||
WINED3DSIO_RET == curOpcode->opcode) { WINED3DSIO_RET == curOpcode->opcode) {
pToken += shader_skip_opcode(This, curOpcode, hw_arg.opcode_token); pToken += shader_skip_opcode(curOpcode, hw_arg.opcode_token, shader_version);
/* If a generator function is set for current shader target, use it */ /* If a generator function is set for current shader target, use it */
} else if (hw_fct != NULL) { } else if (hw_fct != NULL) {
...@@ -927,7 +921,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER* buffer, ...@@ -927,7 +921,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER* buffer,
hw_fct(&hw_arg); hw_fct(&hw_arg);
/* Add color correction if needed */ /* Add color correction if needed */
shader_color_correction(This, device, &hw_arg); shader_color_correction(This, device, &hw_arg, shader_version);
/* Process instruction modifiers for GLSL apps ( _sat, etc. ) */ /* Process instruction modifiers for GLSL apps ( _sat, etc. ) */
/* FIXME: This should be internal to the shader backend. /* FIXME: This should be internal to the shader backend.
...@@ -939,7 +933,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER* buffer, ...@@ -939,7 +933,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER* buffer,
} else { } else {
FIXME("Can't handle opcode %s in hwShader\n", curOpcode->name); FIXME("Can't handle opcode %s in hwShader\n", curOpcode->name);
pToken += shader_skip_opcode(This, curOpcode, hw_arg.opcode_token); pToken += shader_skip_opcode(curOpcode, hw_arg.opcode_token, shader_version);
} }
} }
/* TODO: What about result.depth? */ /* TODO: What about result.depth? */
......
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