mirror of
https://github.com/libretro/RetroArch
synced 2025-03-02 19:13:34 +00:00
Fixed up the d3d9 driver (#13038)
* Fixed d3d9 mvp matrix issue * Fixed up the d3d9 driver to display the game now
This commit is contained in:
parent
714cfc581d
commit
e08cc6e260
@ -1556,6 +1556,7 @@ static bool d3d9_frame(void *data, const void *frame,
|
||||
d3d9_set_viewports(d3d->dev, &screen_vp);
|
||||
d3d9_clear(d3d->dev, 0, 0, D3DCLEAR_TARGET, 0, 1, 0);
|
||||
|
||||
d3d9_set_mvp(d3d->dev, &d3d->mvp_transposed);
|
||||
if (!d3d->renderchain_driver->render(
|
||||
d3d, frame, frame_width, frame_height,
|
||||
pitch, d3d->dev_rotation))
|
||||
@ -1604,7 +1605,7 @@ static bool d3d9_frame(void *data, const void *frame,
|
||||
#ifdef HAVE_OVERLAY
|
||||
if (d3d->overlays_enabled)
|
||||
{
|
||||
d3d9_set_mvp(d3d->dev, &d3d->mvp);
|
||||
d3d9_set_mvp(d3d->dev, &d3d->mvp_transposed);
|
||||
for (i = 0; i < d3d->overlays_size; i++)
|
||||
d3d9_overlay_render(d3d, width, height, &d3d->overlays[i], true);
|
||||
}
|
||||
|
@ -3,18 +3,18 @@
|
||||
static const char *stock_hlsl_program = CG(
|
||||
void main_vertex
|
||||
(
|
||||
float4 position : POSITION,
|
||||
float3 position : POSITION,
|
||||
float4 color : COLOR,
|
||||
float2 texCoord : TEXCOORD0,
|
||||
|
||||
uniform float4x4 modelViewProj,
|
||||
|
||||
float4 texCoord : TEXCOORD0,
|
||||
out float4 oPosition : POSITION,
|
||||
out float4 oColor : COLOR,
|
||||
out float2 otexCoord : TEXCOORD
|
||||
)
|
||||
{
|
||||
oPosition = mul(modelViewProj, position);
|
||||
oPosition = mul(modelViewProj, float4(position, 1.0f));
|
||||
oColor = color;
|
||||
otexCoord = texCoord;
|
||||
}
|
||||
|
@ -228,10 +228,14 @@ static bool hlsl_d3d9_renderchain_init_shader_fvf(
|
||||
d3d9_renderchain_t *chain,
|
||||
struct shader_pass *pass)
|
||||
{
|
||||
static const D3DVERTEXELEMENT9 decl[] =
|
||||
static const D3DVERTEXELEMENT9 decl[4] =
|
||||
{
|
||||
{ 0, 0 * sizeof(float), D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
|
||||
D3D9_DECL_FVF_TEXCOORD(0, 2, 0),
|
||||
{0, offsetof(Vertex, x), D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT,
|
||||
D3DDECLUSAGE_POSITION, 0},
|
||||
{0, offsetof(Vertex, color), D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT,
|
||||
D3DDECLUSAGE_COLOR, 0},
|
||||
{0, offsetof(Vertex, u), D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT,
|
||||
D3DDECLUSAGE_TEXCOORD, 0},
|
||||
D3DDECL_END()
|
||||
};
|
||||
|
||||
@ -265,7 +269,7 @@ static bool hlsl_d3d9_renderchain_create_first_pass(
|
||||
chain->prev.last_height[i] = 0;
|
||||
chain->prev.vertex_buf[i] = (LPDIRECT3DVERTEXBUFFER9)
|
||||
d3d9_vertex_buffer_new(
|
||||
chain->dev, 4 * sizeof(struct D3D9Vertex),
|
||||
chain->dev, 4 * sizeof(struct Vertex),
|
||||
D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, NULL);
|
||||
|
||||
if (!chain->prev.vertex_buf[i])
|
||||
@ -471,21 +475,25 @@ static void hlsl_d3d9_renderchain_render_pass(
|
||||
struct shader_pass *pass,
|
||||
unsigned pass_index)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
d3d9_hlsl_bind_program(pass, chain->chain.dev);
|
||||
/* Currently we override the passes shader program with the stock shader as at least the last pass is not setup correctly */
|
||||
/*d3d9_hlsl_bind_program(pass, chain->chain.dev);*/
|
||||
d3d9_hlsl_bind_program(&chain->stock_shader, chain->chain.dev);
|
||||
|
||||
d3d9_set_texture(chain->chain.dev, 0, pass->tex);
|
||||
|
||||
/* d3d8 sets the sampler address modes - I've left them out for the time being but maybe this is a bug in d3d9 */
|
||||
/*d3d9_set_sampler_address_u(chain->chain.dev, 0, D3DTADDRESS_BORDER);*/
|
||||
/*d3d9_set_sampler_address_v(chain->chain.dev, 0, D3DTADDRESS_BORDER);*/
|
||||
d3d9_set_sampler_minfilter(chain->chain.dev, 0,
|
||||
d3d_translate_filter(pass->info.pass->filter));
|
||||
d3d9_set_sampler_magfilter(chain->chain.dev, 0,
|
||||
d3d_translate_filter(pass->info.pass->filter));
|
||||
|
||||
d3d9_set_vertex_declaration(chain->chain.dev, pass->vertex_decl);
|
||||
for (i = 0; i < 4; i++)
|
||||
d3d9_set_stream_source(chain->chain.dev, i,
|
||||
pass->vertex_buf, 0,
|
||||
sizeof(struct D3D9Vertex));
|
||||
|
||||
d3d9_set_stream_source(chain->chain.dev, 0,
|
||||
pass->vertex_buf, 0,
|
||||
sizeof(struct Vertex));
|
||||
|
||||
#if 0
|
||||
/* Set orig texture. */
|
||||
|
@ -111,7 +111,7 @@ static INLINE void d3d9_renderchain_set_vertices_on_change(
|
||||
unsigned rotation
|
||||
)
|
||||
{
|
||||
struct D3D9Vertex vert[4];
|
||||
struct Vertex vert[4];
|
||||
unsigned i;
|
||||
void *verts = NULL;
|
||||
const struct
|
||||
@ -122,64 +122,49 @@ static INLINE void d3d9_renderchain_set_vertices_on_change(
|
||||
pass->last_width = width;
|
||||
pass->last_height = height;
|
||||
|
||||
vert[0].x = 0.0f;
|
||||
vert[0].y = out_height;
|
||||
vert[0].z = 0.5f;
|
||||
vert[0].u = 0.0f;
|
||||
vert[0].v = 0.0f;
|
||||
vert[0].lut_u = 0.0f;
|
||||
vert[0].lut_v = 0.0f;
|
||||
vert[0].r = 1.0f;
|
||||
vert[0].g = 1.0f;
|
||||
vert[0].b = 1.0f;
|
||||
vert[0].a = 1.0f;
|
||||
/* Copied from d3d8 driver */
|
||||
vert[0].x = 0.0f;
|
||||
vert[0].y = 1.0f;
|
||||
vert[0].z = 1.0f;
|
||||
|
||||
vert[1].x = out_width;
|
||||
vert[1].y = out_height;
|
||||
vert[1].z = 0.5f;
|
||||
vert[1].u = _u;
|
||||
vert[1].v = 0.0f;
|
||||
vert[1].lut_u = 1.0f;
|
||||
vert[1].lut_v = 0.0f;
|
||||
vert[1].r = 1.0f;
|
||||
vert[1].g = 1.0f;
|
||||
vert[1].b = 1.0f;
|
||||
vert[1].a = 1.0f;
|
||||
vert[1].x = 1.0f;
|
||||
vert[1].y = 1.0f;
|
||||
vert[1].z = 1.0f;
|
||||
|
||||
vert[2].x = 0.0f;
|
||||
vert[2].y = 0.0f;
|
||||
vert[2].z = 0.5f;
|
||||
vert[2].u = 0.0f;
|
||||
vert[2].v = _v;
|
||||
vert[2].lut_u = 0.0f;
|
||||
vert[2].lut_v = 1.0f;
|
||||
vert[2].r = 1.0f;
|
||||
vert[2].g = 1.0f;
|
||||
vert[2].b = 1.0f;
|
||||
vert[2].a = 1.0f;
|
||||
vert[2].x = 0.0f;
|
||||
vert[2].y = 0.0f;
|
||||
vert[2].z = 1.0f;
|
||||
|
||||
vert[3].x = out_width;
|
||||
vert[3].y = 0.0f;
|
||||
vert[3].z = 0.5f;
|
||||
vert[3].u = _u;
|
||||
vert[3].v = _v;
|
||||
vert[3].lut_u = 1.0f;
|
||||
vert[3].lut_v = 1.0f;
|
||||
vert[3].r = 1.0f;
|
||||
vert[3].g = 1.0f;
|
||||
vert[3].b = 1.0f;
|
||||
vert[3].a = 1.0f;
|
||||
vert[3].x = 1.0f;
|
||||
vert[3].y = 0.0f;
|
||||
vert[3].z = 1.0f;
|
||||
|
||||
vert[0].u = 0.0f;
|
||||
vert[0].v = 0.0f;
|
||||
vert[1].v = 0.0f;
|
||||
vert[2].u = 0.0f;
|
||||
vert[1].u = _u;
|
||||
vert[2].v = _v;
|
||||
vert[3].u = _u;
|
||||
vert[3].v = _v;
|
||||
|
||||
vert[0].color = 0xFFFFFFFF;
|
||||
vert[1].color = 0xFFFFFFFF;
|
||||
vert[2].color = 0xFFFFFFFF;
|
||||
vert[3].color = 0xFFFFFFFF;
|
||||
|
||||
/* Align texels and vertices.
|
||||
*
|
||||
* Fixes infamous 'half-texel offset' issue of D3D9
|
||||
* http://msdn.microsoft.com/en-us/library/bb219690%28VS.85%29.aspx.
|
||||
*/
|
||||
/* Maybe we do need something like this left out for now
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
vert[i].x -= 0.5f;
|
||||
vert[i].y += 0.5f;
|
||||
}
|
||||
*/
|
||||
|
||||
verts = d3d9_vertex_buffer_lock(pass->vertex_buf);
|
||||
memcpy(verts, vert, sizeof(vert));
|
||||
@ -193,7 +178,7 @@ static INLINE bool d3d9_renderchain_add_pass(d3d9_renderchain_t *chain,
|
||||
LPDIRECT3DTEXTURE9 tex;
|
||||
LPDIRECT3DVERTEXBUFFER9 vertbuf = (LPDIRECT3DVERTEXBUFFER9)
|
||||
d3d9_vertex_buffer_new(chain->dev,
|
||||
4 * sizeof(struct D3D9Vertex),
|
||||
4 * sizeof(struct Vertex),
|
||||
D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, NULL);
|
||||
|
||||
if (!vertbuf)
|
||||
|
Loading…
x
Reference in New Issue
Block a user