diff --git a/gfx/drivers_renderchain/d3d9_cg_renderchain.c b/gfx/drivers_renderchain/d3d9_cg_renderchain.c index 58aa0db903..ecd4a1b8ba 100644 --- a/gfx/drivers_renderchain/d3d9_cg_renderchain.c +++ b/gfx/drivers_renderchain/d3d9_cg_renderchain.c @@ -194,7 +194,7 @@ error: } static void d3d9_cg_renderchain_set_shader_params( - cg_renderchain_t *chain, + d3d9_renderchain_t *chain, struct shader_pass *pass, unsigned video_w, unsigned video_h, unsigned tex_w, unsigned tex_h, @@ -219,10 +219,10 @@ static void d3d9_cg_renderchain_set_shader_params( set_cg_param(pass->vprg, "IN.output_size", &output_size); set_cg_param(pass->fprg, "IN.output_size", &output_size); - frame_cnt = chain->chain.frame_count; + frame_cnt = chain->frame_count; if (pass->info.pass->frame_count_mod) - frame_cnt = chain->chain.frame_count + frame_cnt = chain->frame_count % pass->info.pass->frame_count_mod; set_cg_param(pass->fprg, "IN.frame_count", &frame_cnt); @@ -379,13 +379,13 @@ static bool d3d9_cg_renderchain_init_shader_fvf( } static void d3d9_cg_renderchain_bind_orig( - cg_renderchain_t *chain, + d3d9_renderchain_t *chain, struct shader_pass *pass) { CGparameter param; float video_size[2]; float texture_size[2]; - struct shader_pass *first_pass = (struct shader_pass*)&chain->chain.passes->data[0]; + struct shader_pass *first_pass = (struct shader_pass*)&chain->passes->data[0]; video_size[0] = first_pass->last_width; video_size[1] = first_pass->last_height; texture_size[0] = first_pass->info.tex_w; @@ -401,14 +401,14 @@ static void d3d9_cg_renderchain_bind_orig( if (param) { unsigned index = cgGetParameterResourceIndex(param); - d3d9_set_texture(chain->chain.dev, index, first_pass->tex); - d3d9_set_sampler_magfilter(chain->chain.dev, index, + d3d9_set_texture(chain->dev, index, first_pass->tex); + d3d9_set_sampler_magfilter(chain->dev, index, d3d_translate_filter(first_pass->info.pass->filter)); - d3d9_set_sampler_minfilter(chain->chain.dev, index, + d3d9_set_sampler_minfilter(chain->dev, index, d3d_translate_filter(first_pass->info.pass->filter)); - d3d9_set_sampler_address_u(chain->chain.dev, index, D3DTADDRESS_BORDER); - d3d9_set_sampler_address_v(chain->chain.dev, index, D3DTADDRESS_BORDER); - unsigned_vector_list_append(chain->chain.bound_tex, index); + d3d9_set_sampler_address_u(chain->dev, index, D3DTADDRESS_BORDER); + d3d9_set_sampler_address_v(chain->dev, index, D3DTADDRESS_BORDER); + unsigned_vector_list_append(chain->bound_tex, index); } param = cgGetNamedParameter(pass->vprg, "ORIG.tex_coord"); @@ -419,13 +419,13 @@ static void d3d9_cg_renderchain_bind_orig( pass->attrib_map; unsigned index = attrib_map->data[cgGetParameterResourceIndex(param)]; - d3d9_set_stream_source(chain->chain.dev, index, + d3d9_set_stream_source(chain->dev, index, vert_buf, 0, sizeof(struct D3D9Vertex)); - unsigned_vector_list_append(chain->chain.bound_vert, index); + unsigned_vector_list_append(chain->bound_vert, index); } } -static void d3d9_cg_renderchain_bind_prev(cg_renderchain_t *chain, +static void d3d9_cg_renderchain_bind_prev(d3d9_renderchain_t *chain, struct shader_pass *pass) { unsigned i; @@ -444,8 +444,8 @@ static void d3d9_cg_renderchain_bind_prev(cg_renderchain_t *chain, "PREV6", }; - texture_size[0] = chain->chain.passes->data[0].info.tex_w; - texture_size[1] = chain->chain.passes->data[0].info.tex_h; + texture_size[0] = chain->passes->data[0].info.tex_w; + texture_size[1] = chain->passes->data[0].info.tex_h; for (i = 0; i < TEXTURES - 1; i++) { @@ -457,10 +457,10 @@ static void d3d9_cg_renderchain_bind_prev(cg_renderchain_t *chain, snprintf(attr_tex_size, sizeof(attr_tex_size), "%s.texture_size", prev_names[i]); snprintf(attr_coord, sizeof(attr_coord), "%s.tex_coord", prev_names[i]); - video_size[0] = chain->chain.prev.last_width[ - (chain->chain.prev.ptr - (i + 1)) & TEXTURESMASK]; - video_size[1] = chain->chain.prev.last_height[ - (chain->chain.prev.ptr - (i + 1)) & TEXTURESMASK]; + video_size[0] = chain->prev.last_width[ + (chain->prev.ptr - (i + 1)) & TEXTURESMASK]; + video_size[1] = chain->prev.last_height[ + (chain->prev.ptr - (i + 1)) & TEXTURESMASK]; set_cg_param(pass->vprg, attr_input_size, &video_size); set_cg_param(pass->fprg, attr_input_size, &video_size); @@ -474,38 +474,38 @@ static void d3d9_cg_renderchain_bind_prev(cg_renderchain_t *chain, unsigned index = cgGetParameterResourceIndex(param); tex = (LPDIRECT3DTEXTURE9) - chain->chain.prev.tex[ - (chain->chain.prev.ptr - (i + 1)) & TEXTURESMASK]; + chain->prev.tex[ + (chain->prev.ptr - (i + 1)) & TEXTURESMASK]; - d3d9_set_texture(chain->chain.dev, index, tex); - unsigned_vector_list_append(chain->chain.bound_tex, index); + d3d9_set_texture(chain->dev, index, tex); + unsigned_vector_list_append(chain->bound_tex, index); - d3d9_set_sampler_magfilter(chain->chain.dev, index, - d3d_translate_filter(chain->chain.passes->data[0].info.pass->filter)); - d3d9_set_sampler_minfilter(chain->chain.dev, index, - d3d_translate_filter(chain->chain.passes->data[0].info.pass->filter)); - d3d9_set_sampler_address_u(chain->chain.dev, index, D3DTADDRESS_BORDER); - d3d9_set_sampler_address_v(chain->chain.dev, index, D3DTADDRESS_BORDER); + d3d9_set_sampler_magfilter(chain->dev, index, + d3d_translate_filter(chain->passes->data[0].info.pass->filter)); + d3d9_set_sampler_minfilter(chain->dev, index, + d3d_translate_filter(chain->passes->data[0].info.pass->filter)); + d3d9_set_sampler_address_u(chain->dev, index, D3DTADDRESS_BORDER); + d3d9_set_sampler_address_v(chain->dev, index, D3DTADDRESS_BORDER); } param = cgGetNamedParameter(pass->vprg, attr_coord); if (param) { LPDIRECT3DVERTEXBUFFER9 vert_buf = (LPDIRECT3DVERTEXBUFFER9) - chain->chain.prev.vertex_buf[ - (chain->chain.prev.ptr - (i + 1)) & TEXTURESMASK]; + chain->prev.vertex_buf[ + (chain->prev.ptr - (i + 1)) & TEXTURESMASK]; struct unsigned_vector_list *attrib_map = (struct unsigned_vector_list*)pass->attrib_map; unsigned index = attrib_map->data[cgGetParameterResourceIndex(param)]; - d3d9_set_stream_source(chain->chain.dev, index, + d3d9_set_stream_source(chain->dev, index, vert_buf, 0, sizeof(struct D3D9Vertex)); - unsigned_vector_list_append(chain->chain.bound_vert, index); + unsigned_vector_list_append(chain->bound_vert, index); } } } static void d3d9_cg_renderchain_bind_pass( - cg_renderchain_t *chain, + d3d9_renderchain_t *chain, struct shader_pass *pass, unsigned pass_index) { unsigned i; @@ -520,7 +520,7 @@ static void d3d9_cg_renderchain_bind_pass( char attr_input_size[64] = {0}; char attr_tex_size[64] = {0}; char attr_coord[64] = {0}; - struct shader_pass *curr_pass = (struct shader_pass*)&chain->chain.passes->data[i]; + struct shader_pass *curr_pass = (struct shader_pass*)&chain->passes->data[i]; snprintf(pass_base, sizeof(pass_base), "PASS%u", i); snprintf(attr_texture, sizeof(attr_texture), "%s.texture", pass_base); @@ -542,15 +542,15 @@ static void d3d9_cg_renderchain_bind_pass( if (param) { unsigned index = cgGetParameterResourceIndex(param); - unsigned_vector_list_append(chain->chain.bound_tex, index); + unsigned_vector_list_append(chain->bound_tex, index); - d3d9_set_texture(chain->chain.dev, index, curr_pass->tex); - d3d9_set_sampler_magfilter(chain->chain.dev, index, + d3d9_set_texture(chain->dev, index, curr_pass->tex); + d3d9_set_sampler_magfilter(chain->dev, index, d3d_translate_filter(curr_pass->info.pass->filter)); - d3d9_set_sampler_minfilter(chain->chain.dev, index, + d3d9_set_sampler_minfilter(chain->dev, index, d3d_translate_filter(curr_pass->info.pass->filter)); - d3d9_set_sampler_address_u(chain->chain.dev, index, D3DTADDRESS_BORDER); - d3d9_set_sampler_address_v(chain->chain.dev, index, D3DTADDRESS_BORDER); + d3d9_set_sampler_address_u(chain->dev, index, D3DTADDRESS_BORDER); + d3d9_set_sampler_address_v(chain->dev, index, D3DTADDRESS_BORDER); } param = cgGetNamedParameter(pass->vprg, attr_coord); @@ -560,9 +560,9 @@ static void d3d9_cg_renderchain_bind_pass( (struct unsigned_vector_list*)pass->attrib_map; unsigned index = attrib_map->data[cgGetParameterResourceIndex(param)]; - d3d9_set_stream_source(chain->chain.dev, index, curr_pass->vertex_buf, + d3d9_set_stream_source(chain->dev, index, curr_pass->vertex_buf, 0, sizeof(struct D3D9Vertex)); - unsigned_vector_list_append(chain->chain.bound_vert, index); + unsigned_vector_list_append(chain->bound_vert, index); } } } @@ -965,25 +965,6 @@ static bool d3d9_cg_renderchain_add_lut(void *data, return d3d9_renderchain_add_lut(chain, id, path, smooth); } -static void d3d9_cg_renderchain_start_render(cg_renderchain_t *chain) -{ - chain->chain.passes->data[0].tex = chain->chain.prev.tex[ - chain->chain.prev.ptr]; - chain->chain.passes->data[0].vertex_buf = chain->chain.prev.vertex_buf[ - chain->chain.prev.ptr]; - chain->chain.passes->data[0].last_width = chain->chain.prev.last_width[ - chain->chain.prev.ptr]; - chain->chain.passes->data[0].last_height = chain->chain.prev.last_height[ - chain->chain.prev.ptr]; -} - -static void d3d9_cg_renderchain_end_render(cg_renderchain_t *chain) -{ - chain->chain.prev.last_width[chain->chain.prev.ptr] = chain->chain.passes->data[0].last_width; - chain->chain.prev.last_height[chain->chain.prev.ptr] = chain->chain.passes->data[0].last_height; - chain->chain.prev.ptr = (chain->chain.prev.ptr + 1) & TEXTURESMASK; -} - static void d3d9_cg_renderchain_calc_and_set_shader_mvp( CGprogram vprg, unsigned vp_width, unsigned vp_height, @@ -1005,7 +986,7 @@ static void d3d9_cg_renderchain_calc_and_set_shader_mvp( static void cg_d3d9_renderchain_set_vertices( const video_frame_info_t *video_info, - cg_renderchain_t *chain, + d3d9_renderchain_t *chain, struct shader_pass *pass, unsigned width, unsigned height, unsigned out_width, unsigned out_height, @@ -1098,7 +1079,7 @@ static void cg_d3d9_renderchain_set_vertices( } static void cg_d3d9_renderchain_set_params( - cg_renderchain_t *chain, + d3d9_renderchain_t *chain, struct shader_pass *pass, state_tracker_t *tracker, unsigned pass_index) @@ -1111,7 +1092,7 @@ static void cg_d3d9_renderchain_set_params( if (pass_index == 1) cnt = state_tracker_get_uniform(tracker, tracker_info, - GFX_MAX_VARIABLES, chain->chain.frame_count); + GFX_MAX_VARIABLES, chain->frame_count); for (i = 0; i < cnt; i++) { @@ -1125,7 +1106,7 @@ static void cg_d3d9_renderchain_set_params( } static void cg_d3d9_renderchain_render_pass( - cg_renderchain_t *chain, + d3d9_renderchain_t *chain, struct shader_pass *pass, state_tracker_t *tracker, unsigned pass_index) @@ -1135,15 +1116,15 @@ static void cg_d3d9_renderchain_render_pass( cgD3D9BindProgram(pass->fprg); cgD3D9BindProgram(pass->vprg); - d3d9_set_texture(chain->chain.dev, 0, pass->tex); - d3d9_set_sampler_minfilter(chain->chain.dev, 0, + d3d9_set_texture(chain->dev, 0, pass->tex); + d3d9_set_sampler_minfilter(chain->dev, 0, d3d_translate_filter(pass->info.pass->filter)); - d3d9_set_sampler_magfilter(chain->chain.dev, 0, + d3d9_set_sampler_magfilter(chain->dev, 0, d3d_translate_filter(pass->info.pass->filter)); - d3d9_set_vertex_declaration(chain->chain.dev, pass->vertex_decl); + d3d9_set_vertex_declaration(chain->dev, pass->vertex_decl); for (i = 0; i < 4; i++) - d3d9_set_stream_source(chain->chain.dev, i, + d3d9_set_stream_source(chain->dev, i, pass->vertex_buf, 0, sizeof(struct D3D9Vertex)); @@ -1154,11 +1135,11 @@ static void cg_d3d9_renderchain_render_pass( d3d9_cg_renderchain_bind_prev(chain, pass); /* Set lookup textures */ - for (i = 0; i < chain->chain.luts->count; i++) + for (i = 0; i < chain->luts->count; i++) { CGparameter vparam; CGparameter fparam = cgGetNamedParameter( - pass->fprg, chain->chain.luts->data[i].id); + pass->fprg, chain->luts->data[i].id); int bound_index = -1; if (fparam) @@ -1166,17 +1147,17 @@ static void cg_d3d9_renderchain_render_pass( unsigned index = cgGetParameterResourceIndex(fparam); bound_index = index; - d3d9_cg_renderchain_add_lut_internal(&chain->chain, index, i); + d3d9_cg_renderchain_add_lut_internal(chain, index, i); } vparam = cgGetNamedParameter(pass->vprg, - chain->chain.luts->data[i].id); + chain->luts->data[i].id); if (vparam) { unsigned index = cgGetParameterResourceIndex(vparam); if (index != (unsigned)bound_index) - d3d9_cg_renderchain_add_lut_internal(&chain->chain, index, i); + d3d9_cg_renderchain_add_lut_internal(chain, index, i); } } @@ -1187,14 +1168,14 @@ static void cg_d3d9_renderchain_render_pass( if (tracker) cg_d3d9_renderchain_set_params(chain, pass, tracker, pass_index); - d3d9_draw_primitive(chain->chain.dev, D3DPT_TRIANGLESTRIP, 0, 2); + d3d9_draw_primitive(chain->dev, D3DPT_TRIANGLESTRIP, 0, 2); /* So we don't render with linear filter into render targets, * which apparently looked odd (too blurry). */ - d3d9_set_sampler_minfilter(chain->chain.dev, 0, D3DTEXF_POINT); - d3d9_set_sampler_magfilter(chain->chain.dev, 0, D3DTEXF_POINT); + d3d9_set_sampler_minfilter(chain->dev, 0, D3DTEXF_POINT); + d3d9_set_sampler_magfilter(chain->dev, 0, D3DTEXF_POINT); - d3d9_renderchain_unbind_all(&chain->chain); + d3d9_renderchain_unbind_all(chain); } static bool d3d9_cg_renderchain_render( @@ -1212,7 +1193,7 @@ static bool d3d9_cg_renderchain_render( cg_renderchain_t *chain = d3d ? (cg_renderchain_t*)d3d->renderchain_data : NULL; - d3d9_cg_renderchain_start_render(chain); + d3d9_renderchain_start_render(&chain->chain); current_width = width; current_height = height; @@ -1268,12 +1249,13 @@ static bool d3d9_cg_renderchain_render( d3d9_set_viewports(chain->chain.dev, &viewport); cg_d3d9_renderchain_set_vertices(video_info, - chain, from_pass, + &chain->chain, from_pass, current_width, current_height, out_width, out_height, out_width, out_height, 0); - cg_d3d9_renderchain_render_pass(chain, from_pass, tracker, + cg_d3d9_renderchain_render_pass(&chain->chain, + from_pass, tracker, i + 1); current_width = out_width; @@ -1294,14 +1276,15 @@ static bool d3d9_cg_renderchain_render( d3d9_set_viewports(chain->chain.dev, chain->chain.final_viewport); cg_d3d9_renderchain_set_vertices(video_info, - chain, last_pass, + &chain->chain, last_pass, current_width, current_height, out_width, out_height, chain->chain.final_viewport->Width, chain->chain.final_viewport->Height, rotation); - cg_d3d9_renderchain_render_pass(chain, last_pass, + cg_d3d9_renderchain_render_pass(&chain->chain, + last_pass, tracker, chain->chain.passes->count); @@ -1309,7 +1292,7 @@ static bool d3d9_cg_renderchain_render( d3d9_surface_free(back_buffer); - d3d9_cg_renderchain_end_render(chain); + d3d9_renderchain_end_render(&chain->chain); cgD3D9BindProgram(chain->fStock); cgD3D9BindProgram(chain->vStock); d3d9_cg_renderchain_calc_and_set_shader_mvp( diff --git a/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c b/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c index 436baf07f8..fab9f84d4f 100644 --- a/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c +++ b/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c @@ -1029,21 +1029,6 @@ static void hlsl_d3d9_renderchain_render_pass( d3d9_renderchain_unbind_all(&chain->chain); } -static void d3d9_hlsl_renderchain_start_render(hlsl_d3d9_renderchain_t *chain) -{ - chain->chain.passes->data[0].tex = chain->chain.prev.tex[chain->chain.prev.ptr]; - chain->chain.passes->data[0].vertex_buf = chain->chain.prev.vertex_buf[chain->chain.prev.ptr]; - chain->chain.passes->data[0].last_width = chain->chain.prev.last_width[chain->chain.prev.ptr]; - chain->chain.passes->data[0].last_height = chain->chain.prev.last_height[chain->chain.prev.ptr]; -} - -static void d3d9_hlsl_renderchain_end_render(hlsl_d3d9_renderchain_t *chain) -{ - chain->chain.prev.last_width[chain->chain.prev.ptr] = chain->chain.passes->data[0].last_width; - chain->chain.prev.last_height[chain->chain.prev.ptr] = chain->chain.passes->data[0].last_height; - chain->chain.prev.ptr = (chain->chain.prev.ptr + 1) & TEXTURESMASK; -} - static bool hlsl_d3d9_renderchain_render( d3d9_video_t *d3d, const video_frame_info_t *video_info, @@ -1060,7 +1045,7 @@ static bool hlsl_d3d9_renderchain_render( hlsl_d3d9_renderchain_t *chain = (hlsl_d3d9_renderchain_t*) d3d->renderchain_data; - d3d9_hlsl_renderchain_start_render(chain); + d3d9_renderchain_start_render(&chain->chain); current_width = width; current_height = height; @@ -1162,7 +1147,7 @@ static bool hlsl_d3d9_renderchain_render( d3d9_surface_free(back_buffer); - d3d9_hlsl_renderchain_end_render(chain); + d3d9_renderchain_end_render(&chain->chain); #if 0 cgD3D9BindProgram(chain->fStock); cgD3D9BindProgram(chain->vStock); diff --git a/gfx/drivers_renderchain/d3d9_renderchain.h b/gfx/drivers_renderchain/d3d9_renderchain.h index 39bc4125de..aa9984f334 100644 --- a/gfx/drivers_renderchain/d3d9_renderchain.h +++ b/gfx/drivers_renderchain/d3d9_renderchain.h @@ -154,6 +154,25 @@ static INLINE void d3d9_cg_renderchain_add_lut_internal( unsigned_vector_list_append(chain->bound_tex, index); } +static INLINE void d3d9_renderchain_start_render(d3d9_renderchain_t *chain) +{ + chain->passes->data[0].tex = chain->prev.tex[ + chain->prev.ptr]; + chain->passes->data[0].vertex_buf = chain->prev.vertex_buf[ + chain->prev.ptr]; + chain->passes->data[0].last_width = chain->prev.last_width[ + chain->prev.ptr]; + chain->passes->data[0].last_height = chain->prev.last_height[ + chain->prev.ptr]; +} + +static INLINE void d3d9_renderchain_end_render(d3d9_renderchain_t *chain) +{ + chain->prev.last_width[chain->prev.ptr] = chain->passes->data[0].last_width; + chain->prev.last_height[chain->prev.ptr] = chain->passes->data[0].last_height; + chain->prev.ptr = (chain->prev.ptr + 1) & TEXTURESMASK; +} + static INLINE void d3d9_renderchain_unbind_all(d3d9_renderchain_t *chain) { unsigned i;