(D3D) Cleanups pt. 8

This commit is contained in:
twinaphex 2015-04-05 01:48:44 +02:00
parent 249a0b898d
commit 0a5a72b8b1
2 changed files with 44 additions and 25 deletions

View File

@ -288,6 +288,7 @@ void renderchain_end_render(void *data)
bool renderchain_render(void *chain_data, const void *data,
unsigned width, unsigned height, unsigned pitch, unsigned rotation)
{
Pass *last_pass;
LPDIRECT3DSURFACE back_buffer, target;
unsigned i, current_width, current_height, out_width = 0, out_height = 0;
renderchain_t *chain = (renderchain_t*)chain_data;
@ -351,7 +352,8 @@ bool renderchain_render(void *chain_data, const void *data,
/* Final pass */
d3dr->SetRenderTarget(0, back_buffer);
Pass *last_pass = (Pass*)&chain->passes.back();
last_pass = (Pass*)&chain->passes.back();
renderchain_convert_geometry(chain, &last_pass->info,
&out_width, &out_height,
@ -458,16 +460,14 @@ void renderchain_set_vertices(
if (pass->last_width != width || pass->last_height != height)
{
Vertex vert[4];
float _u, _v;
unsigned i;
void *verts = NULL;
float _u = float(width) / info->tex_w;
float _v = float(height) / info->tex_h;
pass->last_width = width;
pass->last_height = height;
_u = float(width) / info->tex_w;
_v = float(height) / info->tex_h;
for (i = 0; i < 4; i++)
{
vert[i].z = 0.5f;
@ -523,7 +523,7 @@ void renderchain_set_vertices(
void renderchain_set_viewport(void *data, D3DVIEWPORT *vp)
{
LPDIRECT3DDEVICE d3dr;
renderchain_t *chain = (renderchain_t*)data;
renderchain_t *chain = (renderchain_t*)data;
if (!chain)
return;

View File

@ -84,8 +84,8 @@ static INLINE CGparameter find_param_from_semantic(
static INLINE CGparameter find_param_from_semantic(CGprogram prog,
const std::string &sem)
{
return find_param_from_semantic(cgGetFirstParameter(
prog, CG_PROGRAM), sem);
CGparameter param = cgGetFirstParameter(prog, CG_PROGRAM);
return find_param_from_semantic(param, sem);
}
bool renderchain_compile_shaders(void *data, CGprogram *fPrg,
@ -213,8 +213,10 @@ void renderchain_set_shader_params(void *data, void *pass_data,
set_cg_param(pass->fPrg, "IN.output_size", output_size);
frame_cnt = chain->frame_count;
if (pass->info.pass->frame_count_mod)
frame_cnt = chain->frame_count % pass->info.pass->frame_count_mod;
set_cg_param(pass->fPrg, "IN.frame_count", frame_cnt);
set_cg_param(pass->vPrg, "IN.frame_count", frame_cnt);
}
@ -254,6 +256,7 @@ void renderchain_bind_tracker(void *data, void *pass_data, unsigned pass_index)
bool renderchain_init_shader_fvf(void *data, void *pass_data)
{
CGparameter param;
unsigned index, i, count;
unsigned tex_index = 0;
bool texcoord0_taken = false;
@ -291,9 +294,10 @@ bool renderchain_init_shader_fvf(void *data, void *pass_data)
std::vector<bool> indices(count);
CGparameter param = find_param_from_semantic(pass->vPrg, "POSITION");
param = find_param_from_semantic(pass->vPrg, "POSITION");
if (!param)
param = find_param_from_semantic(pass->vPrg, "POSITION0");
if (param)
{
stream_taken[0] = true;
@ -306,6 +310,7 @@ bool renderchain_init_shader_fvf(void *data, void *pass_data)
param = find_param_from_semantic(pass->vPrg, "TEXCOORD");
if (!param)
param = find_param_from_semantic(pass->vPrg, "TEXCOORD0");
if (param)
{
stream_taken[1] = true;
@ -330,6 +335,7 @@ bool renderchain_init_shader_fvf(void *data, void *pass_data)
param = find_param_from_semantic(pass->vPrg, "COLOR");
if (!param)
param = find_param_from_semantic(pass->vPrg, "COLOR0");
if (param)
{
stream_taken[3] = true;
@ -356,13 +362,18 @@ bool renderchain_init_shader_fvf(void *data, void *pass_data)
pass->attrib_map.push_back(0);
else
{
D3DVERTEXELEMENT elem;
pass->attrib_map.push_back(index);
D3DVERTEXELEMENT elem = DECL_FVF_TEXCOORD(index, 3, tex_index);
decl[i] = elem;
elem = DECL_FVF_TEXCOORD(index, 3, tex_index);
decl[i] = elem;
/* Find next vacant stream. */
index++;
while (index < 4 && stream_taken[index]) index++;
while (index < 4 && stream_taken[index])
index++;
/* Find next vacant texcoord declaration. */
tex_index++;
@ -371,7 +382,8 @@ bool renderchain_init_shader_fvf(void *data, void *pass_data)
}
}
if (FAILED(chain->dev->CreateVertexDeclaration(decl, &pass->vertex_decl)))
if (FAILED(chain->dev->CreateVertexDeclaration(
decl, &pass->vertex_decl)))
return false;
return true;
@ -380,6 +392,7 @@ bool renderchain_init_shader_fvf(void *data, void *pass_data)
void renderchain_bind_orig(void *data, void *pass_data)
{
unsigned index;
CGparameter param;
D3DXVECTOR2 video_size, texture_size;
Pass *pass = (Pass*)pass_data;
renderchain_t *chain = (renderchain_t*)data;
@ -393,7 +406,7 @@ void renderchain_bind_orig(void *data, void *pass_data)
set_cg_param(pass->vPrg, "ORIG.texture_size", texture_size);
set_cg_param(pass->fPrg, "ORIG.texture_size", texture_size);
CGparameter param = cgGetNamedParameter(pass->fPrg, "ORIG.texture");
param = cgGetNamedParameter(pass->fPrg, "ORIG.texture");
if (param)
{
index = cgGetParameterResourceIndex(param);
@ -438,12 +451,14 @@ void renderchain_bind_prev(void *data, void *pass_data)
for (i = 0; i < TEXTURES - 1; i++)
{
CGparameter param;
D3DXVECTOR2 video_size;
snprintf(attr_texture, sizeof(attr_texture), "%s.texture", prev_names[i]);
snprintf(attr_input_size, sizeof(attr_input_size), "%s.video_size", prev_names[i]);
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]);
D3DXVECTOR2 video_size;
video_size.x = chain->prev.last_width[(chain->prev.ptr - (i + 1)) & TEXTURESMASK];
video_size.y = chain->prev.last_height[(chain->prev.ptr - (i + 1)) & TEXTURESMASK];
@ -452,12 +467,14 @@ void renderchain_bind_prev(void *data, void *pass_data)
set_cg_param(pass->vPrg, attr_tex_size, texture_size);
set_cg_param(pass->fPrg, attr_tex_size, texture_size);
CGparameter param = cgGetNamedParameter(pass->fPrg, attr_texture);
param = cgGetNamedParameter(pass->fPrg, attr_texture);
if (param)
{
LPDIRECT3DTEXTURE tex;
index = cgGetParameterResourceIndex(param);
LPDIRECT3DTEXTURE tex = (LPDIRECT3DTEXTURE)
tex = (LPDIRECT3DTEXTURE)
chain->prev.tex[(chain->prev.ptr - (i + 1)) & TEXTURESMASK];
chain->dev->SetTexture(index, tex);
@ -474,8 +491,10 @@ void renderchain_bind_prev(void *data, void *pass_data)
param = cgGetNamedParameter(pass->vPrg, attr_coord);
if (param)
{
LPDIRECT3DVERTEXBUFFER vert_buf;
index = pass->attrib_map[cgGetParameterResourceIndex(param)];
LPDIRECT3DVERTEXBUFFER vert_buf = (LPDIRECT3DVERTEXBUFFER)
vert_buf = (LPDIRECT3DVERTEXBUFFER)
chain->prev.vertex_buf[(chain->prev.ptr - (i + 1)) & TEXTURESMASK];
chain->bound_vert.push_back(index);
@ -492,6 +511,7 @@ void renderchain_bind_luts(void *data, void *pass_data)
for (i = 0; i < chain->luts.size(); i++)
{
CGparameter vparam;
CGparameter fparam = cgGetNamedParameter(
pass->fPrg, chain->luts[i].id.c_str());
int bound_index = -1;
@ -512,8 +532,7 @@ void renderchain_bind_luts(void *data, void *pass_data)
chain->bound_tex.push_back(index);
}
CGparameter vparam = cgGetNamedParameter(
pass->vPrg, chain->luts[i].id.c_str());
vparam = cgGetNamedParameter(pass->vPrg, chain->luts[i].id.c_str());
if (vparam)
{
@ -541,15 +560,16 @@ void renderchain_bind_pass(void *data, void *pass_data, unsigned pass_index)
Pass *pass = (Pass*)pass_data;
renderchain_t *chain = (renderchain_t*)data;
/* We only bother binding passes which are two indices behind. */
if (pass_index < 3)
{
/* We only bother binding passes which are two indices behind. */
return;
}
for (i = 1; i < pass_index - 1; i++)
{
char pass_base[64];
CGparameter param;
D3DXVECTOR2 video_size, texture_size;
snprintf(pass_base, sizeof(pass_base), "PASS%u.", i);
std::string attr_texture = pass_base;
@ -561,7 +581,6 @@ void renderchain_bind_pass(void *data, void *pass_data, unsigned pass_index)
std::string attr_tex_coord = pass_base;
attr_tex_coord += "tex_coord";
D3DXVECTOR2 video_size, texture_size;
video_size.x = chain->passes[i].last_width;
video_size.y = chain->passes[i].last_height;
texture_size.x = chain->passes[i].info.tex_w;
@ -572,7 +591,7 @@ void renderchain_bind_pass(void *data, void *pass_data, unsigned pass_index)
set_cg_param(pass->vPrg, attr_texture_size.c_str(), texture_size);
set_cg_param(pass->fPrg, attr_texture_size.c_str(), texture_size);
CGparameter param = cgGetNamedParameter(pass->fPrg, attr_texture.c_str());
param = cgGetNamedParameter(pass->fPrg, attr_texture.c_str());
if (param)
{
index = cgGetParameterResourceIndex(param);