From ec30e9a85e17b87f8d6c3f3df9421a22ba3bdbe0 Mon Sep 17 00:00:00 2001 From: Tobias Jakobi Date: Wed, 1 Jul 2009 18:36:46 +0200 Subject: [PATCH] wined3d: Add arb_ps_np2fixup_info structure and improve structure packing for arb_ps_compiled_shader. --- dlls/wined3d/arb_program_shader.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 66a76349974..b9e5e82cafe 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -115,6 +115,16 @@ struct control_frame BOOL had_else; }; +struct arb_ps_np2fixup_info +{ + struct ps_np2fixup_info super; + /* For ARB we need a offset value: + * With both GLSL and ARB mode the NP2 fixup information (the texture dimensions) are stored in a + * consecutive way (GLSL uses a uniform array). Since ARB doesn't know the notion of a "standalone" + * array we need an offset to the index inside the program local parameter array. */ + UINT offset; +}; + struct arb_ps_compile_args { struct ps_compile_args super; @@ -131,13 +141,14 @@ struct stb_const_desc struct arb_ps_compiled_shader { struct arb_ps_compile_args args; - GLuint prgId; + struct arb_ps_np2fixup_info np2fixup_info; struct stb_const_desc bumpenvmatconst[MAX_TEXTURES]; - unsigned char numbumpenvmatconsts; struct stb_const_desc luminanceconst[MAX_TEXTURES]; UINT int_consts[MAX_CONST_I]; - char num_int_consts; + GLuint prgId; UINT ycorrection; + unsigned char numbumpenvmatconsts; + char num_int_consts; }; struct arb_vs_compile_args @@ -194,6 +205,7 @@ struct shader_arb_ctx_priv const struct arb_ps_compile_args *cur_ps_args; const struct arb_ps_compiled_shader *compiled_fprog; const struct arb_vs_compiled_shader *compiled_vprog; + struct arb_ps_np2fixup_info *cur_np2fixup_info; struct list control_frames; struct list record; BOOL recording; @@ -3191,6 +3203,7 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShaderImpl *This, memset(&priv_ctx, 0, sizeof(priv_ctx)); priv_ctx.cur_ps_args = args; priv_ctx.compiled_fprog = compiled; + priv_ctx.cur_np2fixup_info = &compiled->np2fixup_info; init_ps_input(This, args, &priv_ctx); list_init(&priv_ctx.control_frames);