Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
2
3
4
  
5
  Development Notes
6
  
7
8
9
 
10
11
  

The Mesa 3D Graphics Library

12
13
 
14
15
16
 
17

Development Notes

18
 
19
 
20

Adding Extentions

21
 
22

23
To add a new GL extension to Mesa you have to do at least the following.
24
 
25
    26
  • 27
       If glext.h doesn't define the extension, edit include/GL/gl.h and add
    28
       code like this:
    29
       
    30
         #ifndef GL_EXT_the_extension_name
    31
         #define GL_EXT_the_extension_name 1
    32
         /* declare the new enum tokens */
    33
         /* prototype the new functions */
    34
         /* TYPEDEFS for the new functions */
    35
         #endif
    36
       
    37
    38
  • 39
       In the src/mesa/glapi/ directory, add the new extension functions and
    40
       enums to the gl_API.xml file.
    41
       Then, a bunch of source files must be regenerated by executing the
    42
       corresponding Python scripts.
    43
    44
  • 45
       Add a new entry to the gl_extensions struct in mtypes.h
    46
    47
  • 48
       Update the extensions.c file.
    49
    50
  • 51
       From this point, the best way to proceed is to find another extension,
    52
       similar to the new one, that's already implemented in Mesa and use it
    53
       as an example.
    54
    55
  • 56
       If the new extension adds new GL state, the functions in get.c, enable.c
    57
       and attrib.c will most likely require new code.
    58
    59
    60
     
    61
     
    62
     
    63

    Coding Style

    64
     
    65

    66
    Mesa's code style has changed over the years.  Here's the latest.
    67

    68
     
    69

    70
    Comment your code!  It's extremely important that open-source code be
    71
    well documented.  Also, strive to write clean, easily understandable code.
    72

    73
     
    74

    75
    3-space indentation
    76

    77
     
    78

    79
    If you use tabs, set them to 8 columns
    80

    81
     
    82

    83
    Line width: the preferred width to fill comments and code in Mesa is 78
    84
    columns.  Exceptions are sometimes made for clarity (e.g. tabular data is
    85
    sometimes filled to a much larger width so that extraneous carriage returns
    86
    don't obscure the table).
    87

    88
     
    89

    90
    Brace example:
    91

    92
    93
    	if (condition) {
    94
    	   foo;
    95
    	}
    96
    	else {
    97
    	   bar;
    98
    	}
    99
     
    100
    	switch (condition) {
    101
    	case 0:
    102
    	   foo();
    103
    	   break;
    104
     
    105
    	case 1: {
    106
    	   ...
    107
    	   break;
    108
    	}
    109
     
    110
    	default:
    111
    	   ...
    112
    	   break;
    113
    	}
    114
    115
     
    116

    117
    Here's the GNU indent command which will best approximate my preferred style:
    118
    (Note that it won't format switch statements in the preferred way)
    119

    120
    121
    	indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
    122
    123
     
    124
     
    125

    126
    Local variable name example:  localVarName (no underscores)
    127

    128
     
    129

    130
    Constants and macros are ALL_UPPERCASE, with _ between words
    131

    132
     
    133

    134
    Global variables are not allowed.
    135

    136
     
    137

    138
    Function name examples:
    139

    140
    141
    	glFooBar()       - a public GL entry point (in glapi_dispatch.c)
    142
    	_mesa_FooBar()   - the internal immediate mode function
    143
    	save_FooBar()    - retained mode (display list) function in dlist.c
    144
    	foo_bar()        - a static (private) function
    145
    	_mesa_foo_bar()  - an internal non-static Mesa function
    146
    147
     
    148

    149
    Places that are not directly visible to the GL API should prefer the use
    150
    of bool, true, and
    151
    false over GLboolean, GL_TRUE, and
    152
    GL_FALSE.  In C code, this may mean that
    153
    #include <stdbool.h> needs to be added.  The
    154
    try_emit_* methods in src/mesa/program/ir_to_mesa.cpp and
    155
    src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples.
    156

    157
     
    158
     
    159

    Marking a commit as a candidate for a stable branch

    160
     
    161

    162
    If you want a commit to be applied to a stable branch,
    163
    you should add an appropriate note to the commit message.
    164

    165
     
    166

    167
    Here are some examples of such a note:
    168

    169
      170
        
    • NOTE: This is a candidate for the 9.0 branch.
    • 171
        
    • NOTE: This is a candidate for the 8.0 and 9.0 branches.
    • 172
        
    • NOTE: This is a candidate for the stable branches.
    • 173
      174
       
      175
       
      176

      Cherry-picking candidates for a stable branch

      177
       
      178

      179
      Please use git cherry-pick -x <commit> for cherry-picking a commit
      180
      from master to a stable branch.
      181

      182
       
      183

      Making a New Mesa Release

      184
       
      185

      186
      These are the instructions for making a new Mesa release.
      187

      188
       
      189

      Get latest source files

      190

      191
      Use git to get the latest Mesa files from the git repository, from whatever
      192
      branch is relevant.
      193

      194
       
      195
       
      196

      Verify and update version info

      197
       
      198
      199
        
      SConstruct
      200
        
      Android.common.mk
      201
        
      PACKAGE_VERSION
      202
        
      configure.ac
      203
        
      AC_INIT
      204
      205
       
      206

      207
      Create a docs/relnotes/x.y.z.html file.
      208
      The bin/bugzilla_mesa.sh and bin/shortlog_mesa.sh scripts can be used to
      209
      create the HTML-formatted lists of bugfixes and changes to include in the file.
      210
      Link the new docs/relnotes/x.y.z.html file into the main relnotes.html file.
      211

      212
       
      213

      214
      Update docs/index.html.
      215

      216
       
      217

      218
      Tag the files with the release name (in the form mesa-x.y)
      219
      with: git tag -s mesa-x.y -m "Mesa x.y Release"
      220
      Then: git push origin mesa-x.y
      221

      222
       
      223
       
      224

      Make the tarballs

      225

      226
      Make the distribution files.  From inside the Mesa directory:
      227
      228
      	./autogen.sh
      229
      	make tarballs
      230
      231
       
      232

      233
      After the tarballs are created, the md5 checksums for the files will
      234
      be computed.
      235
      Add them to the docs/relnotes/x.y.html file.
      236

      237
       
      238

      239
      Copy the distribution files to a temporary directory, unpack them,
      240
      compile everything, and run some demos to be sure everything works.
      241

      242
       
      243

      Update the website and announce the release

      244

      245
      Make a new directory for the release on annarchy.freedesktop.org with:
      246

      247
      248
      mkdir /srv/ftp.freedesktop.org/pub/mesa/x.y
      249
      250

      251
       
      252

      253
      Basically, to upload the tarball files with:
      254

      255
      256
      rsync -avP -e ssh MesaLib-x.y.* USERNAME@annarchy.freedesktop.org:/srv/ftp.freedesktop.org/pub/mesa/x.y/
      257
      258

      259
       
      260

      261
      Update the web site by copying the docs/ directory's files to
      262
      /home/users/b/br/brianp/mesa-www/htdocs/ with:
      263

      264
      265
      sftp USERNAME,mesa3d@web.sourceforge.net
      266
      267

      268
       
      269

      270
      Make an announcement on the mailing lists:
      271
       
      272
      mesa-dev@lists.freedesktop.org,
      273
      mesa-users@lists.freedesktop.org
      274
      and
      275
      mesa-announce@lists.freedesktop.org
      276

      277
       
      278
      279
      280