From 68609cdff88733007539268d9e2d76f8f5730dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Capucho?= Date: Sun, 20 Jun 2021 10:44:10 +0100 Subject: [PATCH] [glsl-in] Implement textureSize --- src/front/glsl/functions.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/front/glsl/functions.rs b/src/front/glsl/functions.rs index ee0697684c..8dd0c0d36a 100644 --- a/src/front/glsl/functions.rs +++ b/src/front/glsl/functions.rs @@ -1,8 +1,8 @@ use crate::{ proc::ensure_block_returns, Arena, BinaryOperator, Block, EntryPoint, Expression, Function, - FunctionArgument, FunctionResult, Handle, LocalVariable, MathFunction, RelationalFunction, - SampleLevel, ScalarKind, Statement, StructMember, SwizzleComponent, Type, TypeInner, - VectorSize, + FunctionArgument, FunctionResult, Handle, ImageQuery, LocalVariable, MathFunction, + RelationalFunction, SampleLevel, ScalarKind, Statement, StructMember, SwizzleComponent, Type, + TypeInner, VectorSize, }; use super::{ast::*, error::ErrorKind, SourceMetadata}; @@ -204,6 +204,21 @@ impl Program<'_> { )) } } + "textureSize" => { + if !(1..=2).contains(&args.len()) { + return Err(ErrorKind::wrong_function_args(name, 1, args.len(), meta)); + } + + Ok(Some(ctx.add_expression( + Expression::ImageQuery { + image: args[0].0, + query: ImageQuery::Size { + level: args.get(1).map(|e| e.0), + }, + }, + body, + ))) + } "texelFetch" => { if args.len() != 3 { return Err(ErrorKind::wrong_function_args(name, 3, args.len(), meta));