mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
(D3D10) Cleanups for render_line and style nits
This commit is contained in:
parent
691c09ef09
commit
2fa9e5cbb1
@ -84,10 +84,12 @@ static INLINE void d3d10_set_shader(D3D10Device ctx, d3d10_shader_t* shader)
|
||||
}
|
||||
|
||||
static INLINE void
|
||||
d3d10_set_texture_and_sampler(D3D10Device ctx, UINT slot, d3d10_texture_t* texture)
|
||||
d3d10_set_texture_and_sampler(D3D10Device ctx, UINT slot,
|
||||
d3d10_texture_t* texture)
|
||||
{
|
||||
ctx->lpVtbl->PSSetShaderResources(ctx, slot, 1, &texture->view);
|
||||
ctx->lpVtbl->PSSetSamplers(ctx, slot, 1, (D3D10SamplerState*)&texture->sampler);
|
||||
ctx->lpVtbl->PSSetSamplers(ctx, slot, 1,
|
||||
(D3D10SamplerState*)&texture->sampler);
|
||||
}
|
||||
|
||||
static INLINE void d3d10_release_texture(d3d10_texture_t* texture)
|
||||
@ -120,8 +122,9 @@ d3d10_get_closest_match(D3D10Device device,
|
||||
{
|
||||
UINT format_support;
|
||||
if (SUCCEEDED(device->lpVtbl->CheckFormatSupport(device, *format,
|
||||
&format_support)) &&
|
||||
((format_support & desired_format_support) == desired_format_support))
|
||||
&format_support))
|
||||
&& ((format_support & desired_format_support) ==
|
||||
desired_format_support))
|
||||
break;
|
||||
format++;
|
||||
}
|
||||
@ -130,8 +133,10 @@ d3d10_get_closest_match(D3D10Device device,
|
||||
|
||||
static void d3d10_init_texture(D3D10Device device, d3d10_texture_t* texture)
|
||||
{
|
||||
bool is_render_target = texture->desc.BindFlags & D3D10_BIND_RENDER_TARGET;
|
||||
UINT format_support = D3D10_FORMAT_SUPPORT_TEXTURE2D | D3D10_FORMAT_SUPPORT_SHADER_SAMPLE;
|
||||
bool is_render_target = texture->desc.BindFlags
|
||||
& D3D10_BIND_RENDER_TARGET;
|
||||
UINT format_support = D3D10_FORMAT_SUPPORT_TEXTURE2D
|
||||
| D3D10_FORMAT_SUPPORT_SHADER_SAMPLE;
|
||||
|
||||
texture->desc.MipLevels = 1;
|
||||
texture->desc.ArraySize = 1;
|
||||
@ -139,7 +144,9 @@ static void d3d10_init_texture(D3D10Device device, d3d10_texture_t* texture)
|
||||
texture->desc.SampleDesc.Quality = 0;
|
||||
texture->desc.BindFlags |= D3D10_BIND_SHADER_RESOURCE;
|
||||
texture->desc.CPUAccessFlags =
|
||||
texture->desc.Usage == D3D10_USAGE_DYNAMIC ? D3D10_CPU_ACCESS_WRITE : 0;
|
||||
texture->desc.Usage == D3D10_USAGE_DYNAMIC
|
||||
? D3D10_CPU_ACCESS_WRITE
|
||||
: 0;
|
||||
|
||||
if (texture->desc.MiscFlags & D3D10_RESOURCE_MISC_GENERATE_MIPS)
|
||||
{
|
||||
@ -160,7 +167,8 @@ static void d3d10_init_texture(D3D10Device device, d3d10_texture_t* texture)
|
||||
if (texture->desc.BindFlags & D3D10_BIND_RENDER_TARGET)
|
||||
format_support |= D3D10_FORMAT_SUPPORT_RENDER_TARGET;
|
||||
|
||||
texture->desc.Format = d3d10_get_closest_match(device, texture->desc.Format, format_support);
|
||||
texture->desc.Format = d3d10_get_closest_match(
|
||||
device, texture->desc.Format, format_support);
|
||||
|
||||
device->lpVtbl->CreateTexture2D(device, &texture->desc, NULL,
|
||||
&texture->handle);
|
||||
@ -186,7 +194,8 @@ static void d3d10_init_texture(D3D10Device device, d3d10_texture_t* texture)
|
||||
desc.MiscFlags = 0;
|
||||
desc.Usage = D3D10_USAGE_STAGING;
|
||||
desc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE;
|
||||
device->lpVtbl->CreateTexture2D(device, &desc, NULL, &texture->staging);
|
||||
device->lpVtbl->CreateTexture2D(device, &desc, NULL,
|
||||
&texture->staging);
|
||||
}
|
||||
|
||||
texture->size_data.x = texture->desc.Width;
|
||||
@ -338,14 +347,16 @@ static void gfx_display_d3d10_draw(gfx_display_ctx_draw_t *draw,
|
||||
case VIDEO_SHADER_MENU_5:
|
||||
case VIDEO_SHADER_MENU_6:
|
||||
d3d10_set_shader(d3d10->device, &d3d10->shaders[draw->pipeline_id]);
|
||||
d3d10->device->lpVtbl->Draw(d3d10->device, draw->coords->vertices, 0);
|
||||
d3d10->device->lpVtbl->Draw(d3d10->device,
|
||||
draw->coords->vertices, 0);
|
||||
d3d10->device->lpVtbl->OMSetBlendState(d3d10->device,
|
||||
d3d10->blend_enable,
|
||||
NULL, D3D10_DEFAULT_SAMPLE_MASK);
|
||||
d3d10_set_shader(d3d10->device, &d3d10->sprites.shader);
|
||||
stride = sizeof(d3d10_sprite_t);
|
||||
d3d10->device->lpVtbl->IASetVertexBuffers(
|
||||
d3d10->device, 0, 1, (D3D10Buffer* const)&d3d10->sprites.vbo, &stride, &offset);
|
||||
d3d10->device, 0, 1, (D3D10Buffer* const)&d3d10->sprites.vbo,
|
||||
&stride, &offset);
|
||||
d3d10->device->lpVtbl->IASetPrimitiveTopology(d3d10->device,
|
||||
D3D10_PRIMITIVE_TOPOLOGY_POINTLIST);
|
||||
return;
|
||||
@ -379,7 +390,7 @@ static void gfx_display_d3d10_draw(gfx_display_ctx_draw_t *draw,
|
||||
sprite->pos.y =
|
||||
(d3d10->viewport.Height - draw->y - draw->height)
|
||||
/ (float)d3d10->viewport.Height;
|
||||
sprite->pos.w = draw->width / (float)d3d10->viewport.Width;
|
||||
sprite->pos.w = draw->width / (float)d3d10->viewport.Width;
|
||||
sprite->pos.h = draw->height / (float)d3d10->viewport.Height;
|
||||
|
||||
sprite->coords.u = 0.0f;
|
||||
@ -409,7 +420,7 @@ static void gfx_display_d3d10_draw(gfx_display_ctx_draw_t *draw,
|
||||
}
|
||||
else
|
||||
{
|
||||
int i;
|
||||
int i;
|
||||
const float* vertex = draw->coords->vertex;
|
||||
const float* tex_coord = draw->coords->tex_coord;
|
||||
const float* color = draw->coords->color;
|
||||
@ -488,7 +499,9 @@ static void gfx_display_d3d10_draw_pipeline(gfx_display_ctx_draw_t* draw,
|
||||
}
|
||||
stride = 2 * sizeof(float);
|
||||
d3d10->device->lpVtbl->IASetVertexBuffers(
|
||||
d3d10->device, 0, 1, (D3D10Buffer* const)&d3d10->menu_pipeline_vbo, &stride, &offset);
|
||||
d3d10->device, 0, 1,
|
||||
(D3D10Buffer* const)&d3d10->menu_pipeline_vbo,
|
||||
&stride, &offset);
|
||||
draw->coords->vertices = ca->coords.vertices;
|
||||
d3d10->device->lpVtbl->OMSetBlendState(d3d10->device,
|
||||
d3d10->blend_pipeline,
|
||||
@ -502,7 +515,8 @@ static void gfx_display_d3d10_draw_pipeline(gfx_display_ctx_draw_t* draw,
|
||||
case VIDEO_SHADER_MENU_6:
|
||||
stride = sizeof(d3d10_vertex_t);
|
||||
d3d10->device->lpVtbl->IASetVertexBuffers(
|
||||
d3d10->device, 0, 1, (D3D10Buffer* const)&d3d10->frame.vbo, &stride, &offset);
|
||||
d3d10->device, 0, 1,
|
||||
(D3D10Buffer* const)&d3d10->frame.vbo, &stride, &offset);
|
||||
draw->coords->vertices = 4;
|
||||
break;
|
||||
default:
|
||||
@ -627,7 +641,8 @@ static void d3d10_font_free(void* data, bool is_threaded)
|
||||
free(font);
|
||||
}
|
||||
|
||||
static int d3d10_font_get_message_width(void* data, const char* msg, size_t msg_len, float scale)
|
||||
static int d3d10_font_get_message_width(void* data,
|
||||
const char* msg, size_t msg_len, float scale)
|
||||
{
|
||||
int i;
|
||||
int delta_x = 0;
|
||||
@ -663,22 +678,23 @@ static int d3d10_font_get_message_width(void* data, const char* msg, size_t msg_
|
||||
static void d3d10_font_render_line(
|
||||
d3d10_video_t *d3d10,
|
||||
d3d10_font_t* font,
|
||||
const struct font_glyph* glyph_q,
|
||||
const char* msg,
|
||||
size_t msg_len,
|
||||
float scale,
|
||||
const unsigned int color,
|
||||
float pos_x,
|
||||
float pos_y,
|
||||
int pre_x,
|
||||
unsigned width,
|
||||
unsigned height,
|
||||
unsigned text_align)
|
||||
{
|
||||
unsigned i, count;
|
||||
void *mapped_vbo;
|
||||
d3d10_sprite_t *v;
|
||||
unsigned i, count;
|
||||
void * mapped_vbo;
|
||||
const struct font_glyph* glyph_q = NULL;
|
||||
int x = roundf(pos_x * width);
|
||||
int y = roundf((1.0 - pos_y) * height);
|
||||
int x = pre_x;
|
||||
int y = roundf((1.0 - pos_y) * height);
|
||||
|
||||
if (d3d10->sprites.offset + msg_len > (unsigned)d3d10->sprites.capacity)
|
||||
d3d10->sprites.offset = 0;
|
||||
@ -698,7 +714,6 @@ static void d3d10_font_render_line(
|
||||
D3D10_MAP_WRITE_NO_OVERWRITE, 0, (void**)&mapped_vbo);
|
||||
|
||||
v = (d3d10_sprite_t*)mapped_vbo + d3d10->sprites.offset;
|
||||
glyph_q = font->font_driver->get_glyph(font->font_data, '?');
|
||||
|
||||
for (i = 0; i < msg_len; i++)
|
||||
{
|
||||
@ -717,12 +732,12 @@ static void d3d10_font_render_line(
|
||||
|
||||
v->pos.x = (x + (glyph->draw_offset_x * scale)) / (float)d3d10->viewport.Width;
|
||||
v->pos.y = (y + (glyph->draw_offset_y * scale)) / (float)d3d10->viewport.Height;
|
||||
v->pos.w = glyph->width * scale / (float)d3d10->viewport.Width;
|
||||
v->pos.w = glyph->width * scale / (float)d3d10->viewport.Width;
|
||||
v->pos.h = glyph->height * scale / (float)d3d10->viewport.Height;
|
||||
|
||||
v->coords.u = glyph->atlas_offset_x / (float)font->texture.desc.Width;
|
||||
v->coords.v = glyph->atlas_offset_y / (float)font->texture.desc.Height;
|
||||
v->coords.w = glyph->width / (float)font->texture.desc.Width;
|
||||
v->coords.w = glyph->width / (float)font->texture.desc.Width;
|
||||
v->coords.h = glyph->height / (float)font->texture.desc.Height;
|
||||
|
||||
v->params.scaling = 1;
|
||||
@ -779,22 +794,27 @@ static void d3d10_font_render_message(
|
||||
unsigned height,
|
||||
unsigned text_align)
|
||||
{
|
||||
float line_height;
|
||||
struct font_line_metrics *line_metrics = NULL;
|
||||
int lines = 0;
|
||||
float line_height;
|
||||
const struct font_glyph* glyph_q =
|
||||
font->font_driver->get_glyph(font->font_data, '?');
|
||||
int x = roundf(pos_x * width);
|
||||
font->font_driver->get_line_metrics(font->font_data, &line_metrics);
|
||||
line_height = line_metrics->height * scale / height;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
const char* delim = strchr(msg, '\n');
|
||||
size_t msg_len = delim ? (delim - msg) : strlen(msg);
|
||||
size_t msg_len = delim ? (delim - msg) : strlen(msg);
|
||||
|
||||
/* Draw the line */
|
||||
if (msg_len <= (unsigned)d3d10->sprites.capacity)
|
||||
d3d10_font_render_line(d3d10,
|
||||
font, msg, msg_len, scale, color, pos_x,
|
||||
font, glyph_q,
|
||||
msg, msg_len, scale, color, pos_x,
|
||||
pos_y - (float)lines * line_height,
|
||||
x,
|
||||
width, height, text_align);
|
||||
|
||||
if (!delim)
|
||||
@ -888,7 +908,8 @@ static void d3d10_font_render_msg(
|
||||
width, height, text_align);
|
||||
}
|
||||
|
||||
static const struct font_glyph* d3d10_font_get_glyph(void *data, uint32_t code)
|
||||
static const struct font_glyph* d3d10_font_get_glyph(void *data,
|
||||
uint32_t code)
|
||||
{
|
||||
d3d10_font_t* font = (d3d10_font_t*)data;
|
||||
if (font && font->font_driver)
|
||||
@ -896,7 +917,8 @@ static const struct font_glyph* d3d10_font_get_glyph(void *data, uint32_t code)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bool d3d10_font_get_line_metrics(void* data, struct font_line_metrics **metrics)
|
||||
static bool d3d10_font_get_line_metrics(void* data,
|
||||
struct font_line_metrics **metrics)
|
||||
{
|
||||
d3d10_font_t* font = (d3d10_font_t*)data;
|
||||
if (font && font->font_driver && font->font_data)
|
||||
@ -934,10 +956,11 @@ static void d3d10_free_overlays(d3d10_video_t* d3d10)
|
||||
}
|
||||
|
||||
static void
|
||||
d3d10_overlay_vertex_geom(void* data, unsigned index, float x, float y, float w, float h)
|
||||
d3d10_overlay_vertex_geom(void* data,
|
||||
unsigned index, float x, float y, float w, float h)
|
||||
{
|
||||
d3d10_sprite_t* sprites = NULL;
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
|
||||
if (!d3d10)
|
||||
return;
|
||||
@ -956,10 +979,11 @@ d3d10_overlay_vertex_geom(void* data, unsigned index, float x, float y, float w,
|
||||
d3d10->overlays.vbo->lpVtbl->Unmap(d3d10->overlays.vbo);
|
||||
}
|
||||
|
||||
static void d3d10_overlay_tex_geom(void* data, unsigned index, float u, float v, float w, float h)
|
||||
static void d3d10_overlay_tex_geom(void* data,
|
||||
unsigned index, float u, float v, float w, float h)
|
||||
{
|
||||
d3d10_sprite_t* sprites = NULL;
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
|
||||
if (!d3d10)
|
||||
return;
|
||||
@ -976,7 +1000,7 @@ static void d3d10_overlay_tex_geom(void* data, unsigned index, float u, float v,
|
||||
static void d3d10_overlay_set_alpha(void* data, unsigned index, float mod)
|
||||
{
|
||||
d3d10_sprite_t* sprites = NULL;
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
|
||||
if (!d3d10)
|
||||
return;
|
||||
@ -994,13 +1018,15 @@ static void d3d10_overlay_set_alpha(void* data, unsigned index, float mod)
|
||||
d3d10->overlays.vbo->lpVtbl->Unmap(d3d10->overlays.vbo);
|
||||
}
|
||||
|
||||
static bool d3d10_overlay_load(void* data, const void* image_data, unsigned num_images)
|
||||
static bool d3d10_overlay_load(void* data,
|
||||
const void* image_data, unsigned num_images)
|
||||
{
|
||||
size_t i;
|
||||
D3D10_BUFFER_DESC desc;
|
||||
d3d10_sprite_t* sprites = NULL;
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
const struct texture_image* images = (const struct texture_image*)image_data;
|
||||
const struct texture_image* images = (const struct texture_image*)
|
||||
image_data;
|
||||
|
||||
if (!d3d10)
|
||||
return false;
|
||||
@ -1099,8 +1125,8 @@ static void d3d10_get_overlay_interface(void* data, const video_overlay_interfac
|
||||
|
||||
static void d3d10_render_overlay(d3d10_video_t *d3d10)
|
||||
{
|
||||
UINT offset = 0, stride = 0;
|
||||
int i;
|
||||
UINT offset = 0, stride = 0;
|
||||
|
||||
if (d3d10->flags & D3D10_ST_FLAG_OVERLAYS_FULLSCREEN)
|
||||
d3d10->device->lpVtbl->RSSetViewports(d3d10->device, 1, &d3d10->viewport);
|
||||
@ -1242,7 +1268,8 @@ static void d3d10_free_shader_preset(d3d10_video_t* d3d10)
|
||||
| D3D10_ST_FLAG_RESIZE_RTS);
|
||||
}
|
||||
|
||||
static bool d3d10_gfx_set_shader(void* data, enum rarch_shader_type type, const char* path)
|
||||
static bool d3d10_gfx_set_shader(void* data,
|
||||
enum rarch_shader_type type, const char* path)
|
||||
{
|
||||
#if defined(HAVE_SLANG) && defined(HAVE_SPIRV_CROSS)
|
||||
unsigned i;
|
||||
@ -1312,7 +1339,8 @@ static bool d3d10_gfx_set_shader(void* data, enum rarch_shader_type type, const
|
||||
/* clang-format on */
|
||||
|
||||
if (!slang_process(
|
||||
d3d10->shader_preset, i, RARCH_SHADER_HLSL, 40, &semantics_map,
|
||||
d3d10->shader_preset, i, RARCH_SHADER_HLSL,
|
||||
40, &semantics_map,
|
||||
&d3d10->pass[i].semantics))
|
||||
goto error;
|
||||
|
||||
@ -1335,11 +1363,13 @@ static bool d3d10_gfx_set_shader(void* data, enum rarch_shader_type type, const
|
||||
strlcat(ps_path, ".ps.hlsl", sizeof(ps_path));
|
||||
|
||||
if (!d3d10_init_shader(
|
||||
d3d10->device, vs_src, 0, vs_path, "main", NULL, NULL, desc, countof(desc),
|
||||
d3d10->device, vs_src, 0, vs_path, "main",
|
||||
NULL, NULL, desc, countof(desc),
|
||||
&d3d10->pass[i].shader)) { }
|
||||
|
||||
if (!d3d10_init_shader(
|
||||
d3d10->device, ps_src, 0, ps_path, NULL, "main", NULL, NULL, 0,
|
||||
d3d10->device, ps_src, 0, ps_path, NULL, "main",
|
||||
NULL, NULL, 0,
|
||||
&d3d10->pass[i].shader)) { }
|
||||
|
||||
free(d3d10->shader_preset->pass[i].source.string.vertex);
|
||||
@ -2079,8 +2109,9 @@ static void d3d10_init_render_targets(d3d10_video_t* d3d10,
|
||||
|
||||
RARCH_LOG("[D3D10]: Updating framebuffer size %ux%u.\n", width, height);
|
||||
|
||||
if ((i != (d3d10->shader_preset->passes - 1)) || (width != d3d10->vp.width) ||
|
||||
(height != d3d10->vp.height))
|
||||
if ( (i != (d3d10->shader_preset->passes - 1))
|
||||
|| (width != d3d10->vp.width)
|
||||
|| (height != d3d10->vp.height))
|
||||
{
|
||||
d3d10->pass[i].viewport.Width = width;
|
||||
d3d10->pass[i].viewport.Height = height;
|
||||
@ -2088,7 +2119,8 @@ static void d3d10_init_render_targets(d3d10_video_t* d3d10,
|
||||
d3d10->pass[i].rt.desc.Width = width;
|
||||
d3d10->pass[i].rt.desc.Height = height;
|
||||
d3d10->pass[i].rt.desc.BindFlags = D3D10_BIND_RENDER_TARGET;
|
||||
d3d10->pass[i].rt.desc.Format = glslang_format_to_dxgi(d3d10->pass[i].semantics.format);
|
||||
d3d10->pass[i].rt.desc.Format = glslang_format_to_dxgi(
|
||||
d3d10->pass[i].semantics.format);
|
||||
d3d10_release_texture(&d3d10->pass[i].rt);
|
||||
d3d10_init_texture(d3d10->device, &d3d10->pass[i].rt);
|
||||
|
||||
@ -2097,7 +2129,7 @@ static void d3d10_init_render_targets(d3d10_video_t* d3d10,
|
||||
d3d10->pass[i].feedback.desc = d3d10->pass[i].rt.desc;
|
||||
d3d10_release_texture(&d3d10->pass[i].feedback);
|
||||
d3d10_init_texture(d3d10->device, &d3d10->pass[i].feedback);
|
||||
/* TODO/FIXME: do we need to clear it to black here ? */
|
||||
/* TODO/FIXME: Do we need to clear it to black here ? */
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -2167,7 +2199,9 @@ static bool d3d10_gfx_frame(
|
||||
video_driver_set_size(video_width, video_height);
|
||||
}
|
||||
|
||||
#if 0 /* custom viewport doesn't call apply_state_changes, so we can't rely on this for now */
|
||||
#if 0
|
||||
/* custom viewport doesn't call apply_state_changes,
|
||||
so we can't rely on this for now */
|
||||
if (d3d10->resize_viewport)
|
||||
#endif
|
||||
d3d10_update_viewport(d3d10, false);
|
||||
@ -2188,14 +2222,15 @@ static bool d3d10_gfx_frame(
|
||||
{
|
||||
if (d3d10->shader_preset)
|
||||
{
|
||||
if (d3d10->frame.texture[0].desc.Width != width ||
|
||||
d3d10->frame.texture[0].desc.Height != height)
|
||||
if ( (d3d10->frame.texture[0].desc.Width != width)
|
||||
|| (d3d10->frame.texture[0].desc.Height != height))
|
||||
d3d10->flags |= D3D10_ST_FLAG_RESIZE_RTS;
|
||||
|
||||
if (d3d10->flags & D3D10_ST_FLAG_RESIZE_RTS)
|
||||
{
|
||||
int i;
|
||||
/* Release all render targets first to avoid memory fragmentation */
|
||||
/* Release all render targets first to avoid
|
||||
* memory fragmentation */
|
||||
for (i = 0; i < (int) d3d10->shader_preset->passes; i++)
|
||||
{
|
||||
d3d10_release_texture(&d3d10->pass[i].rt);
|
||||
@ -2222,9 +2257,10 @@ static bool d3d10_gfx_frame(
|
||||
}
|
||||
}
|
||||
|
||||
/* either no history, or we moved a texture of a different size in the front slot */
|
||||
if (d3d10->frame.texture[0].desc.Width != width ||
|
||||
d3d10->frame.texture[0].desc.Height != height)
|
||||
/* either no history, or we moved a texture of
|
||||
* a different size in the front slot */
|
||||
if ( (d3d10->frame.texture[0].desc.Width != width)
|
||||
|| (d3d10->frame.texture[0].desc.Height != height))
|
||||
{
|
||||
d3d10->frame.texture[0].desc.Width = width;
|
||||
d3d10->frame.texture[0].desc.Height = height;
|
||||
@ -2239,12 +2275,14 @@ static bool d3d10_gfx_frame(
|
||||
if (d3d10->frame.texture[0].staging)
|
||||
d3d10_update_texture(
|
||||
d3d10->device,
|
||||
width, height, pitch, d3d10->format, frame, &d3d10->frame.texture[0]);
|
||||
width, height, pitch, d3d10->format,
|
||||
frame, &d3d10->frame.texture[0]);
|
||||
}
|
||||
|
||||
stride = sizeof(d3d10_vertex_t);
|
||||
context->lpVtbl->IASetVertexBuffers(
|
||||
context, 0, 1, (D3D10Buffer* const)&d3d10->frame.vbo, &stride, &offset);
|
||||
context, 0, 1, (D3D10Buffer* const)&d3d10->frame.vbo,
|
||||
&stride, &offset);
|
||||
context->lpVtbl->OMSetBlendState(context, d3d10->blend_disable, NULL,
|
||||
D3D10_DEFAULT_SAMPLE_MASK);
|
||||
|
||||
@ -2275,7 +2313,8 @@ static bool d3d10_gfx_frame(
|
||||
d3d10->pass[i].frame_count = frame_count;
|
||||
|
||||
#ifdef HAVE_REWIND
|
||||
d3d10->pass[i].frame_direction = state_manager_frame_is_reversed() ? -1 : 1;
|
||||
d3d10->pass[i].frame_direction = state_manager_frame_is_reversed()
|
||||
? -1 : 1;
|
||||
#else
|
||||
d3d10->pass[i].frame_direction = 1;
|
||||
#endif
|
||||
@ -2305,7 +2344,8 @@ static bool d3d10_gfx_frame(
|
||||
buffer->lpVtbl->Unmap(buffer);
|
||||
|
||||
if (buffer_sem->stage_mask & SLANG_STAGE_VERTEX_MASK)
|
||||
context->lpVtbl->VSSetConstantBuffers(context, buffer_sem->binding, 1, &buffer);
|
||||
context->lpVtbl->VSSetConstantBuffers(context,
|
||||
buffer_sem->binding, 1, &buffer);
|
||||
|
||||
if (buffer_sem->stage_mask & SLANG_STAGE_FRAGMENT_MASK)
|
||||
context->lpVtbl->PSSetConstantBuffers(context,
|
||||
@ -2327,7 +2367,8 @@ static bool d3d10_gfx_frame(
|
||||
while (texture_sem->stage_mask)
|
||||
{
|
||||
int binding = texture_sem->binding;
|
||||
textures[binding] = *(D3D10ShaderResourceView*)texture_sem->texture_data;
|
||||
textures[binding] = *(D3D10ShaderResourceView*)
|
||||
texture_sem->texture_data;
|
||||
samplers[binding] = d3d10->samplers[texture_sem->filter][texture_sem->wrap];
|
||||
texture_sem++;
|
||||
}
|
||||
@ -2341,14 +2382,16 @@ static bool d3d10_gfx_frame(
|
||||
context->lpVtbl->PSSetShaderResources(context, 0,
|
||||
SLANG_NUM_BINDINGS, textures);
|
||||
|
||||
context->lpVtbl->PSSetSamplers(context, 0, SLANG_NUM_BINDINGS, samplers);
|
||||
context->lpVtbl->PSSetSamplers(context, 0,
|
||||
SLANG_NUM_BINDINGS, samplers);
|
||||
}
|
||||
|
||||
if (d3d10->pass[i].rt.handle)
|
||||
{
|
||||
context->lpVtbl->OMSetRenderTargets(context, 1,
|
||||
&d3d10->pass[i].rt.rt_view, NULL);
|
||||
context->lpVtbl->RSSetViewports(context, 1, &d3d10->pass[i].viewport);
|
||||
context->lpVtbl->RSSetViewports(context, 1,
|
||||
&d3d10->pass[i].viewport);
|
||||
|
||||
context->lpVtbl->Draw(context, 4, 0);
|
||||
texture = &d3d10->pass[i].rt;
|
||||
@ -2373,7 +2416,8 @@ static bool d3d10_gfx_frame(
|
||||
context->lpVtbl->PSSetShaderResources(context, 0, 1, &texture->view);
|
||||
context->lpVtbl->PSSetSamplers(context, 0, 1,
|
||||
&d3d10->samplers[RARCH_FILTER_UNSPEC][RARCH_WRAP_DEFAULT]);
|
||||
context->lpVtbl->VSSetConstantBuffers(context, 0, 1, &d3d10->frame.ubo);
|
||||
context->lpVtbl->VSSetConstantBuffers(context, 0, 1,
|
||||
&d3d10->frame.ubo);
|
||||
}
|
||||
|
||||
context->lpVtbl->ClearRenderTargetView(context, d3d10->renderTargetView,
|
||||
@ -2405,14 +2449,16 @@ static bool d3d10_gfx_frame(
|
||||
|
||||
d3d10_set_shader(context, &d3d10->shaders[VIDEO_SHADER_STOCK_BLEND]);
|
||||
context->lpVtbl->IASetVertexBuffers(
|
||||
context, 0, 1, (D3D10Buffer* const)&d3d10->menu.vbo, &stride, &offset);
|
||||
context, 0, 1, (D3D10Buffer* const)&d3d10->menu.vbo,
|
||||
&stride, &offset);
|
||||
context->lpVtbl->VSSetConstantBuffers(context, 0, 1, &d3d10->ubo);
|
||||
d3d10_set_texture_and_sampler(context, 0, &d3d10->menu.texture);
|
||||
context->lpVtbl->Draw(context, 4, 0);
|
||||
}
|
||||
|
||||
d3d10_set_shader(context, &d3d10->sprites.shader);
|
||||
context->lpVtbl->IASetPrimitiveTopology(context, D3D10_PRIMITIVE_TOPOLOGY_POINTLIST);
|
||||
context->lpVtbl->IASetPrimitiveTopology(context,
|
||||
D3D10_PRIMITIVE_TOPOLOGY_POINTLIST);
|
||||
context->lpVtbl->VSSetConstantBuffers(context, 0, 1, (ID3D10Buffer **
|
||||
const)&d3d10->ubo);
|
||||
context->lpVtbl->PSSetConstantBuffers(context, 0, 1, (ID3D10Buffer **
|
||||
@ -2435,7 +2481,8 @@ static bool d3d10_gfx_frame(
|
||||
stride = sizeof(d3d10_sprite_t);
|
||||
context->lpVtbl->RSSetViewports(context, 1, &d3d10->viewport);
|
||||
context->lpVtbl->IASetVertexBuffers(
|
||||
context, 0, 1, (D3D10Buffer* const)&d3d10->sprites.vbo, &stride, &offset);
|
||||
context, 0, 1, (D3D10Buffer* const)&d3d10->sprites.vbo,
|
||||
&stride, &offset);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -2455,7 +2502,8 @@ static bool d3d10_gfx_frame(
|
||||
D3D10_DEFAULT_SAMPLE_MASK);
|
||||
stride = sizeof(d3d10_sprite_t);
|
||||
context->lpVtbl->IASetVertexBuffers(
|
||||
context, 0, 1, (D3D10Buffer* const)&d3d10->sprites.vbo, &stride, &offset);
|
||||
context, 0, 1, (D3D10Buffer* const)&d3d10->sprites.vbo,
|
||||
&stride, &offset);
|
||||
font_driver_render_msg(d3d10,
|
||||
stat_text,
|
||||
(const struct font_params*)osd_params, NULL);
|
||||
@ -2476,13 +2524,16 @@ static bool d3d10_gfx_frame(
|
||||
if (msg && *msg)
|
||||
{
|
||||
UINT offset = 0, stride = 0;
|
||||
d3d10->device->lpVtbl->RSSetViewports(d3d10->device, 1, &d3d10->viewport);
|
||||
d3d10->device->lpVtbl->RSSetViewports(d3d10->device,
|
||||
1, &d3d10->viewport);
|
||||
d3d10->device->lpVtbl->OMSetBlendState(d3d10->device,
|
||||
d3d10->blend_enable, NULL,
|
||||
D3D10_DEFAULT_SAMPLE_MASK);
|
||||
stride = sizeof(d3d10_sprite_t);
|
||||
d3d10->device->lpVtbl->IASetVertexBuffers(
|
||||
d3d10->device, 0, 1, (D3D10Buffer* const)&d3d10->sprites.vbo, &stride, &offset);
|
||||
d3d10->device, 0, 1,
|
||||
(D3D10Buffer* const)&d3d10->sprites.vbo,
|
||||
&stride, &offset);
|
||||
font_driver_render_msg(d3d10, msg, NULL, NULL);
|
||||
}
|
||||
d3d10->flags &= ~D3D10_ST_FLAG_SPRITES_ENABLE;
|
||||
@ -2518,7 +2569,7 @@ static void d3d10_gfx_set_nonblock_state(void* data, bool toggle,
|
||||
|
||||
static bool d3d10_gfx_alive(void* data)
|
||||
{
|
||||
bool quit;
|
||||
bool quit;
|
||||
bool resize_chain = false;
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
|
||||
@ -2560,7 +2611,8 @@ static void d3d10_gfx_viewport_info(void* data, struct video_viewport* vp)
|
||||
}
|
||||
|
||||
static void d3d10_set_menu_texture_frame(
|
||||
void* data, const void* frame, bool rgb32, unsigned width, unsigned height, float alpha)
|
||||
void* data, const void* frame, bool rgb32,
|
||||
unsigned width, unsigned height, float alpha)
|
||||
{
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
settings_t* settings = config_get_ptr();
|
||||
@ -2568,8 +2620,8 @@ static void d3d10_set_menu_texture_frame(
|
||||
(DXGI_FORMAT)DXGI_FORMAT_EX_A4R4G4B4_UNORM;
|
||||
|
||||
if (
|
||||
d3d10->menu.texture.desc.Width != width ||
|
||||
d3d10->menu.texture.desc.Height != height)
|
||||
(d3d10->menu.texture.desc.Width != width)
|
||||
|| (d3d10->menu.texture.desc.Height != height))
|
||||
{
|
||||
d3d10->menu.texture.desc.Format = format;
|
||||
d3d10->menu.texture.desc.Width = width;
|
||||
@ -2604,15 +2656,13 @@ static void d3d10_set_menu_texture_enable(
|
||||
d3d10->flags &= ~D3D10_ST_FLAG_MENU_FULLSCREEN;
|
||||
}
|
||||
|
||||
static void d3d10_gfx_set_aspect_ratio(void* data, unsigned aspect_ratio_idx)
|
||||
static void d3d10_gfx_set_aspect_ratio(void* data,
|
||||
unsigned aspect_ratio_idx)
|
||||
{
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
|
||||
if (!d3d10)
|
||||
return;
|
||||
|
||||
d3d10->flags |= D3D10_ST_FLAG_RESIZE_VIEWPORT
|
||||
| D3D10_ST_FLAG_KEEP_ASPECT;
|
||||
if (d3d10)
|
||||
d3d10->flags |= D3D10_ST_FLAG_RESIZE_VIEWPORT
|
||||
| D3D10_ST_FLAG_KEEP_ASPECT;
|
||||
}
|
||||
|
||||
static void d3d10_gfx_apply_state_changes(void* data)
|
||||
@ -2636,7 +2686,8 @@ static void d3d10_gfx_set_osd_msg(
|
||||
}
|
||||
|
||||
static uintptr_t d3d10_gfx_load_texture(
|
||||
void* video_data, void* data, bool threaded, enum texture_filter_type filter_type)
|
||||
void* video_data, void* data, bool threaded,
|
||||
enum texture_filter_type filter_type)
|
||||
{
|
||||
d3d10_texture_t* texture = NULL;
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)video_data;
|
||||
@ -2676,7 +2727,8 @@ static uintptr_t d3d10_gfx_load_texture(
|
||||
if (texture->staging)
|
||||
d3d10_update_texture(
|
||||
d3d10->device,
|
||||
image->width, image->height, 0, DXGI_FORMAT_B8G8R8A8_UNORM, image->pixels,
|
||||
image->width, image->height, 0,
|
||||
DXGI_FORMAT_B8G8R8A8_UNORM, image->pixels,
|
||||
texture);
|
||||
|
||||
return (uintptr_t)texture;
|
||||
@ -2697,10 +2749,12 @@ static void d3d10_gfx_unload_texture(void* data,
|
||||
|
||||
#if 0
|
||||
static bool
|
||||
d3d10_get_hw_render_interface(void* data, const struct retro_hw_render_interface** iface)
|
||||
d3d10_get_hw_render_interface(void* data,
|
||||
const struct retro_hw_render_interface** iface)
|
||||
{
|
||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||
*iface = (const struct retro_hw_render_interface*)&d3d10->hw.iface;
|
||||
*iface = (const struct retro_hw_render_interface*)
|
||||
&d3d10->hw.iface;
|
||||
return d3d10->hw.enable;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user