mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
(D3D) Some fixes to render_chain.cpp and d3d_wrapper.c
This commit is contained in:
parent
d075bbf349
commit
8572e3bc6e
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user