Am 21.05.2018 um 19:21 schrieb Ian Romanick: > On 05/10/2018 02:05 AM, Benedikt Schemmer wrote: >> remove a memset too and yes, this is all functionally identical >> >> --- >> src/mesa/main/shaderapi.c | 40 ++++++++++++++++++++-------------------- >> 1 file changed, 20 insertions(+), 20 deletions(-) >> >> diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c >> index e8acca4490..1d0ca5374b 100644 >> --- a/src/mesa/main/shaderapi.c >> +++ b/src/mesa/main/shaderapi.c >> @@ -241,11 +241,10 @@ _mesa_init_shader_state(struct gl_context *ctx) >> /* Device drivers may override these to control what kind of instructions >> * are generated by the GLSL compiler. >> */ >> - struct gl_shader_compiler_options options; >> + struct gl_shader_compiler_options options = {}; >> gl_shader_stage sh; >> int i; >> >> - memset(&options, 0, sizeof(options)); > > This is not functionally the same. The memset will zero padding fields > added by the compiler, but '= {}' does not.
I did check with https://godbolt.org/ and at least for clang (which generates a memset for {}) and gcc it is exactly the same void test(void) { struct gl_shader_compiler_options options = {}; memset(&options, 0, sizeof(options)); } gcc: // = {} mov QWORD PTR [rbp-32], 0 mov QWORD PTR [rbp-24], 0 mov QWORD PTR [rbp-16], 0 // memset lea rax, [rbp-32] mov edx, 24 mov esi, 0 mov rdi, rax call memset clang: // = {} mov rdi, rsi mov qword ptr [rbp - 32], rsi # 8-byte Spill mov esi, eax mov qword ptr [rbp - 40], rdx # 8-byte Spill mov dword ptr [rbp - 44], eax # 4-byte Spill call memset //memset mov rdx, qword ptr [rbp - 32] # 8-byte Reload mov rdi, rdx mov esi, dword ptr [rbp - 44] # 4-byte Reload mov rdx, qword ptr [rbp - 40] # 8-byte Reload call memset but your right intel compilers generate something weird: // = {} lea rax, QWORD PTR [-32+rbp] #71.47 mov edx, 0 #71.47 mov ecx, 24 #71.47 mov rdi, rax #71.47 mov eax, edx #71.47 and eax, 65535 #71.47 mov ah, al #71.47 mov edx, eax #71.47 shl eax, 16 #71.47 or eax, edx #71.47 mov esi, ecx #71.47 shr rcx, 2 #71.47 rep stosd #71.47 mov ecx, esi #71.47 and ecx, 3 #71.47 rep stosb #71.47 // memset lea rax, QWORD PTR [-32+rbp] #72.5 mov edx, 0 #72.5 mov ecx, 24 #72.5 mov rdi, rax #72.5 mov esi, edx #72.5 mov rdx, rcx #72.5 call memset #72.5 mov QWORD PTR [-8+rbp], rax #72.5 > > I'm also not fond of the The '!= 0' and '== NULL' changes. Pretty much > everywhere in core Mesa uses those patterns.> > I feel like most of this is just a bunch of spurious changes that will > just make cherry picking patches to stable irritating later on. > >> options.MaxUnrollIterations = 32; >> options.MaxIfDepth = UINT_MAX; >> >> @@ -254,7 +253,7 @@ _mesa_init_shader_state(struct gl_context *ctx) >> >> ctx->Shader.Flags = _mesa_get_shader_flags(); >> >> - if (ctx->Shader.Flags != 0) >> + if (ctx->Shader.Flags) >> ctx->Const.GenerateTemporaryNames = true; >> >> /* Extended for ARB_separate_shader_objects */ >> @@ -771,7 +770,8 @@ get_programiv(struct gl_context *ctx, GLuint program, >> GLenum pname, >> GLint *params) >> { >> struct gl_shader_program *shProg >> - = _mesa_lookup_shader_program_err(ctx, program, >> "glGetProgramiv(program)"); >> + = _mesa_lookup_shader_program_err(ctx, program, >> + "glGetProgramiv(program)"); >> >> /* Is transform feedback available in this context? >> */ >> @@ -953,7 +953,7 @@ get_programiv(struct gl_context *ctx, GLuint program, >> GLenum pname, >> *params = shProg->BinaryRetreivableHint; >> return; >> case GL_PROGRAM_BINARY_LENGTH: >> - if (ctx->Const.NumProgramBinaryFormats == 0) { >> + if (!ctx->Const.NumProgramBinaryFormats) { >> *params = 0; >> } else { >> _mesa_get_program_binary_length(ctx, shProg, params); >> @@ -974,7 +974,7 @@ get_programiv(struct gl_context *ctx, GLuint program, >> GLenum pname, >> "linked)"); >> return; >> } >> - if (shProg->_LinkedShaders[MESA_SHADER_COMPUTE] == NULL) { >> + if (!shProg->_LinkedShaders[MESA_SHADER_COMPUTE]) { >> _mesa_error(ctx, GL_INVALID_OPERATION, "glGetProgramiv(no compute " >> "shaders)"); >> return; >> @@ -1234,7 +1234,7 @@ _mesa_compile_shader(struct gl_context *ctx, struct >> gl_shader *sh) >> } else { >> if (ctx->_Shader->Flags & GLSL_DUMP) { >> _mesa_log("GLSL source for %s shader %d:\n", >> - _mesa_shader_stage_to_string(sh->Stage), sh->Name); >> + _mesa_shader_stage_to_string(sh->Stage), sh->Name); >> _mesa_log("%s\n", sh->Source); >> } >> >> @@ -1381,13 +1381,13 @@ link_program(struct gl_context *ctx, struct >> gl_shader_program *shProg, >> GLuint i; >> >> printf("Link %u shaders in program %u: %s\n", >> - shProg->NumShaders, shProg->Name, >> - shProg->data->LinkStatus ? "Success" : "Failed"); >> + shProg->NumShaders, shProg->Name, >> + shProg->data->LinkStatus ? "Success" : "Failed"); >> >> for (i = 0; i < shProg->NumShaders; i++) { >> printf(" shader %u, stage %u\n", >> - shProg->Shaders[i]->Name, >> - shProg->Shaders[i]->Stage); >> + shProg->Shaders[i]->Name, >> + shProg->Shaders[i]->Stage); >> } >> } >> } >> @@ -1460,7 +1460,7 @@ void >> _mesa_active_program(struct gl_context *ctx, struct gl_shader_program >> *shProg, >> const char *caller) >> { >> - if ((shProg != NULL) && !shProg->data->LinkStatus) { >> + if ((shProg) && !shProg->data->LinkStatus) { >> _mesa_error(ctx, GL_INVALID_OPERATION, >> "%s(program %u not linked)", caller, shProg->Name); >> return; >> @@ -1794,7 +1794,7 @@ void GLAPIENTRY >> _mesa_GetObjectParameterfvARB(GLhandleARB object, GLenum pname, >> GLfloat *params) >> { >> - GLint iparams[1] = {0}; /* XXX is one element enough? */ >> + GLint iparams[1] = {}; /* XXX is one element enough? */ >> _mesa_GetObjectParameterivARB(object, pname, iparams); >> params[0] = (GLfloat) iparams[0]; >> } >> @@ -1912,7 +1912,7 @@ shader_source(struct gl_context *ctx, GLuint >> shaderObj, GLsizei count, >> if (!sh) >> return; >> >> - if (string == NULL) { >> + if (!string) { >> _mesa_error(ctx, GL_INVALID_VALUE, "glShaderSourceARB"); >> return; >> } >> @@ -1925,7 +1925,7 @@ shader_source(struct gl_context *ctx, GLuint >> shaderObj, GLsizei count, >> * last element will be set to the total length of the source code. >> */ >> offsets = malloc(count * sizeof(GLint)); >> - if (offsets == NULL) { >> + if (!offsets) { >> _mesa_error(ctx, GL_OUT_OF_MEMORY, "glShaderSourceARB"); >> return; >> } >> @@ -1952,7 +1952,7 @@ shader_source(struct gl_context *ctx, GLuint >> shaderObj, GLsizei count, >> */ >> totalLength = offsets[count - 1] + 2; >> source = malloc(totalLength * sizeof(GLcharARB)); >> - if (source == NULL) { >> + if (!source) { >> free((GLvoid *) offsets); >> _mesa_error(ctx, GL_OUT_OF_MEMORY, "glShaderSourceARB"); >> return; >> @@ -2245,7 +2245,7 @@ _mesa_GetProgramBinary(GLuint program, GLsizei >> bufSize, GLsizei *length, >> * Ensure that length always points to valid storage to avoid multiple >> NULL >> * pointer checks below. >> */ >> - if (length == NULL) >> + if (!length) >> length = &length_dummy; >> >> >> @@ -2263,7 +2263,7 @@ _mesa_GetProgramBinary(GLuint program, GLsizei >> bufSize, GLsizei *length, >> return; >> } >> >> - if (ctx->Const.NumProgramBinaryFormats == 0) { >> + if (!ctx->Const.NumProgramBinaryFormats) { >> *length = 0; >> _mesa_error(ctx, GL_INVALID_OPERATION, >> "glGetProgramBinary(driver supports zero binary >> formats)"); >> @@ -2858,7 +2858,7 @@ _mesa_UniformSubroutinesuiv(GLenum shadertype, GLsizei >> count, >> bool flushed = false; >> do { >> struct gl_uniform_storage *uni = p->sh.SubroutineUniformRemapTable[i]; >> - if (uni == NULL) { >> + if (!uni) { >> i++; >> continue; >> } >> @@ -3054,7 +3054,7 @@ _mesa_shader_write_subroutine_index(struct gl_context >> *ctx, >> { >> int i, j; >> >> - if (p->sh.NumSubroutineUniformRemapTable == 0) >> + if (!p->sh.NumSubroutineUniformRemapTable) >> return; >> >> i = 0; >> > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev