mirror of
https://github.com/libretro/RetroArch
synced 2025-04-16 08:43:10 +00:00
Update MSVC 2012 solution
This commit is contained in:
parent
12539f310d
commit
a1d5b0fd03
@ -804,6 +804,7 @@ RETRO_END_DECLS
|
|||||||
|
|
||||||
#ifndef PERF_START
|
#ifndef PERF_START
|
||||||
#define PERF_START() \
|
#define PERF_START() \
|
||||||
|
{ \
|
||||||
static struct retro_perf_counter perfcounter = { __FUNCTION__ }; \
|
static struct retro_perf_counter perfcounter = { __FUNCTION__ }; \
|
||||||
LARGE_INTEGER start, stop; \
|
LARGE_INTEGER start, stop; \
|
||||||
rarch_perf_register(&perfcounter); \
|
rarch_perf_register(&perfcounter); \
|
||||||
@ -812,7 +813,8 @@ RETRO_END_DECLS
|
|||||||
|
|
||||||
#define PERF_STOP() \
|
#define PERF_STOP() \
|
||||||
QueryPerformanceCounter(&stop); \
|
QueryPerformanceCounter(&stop); \
|
||||||
perfcounter.total += stop.QuadPart - start.QuadPart
|
perfcounter.total += stop.QuadPart - start.QuadPart; \
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#define PERF_START()
|
#define PERF_START()
|
||||||
|
@ -1969,11 +1969,12 @@ static bool vulkan_create_display_surface(gfx_ctx_vulkan_data_t *vk,
|
|||||||
retry:
|
retry:
|
||||||
for (dpy = 0; dpy < display_count; dpy++)
|
for (dpy = 0; dpy < display_count; dpy++)
|
||||||
{
|
{
|
||||||
|
VkDisplayKHR display;
|
||||||
if (monitor_index != 0 && (monitor_index - 1) != dpy)
|
if (monitor_index != 0 && (monitor_index - 1) != dpy)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
VkDisplayKHR display = displays[dpy].display;
|
display = displays[dpy].display;
|
||||||
best_mode = VK_NULL_HANDLE;
|
best_mode = VK_NULL_HANDLE;
|
||||||
best_plane = UINT32_MAX;
|
best_plane = UINT32_MAX;
|
||||||
|
|
||||||
if (vkGetDisplayModePropertiesKHR(vk->context.gpu,
|
if (vkGetDisplayModePropertiesKHR(vk->context.gpu,
|
||||||
|
@ -43,10 +43,10 @@ static void d3d10_free_overlays(d3d10_video_t* d3d10)
|
|||||||
Release(d3d10->overlays.vbo);
|
Release(d3d10->overlays.vbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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_sprite_t* sprites = NULL;
|
||||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||||
|
|
||||||
if (!d3d10)
|
if (!d3d10)
|
||||||
@ -54,16 +54,16 @@ d3d10_overlay_vertex_geom(void* data, unsigned index, float x, float y, float w,
|
|||||||
|
|
||||||
D3D10MapBuffer(d3d10->overlays.vbo,
|
D3D10MapBuffer(d3d10->overlays.vbo,
|
||||||
D3D10_MAP_WRITE_NO_OVERWRITE, 0, (void**)&sprites);
|
D3D10_MAP_WRITE_NO_OVERWRITE, 0, (void**)&sprites);
|
||||||
sprites[index].pos.x = x;
|
sprites[index].pos.x = x;
|
||||||
sprites[index].pos.y = y;
|
sprites[index].pos.y = y;
|
||||||
sprites[index].pos.w = w;
|
sprites[index].pos.w = w;
|
||||||
sprites[index].pos.h = h;
|
sprites[index].pos.h = h;
|
||||||
D3D10UnmapBuffer(d3d10->overlays.vbo);
|
D3D10UnmapBuffer(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_sprite_t* sprites = NULL;
|
||||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||||
|
|
||||||
if (!d3d10)
|
if (!d3d10)
|
||||||
@ -72,16 +72,16 @@ static void d3d10_overlay_tex_geom(void* data, unsigned index, float u, float v,
|
|||||||
D3D10MapBuffer(
|
D3D10MapBuffer(
|
||||||
d3d10->overlays.vbo,
|
d3d10->overlays.vbo,
|
||||||
D3D10_MAP_WRITE_NO_OVERWRITE, 0, (void**)&sprites);
|
D3D10_MAP_WRITE_NO_OVERWRITE, 0, (void**)&sprites);
|
||||||
sprites[index].coords.u = u;
|
sprites[index].coords.u = u;
|
||||||
sprites[index].coords.v = v;
|
sprites[index].coords.v = v;
|
||||||
sprites[index].coords.w = w;
|
sprites[index].coords.w = w;
|
||||||
sprites[index].coords.h = h;
|
sprites[index].coords.h = h;
|
||||||
D3D10UnmapBuffer(d3d10->overlays.vbo);
|
D3D10UnmapBuffer(d3d10->overlays.vbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void d3d10_overlay_set_alpha(void* data, unsigned index, float mod)
|
static void d3d10_overlay_set_alpha(void* data, unsigned index, float mod)
|
||||||
{
|
{
|
||||||
d3d10_sprite_t* sprites = NULL;
|
d3d10_sprite_t* sprites = NULL;
|
||||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||||
|
|
||||||
if (!d3d10)
|
if (!d3d10)
|
||||||
@ -90,10 +90,10 @@ static void d3d10_overlay_set_alpha(void* data, unsigned index, float mod)
|
|||||||
D3D10MapBuffer(
|
D3D10MapBuffer(
|
||||||
d3d10->overlays.vbo,
|
d3d10->overlays.vbo,
|
||||||
D3D10_MAP_WRITE_NO_OVERWRITE, 0, (void**)&sprites);
|
D3D10_MAP_WRITE_NO_OVERWRITE, 0, (void**)&sprites);
|
||||||
sprites[index].colors[0] = DXGI_COLOR_RGBA(0xFF, 0xFF, 0xFF, mod * 0xFF);
|
sprites[index].colors[0] = DXGI_COLOR_RGBA(0xFF, 0xFF, 0xFF, mod * 0xFF);
|
||||||
sprites[index].colors[1] = sprites[index].colors[0];
|
sprites[index].colors[1] = sprites[index].colors[0];
|
||||||
sprites[index].colors[2] = sprites[index].colors[0];
|
sprites[index].colors[2] = sprites[index].colors[0];
|
||||||
sprites[index].colors[3] = sprites[index].colors[0];
|
sprites[index].colors[3] = sprites[index].colors[0];
|
||||||
D3D10UnmapBuffer(d3d10->overlays.vbo);
|
D3D10UnmapBuffer(d3d10->overlays.vbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ static void d3d10_set_filtering(void* data, unsigned index, bool smooth)
|
|||||||
|
|
||||||
static void d3d10_gfx_set_rotation(void* data, unsigned rotation)
|
static void d3d10_gfx_set_rotation(void* data, unsigned rotation)
|
||||||
{
|
{
|
||||||
math_matrix_4x4 rot;
|
math_matrix_4x4 rot;
|
||||||
void* mapped_ubo = NULL;
|
void* mapped_ubo = NULL;
|
||||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ static void d3d10_update_viewport(void* data, bool force_full)
|
|||||||
d3d10->frame.viewport.MaxDepth = 1.0f;
|
d3d10->frame.viewport.MaxDepth = 1.0f;
|
||||||
|
|
||||||
if (d3d10->shader_preset && (d3d10->frame.output_size.x != d3d10->vp.width ||
|
if (d3d10->shader_preset && (d3d10->frame.output_size.x != d3d10->vp.width ||
|
||||||
d3d10->frame.output_size.y != d3d10->vp.height))
|
d3d10->frame.output_size.y != d3d10->vp.height))
|
||||||
d3d10->resize_render_targets = true;
|
d3d10->resize_render_targets = true;
|
||||||
|
|
||||||
d3d10->frame.output_size.x = d3d10->vp.width;
|
d3d10->frame.output_size.x = d3d10->vp.width;
|
||||||
@ -375,16 +375,16 @@ static bool d3d10_gfx_set_shader(void* data,
|
|||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
|
|
||||||
if (!slang_process(
|
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))
|
&d3d10->pass[i].semantics))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
{
|
{
|
||||||
static const D3D10_INPUT_ELEMENT_DESC desc[] = {
|
static const D3D10_INPUT_ELEMENT_DESC desc[] = {
|
||||||
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_vertex_t, position),
|
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_vertex_t, position),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "TEXCOORD", 1, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_vertex_t, texcoord),
|
{ "TEXCOORD", 1, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_vertex_t, texcoord),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
};
|
};
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
bool save_hlsl = true;
|
bool save_hlsl = true;
|
||||||
@ -406,13 +406,13 @@ static bool d3d10_gfx_set_shader(void* data,
|
|||||||
strlcat(ps_path, ps_ext, sizeof(ps_path));
|
strlcat(ps_path, ps_ext, sizeof(ps_path));
|
||||||
|
|
||||||
if (!d3d10_init_shader(
|
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))
|
&d3d10->pass[i].shader))
|
||||||
save_hlsl = true;
|
save_hlsl = true;
|
||||||
|
|
||||||
if (!d3d10_init_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))
|
&d3d10->pass[i].shader))
|
||||||
save_hlsl = true;
|
save_hlsl = true;
|
||||||
|
|
||||||
if (save_hlsl)
|
if (save_hlsl)
|
||||||
@ -543,16 +543,16 @@ static void d3d10_gfx_free(void* data)
|
|||||||
font_driver_free_osd();
|
font_driver_free_osd();
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (video_driver_is_video_cache_context())
|
if (video_driver_is_video_cache_context())
|
||||||
{
|
{
|
||||||
cached_device_d3d10 = d3d10->device;
|
cached_device_d3d10 = d3d10->device;
|
||||||
cached_context = d3d10->context;
|
cached_context = d3d10->context;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
Release(d3d10->device);
|
Release(d3d10->device);
|
||||||
}
|
}
|
||||||
|
|
||||||
win32_monitor_from_window();
|
win32_monitor_from_window();
|
||||||
win32_destroy_window();
|
win32_destroy_window();
|
||||||
@ -590,7 +590,7 @@ d3d10_gfx_init(const video_info_t* video,
|
|||||||
d3d10->vp.full_height =
|
d3d10->vp.full_height =
|
||||||
current_mon.rcMonitor.bottom - current_mon.rcMonitor.top;
|
current_mon.rcMonitor.bottom - current_mon.rcMonitor.top;
|
||||||
|
|
||||||
if (!win32_set_video_mode(d3d10,
|
if (!win32_set_video_mode(d3d10,
|
||||||
d3d10->vp.full_width, d3d10->vp.full_height, video->fullscreen))
|
d3d10->vp.full_width, d3d10->vp.full_height, video->fullscreen))
|
||||||
{
|
{
|
||||||
RARCH_ERR("[D3D10]: win32_set_video_mode failed.\n");
|
RARCH_ERR("[D3D10]: win32_set_video_mode failed.\n");
|
||||||
@ -613,9 +613,9 @@ d3d10_gfx_init(const video_info_t* video,
|
|||||||
desc.SampleDesc.Count = 1;
|
desc.SampleDesc.Count = 1;
|
||||||
desc.SampleDesc.Quality = 0;
|
desc.SampleDesc.Quality = 0;
|
||||||
desc.Windowed = TRUE;
|
desc.Windowed = TRUE;
|
||||||
desc.SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL;
|
desc.SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL;
|
||||||
#if 0
|
#if 0
|
||||||
desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
|
desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
|
||||||
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
|
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
|
||||||
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
|
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
|
||||||
#endif
|
#endif
|
||||||
@ -625,9 +625,9 @@ d3d10_gfx_init(const video_info_t* video,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (FAILED(D3D10CreateDeviceAndSwapChain(
|
if (FAILED(D3D10CreateDeviceAndSwapChain(
|
||||||
NULL, D3D10_DRIVER_TYPE_HARDWARE,
|
NULL, D3D10_DRIVER_TYPE_HARDWARE,
|
||||||
NULL, flags, D3D10_SDK_VERSION, &desc,
|
NULL, flags, D3D10_SDK_VERSION, &desc,
|
||||||
(IDXGISwapChain**)&d3d10->swapChain, &d3d10->device)))
|
(IDXGISwapChain**)&d3d10->swapChain, &d3d10->device)))
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -639,7 +639,7 @@ d3d10_gfx_init(const video_info_t* video,
|
|||||||
Release(backBuffer);
|
Release(backBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
D3D10SetRenderTargets(d3d10->device, 1, &d3d10->renderTargetView, NULL);
|
D3D10SetRenderTargets(d3d10->device, 1, &d3d10->renderTargetView, NULL);
|
||||||
|
|
||||||
video_driver_set_size(&d3d10->vp.full_width, &d3d10->vp.full_height);
|
video_driver_set_size(&d3d10->vp.full_width, &d3d10->vp.full_height);
|
||||||
d3d10->viewport.Width = d3d10->vp.full_width;
|
d3d10->viewport.Width = d3d10->vp.full_width;
|
||||||
@ -684,7 +684,7 @@ d3d10_gfx_init(const video_info_t* video,
|
|||||||
d3d10_gfx_set_rotation(d3d10, 0);
|
d3d10_gfx_set_rotation(d3d10, 0);
|
||||||
|
|
||||||
{
|
{
|
||||||
D3D10_SAMPLER_DESC desc = { D3D10_FILTER_MIN_MAG_MIP_POINT };
|
D3D10_SAMPLER_DESC desc = { D3D10_FILTER_MIN_MAG_MIP_POINT };
|
||||||
desc.MaxAnisotropy = 1;
|
desc.MaxAnisotropy = 1;
|
||||||
desc.ComparisonFunc = D3D10_COMPARISON_NEVER;
|
desc.ComparisonFunc = D3D10_COMPARISON_NEVER;
|
||||||
desc.MinLOD = -D3D10_FLOAT32_MAX;
|
desc.MinLOD = -D3D10_FLOAT32_MAX;
|
||||||
@ -756,52 +756,52 @@ d3d10_gfx_init(const video_info_t* video,
|
|||||||
{
|
{
|
||||||
D3D10_INPUT_ELEMENT_DESC desc[] = {
|
D3D10_INPUT_ELEMENT_DESC desc[] = {
|
||||||
{ "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_vertex_t, position),
|
{ "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_vertex_t, position),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_vertex_t, texcoord),
|
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_vertex_t, texcoord),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d10_vertex_t, color),
|
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d10_vertex_t, color),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char shader[] =
|
static const char shader[] =
|
||||||
#include "d3d_shaders/opaque_sm5.hlsl.h"
|
#include "d3d_shaders/opaque_sm5.hlsl.h"
|
||||||
;
|
;
|
||||||
|
|
||||||
if (!d3d10_init_shader(
|
if (!d3d10_init_shader(
|
||||||
d3d10->device, shader, sizeof(shader), NULL, "VSMain", "PSMain", NULL, desc,
|
d3d10->device, shader, sizeof(shader), NULL, "VSMain", "PSMain", NULL, desc,
|
||||||
countof(desc), &d3d10->shaders[VIDEO_SHADER_STOCK_BLEND]))
|
countof(desc), &d3d10->shaders[VIDEO_SHADER_STOCK_BLEND]))
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
D3D10_INPUT_ELEMENT_DESC desc[] = {
|
D3D10_INPUT_ELEMENT_DESC desc[] = {
|
||||||
{ "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d10_sprite_t, pos),
|
{ "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d10_sprite_t, pos),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d10_sprite_t, coords),
|
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d10_sprite_t, coords),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d10_sprite_t, colors[0]),
|
{ "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d10_sprite_t, colors[0]),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 1, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d10_sprite_t, colors[1]),
|
{ "COLOR", 1, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d10_sprite_t, colors[1]),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 2, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d10_sprite_t, colors[2]),
|
{ "COLOR", 2, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d10_sprite_t, colors[2]),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 3, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d10_sprite_t, colors[3]),
|
{ "COLOR", 3, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d10_sprite_t, colors[3]),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "PARAMS", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_sprite_t, params),
|
{ "PARAMS", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d10_sprite_t, params),
|
||||||
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
D3D10_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char shader[] =
|
static const char shader[] =
|
||||||
#include "d3d_shaders/sprite_sm4.hlsl.h"
|
#include "d3d_shaders/sprite_sm4.hlsl.h"
|
||||||
;
|
;
|
||||||
|
|
||||||
if (!d3d10_init_shader(
|
if (!d3d10_init_shader(
|
||||||
d3d10->device, shader, sizeof(shader), NULL, "VSMain", "PSMain", "GSMain", desc,
|
d3d10->device, shader, sizeof(shader), NULL, "VSMain", "PSMain", "GSMain", desc,
|
||||||
countof(desc), &d3d10->sprites.shader))
|
countof(desc), &d3d10->sprites.shader))
|
||||||
goto error;
|
goto error;
|
||||||
if (!d3d10_init_shader(
|
if (!d3d10_init_shader(
|
||||||
d3d10->device, shader, sizeof(shader), NULL, "VSMain", "PSMainA8", "GSMain", desc,
|
d3d10->device, shader, sizeof(shader), NULL, "VSMain", "PSMainA8", "GSMain", desc,
|
||||||
countof(desc), &d3d10->sprites.shader_font))
|
countof(desc), &d3d10->sprites.shader_font))
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -873,7 +873,7 @@ d3d10_gfx_init(const video_info_t* video,
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
D3D10_BLEND_DESC blend_desc = { 0 };
|
D3D10_BLEND_DESC blend_desc = { 0 };
|
||||||
|
|
||||||
blend_desc.AlphaToCoverageEnable = FALSE;
|
blend_desc.AlphaToCoverageEnable = FALSE;
|
||||||
blend_desc.BlendEnable[0] = TRUE;
|
blend_desc.BlendEnable[0] = TRUE;
|
||||||
@ -917,7 +917,7 @@ d3d10_gfx_init(const video_info_t* video,
|
|||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_DIRECT3D &&
|
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_DIRECT3D &&
|
||||||
video_driver_get_hw_context()->version_major == 11)
|
video_driver_get_hw_context()->version_major == 11)
|
||||||
{
|
{
|
||||||
d3d10->hw.enable = true;
|
d3d10->hw.enable = true;
|
||||||
d3d10->hw.iface.interface_type = RETRO_HW_RENDER_INTERFACE_D3D10;
|
d3d10->hw.iface.interface_type = RETRO_HW_RENDER_INTERFACE_D3D10;
|
||||||
@ -1023,7 +1023,7 @@ static void d3d10_init_render_targets(d3d10_video_t* d3d10,
|
|||||||
RARCH_LOG("[D3D10]: Updating framebuffer size %u x %u.\n", width, height);
|
RARCH_LOG("[D3D10]: Updating framebuffer size %u x %u.\n", width, height);
|
||||||
|
|
||||||
if ((i != (d3d10->shader_preset->passes - 1)) || (width != d3d10->vp.width) ||
|
if ((i != (d3d10->shader_preset->passes - 1)) || (width != d3d10->vp.width) ||
|
||||||
(height != d3d10->vp.height))
|
(height != d3d10->vp.height))
|
||||||
{
|
{
|
||||||
d3d10->pass[i].viewport.Width = width;
|
d3d10->pass[i].viewport.Width = width;
|
||||||
d3d10->pass[i].viewport.Height = height;
|
d3d10->pass[i].viewport.Height = height;
|
||||||
@ -1104,7 +1104,7 @@ static bool d3d10_gfx_frame(
|
|||||||
#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)
|
if (d3d10->resize_viewport)
|
||||||
#endif
|
#endif
|
||||||
d3d10_update_viewport(d3d10, false);
|
d3d10_update_viewport(d3d10, false);
|
||||||
|
|
||||||
D3D10SetPrimitiveTopology(context, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
D3D10SetPrimitiveTopology(context, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||||
|
|
||||||
@ -1121,7 +1121,7 @@ static bool d3d10_gfx_frame(
|
|||||||
if (d3d10->shader_preset)
|
if (d3d10->shader_preset)
|
||||||
{
|
{
|
||||||
if (d3d10->frame.texture[0].desc.Width != width ||
|
if (d3d10->frame.texture[0].desc.Width != width ||
|
||||||
d3d10->frame.texture[0].desc.Height != height)
|
d3d10->frame.texture[0].desc.Height != height)
|
||||||
d3d10->resize_render_targets = true;
|
d3d10->resize_render_targets = true;
|
||||||
|
|
||||||
if (d3d10->resize_render_targets)
|
if (d3d10->resize_render_targets)
|
||||||
@ -1157,7 +1157,7 @@ static bool d3d10_gfx_frame(
|
|||||||
|
|
||||||
/* either no history, or we moved a texture of a different size in the front slot */
|
/* either no history, or we moved a texture of a different size in the front slot */
|
||||||
if (d3d10->frame.texture[0].desc.Width != width ||
|
if (d3d10->frame.texture[0].desc.Width != width ||
|
||||||
d3d10->frame.texture[0].desc.Height != height)
|
d3d10->frame.texture[0].desc.Height != height)
|
||||||
{
|
{
|
||||||
d3d10->frame.texture[0].desc.Width = width;
|
d3d10->frame.texture[0].desc.Width = width;
|
||||||
d3d10->frame.texture[0].desc.Height = height;
|
d3d10->frame.texture[0].desc.Height = height;
|
||||||
@ -1200,7 +1200,7 @@ static bool d3d10_gfx_frame(
|
|||||||
|
|
||||||
if (d3d10->shader_preset->pass[i].frame_count_mod)
|
if (d3d10->shader_preset->pass[i].frame_count_mod)
|
||||||
d3d10->pass[i].frame_count =
|
d3d10->pass[i].frame_count =
|
||||||
frame_count % d3d10->shader_preset->pass[i].frame_count_mod;
|
frame_count % d3d10->shader_preset->pass[i].frame_count_mod;
|
||||||
else
|
else
|
||||||
d3d10->pass[i].frame_count = frame_count;
|
d3d10->pass[i].frame_count = frame_count;
|
||||||
|
|
||||||
@ -1328,19 +1328,19 @@ static bool d3d10_gfx_frame(
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
if (video_info->statistics_show)
|
if (video_info->statistics_show)
|
||||||
{
|
|
||||||
struct font_params* osd_params = (struct font_params*)&video_info->osd_stat_params;
|
|
||||||
|
|
||||||
if (osd_params)
|
|
||||||
{
|
{
|
||||||
D3D10SetViewports(context, 1, &d3d10->viewport);
|
struct font_params* osd_params = (struct font_params*)&video_info->osd_stat_params;
|
||||||
D3D10SetBlendState(d3d10->device, d3d10->blend_enable, NULL, D3D10_DEFAULT_SAMPLE_MASK);
|
|
||||||
D3D10SetVertexBuffer(context, 0, d3d10->sprites.vbo, sizeof(d3d10_sprite_t), 0);
|
if (osd_params)
|
||||||
font_driver_render_msg(
|
{
|
||||||
video_info, NULL, video_info->stat_text,
|
D3D10SetViewports(context, 1, &d3d10->viewport);
|
||||||
(const struct font_params*)&video_info->osd_stat_params);
|
D3D10SetBlendState(d3d10->device, d3d10->blend_enable, NULL, D3D10_DEFAULT_SAMPLE_MASK);
|
||||||
|
D3D10SetVertexBuffer(context, 0, d3d10->sprites.vbo, sizeof(d3d10_sprite_t), 0);
|
||||||
|
font_driver_render_msg(
|
||||||
|
video_info, NULL, video_info->stat_text,
|
||||||
|
(const struct font_params*)&video_info->osd_stat_params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_OVERLAY
|
#ifdef HAVE_OVERLAY
|
||||||
if (d3d10->overlays.enabled)
|
if (d3d10->overlays.enabled)
|
||||||
@ -1383,7 +1383,7 @@ static void d3d10_gfx_set_nonblock_state(void* data, bool toggle)
|
|||||||
{
|
{
|
||||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||||
|
|
||||||
if (!d3d10)
|
if (!d3d10)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
d3d10->vsync = !toggle;
|
d3d10->vsync = !toggle;
|
||||||
@ -1471,7 +1471,7 @@ static void d3d10_set_menu_texture_enable(void* data, bool state, bool full_scre
|
|||||||
{
|
{
|
||||||
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||||
|
|
||||||
if (!d3d10)
|
if (!d3d10)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
d3d10->menu.enabled = state;
|
d3d10->menu.enabled = state;
|
||||||
@ -1571,7 +1571,7 @@ static void d3d10_gfx_unload_texture(void* data, uintptr_t handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
static bool
|
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;
|
d3d10_video_t* d3d10 = (d3d10_video_t*)data;
|
||||||
|
@ -55,7 +55,7 @@ static void d3d11_free_overlays(d3d11_video_t* d3d11)
|
|||||||
Release(d3d11->overlays.vbo);
|
Release(d3d11->overlays.vbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
d3d11_overlay_vertex_geom(void* data, unsigned index, float x, float y, float w, float h)
|
d3d11_overlay_vertex_geom(void* data, unsigned index, float x, float y, float w, float h)
|
||||||
{
|
{
|
||||||
D3D11_MAPPED_SUBRESOURCE mapped_vbo;
|
D3D11_MAPPED_SUBRESOURCE mapped_vbo;
|
||||||
@ -230,6 +230,7 @@ static void d3d11_set_filtering(void* data, unsigned index, bool smooth)
|
|||||||
static void d3d11_gfx_set_rotation(void* data, unsigned rotation)
|
static void d3d11_gfx_set_rotation(void* data, unsigned rotation)
|
||||||
{
|
{
|
||||||
math_matrix_4x4 rot;
|
math_matrix_4x4 rot;
|
||||||
|
D3D11_MAPPED_SUBRESOURCE mapped_ubo;
|
||||||
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
|
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
|
||||||
|
|
||||||
if (!d3d11)
|
if (!d3d11)
|
||||||
@ -238,7 +239,6 @@ static void d3d11_gfx_set_rotation(void* data, unsigned rotation)
|
|||||||
matrix_4x4_rotate_z(rot, rotation * (M_PI / 2.0f));
|
matrix_4x4_rotate_z(rot, rotation * (M_PI / 2.0f));
|
||||||
matrix_4x4_multiply(d3d11->mvp, rot, d3d11->ubo_values.mvp);
|
matrix_4x4_multiply(d3d11->mvp, rot, d3d11->ubo_values.mvp);
|
||||||
|
|
||||||
D3D11_MAPPED_SUBRESOURCE mapped_ubo;
|
|
||||||
D3D11MapBuffer(d3d11->context, d3d11->frame.ubo, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped_ubo);
|
D3D11MapBuffer(d3d11->context, d3d11->frame.ubo, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped_ubo);
|
||||||
*(math_matrix_4x4*)mapped_ubo.pData = d3d11->mvp;
|
*(math_matrix_4x4*)mapped_ubo.pData = d3d11->mvp;
|
||||||
D3D11UnmapBuffer(d3d11->context, d3d11->frame.ubo, 0);
|
D3D11UnmapBuffer(d3d11->context, d3d11->frame.ubo, 0);
|
||||||
@ -258,7 +258,7 @@ static void d3d11_update_viewport(void* data, bool force_full)
|
|||||||
d3d11->frame.viewport.MaxDepth = 1.0f;
|
d3d11->frame.viewport.MaxDepth = 1.0f;
|
||||||
|
|
||||||
if (d3d11->shader_preset && (d3d11->frame.output_size.x != d3d11->vp.width ||
|
if (d3d11->shader_preset && (d3d11->frame.output_size.x != d3d11->vp.width ||
|
||||||
d3d11->frame.output_size.y != d3d11->vp.height))
|
d3d11->frame.output_size.y != d3d11->vp.height))
|
||||||
d3d11->resize_render_targets = true;
|
d3d11->resize_render_targets = true;
|
||||||
|
|
||||||
d3d11->frame.output_size.x = d3d11->vp.width;
|
d3d11->frame.output_size.x = d3d11->vp.width;
|
||||||
@ -318,8 +318,9 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
|
|||||||
{
|
{
|
||||||
#if defined(HAVE_SLANG) && defined(HAVE_SPIRV_CROSS)
|
#if defined(HAVE_SLANG) && defined(HAVE_SPIRV_CROSS)
|
||||||
unsigned i;
|
unsigned i;
|
||||||
d3d11_texture_t* source;
|
config_file_t* conf = NULL;
|
||||||
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
|
d3d11_texture_t* source = NULL;
|
||||||
|
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
|
||||||
|
|
||||||
if (!d3d11)
|
if (!d3d11)
|
||||||
return false;
|
return false;
|
||||||
@ -336,7 +337,7 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
config_file_t* conf = config_file_new(path);
|
conf = config_file_new(path);
|
||||||
|
|
||||||
if (!conf)
|
if (!conf)
|
||||||
return false;
|
return false;
|
||||||
@ -389,16 +390,16 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
|
|||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
|
|
||||||
if (!slang_process(
|
if (!slang_process(
|
||||||
d3d11->shader_preset, i, RARCH_SHADER_HLSL, 40, &semantics_map,
|
d3d11->shader_preset, i, RARCH_SHADER_HLSL, 40, &semantics_map,
|
||||||
&d3d11->pass[i].semantics))
|
&d3d11->pass[i].semantics))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
{
|
{
|
||||||
static const D3D11_INPUT_ELEMENT_DESC desc[] = {
|
static const D3D11_INPUT_ELEMENT_DESC desc[] = {
|
||||||
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_vertex_t, position),
|
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_vertex_t, position),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "TEXCOORD", 1, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_vertex_t, texcoord),
|
{ "TEXCOORD", 1, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_vertex_t, texcoord),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
};
|
};
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
bool save_hlsl = true;
|
bool save_hlsl = true;
|
||||||
@ -419,13 +420,13 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
|
|||||||
strlcat(ps_path, ps_ext, sizeof(ps_path));
|
strlcat(ps_path, ps_ext, sizeof(ps_path));
|
||||||
|
|
||||||
if (!d3d11_init_shader(
|
if (!d3d11_init_shader(
|
||||||
d3d11->device, vs_src, 0, vs_path, "main", NULL, NULL, desc, countof(desc),
|
d3d11->device, vs_src, 0, vs_path, "main", NULL, NULL, desc, countof(desc),
|
||||||
&d3d11->pass[i].shader))
|
&d3d11->pass[i].shader))
|
||||||
save_hlsl = true;
|
save_hlsl = true;
|
||||||
|
|
||||||
if (!d3d11_init_shader(
|
if (!d3d11_init_shader(
|
||||||
d3d11->device, ps_src, 0, ps_path, NULL, "main", NULL, NULL, 0,
|
d3d11->device, ps_src, 0, ps_path, NULL, "main", NULL, NULL, 0,
|
||||||
&d3d11->pass[i].shader))
|
&d3d11->pass[i].shader))
|
||||||
save_hlsl = true;
|
save_hlsl = true;
|
||||||
|
|
||||||
if (save_hlsl)
|
if (save_hlsl)
|
||||||
@ -552,24 +553,24 @@ static void d3d11_gfx_free(void* data)
|
|||||||
|
|
||||||
font_driver_free_osd();
|
font_driver_free_osd();
|
||||||
|
|
||||||
if (video_driver_is_video_cache_context())
|
if (video_driver_is_video_cache_context())
|
||||||
{
|
{
|
||||||
cached_device_d3d11 = d3d11->device;
|
cached_device_d3d11 = d3d11->device;
|
||||||
cached_context = d3d11->context;
|
cached_context = d3d11->context;
|
||||||
cached_supportedFeatureLevel = d3d11->supportedFeatureLevel;
|
cached_supportedFeatureLevel = d3d11->supportedFeatureLevel;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Release(d3d11->context);
|
Release(d3d11->context);
|
||||||
Release(d3d11->device);
|
Release(d3d11->device);
|
||||||
}
|
}
|
||||||
|
|
||||||
win32_monitor_from_window();
|
win32_monitor_from_window();
|
||||||
win32_destroy_window();
|
win32_destroy_window();
|
||||||
free(d3d11);
|
free(d3d11);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void*
|
static void*
|
||||||
d3d11_gfx_init(const video_info_t* video, const input_driver_t** input, void** input_data)
|
d3d11_gfx_init(const video_info_t* video, const input_driver_t** input, void** input_data)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
@ -609,12 +610,12 @@ d3d11_gfx_init(const video_info_t* video, const input_driver_t** input, void** i
|
|||||||
UINT flags = 0;
|
UINT flags = 0;
|
||||||
D3D_FEATURE_LEVEL
|
D3D_FEATURE_LEVEL
|
||||||
requested_feature_levels[] =
|
requested_feature_levels[] =
|
||||||
{
|
{
|
||||||
D3D_FEATURE_LEVEL_11_0,
|
D3D_FEATURE_LEVEL_11_0,
|
||||||
D3D_FEATURE_LEVEL_10_1,
|
D3D_FEATURE_LEVEL_10_1,
|
||||||
D3D_FEATURE_LEVEL_10_0,
|
D3D_FEATURE_LEVEL_10_0,
|
||||||
D3D_FEATURE_LEVEL_9_3
|
D3D_FEATURE_LEVEL_9_3
|
||||||
};
|
};
|
||||||
DXGI_SWAP_CHAIN_DESC desc = { 0 };
|
DXGI_SWAP_CHAIN_DESC desc = { 0 };
|
||||||
UINT number_feature_levels = ARRAY_SIZE(requested_feature_levels);
|
UINT number_feature_levels = ARRAY_SIZE(requested_feature_levels);
|
||||||
|
|
||||||
@ -642,39 +643,39 @@ d3d11_gfx_init(const video_info_t* video, const input_driver_t** input, void** i
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
flags |= D3D11_CREATE_DEVICE_DEBUG;
|
flags |= D3D11_CREATE_DEVICE_DEBUG;
|
||||||
#endif
|
#endif
|
||||||
if(cached_device_d3d11 && cached_context)
|
if(cached_device_d3d11 && cached_context)
|
||||||
{
|
{
|
||||||
IDXGIFactory* dxgiFactory = NULL;
|
IDXGIFactory* dxgiFactory = NULL;
|
||||||
IDXGIDevice* dxgiDevice = NULL;
|
IDXGIDevice* dxgiDevice = NULL;
|
||||||
IDXGIAdapter* adapter = NULL;
|
IDXGIAdapter* adapter = NULL;
|
||||||
|
|
||||||
d3d11->device = cached_device_d3d11;
|
d3d11->device = cached_device_d3d11;
|
||||||
d3d11->context = cached_context;
|
d3d11->context = cached_context;
|
||||||
d3d11->supportedFeatureLevel = cached_supportedFeatureLevel;
|
d3d11->supportedFeatureLevel = cached_supportedFeatureLevel;
|
||||||
|
|
||||||
d3d11->device->lpVtbl->QueryInterface(
|
d3d11->device->lpVtbl->QueryInterface(
|
||||||
d3d11->device, uuidof(IDXGIDevice), (void**)&dxgiDevice);
|
d3d11->device, uuidof(IDXGIDevice), (void**)&dxgiDevice);
|
||||||
dxgiDevice->lpVtbl->GetAdapter(dxgiDevice, &adapter);
|
dxgiDevice->lpVtbl->GetAdapter(dxgiDevice, &adapter);
|
||||||
adapter->lpVtbl->GetParent(
|
adapter->lpVtbl->GetParent(
|
||||||
adapter, uuidof(IDXGIFactory1), (void**)&dxgiFactory);
|
adapter, uuidof(IDXGIFactory1), (void**)&dxgiFactory);
|
||||||
dxgiFactory->lpVtbl->CreateSwapChain(
|
dxgiFactory->lpVtbl->CreateSwapChain(
|
||||||
dxgiFactory, (IUnknown*)d3d11->device,
|
dxgiFactory, (IUnknown*)d3d11->device,
|
||||||
&desc, (IDXGISwapChain**)&d3d11->swapChain);
|
&desc, (IDXGISwapChain**)&d3d11->swapChain);
|
||||||
|
|
||||||
dxgiFactory->lpVtbl->Release(dxgiFactory);
|
dxgiFactory->lpVtbl->Release(dxgiFactory);
|
||||||
adapter->lpVtbl->Release(adapter);
|
adapter->lpVtbl->Release(adapter);
|
||||||
dxgiDevice->lpVtbl->Release(dxgiDevice);
|
dxgiDevice->lpVtbl->Release(dxgiDevice);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (FAILED(D3D11CreateDeviceAndSwapChain(
|
if (FAILED(D3D11CreateDeviceAndSwapChain(
|
||||||
NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, flags,
|
NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, flags,
|
||||||
requested_feature_levels, number_feature_levels,
|
requested_feature_levels, number_feature_levels,
|
||||||
D3D11_SDK_VERSION, &desc,
|
D3D11_SDK_VERSION, &desc,
|
||||||
(IDXGISwapChain**)&d3d11->swapChain, &d3d11->device,
|
(IDXGISwapChain**)&d3d11->swapChain, &d3d11->device,
|
||||||
&d3d11->supportedFeatureLevel, &d3d11->context)))
|
&d3d11->supportedFeatureLevel, &d3d11->context)))
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -801,52 +802,52 @@ d3d11_gfx_init(const video_info_t* video, const input_driver_t** input, void** i
|
|||||||
{
|
{
|
||||||
D3D11_INPUT_ELEMENT_DESC desc[] = {
|
D3D11_INPUT_ELEMENT_DESC desc[] = {
|
||||||
{ "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_vertex_t, position),
|
{ "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_vertex_t, position),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_vertex_t, texcoord),
|
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_vertex_t, texcoord),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d11_vertex_t, color),
|
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d11_vertex_t, color),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char shader[] =
|
static const char shader[] =
|
||||||
#include "d3d_shaders/opaque_sm5.hlsl.h"
|
#include "d3d_shaders/opaque_sm5.hlsl.h"
|
||||||
;
|
;
|
||||||
|
|
||||||
if (!d3d11_init_shader(
|
if (!d3d11_init_shader(
|
||||||
d3d11->device, shader, sizeof(shader), NULL, "VSMain", "PSMain", NULL, desc,
|
d3d11->device, shader, sizeof(shader), NULL, "VSMain", "PSMain", NULL, desc,
|
||||||
countof(desc), &d3d11->shaders[VIDEO_SHADER_STOCK_BLEND]))
|
countof(desc), &d3d11->shaders[VIDEO_SHADER_STOCK_BLEND]))
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
D3D11_INPUT_ELEMENT_DESC desc[] = {
|
D3D11_INPUT_ELEMENT_DESC desc[] = {
|
||||||
{ "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d11_sprite_t, pos),
|
{ "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d11_sprite_t, pos),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d11_sprite_t, coords),
|
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(d3d11_sprite_t, coords),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d11_sprite_t, colors[0]),
|
{ "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d11_sprite_t, colors[0]),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 1, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d11_sprite_t, colors[1]),
|
{ "COLOR", 1, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d11_sprite_t, colors[1]),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 2, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d11_sprite_t, colors[2]),
|
{ "COLOR", 2, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d11_sprite_t, colors[2]),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "COLOR", 3, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d11_sprite_t, colors[3]),
|
{ "COLOR", 3, DXGI_FORMAT_R8G8B8A8_UNORM, 0, offsetof(d3d11_sprite_t, colors[3]),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
{ "PARAMS", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_sprite_t, params),
|
{ "PARAMS", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(d3d11_sprite_t, params),
|
||||||
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char shader[] =
|
static const char shader[] =
|
||||||
#include "d3d_shaders/sprite_sm4.hlsl.h"
|
#include "d3d_shaders/sprite_sm4.hlsl.h"
|
||||||
;
|
;
|
||||||
|
|
||||||
if (!d3d11_init_shader(
|
if (!d3d11_init_shader(
|
||||||
d3d11->device, shader, sizeof(shader), NULL, "VSMain", "PSMain", "GSMain", desc,
|
d3d11->device, shader, sizeof(shader), NULL, "VSMain", "PSMain", "GSMain", desc,
|
||||||
countof(desc), &d3d11->sprites.shader))
|
countof(desc), &d3d11->sprites.shader))
|
||||||
goto error;
|
goto error;
|
||||||
if (!d3d11_init_shader(
|
if (!d3d11_init_shader(
|
||||||
d3d11->device, shader, sizeof(shader), NULL, "VSMain", "PSMainA8", "GSMain", desc,
|
d3d11->device, shader, sizeof(shader), NULL, "VSMain", "PSMainA8", "GSMain", desc,
|
||||||
countof(desc), &d3d11->sprites.shader_font))
|
countof(desc), &d3d11->sprites.shader_font))
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -960,7 +961,7 @@ d3d11_gfx_init(const video_info_t* video, const input_driver_t** input, void** i
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_DIRECT3D &&
|
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_DIRECT3D &&
|
||||||
video_driver_get_hw_context()->version_major == 11)
|
video_driver_get_hw_context()->version_major == 11)
|
||||||
{
|
{
|
||||||
d3d11->hw.enable = true;
|
d3d11->hw.enable = true;
|
||||||
d3d11->hw.iface.interface_type = RETRO_HW_RENDER_INTERFACE_D3D11;
|
d3d11->hw.iface.interface_type = RETRO_HW_RENDER_INTERFACE_D3D11;
|
||||||
@ -1064,7 +1065,7 @@ static void d3d11_init_render_targets(d3d11_video_t* d3d11, unsigned width, unsi
|
|||||||
RARCH_LOG("[D3D11]: Updating framebuffer size %u x %u.\n", width, height);
|
RARCH_LOG("[D3D11]: Updating framebuffer size %u x %u.\n", width, height);
|
||||||
|
|
||||||
if ((i != (d3d11->shader_preset->passes - 1)) || (width != d3d11->vp.width) ||
|
if ((i != (d3d11->shader_preset->passes - 1)) || (width != d3d11->vp.width) ||
|
||||||
(height != d3d11->vp.height))
|
(height != d3d11->vp.height))
|
||||||
{
|
{
|
||||||
d3d11->pass[i].viewport.Width = width;
|
d3d11->pass[i].viewport.Width = width;
|
||||||
d3d11->pass[i].viewport.Height = height;
|
d3d11->pass[i].viewport.Height = height;
|
||||||
@ -1145,7 +1146,7 @@ static bool d3d11_gfx_frame(
|
|||||||
#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 (d3d11->resize_viewport)
|
if (d3d11->resize_viewport)
|
||||||
#endif
|
#endif
|
||||||
d3d11_update_viewport(d3d11, false);
|
d3d11_update_viewport(d3d11, false);
|
||||||
|
|
||||||
D3D11SetPrimitiveTopology(context, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
D3D11SetPrimitiveTopology(context, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||||
|
|
||||||
@ -1160,7 +1161,7 @@ static bool d3d11_gfx_frame(
|
|||||||
if (d3d11->shader_preset)
|
if (d3d11->shader_preset)
|
||||||
{
|
{
|
||||||
if (d3d11->frame.texture[0].desc.Width != width ||
|
if (d3d11->frame.texture[0].desc.Width != width ||
|
||||||
d3d11->frame.texture[0].desc.Height != height)
|
d3d11->frame.texture[0].desc.Height != height)
|
||||||
d3d11->resize_render_targets = true;
|
d3d11->resize_render_targets = true;
|
||||||
|
|
||||||
if (d3d11->resize_render_targets)
|
if (d3d11->resize_render_targets)
|
||||||
@ -1194,7 +1195,7 @@ static bool d3d11_gfx_frame(
|
|||||||
|
|
||||||
/* either no history, or we moved a texture of a different size in the front slot */
|
/* either no history, or we moved a texture of a different size in the front slot */
|
||||||
if (d3d11->frame.texture[0].desc.Width != width ||
|
if (d3d11->frame.texture[0].desc.Width != width ||
|
||||||
d3d11->frame.texture[0].desc.Height != height)
|
d3d11->frame.texture[0].desc.Height != height)
|
||||||
{
|
{
|
||||||
d3d11->frame.texture[0].desc.Width = width;
|
d3d11->frame.texture[0].desc.Width = width;
|
||||||
d3d11->frame.texture[0].desc.Height = height;
|
d3d11->frame.texture[0].desc.Height = height;
|
||||||
@ -1234,7 +1235,7 @@ static bool d3d11_gfx_frame(
|
|||||||
|
|
||||||
if (d3d11->shader_preset->pass[i].frame_count_mod)
|
if (d3d11->shader_preset->pass[i].frame_count_mod)
|
||||||
d3d11->pass[i].frame_count =
|
d3d11->pass[i].frame_count =
|
||||||
frame_count % d3d11->shader_preset->pass[i].frame_count_mod;
|
frame_count % d3d11->shader_preset->pass[i].frame_count_mod;
|
||||||
else
|
else
|
||||||
d3d11->pass[i].frame_count = frame_count;
|
d3d11->pass[i].frame_count = frame_count;
|
||||||
|
|
||||||
@ -1596,7 +1597,7 @@ static void d3d11_gfx_unload_texture(void* data, uintptr_t handle)
|
|||||||
free(texture);
|
free(texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
d3d11_get_hw_render_interface(void* data, const struct retro_hw_render_interface** iface)
|
d3d11_get_hw_render_interface(void* data, const struct retro_hw_render_interface** iface)
|
||||||
{
|
{
|
||||||
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
|
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
|
||||||
|
@ -208,8 +208,10 @@ static void menu_display_d3d10_draw_pipeline(menu_display_ctx_draw_t* draw,
|
|||||||
desc.ByteWidth = ca->coords.vertices * 2 * sizeof(float);
|
desc.ByteWidth = ca->coords.vertices * 2 * sizeof(float);
|
||||||
desc.BindFlags = D3D10_BIND_VERTEX_BUFFER;
|
desc.BindFlags = D3D10_BIND_VERTEX_BUFFER;
|
||||||
|
|
||||||
D3D10_SUBRESOURCE_DATA vertexData = { ca->coords.vertex };
|
{
|
||||||
D3D10CreateBuffer(d3d10->device, &desc, &vertexData, &d3d10->menu_pipeline_vbo);
|
D3D10_SUBRESOURCE_DATA vertexData = { ca->coords.vertex };
|
||||||
|
D3D10CreateBuffer(d3d10->device, &desc, &vertexData, &d3d10->menu_pipeline_vbo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
D3D10SetVertexBuffer(d3d10->device, 0, d3d10->menu_pipeline_vbo, 2 * sizeof(float), 0);
|
D3D10SetVertexBuffer(d3d10->device, 0, d3d10->menu_pipeline_vbo, 2 * sizeof(float), 0);
|
||||||
draw->coords->vertices = ca->coords.vertices;
|
draw->coords->vertices = ca->coords.vertices;
|
||||||
|
@ -207,8 +207,10 @@ static void menu_display_d3d11_draw_pipeline(menu_display_ctx_draw_t *draw,
|
|||||||
desc.ByteWidth = ca->coords.vertices * 2 * sizeof(float);
|
desc.ByteWidth = ca->coords.vertices * 2 * sizeof(float);
|
||||||
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
|
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
|
||||||
|
|
||||||
D3D11_SUBRESOURCE_DATA vertexData = { ca->coords.vertex };
|
{
|
||||||
D3D11CreateBuffer(d3d11->device, &desc, &vertexData, &d3d11->menu_pipeline_vbo);
|
D3D11_SUBRESOURCE_DATA vertexData = { ca->coords.vertex };
|
||||||
|
D3D11CreateBuffer(d3d11->device, &desc, &vertexData, &d3d11->menu_pipeline_vbo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
D3D11SetVertexBuffer(d3d11->context, 0, d3d11->menu_pipeline_vbo, 2 * sizeof(float), 0);
|
D3D11SetVertexBuffer(d3d11->context, 0, d3d11->menu_pipeline_vbo, 2 * sizeof(float), 0);
|
||||||
draw->coords->vertices = ca->coords.vertices;
|
draw->coords->vertices = ca->coords.vertices;
|
||||||
|
@ -52,7 +52,8 @@
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;WANT_GLSLANG;HAVE_DYNAMIC;HAVE_DYLIB;HAVE_SPIRV_CROSS;HAVE_MENU;HAVE_SLANG;HAVE_GLSLANG;HAVE_UPDATE_ASSETS;HAVE_XMB;HAVE_SHADERPIPELINE;HAVE_RGUI;HAVE_MATERIALUI;NDEBUG;_WINDOWS;HAVE_XAUDIO;HAVE_DSOUND;HAVE_DINPUT;HAVE_D3D;HAVE_D3D9;HAVE_D3D10;HAVE_D3D11;HAVE_OPENGL;HAVE_VULKAN;HAVE_GLSL;HAVE_THREADS;RARCH_INTERNAL;HAVE_CC_RESAMPLER;HAVE_RUNAHEAD;HAVE_GRIFFIN;HAVE_RJPEG;HAVE_RPNG;HAVE_ZLIB;WANT_ZLIB;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_OVERLAY;HAVE_7ZIP;HAVE_LIBRETRODB;HAVE_STB_FONT;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\..\..\deps;$(SolutionDir)\..\..\gfx\include;$(SolutionDir)\..\..\gfx\include\dxsdk;$(SolutionDir)\..\..\libretro-common\include;$(SolutionDir)\..\..\deps\SPIRV-Cross;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
@ -67,7 +68,8 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;WANT_GLSLANG;HAVE_DYNAMIC;HAVE_DYLIB;HAVE_SPIRV_CROSS;HAVE_MENU;HAVE_SLANG;HAVE_GLSLANG;HAVE_UPDATE_ASSETS;HAVE_XMB;HAVE_SHADERPIPELINE;HAVE_RGUI;HAVE_MATERIALUI;NDEBUG;_WINDOWS;HAVE_XAUDIO;HAVE_DSOUND;HAVE_DINPUT;HAVE_D3D;HAVE_D3D9;HAVE_D3D10;HAVE_D3D11;HAVE_OPENGL;HAVE_VULKAN;HAVE_GLSL;HAVE_THREADS;RARCH_INTERNAL;HAVE_CC_RESAMPLER;HAVE_RUNAHEAD;HAVE_GRIFFIN;HAVE_RJPEG;HAVE_RPNG;HAVE_ZLIB;WANT_ZLIB;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_OVERLAY;HAVE_7ZIP;HAVE_LIBRETRODB;HAVE_STB_FONT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\..\..\deps;$(SolutionDir)\..\..\gfx\include;$(SolutionDir)\..\..\gfx\include\dxsdk;$(SolutionDir)\..\..\libretro-common\include;$(SolutionDir)\..\..\deps\SPIRV-Cross;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user