forked from ShuriZma/suyu
1
0
Fork 0

gl_state: Fix samplers memory corruption

It was possible for "samplers" to be read without being written. This
addresses that.
This commit is contained in:
ReinUsesLisp 2019-04-19 17:04:58 -03:00
parent 83b830eb2f
commit d74cb16535
1 changed files with 6 additions and 4 deletions

View File

@ -471,8 +471,9 @@ void OpenGLState::ApplyTextures() const {
const auto& texture_unit = texture_units[i]; const auto& texture_unit = texture_units[i];
auto& cur_state_texture_unit = cur_state.texture_units[i]; auto& cur_state_texture_unit = cur_state.texture_units[i];
textures[i] = texture_unit.texture; textures[i] = texture_unit.texture;
if (cur_state_texture_unit.texture == textures[i]) if (cur_state_texture_unit.texture == textures[i]) {
continue; continue;
}
cur_state_texture_unit.texture = textures[i]; cur_state_texture_unit.texture = textures[i];
if (!has_delta) { if (!has_delta) {
first = i; first = i;
@ -493,10 +494,11 @@ void OpenGLState::ApplySamplers() const {
std::array<GLuint, Maxwell::NumTextureSamplers> samplers; std::array<GLuint, Maxwell::NumTextureSamplers> samplers;
for (std::size_t i = 0; i < std::size(samplers); ++i) { for (std::size_t i = 0; i < std::size(samplers); ++i) {
if (cur_state.texture_units[i].sampler == texture_units[i].sampler)
continue;
cur_state.texture_units[i].sampler = texture_units[i].sampler;
samplers[i] = texture_units[i].sampler; samplers[i] = texture_units[i].sampler;
if (cur_state.texture_units[i].sampler == texture_units[i].sampler) {
continue;
}
cur_state.texture_units[i].sampler = texture_units[i].sampler;
if (!has_delta) { if (!has_delta) {
first = i; first = i;
has_delta = true; has_delta = true;