зеркало из https://github.com/mozilla/gecko-dev.git
Rewrite genshaders.sh as a Python script that uses a manifest. (bug 1365859 part 1, r=bas)
--HG-- extra : rebase_source : a5b60ab1c5531c7e911fc6c6e522d4e7b8cc2497
This commit is contained in:
Родитель
ac4efab30b
Коммит
8894231cd7
|
@ -13,11 +13,11 @@
|
||||||
#include <d3d11.h>
|
#include <d3d11.h>
|
||||||
#include <dxgi1_2.h>
|
#include <dxgi1_2.h>
|
||||||
|
|
||||||
struct ShaderBytes;
|
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace layers {
|
namespace layers {
|
||||||
|
|
||||||
|
struct ShaderBytes;
|
||||||
|
|
||||||
class DeviceAttachmentsD3D11
|
class DeviceAttachmentsD3D11
|
||||||
{
|
{
|
||||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(DeviceAttachmentsD3D11);
|
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(DeviceAttachmentsD3D11);
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
import argparse
|
||||||
|
import codecs
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import tempfile
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
def shell_main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('-o', '--output', type=str, required=True,
|
||||||
|
help='Output file')
|
||||||
|
parser.add_argument('manifest', type=str,
|
||||||
|
help='Manifest source file')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
with open(args.output, 'w') as out_file:
|
||||||
|
process_manifest(out_file, args.manifest)
|
||||||
|
|
||||||
|
def main(output_fp, input_filename):
|
||||||
|
process_manifest(output_fp, input_filename)
|
||||||
|
|
||||||
|
HEADER = """// AUTOGENERATED - DO NOT EDIT
|
||||||
|
namespace mozilla {
|
||||||
|
namespace layers {
|
||||||
|
|
||||||
|
struct ShaderBytes { const void* mData; size_t mLength; };
|
||||||
|
"""
|
||||||
|
FOOTER = """
|
||||||
|
} // namespace layers
|
||||||
|
} // namespace mozilla"""
|
||||||
|
|
||||||
|
def process_manifest(output_fp, manifest_filename):
|
||||||
|
with codecs.open(manifest_filename, 'r', 'UTF-8') as in_fp:
|
||||||
|
manifest = yaml.load(in_fp)
|
||||||
|
shader_folder, _ = os.path.split(manifest_filename)
|
||||||
|
|
||||||
|
output_fp.write(HEADER)
|
||||||
|
|
||||||
|
for block in manifest:
|
||||||
|
if 'type' not in block:
|
||||||
|
raise Exception("Expected 'type' key with shader mode")
|
||||||
|
if 'file' not in block:
|
||||||
|
raise Exception("Expected 'file' key with shader file")
|
||||||
|
if 'shaders' not in block:
|
||||||
|
raise Exception("Expected 'shaders' key with shader name list")
|
||||||
|
|
||||||
|
shader_model = block['type']
|
||||||
|
shader_file = os.path.join(shader_folder, block['file'])
|
||||||
|
for shader_name in block['shaders']:
|
||||||
|
run_fxc(
|
||||||
|
shader_model = shader_model,
|
||||||
|
shader_file = shader_file,
|
||||||
|
shader_name = shader_name,
|
||||||
|
output_fp = output_fp)
|
||||||
|
|
||||||
|
output_fp.write(FOOTER)
|
||||||
|
|
||||||
|
def run_fxc(shader_model,
|
||||||
|
shader_file,
|
||||||
|
shader_name,
|
||||||
|
output_fp):
|
||||||
|
argv = [
|
||||||
|
'fxc',
|
||||||
|
'-nologo',
|
||||||
|
'-T{0}'.format(shader_model),
|
||||||
|
shader_file,
|
||||||
|
'-E{0}'.format(shader_name),
|
||||||
|
'-Vn{0}'.format(shader_name),
|
||||||
|
]
|
||||||
|
if shader_model.startswith('vs_'):
|
||||||
|
argv += ['-DVERTEX_SHADER']
|
||||||
|
elif shader_model.startswith('ps_'):
|
||||||
|
argv += ['-DPIXEL_SHADER']
|
||||||
|
|
||||||
|
with ScopedTempFilename() as temp_filename:
|
||||||
|
argv += ['-Fh{0}'.format(temp_filename)]
|
||||||
|
|
||||||
|
sys.stdout.write('{0}\n'.format(' '.join(argv)))
|
||||||
|
subprocess.check_call(argv)
|
||||||
|
|
||||||
|
with open(temp_filename, 'r') as temp_fp:
|
||||||
|
output_fp.write(temp_fp.read())
|
||||||
|
|
||||||
|
output_fp.write("ShaderBytes s{0} = {{ {0}, sizeof({0}) }};\n".format(
|
||||||
|
shader_name))
|
||||||
|
|
||||||
|
# Allocate a temporary file name and delete it when done. We need an extra
|
||||||
|
# wrapper for this since TemporaryNamedFile holds the file open.
|
||||||
|
class ScopedTempFilename(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.name = None
|
||||||
|
def __enter__(self):
|
||||||
|
with tempfile.NamedTemporaryFile(delete = False) as tmp:
|
||||||
|
self.name = tmp.name
|
||||||
|
return self.name
|
||||||
|
def __exit__(self, type, value, traceback):
|
||||||
|
if not self.name:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
os.unlink(self.name)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
shell_main()
|
|
@ -1,56 +0,0 @@
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
tempfile=tmpShaderHeader
|
|
||||||
|
|
||||||
FXC_DEBUG_FLAGS="-Zi -Fd shaders.pdb"
|
|
||||||
FXC_FLAGS=""
|
|
||||||
|
|
||||||
# If DEBUG is in the environment, then rebuild with debug info
|
|
||||||
if [ "$DEBUG" != "" ] ; then
|
|
||||||
FXC_FLAGS="$FXC_DEBUG_FLAGS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
makeShaderVS() {
|
|
||||||
fxc -nologo $FXC_FLAGS -Tvs_4_0_level_9_3 $SRC -E$1 -Vn$1 -Fh$tempfile
|
|
||||||
echo "ShaderBytes s$1 = { $1, sizeof($1) };" >> $tempfile;
|
|
||||||
cat $tempfile >> $DEST
|
|
||||||
}
|
|
||||||
|
|
||||||
makeShaderPS() {
|
|
||||||
fxc -nologo $FXC_FLAGS -Tps_4_0_level_9_3 $SRC -E$1 -Vn$1 -Fh$tempfile
|
|
||||||
echo "ShaderBytes s$1 = { $1, sizeof($1) };" >> $tempfile;
|
|
||||||
cat $tempfile >> $DEST
|
|
||||||
}
|
|
||||||
|
|
||||||
SRC=CompositorD3D11.hlsl
|
|
||||||
DEST=CompositorD3D11Shaders.h
|
|
||||||
|
|
||||||
rm -f $DEST
|
|
||||||
echo "struct ShaderBytes { const void* mData; size_t mLength; };" >> $DEST;
|
|
||||||
makeShaderVS LayerQuadVS
|
|
||||||
makeShaderVS LayerDynamicVS
|
|
||||||
makeShaderPS SolidColorShader
|
|
||||||
makeShaderPS RGBShader
|
|
||||||
makeShaderPS RGBAShader
|
|
||||||
makeShaderPS ComponentAlphaShader
|
|
||||||
makeShaderPS YCbCrShader
|
|
||||||
makeShaderPS NV12Shader
|
|
||||||
makeShaderVS LayerQuadMaskVS
|
|
||||||
makeShaderVS LayerDynamicMaskVS
|
|
||||||
makeShaderPS SolidColorShaderMask
|
|
||||||
makeShaderPS RGBShaderMask
|
|
||||||
makeShaderPS RGBAShaderMask
|
|
||||||
makeShaderPS YCbCrShaderMask
|
|
||||||
makeShaderPS NV12ShaderMask
|
|
||||||
makeShaderPS ComponentAlphaShaderMask
|
|
||||||
|
|
||||||
# Mix-blend shaders
|
|
||||||
makeShaderVS LayerQuadBlendVS
|
|
||||||
makeShaderVS LayerQuadBlendMaskVS
|
|
||||||
makeShaderVS LayerDynamicBlendVS
|
|
||||||
makeShaderVS LayerDynamicBlendMaskVS
|
|
||||||
makeShaderPS BlendShader
|
|
||||||
|
|
||||||
rm $tempfile
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
- type: vs_4_0_level_9_3
|
||||||
|
file: CompositorD3D11.hlsl
|
||||||
|
shaders:
|
||||||
|
- LayerQuadVS
|
||||||
|
- LayerDynamicVS
|
||||||
|
- LayerQuadMaskVS
|
||||||
|
- LayerDynamicMaskVS
|
||||||
|
- LayerQuadBlendVS
|
||||||
|
- LayerQuadBlendMaskVS
|
||||||
|
- LayerDynamicBlendVS
|
||||||
|
- LayerDynamicBlendMaskVS
|
||||||
|
|
||||||
|
- type: ps_4_0_level_9_3
|
||||||
|
file: CompositorD3D11.hlsl
|
||||||
|
shaders:
|
||||||
|
- SolidColorShader
|
||||||
|
- RGBShader
|
||||||
|
- RGBAShader
|
||||||
|
- ComponentAlphaShader
|
||||||
|
- YCbCrShader
|
||||||
|
- NV12Shader
|
||||||
|
- SolidColorShaderMask
|
||||||
|
- RGBShaderMask
|
||||||
|
- RGBAShaderMask
|
||||||
|
- YCbCrShaderMask
|
||||||
|
- NV12ShaderMask
|
||||||
|
- ComponentAlphaShaderMask
|
||||||
|
- BlendShader
|
|
@ -42,9 +42,13 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// See CompositorD3D11Shaders.h
|
// See CompositorD3D11Shaders.h
|
||||||
|
namespace mozilla {
|
||||||
|
namespace layers {
|
||||||
struct ShaderBytes { const void* mData; size_t mLength; };
|
struct ShaderBytes { const void* mData; size_t mLength; };
|
||||||
extern ShaderBytes sRGBShader;
|
extern ShaderBytes sRGBShader;
|
||||||
extern ShaderBytes sLayerQuadVS;
|
extern ShaderBytes sLayerQuadVS;
|
||||||
|
} // namespace layers
|
||||||
|
} // namespace mozilla
|
||||||
#ifndef M_PI
|
#ifndef M_PI
|
||||||
# define M_PI 3.14159265358979323846
|
# define M_PI 3.14159265358979323846
|
||||||
#endif
|
#endif
|
||||||
|
@ -1504,4 +1508,4 @@ VRSystemManagerOculus::RemoveControllers()
|
||||||
|
|
||||||
mOculusController.Clear();
|
mOculusController.Clear();
|
||||||
mControllerCount = 0;
|
mControllerCount = 0;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче