elif fmat.has_channel('i') and fmat.num_channels() == 1:
return 'GL_INTENSITY'
else:
- assert False
+ sys.exit("error, could not determine base format for {0}, check swizzle".format(fmat.name));
def get_gl_data_type(fmat):
if fmat.is_compressed():
- if 'SIGNED' in fmat.name or 'SNORM' in fmat.name:
+ if 'FLOAT' in fmat.name:
+ return 'GL_FLOAT'
+ elif 'SIGNED' in fmat.name or 'SNORM' in fmat.name:
return 'GL_SIGNED_NORMALIZED'
else:
return 'GL_UNSIGNED_NORMALIZED'
else:
assert False
-def get_mesa_layout(fmat):
- if fmat.layout == 'array':
- return 'MESA_FORMAT_LAYOUT_ARRAY'
- elif fmat.layout == 'packed':
- return 'MESA_FORMAT_LAYOUT_PACKED'
- else:
- return 'MESA_FORMAT_LAYOUT_OTHER'
-
def get_channel_bits(fmat, chan_name):
if fmat.is_compressed():
# These values are pretty-much bogus, but OpenGL requires that we
return 1 if fmat.has_channel('a') else 0
else:
return 0
- elif fmat.layout == 'rgtc':
+ elif fmat.layout in ('rgtc', 'latc'):
return 8 if fmat.has_channel(chan_name) else 0
elif fmat.layout in ('etc1', 'etc2'):
if fmat.name.endswith('_ALPHA1') and chan_name == 'a':
bits = 11 if fmat.name.endswith('11_EAC') else 8
return bits if fmat.has_channel(chan_name) else 0
+ elif fmat.layout == 'bptc':
+ bits = 16 if fmat.name.endswith('_FLOAT') else 8
+ return bits if fmat.has_channel(chan_name) else 0
+ elif fmat.layout == 'astc':
+ bits = 16 if 'RGBA' in fmat.name else 8
+ return bits if fmat.has_channel(chan_name) else 0
else:
assert False
else:
print ' {'
print ' {0},'.format(fmat.name)
print ' "{0}",'.format(fmat.name)
- print ' {0},'.format(get_mesa_layout(fmat))
+ print ' {0},'.format('MESA_FORMAT_LAYOUT_' + fmat.layout.upper())
print ' {0},'.format(get_gl_base_format(fmat))
print ' {0},'.format(get_gl_data_type(fmat))
bits = [ get_channel_bits(fmat, name) for name in ['l', 'i', 'z', 's']]
print ' {0},'.format(', '.join(map(str, bits)))
- print ' {0}, {1}, {2},'.format(fmat.block_width, fmat.block_height,
- int(fmat.block_size() / 8))
+ print ' {0:d},'.format(fmat.colorspace == 'srgb')
+
+ print ' {0}, {1}, {2}, {3},'.format(fmat.block_width, fmat.block_height,
+ fmat.block_depth,
+ int(fmat.block_size() / 8))
print ' {{ {0} }},'.format(', '.join(map(str, fmat.swizzle)))
+ if fmat.is_array():
+ chan = fmat.array_element()
+ norm = chan.norm or chan.type == parser.FLOAT
+ print ' MESA_ARRAY_FORMAT({0}),'.format(', '.join([
+ str(chan.size / 8),
+ str(int(chan.sign)),
+ str(int(chan.type == parser.FLOAT)),
+ str(int(norm)),
+ str(len(fmat.channels)),
+ str(fmat.swizzle[0]),
+ str(fmat.swizzle[1]),
+ str(fmat.swizzle[2]),
+ str(fmat.swizzle[3]),
+ ]))
+ else:
+ print ' 0,'
print ' },'
print '};'