bool renderchain_init(void *data, const video_info_t *video_info, LPDIRECT3DDEVICE dev_, CGcontext cgCtx_, const D3DVIEWPORT *final_viewport_, const LinkInfo *info, PixelFormat fmt) { renderchain_t *chain = (renderchain_t*)data; if (!chain) return false; chain->dev = dev_; #ifdef HAVE_CG chain->cgCtx = cgCtx_; #endif chain->video_info = video_info; chain->tracker = NULL; chain->final_viewport = (D3DVIEWPORT*)final_viewport_; chain->frame_count = 0; chain->pixel_size = fmt == RGB565 ? 2 : 4; if (!renderchain_create_first_pass(chain, info, fmt)) return false; renderchain_log_info(chain, info); if (!renderchain_compile_shaders(chain, chain->fStock, chain->vStock, "")) return false; return true; }
static bool cg_d3d9_renderchain_init(void *data, const void *_video_info, void *dev_, const void *final_viewport_, const void *info_data, bool rgb32) { const LinkInfo *info = (const LinkInfo*)info_data; d3d_video_t *d3d = (d3d_video_t*)data; cg_renderchain_t *chain = (cg_renderchain_t*)d3d->renderchain_data; const video_info_t *video_info = (const video_info_t*)_video_info; unsigned fmt = (rgb32) ? RETRO_PIXEL_FORMAT_XRGB8888 : RETRO_PIXEL_FORMAT_RGB565; if (!chain) return false; chain->dev = (LPDIRECT3DDEVICE)dev_; chain->video_info = video_info; chain->tracker = NULL; chain->final_viewport = (D3DVIEWPORT*)final_viewport_; chain->frame_count = 0; chain->pixel_size = (fmt == RETRO_PIXEL_FORMAT_RGB565) ? 2 : 4; if (!renderchain_create_first_pass(chain, info, fmt)) return false; renderchain_log_info(chain, info); if (!renderchain_compile_shaders(chain, &chain->fStock, &chain->vStock, "")) return false; return true; }
static bool cg_d3d9_renderchain_add_pass(void *data, const void *info_data) { Pass pass; const LinkInfo *info = (const LinkInfo*)info_data; cg_renderchain_t *chain = (cg_renderchain_t*)data; pass.info = *info; pass.last_width = 0; pass.last_height = 0; d3d9_cg_load_program(chain, &pass.fPrg, &pass.vPrg, info->pass->source.path, true); if (!cg_d3d9_renderchain_init_shader_fvf(chain, &pass)) return false; pass.vertex_buf = d3d_vertex_buffer_new(chain->dev, 4 * sizeof(Vertex), 0, 0, D3DPOOL_DEFAULT, NULL); if (!pass.vertex_buf) return false; pass.tex = d3d_texture_new( chain->dev, NULL, info->tex_w, info->tex_h, 1, D3DUSAGE_RENDERTARGET, chain->passes.back().info.pass->fbo.fp_fbo ? D3DFMT_A32B32G32R32F : D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, 0, 0, 0, NULL, NULL); if (!pass.tex) return false; d3d_set_texture(chain->dev, 0, pass.tex); d3d_set_sampler_address_u(chain->dev, 0, D3DTADDRESS_BORDER); d3d_set_sampler_address_v(chain->dev, 0, D3DTADDRESS_BORDER); d3d_set_texture(chain->dev, 0, NULL); chain->passes.push_back(pass); renderchain_log_info(chain, info); return true; }
bool renderchain_add_pass(void *data, const LinkInfo *info) { renderchain_t *chain = (renderchain_t*)data; LPDIRECT3DDEVICE d3dr = chain->dev; Pass pass; pass.info = *info; pass.last_width = 0; pass.last_height = 0; renderchain_compile_shaders(chain, pass.fPrg, pass.vPrg, info->pass->source.path); if (!renderchain_init_shader_fvf(chain, pass)) return false; if (FAILED(D3DDevice_CreateVertexBuffers(d3dr, 4 * sizeof(Vertex), d3dr->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0, 0, D3DPOOL_DEFAULT, &pass.vertex_buf, NULL))) return false; if (FAILED(d3dr->CreateTexture(info->tex_w, info->tex_h, 1, D3DUSAGE_RENDERTARGET, chain->passes.back().info.pass->fbo.fp_fbo ? D3DFMT_A32B32G32R32F : D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pass.tex, NULL))) return false; d3dr->SetTexture(0, pass.tex); D3DDevice_SetSamplerState_AddressU(d3dr, 0, D3DTADDRESS_BORDER); D3DDevice_SetSamplerState_AddressV(d3dr, 0, D3DTADDRESS_BORDER); d3dr->SetTexture(0, NULL); chain->passes.push_back(pass); renderchain_log_info(chain, info); return true; }
static bool cg_d3d9_renderchain_init(void *data, const void *_video_info, void *dev_, const void *final_viewport_, const void *info_data, bool rgb32) { const LinkInfo *info = (const LinkInfo*)info_data; d3d_video_t *d3d = (d3d_video_t*)data; cg_renderchain_t *chain = (cg_renderchain_t*)d3d->renderchain_data; const video_info_t *video_info = (const video_info_t*)_video_info; unsigned fmt = (rgb32) ? RETRO_PIXEL_FORMAT_XRGB8888 : RETRO_PIXEL_FORMAT_RGB565; if (!chain) return false; if (!cg_d3d9_renderchain_init_shader(d3d, chain)) { RARCH_ERR("Failed to initialize shader subsystem.\n"); return false; } chain->dev = (LPDIRECT3DDEVICE)dev_; chain->video_info = video_info; chain->state_tracker = NULL; chain->final_viewport = (D3DVIEWPORT*)final_viewport_; chain->frame_count = 0; chain->pixel_size = (fmt == RETRO_PIXEL_FORMAT_RGB565) ? 2 : 4; if (!renderchain_create_first_pass(chain, info, fmt)) return false; renderchain_log_info(chain, info); if (!d3d9_cg_load_program(chain, &chain->fStock, &chain->vStock, NULL, false)) return false; renderchain_set_shaders(chain->fStock, chain->vStock); return true; }