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_set_viewports(d3d->dev, &screen_vp);
|
||||||
d3d9_clear(d3d->dev, 0, 0, D3DCLEAR_TARGET, 0, 1, 0);
|
d3d9_clear(d3d->dev, 0, 0, D3DCLEAR_TARGET, 0, 1, 0);
|
||||||
|
|
||||||
|
d3d9_set_mvp(d3d->dev, &d3d->mvp_transposed);
|
||||||
if (!d3d->renderchain_driver->render(
|
if (!d3d->renderchain_driver->render(
|
||||||
d3d, frame, frame_width, frame_height,
|
d3d, frame, frame_width, frame_height,
|
||||||
pitch, d3d->dev_rotation))
|
pitch, d3d->dev_rotation))
|
||||||
|
@ -1604,7 +1605,7 @@ static bool d3d9_frame(void *data, const void *frame,
|
||||||
#ifdef HAVE_OVERLAY
|
#ifdef HAVE_OVERLAY
|
||||||
if (d3d->overlays_enabled)
|
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++)
|
for (i = 0; i < d3d->overlays_size; i++)
|
||||||
d3d9_overlay_render(d3d, width, height, &d3d->overlays[i], true);
|
d3d9_overlay_render(d3d, width, height, &d3d->overlays[i], true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,18 +3,18 @@
|
||||||
static const char *stock_hlsl_program = CG(
|
static const char *stock_hlsl_program = CG(
|
||||||
void main_vertex
|
void main_vertex
|
||||||
(
|
(
|
||||||
float4 position : POSITION,
|
float3 position : POSITION,
|
||||||
float4 color : COLOR,
|
float4 color : COLOR,
|
||||||
|
float2 texCoord : TEXCOORD0,
|
||||||
|
|
||||||
uniform float4x4 modelViewProj,
|
uniform float4x4 modelViewProj,
|
||||||
|
|
||||||
float4 texCoord : TEXCOORD0,
|
|
||||||
out float4 oPosition : POSITION,
|
out float4 oPosition : POSITION,
|
||||||
out float4 oColor : COLOR,
|
out float4 oColor : COLOR,
|
||||||
out float2 otexCoord : TEXCOORD
|
out float2 otexCoord : TEXCOORD
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
oPosition = mul(modelViewProj, position);
|
oPosition = mul(modelViewProj, float4(position, 1.0f));
|
||||||
oColor = color;
|
oColor = color;
|
||||||
otexCoord = texCoord;
|
otexCoord = texCoord;
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,10 +228,14 @@ static bool hlsl_d3d9_renderchain_init_shader_fvf(
|
||||||
d3d9_renderchain_t *chain,
|
d3d9_renderchain_t *chain,
|
||||||
struct shader_pass *pass)
|
struct shader_pass *pass)
|
||||||
{
|
{
|
||||||
static const D3DVERTEXELEMENT9 decl[] =
|
static const D3DVERTEXELEMENT9 decl[4] =
|
||||||
{
|
{
|
||||||
{ 0, 0 * sizeof(float), D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
|
{0, offsetof(Vertex, x), D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT,
|
||||||
D3D9_DECL_FVF_TEXCOORD(0, 2, 0),
|
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()
|
D3DDECL_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -265,7 +269,7 @@ static bool hlsl_d3d9_renderchain_create_first_pass(
|
||||||
chain->prev.last_height[i] = 0;
|
chain->prev.last_height[i] = 0;
|
||||||
chain->prev.vertex_buf[i] = (LPDIRECT3DVERTEXBUFFER9)
|
chain->prev.vertex_buf[i] = (LPDIRECT3DVERTEXBUFFER9)
|
||||||
d3d9_vertex_buffer_new(
|
d3d9_vertex_buffer_new(
|
||||||
chain->dev, 4 * sizeof(struct D3D9Vertex),
|
chain->dev, 4 * sizeof(struct Vertex),
|
||||||
D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, NULL);
|
D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, NULL);
|
||||||
|
|
||||||
if (!chain->prev.vertex_buf[i])
|
if (!chain->prev.vertex_buf[i])
|
||||||
|
@ -471,21 +475,25 @@ static void hlsl_d3d9_renderchain_render_pass(
|
||||||
struct shader_pass *pass,
|
struct shader_pass *pass,
|
||||||
unsigned pass_index)
|
unsigned pass_index)
|
||||||
{
|
{
|
||||||
unsigned i;
|
/* 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(pass, chain->chain.dev);
|
d3d9_hlsl_bind_program(&chain->stock_shader, chain->chain.dev);
|
||||||
|
|
||||||
d3d9_set_texture(chain->chain.dev, 0, pass->tex);
|
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,
|
d3d9_set_sampler_minfilter(chain->chain.dev, 0,
|
||||||
d3d_translate_filter(pass->info.pass->filter));
|
d3d_translate_filter(pass->info.pass->filter));
|
||||||
d3d9_set_sampler_magfilter(chain->chain.dev, 0,
|
d3d9_set_sampler_magfilter(chain->chain.dev, 0,
|
||||||
d3d_translate_filter(pass->info.pass->filter));
|
d3d_translate_filter(pass->info.pass->filter));
|
||||||
|
|
||||||
d3d9_set_vertex_declaration(chain->chain.dev, pass->vertex_decl);
|
d3d9_set_vertex_declaration(chain->chain.dev, pass->vertex_decl);
|
||||||
for (i = 0; i < 4; i++)
|
|
||||||
d3d9_set_stream_source(chain->chain.dev, i,
|
d3d9_set_stream_source(chain->chain.dev, 0,
|
||||||
pass->vertex_buf, 0,
|
pass->vertex_buf, 0,
|
||||||
sizeof(struct D3D9Vertex));
|
sizeof(struct Vertex));
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* Set orig texture. */
|
/* Set orig texture. */
|
||||||
|
|
|
@ -111,7 +111,7 @@ static INLINE void d3d9_renderchain_set_vertices_on_change(
|
||||||
unsigned rotation
|
unsigned rotation
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
struct D3D9Vertex vert[4];
|
struct Vertex vert[4];
|
||||||
unsigned i;
|
unsigned i;
|
||||||
void *verts = NULL;
|
void *verts = NULL;
|
||||||
const struct
|
const struct
|
||||||
|
@ -122,64 +122,49 @@ static INLINE void d3d9_renderchain_set_vertices_on_change(
|
||||||
pass->last_width = width;
|
pass->last_width = width;
|
||||||
pass->last_height = height;
|
pass->last_height = height;
|
||||||
|
|
||||||
|
/* Copied from d3d8 driver */
|
||||||
vert[0].x = 0.0f;
|
vert[0].x = 0.0f;
|
||||||
vert[0].y = out_height;
|
vert[0].y = 1.0f;
|
||||||
vert[0].z = 0.5f;
|
vert[0].z = 1.0f;
|
||||||
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;
|
|
||||||
|
|
||||||
vert[1].x = out_width;
|
vert[1].x = 1.0f;
|
||||||
vert[1].y = out_height;
|
vert[1].y = 1.0f;
|
||||||
vert[1].z = 0.5f;
|
vert[1].z = 1.0f;
|
||||||
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[2].x = 0.0f;
|
vert[2].x = 0.0f;
|
||||||
vert[2].y = 0.0f;
|
vert[2].y = 0.0f;
|
||||||
vert[2].z = 0.5f;
|
vert[2].z = 1.0f;
|
||||||
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[3].x = out_width;
|
vert[3].x = 1.0f;
|
||||||
vert[3].y = 0.0f;
|
vert[3].y = 0.0f;
|
||||||
vert[3].z = 0.5f;
|
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].u = _u;
|
||||||
vert[3].v = _v;
|
vert[3].v = _v;
|
||||||
vert[3].lut_u = 1.0f;
|
|
||||||
vert[3].lut_v = 1.0f;
|
vert[0].color = 0xFFFFFFFF;
|
||||||
vert[3].r = 1.0f;
|
vert[1].color = 0xFFFFFFFF;
|
||||||
vert[3].g = 1.0f;
|
vert[2].color = 0xFFFFFFFF;
|
||||||
vert[3].b = 1.0f;
|
vert[3].color = 0xFFFFFFFF;
|
||||||
vert[3].a = 1.0f;
|
|
||||||
|
|
||||||
/* Align texels and vertices.
|
/* Align texels and vertices.
|
||||||
*
|
*
|
||||||
* Fixes infamous 'half-texel offset' issue of D3D9
|
* Fixes infamous 'half-texel offset' issue of D3D9
|
||||||
* http://msdn.microsoft.com/en-us/library/bb219690%28VS.85%29.aspx.
|
* 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++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
vert[i].x -= 0.5f;
|
vert[i].x -= 0.5f;
|
||||||
vert[i].y += 0.5f;
|
vert[i].y += 0.5f;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
verts = d3d9_vertex_buffer_lock(pass->vertex_buf);
|
verts = d3d9_vertex_buffer_lock(pass->vertex_buf);
|
||||||
memcpy(verts, vert, sizeof(vert));
|
memcpy(verts, vert, sizeof(vert));
|
||||||
|
@ -193,7 +178,7 @@ static INLINE bool d3d9_renderchain_add_pass(d3d9_renderchain_t *chain,
|
||||||
LPDIRECT3DTEXTURE9 tex;
|
LPDIRECT3DTEXTURE9 tex;
|
||||||
LPDIRECT3DVERTEXBUFFER9 vertbuf = (LPDIRECT3DVERTEXBUFFER9)
|
LPDIRECT3DVERTEXBUFFER9 vertbuf = (LPDIRECT3DVERTEXBUFFER9)
|
||||||
d3d9_vertex_buffer_new(chain->dev,
|
d3d9_vertex_buffer_new(chain->dev,
|
||||||
4 * sizeof(struct D3D9Vertex),
|
4 * sizeof(struct Vertex),
|
||||||
D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, NULL);
|
D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, NULL);
|
||||||
|
|
||||||
if (!vertbuf)
|
if (!vertbuf)
|
||||||
|
|
Loading…
Reference in New Issue