writer/hlsl: Emit for-loops where possible.

Use the new transforms to try and simplify loops into for-loops.
Emit loops when the initialiser, condition and continuing are simple enough to do so.

Bug: tint:952
Change-Id: I5b3c225b245ffa72996abf6a70f52a9cd25b748e
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/56772
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
Ben Clayton 2021-07-02 22:17:25 +00:00
parent 9ad49e43c1
commit 0e41747281
27 changed files with 1163 additions and 657 deletions

View File

@ -21,7 +21,9 @@
#include "src/transform/canonicalize_entry_point_io.h"
#include "src/transform/decompose_memory_access.h"
#include "src/transform/external_texture_transform.h"
#include "src/transform/fold_trivial_single_use_lets.h"
#include "src/transform/inline_pointer_lets.h"
#include "src/transform/loop_to_for_loop.h"
#include "src/transform/manager.h"
#include "src/transform/pad_array_elements.h"
#include "src/transform/promote_initializers_to_const_var.h"
@ -40,6 +42,12 @@ Hlsl::~Hlsl() = default;
Output Hlsl::Run(const Program* in, const DataMap&) {
Manager manager;
DataMap data;
// Attempt to convert `loop`s into for-loops. This is to try and massage the
// output into something that will not cause FXC to choke or misbehave.
manager.Add<FoldTrivialSingleUseLets>();
manager.Add<LoopToForLoop>();
// ZeroInitWorkgroupMemory must come before CanonicalizeEntryPointIO as
// ZeroInitWorkgroupMemory may inject new builtin parameters.
manager.Add<ZeroInitWorkgroupMemory>();

View File

@ -2549,6 +2549,111 @@ bool GeneratorImpl::EmitLoop(ast::LoopStatement* stmt) {
return true;
}
bool GeneratorImpl::EmitForLoop(ast::ForLoopStatement* stmt) {
TextBuffer init_buf;
if (auto* init = stmt->initializer()) {
TINT_SCOPED_ASSIGNMENT(current_buffer_, &init_buf);
if (!EmitStatement(init)) {
return false;
}
}
bool multi_stmt_init = init_buf.lines.size() > 1;
// For-loop has multi-statement initializer.
// This cannot be emitted with a regular for loop, so instead nest the loop in
// a new block scope prefixed with these initializer statements.
if (multi_stmt_init) {
line() << "{";
increment_indent();
current_buffer_->Append(init_buf);
init_buf.lines.clear(); // Don't emit the initializer again in the 'for'
}
TextBuffer cond_pre;
std::stringstream cond_buf;
if (auto* cond = stmt->condition()) {
TINT_SCOPED_ASSIGNMENT(current_buffer_, &cond_pre);
if (!EmitExpression(cond_buf, cond)) {
return false;
}
}
TextBuffer cont_buf;
if (auto* cont = stmt->continuing()) {
TINT_SCOPED_ASSIGNMENT(current_buffer_, &cont_buf);
if (!EmitStatement(cont)) {
return false;
}
}
if (cond_pre.lines.size() > 0 || cont_buf.lines.size() > 1) {
// For-loop has multi-statement conditional and / or continuing.
// This cannot be emitted with a regular for loop, so instead generate a
// `while(true)` loop.
auto emit_continuing = [&]() {
current_buffer_->Append(cont_buf);
return true;
};
TINT_SCOPED_ASSIGNMENT(emit_continuing_, emit_continuing);
line() << "while (true) {";
{
ScopedIndent si(this);
if (stmt->condition()) {
current_buffer_->Append(cond_pre);
line() << "if (!(" << cond_buf.str() << ")) { break; }";
}
if (!EmitStatements(stmt->body()->statements())) {
return false;
}
if (!emit_continuing()) {
return false;
}
}
line() << "}";
} else {
// For-loop can be generated.
{
auto out = line();
out << "for";
{
ScopedParen sp(out);
if (!init_buf.lines.empty()) {
out << init_buf.lines[0].content << " ";
} else {
out << "; ";
}
out << cond_buf.str() << "; ";
if (!cont_buf.lines.empty()) {
out << TrimSuffix(cont_buf.lines[0].content, ";");
}
}
out << " {";
}
{
auto emit_continuing = [] { return true; };
TINT_SCOPED_ASSIGNMENT(emit_continuing_, emit_continuing);
if (!EmitStatementsWithIndent(stmt->body()->statements())) {
return false;
}
}
line() << "}";
}
if (multi_stmt_init) {
decrement_indent();
line() << "}";
}
return true;
}
bool GeneratorImpl::EmitMemberAccessor(std::ostream& out,
ast::MemberAccessorExpression* expr) {
if (!EmitExpression(out, expr->structure())) {
@ -2617,6 +2722,9 @@ bool GeneratorImpl::EmitStatement(ast::Statement* stmt) {
if (auto* l = stmt->As<ast::LoopStatement>()) {
return EmitLoop(l);
}
if (auto* l = stmt->As<ast::ForLoopStatement>()) {
return EmitForLoop(l);
}
if (auto* r = stmt->As<ast::ReturnStatement>()) {
return EmitReturn(r);
}

View File

@ -25,6 +25,7 @@
#include "src/ast/break_statement.h"
#include "src/ast/continue_statement.h"
#include "src/ast/discard_statement.h"
#include "src/ast/for_loop_statement.h"
#include "src/ast/if_statement.h"
#include "src/ast/loop_statement.h"
#include "src/ast/return_statement.h"
@ -271,6 +272,10 @@ class GeneratorImpl : public TextGenerator {
/// @param stmt the statement to emit
/// @returns true if the statement was emitted
bool EmitLoop(ast::LoopStatement* stmt);
/// Handles a for loop statement
/// @param stmt the statement to emit
/// @returns true if the statement was emitted
bool EmitForLoop(ast::ForLoopStatement* stmt);
/// Handles generating an identifier expression
/// @param out the output of the expression stream
/// @param expr the identifier expression

View File

@ -148,6 +148,227 @@ TEST_F(HlslGeneratorImplTest_Loop, Emit_LoopWithVarUsedInContinuing) {
)");
}
TEST_F(HlslGeneratorImplTest_Loop, Emit_ForLoop) {
// for(; ; ) {
// return;
// }
auto* f = For(nullptr, nullptr, nullptr, Block(Return()));
WrapInFunction(f);
GeneratorImpl& gen = Build();
gen.increment_indent();
ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
EXPECT_EQ(gen.result(), R"( for(; ; ) {
return;
}
)");
}
TEST_F(HlslGeneratorImplTest_Loop, Emit_ForLoopWithSimpleInit) {
// for(var i : i32; ; ) {
// return;
// }
auto* f = For(Decl(Var("i", ty.i32())), nullptr, nullptr, Block(Return()));
WrapInFunction(f);
GeneratorImpl& gen = Build();
gen.increment_indent();
ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
EXPECT_EQ(gen.result(), R"( for(int i = 0; ; ) {
return;
}
)");
}
TEST_F(HlslGeneratorImplTest_Loop, Emit_ForLoopWithMultiStmtInit) {
// for(var b = true && false; ; ) {
// return;
// }
auto* multi_stmt = create<ast::BinaryExpression>(ast::BinaryOp::kLogicalAnd,
Expr(true), Expr(false));
auto* f = For(Decl(Var("b", nullptr, multi_stmt)), nullptr, nullptr,
Block(Return()));
WrapInFunction(f);
GeneratorImpl& gen = Build();
gen.increment_indent();
ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
EXPECT_EQ(gen.result(), R"( {
bool tint_tmp = true;
if (tint_tmp) {
tint_tmp = false;
}
bool b = (tint_tmp);
for(; ; ) {
return;
}
}
)");
}
TEST_F(HlslGeneratorImplTest_Loop, Emit_ForLoopWithSimpleCond) {
// for(; true; ) {
// return;
// }
auto* f = For(nullptr, true, nullptr, Block(Return()));
WrapInFunction(f);
GeneratorImpl& gen = Build();
gen.increment_indent();
ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
EXPECT_EQ(gen.result(), R"( for(; true; ) {
return;
}
)");
}
TEST_F(HlslGeneratorImplTest_Loop, Emit_ForLoopWithMultiStmtCond) {
// for(; true && false; ) {
// return;
// }
auto* multi_stmt = create<ast::BinaryExpression>(ast::BinaryOp::kLogicalAnd,
Expr(true), Expr(false));
auto* f = For(nullptr, multi_stmt, nullptr, Block(Return()));
WrapInFunction(f);
GeneratorImpl& gen = Build();
gen.increment_indent();
ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
EXPECT_EQ(gen.result(), R"( while (true) {
bool tint_tmp = true;
if (tint_tmp) {
tint_tmp = false;
}
if (!((tint_tmp))) { break; }
return;
}
)");
}
TEST_F(HlslGeneratorImplTest_Loop, Emit_ForLoopWithSimpleCont) {
// for(; ; i = i + 1) {
// return;
// }
auto* v = Decl(Var("i", ty.i32()));
auto* f = For(nullptr, nullptr, Assign("i", Add("i", 1)), Block(Return()));
WrapInFunction(v, f);
GeneratorImpl& gen = Build();
gen.increment_indent();
ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
EXPECT_EQ(gen.result(), R"( for(; ; i = (i + 1)) {
return;
}
)");
}
TEST_F(HlslGeneratorImplTest_Loop, Emit_ForLoopWithMultiStmtCont) {
// for(; ; i = true && false) {
// return;
// }
auto* multi_stmt = create<ast::BinaryExpression>(ast::BinaryOp::kLogicalAnd,
Expr(true), Expr(false));
auto* v = Decl(Var("i", ty.bool_()));
auto* f = For(nullptr, nullptr, Assign("i", multi_stmt), Block(Return()));
WrapInFunction(v, f);
GeneratorImpl& gen = Build();
gen.increment_indent();
ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
EXPECT_EQ(gen.result(), R"( while (true) {
return;
bool tint_tmp = true;
if (tint_tmp) {
tint_tmp = false;
}
i = (tint_tmp);
}
)");
}
TEST_F(HlslGeneratorImplTest_Loop, Emit_ForLoopWithSimpleInitCondCont) {
// for(var i : i32; true; i = i + 1) {
// return;
// }
auto* f = For(Decl(Var("i", ty.i32())), true, Assign("i", Add("i", 1)),
Block(Return()));
WrapInFunction(f);
GeneratorImpl& gen = Build();
gen.increment_indent();
ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
EXPECT_EQ(gen.result(), R"( for(int i = 0; true; i = (i + 1)) {
return;
}
)");
}
TEST_F(HlslGeneratorImplTest_Loop, Emit_ForLoopWithMultiStmtInitCondCont) {
// for(var i = true && false; true && false; i = true && false) {
// return;
// }
auto* multi_stmt_a = create<ast::BinaryExpression>(ast::BinaryOp::kLogicalAnd,
Expr(true), Expr(false));
auto* multi_stmt_b = create<ast::BinaryExpression>(ast::BinaryOp::kLogicalAnd,
Expr(true), Expr(false));
auto* multi_stmt_c = create<ast::BinaryExpression>(ast::BinaryOp::kLogicalAnd,
Expr(true), Expr(false));
auto* f = For(Decl(Var("i", nullptr, multi_stmt_a)), multi_stmt_b,
Assign("i", multi_stmt_c), Block(Return()));
WrapInFunction(f);
GeneratorImpl& gen = Build();
gen.increment_indent();
ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
EXPECT_EQ(gen.result(), R"( {
bool tint_tmp = true;
if (tint_tmp) {
tint_tmp = false;
}
bool i = (tint_tmp);
while (true) {
bool tint_tmp_1 = true;
if (tint_tmp_1) {
tint_tmp_1 = false;
}
if (!((tint_tmp_1))) { break; }
return;
bool tint_tmp_2 = true;
if (tint_tmp_2) {
tint_tmp_2 = false;
}
i = (tint_tmp_2);
}
}
)");
}
} // namespace
} // namespace hlsl
} // namespace writer

View File

@ -7,8 +7,7 @@ void main_1() {
srcValue = x_18;
const uint x_22 = srcValue.x;
srcValue.x = (x_22 + asuint(1));
const uint4 x_27 = srcValue;
Dst[int2(0, 0)] = x_27;
Dst[int2(0, 0)] = srcValue;
return;
}

View File

@ -8,7 +8,6 @@ void main() {
srcValue = x_22;
const uint x_24 = srcValue.x;
const uint x_25 = (x_24 + 1u);
const uint4 x_27 = srcValue;
Dst[int2(0, 0)] = x_27.xxxx;
Dst[int2(0, 0)] = srcValue.xxxx;
return;
}

View File

@ -43,18 +43,14 @@ void main(tint_symbol_2 tint_symbol_1) {
uint i = 0u;
while (true) {
const uint scalar_offset_1 = (12u) / 4;
if (!((i < uniforms[scalar_offset_1 / 4][scalar_offset_1 % 4]))) {
break;
}
if (!(!(!((i < uniforms[scalar_offset_1 / 4][scalar_offset_1 % 4]))))) { break; }
Set_uint4(srcColorBits, i, ConvertToFp16FloatValue(srcColor[i]));
bool tint_tmp_1 = success;
if (tint_tmp_1) {
tint_tmp_1 = (srcColorBits[i] == dstColorBits[i]);
}
success = (tint_tmp_1);
{
i = (i + 1u);
}
i = (i + 1u);
}
}
uint outputIndex = ((GlobalInvocationID.y * uint(size.x)) + GlobalInvocationID.x);

View File

@ -20,16 +20,10 @@ void main(tint_symbol_1 tint_symbol) {
uint result = 0u;
{
uint i = 0u;
while (true) {
if (!((i < dimInner))) {
break;
}
for(; !(!((i < dimInner))); i = (i + 1u)) {
const uint a = (i + (resultCell.x * dimInner));
const uint b = (resultCell.y + (i * dimOutter));
result = (result + (firstMatrix.Load((4u * a)) * secondMatrix.Load((4u * b))));
{
i = (i + 1u);
}
}
}
const uint index = (resultCell.y + (resultCell.x * dimOutter));

View File

@ -255,8 +255,7 @@ int performPartition_i1_i1_(inout int l, inout int h) {
const int x_983 = i_1;
i_1 = 0;
i_1 = x_983;
const int x_72 = j_1;
param_1 = x_72;
param_1 = j_1;
const int x_984 = param_3;
param_3 = 0;
param_3 = x_984;
@ -556,8 +555,7 @@ void quicksort_() {
const int x_1049 = top;
top = 0;
top = x_1049;
const int x_118 = l_1;
param_4 = x_118;
param_4 = l_1;
const int x_1050 = stack.arr[x_110_save];
stack.arr[x_110_save] = 0;
stack.arr[x_110_save] = x_1050;

View File

@ -17,14 +17,8 @@ void main(tint_symbol_1 tint_symbol) {
float4 texel = myTexture.Load(int4(GlobalInvocationID.xy, 0, 0));
{
uint i = 0u;
while (true) {
if (!((i < 1u))) {
break;
}
for(; !(!((i < 1u))); i = (i + 1u)) {
result.Store((4u * (flatIndex + i)), asuint(texel.r));
{
i = (i + 1u);
}
}
}
return;

View File

@ -100,14 +100,8 @@ void main(tint_symbol_1 tint_symbol) {
tint_array_wrapper_3 BCached = (tint_array_wrapper_3)0;
{
uint index = 0u;
while (true) {
if (!((index < (RowPerThread * ColPerThread)))) {
break;
}
for(; !(!((index < (RowPerThread * ColPerThread)))); index = (index + 1u)) {
acc.arr[index] = 0.0f;
{
index = (index + 1u);
}
}
}
const uint ColPerThreadA = (TileInner / 16u);
@ -116,137 +110,71 @@ void main(tint_symbol_1 tint_symbol) {
const uint tileRowB = (local_id.y * RowPerThreadB);
{
uint t = 0u;
while (true) {
if (!((t < numTiles))) {
break;
}
for(; !(!((t < numTiles))); t = (t + 1u)) {
{
uint innerRow = 0u;
while (true) {
if (!((innerRow < RowPerThread))) {
break;
}
for(; !(!((innerRow < RowPerThread))); innerRow = (innerRow + 1u)) {
{
uint innerCol = 0u;
while (true) {
if (!((innerCol < ColPerThreadA))) {
break;
}
for(; !(!((innerCol < ColPerThreadA))); innerCol = (innerCol + 1u)) {
const uint inputRow = (tileRow + innerRow);
const uint inputCol = (tileColA + innerCol);
mm_Asub.arr[inputRow].arr[inputCol] = mm_readA((globalRow + innerRow), ((t * TileInner) + inputCol));
{
innerCol = (innerCol + 1u);
}
}
}
{
innerRow = (innerRow + 1u);
}
}
}
{
uint innerRow = 0u;
while (true) {
if (!((innerRow < RowPerThreadB))) {
break;
}
for(; !(!((innerRow < RowPerThreadB))); innerRow = (innerRow + 1u)) {
{
uint innerCol = 0u;
while (true) {
if (!((innerCol < ColPerThread))) {
break;
}
for(; !(!((innerCol < ColPerThread))); innerCol = (innerCol + 1u)) {
const uint inputRow = (tileRowB + innerRow);
const uint inputCol = (tileCol + innerCol);
mm_Bsub.arr[innerCol].arr[inputCol] = mm_readB(((t * TileInner) + inputRow), (globalCol + innerCol));
{
innerCol = (innerCol + 1u);
}
}
}
{
innerRow = (innerRow + 1u);
}
}
}
GroupMemoryBarrierWithGroupSync();
{
uint k = 0u;
while (true) {
if (!((k < TileInner))) {
break;
}
for(; !(!((k < TileInner))); k = (k + 1u)) {
{
uint inner = 0u;
while (true) {
if (!((inner < ColPerThread))) {
break;
}
for(; !(!((inner < ColPerThread))); inner = (inner + 1u)) {
BCached.arr[inner] = mm_Bsub.arr[k].arr[(tileCol + inner)];
{
inner = (inner + 1u);
}
}
}
{
uint innerRow = 0u;
while (true) {
if (!((innerRow < RowPerThread))) {
break;
}
for(; !(!((innerRow < RowPerThread))); innerRow = (innerRow + 1u)) {
ACached = mm_Asub.arr[(tileRow + innerRow)].arr[k];
{
uint innerCol = 0u;
while (true) {
if (!((innerCol < ColPerThread))) {
break;
}
for(; !(!((innerCol < ColPerThread))); innerCol = (innerCol + 1u)) {
const uint index = ((innerRow * ColPerThread) + innerCol);
acc.arr[index] = (acc.arr[index] + (ACached * BCached.arr[innerCol]));
{
innerCol = (innerCol + 1u);
}
}
}
{
innerRow = (innerRow + 1u);
}
}
}
{
k = (k + 1u);
}
}
}
GroupMemoryBarrierWithGroupSync();
{
t = (t + 1u);
}
}
}
{
uint innerRow = 0u;
while (true) {
if (!((innerRow < RowPerThread))) {
break;
}
for(; !(!((innerRow < RowPerThread))); innerRow = (innerRow + 1u)) {
{
uint innerCol = 0u;
while (true) {
if (!((innerCol < ColPerThread))) {
break;
}
for(; !(!((innerCol < ColPerThread))); innerCol = (innerCol + 1u)) {
const uint index = ((innerRow * ColPerThread) + innerCol);
mm_write((globalRow + innerRow), (globalCol + innerCol), acc.arr[index]);
{
innerCol = (innerCol + 1u);
}
}
}
{
innerRow = (innerRow + 1u);
}
}
}
return;

View File

@ -65,37 +65,25 @@ static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
float3 Mat4x3GetCol0_(Mat4x3_ m) {
Mat4x3_ m1 = (Mat4x3_)0;
m1 = m;
const Mat4x3_ _e2 = m1;
const Mat4x3_ _e5 = m1;
const Mat4x3_ _e8 = m1;
return float3(_e2.mx.x, _e5.my.x, _e8.mz.x);
return float3(m1.mx.x, m1.my.x, m1.mz.x);
}
float3 Mat4x3GetCol1_(Mat4x3_ m2) {
Mat4x3_ m3 = (Mat4x3_)0;
m3 = m2;
const Mat4x3_ _e2 = m3;
const Mat4x3_ _e5 = m3;
const Mat4x3_ _e8 = m3;
return float3(_e2.mx.y, _e5.my.y, _e8.mz.y);
return float3(m3.mx.y, m3.my.y, m3.mz.y);
}
float3 Mat4x3GetCol2_(Mat4x3_ m4) {
Mat4x3_ m5 = (Mat4x3_)0;
m5 = m4;
const Mat4x3_ _e2 = m5;
const Mat4x3_ _e5 = m5;
const Mat4x3_ _e8 = m5;
return float3(_e2.mx.z, _e5.my.z, _e8.mz.z);
return float3(m5.mx.z, m5.my.z, m5.mz.z);
}
float3 Mat4x3GetCol3_(Mat4x3_ m6) {
Mat4x3_ m7 = (Mat4x3_)0;
m7 = m6;
const Mat4x3_ _e2 = m7;
const Mat4x3_ _e5 = m7;
const Mat4x3_ _e8 = m7;
return float3(_e2.mx.w, _e5.my.w, _e8.mz.w);
return float3(m7.mx.w, m7.my.w, m7.mz.w);
}
float4 Mul(Mat4x4_ m8, float4 v) {
@ -103,15 +91,7 @@ float4 Mul(Mat4x4_ m8, float4 v) {
float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
m9 = m8;
v1 = v;
const Mat4x4_ _e4 = m9;
const float4 _e6 = v1;
const Mat4x4_ _e8 = m9;
const float4 _e10 = v1;
const Mat4x4_ _e12 = m9;
const float4 _e14 = v1;
const Mat4x4_ _e16 = m9;
const float4 _e18 = v1;
return float4(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14), dot(_e16.mw, _e18));
return float4(dot(m9.mx, v1), dot(m9.my, v1), dot(m9.mz, v1), dot(m9.mw, v1));
}
float3 Mul1(Mat4x3_ m10, float4 v2) {
@ -119,13 +99,7 @@ float3 Mul1(Mat4x3_ m10, float4 v2) {
float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
m11 = m10;
v3 = v2;
const Mat4x3_ _e4 = m11;
const float4 _e6 = v3;
const Mat4x3_ _e8 = m11;
const float4 _e10 = v3;
const Mat4x3_ _e12 = m11;
const float4 _e14 = v3;
return float3(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14));
return float3(dot(m11.mx, v3), dot(m11.my, v3), dot(m11.mz, v3));
}
float2 Mul2(Mat4x2_ m12, float4 v4) {
@ -133,11 +107,7 @@ float2 Mul2(Mat4x2_ m12, float4 v4) {
float4 v5 = float4(0.0f, 0.0f, 0.0f, 0.0f);
m13 = m12;
v5 = v4;
const Mat4x2_ _e4 = m13;
const float4 _e6 = v5;
const Mat4x2_ _e8 = m13;
const float4 _e10 = v5;
return float2(dot(_e4.mx, _e6), dot(_e8.my, _e10));
return float2(dot(m13.mx, v5), dot(m13.my, v5));
}
float4 Mul3(float3 v6, Mat4x3_ m14) {
@ -145,35 +115,25 @@ float4 Mul3(float3 v6, Mat4x3_ m14) {
Mat4x3_ m15 = (Mat4x3_)0;
v7 = v6;
m15 = m14;
const Mat4x3_ _e5 = m15;
const float3 _e6 = Mat4x3GetCol0_(_e5);
const float3 _e6 = Mat4x3GetCol0_(m15);
const float3 _e7 = v7;
const Mat4x3_ _e10 = m15;
const float3 _e11 = Mat4x3GetCol1_(_e10);
const float3 _e11 = Mat4x3GetCol1_(m15);
const float3 _e12 = v7;
const Mat4x3_ _e15 = m15;
const float3 _e16 = Mat4x3GetCol2_(_e15);
const float3 _e16 = Mat4x3GetCol2_(m15);
const float3 _e17 = v7;
const Mat4x3_ _e20 = m15;
const float3 _e21 = Mat4x3GetCol3_(_e20);
const float3 _e22 = v7;
return float4(dot(_e6, _e7), dot(_e11, _e12), dot(_e16, _e17), dot(_e21, _e22));
const float3 _e21 = Mat4x3GetCol3_(m15);
return float4(dot(_e6, _e7), dot(_e11, _e12), dot(_e16, _e17), dot(_e21, v7));
}
Mat4x4_ _Mat4x4_(float n) {
float n1 = 0.0f;
Mat4x4_ o = (Mat4x4_)0;
n1 = n;
const float _e4 = n1;
o.mx = float4(_e4, 0.0f, 0.0f, 0.0f);
const float _e11 = n1;
o.my = float4(0.0f, _e11, 0.0f, 0.0f);
const float _e18 = n1;
o.mz = float4(0.0f, 0.0f, _e18, 0.0f);
const float _e25 = n1;
o.mw = float4(0.0f, 0.0f, 0.0f, _e25);
const Mat4x4_ _e27 = o;
return _e27;
o.mx = float4(n1, 0.0f, 0.0f, 0.0f);
o.my = float4(0.0f, n1, 0.0f, 0.0f);
o.mz = float4(0.0f, 0.0f, n1, 0.0f);
o.mw = float4(0.0f, 0.0f, 0.0f, n1);
return o;
}
Mat4x4_ _Mat4x4_1(Mat4x3_ m16) {
@ -182,14 +142,10 @@ Mat4x4_ _Mat4x4_1(Mat4x3_ m16) {
m17 = m16;
const Mat4x4_ _e4 = _Mat4x4_(1.0f);
o1 = _e4;
const Mat4x3_ _e7 = m17;
o1.mx = _e7.mx;
const Mat4x3_ _e10 = m17;
o1.my = _e10.my;
const Mat4x3_ _e13 = m17;
o1.mz = _e13.mz;
const Mat4x4_ _e15 = o1;
return _e15;
o1.mx = m17.mx;
o1.my = m17.my;
o1.mz = m17.mz;
return o1;
}
Mat4x4_ _Mat4x4_2(Mat4x2_ m18) {
@ -198,75 +154,55 @@ Mat4x4_ _Mat4x4_2(Mat4x2_ m18) {
m19 = m18;
const Mat4x4_ _e4 = _Mat4x4_(1.0f);
o2 = _e4;
const Mat4x2_ _e7 = m19;
o2.mx = _e7.mx;
const Mat4x2_ _e10 = m19;
o2.my = _e10.my;
const Mat4x4_ _e12 = o2;
return _e12;
o2.mx = m19.mx;
o2.my = m19.my;
return o2;
}
Mat4x3_ _Mat4x3_(float n2) {
float n3 = 0.0f;
Mat4x3_ o3 = (Mat4x3_)0;
n3 = n2;
const float _e4 = n3;
o3.mx = float4(_e4, 0.0f, 0.0f, 0.0f);
const float _e11 = n3;
o3.my = float4(0.0f, _e11, 0.0f, 0.0f);
const float _e18 = n3;
o3.mz = float4(0.0f, 0.0f, _e18, 0.0f);
const Mat4x3_ _e21 = o3;
return _e21;
o3.mx = float4(n3, 0.0f, 0.0f, 0.0f);
o3.my = float4(0.0f, n3, 0.0f, 0.0f);
o3.mz = float4(0.0f, 0.0f, n3, 0.0f);
return o3;
}
Mat4x3_ _Mat4x3_1(Mat4x4_ m20) {
Mat4x4_ m21 = (Mat4x4_)0;
Mat4x3_ o4 = (Mat4x3_)0;
m21 = m20;
const Mat4x4_ _e4 = m21;
o4.mx = _e4.mx;
const Mat4x4_ _e7 = m21;
o4.my = _e7.my;
const Mat4x4_ _e10 = m21;
o4.mz = _e10.mz;
const Mat4x3_ _e12 = o4;
return _e12;
o4.mx = m21.mx;
o4.my = m21.my;
o4.mz = m21.mz;
return o4;
}
void main1() {
Mat4x3_ t_PosMtx = (Mat4x3_)0;
float2 t_TexSpaceCoord = float2(0.0f, 0.0f);
const float _e15 = a_PosMtxIdx1;
const Mat4x3_ _e18 = tint_symbol_5(global2, (48u * uint(int(_e15))));
const Mat4x3_ _e18 = tint_symbol_5(global2, (48u * uint(int(a_PosMtxIdx1))));
t_PosMtx = _e18;
const Mat4x3_ _e23 = t_PosMtx;
const Mat4x4_ _e24 = _Mat4x4_1(_e23);
const Mat4x4_ _e24 = _Mat4x4_1(t_PosMtx);
const float3 _e25 = a_Position1;
const Mat4x3_ _e29 = t_PosMtx;
const Mat4x4_ _e30 = _Mat4x4_1(_e29);
const float3 _e31 = a_Position1;
const float4 _e34 = Mul(_e30, float4(_e31, 1.0f));
const Mat4x4_ _e30 = _Mat4x4_1(t_PosMtx);
const float4 _e34 = Mul(_e30, float4(a_Position1, 1.0f));
const Mat4x4_ _e35 = tint_symbol_7(global, 0u);
const Mat4x3_ _e37 = t_PosMtx;
const Mat4x4_ _e38 = _Mat4x4_1(_e37);
const Mat4x4_ _e38 = _Mat4x4_1(t_PosMtx);
const float3 _e39 = a_Position1;
const Mat4x3_ _e43 = t_PosMtx;
const Mat4x4_ _e44 = _Mat4x4_1(_e43);
const float3 _e45 = a_Position1;
const float4 _e48 = Mul(_e44, float4(_e45, 1.0f));
const Mat4x4_ _e44 = _Mat4x4_1(t_PosMtx);
const float4 _e48 = Mul(_e44, float4(a_Position1, 1.0f));
const float4 _e49 = Mul(_e35, _e48);
gl_Position = _e49;
const float4 _e50 = a_Color1;
v_Color = _e50;
v_Color = a_Color1;
const uint scalar_offset_9 = (32u) / 4;
const float4 _e52 = asfloat(global1[scalar_offset_9 / 4]);
if ((_e52.x == 2.0f)) {
{
const float3 _e59 = a_Normal1;
const Mat4x2_ _e64 = tint_symbol_9(global1, (32u * uint(0)));
const float3 _e65 = a_Normal1;
const float2 _e68 = Mul2(_e64, float4(_e65, 1.0f));
const float2 _e68 = Mul2(_e64, float4(a_Normal1, 1.0f));
v_TexCoord = _e68.xy;
return;
}
@ -274,8 +210,7 @@ void main1() {
{
const float2 _e73 = a_UV1;
const Mat4x2_ _e79 = tint_symbol_9(global1, (32u * uint(0)));
const float2 _e80 = a_UV1;
const float2 _e84 = Mul2(_e79, float4(_e80, 1.0f, 1.0f));
const float2 _e84 = Mul2(_e79, float4(a_UV1, 1.0f, 1.0f));
v_TexCoord = _e84.xy;
return;
}
@ -307,10 +242,7 @@ tint_symbol_2 main(tint_symbol_1 tint_symbol) {
a_Normal1 = a_Normal;
a_PosMtxIdx1 = a_PosMtxIdx;
main1();
const float4 _e11 = v_Color;
const float2 _e13 = v_TexCoord;
const float4 _e15 = gl_Position;
const VertexOutput tint_symbol_3 = {_e11, _e13, _e15};
const VertexOutput tint_symbol_3 = {v_Color, v_TexCoord, gl_Position};
const tint_symbol_2 tint_symbol_13 = {tint_symbol_3.v_Color, tint_symbol_3.v_TexCoord, tint_symbol_3.member};
return tint_symbol_13;
}

View File

@ -41,8 +41,7 @@ bool coordsInBounds_vi2_vi2_(inout int2 coord, inout int2 shape) {
x_87 = all((x_84 < x_85));
x_88_phi = x_87;
}
const bool x_88 = x_88_phi;
return x_88;
return x_88_phi;
}
float mm_readA_i1_i1_(inout int row, inout int col) {
@ -73,8 +72,7 @@ float mm_readA_i1_i1_(inout int row, inout int col) {
} else {
x_430 = 0.0f;
}
const float x_450 = x_430;
return x_450;
return x_430;
}
float mm_readB_i1_i1_(inout int row_1, inout int col_1) {
@ -105,8 +103,7 @@ float mm_readB_i1_i1_(inout int row_1, inout int col_1) {
} else {
x_468 = 0.0f;
}
const float x_487 = x_468;
return x_487;
return x_468;
}
int getOutputFlatIndex_vi3_(inout int3 coords) {
@ -136,8 +133,7 @@ void setOutput_i1_i1_i1_f1_(inout int d0, inout int d1, inout int d2, inout floa
param = int3(x_115, x_116, x_117);
const int x_120 = getOutputFlatIndex_vi3_(param);
flatIndex_1 = x_120;
const int x_122 = flatIndex_1;
param_1 = x_122;
param_1 = flatIndex_1;
const float x_124 = value_1;
param_2 = x_124;
setOutput_i1_f1_(param_1, param_2);
@ -154,8 +150,7 @@ void mm_write_i1_i1_f1_(inout int row_2, inout int col_2, inout float value_2) {
const int x_492 = row_2;
const int x_493 = col_2;
outCoord = int3(x_491, x_492, x_493);
const int x_496 = batch;
param_14 = x_496;
param_14 = batch;
const int x_498 = row_2;
param_15 = x_498;
const int x_500 = col_2;
@ -216,30 +211,10 @@ void mm_matMul_i1_i1_i1_(inout int dimAOuter, inout int dimInner, inout int dimB
const int x_152 = dimInner;
numTiles = (((x_152 - 1) / 64) + 1);
innerRow = 0;
while (true) {
const int x_163 = innerRow;
if ((x_163 < 1)) {
} else {
break;
}
for(; (innerRow < 1); innerRow = (innerRow + 1)) {
innerCol = 0;
while (true) {
const int x_171 = innerCol;
if ((x_171 < 1)) {
} else {
break;
}
const int x_177 = innerRow;
const int x_178 = innerCol;
acc.arr[x_177].arr[x_178] = 0.0f;
{
const int x_181 = innerCol;
innerCol = (x_181 + 1);
}
}
{
const int x_183 = innerRow;
innerRow = (x_183 + 1);
for(; (innerCol < 1); innerCol = (innerCol + 1)) {
acc.arr[innerRow].arr[innerCol] = 0.0f;
}
}
const uint x_187 = gl_LocalInvocationID.x;
@ -247,179 +222,72 @@ void mm_matMul_i1_i1_i1_(inout int dimAOuter, inout int dimInner, inout int dimB
const uint x_192 = gl_LocalInvocationID.y;
tileRowB = (asint(x_192) * 1);
t = 0;
while (true) {
const int x_201 = t;
const int x_202 = numTiles;
if ((x_201 < x_202)) {
} else {
break;
}
for(; (t < numTiles); t = (t + 1)) {
innerRow_1 = 0;
while (true) {
const int x_210 = innerRow_1;
if ((x_210 < 1)) {
} else {
break;
}
for(; (innerRow_1 < 1); innerRow_1 = (innerRow_1 + 1)) {
innerCol_1 = 0;
while (true) {
const int x_218 = innerCol_1;
if ((x_218 < 64)) {
} else {
break;
}
const int x_221 = tileRow;
const int x_222 = innerRow_1;
inputRow = (x_221 + x_222);
const int x_225 = tileColA;
const int x_226 = innerCol_1;
inputCol = (x_225 + x_226);
for(; (innerCol_1 < 64); innerCol_1 = (innerCol_1 + 1)) {
inputRow = (tileRow + innerRow_1);
inputCol = (tileColA + innerCol_1);
const int x_233 = inputRow;
const int x_234 = inputCol;
const int x_235 = globalRow;
const int x_236 = innerRow_1;
const int x_238 = t;
const int x_240 = inputCol;
param_3 = (x_235 + x_236);
param_3 = (globalRow + innerRow_1);
param_4 = ((x_238 * 64) + x_240);
const float x_244 = mm_readA_i1_i1_(param_3, param_4);
mm_Asub.arr[x_233].arr[x_234] = x_244;
{
const int x_247 = innerCol_1;
innerCol_1 = (x_247 + 1);
}
}
{
const int x_249 = innerRow_1;
innerRow_1 = (x_249 + 1);
}
}
innerRow_2 = 0;
while (true) {
const int x_257 = innerRow_2;
if ((x_257 < 1)) {
} else {
break;
}
for(; (innerRow_2 < 1); innerRow_2 = (innerRow_2 + 1)) {
innerCol_2 = 0;
while (true) {
const int x_265 = innerCol_2;
if ((x_265 < 1)) {
} else {
break;
}
const int x_268 = tileRowB;
const int x_269 = innerRow_2;
inputRow_1 = (x_268 + x_269);
const int x_272 = tileCol;
const int x_273 = innerCol_2;
inputCol_1 = (x_272 + x_273);
for(; (innerCol_2 < 1); innerCol_2 = (innerCol_2 + 1)) {
inputRow_1 = (tileRowB + innerRow_2);
inputCol_1 = (tileCol + innerCol_2);
const int x_278 = inputRow_1;
const int x_279 = inputCol_1;
const int x_280 = t;
const int x_282 = inputRow_1;
const int x_284 = globalCol;
const int x_285 = innerCol_2;
param_5 = ((x_280 * 64) + x_282);
param_5 = ((t * 64) + inputRow_1);
param_6 = (x_284 + x_285);
const float x_289 = mm_readB_i1_i1_(param_5, param_6);
mm_Bsub.arr[x_278].arr[x_279] = x_289;
{
const int x_291 = innerCol_2;
innerCol_2 = (x_291 + 1);
}
}
{
const int x_293 = innerRow_2;
innerRow_2 = (x_293 + 1);
}
}
GroupMemoryBarrierWithGroupSync();
k = 0;
while (true) {
const int x_302 = k;
if ((x_302 < 64)) {
} else {
break;
}
for(; (k < 64); k = (k + 1)) {
inner = 0;
while (true) {
const int x_310 = inner;
if ((x_310 < 1)) {
} else {
break;
}
for(; (inner < 1); inner = (inner + 1)) {
const int x_314 = inner;
const int x_315 = k;
const int x_316 = tileCol;
const int x_317 = inner;
const float x_320 = mm_Bsub.arr[x_315].arr[(x_316 + x_317)];
const float x_320 = mm_Bsub.arr[k].arr[(tileCol + inner)];
BCached.arr[x_314] = x_320;
{
const int x_322 = inner;
inner = (x_322 + 1);
}
}
innerRow_3 = 0;
while (true) {
const int x_330 = innerRow_3;
if ((x_330 < 1)) {
} else {
break;
}
const int x_333 = tileRow;
const int x_334 = innerRow_3;
const int x_336 = k;
const float x_338 = mm_Asub.arr[(x_333 + x_334)].arr[x_336];
for(; (innerRow_3 < 1); innerRow_3 = (innerRow_3 + 1)) {
const float x_338 = mm_Asub.arr[(tileRow + innerRow_3)].arr[k];
ACached = x_338;
innerCol_3 = 0;
while (true) {
const int x_345 = innerCol_3;
if ((x_345 < 1)) {
} else {
break;
}
for(; (innerCol_3 < 1); innerCol_3 = (innerCol_3 + 1)) {
const int x_347 = innerRow_3;
const int x_348 = innerCol_3;
const float x_349 = ACached;
const int x_350 = innerCol_3;
const float x_352 = BCached.arr[x_350];
const float x_352 = BCached.arr[innerCol_3];
const float x_355 = acc.arr[x_347].arr[x_348];
acc.arr[x_347].arr[x_348] = (x_355 + (x_349 * x_352));
{
const int x_358 = innerCol_3;
innerCol_3 = (x_358 + 1);
}
}
{
const int x_360 = innerRow_3;
innerRow_3 = (x_360 + 1);
}
}
{
const int x_362 = k;
k = (x_362 + 1);
}
}
GroupMemoryBarrierWithGroupSync();
{
const int x_364 = t;
t = (x_364 + 1);
}
}
innerRow_4 = 0;
while (true) {
const int x_372 = innerRow_4;
if ((x_372 < 1)) {
} else {
break;
}
for(; (innerRow_4 < 1); innerRow_4 = (innerRow_4 + 1)) {
innerCol_4 = 0;
while (true) {
bool x_393 = false;
bool x_394_phi = false;
const int x_380 = innerCol_4;
if ((x_380 < 1)) {
if ((innerCol_4 < 1)) {
} else {
break;
}
@ -435,29 +303,21 @@ void mm_matMul_i1_i1_i1_(inout int dimAOuter, inout int dimInner, inout int dimB
x_393 = ((x_389 + x_390) < x_392);
x_394_phi = x_393;
}
const bool x_394 = x_394_phi;
if (x_394) {
const int x_397 = globalRow;
const int x_398 = innerRow_4;
if (x_394_phi) {
const int x_400 = globalCol;
const int x_401 = innerCol_4;
const int x_403 = innerRow_4;
const int x_404 = innerCol_4;
param_7 = (x_397 + x_398);
param_7 = (globalRow + innerRow_4);
param_8 = (x_400 + x_401);
const float x_409 = acc.arr[x_403].arr[x_404];
param_9 = x_409;
mm_write_i1_i1_f1_(param_7, param_8, param_9);
}
{
const int x_411 = innerCol_4;
innerCol_4 = (x_411 + 1);
innerCol_4 = (innerCol_4 + 1);
}
}
{
const int x_413 = innerRow_4;
innerRow_4 = (x_413 + 1);
}
}
return;
}
@ -477,12 +337,9 @@ void main_1() {
dimBOuter_1 = x_75;
const uint x_505 = gl_GlobalInvocationID.z;
batch = asint(x_505);
const int x_508 = dimAOuter_1;
param_18 = x_508;
const int x_510 = dimInner_1;
param_19 = x_510;
const int x_512 = dimBOuter_1;
param_20 = x_512;
param_18 = dimAOuter_1;
param_19 = dimInner_1;
param_20 = dimBOuter_1;
mm_matMul_i1_i1_i1_(param_18, param_19, param_20);
return;
}

View File

@ -25,12 +25,9 @@ float4x4 getFrameData_f1_(inout float frameID) {
const uint scalar_offset = (108u) / 4;
const float x_25 = asfloat(x_20[scalar_offset / 4][scalar_offset % 4]);
fX = (x_15 / x_25);
const float x_37 = fX;
const float4 x_40 = frameMapTexture.SampleBias(frameMapSampler, float2(x_37, 0.0f), 0.0f);
const float x_44 = fX;
const float4 x_47 = frameMapTexture.SampleBias(frameMapSampler, float2(x_44, 0.25f), 0.0f);
const float x_51 = fX;
const float4 x_54 = frameMapTexture.SampleBias(frameMapSampler, float2(x_51, 0.5f), 0.0f);
const float4 x_40 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.0f), 0.0f);
const float4 x_47 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.25f), 0.0f);
const float4 x_54 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.5f), 0.0f);
return float4x4(float4(x_40.x, x_40.y, x_40.z, x_40.w), float4(x_47.x, x_47.y, x_47.z, x_47.w), float4(x_54.x, x_54.y, x_54.z, x_54.w), float4(float4(0.0f, 0.0f, 0.0f, 0.0f).x, float4(0.0f, 0.0f, 0.0f, 0.0f).y, float4(0.0f, 0.0f, 0.0f, 0.0f).z, float4(0.0f, 0.0f, 0.0f, 0.0f).w));
}
@ -54,12 +51,10 @@ void main_1() {
float alpha = 0.0f;
float3 mixed = float3(0.0f, 0.0f, 0.0f);
color = float4(0.0f, 0.0f, 0.0f, 0.0f);
const float2 x_86 = tUV;
tileUV = frac(x_86);
tileUV = frac(tUV);
const float x_91 = tileUV.y;
tileUV.y = (1.0f - x_91);
const float2 x_95 = tUV;
tileID = floor(x_95);
tileID = floor(tUV);
const uint scalar_offset_1 = (96u) / 4;
uint4 ubo_load = x_20[scalar_offset_1 / 4];
const float2 x_101 = asfloat(((scalar_offset_1 & 2) ? ubo_load.zw : ubo_load.xy));
@ -72,14 +67,8 @@ void main_1() {
const float2 x_111 = asfloat(((scalar_offset_3 & 2) ? ubo_load_1.zw : ubo_load_1.xy));
stageUnits = (float2(1.0f, 1.0f) / x_111);
i = 0;
while (true) {
const int x_122 = i;
if ((x_122 < 2)) {
} else {
break;
}
const int x_126 = i;
switch(x_126) {
for(; (i < 2); i = (i + 1)) {
switch(i) {
case 1: {
const float2 x_150 = tileID;
const uint scalar_offset_4 = (88u) / 4;
@ -114,15 +103,9 @@ void main_1() {
const float x_184 = animationData.z;
mt = ((x_181 * x_184) % 1.0f);
f = 0.0f;
while (true) {
const float x_193 = f;
if ((x_193 < 8.0f)) {
} else {
break;
}
for(; (f < 8.0f); f = (f + 1.0f)) {
const float x_197 = animationData.y;
const float x_198 = mt;
if ((x_197 > x_198)) {
if ((x_197 > mt)) {
const float x_203 = animationData.x;
frameID_1 = x_203;
break;
@ -130,17 +113,11 @@ void main_1() {
const float x_208 = frameID_1;
const uint scalar_offset_8 = (108u) / 4;
const float x_211 = asfloat(x_20[scalar_offset_8 / 4][scalar_offset_8 % 4]);
const float x_214 = f;
const float4 x_217 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_208 + 0.5f) / x_211), (0.125f * x_214)), 0.0f);
const float4 x_217 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_208 + 0.5f) / x_211), (0.125f * f)), 0.0f);
animationData = x_217;
{
const float x_218 = f;
f = (x_218 + 1.0f);
}
}
}
const float x_222 = frameID_1;
param = (x_222 + 0.5f);
param = (frameID_1 + 0.5f);
const float4x4 x_225 = getFrameData_f1_(param);
frameData = x_225;
const float4 x_228 = frameData[0];
@ -149,8 +126,7 @@ void main_1() {
const float2 x_231 = asfloat(((scalar_offset_9 & 2) ? ubo_load_4.zw : ubo_load_4.xy));
frameSize = (float2(x_228.w, x_228.z) / x_231);
const float4 x_235 = frameData[0];
const float2 x_237 = sheetUnits;
offset_1 = (float2(x_235.x, x_235.y) * x_237);
offset_1 = (float2(x_235.x, x_235.y) * sheetUnits);
const float4 x_241 = frameData[2];
const float4 x_244 = frameData[0];
ratio = (float2(x_241.x, x_241.y) / float2(x_244.w, x_244.z));
@ -159,18 +135,11 @@ void main_1() {
const float2 x_252 = tileUV;
tileUV = float2(x_252.y, x_252.x);
}
const int x_254 = i;
if ((x_254 == 0)) {
const float2 x_263 = tileUV;
const float2 x_264 = frameSize;
const float2 x_266 = offset_1;
const float4 x_268 = spriteSheetTexture.Sample(spriteSheetSampler, ((x_263 * x_264) + x_266));
if ((i == 0)) {
const float4 x_268 = spriteSheetTexture.Sample(spriteSheetSampler, ((tileUV * frameSize) + offset_1));
color = x_268;
} else {
const float2 x_274 = tileUV;
const float2 x_275 = frameSize;
const float2 x_277 = offset_1;
const float4 x_279 = spriteSheetTexture.Sample(spriteSheetSampler, ((x_274 * x_275) + x_277));
const float4 x_279 = spriteSheetTexture.Sample(spriteSheetSampler, ((tileUV * frameSize) + offset_1));
nc = x_279;
const float x_283 = color.w;
const float x_285 = nc.w;
@ -180,22 +149,15 @@ void main_1() {
const float x_295 = nc.w;
mixed = lerp(float3(x_290.x, x_290.y, x_290.z), float3(x_292.x, x_292.y, x_292.z), float3(x_295, x_295, x_295));
const float3 x_298 = mixed;
const float x_299 = alpha;
color = float4(x_298.x, x_298.y, x_298.z, x_299);
}
{
const int x_304 = i;
i = (x_304 + 1);
color = float4(x_298.x, x_298.y, x_298.z, alpha);
}
}
const uint scalar_offset_10 = (112u) / 4;
const float3 x_310 = asfloat(x_20[scalar_offset_10 / 4].xyz);
const float4 x_311 = color;
const float3 x_313 = (float3(x_311.x, x_311.y, x_311.z) * x_310);
const float4 x_314 = color;
color = float4(x_313.x, x_313.y, x_313.z, x_314.w);
const float4 x_318 = color;
glFragColor = x_318;
color = float4(x_313.x, x_313.y, x_313.z, color.w);
glFragColor = color;
return;
}

View File

@ -0,0 +1,433 @@
struct lightingInfo {
float3 diffuse;
float3 specular;
};
static float u_Float = 0.0f;
static float3 u_Color = float3(0.0f, 0.0f, 0.0f);
Texture2D<float4> TextureSamplerTexture : register(t1, space2);
SamplerState TextureSamplerSampler : register(s0, space2);
static float2 vMainuv = float2(0.0f, 0.0f);
cbuffer cbuffer_x_269 : register(b6, space2) {
uint4 x_269[11];
};
static float4 v_output1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
static bool gl_FrontFacing = false;
static float2 v_uv = float2(0.0f, 0.0f);
static float4 v_output2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
Texture2D<float4> TextureSampler1Texture : register(t3, space2);
SamplerState TextureSampler1Sampler : register(s2, space2);
cbuffer cbuffer_light0 : register(b5, space0) {
uint4 light0[6];
};
static float4 glFragColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
SamplerState bumpSamplerSampler : register(s4, space2);
Texture2D<float4> bumpSamplerTexture : register(t5, space2);
float3x3 cotangent_frame_vf3_vf3_vf2_vf2_(inout float3 normal_1, inout float3 p, inout float2 uv, inout float2 tangentSpaceParams) {
float3 dp1 = float3(0.0f, 0.0f, 0.0f);
float3 dp2 = float3(0.0f, 0.0f, 0.0f);
float2 duv1 = float2(0.0f, 0.0f);
float2 duv2 = float2(0.0f, 0.0f);
float3 dp2perp = float3(0.0f, 0.0f, 0.0f);
float3 dp1perp = float3(0.0f, 0.0f, 0.0f);
float3 tangent = float3(0.0f, 0.0f, 0.0f);
float3 bitangent = float3(0.0f, 0.0f, 0.0f);
float invmax = 0.0f;
const float3 x_133 = p;
dp1 = ddx(x_133);
const float3 x_136 = p;
dp2 = ddy(x_136);
const float2 x_139 = uv;
duv1 = ddx(x_139);
const float2 x_142 = uv;
duv2 = ddy(x_142);
const float3 x_145 = dp2;
const float3 x_146 = normal_1;
dp2perp = cross(x_145, x_146);
const float3 x_149 = normal_1;
const float3 x_150 = dp1;
dp1perp = cross(x_149, x_150);
const float3 x_153 = dp2perp;
const float x_155 = duv1.x;
const float3 x_157 = dp1perp;
const float x_159 = duv2.x;
tangent = ((x_153 * x_155) + (x_157 * x_159));
const float3 x_163 = dp2perp;
const float x_165 = duv1.y;
const float3 x_167 = dp1perp;
const float x_169 = duv2.y;
bitangent = ((x_163 * x_165) + (x_167 * x_169));
const float x_173 = tangentSpaceParams.x;
const float3 x_174 = tangent;
tangent = (x_174 * x_173);
const float x_177 = tangentSpaceParams.y;
const float3 x_178 = bitangent;
bitangent = (x_178 * x_177);
const float3 x_181 = tangent;
const float3 x_182 = tangent;
const float3 x_184 = bitangent;
const float3 x_185 = bitangent;
invmax = rsqrt(max(dot(x_181, x_182), dot(x_184, x_185)));
const float3 x_189 = tangent;
const float x_190 = invmax;
const float3 x_191 = (x_189 * x_190);
const float3 x_192 = bitangent;
const float x_193 = invmax;
const float3 x_194 = (x_192 * x_193);
const float3 x_195 = normal_1;
return float3x3(float3(x_191.x, x_191.y, x_191.z), float3(x_194.x, x_194.y, x_194.z), float3(x_195.x, x_195.y, x_195.z));
}
float3x3 transposeMat3_mf33_(inout float3x3 inMatrix) {
float3 i0 = float3(0.0f, 0.0f, 0.0f);
float3 i1 = float3(0.0f, 0.0f, 0.0f);
float3 i2 = float3(0.0f, 0.0f, 0.0f);
float3x3 outMatrix = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
const float3 x_60 = inMatrix[0];
i0 = x_60;
const float3 x_64 = inMatrix[1];
i1 = x_64;
const float3 x_68 = inMatrix[2];
i2 = x_68;
const float x_73 = i0.x;
const float x_75 = i1.x;
const float x_77 = i2.x;
const float3 x_78 = float3(x_73, x_75, x_77);
const float x_81 = i0.y;
const float x_83 = i1.y;
const float x_85 = i2.y;
const float3 x_86 = float3(x_81, x_83, x_85);
const float x_89 = i0.z;
const float x_91 = i1.z;
const float x_93 = i2.z;
const float3 x_94 = float3(x_89, x_91, x_93);
outMatrix = float3x3(float3(x_78.x, x_78.y, x_78.z), float3(x_86.x, x_86.y, x_86.z), float3(x_94.x, x_94.y, x_94.z));
const float3x3 x_110 = outMatrix;
return x_110;
}
float3 perturbNormalBase_mf33_vf3_f1_(inout float3x3 cotangentFrame, inout float3 normal, inout float scale) {
const float3x3 x_113 = cotangentFrame;
const float3 x_114 = normal;
return normalize(mul(x_114, x_113));
}
float3 perturbNormal_mf33_vf3_f1_(inout float3x3 cotangentFrame_1, inout float3 textureSample, inout float scale_1) {
float3x3 param = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
float3 param_1 = float3(0.0f, 0.0f, 0.0f);
float param_2 = 0.0f;
const float3 x_119 = textureSample;
const float3x3 x_125 = cotangentFrame_1;
param = x_125;
param_1 = ((x_119 * 2.0f) - float3(1.0f, 1.0f, 1.0f));
const float x_128 = scale_1;
param_2 = x_128;
const float3 x_129 = perturbNormalBase_mf33_vf3_f1_(param, param_1, param_2);
return x_129;
}
lightingInfo computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(inout float3 viewDirectionW, inout float3 vNormal, inout float4 lightData, inout float3 diffuseColor, inout float3 specularColor, inout float3 groundColor, inout float glossiness) {
float ndl = 0.0f;
lightingInfo result = {float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)};
float3 angleW = float3(0.0f, 0.0f, 0.0f);
float specComp = 0.0f;
const float3 x_212 = vNormal;
const float4 x_213 = lightData;
ndl = ((dot(x_212, float3(x_213.x, x_213.y, x_213.z)) * 0.5f) + 0.5f);
const float3 x_220 = groundColor;
const float3 x_221 = diffuseColor;
const float x_222 = ndl;
result.diffuse = lerp(x_220, x_221, float3(x_222, x_222, x_222));
const float3 x_227 = viewDirectionW;
const float4 x_228 = lightData;
angleW = normalize((x_227 + float3(x_228.x, x_228.y, x_228.z)));
const float3 x_233 = vNormal;
const float3 x_234 = angleW;
specComp = max(0.0f, dot(x_233, x_234));
const float x_237 = specComp;
const float x_238 = glossiness;
specComp = pow(x_237, max(1.0f, x_238));
const float x_241 = specComp;
const float3 x_242 = specularColor;
result.specular = (x_242 * x_241);
const lightingInfo x_245 = result;
return x_245;
}
void main_1() {
float4 tempTextureRead = float4(0.0f, 0.0f, 0.0f, 0.0f);
float3 rgb = float3(0.0f, 0.0f, 0.0f);
float3 output5 = float3(0.0f, 0.0f, 0.0f);
float4 output4 = float4(0.0f, 0.0f, 0.0f, 0.0f);
float2 uvOffset = float2(0.0f, 0.0f);
float normalScale = 0.0f;
float2 TBNUV = float2(0.0f, 0.0f);
float2 x_299 = float2(0.0f, 0.0f);
float3x3 TBN = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
float3 param_3 = float3(0.0f, 0.0f, 0.0f);
float3 param_4 = float3(0.0f, 0.0f, 0.0f);
float2 param_5 = float2(0.0f, 0.0f);
float2 param_6 = float2(0.0f, 0.0f);
float3x3 invTBN = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
float3x3 param_7 = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
float parallaxLimit = 0.0f;
float2 vOffsetDir = float2(0.0f, 0.0f);
float2 vMaxOffset = float2(0.0f, 0.0f);
float numSamples = 0.0f;
float stepSize = 0.0f;
float currRayHeight = 0.0f;
float2 vCurrOffset = float2(0.0f, 0.0f);
float2 vLastOffset = float2(0.0f, 0.0f);
float lastSampledHeight = 0.0f;
float currSampledHeight = 0.0f;
float delta1 = 0.0f;
float delta2 = 0.0f;
float ratio = 0.0f;
float2 parallaxOcclusion_0 = float2(0.0f, 0.0f);
float3x3 param_8 = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
float3 param_9 = float3(0.0f, 0.0f, 0.0f);
float param_10 = 0.0f;
float2 output6 = float2(0.0f, 0.0f);
float4 tempTextureRead1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
float3 rgb1 = float3(0.0f, 0.0f, 0.0f);
float3 viewDirectionW_1 = float3(0.0f, 0.0f, 0.0f);
float shadow = 0.0f;
float glossiness_1 = 0.0f;
float3 diffuseBase = float3(0.0f, 0.0f, 0.0f);
float3 specularBase = float3(0.0f, 0.0f, 0.0f);
float3 normalW = float3(0.0f, 0.0f, 0.0f);
lightingInfo info = {float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)};
float3 param_11 = float3(0.0f, 0.0f, 0.0f);
float3 param_12 = float3(0.0f, 0.0f, 0.0f);
float4 param_13 = float4(0.0f, 0.0f, 0.0f, 0.0f);
float3 param_14 = float3(0.0f, 0.0f, 0.0f);
float3 param_15 = float3(0.0f, 0.0f, 0.0f);
float3 param_16 = float3(0.0f, 0.0f, 0.0f);
float param_17 = 0.0f;
float3 diffuseOutput = float3(0.0f, 0.0f, 0.0f);
float3 specularOutput = float3(0.0f, 0.0f, 0.0f);
float3 output3 = float3(0.0f, 0.0f, 0.0f);
u_Float = 100.0f;
u_Color = float3(0.5f, 0.5f, 0.5f);
const float2 x_261 = vMainuv;
const float4 x_262 = TextureSamplerTexture.Sample(TextureSamplerSampler, x_261);
tempTextureRead = x_262;
const float4 x_264 = tempTextureRead;
const int scalar_offset = (160u) / 4;
const float x_273 = asfloat(x_269[scalar_offset / 4][scalar_offset % 4]);
rgb = (float3(x_264.x, x_264.y, x_264.z) * x_273);
const int scalar_offset_1 = (144u) / 4;
const float3 x_279 = asfloat(x_269[scalar_offset_1 / 4].xyz);
const float4 x_282 = v_output1;
output5 = normalize((x_279 - float3(x_282.x, x_282.y, x_282.z)));
output4 = float4(0.0f, 0.0f, 0.0f, 0.0f);
uvOffset = float2(0.0f, 0.0f);
const int scalar_offset_2 = (128u) / 4;
const float x_292 = asfloat(x_269[scalar_offset_2 / 4][scalar_offset_2 % 4]);
normalScale = (1.0f / x_292);
const bool x_298 = gl_FrontFacing;
if (x_298) {
const float2 x_303 = v_uv;
x_299 = x_303;
} else {
const float2 x_305 = v_uv;
x_299 = -(x_305);
}
const float2 x_307 = x_299;
TBNUV = x_307;
const float4 x_310 = v_output2;
const float x_312 = normalScale;
param_3 = (float3(x_310.x, x_310.y, x_310.z) * x_312);
const float4 x_317 = v_output1;
param_4 = float3(x_317.x, x_317.y, x_317.z);
const float2 x_320 = TBNUV;
param_5 = x_320;
const int scalar_offset_3 = (168u) / 4;
uint4 ubo_load = x_269[scalar_offset_3 / 4];
const float2 x_324 = asfloat(((scalar_offset_3 & 2) ? ubo_load.zw : ubo_load.xy));
param_6 = x_324;
const float3x3 x_325 = cotangent_frame_vf3_vf3_vf2_vf2_(param_3, param_4, param_5, param_6);
TBN = x_325;
const float3x3 x_328 = TBN;
param_7 = x_328;
const float3x3 x_329 = transposeMat3_mf33_(param_7);
invTBN = x_329;
const float3x3 x_331 = invTBN;
const float3 x_332 = output5;
const float3 x_334 = mul(-(x_332), x_331);
const float3x3 x_337 = invTBN;
const float3 x_338 = output5;
parallaxLimit = (length(float2(x_334.x, x_334.y)) / mul(-(x_338), x_337).z);
const int scalar_offset_4 = (156u) / 4;
const float x_345 = asfloat(x_269[scalar_offset_4 / 4][scalar_offset_4 % 4]);
const float x_346 = parallaxLimit;
parallaxLimit = (x_346 * x_345);
const float3x3 x_349 = invTBN;
const float3 x_350 = output5;
const float3 x_352 = mul(-(x_350), x_349);
vOffsetDir = normalize(float2(x_352.x, x_352.y));
const float2 x_356 = vOffsetDir;
const float x_357 = parallaxLimit;
vMaxOffset = (x_356 * x_357);
const float3x3 x_361 = invTBN;
const float3 x_362 = output5;
const float3x3 x_365 = invTBN;
const float4 x_366 = v_output2;
numSamples = (15.0f + (dot(mul(-(x_362), x_361), mul(float3(x_366.x, x_366.y, x_366.z), x_365)) * -11.0f));
const float x_374 = numSamples;
stepSize = (1.0f / x_374);
currRayHeight = 1.0f;
vCurrOffset = float2(0.0f, 0.0f);
vLastOffset = float2(0.0f, 0.0f);
lastSampledHeight = 1.0f;
currSampledHeight = 1.0f;
int i = 0;
while (i < 15) {
i++;
const float2 x_394 = v_uv;
const float2 x_395 = vCurrOffset;
const float4 x_397 = TextureSamplerTexture.Sample(TextureSamplerSampler, (x_394 + x_395));
currSampledHeight = x_397.w;
const float x_400 = currSampledHeight;
const float x_401 = currRayHeight;
if ((x_400 > x_401)) {
const float x_406 = currSampledHeight;
const float x_407 = currRayHeight;
delta1 = (x_406 - x_407);
const float x_410 = currRayHeight;
const float x_411 = stepSize;
const float x_413 = lastSampledHeight;
delta2 = ((x_410 + x_411) - x_413);
const float x_416 = delta1;
const float x_417 = delta1;
const float x_418 = delta2;
ratio = (x_416 / (x_417 + x_418));
const float x_421 = ratio;
const float2 x_422 = vLastOffset;
const float x_424 = ratio;
const float2 x_426 = vCurrOffset;
vCurrOffset = ((x_422 * x_421) + (x_426 * (1.0f - x_424)));
break;
} else {
const float x_431 = stepSize;
const float x_432 = currRayHeight;
currRayHeight = (x_432 - x_431);
const float2 x_434 = vCurrOffset;
vLastOffset = x_434;
const float x_435 = stepSize;
const float2 x_436 = vMaxOffset;
const float2 x_438 = vCurrOffset;
vCurrOffset = (x_438 + (x_436 * x_435));
const float x_440 = currSampledHeight;
lastSampledHeight = x_440;
}
}
const float2 x_444 = vCurrOffset;
parallaxOcclusion_0 = x_444;
const float2 x_445 = parallaxOcclusion_0;
uvOffset = x_445;
const float2 x_449 = v_uv;
const float2 x_450 = uvOffset;
const float4 x_452 = TextureSamplerTexture.Sample(TextureSamplerSampler, (x_449 + x_450));
const int scalar_offset_5 = (128u) / 4;
const float x_454 = asfloat(x_269[scalar_offset_5 / 4][scalar_offset_5 % 4]);
const float3x3 x_457 = TBN;
param_8 = x_457;
param_9 = float3(x_452.x, x_452.y, x_452.z);
param_10 = (1.0f / x_454);
const float3 x_461 = perturbNormal_mf33_vf3_f1_(param_8, param_9, param_10);
const float4 x_462 = output4;
output4 = float4(x_461.x, x_461.y, x_461.z, x_462.w);
const float2 x_465 = v_uv;
const float2 x_466 = uvOffset;
output6 = (x_465 + x_466);
const float2 x_474 = output6;
const float4 x_475 = TextureSampler1Texture.Sample(TextureSampler1Sampler, x_474);
tempTextureRead1 = x_475;
const float4 x_477 = tempTextureRead1;
rgb1 = float3(x_477.x, x_477.y, x_477.z);
const int scalar_offset_6 = (144u) / 4;
const float3 x_481 = asfloat(x_269[scalar_offset_6 / 4].xyz);
const float4 x_482 = v_output1;
viewDirectionW_1 = normalize((x_481 - float3(x_482.x, x_482.y, x_482.z)));
shadow = 1.0f;
const float x_488 = u_Float;
glossiness_1 = (1.0f * x_488);
diffuseBase = float3(0.0f, 0.0f, 0.0f);
specularBase = float3(0.0f, 0.0f, 0.0f);
const float4 x_494 = output4;
normalW = float3(x_494.x, x_494.y, x_494.z);
const float3 x_501 = viewDirectionW_1;
param_11 = x_501;
const float3 x_503 = normalW;
param_12 = x_503;
const int scalar_offset_7 = (0u) / 4;
const float4 x_507 = asfloat(light0[scalar_offset_7 / 4]);
param_13 = x_507;
const int scalar_offset_8 = (16u) / 4;
const float4 x_510 = asfloat(light0[scalar_offset_8 / 4]);
param_14 = float3(x_510.x, x_510.y, x_510.z);
const int scalar_offset_9 = (32u) / 4;
const float4 x_514 = asfloat(light0[scalar_offset_9 / 4]);
param_15 = float3(x_514.x, x_514.y, x_514.z);
const int scalar_offset_10 = (48u) / 4;
const float3 x_518 = asfloat(light0[scalar_offset_10 / 4].xyz);
param_16 = x_518;
const float x_520 = glossiness_1;
param_17 = x_520;
const lightingInfo x_521 = computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(param_11, param_12, param_13, param_14, param_15, param_16, param_17);
info = x_521;
shadow = 1.0f;
const float3 x_523 = info.diffuse;
const float x_524 = shadow;
const float3 x_526 = diffuseBase;
diffuseBase = (x_526 + (x_523 * x_524));
const float3 x_529 = info.specular;
const float x_530 = shadow;
const float3 x_532 = specularBase;
specularBase = (x_532 + (x_529 * x_530));
const float3 x_535 = diffuseBase;
const float3 x_536 = rgb1;
diffuseOutput = (x_535 * x_536);
const float3 x_539 = specularBase;
const float3 x_540 = u_Color;
specularOutput = (x_539 * x_540);
const float3 x_543 = diffuseOutput;
const float3 x_544 = specularOutput;
output3 = (x_543 + x_544);
const float3 x_548 = output3;
glFragColor = float4(x_548.x, x_548.y, x_548.z, 1.0f);
return;
}
struct main_out {
float4 glFragColor_1;
};
struct tint_symbol_1 {
float4 v_output1_param : TEXCOORD0;
float2 vMainuv_param : TEXCOORD1;
float4 v_output2_param : TEXCOORD2;
float2 v_uv_param : TEXCOORD3;
bool gl_FrontFacing_param : SV_IsFrontFace;
};
struct tint_symbol_2 {
float4 glFragColor_1 : SV_Target0;
};
tint_symbol_2 main(tint_symbol_1 tint_symbol) {
const float2 vMainuv_param = tint_symbol.vMainuv_param;
const float4 v_output1_param = tint_symbol.v_output1_param;
const bool gl_FrontFacing_param = tint_symbol.gl_FrontFacing_param;
const float2 v_uv_param = tint_symbol.v_uv_param;
const float4 v_output2_param = tint_symbol.v_output2_param;
vMainuv = vMainuv_param;
v_output1 = v_output1_param;
gl_FrontFacing = gl_FrontFacing_param;
v_uv = v_uv_param;
v_output2 = v_output2_param;
main_1();
const main_out tint_symbol_3 = {glFragColor};
const tint_symbol_2 tint_symbol_9 = {tint_symbol_3.glFragColor_1};
return tint_symbol_9;
}

View File

@ -46,8 +46,7 @@ float3x3 cotangent_frame_vf3_vf3_vf2_vf2_(inout float3 normal_1, inout float3 p,
const float3 x_146 = normal_1;
dp2perp = cross(x_145, x_146);
const float3 x_149 = normal_1;
const float3 x_150 = dp1;
dp1perp = cross(x_149, x_150);
dp1perp = cross(x_149, dp1);
const float3 x_153 = dp2perp;
const float x_155 = duv1.x;
const float3 x_157 = dp1perp;
@ -59,22 +58,12 @@ float3x3 cotangent_frame_vf3_vf3_vf2_vf2_(inout float3 normal_1, inout float3 p,
const float x_169 = duv2.y;
bitangent = ((x_163 * x_165) + (x_167 * x_169));
const float x_173 = tangentSpaceParams.x;
const float3 x_174 = tangent;
tangent = (x_174 * x_173);
tangent = (tangent * x_173);
const float x_177 = tangentSpaceParams.y;
const float3 x_178 = bitangent;
bitangent = (x_178 * x_177);
const float3 x_181 = tangent;
const float3 x_182 = tangent;
const float3 x_184 = bitangent;
const float3 x_185 = bitangent;
invmax = rsqrt(max(dot(x_181, x_182), dot(x_184, x_185)));
const float3 x_189 = tangent;
const float x_190 = invmax;
const float3 x_191 = (x_189 * x_190);
const float3 x_192 = bitangent;
const float x_193 = invmax;
const float3 x_194 = (x_192 * x_193);
bitangent = (bitangent * x_177);
invmax = rsqrt(max(dot(tangent, tangent), dot(bitangent, bitangent)));
const float3 x_191 = (tangent * invmax);
const float3 x_194 = (bitangent * invmax);
const float3 x_195 = normal_1;
return float3x3(float3(x_191.x, x_191.y, x_191.z), float3(x_194.x, x_194.y, x_194.z), float3(x_195.x, x_195.y, x_195.z));
}
@ -103,8 +92,7 @@ float3x3 transposeMat3_mf33_(inout float3x3 inMatrix) {
const float x_93 = i2.z;
const float3 x_94 = float3(x_89, x_91, x_93);
outMatrix = float3x3(float3(x_78.x, x_78.y, x_78.z), float3(x_86.x, x_86.y, x_86.z), float3(x_94.x, x_94.y, x_94.z));
const float3x3 x_110 = outMatrix;
return x_110;
return outMatrix;
}
float3 perturbNormalBase_mf33_vf3_f1_(inout float3x3 cotangentFrame, inout float3 normal, inout float scale) {
@ -143,16 +131,14 @@ lightingInfo computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(inout float3
const float4 x_228 = lightData;
angleW = normalize((x_227 + float3(x_228.x, x_228.y, x_228.z)));
const float3 x_233 = vNormal;
const float3 x_234 = angleW;
specComp = max(0.0f, dot(x_233, x_234));
specComp = max(0.0f, dot(x_233, angleW));
const float x_237 = specComp;
const float x_238 = glossiness;
specComp = pow(x_237, max(1.0f, x_238));
const float x_241 = specComp;
const float3 x_242 = specularColor;
result.specular = (x_242 * x_241);
const lightingInfo x_245 = result;
return x_245;
return result;
}
void main_1() {
@ -211,8 +197,7 @@ void main_1() {
float3 output3 = float3(0.0f, 0.0f, 0.0f);
u_Float = 100.0f;
u_Color = float3(0.5f, 0.5f, 0.5f);
const float2 x_261 = vMainuv;
const float4 x_262 = TextureSamplerTexture.Sample(TextureSamplerSampler, x_261);
const float4 x_262 = TextureSamplerTexture.Sample(TextureSamplerSampler, vMainuv);
tempTextureRead = x_262;
const float4 x_264 = tempTextureRead;
const uint scalar_offset = (160u) / 4;
@ -227,132 +212,71 @@ void main_1() {
const uint scalar_offset_2 = (128u) / 4;
const float x_292 = asfloat(x_269[scalar_offset_2 / 4][scalar_offset_2 % 4]);
normalScale = (1.0f / x_292);
const bool x_298 = gl_FrontFacing;
if (x_298) {
const float2 x_303 = v_uv;
x_299 = x_303;
if (gl_FrontFacing) {
x_299 = v_uv;
} else {
const float2 x_305 = v_uv;
x_299 = -(x_305);
x_299 = -(v_uv);
}
const float2 x_307 = x_299;
TBNUV = x_307;
TBNUV = x_299;
const float4 x_310 = v_output2;
const float x_312 = normalScale;
param_3 = (float3(x_310.x, x_310.y, x_310.z) * x_312);
param_3 = (float3(x_310.x, x_310.y, x_310.z) * normalScale);
const float4 x_317 = v_output1;
param_4 = float3(x_317.x, x_317.y, x_317.z);
const float2 x_320 = TBNUV;
param_5 = x_320;
param_5 = TBNUV;
const uint scalar_offset_3 = (168u) / 4;
uint4 ubo_load = x_269[scalar_offset_3 / 4];
const float2 x_324 = asfloat(((scalar_offset_3 & 2) ? ubo_load.zw : ubo_load.xy));
param_6 = x_324;
const float3x3 x_325 = cotangent_frame_vf3_vf3_vf2_vf2_(param_3, param_4, param_5, param_6);
TBN = x_325;
const float3x3 x_328 = TBN;
param_7 = x_328;
param_7 = TBN;
const float3x3 x_329 = transposeMat3_mf33_(param_7);
invTBN = x_329;
const float3x3 x_331 = invTBN;
const float3 x_332 = output5;
const float3 x_334 = mul(-(x_332), x_331);
const float3x3 x_337 = invTBN;
const float3 x_338 = output5;
parallaxLimit = (length(float2(x_334.x, x_334.y)) / mul(-(x_338), x_337).z);
const float3 x_334 = mul(-(output5), invTBN);
parallaxLimit = (length(float2(x_334.x, x_334.y)) / mul(-(output5), invTBN).z);
const uint scalar_offset_4 = (156u) / 4;
const float x_345 = asfloat(x_269[scalar_offset_4 / 4][scalar_offset_4 % 4]);
const float x_346 = parallaxLimit;
parallaxLimit = (x_346 * x_345);
const float3x3 x_349 = invTBN;
const float3 x_350 = output5;
const float3 x_352 = mul(-(x_350), x_349);
parallaxLimit = (parallaxLimit * x_345);
const float3 x_352 = mul(-(output5), invTBN);
vOffsetDir = normalize(float2(x_352.x, x_352.y));
const float2 x_356 = vOffsetDir;
const float x_357 = parallaxLimit;
vMaxOffset = (x_356 * x_357);
const float3x3 x_361 = invTBN;
const float3 x_362 = output5;
const float3x3 x_365 = invTBN;
vMaxOffset = (vOffsetDir * parallaxLimit);
const float4 x_366 = v_output2;
numSamples = (15.0f + (dot(mul(-(x_362), x_361), mul(float3(x_366.x, x_366.y, x_366.z), x_365)) * -11.0f));
const float x_374 = numSamples;
stepSize = (1.0f / x_374);
numSamples = (15.0f + (dot(mul(-(output5), invTBN), mul(float3(x_366.x, x_366.y, x_366.z), invTBN)) * -11.0f));
stepSize = (1.0f / numSamples);
currRayHeight = 1.0f;
vCurrOffset = float2(0.0f, 0.0f);
vLastOffset = float2(0.0f, 0.0f);
lastSampledHeight = 1.0f;
currSampledHeight = 1.0f;
i = 0;
while (true) {
const int x_388 = i;
if ((x_388 < 15)) {
} else {
break;
}
const float2 x_394 = v_uv;
const float2 x_395 = vCurrOffset;
const float4 x_397 = TextureSamplerTexture.Sample(TextureSamplerSampler, (x_394 + x_395));
for(; (i < 15); i = (i + 1)) {
const float4 x_397 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + vCurrOffset));
currSampledHeight = x_397.w;
const float x_400 = currSampledHeight;
const float x_401 = currRayHeight;
if ((x_400 > x_401)) {
const float x_406 = currSampledHeight;
const float x_407 = currRayHeight;
delta1 = (x_406 - x_407);
const float x_410 = currRayHeight;
const float x_411 = stepSize;
const float x_413 = lastSampledHeight;
delta2 = ((x_410 + x_411) - x_413);
const float x_416 = delta1;
const float x_417 = delta1;
const float x_418 = delta2;
ratio = (x_416 / (x_417 + x_418));
const float x_421 = ratio;
const float2 x_422 = vLastOffset;
const float x_424 = ratio;
const float2 x_426 = vCurrOffset;
vCurrOffset = ((x_422 * x_421) + (x_426 * (1.0f - x_424)));
if ((currSampledHeight > currRayHeight)) {
delta1 = (currSampledHeight - currRayHeight);
delta2 = ((currRayHeight + stepSize) - lastSampledHeight);
ratio = (delta1 / (delta1 + delta2));
vCurrOffset = ((vLastOffset * ratio) + (vCurrOffset * (1.0f - ratio)));
break;
} else {
const float x_431 = stepSize;
const float x_432 = currRayHeight;
currRayHeight = (x_432 - x_431);
const float2 x_434 = vCurrOffset;
vLastOffset = x_434;
const float x_435 = stepSize;
const float2 x_436 = vMaxOffset;
const float2 x_438 = vCurrOffset;
vCurrOffset = (x_438 + (x_436 * x_435));
const float x_440 = currSampledHeight;
lastSampledHeight = x_440;
}
{
const int x_441 = i;
i = (x_441 + 1);
currRayHeight = (currRayHeight - stepSize);
vLastOffset = vCurrOffset;
vCurrOffset = (vCurrOffset + (vMaxOffset * stepSize));
lastSampledHeight = currSampledHeight;
}
}
const float2 x_444 = vCurrOffset;
parallaxOcclusion_0 = x_444;
const float2 x_445 = parallaxOcclusion_0;
uvOffset = x_445;
const float2 x_449 = v_uv;
const float2 x_450 = uvOffset;
const float4 x_452 = TextureSamplerTexture.Sample(TextureSamplerSampler, (x_449 + x_450));
parallaxOcclusion_0 = vCurrOffset;
uvOffset = parallaxOcclusion_0;
const float4 x_452 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + uvOffset));
const uint scalar_offset_5 = (128u) / 4;
const float x_454 = asfloat(x_269[scalar_offset_5 / 4][scalar_offset_5 % 4]);
const float3x3 x_457 = TBN;
param_8 = x_457;
param_8 = TBN;
param_9 = float3(x_452.x, x_452.y, x_452.z);
param_10 = (1.0f / x_454);
const float3 x_461 = perturbNormal_mf33_vf3_f1_(param_8, param_9, param_10);
const float4 x_462 = output4;
output4 = float4(x_461.x, x_461.y, x_461.z, x_462.w);
const float2 x_465 = v_uv;
const float2 x_466 = uvOffset;
output6 = (x_465 + x_466);
const float2 x_474 = output6;
const float4 x_475 = TextureSampler1Texture.Sample(TextureSampler1Sampler, x_474);
output4 = float4(x_461.x, x_461.y, x_461.z, output4.w);
output6 = (v_uv + uvOffset);
const float4 x_475 = TextureSampler1Texture.Sample(TextureSampler1Sampler, output6);
tempTextureRead1 = x_475;
const float4 x_477 = tempTextureRead1;
rgb1 = float3(x_477.x, x_477.y, x_477.z);
@ -361,16 +285,13 @@ void main_1() {
const float4 x_482 = v_output1;
viewDirectionW_1 = normalize((x_481 - float3(x_482.x, x_482.y, x_482.z)));
shadow = 1.0f;
const float x_488 = u_Float;
glossiness_1 = (1.0f * x_488);
glossiness_1 = (1.0f * u_Float);
diffuseBase = float3(0.0f, 0.0f, 0.0f);
specularBase = float3(0.0f, 0.0f, 0.0f);
const float4 x_494 = output4;
normalW = float3(x_494.x, x_494.y, x_494.z);
const float3 x_501 = viewDirectionW_1;
param_11 = x_501;
const float3 x_503 = normalW;
param_12 = x_503;
param_11 = viewDirectionW_1;
param_12 = normalW;
const uint scalar_offset_7 = (0u) / 4;
const float4 x_507 = asfloat(light0[scalar_offset_7 / 4]);
param_13 = x_507;
@ -383,28 +304,17 @@ void main_1() {
const uint scalar_offset_10 = (48u) / 4;
const float3 x_518 = asfloat(light0[scalar_offset_10 / 4].xyz);
param_16 = x_518;
const float x_520 = glossiness_1;
param_17 = x_520;
param_17 = glossiness_1;
const lightingInfo x_521 = computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(param_11, param_12, param_13, param_14, param_15, param_16, param_17);
info = x_521;
shadow = 1.0f;
const float3 x_523 = info.diffuse;
const float x_524 = shadow;
const float3 x_526 = diffuseBase;
diffuseBase = (x_526 + (x_523 * x_524));
diffuseBase = (diffuseBase + (x_523 * shadow));
const float3 x_529 = info.specular;
const float x_530 = shadow;
const float3 x_532 = specularBase;
specularBase = (x_532 + (x_529 * x_530));
const float3 x_535 = diffuseBase;
const float3 x_536 = rgb1;
diffuseOutput = (x_535 * x_536);
const float3 x_539 = specularBase;
const float3 x_540 = u_Color;
specularOutput = (x_539 * x_540);
const float3 x_543 = diffuseOutput;
const float3 x_544 = specularOutput;
output3 = (x_543 + x_544);
specularBase = (specularBase + (x_529 * shadow));
diffuseOutput = (diffuseBase * rgb1);
specularOutput = (specularBase * u_Color);
output3 = (diffuseOutput + specularOutput);
const float3 x_548 = output3;
glFragColor = float4(x_548.x, x_548.y, x_548.z, 1.0f);
return;

View File

@ -0,0 +1,211 @@
/* Dumped generated HLSL */
struct lightingInfo
{
float3 diffuse;
float3 specular;
};
cbuffer LeftOver : register(b0, space2)
{
row_major float4x4 _269_u_World : packoffset(c0);
row_major float4x4 _269_u_ViewProjection : packoffset(c4);
float _269_u_bumpStrength : packoffset(c8);
float3 _269_u_cameraPosition : packoffset(c9);
float _269_u_parallaxScale : packoffset(c9.w);
float _269_textureInfoName : packoffset(c10);
float2 _269_tangentSpaceParameter0 : packoffset(c10.z);
};
cbuffer Light0 : register(b0, space0)
{
float4 light0_vLightData : packoffset(c0);
float4 light0_vLightDiffuse : packoffset(c1);
float4 light0_vLightSpecular : packoffset(c2);
float3 light0_vLightGround : packoffset(c3);
float4 light0_shadowsInfo : packoffset(c4);
float2 light0_depthValues : packoffset(c5);
};
Texture2D<float4> TextureSamplerTexture : register(t3, space2);
SamplerState TextureSamplerSampler : register(s2, space2);
Texture2D<float4> TextureSampler1Texture : register(t1, space2);
SamplerState TextureSampler1Sampler : register(s0, space2);
SamplerState bumpSamplerSampler : register(s1, space2);
Texture2D<float4> bumpSamplerTexture : register(t2, space2);
static bool gl_FrontFacing;
static float2 vMainuv;
static float4 v_output1;
static float2 v_uv;
static float4 v_output2;
static float4 glFragColor;
struct SPIRV_Cross_Input
{
float4 v_output1 : TEXCOORD0;
float2 vMainuv : TEXCOORD1;
float4 v_output2 : TEXCOORD2;
float2 v_uv : TEXCOORD3;
bool gl_FrontFacing : SV_IsFrontFace;
};
struct SPIRV_Cross_Output
{
float4 glFragColor : SV_Target0;
};
static float u_Float = 0.0f;
static float3 u_Color = 0.0f.xxx;
float3x3 cotangent_frame(float3 normal, float3 p, float2 uv, float2 tangentSpaceParams)
{
float3 dp1 = ddx(p);
float3 dp2 = ddy(p);
float2 duv1 = ddx(uv);
float2 duv2 = ddy(uv);
float3 dp2perp = cross(dp2, normal);
float3 dp1perp = cross(normal, dp1);
float3 tangent = (dp2perp * duv1.x) + (dp1perp * duv2.x);
float3 bitangent = (dp2perp * duv1.y) + (dp1perp * duv2.y);
tangent *= tangentSpaceParams.x;
bitangent *= tangentSpaceParams.y;
float invmax = rsqrt(max(dot(tangent, tangent), dot(bitangent, bitangent)));
return float3x3(float3(tangent * invmax), float3(bitangent * invmax), float3(normal));
}
float3x3 transposeMat3(float3x3 inMatrix)
{
float3 i0 = inMatrix[0];
float3 i1 = inMatrix[1];
float3 i2 = inMatrix[2];
float3x3 outMatrix = float3x3(float3(float3(i0.x, i1.x, i2.x)), float3(float3(i0.y, i1.y, i2.y)), float3(float3(i0.z, i1.z, i2.z)));
return outMatrix;
}
float3 perturbNormalBase(float3x3 cotangentFrame, float3 normal, float scale)
{
return normalize(mul(normal, cotangentFrame));
}
float3 perturbNormal(float3x3 cotangentFrame, float3 textureSample, float scale)
{
float3x3 param = cotangentFrame;
float3 param_1 = (textureSample * 2.0f) - 1.0f.xxx;
float param_2 = scale;
return perturbNormalBase(param, param_1, param_2);
}
lightingInfo computeHemisphericLighting(float3 viewDirectionW, float3 vNormal, float4 lightData, float3 diffuseColor, float3 specularColor, float3 groundColor, float glossiness)
{
float ndl = (dot(vNormal, lightData.xyz) * 0.5f) + 0.5f;
lightingInfo result = { 0.0f.xxx, 0.0f.xxx };
result.diffuse = lerp(groundColor, diffuseColor, ndl.xxx);
float3 angleW = normalize(viewDirectionW + lightData.xyz);
float specComp = max(0.0f, dot(vNormal, angleW));
specComp = pow(specComp, max(1.0f, glossiness));
result.specular = specularColor * specComp;
return result;
}
void frag_main()
{
u_Float = 100.0f;
u_Color = 0.5f.xxx;
float4 tempTextureRead = TextureSamplerTexture.Sample(TextureSamplerSampler, vMainuv);
float3 rgb = tempTextureRead.xyz * _269_textureInfoName;
float3 output5 = normalize(_269_u_cameraPosition - v_output1.xyz);
float4 output4 = 0.0f.xxxx;
float2 uvOffset = 0.0f.xx;
float normalScale = 1.0f / _269_u_bumpStrength;
float2 _299 = 0.0f.xx;
if (gl_FrontFacing)
{
_299 = v_uv;
}
else
{
_299 = -v_uv;
}
float2 TBNUV = _299;
float3 param = v_output2.xyz * normalScale;
float3 param_1 = v_output1.xyz;
float2 param_2 = TBNUV;
float2 param_3 = _269_tangentSpaceParameter0;
float3x3 TBN = cotangent_frame(param, param_1, param_2, param_3);
float3x3 param_4 = TBN;
float3x3 invTBN = transposeMat3(param_4);
float parallaxLimit = length(mul(-output5, invTBN).xy) / mul(-output5, invTBN).z;
parallaxLimit *= _269_u_parallaxScale;
float2 vOffsetDir = normalize(mul(-output5, invTBN).xy);
float2 vMaxOffset = vOffsetDir * parallaxLimit;
float numSamples = 15.0f + (dot(mul(-output5, invTBN), mul(v_output2.xyz, invTBN)) * (-11.0f));
float stepSize = 1.0f / numSamples;
float currRayHeight = 1.0f;
float2 vCurrOffset = 0.0f.xx;
float2 vLastOffset = 0.0f.xx;
float lastSampledHeight = 1.0f;
float currSampledHeight = 1.0f;
for (int i = 0; i < 15; i++)
{
currSampledHeight = TextureSamplerTexture.Sample(TextureSamplerSampler, v_uv + vCurrOffset).w;
if (currSampledHeight > currRayHeight)
{
float delta1 = currSampledHeight - currRayHeight;
float delta2 = (currRayHeight + stepSize) - lastSampledHeight;
float ratio = delta1 / (delta1 + delta2);
vCurrOffset = (vLastOffset * ratio) + (vCurrOffset * (1.0f - ratio));
break;
}
else
{
currRayHeight -= stepSize;
vLastOffset = vCurrOffset;
vCurrOffset += (vMaxOffset * stepSize);
lastSampledHeight = currSampledHeight;
}
}
float2 parallaxOcclusion_0 = vCurrOffset;
uvOffset = parallaxOcclusion_0;
float3x3 param_5 = TBN;
float3 param_6 = TextureSamplerTexture.Sample(TextureSamplerSampler, v_uv + uvOffset).xyz;
float param_7 = 1.0f / _269_u_bumpStrength;
float3 _461 = perturbNormal(param_5, param_6, param_7);
output4 = float4(_461.x, _461.y, _461.z, output4.w);
float2 output6 = v_uv + uvOffset;
float4 tempTextureRead1 = TextureSampler1Texture.Sample(TextureSampler1Sampler, output6);
float3 rgb1 = tempTextureRead1.xyz;
float3 viewDirectionW = normalize(_269_u_cameraPosition - v_output1.xyz);
float shadow = 1.0f;
float glossiness = 1.0f * u_Float;
float3 diffuseBase = 0.0f.xxx;
float3 specularBase = 0.0f.xxx;
float3 normalW = output4.xyz;
float3 param_8 = viewDirectionW;
float3 param_9 = normalW;
float4 param_10 = light0_vLightData;
float3 param_11 = light0_vLightDiffuse.xyz;
float3 param_12 = light0_vLightSpecular.xyz;
float3 param_13 = light0_vLightGround;
float param_14 = glossiness;
lightingInfo info = computeHemisphericLighting(param_8, param_9, param_10, param_11, param_12, param_13, param_14);
shadow = 1.0f;
diffuseBase += (info.diffuse * shadow);
specularBase += (info.specular * shadow);
float3 diffuseOutput = diffuseBase * rgb1;
float3 specularOutput = specularBase * u_Color;
float3 output3 = diffuseOutput + specularOutput;
glFragColor = float4(output3, 1.0f);
}
SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
{
gl_FrontFacing = stage_input.gl_FrontFacing;
vMainuv = stage_input.vMainuv;
v_output1 = stage_input.v_output1;
v_uv = stage_input.v_uv;
v_output2 = stage_input.v_output2;
frag_main();
SPIRV_Cross_Output stage_output;
stage_output.glFragColor = glFragColor;
return stage_output;
}

View File

@ -33,17 +33,11 @@ static bool2 v2b = bool2(false, false);
void foo() {
{
int i = 0;
while (true) {
if (!((i < 2))) {
break;
}
for(; !(!((i < 2))); i = (i + 1)) {
Set_float2(v2f, i, 1.0f);
Set_int3(v3i, i, 1);
Set_uint4(v4u, i, 1u);
Set_bool2(v2b, i, true);
{
i = (i + 1);
}
}
}
}
@ -52,14 +46,8 @@ void foo() {
void main() {
{
int i = 0;
while (true) {
if (!((i < 2))) {
break;
}
for(; !(!((i < 2))); i = (i + 1)) {
foo();
{
i = (i + 1);
}
}
}
return;

View File

@ -15,14 +15,8 @@ void foo() {
void main() {
{
int i = 0;
while (true) {
if (!((i < 2))) {
break;
}
for(; !(!((i < 2))); i = (i + 1)) {
foo();
{
i = (i + 1);
}
}
}
return;

View File

@ -98,10 +98,7 @@ void main() {
bool4 v4b = bool4(false, false, false, false);
{
int i = 0;
while (true) {
if (!((i < 2))) {
break;
}
for(; !(!((i < 2))); i = (i + 1)) {
Set_float2(v2f, i, 1.0f);
Set_float3(v3f, i, 1.0f);
Set_float4(v4f, i, 1.0f);
@ -114,9 +111,6 @@ void main() {
Set_bool2(v2b, i, true);
Set_bool3(v3b, i, true);
Set_bool4(v4b, i, true);
{
i = (i + 1);
}
}
}
return;

View File

@ -37,10 +37,7 @@ void main() {
bool2 v2b_2 = bool2(false, false);
{
int i = 0;
while (true) {
if (!((i < 2))) {
break;
}
for(; !(!((i < 2))); i = (i + 1)) {
Set_float2(v2f, i, 1.0f);
Set_int3(v3i, i, 1);
Set_uint4(v4u, i, 1u);
@ -49,9 +46,6 @@ void main() {
Set_int3(v3i_2, i, 1);
Set_uint4(v4u_2, i, 1u);
Set_bool2(v2b_2, i, true);
{
i = (i + 1);
}
}
}
return;

View File

@ -38,17 +38,11 @@ void main() {
bool4 v4b = bool4(false, false, false, false);
{
int i = 0;
while (true) {
if (!((i < 2))) {
break;
}
for(; !(!((i < 2))); i = (i + 1)) {
Set_float2(v2f, i, 1.0f);
Set_int2(v2i, i, 1);
Set_uint2(v2u, i, 1u);
Set_bool2(v2b, i, true);
{
i = (i + 1);
}
}
}
int i = 0;

View File

@ -1,8 +1,7 @@
static int I = 0;
void main_1() {
const int x_9 = I;
const int x_11 = (x_9 + 1);
const int x_11 = (I + 1);
return;
}

View File

@ -2,7 +2,6 @@ static int I = 0;
[numthreads(1, 1, 1)]
void main() {
const int i = I;
const int use = (i + 1);
const int use = (I + 1);
return;
}

View File

@ -1,8 +1,7 @@
void main_1() {
int i = 0;
i = 123;
const int x_10 = i;
const int x_12 = (x_10 + 1);
const int x_12 = (i + 1);
return;
}

View File

@ -6,8 +6,7 @@ int func(int value, inout int pointer) {
void main_1() {
int i = 0;
i = 123;
const int x_19 = i;
const int x_18 = func(x_19, i);
const int x_18 = func(i, i);
return;
}

View File

@ -54,14 +54,8 @@ void comp_main(tint_symbol_5 tint_symbol_4) {
float2 vel = float2(0.0f, 0.0f);
{
uint i = 0u;
while (true) {
if (!((i < 5u))) {
break;
}
for(; !(!((i < 5u))); i = (i + 1u)) {
if ((i == index)) {
{
i = (i + 1u);
}
continue;
}
pos = asfloat(particlesA.Load2((16u * i))).xy;
@ -80,9 +74,6 @@ void comp_main(tint_symbol_5 tint_symbol_4) {
cVel = (cVel + vel);
cVelCount = (cVelCount + 1);
}
{
i = (i + 1u);
}
}
}
if ((cMassCount > 0)) {