Module: RLSL

Defined in:
lib/rlsl.rb,
lib/rlsl/types.rb,
lib/rlsl/version.rb,
lib/rlsl/msl/shader.rb,
lib/rlsl/prism/ir/node.rb,
lib/rlsl/types/catalog.rb,
lib/rlsl/code_generator.rb,
lib/rlsl/msl/translator.rb,
lib/rlsl/prism/builtins.rb,
lib/rlsl/runtime_shader.rb,
lib/rlsl/shader_builder.rb,
lib/rlsl/base_translator.rb,
lib/rlsl/compiled_shader.rb,
lib/rlsl/glsl/translator.rb,
lib/rlsl/types/type_spec.rb,
lib/rlsl/uniform_context.rb,
lib/rlsl/wgsl/translator.rb,
lib/rlsl/function_context.rb,
lib/rlsl/prism/transpiler.rb,
lib/rlsl/prism/ast_visitor.rb,
lib/rlsl/prism/source_unit.rb,
lib/rlsl/prism/ir/traversal.rb,
lib/rlsl/prism/ir/definitions.rb,
lib/rlsl/prism/ir/expressions.rb,
lib/rlsl/prism/type_inference.rb,
lib/rlsl/prism/ir/control_flow.rb,
lib/rlsl/types/target_resolver.rb,
lib/rlsl/prism/compilation_unit.rb,
lib/rlsl/prism/source_extractor.rb,
lib/rlsl/types/value_normalizer.rb,
lib/rlsl/prism/emitters/c_emitter.rb,
lib/rlsl/prism/source_unit/parser.rb,
lib/rlsl/msl/uniform_buffer_packer.rb,
lib/rlsl/prism/emitters/msl_emitter.rb,
lib/rlsl/base_translator/call_parser.rb,
lib/rlsl/code_generator/math_prelude.rb,
lib/rlsl/prism/emitters/base_emitter.rb,
lib/rlsl/prism/emitters/glsl_emitter.rb,
lib/rlsl/prism/emitters/wgsl_emitter.rb,
lib/rlsl/base_translator/code_scanner.rb,
lib/rlsl/prism/builtins/swizzle_rules.rb,
lib/rlsl/shader_builder/build_service.rb,
lib/rlsl/base_translator/code_rewriter.rb,
lib/rlsl/prism/builtins/operator_rules.rb,
lib/rlsl/prism/emitters/target_emitter.rb,
lib/rlsl/prism/emitters/target_profile.rb,
lib/rlsl/shader_builder/source_resolver.rb,
lib/rlsl/code_generator/template_context.rb,
lib/rlsl/prism/ast_visitor/scope_context.rb,
lib/rlsl/prism/builtins/function_registry.rb,
lib/rlsl/prism/type_inference/scope_stack.rb,
lib/rlsl/prism/type_inference/type_shapes.rb,
lib/rlsl/shader_builder/shader_definition.rb,
lib/rlsl/prism/target_capability_validator.rb,
lib/rlsl/prism/ast_visitor/visitor_registry.rb,
lib/rlsl/prism/type_inference/call_validator.rb,
lib/rlsl/prism/source_extractor/block_locator.rb,
lib/rlsl/code_generator/ruby_wrapper_generator.rb,
lib/rlsl/prism/ast_visitor/definition_visiting.rb,
lib/rlsl/prism/ast_visitor/expression_visiting.rb,
lib/rlsl/prism/type_inference/inferer_registry.rb,
lib/rlsl/prism/type_inference/type_environment.rb,
lib/rlsl/code_generator/uniform_struct_generator.rb,
lib/rlsl/prism/ast_visitor/control_flow_visiting.rb,
lib/rlsl/prism/type_inference/call_type_resolver.rb,
lib/rlsl/prism/type_inference/definition_inferer.rb,
lib/rlsl/prism/type_inference/expression_inferer.rb,
lib/rlsl/code_generator/shader_function_generator.rb,
lib/rlsl/prism/type_inference/field_type_resolver.rb,
lib/rlsl/shader_builder/native_extension_compiler.rb,
lib/rlsl/prism/type_inference/control_flow_inferer.rb,
lib/rlsl/prism/type_inference/collection_type_resolver.rb,
lib/rlsl/prism/emitters/base_emitter/statement_emission.rb,
lib/rlsl/prism/emitters/base_emitter/definition_emission.rb,
lib/rlsl/prism/emitters/base_emitter/expression_emission.rb,
lib/rlsl/prism/emitters/base_emitter/control_flow_emission.rb

Defined Under Namespace

Modules: CompiledShaders, GLSL, MSL, Prism, TypeMapping, UniformTypes, WGSL Classes: BaseTranslator, CodeGenerator, CompiledShader, FunctionContext, RuntimeShader, ShaderBuilder, UniformContext, UniformTypeSpec

Constant Summary collapse

CACHE_DIR =
File.expand_path("~/.cache/rlsl/compiled")
VERSION =
"1.0.0"
C_TYPES =
<<~C
  typedef struct { float x, y; } vec2;
  typedef struct { float x, y, z; } vec3;
  typedef struct { float x, y, z, w; } vec4;
  typedef struct { float m[4]; } mat2;
  typedef struct { float m[9]; } mat3;
  typedef struct { float m[16]; } mat4;
  typedef struct { void* data; int width; int height; } sampler2D;

  #define PI 3.14159265f
  #define TAU 6.28318530f
C
UNIFORM_TYPE_SPECS =
{
  float: UniformTypeSpec.new(
    c_type: "float",
    glsl_type: "float",
    wgsl_type: "f32",
    msl_type: "float",
    wrapper_kind: :float,
    metal_alignment: 4,
    metal_size: 4,
    compiled_supported: true,
    runtime_supported: true,
    function_shorthand: true
  ),
  vec2: UniformTypeSpec.new(
    c_type: "vec2",
    glsl_type: "vec2",
    wgsl_type: "vec2<f32>",
    msl_type: "float2",
    wrapper_kind: :vector,
    vector_size: 2,
    metal_alignment: 8,
    metal_size: 8,
    compiled_supported: true,
    runtime_supported: true,
    function_shorthand: true
  ),
  vec3: UniformTypeSpec.new(
    c_type: "vec3",
    glsl_type: "vec3",
    wgsl_type: "vec3<f32>",
    msl_type: "float3",
    wrapper_kind: :vector,
    vector_size: 3,
    metal_alignment: 16,
    metal_size: 16,
    compiled_supported: true,
    runtime_supported: true,
    function_shorthand: true
  ),
  vec4: UniformTypeSpec.new(
    c_type: "vec4",
    glsl_type: "vec4",
    wgsl_type: "vec4<f32>",
    msl_type: "float4",
    wrapper_kind: :vector,
    vector_size: 4,
    metal_alignment: 16,
    metal_size: 16,
    compiled_supported: true,
    runtime_supported: true,
    function_shorthand: true
  ),
  int: UniformTypeSpec.new(
    c_type: "int",
    glsl_type: "int",
    wgsl_type: "i32",
    msl_type: "int",
    wrapper_kind: :int,
    metal_alignment: 4,
    metal_size: 4,
    compiled_supported: true,
    runtime_supported: true,
    function_shorthand: true
  ),
  bool: UniformTypeSpec.new(
    c_type: "int",
    glsl_type: "bool",
    wgsl_type: "bool",
    msl_type: "bool",
    wrapper_kind: :bool,
    metal_alignment: 4,
    metal_size: 4,
    compiled_supported: true,
    runtime_supported: true,
    function_shorthand: true
  ),
  mat2: UniformTypeSpec.new(
    c_type: "mat2",
    glsl_type: "mat2",
    wgsl_type: "mat2x2<f32>",
    msl_type: "float2x2",
    compiled_supported: false,
    runtime_supported: false,
    function_shorthand: true
  ),
  mat3: UniformTypeSpec.new(
    c_type: "mat3",
    glsl_type: "mat3",
    wgsl_type: "mat3x3<f32>",
    msl_type: "float3x3",
    compiled_supported: false,
    runtime_supported: false,
    function_shorthand: true
  ),
  mat4: UniformTypeSpec.new(
    c_type: "mat4",
    glsl_type: "mat4",
    wgsl_type: "mat4x4<f32>",
    msl_type: "float4x4",
    compiled_supported: false,
    runtime_supported: false,
    function_shorthand: true
  ),
  sampler2D: UniformTypeSpec.new(
    c_type: "sampler2D",
    glsl_type: "sampler2D",
    wgsl_type: "texture_2d<f32>",
    msl_type: nil,
    compiled_supported: false,
    runtime_supported: false,
    function_shorthand: true
  )
}.transform_values(&:freeze).freeze
UNIFORM_TYPES =
UNIFORM_TYPE_SPECS.keys.freeze

Class Method Summary collapse

Class Method Details

.cache_dirObject



41
42
43
44
45
46
# File 'lib/rlsl.rb', line 41

def cache_dir
  @cache_dir ||= begin
    FileUtils.mkdir_p(CACHE_DIR)
    CACHE_DIR
  end
end

.define(name, &block) ⇒ Object



25
26
27
# File 'lib/rlsl.rb', line 25

def define(name, &block)
  build_shader(name, &block).compile_and_load
end

.define_metal(name, &block) ⇒ Object



29
30
31
# File 'lib/rlsl.rb', line 29

def define_metal(name, &block)
  build_shader(name, &block).build_metal_shader
end

.to_glsl(name, version: "450", &block) ⇒ Object



37
38
39
# File 'lib/rlsl.rb', line 37

def to_glsl(name, version: "450", &block)
  build_shader(name, &block).build_glsl_shader(version: version)
end

.to_wgsl(name, &block) ⇒ Object



33
34
35
# File 'lib/rlsl.rb', line 33

def to_wgsl(name, &block)
  build_shader(name, &block).build_wgsl_shader
end