diff --git a/src/front/glsl_new/ast.rs b/src/front/glsl_new/ast.rs index 2ac0dd0bfe..39b28e919b 100644 --- a/src/front/glsl_new/ast.rs +++ b/src/front/glsl_new/ast.rs @@ -1,4 +1,4 @@ -use crate::{Arena, FastHashMap, Function, Handle, Type}; +use crate::{Arena, Constant, FastHashMap, Function, Handle, Type}; #[derive(Debug)] pub struct Program { @@ -9,6 +9,7 @@ pub struct Program { pub functions: Arena, pub lookup_type: FastHashMap>, pub types: Arena, + pub constants: Arena, } impl Program { @@ -21,6 +22,7 @@ impl Program { functions: Arena::::new(), lookup_type: FastHashMap::default(), types: Arena::::new(), + constants: Arena::::new(), } } } diff --git a/src/front/glsl_new/mod.rs b/src/front/glsl_new/mod.rs index ca5c530f2a..44ad43b4bd 100644 --- a/src/front/glsl_new/mod.rs +++ b/src/front/glsl_new/mod.rs @@ -30,6 +30,7 @@ pub fn parse_str(source: &str, entry: String, stage: ShaderStage) -> Result {}; @@ -75,7 +75,21 @@ pomelo! { variable_identifier ::= Identifier; primary_expression ::= variable_identifier; - primary_expression ::= IntConstant; + primary_expression ::= IntConstant(i) { + let ty = extra.types.fetch_or_append(Type { + name: None, + inner: TypeInner::Scalar { + kind: ScalarKind::Sint, + width: 4, + } + }); + let ch = extra.constants.fetch_or_append(Constant { + name: None, + specialization: None, + ty, + inner: ConstantInner::Sint(i.1) + }); + } primary_expression ::= UintConstant; primary_expression ::= FloatConstant; primary_expression ::= BoolConstant;