From e2c8fac583894622b8cb76057915d66986e164fe Mon Sep 17 00:00:00 2001 From: korenkonder Date: Mon, 25 Dec 2023 23:33:50 +0300 Subject: [PATCH] Fixed warnings on AMD --- src/CRE/shader.cpp | 19 +++++++++++++++---- src/CRE/shader.hpp | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/CRE/shader.cpp b/src/CRE/shader.cpp index 6d69373c..787d1e21 100644 --- a/src/CRE/shader.cpp +++ b/src/CRE/shader.cpp @@ -68,7 +68,8 @@ int32_t shader::bind(shader_set_data* set, uint32_t sub_index) { set->curr_shader = shader; gl_state_use_program(shader->program); - if (memcmp(shader->uniform_val, uniform_val, sizeof(uniform_val))) { + if (shader->has_uniform_val + && memcmp(shader->uniform_val, uniform_val, sizeof(uniform_val))) { memcpy(shader->uniform_val, uniform_val, sizeof(uniform_val)); shader->uniform_val_update = true; } @@ -586,7 +587,8 @@ void shader_set_data::load(farc* f, bool ignore_cache, frag_buf[frag_buf_pos + l] = (char)('0' + vec_frag_data[l]); } - if (!bin || !bin->binary_format || !bin->length || !shader_load_binary_shader(bin, &shaders[k].program)) { + if (!bin || !bin->binary_format || !bin->length + || !shader_load_binary_shader(bin, &shaders[k].program)) { bool vert_succ = shader::parse_define(vert_data, num_uniform, vec_vert_data, &temp_vert, &temp_vert_size); bool frag_succ = shader::parse_define(frag_data, num_uniform, @@ -612,6 +614,10 @@ void shader_set_data::load(farc* f, bool ignore_cache, memcpy((void*)b->binary, (void*)((size_t)bin + bin->binary), bin->length); } + shaders[k].has_uniform_val = false; + if (shaders[k].program) + shaders[k].has_uniform_val = glGetUniformLocation(shaders[k].program, "uniform_val") >= 0; + if (!ignore_cache && bin) bin++; } @@ -627,7 +633,8 @@ void shader_set_data::load(farc* f, bool ignore_cache, strcat_s(vert_buf, sizeof(vert_buf), "..vert"); strcat_s(frag_buf, sizeof(vert_buf), "..frag"); - if (!bin || !bin->binary_format || !bin->length || !shader_load_binary_shader(bin, &shaders[0].program)) { + if (!bin || !bin->binary_format || !bin->length + || !shader_load_binary_shader(bin, &shaders[0].program)) { bool vert_succ = shader::parse_define(vert_data, &temp_vert, &temp_vert_size); bool frag_succ = shader::parse_define(frag_data, &temp_frag, &temp_frag_size); @@ -651,6 +658,10 @@ void shader_set_data::load(farc* f, bool ignore_cache, memcpy((void*)b->binary, (void*)((size_t)bin + bin->binary), bin->length); } + shaders[0].has_uniform_val = false; + if (shaders[0].program) + shaders[0].has_uniform_val = glGetUniformLocation(shaders[0].program, "uniform_val") >= 0; + if (!ignore_cache && bin) bin++; } @@ -1014,7 +1025,7 @@ static void shader_update_data(shader_set_data* set) { if (set->curr_shader) { shader_sub_shader* shader = set->curr_shader; - if (shader->uniform_val_update) { + if (shader->has_uniform_val && shader->uniform_val_update) { glUniform1iv(0, SHADER_MAX_UNIFORM_VALUES, (GLint*)shader->uniform_val); shader->uniform_val_update = false; } diff --git a/src/CRE/shader.hpp b/src/CRE/shader.hpp index a538608d..e08f8e25 100644 --- a/src/CRE/shader.hpp +++ b/src/CRE/shader.hpp @@ -56,6 +56,7 @@ struct shader_bind_func { struct shader_sub_shader { GLuint program; + bool has_uniform_val; int32_t uniform_val[SHADER_MAX_UNIFORM_VALUES]; bool uniform_val_update; };