[spv-in] flip Y axis

This commit is contained in:
Dzmitry Malyshau
2021-04-01 01:25:34 -04:00
committed by Dzmitry Malyshau
parent 4389a86787
commit ab54f683be
3 changed files with 35 additions and 4 deletions

View File

@@ -279,12 +279,41 @@ impl<I: Iterator<Item = u32>> super::Parser<I> {
}
}
let old_len = function.expressions.len();
for component in components.iter_mut() {
*component = function.expressions.append(crate::Expression::Load {
pointer: *component,
let position_index = members.iter().position(|member| match member.binding {
Some(crate::Binding::BuiltIn(crate::BuiltIn::Position)) => true,
_ => false,
});
if let Some(component_index) = position_index {
let old_len = function.expressions.len();
let global_expr = components[component_index];
let access_expr = function.expressions.append(crate::Expression::AccessIndex {
base: global_expr,
index: 1,
});
let load_expr = function.expressions.append(crate::Expression::Load {
pointer: access_expr,
});
let neg_expr = function.expressions.append(crate::Expression::Unary {
op: crate::UnaryOperator::Negate,
expr: load_expr,
});
function.body.push(crate::Statement::Emit(
function.expressions.range_from(old_len),
));
function.body.push(crate::Statement::Store {
pointer: access_expr,
value: neg_expr,
});
}
let old_len = function.expressions.len();
for component in components.iter_mut() {
let load_expr = crate::Expression::Load {
pointer: *component,
};
*component = function.expressions.append(load_expr);
}
match members.len() {
0 => {}
1 => {

View File

@@ -1825,6 +1825,7 @@ impl<I: Iterator<Item = u32>> Parser<I> {
crate::Module::default()
};
// register indexing constants
self.index_constants.clear();
for i in 0..4 {
let handle = module.constants.append(crate::Constant {

View File

@@ -69,6 +69,7 @@ vertex main2Output main2(
a_uv = a_uv1;
a_pos = a_pos1;
main1(v_uv, a_uv, _, a_pos);
_.gl_Position.y = -_.gl_Position.y;
const auto _tmp = type10 {v_uv, _.gl_Position, _.gl_PointSize, {_.gl_ClipDistance[0]}};
return main2Output { _tmp.member, _tmp.gl_Position1, _tmp.gl_PointSize1, {_tmp.gl_ClipDistance1[0]} };
}