(D3D) Some fixes to render_chain.cpp and d3d_wrapper.c

This commit is contained in:
twinaphex 2014-09-13 05:45:49 +02:00
parent d075bbf349
commit 8572e3bc6e
4 changed files with 18 additions and 25 deletions

View File

@ -139,18 +139,18 @@ void d3d_draw_primitive(LPDIRECT3DDEVICE dev,
void d3d_lockrectangle_clear(void *data,
LPDIRECT3DTEXTURE tex,
unsigned level, D3DLOCKED_RECT lock_rect, RECT *rect,
unsigned level, D3DLOCKED_RECT *lock_rect, RECT *rect,
unsigned flags)
{
#if defined(_XBOX)
d3d_video_t *chain = (d3d_video_t*)data;
D3DTexture_LockRect(tex, level, &lock_rect, rect, flags);
memset(lock_rect.pBits, 0, chain->tex_h * lock_rect.Pitch);
D3DTexture_LockRect(tex, level, lock_rect, rect, flags);
memset(lock_rect->pBits, 0, chain->tex_h * lock_rect->Pitch);
#else
Pass *pass = (Pass*)data;
if (SUCCEEDED(tex->LockRect(level, &lock_rect, rect, flags)))
if (SUCCEEDED(tex->LockRect(level, lock_rect, rect, flags)))
{
memset(lock_rect.pBits, level, pass->info.tex_h * lock_rect.Pitch);
memset(lock_rect->pBits, level, pass->info.tex_h * lock_rect->Pitch);
tex->UnlockRect(0);
}
#endif
@ -203,12 +203,10 @@ HRESULT d3d_set_vertex_shader(LPDIRECT3DDEVICE dev, unsigned index,
void d3d_texture_blit(void *data, void *renderchain_data,
LPDIRECT3DTEXTURE tex, D3DSURFACE_DESC desc,
D3DLOCKED_RECT lr, const void *frame,
LPDIRECT3DTEXTURE tex, D3DLOCKED_RECT *lr, const void *frame,
unsigned width, unsigned height, unsigned pitch)
{
d3d_video_t *d3d = (d3d_video_t*)data;
(void)desc;
(void)data;
(void)d3d;
@ -216,14 +214,15 @@ void d3d_texture_blit(void *data, void *renderchain_data,
return;
#if defined(_XBOX360)
D3DSURFACE_DESC desc;
tex->GetLevelDesc(0, &desc);
XGCopySurface(lr.pBits, lr.Pitch, width, height, desc.Format, NULL,
XGCopySurface(lr->pBits, lr->Pitch, width, height, desc.Format, NULL,
frame, pitch, desc.Format, NULL, 0, 0);
#elif defined(_XBOX1)
for (unsigned y = 0; y < height; y++)
{
const uint8_t *in = (const uint8_t*)frame + y * pitch;
uint8_t *out = (uint8_t*)lr.pBits + y * lr.Pitch;
uint8_t *out = (uint8_t*)lr->pBits + y * lr->Pitch;
memcpy(out, in, width * d3d->pixel_size);
}
#else
@ -232,12 +231,12 @@ void d3d_texture_blit(void *data, void *renderchain_data,
if (!chain)
return;
if (SUCCEEDED(tex->LockRect(0, &lr, NULL, D3DLOCK_NOSYSLOCK)))
if (SUCCEEDED(tex->LockRect(0, lr, NULL, D3DLOCK_NOSYSLOCK)))
{
for (unsigned y = 0; y < height; y++)
{
const uint8_t *in = (const uint8_t*)frame + y * pitch;
uint8_t *out = (uint8_t*)lr.pBits + y * lr.Pitch;
uint8_t *out = (uint8_t*)lr->pBits + y * lr->Pitch;
memcpy(out, in, width * chain->pixel_size);
}
tex->UnlockRect(0);

View File

@ -47,7 +47,7 @@ void d3d_draw_primitive(LPDIRECT3DDEVICE dev,
void d3d_lockrectangle_clear(void *data,
LPDIRECT3DTEXTURE tex,
unsigned level, D3DLOCKED_RECT lock_rect, RECT *rect,
unsigned level, D3DLOCKED_RECT *lock_rect, RECT *rect,
unsigned flags);
void d3d_set_texture(LPDIRECT3DDEVICE dev, unsigned sampler,
@ -57,8 +57,8 @@ HRESULT d3d_set_vertex_shader(LPDIRECT3DDEVICE dev, unsigned index,
void *data);
void d3d_texture_blit(void *data, void *renderchain_data,
LPDIRECT3DTEXTURE tex, D3DSURFACE_DESC desc,
D3DLOCKED_RECT lr, const void *frame,
LPDIRECT3DTEXTURE tex,
D3DLOCKED_RECT *lr, const void *frame,
unsigned width, unsigned height, unsigned pitch);
void d3d_set_viewport(LPDIRECT3DDEVICE dev, D3DVIEWPORT *vp);

View File

@ -528,21 +528,18 @@ void renderchain_blit_to_texture(void *data, const void *frame,
unsigned width, unsigned height,
unsigned pitch)
{
D3DSURFACE_DESC desc;
D3DLOCKED_RECT d3dlr;
renderchain_t *chain = (renderchain_t*)data;
Pass *first = (Pass*)&chain->passes[0];
(void)desc;
if (first->last_width != width || first->last_height != height)
{
d3d_lockrectangle_clear(first, first->tex, 0, d3dlr,
d3d_lockrectangle_clear(first, first->tex, 0, &d3dlr,
NULL, D3DLOCK_NOSYSLOCK);
}
d3d_texture_blit(driver.video_data, chain, first->tex,
desc, d3dlr, frame, width, height, pitch);
&d3dlr, frame, width, height, pitch);
}
void renderchain_render_pass(void *data, Pass &pass, unsigned pass_index)

View File

@ -259,18 +259,15 @@ static void renderchain_set_mvp(void *data, unsigned vp_width, unsigned vp_heigh
static void renderchain_blit_to_texture(void *data, const void *frame,
unsigned width, unsigned height, unsigned pitch)
{
D3DSURFACE_DESC desc;
D3DLOCKED_RECT d3dlr;
d3d_video_t *d3d = (d3d_video_t*)data;
(void)desc;
if (d3d->last_width != width || d3d->last_height != height)
{
d3d_lockrectangle_clear(d3d, d3d->tex,
0, d3dlr, NULL, D3DLOCK_NOSYSLOCK);
0, &d3dlr, NULL, D3DLOCK_NOSYSLOCK);
}
D3DTexture_LockRect(d3d->tex, 0, &d3dlr, NULL, D3DLOCK_NOSYSLOCK);
d3d_texture_blit(d3d, NULL, d3d->tex, desc, d3dlr, frame, width, height, pitch);
d3d_texture_blit(d3d, NULL, d3d->tex, &d3dlr, frame, width, height, pitch);
}