static void renderchain_set_mvp(void *data, unsigned vp_width, unsigned vp_height, unsigned rotation) { #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) video_shader_ctx_mvp_t mvp; #endif d3d_video_t *d3d = (d3d_video_t*)data; LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)d3d->dev; #if defined(_XBOX360) && defined(HAVE_HLSL) hlsl_set_proj_matrix(XMMatrixRotationZ(rotation * (M_PI / 2.0))); mvp.data = d3d; mvp.matrix = NULL; video_shader_driver_set_mvp(mvp); #elif defined(HAVE_D3D8) D3DXMATRIX p_out, p_rotate, mat; D3DXMatrixOrthoOffCenterLH(&mat, 0, vp_width, vp_height, 0, 0.0f, 1.0f); D3DXMatrixIdentity(&p_out); D3DXMatrixRotationZ(&p_rotate, rotation * (M_PI / 2.0)); d3d_set_transform(d3dr, D3DTS_WORLD, &p_rotate); d3d_set_transform(d3dr, D3DTS_VIEW, &p_out); d3d_set_transform(d3dr, D3DTS_PROJECTION, &p_out); #endif }
static bool renderchain_create_first_pass(cg_renderchain_t *chain, const LinkInfo *info, unsigned fmt) { unsigned i; Pass pass; D3DXMATRIX ident; if (!chain) return false; D3DXMatrixIdentity(&ident); d3d_set_transform(chain->dev, D3DTS_WORLD, &ident); d3d_set_transform(chain->dev, D3DTS_VIEW, &ident); pass.info = *info; pass.last_width = 0; pass.last_height = 0; chain->prev.ptr = 0; for (i = 0; i < TEXTURES; i++) { chain->prev.last_width[i] = 0; chain->prev.last_height[i] = 0; chain->prev.vertex_buf[i] = d3d_vertex_buffer_new( chain->dev, 4 * sizeof(Vertex), 0, 0, D3DPOOL_DEFAULT, NULL); if (!chain->prev.vertex_buf[i]) return false; chain->prev.tex[i] = d3d_texture_new(chain->dev, NULL, info->tex_w, info->tex_h, 1, 0, (fmt == RETRO_PIXEL_FORMAT_RGB565) ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, 0, 0, 0, NULL, NULL); if (!chain->prev.tex[i]) return false; d3d_set_texture(chain->dev, 0, chain->prev.tex[i]); d3d_set_sampler_minfilter(chain->dev, 0, d3d_translate_filter(info->pass->filter)); d3d_set_sampler_magfilter(chain->dev, 0, d3d_translate_filter(info->pass->filter)); 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); } 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; chain->passes.push_back(pass); return true; }