C89_BUILD fixes

This commit is contained in:
twinaphex 2018-02-03 15:16:04 +01:00
parent 50e902f2ea
commit dac1f10708
2 changed files with 108 additions and 90 deletions

View File

@ -37,9 +37,10 @@
static void d3d11_set_filtering(void* data, unsigned index, bool smooth)
{
unsigned i;
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
for (int i = 0; i < RARCH_WRAP_MAX; i++)
for (i = 0; i < RARCH_WRAP_MAX; i++)
{
if (smooth)
d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_LINEAR][i];
@ -92,11 +93,14 @@ static void d3d11_update_viewport(void* data, bool force_full)
static void d3d11_free_shader_preset(d3d11_video_t* d3d11)
{
unsigned i;
if (!d3d11->shader_preset)
return;
for (int i = 0; i < d3d11->shader_preset->passes; i++)
for (i = 0; i < d3d11->shader_preset->passes; i++)
{
unsigned j;
free(d3d11->shader_preset->pass[i].source.string.vertex);
free(d3d11->shader_preset->pass[i].source.string.fragment);
free(d3d11->pass[i].semantics.textures);
@ -104,7 +108,7 @@ static void d3d11_free_shader_preset(d3d11_video_t* d3d11)
d3d11_release_texture(&d3d11->pass[i].rt);
d3d11_release_texture(&d3d11->pass[i].feedback);
for (int j = 0; j < SLANG_CBUFFER_MAX; j++)
for (j = 0; j < SLANG_CBUFFER_MAX; j++)
{
free(d3d11->pass[i].semantics.cbuffers[j].uniforms);
Release(d3d11->pass[i].buffers[j]);
@ -114,14 +118,14 @@ static void d3d11_free_shader_preset(d3d11_video_t* d3d11)
memset(d3d11->pass, 0, sizeof(d3d11->pass));
/* only free the history textures here */
for (int i = 1; i <= d3d11->shader_preset->history_size; i++)
for (i = 1; i <= d3d11->shader_preset->history_size; i++)
d3d11_release_texture(&d3d11->frame.texture[i]);
memset(
&d3d11->frame.texture[1], 0,
sizeof(d3d11->frame.texture[1]) * d3d11->shader_preset->history_size);
for (int i = 0; i < d3d11->shader_preset->luts; i++)
for (i = 0; i < d3d11->shader_preset->luts; i++)
d3d11_release_texture(&d3d11->luts[i]);
memset(d3d11->luts, 0, sizeof(d3d11->luts));
@ -134,6 +138,7 @@ static void d3d11_free_shader_preset(d3d11_video_t* d3d11)
static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const char* path)
{
unsigned i;
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
if (!d3d11)
@ -165,79 +170,76 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
d3d11_texture_t* source = &d3d11->frame.texture[0];
for (int i = 0; i < d3d11->shader_preset->passes; source = &d3d11->pass[i++].rt)
for (i = 0; i < d3d11->shader_preset->passes; source = &d3d11->pass[i++].rt)
{
{
texture_map_t texture_map
[3 + GFX_MAX_FRAME_HISTORY + 1 + GFX_MAX_SHADERS * 2 + GFX_MAX_TEXTURES + 1] = {
SL_TEXTURE_MAP(
SLANG_TEXTURE_SEMANTIC_ORIGINAL, d3d11->frame.texture[0].view,
d3d11->pass[i].sampler, d3d11->frame.texture[0].size_data),
SL_TEXTURE_MAP(
SLANG_TEXTURE_SEMANTIC_SOURCE, source->view, d3d11->pass[i].sampler,
source->size_data),
};
{
texture_map_t* ptr = texture_map;
while (ptr->texture_data)
ptr++;
for (int j = 0; j < GFX_MAX_FRAME_HISTORY + 1; j++)
{
*ptr = (texture_map_t)SL_TEXTURE_MAP_ARRAY(
SLANG_TEXTURE_SEMANTIC_ORIGINAL_HISTORY, j, d3d11->frame.texture[j].view,
d3d11->pass[i].sampler, d3d11->frame.texture[j].size_data);
ptr++;
}
for (int j = 0; j < i; j++)
{
*ptr = (texture_map_t)SL_TEXTURE_MAP_ARRAY(
SLANG_TEXTURE_SEMANTIC_PASS_OUTPUT, j, d3d11->pass[j].rt.view,
d3d11->pass[i].sampler, d3d11->pass[j].rt.size_data);
ptr++;
}
for (int j = 0; j < GFX_MAX_SHADERS; j++)
{
*ptr = (texture_map_t)SL_TEXTURE_MAP_ARRAY(
SLANG_TEXTURE_SEMANTIC_PASS_FEEDBACK, j, d3d11->pass[j].feedback.view,
d3d11->pass[i].sampler, d3d11->pass[j].rt.size_data);
ptr++;
}
for (int j = 0; j < d3d11->shader_preset->luts; j++)
{
*ptr = (texture_map_t)SL_TEXTURE_MAP_ARRAY(
SLANG_TEXTURE_SEMANTIC_USER, j, d3d11->luts[j].view, d3d11->luts[j].sampler,
d3d11->luts[j].size_data);
ptr++;
}
}
uniform_map_t uniform_map[] = {
SL_UNIFORM_MAP(SLANG_SEMANTIC_MVP, d3d11->mvp),
SL_UNIFORM_MAP(SLANG_SEMANTIC_OUTPUT, d3d11->pass[i].rt.size_data),
SL_UNIFORM_MAP(SLANG_SEMANTIC_FRAME_COUNT, d3d11->pass[i].frame_count),
SL_UNIFORM_MAP(SLANG_SEMANTIC_FINAL_VIEWPORT, d3d11->frame.output_size),
{ 0 }
unsigned j;
texture_map_t texture_map
[3 + GFX_MAX_FRAME_HISTORY + 1 + GFX_MAX_SHADERS * 2 + GFX_MAX_TEXTURES + 1] = {
SL_TEXTURE_MAP(
SLANG_TEXTURE_SEMANTIC_ORIGINAL, d3d11->frame.texture[0].view,
d3d11->pass[i].sampler, d3d11->frame.texture[0].size_data),
SL_TEXTURE_MAP(
SLANG_TEXTURE_SEMANTIC_SOURCE, source->view, d3d11->pass[i].sampler,
source->size_data),
};
texture_map_t* ptr = texture_map;
semantics_map_t semantics_map = { texture_map, uniform_map };
while (ptr->texture_data)
ptr++;
if (!slang_process(
d3d11->shader_preset, i, RARCH_SHADER_HLSL, 50, &semantics_map,
&d3d11->pass[i].semantics))
goto error;
for (j = 0; j < GFX_MAX_FRAME_HISTORY + 1; j++)
{
*ptr = (texture_map_t)SL_TEXTURE_MAP_ARRAY(
SLANG_TEXTURE_SEMANTIC_ORIGINAL_HISTORY, j, d3d11->frame.texture[j].view,
d3d11->pass[i].sampler, d3d11->frame.texture[j].size_data);
ptr++;
}
for (j = 0; j < i; j++)
{
*ptr = (texture_map_t)SL_TEXTURE_MAP_ARRAY(
SLANG_TEXTURE_SEMANTIC_PASS_OUTPUT, j, d3d11->pass[j].rt.view,
d3d11->pass[i].sampler, d3d11->pass[j].rt.size_data);
ptr++;
}
for (j = 0; j < GFX_MAX_SHADERS; j++)
{
*ptr = (texture_map_t)SL_TEXTURE_MAP_ARRAY(
SLANG_TEXTURE_SEMANTIC_PASS_FEEDBACK, j, d3d11->pass[j].feedback.view,
d3d11->pass[i].sampler, d3d11->pass[j].rt.size_data);
ptr++;
}
for (j = 0; j < d3d11->shader_preset->luts; j++)
{
*ptr = (texture_map_t)SL_TEXTURE_MAP_ARRAY(
SLANG_TEXTURE_SEMANTIC_USER, j, d3d11->luts[j].view, d3d11->luts[j].sampler,
d3d11->luts[j].size_data);
ptr++;
}
uniform_map_t uniform_map[] = {
SL_UNIFORM_MAP(SLANG_SEMANTIC_MVP, d3d11->mvp),
SL_UNIFORM_MAP(SLANG_SEMANTIC_OUTPUT, d3d11->pass[i].rt.size_data),
SL_UNIFORM_MAP(SLANG_SEMANTIC_FRAME_COUNT, d3d11->pass[i].frame_count),
SL_UNIFORM_MAP(SLANG_SEMANTIC_FINAL_VIEWPORT, d3d11->frame.output_size),
{ 0 }
};
semantics_map_t semantics_map = { texture_map, uniform_map };
if (!slang_process(
d3d11->shader_preset, i, RARCH_SHADER_HLSL, 50, &semantics_map,
&d3d11->pass[i].semantics))
goto error;
{
static const D3D11_INPUT_ELEMENT_DESC desc[] = {
{ "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),
D3D11_INPUT_PER_VERTEX_DATA, 0 },
D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
#ifdef DEBUG
bool save_hlsl = true;
@ -262,13 +264,13 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
strncpy(ps_path + base_len, ps_ext, sizeof(ps_ext));
if (!d3d11_init_shader(
d3d11->device, vs_src, 0, vs_path, "main", NULL, NULL, desc, countof(desc),
&d3d11->pass[i].shader))
d3d11->device, vs_src, 0, vs_path, "main", NULL, NULL, desc, countof(desc),
&d3d11->pass[i].shader))
save_hlsl = true;
if (!d3d11_init_shader(
d3d11->device, ps_src, 0, ps_path, NULL, "main", NULL, NULL, 0,
&d3d11->pass[i].shader))
d3d11->device, ps_src, 0, ps_path, NULL, "main", NULL, NULL, 0,
&d3d11->pass[i].shader))
save_hlsl = true;
if (save_hlsl)
@ -292,7 +294,7 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
goto error;
}
for (int j = 0; j < SLANG_CBUFFER_MAX; j++)
for (j = 0; j < SLANG_CBUFFER_MAX; j++)
{
D3D11_BUFFER_DESC desc = {
.ByteWidth = d3d11->pass[i].semantics.cbuffers[j].size,
@ -308,7 +310,7 @@ static bool d3d11_gfx_set_shader(void* data, enum rarch_shader_type type, const
}
}
for (int i = 0; i < d3d11->shader_preset->luts; i++)
for (i = 0; i < d3d11->shader_preset->luts; i++)
{
struct texture_image image = { 0 };
image.supports_rgba = true;
@ -350,6 +352,7 @@ error:
static void d3d11_gfx_free(void* data)
{
unsigned i;
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
if (!d3d11)
@ -384,7 +387,7 @@ static void d3d11_gfx_free(void* data)
Release(d3d11->blend_enable);
Release(d3d11->blend_disable);
for (int i = 0; i < RARCH_WRAP_MAX; i++)
for (i = 0; i < RARCH_WRAP_MAX; i++)
{
Release(d3d11->samplers[RARCH_FILTER_LINEAR][i]);
Release(d3d11->samplers[RARCH_FILTER_NEAREST][i]);
@ -407,6 +410,7 @@ static void d3d11_gfx_free(void* data)
static void*
d3d11_gfx_init(const video_info_t* video, const input_driver_t** input, void** input_data)
{
unsigned i;
WNDCLASSEX wndclass = { 0 };
MONITORINFOEX current_mon;
HMONITOR hm_to_use;
@ -521,7 +525,7 @@ d3d11_gfx_init(const video_info_t* video, const input_driver_t** input, void** i
.MaxLOD = D3D11_FLOAT32_MAX,
};
/* Initialize samplers */
for (int i = 0; i < RARCH_WRAP_MAX; i++)
for (i = 0; i < RARCH_WRAP_MAX; i++)
{
switch (i)
{
@ -749,12 +753,14 @@ error:
static void d3d11_init_history(d3d11_video_t* d3d11, unsigned width, unsigned height)
{
unsigned i;
/* todo: should we init history to max_width/max_height instead ?
* to prevent out of memory errors happening several frames later
* and to reduce memory fragmentation */
assert(d3d11->shader_preset);
for (int i = 0; i < d3d11->shader_preset->history_size + 1; i++)
for (i = 0; i < d3d11->shader_preset->history_size + 1; i++)
{
d3d11->frame.texture[i].desc.Width = width;
d3d11->frame.texture[i].desc.Height = height;
@ -767,9 +773,11 @@ static void d3d11_init_history(d3d11_video_t* d3d11, unsigned width, unsigned he
}
static void d3d11_init_render_targets(d3d11_video_t* d3d11, unsigned width, unsigned height)
{
unsigned i;
assert(d3d11->shader_preset);
for (int i = 0; i < d3d11->shader_preset->passes; i++)
for (i = 0; i < d3d11->shader_preset->passes; i++)
{
struct video_shader_pass* pass = &d3d11->shader_preset->pass[i];
@ -875,6 +883,8 @@ static bool d3d11_gfx_frame(
const char* msg,
video_frame_info_t* video_info)
{
unsigned i;
d3d11_texture_t* texture = NULL;
d3d11_video_t* d3d11 = (d3d11_video_t*)data;
D3D11DeviceContext context = d3d11->context;
@ -923,7 +933,7 @@ static bool d3d11_gfx_frame(
if (d3d11->resize_render_targets)
{
/* release all render targets first to avoid memory fragmentation */
for (int i = 0; i < d3d11->shader_preset->passes; i++)
for (i = 0; i < d3d11->shader_preset->passes; i++)
d3d11_release_texture(&d3d11->pass[i].rt);
}
@ -933,11 +943,12 @@ static bool d3d11_gfx_frame(
d3d11_init_history(d3d11, width, height);
else
{
int k;
/* todo: what about frame-duping ?
* maybe clone d3d11_texture_t with AddRef */
d3d11_texture_t tmp = d3d11->frame.texture[d3d11->shader_preset->history_size];
for (int i = d3d11->shader_preset->history_size; i > 0; i--)
d3d11->frame.texture[i] = d3d11->frame.texture[i - 1];
for (k = d3d11->shader_preset->history_size; k > 0; k--)
d3d11->frame.texture[k] = d3d11->frame.texture[k - 1];
d3d11->frame.texture[0] = tmp;
}
}
@ -962,11 +973,11 @@ static bool d3d11_gfx_frame(
D3D11SetVertexBuffer(context, 0, d3d11->frame.vbo, sizeof(d3d11_vertex_t), 0);
D3D11SetBlendState(context, d3d11->blend_disable, NULL, D3D11_DEFAULT_SAMPLE_MASK);
d3d11_texture_t* texture = d3d11->frame.texture;
texture = d3d11->frame.texture;
if (d3d11->shader_preset)
{
for (int i = 0; i < d3d11->shader_preset->passes; i++)
for (i = 0; i < d3d11->shader_preset->passes; i++)
{
if (d3d11->shader_preset->pass[i].feedback)
{
@ -976,8 +987,10 @@ static bool d3d11_gfx_frame(
}
}
for (int i = 0; i < d3d11->shader_preset->passes; i++)
for (i = 0; i < d3d11->shader_preset->passes; i++)
{
unsigned j;
d3d11_set_shader(context, &d3d11->pass[i].shader);
if (d3d11->shader_preset->pass[i].frame_count_mod)
@ -986,7 +999,7 @@ static bool d3d11_gfx_frame(
else
d3d11->pass[i].frame_count = frame_count;
for (int j = 0; j < SLANG_CBUFFER_MAX; j++)
for (j = 0; j < SLANG_CBUFFER_MAX; j++)
{
D3D11Buffer buffer = d3d11->pass[i].buffers[j];
cbuffer_sem_t* buffer_sem = &d3d11->pass[i].semantics.cbuffers[j];
@ -1244,7 +1257,10 @@ static uintptr_t d3d11_gfx_load_texture(
if (!d3d11)
return 0;
texture = (d3d11_texture_t*)calloc(1, sizeof(*texture));
texture = (d3d11_texture_t*)calloc(1, sizeof(*texture));
if (!texture)
return 0;
switch (filter_type)
{

View File

@ -80,9 +80,12 @@ static void menu_display_d3d11_draw(void* data)
{
D3D11_MAPPED_SUBRESOURCE mapped_vbo;
d3d11_sprite_t *v = NULL;
D3D11MapBuffer(
d3d11->context, d3d11->sprites.vbo, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &mapped_vbo);
d3d11_sprite_t* v = (d3d11_sprite_t*)mapped_vbo.pData + d3d11->sprites.offset;
v = (d3d11_sprite_t*)mapped_vbo.pData + d3d11->sprites.offset;
v->pos.x = draw->x / (float)d3d11->viewport.Width;
v->pos.y = (d3d11->viewport.Height - draw->y - draw->height) / (float)d3d11->viewport.Height;
@ -128,8 +131,6 @@ static void menu_display_d3d11_draw_pipeline(void* data)
menu_display_ctx_draw_t* draw = (menu_display_ctx_draw_t*)data;
d3d11_video_t* d3d11 = (d3d11_video_t*)video_driver_get_ptr(false);
video_coord_array_t* ca = NULL;
if (!d3d11 || !draw)
return;
@ -138,7 +139,7 @@ static void menu_display_d3d11_draw_pipeline(void* data)
case VIDEO_SHADER_MENU:
case VIDEO_SHADER_MENU_2:
{
ca = menu_display_get_coords_array();
video_coord_array_t *ca = menu_display_get_coords_array();
if (!d3d11->menu_pipeline_vbo)
{
@ -170,6 +171,7 @@ static void menu_display_d3d11_draw_pipeline(void* data)
D3D11SetPrimitiveTopology(d3d11->context, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
d3d11->ubo_values.time += 0.01f;
{
D3D11_MAPPED_SUBRESOURCE mapped_ubo;
D3D11MapBuffer(d3d11->context, d3d11->ubo, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped_ubo);