mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
glsl: Add support for generating builtin code from GLSL instead of IR.
This takes advantage of the builtin compiler to generate IR into a string, the same way we read GLSL for function prototypes for our profiles. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
41b47441d7
commit
7de1331662
1 changed files with 16 additions and 4 deletions
|
|
@ -29,11 +29,23 @@ def read_ir_files(fs):
|
|||
with open(filename) as f:
|
||||
fs[function_name] = f.read()
|
||||
|
||||
def read_glsl_files(fs):
|
||||
for filename in glob(path.join(path.join(builtins_dir, 'glsl'), '*.glsl')):
|
||||
function_name = path.basename(filename).split('.')[0]
|
||||
(output, returncode) = run_compiler([filename])
|
||||
if (returncode):
|
||||
sys.stderr.write("Failed to compile builtin: " + filename + "\n")
|
||||
sys.stderr.write("Result:\n")
|
||||
sys.stderr.write(output)
|
||||
else:
|
||||
fs[function_name] = output;
|
||||
|
||||
# Return a dictionary containing all builtin definitions (even generated)
|
||||
def get_builtin_definitions():
|
||||
fs = {}
|
||||
generate_texture_functions(fs)
|
||||
read_ir_files(fs)
|
||||
read_glsl_files(fs)
|
||||
return fs
|
||||
|
||||
def stringify(s):
|
||||
|
|
@ -78,6 +90,10 @@ def run_compiler(args):
|
|||
# Also toss any duplicate newlines
|
||||
output = output.replace('\n\n', '\n')
|
||||
|
||||
# Kill any global variable declarations. We don't want them.
|
||||
kill_globals = re.compile(r'^\(declare.*\n', re.MULTILINE)
|
||||
output = kill_globals.sub('', output)
|
||||
|
||||
return (output, p.returncode)
|
||||
|
||||
def write_profile(filename, profile):
|
||||
|
|
@ -87,10 +103,6 @@ def write_profile(filename, profile):
|
|||
print '#error builtins profile', profile, 'failed to compile'
|
||||
return
|
||||
|
||||
# Kill any global variable declarations. We don't want them.
|
||||
kill_globals = re.compile(r'^\(declare.*\n', re.MULTILINE)
|
||||
proto_ir = kill_globals.sub('', proto_ir)
|
||||
|
||||
print 'static const char prototypes_for_' + profile + '[] ='
|
||||
print stringify(proto_ir), ';'
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue