mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
Libretro API update - add new context hardware render enums - enables
autodetection of DX12 for PS2 core
This commit is contained in:
parent
f19def349f
commit
d48bd7244a
@ -1063,8 +1063,7 @@ static void *d3d10_gfx_init(const video_info_t* video,
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_DIRECT3D &&
|
||||
video_driver_get_hw_context()->version_major == 11)
|
||||
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_D3D10)
|
||||
{
|
||||
d3d10->hw.enable = true;
|
||||
d3d10->hw.iface.interface_type = RETRO_HW_RENDER_INTERFACE_D3D10;
|
||||
|
@ -1654,8 +1654,7 @@ static void *d3d11_gfx_init(const video_info_t* video,
|
||||
d3d11_gfx_set_shader(d3d11, type, shader_preset);
|
||||
}
|
||||
|
||||
if ( video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_DIRECT3D
|
||||
&& video_driver_get_hw_context()->version_major == 11)
|
||||
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_D3D11)
|
||||
{
|
||||
d3d11->flags |= D3D11_ST_FLAG_HW_IFACE_ENABLE;
|
||||
d3d11->hw_iface.interface_type = RETRO_HW_RENDER_INTERFACE_D3D11;
|
||||
|
@ -1988,8 +1988,7 @@ static void *d3d12_gfx_init(const video_info_t* video,
|
||||
d3d12_gfx_set_shader(d3d12, type, shader_preset);
|
||||
}
|
||||
|
||||
if ( video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_DIRECT3D
|
||||
&& video_driver_get_hw_context()->version_major == 12)
|
||||
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_D3D12)
|
||||
{
|
||||
d3d12->flags |= D3D12_ST_FLAG_HW_IFACE_ENABLE;
|
||||
d3d12->hw_iface.interface_type = RETRO_HW_RENDER_INTERFACE_D3D12;
|
||||
|
@ -449,18 +449,30 @@ video_driver_t *hw_render_context_driver(
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
case RETRO_HW_CONTEXT_DIRECT3D:
|
||||
#if defined(HAVE_D3D9)
|
||||
#if defined(HAVE_HLSL)
|
||||
if (major == 9)
|
||||
return &video_d3d9_hlsl;
|
||||
#endif
|
||||
#endif
|
||||
#if defined(HAVE_D3D11)
|
||||
if (major == 11)
|
||||
return &video_d3d11;
|
||||
#endif
|
||||
case RETRO_HW_CONTEXT_D3D10:
|
||||
#if defined(HAVE_D3D10)
|
||||
return &video_d3d10;
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
case RETRO_HW_CONTEXT_D3D11:
|
||||
#if defined(HAVE_D3D11)
|
||||
return &video_d3d11;
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
case RETRO_HW_CONTEXT_D3D12:
|
||||
#if defined(HAVE_D3D11)
|
||||
return &video_d3d12;
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
case RETRO_HW_CONTEXT_D3D9:
|
||||
#if defined(HAVE_D3D9) && defined(HAVE_HLSL)
|
||||
return &video_d3d9_hlsl;
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
case RETRO_HW_CONTEXT_VULKAN:
|
||||
#if defined(HAVE_VULKAN)
|
||||
return &video_vulkan;
|
||||
@ -501,19 +513,21 @@ const char *hw_render_context_name(
|
||||
if (type == RETRO_HW_CONTEXT_VULKAN)
|
||||
return "vulkan";
|
||||
#endif
|
||||
#if defined(HAVE_D3D9) && defined(HAVE_HLSL)
|
||||
if (type == RETRO_HW_CONTEXT_D3D9)
|
||||
return "d3d9_hlsl";
|
||||
#endif
|
||||
#ifdef HAVE_D3D10
|
||||
if (type == RETRO_HW_CONTEXT_D3D10)
|
||||
return "d3d10";
|
||||
#endif
|
||||
#ifdef HAVE_D3D11
|
||||
if (type == RETRO_HW_CONTEXT_DIRECT3D && major == 11)
|
||||
if (type == RETRO_HW_CONTEXT_D3D11)
|
||||
return "d3d11";
|
||||
#endif
|
||||
#ifdef HAVE_D3D12
|
||||
if (type == RETRO_HW_CONTEXT_DIRECT3D && major == 12)
|
||||
if (type == RETRO_HW_CONTEXT_D3D12)
|
||||
return "d3d12";
|
||||
#endif
|
||||
#ifdef HAVE_D3D9
|
||||
#if defined(HAVE_HLSL)
|
||||
if (type == RETRO_HW_CONTEXT_DIRECT3D && major == 9)
|
||||
return "d3d9_hlsl";
|
||||
#endif
|
||||
#endif
|
||||
return "N/A";
|
||||
}
|
||||
@ -532,13 +546,21 @@ enum retro_hw_context_type hw_render_context_type(const char *s)
|
||||
if (string_is_equal(s, "vulkan"))
|
||||
return RETRO_HW_CONTEXT_VULKAN;
|
||||
#endif
|
||||
#ifdef HAVE_D3D11
|
||||
if (string_is_equal(s, "d3d11"))
|
||||
return RETRO_HW_CONTEXT_DIRECT3D;
|
||||
#if defined(HAVE_D3D9) && defined(HAVE_HLSL)
|
||||
if (string_is_equal(s, "d3d9_hlsl"))
|
||||
return RETRO_HW_CONTEXT_D3D9;
|
||||
#endif
|
||||
#ifdef HAVE_D3D10
|
||||
if (string_is_equal(s, "d3d10"))
|
||||
return RETRO_HW_CONTEXT_D3D10;
|
||||
#endif
|
||||
#ifdef HAVE_D3D11
|
||||
if (string_is_equal(s, "d3d9_hlsl"))
|
||||
return RETRO_HW_CONTEXT_DIRECT3D;
|
||||
if (string_is_equal(s, "d3d11"))
|
||||
return RETRO_HW_CONTEXT_D3D11;
|
||||
#endif
|
||||
#ifdef HAVE_D3D12
|
||||
if (string_is_equal(s, "d3d12"))
|
||||
return RETRO_HW_CONTEXT_D3D12;
|
||||
#endif
|
||||
return RETRO_HW_CONTEXT_NONE;
|
||||
}
|
||||
@ -2307,8 +2329,11 @@ bool video_driver_find_driver(
|
||||
{
|
||||
case RETRO_HW_CONTEXT_OPENGL_CORE:
|
||||
case RETRO_HW_CONTEXT_VULKAN:
|
||||
case RETRO_HW_CONTEXT_DIRECT3D:
|
||||
#if defined(HAVE_VULKAN) || defined(HAVE_D3D11) || defined(HAVE_D3D9) || defined(HAVE_OPENGL_CORE)
|
||||
case RETRO_HW_CONTEXT_D3D9:
|
||||
case RETRO_HW_CONTEXT_D3D10:
|
||||
case RETRO_HW_CONTEXT_D3D11:
|
||||
case RETRO_HW_CONTEXT_D3D12:
|
||||
#if defined(HAVE_VULKAN) || defined(HAVE_D3D9) || defined(HAVE_D3D10) || defined(HAVE_D3D11) || defined(HAVE_D3D12) || defined(HAVE_OPENGL_CORE)
|
||||
RARCH_LOG("[Video]: Using HW render, %s driver forced.\n",
|
||||
rdr_context_name);
|
||||
|
||||
|
@ -1968,13 +1968,13 @@ struct retro_vfs_interface_info
|
||||
|
||||
enum retro_hw_render_interface_type
|
||||
{
|
||||
RETRO_HW_RENDER_INTERFACE_VULKAN = 0,
|
||||
RETRO_HW_RENDER_INTERFACE_D3D9 = 1,
|
||||
RETRO_HW_RENDER_INTERFACE_D3D10 = 2,
|
||||
RETRO_HW_RENDER_INTERFACE_D3D11 = 3,
|
||||
RETRO_HW_RENDER_INTERFACE_D3D12 = 4,
|
||||
RETRO_HW_RENDER_INTERFACE_VULKAN = 0,
|
||||
RETRO_HW_RENDER_INTERFACE_D3D9 = 1,
|
||||
RETRO_HW_RENDER_INTERFACE_D3D10 = 2,
|
||||
RETRO_HW_RENDER_INTERFACE_D3D11 = 3,
|
||||
RETRO_HW_RENDER_INTERFACE_D3D12 = 4,
|
||||
RETRO_HW_RENDER_INTERFACE_GSKIT_PS2 = 5,
|
||||
RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX
|
||||
RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX
|
||||
};
|
||||
|
||||
/* Base struct. All retro_hw_render_interface_* types
|
||||
@ -2750,9 +2750,17 @@ enum retro_hw_context_type
|
||||
/* Vulkan, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE. */
|
||||
RETRO_HW_CONTEXT_VULKAN = 6,
|
||||
|
||||
/* Direct3D, set version_major to select the type of interface
|
||||
* returned by RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */
|
||||
RETRO_HW_CONTEXT_DIRECT3D = 7,
|
||||
/* Direct3D11, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */
|
||||
RETRO_HW_CONTEXT_D3D11 = 7,
|
||||
|
||||
/* Direct3D10, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */
|
||||
RETRO_HW_CONTEXT_D3D10 = 8,
|
||||
|
||||
/* Direct3D12, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */
|
||||
RETRO_HW_CONTEXT_D3D12 = 9,
|
||||
|
||||
/* Direct3D9, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */
|
||||
RETRO_HW_CONTEXT_D3D9 = 10,
|
||||
|
||||
RETRO_HW_CONTEXT_DUMMY = INT_MAX
|
||||
};
|
||||
|
68
runloop.c
68
runloop.c
@ -739,9 +739,16 @@ static bool dynamic_verify_hw_context(
|
||||
!string_is_equal(video_ident, "glcore"))
|
||||
return false;
|
||||
break;
|
||||
case RETRO_HW_CONTEXT_DIRECT3D:
|
||||
if (!((string_is_equal(video_ident, "d3d11") && major == 11) ||
|
||||
(string_is_equal(video_ident, "d3d12") && major == 12)))
|
||||
case RETRO_HW_CONTEXT_D3D10:
|
||||
if (!string_is_equal(video_ident, "d3d10"))
|
||||
return false;
|
||||
break;
|
||||
case RETRO_HW_CONTEXT_D3D11:
|
||||
if (!string_is_equal(video_ident, "d3d11"))
|
||||
return false;
|
||||
break;
|
||||
case RETRO_HW_CONTEXT_D3D12:
|
||||
if (!string_is_equal(video_ident, "d3d12"))
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
@ -835,32 +842,26 @@ static bool dynamic_request_hw_context(enum retro_hw_context_type type,
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_D3D9) || defined(HAVE_D3D11) || defined(HAVE_D3D12)
|
||||
case RETRO_HW_CONTEXT_DIRECT3D:
|
||||
switch (major)
|
||||
{
|
||||
#ifdef HAVE_D3D9
|
||||
case 9:
|
||||
RARCH_LOG("Requesting D3D9 context.\n");
|
||||
break;
|
||||
#endif
|
||||
#ifdef HAVE_D3D11
|
||||
case 11:
|
||||
RARCH_LOG("Requesting D3D11 context.\n");
|
||||
break;
|
||||
#endif
|
||||
#ifdef HAVE_D3D12
|
||||
case 12:
|
||||
RARCH_LOG("Requesting D3D12 context.\n");
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
RARCH_LOG("Requesting unknown context.\n");
|
||||
return false;
|
||||
}
|
||||
#if defined(HAVE_D3D11)
|
||||
case RETRO_HW_CONTEXT_D3D11:
|
||||
RARCH_LOG("Requesting D3D11 context.\n");
|
||||
break;
|
||||
#endif
|
||||
#ifdef HAVE_D3D10
|
||||
case RETRO_HW_CONTEXT_D3D10:
|
||||
RARCH_LOG("Requesting D3D10 context.\n");
|
||||
break;
|
||||
#endif
|
||||
#ifdef HAVE_D3D12
|
||||
case RETRO_HW_CONTEXT_D3D12:
|
||||
RARCH_LOG("Requesting D3D12 context.\n");
|
||||
break;
|
||||
#endif
|
||||
#if defined(HAVE_D3D9)
|
||||
case RETRO_HW_CONTEXT_D3D9:
|
||||
RARCH_LOG("Requesting D3D9 context.\n");
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
RARCH_LOG("Requesting unknown context.\n");
|
||||
return false;
|
||||
@ -2251,10 +2252,15 @@ bool runloop_environment_cb(unsigned cmd, void *data)
|
||||
*cb = RETRO_HW_CONTEXT_VULKAN;
|
||||
RARCH_LOG("[Environ]: GET_PREFERRED_HW_RENDER - Context callback set to RETRO_HW_CONTEXT_VULKAN.\n");
|
||||
}
|
||||
else if (!strncmp(video_driver_name, "d3d", 3))
|
||||
else if (string_is_equal(video_driver_name, "d3d11"))
|
||||
{
|
||||
*cb = RETRO_HW_CONTEXT_DIRECT3D;
|
||||
RARCH_LOG("[Environ]: GET_PREFERRED_HW_RENDER - Context callback set to RETRO_HW_CONTEXT_DIRECT3D.\n");
|
||||
*cb = RETRO_HW_CONTEXT_D3D11;
|
||||
RARCH_LOG("[Environ]: GET_PREFERRED_HW_RENDER - Context callback set to RETRO_HW_CONTEXT_D3D11.\n");
|
||||
}
|
||||
else if (string_is_equal(video_driver_name, "d3d12"))
|
||||
{
|
||||
*cb = RETRO_HW_CONTEXT_D3D12;
|
||||
RARCH_LOG("[Environ]: GET_PREFERRED_HW_RENDER - Context callback set to RETRO_HW_CONTEXT_D3D12.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3363,9 +3369,7 @@ bool runloop_environment_cb(unsigned cmd, void *data)
|
||||
|
||||
#ifdef HAVE_VULKAN
|
||||
if (iface->interface_type == RETRO_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_VULKAN)
|
||||
{
|
||||
iface->interface_version = RETRO_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_VULKAN_VERSION;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user