mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
glsl: replace some C++ code with C
This replaces some new/delete uses with malloc/free.
This is more consistent with most of the other glsl IR code but
more importantly it allows the game "Battle Block Theater" to
start working on some mesa drivers. The game overrides new and
ends up throwing an assert and crashing when it sees this
function calling new [0].
Note: The game still crashes with radeonsi due to similar conflicts
with LLVM.
CC: mesa-stable
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11907>
(cherry picked from commit 749251391d)
This commit is contained in:
parent
04e8aeac6d
commit
3cb96be239
2 changed files with 9 additions and 8 deletions
|
|
@ -805,7 +805,7 @@
|
|||
"description": "glsl: replace some C++ code with C",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1200,7 +1200,7 @@ static bool
|
|||
interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog,
|
||||
bool validate_ssbo)
|
||||
{
|
||||
int *InterfaceBlockStageIndex[MESA_SHADER_STAGES];
|
||||
int *ifc_blk_stage_idx[MESA_SHADER_STAGES];
|
||||
struct gl_uniform_block *blks = NULL;
|
||||
unsigned *num_blks = validate_ssbo ? &prog->data->NumShaderStorageBlocks :
|
||||
&prog->data->NumUniformBlocks;
|
||||
|
|
@ -1221,9 +1221,10 @@ interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog,
|
|||
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
struct gl_linked_shader *sh = prog->_LinkedShaders[i];
|
||||
|
||||
InterfaceBlockStageIndex[i] = new int[max_num_buffer_blocks];
|
||||
ifc_blk_stage_idx[i] =
|
||||
(int *) malloc(sizeof(int) * max_num_buffer_blocks);
|
||||
for (unsigned int j = 0; j < max_num_buffer_blocks; j++)
|
||||
InterfaceBlockStageIndex[i][j] = -1;
|
||||
ifc_blk_stage_idx[i][j] = -1;
|
||||
|
||||
if (sh == NULL)
|
||||
continue;
|
||||
|
|
@ -1247,7 +1248,7 @@ interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog,
|
|||
"definitions\n", sh_blks[j]->Name);
|
||||
|
||||
for (unsigned k = 0; k <= i; k++) {
|
||||
delete[] InterfaceBlockStageIndex[k];
|
||||
free(ifc_blk_stage_idx[k]);
|
||||
}
|
||||
|
||||
/* Reset the block count. This will help avoid various segfaults
|
||||
|
|
@ -1258,7 +1259,7 @@ interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog,
|
|||
return false;
|
||||
}
|
||||
|
||||
InterfaceBlockStageIndex[i][index] = j;
|
||||
ifc_blk_stage_idx[i][index] = j;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1267,7 +1268,7 @@ interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog,
|
|||
*/
|
||||
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
for (unsigned j = 0; j < *num_blks; j++) {
|
||||
int stage_index = InterfaceBlockStageIndex[i][j];
|
||||
int stage_index = ifc_blk_stage_idx[i][j];
|
||||
|
||||
if (stage_index != -1) {
|
||||
struct gl_linked_shader *sh = prog->_LinkedShaders[i];
|
||||
|
|
@ -1283,7 +1284,7 @@ interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog,
|
|||
}
|
||||
|
||||
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
delete[] InterfaceBlockStageIndex[i];
|
||||
free(ifc_blk_stage_idx[i]);
|
||||
}
|
||||
|
||||
if (validate_ssbo)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue