tint: Show the source of non-uniformity
Show the original source of non-uniformity when producing errors from the uniformity analysis. Bug: tint:880 Change-Id: Id386ae8fa5ff1b1443d54c0b5ef12ab76b3b3f13 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/89723 Reviewed-by: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
parent
9c03abfb55
commit
7dd0ab791a
|
@ -79,11 +79,23 @@ struct Node {
|
||||||
std::string tag;
|
std::string tag;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/// Type describes the type of the node, which is used to determine additional diagnostic
|
||||||
|
/// information.
|
||||||
|
enum Type {
|
||||||
|
kRegular,
|
||||||
|
kFunctionCallArgument,
|
||||||
|
kFunctionCallPointerArgumentResult,
|
||||||
|
kFunctionCallReturnValue,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// The type of the node.
|
||||||
|
Type type = kRegular;
|
||||||
|
|
||||||
/// The corresponding AST node, or nullptr.
|
/// The corresponding AST node, or nullptr.
|
||||||
const ast::Node* ast = nullptr;
|
const ast::Node* ast = nullptr;
|
||||||
|
|
||||||
/// The function call argument index, or UINT32_MAX.
|
/// The function call argument index, if applicable.
|
||||||
uint32_t arg_index = std::numeric_limits<uint32_t>::max();
|
uint32_t arg_index;
|
||||||
|
|
||||||
/// The set of edges from this node to other nodes in the graph.
|
/// The set of edges from this node to other nodes in the graph.
|
||||||
utils::UniqueVector<Node*> edges;
|
utils::UniqueVector<Node*> edges;
|
||||||
|
@ -895,6 +907,7 @@ class UniformityGraph {
|
||||||
|
|
||||||
auto name = builder_->Symbols().NameFor(ident->symbol);
|
auto name = builder_->Symbols().NameFor(ident->symbol);
|
||||||
auto* sem = sem_.Get<sem::VariableUser>(ident)->Variable();
|
auto* sem = sem_.Get<sem::VariableUser>(ident)->Variable();
|
||||||
|
auto* node = CreateNode(name + "_ident_expr", ident);
|
||||||
return Switch(
|
return Switch(
|
||||||
sem,
|
sem,
|
||||||
|
|
||||||
|
@ -910,38 +923,39 @@ class UniformityGraph {
|
||||||
uniform = false;
|
uniform = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return std::make_pair(cf,
|
node->AddEdge(uniform ? cf : current_function_->may_be_non_uniform);
|
||||||
uniform ? cf : current_function_->may_be_non_uniform);
|
return std::make_pair(cf, node);
|
||||||
} else {
|
} else {
|
||||||
if (has_nonuniform_entry_point_attribute(param->Declaration())) {
|
if (has_nonuniform_entry_point_attribute(param->Declaration())) {
|
||||||
return std::make_pair(cf, current_function_->may_be_non_uniform);
|
node->AddEdge(current_function_->may_be_non_uniform);
|
||||||
|
} else {
|
||||||
|
node->AddEdge(cf);
|
||||||
}
|
}
|
||||||
return std::make_pair(cf, cf);
|
return std::make_pair(cf, node);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
auto* result = CreateNode(name + "_result");
|
|
||||||
auto* x = current_function_->variables.Get(param);
|
auto* x = current_function_->variables.Get(param);
|
||||||
result->AddEdge(cf);
|
node->AddEdge(cf);
|
||||||
result->AddEdge(x);
|
node->AddEdge(x);
|
||||||
return std::make_pair(cf, result);
|
return std::make_pair(cf, node);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
[&](const sem::GlobalVariable* global) {
|
[&](const sem::GlobalVariable* global) {
|
||||||
if (global->Declaration()->is_const || global->Access() == ast::Access::kRead) {
|
if (global->Declaration()->is_const || global->Access() == ast::Access::kRead) {
|
||||||
return std::make_pair(cf, cf);
|
node->AddEdge(cf);
|
||||||
} else {
|
} else {
|
||||||
return std::make_pair(cf, current_function_->may_be_non_uniform);
|
node->AddEdge(current_function_->may_be_non_uniform);
|
||||||
}
|
}
|
||||||
|
return std::make_pair(cf, node);
|
||||||
},
|
},
|
||||||
|
|
||||||
[&](const sem::LocalVariable* local) {
|
[&](const sem::LocalVariable* local) {
|
||||||
auto* result = CreateNode(name + "_result");
|
node->AddEdge(cf);
|
||||||
result->AddEdge(cf);
|
|
||||||
if (auto* x = current_function_->variables.Get(local)) {
|
if (auto* x = current_function_->variables.Get(local)) {
|
||||||
result->AddEdge(x);
|
node->AddEdge(x);
|
||||||
}
|
}
|
||||||
return std::make_pair(cf, result);
|
return std::make_pair(cf, node);
|
||||||
},
|
},
|
||||||
|
|
||||||
[&](Default) {
|
[&](Default) {
|
||||||
|
@ -1110,6 +1124,7 @@ class UniformityGraph {
|
||||||
// Note: This is an additional node that isn't described in the specification, for the
|
// Note: This is an additional node that isn't described in the specification, for the
|
||||||
// purpose of providing diagnostic information.
|
// purpose of providing diagnostic information.
|
||||||
Node* arg_node = CreateNode(name + "_arg_" + std::to_string(i), call);
|
Node* arg_node = CreateNode(name + "_arg_" + std::to_string(i), call);
|
||||||
|
arg_node->type = Node::kFunctionCallArgument;
|
||||||
arg_node->arg_index = static_cast<uint32_t>(i);
|
arg_node->arg_index = static_cast<uint32_t>(i);
|
||||||
arg_node->AddEdge(arg_i);
|
arg_node->AddEdge(arg_i);
|
||||||
|
|
||||||
|
@ -1117,7 +1132,8 @@ class UniformityGraph {
|
||||||
args.push_back(arg_node);
|
args.push_back(arg_node);
|
||||||
}
|
}
|
||||||
|
|
||||||
Node* result = CreateNode("Result_" + name);
|
Node* result = CreateNode(name + "_return_value", call);
|
||||||
|
result->type = Node::kFunctionCallReturnValue;
|
||||||
Node* cf_after = CreateNode("CF_after_" + name, call);
|
Node* cf_after = CreateNode("CF_after_" + name, call);
|
||||||
|
|
||||||
// Get tags for the callee.
|
// Get tags for the callee.
|
||||||
|
@ -1200,7 +1216,9 @@ class UniformityGraph {
|
||||||
auto* sem_arg = sem_.Get(call->args[i]);
|
auto* sem_arg = sem_.Get(call->args[i]);
|
||||||
if (sem_arg->Type()->Is<sem::Pointer>()) {
|
if (sem_arg->Type()->Is<sem::Pointer>()) {
|
||||||
auto* ptr_result =
|
auto* ptr_result =
|
||||||
CreateNode(name + "_ptrarg_" + std::to_string(i) + "_result");
|
CreateNode(name + "_ptrarg_" + std::to_string(i) + "_result", call);
|
||||||
|
ptr_result->type = Node::kFunctionCallPointerArgumentResult;
|
||||||
|
ptr_result->arg_index = static_cast<uint32_t>(i);
|
||||||
if (func_info->parameters[i].pointer_may_become_non_uniform) {
|
if (func_info->parameters[i].pointer_may_become_non_uniform) {
|
||||||
ptr_result->AddEdge(current_function_->may_be_non_uniform);
|
ptr_result->AddEdge(current_function_->may_be_non_uniform);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1259,7 +1277,7 @@ class UniformityGraph {
|
||||||
// function and look for one whose node has an edge from the RequiredToBeUniform node.
|
// function and look for one whose node has an edge from the RequiredToBeUniform node.
|
||||||
auto& target_info = functions_.at(user->Declaration());
|
auto& target_info = functions_.at(user->Declaration());
|
||||||
for (auto* call_node : target_info.required_to_be_uniform->edges) {
|
for (auto* call_node : target_info.required_to_be_uniform->edges) {
|
||||||
if (call_node->arg_index == std::numeric_limits<uint32_t>::max()) {
|
if (call_node->type == Node::kRegular) {
|
||||||
auto* child_call = call_node->ast->As<ast::CallExpression>();
|
auto* child_call = call_node->ast->As<ast::CallExpression>();
|
||||||
return FindBuiltinThatRequiresUniformity(child_call);
|
return FindBuiltinThatRequiresUniformity(child_call);
|
||||||
}
|
}
|
||||||
|
@ -1315,7 +1333,7 @@ class UniformityGraph {
|
||||||
func_name = builder_->Symbols().NameFor(user->Declaration()->symbol);
|
func_name = builder_->Symbols().NameFor(user->Declaration()->symbol);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cause->arg_index != std::numeric_limits<uint32_t>::max()) {
|
if (cause->type == Node::kFunctionCallArgument) {
|
||||||
// The requirement was on a function parameter.
|
// The requirement was on a function parameter.
|
||||||
auto param_name = builder_->Symbols().NameFor(
|
auto param_name = builder_->Symbols().NameFor(
|
||||||
target->Parameters()[cause->arg_index]->Declaration()->symbol);
|
target->Parameters()[cause->arg_index]->Declaration()->symbol);
|
||||||
|
@ -1353,7 +1371,91 @@ class UniformityGraph {
|
||||||
innermost_call->source);
|
innermost_call->source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO(jrprice): Show the source of non-uniformity.
|
|
||||||
|
// Show the source of non-uniformity.
|
||||||
|
if (!note) {
|
||||||
|
// Traverse the graph to generate a path from RequiredToBeUniform to MayBeNonUniform.
|
||||||
|
function.ResetVisited();
|
||||||
|
Traverse(function.required_to_be_uniform);
|
||||||
|
|
||||||
|
// Get the source of the non-uniform value.
|
||||||
|
auto* non_uniform_source = function.may_be_non_uniform->visited_from;
|
||||||
|
TINT_ASSERT(Resolver, non_uniform_source);
|
||||||
|
|
||||||
|
// TODO(jrprice): Show where the non-uniform value results in non-uniform control flow.
|
||||||
|
|
||||||
|
Switch(
|
||||||
|
non_uniform_source->ast,
|
||||||
|
[&](const ast::IdentifierExpression* ident) {
|
||||||
|
std::string var_type = "";
|
||||||
|
auto* var = sem_.Get<sem::VariableUser>(ident)->Variable();
|
||||||
|
switch (var->StorageClass()) {
|
||||||
|
case ast::StorageClass::kStorage:
|
||||||
|
var_type = "read_write storage buffer ";
|
||||||
|
break;
|
||||||
|
case ast::StorageClass::kWorkgroup:
|
||||||
|
var_type = "workgroup storage variable ";
|
||||||
|
break;
|
||||||
|
case ast::StorageClass::kPrivate:
|
||||||
|
var_type = "module-scope private variable ";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (ast::HasAttribute<ast::BuiltinAttribute>(
|
||||||
|
var->Declaration()->attributes)) {
|
||||||
|
var_type = "builtin ";
|
||||||
|
} else if (ast::HasAttribute<ast::LocationAttribute>(
|
||||||
|
var->Declaration()->attributes)) {
|
||||||
|
var_type = "user-defined input ";
|
||||||
|
} else {
|
||||||
|
// TODO(jrprice): Provide more info for this case.
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
diagnostics_.add_note(diag::System::Resolver,
|
||||||
|
"reading from " + var_type + "'" +
|
||||||
|
builder_->Symbols().NameFor(ident->symbol) +
|
||||||
|
"' may result in a non-uniform value",
|
||||||
|
ident->source);
|
||||||
|
},
|
||||||
|
[&](const ast::CallExpression* c) {
|
||||||
|
auto target_name = builder_->Symbols().NameFor(
|
||||||
|
c->target.name->As<ast::IdentifierExpression>()->symbol);
|
||||||
|
switch (non_uniform_source->type) {
|
||||||
|
case Node::kRegular: {
|
||||||
|
diagnostics_.add_note(
|
||||||
|
diag::System::Resolver,
|
||||||
|
"calling '" + target_name +
|
||||||
|
"' may cause subsequent control flow to be non-uniform",
|
||||||
|
c->source);
|
||||||
|
// TODO(jrprice): Descend into the function and show the reason why.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Node::kFunctionCallReturnValue: {
|
||||||
|
diagnostics_.add_note(
|
||||||
|
diag::System::Resolver,
|
||||||
|
"return value of '" + target_name + "' may be non-uniform",
|
||||||
|
c->source);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Node::kFunctionCallPointerArgumentResult: {
|
||||||
|
diagnostics_.add_note(
|
||||||
|
diag::System::Resolver,
|
||||||
|
"pointer contents may become non-uniform after calling '" +
|
||||||
|
target_name + "'",
|
||||||
|
c->args[non_uniform_source->arg_index]->source);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
TINT_ICE(Resolver, diagnostics_)
|
||||||
|
<< "unhandled source of non-uniformity";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[&](Default) {
|
||||||
|
TINT_ICE(Resolver, diagnostics_) << "unhandled source of non-uniformity";
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2,6 +2,10 @@ bug/dawn/947.wgsl:59:20 warning: 'textureSample' must only be called from unifor
|
||||||
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/dawn/947.wgsl:54:15 note: reading from user-defined input 'texcoord' may result in a non-uniform value
|
||||||
|
clamp(texcoord, vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 1.0));
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
#version 310 es
|
#version 310 es
|
||||||
|
|
||||||
layout(location = 0) out vec2 texcoords_1;
|
layout(location = 0) out vec2 texcoords_1;
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/dawn/947.wgsl:59:20 warning: 'textureSample' must only be called from unifor
|
||||||
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/dawn/947.wgsl:54:15 note: reading from user-defined input 'texcoord' may result in a non-uniform value
|
||||||
|
clamp(texcoord, vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 1.0));
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
cbuffer cbuffer_uniforms : register(b0, space0) {
|
cbuffer cbuffer_uniforms : register(b0, space0) {
|
||||||
uint4 uniforms[1];
|
uint4 uniforms[1];
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/dawn/947.wgsl:59:20 warning: 'textureSample' must only be called from unifor
|
||||||
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/dawn/947.wgsl:54:15 note: reading from user-defined input 'texcoord' may result in a non-uniform value
|
||||||
|
clamp(texcoord, vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 1.0));
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
#include <metal_stdlib>
|
#include <metal_stdlib>
|
||||||
|
|
||||||
using namespace metal;
|
using namespace metal;
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/dawn/947.wgsl:59:20 warning: 'textureSample' must only be called from unifor
|
||||||
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/dawn/947.wgsl:54:15 note: reading from user-defined input 'texcoord' may result in a non-uniform value
|
||||||
|
clamp(texcoord, vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 1.0));
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/dawn/947.wgsl:59:20 warning: 'textureSample' must only be called from unifor
|
||||||
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
var srcColor = textureSample(myTexture, mySampler, texcoord);
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/dawn/947.wgsl:54:15 note: reading from user-defined input 'texcoord' may result in a non-uniform value
|
||||||
|
clamp(texcoord, vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 1.0));
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
struct Uniforms {
|
struct Uniforms {
|
||||||
u_scale : vec2<f32>,
|
u_scale : vec2<f32>,
|
||||||
u_offset : vec2<f32>,
|
u_offset : vec2<f32>,
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/fxc/gradient_in_varying_loop/1112.wgsl:23:33 warning: 'textureSample' must o
|
||||||
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/fxc/gradient_in_varying_loop/1112.wgsl:8:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let random: vec3<f32> = textureSample(randomTexture, Sampler, vUV).rgb;
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
#version 310 es
|
#version 310 es
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/fxc/gradient_in_varying_loop/1112.wgsl:23:33 warning: 'textureSample' must o
|
||||||
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/fxc/gradient_in_varying_loop/1112.wgsl:8:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let random: vec3<f32> = textureSample(randomTexture, Sampler, vUV).rgb;
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
SamplerState tint_symbol : register(s0, space0);
|
SamplerState tint_symbol : register(s0, space0);
|
||||||
Texture2D<float4> randomTexture : register(t1, space0);
|
Texture2D<float4> randomTexture : register(t1, space0);
|
||||||
Texture2D<float4> depthTexture : register(t2, space0);
|
Texture2D<float4> depthTexture : register(t2, space0);
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/fxc/gradient_in_varying_loop/1112.wgsl:23:33 warning: 'textureSample' must o
|
||||||
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/fxc/gradient_in_varying_loop/1112.wgsl:8:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let random: vec3<f32> = textureSample(randomTexture, Sampler, vUV).rgb;
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
#include <metal_stdlib>
|
#include <metal_stdlib>
|
||||||
|
|
||||||
using namespace metal;
|
using namespace metal;
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/fxc/gradient_in_varying_loop/1112.wgsl:23:33 warning: 'textureSample' must o
|
||||||
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/fxc/gradient_in_varying_loop/1112.wgsl:8:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let random: vec3<f32> = textureSample(randomTexture, Sampler, vUV).rgb;
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/fxc/gradient_in_varying_loop/1112.wgsl:23:33 warning: 'textureSample' must o
|
||||||
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/fxc/gradient_in_varying_loop/1112.wgsl:8:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let random: vec3<f32> = textureSample(randomTexture, Sampler, vUV).rgb;
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
@group(0) @binding(0) var Sampler : sampler;
|
@group(0) @binding(0) var Sampler : sampler;
|
||||||
|
|
||||||
@group(0) @binding(1) var randomTexture : texture_2d<f32>;
|
@group(0) @binding(1) var randomTexture : texture_2d<f32>;
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/1118.wgsl:64:31 warning: 'dpdx' must only be called from uniform contro
|
||||||
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
||||||
^^^^
|
^^^^
|
||||||
|
|
||||||
|
bug/tint/1118.wgsl:46:19 note: reading from module-scope private variable 'fClipDistance3' may result in a non-uniform value
|
||||||
|
let x_9 : f32 = fClipDistance3;
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
#version 310 es
|
#version 310 es
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/1118.wgsl:64:31 warning: 'dpdx' must only be called from uniform contro
|
||||||
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
||||||
^^^^
|
^^^^
|
||||||
|
|
||||||
|
bug/tint/1118.wgsl:46:19 note: reading from module-scope private variable 'fClipDistance3' may result in a non-uniform value
|
||||||
|
let x_9 : f32 = fClipDistance3;
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
static float fClipDistance3 = 0.0f;
|
static float fClipDistance3 = 0.0f;
|
||||||
static float fClipDistance4 = 0.0f;
|
static float fClipDistance4 = 0.0f;
|
||||||
cbuffer cbuffer_x_29 : register(b0, space0) {
|
cbuffer cbuffer_x_29 : register(b0, space0) {
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/1118.wgsl:64:31 warning: 'dpdx' must only be called from uniform contro
|
||||||
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
||||||
^^^^
|
^^^^
|
||||||
|
|
||||||
|
bug/tint/1118.wgsl:46:19 note: reading from module-scope private variable 'fClipDistance3' may result in a non-uniform value
|
||||||
|
let x_9 : f32 = fClipDistance3;
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
#include <metal_stdlib>
|
#include <metal_stdlib>
|
||||||
|
|
||||||
using namespace metal;
|
using namespace metal;
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/1118.wgsl:64:31 warning: 'dpdx' must only be called from uniform contro
|
||||||
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
||||||
^^^^
|
^^^^
|
||||||
|
|
||||||
|
bug/tint/1118.wgsl:46:19 note: reading from module-scope private variable 'fClipDistance3' may result in a non-uniform value
|
||||||
|
let x_9 : f32 = fClipDistance3;
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/1118.wgsl:64:31 warning: 'dpdx' must only be called from uniform contro
|
||||||
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
|
||||||
^^^^
|
^^^^
|
||||||
|
|
||||||
|
bug/tint/1118.wgsl:46:19 note: reading from module-scope private variable 'fClipDistance3' may result in a non-uniform value
|
||||||
|
let x_9 : f32 = fClipDistance3;
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
struct Scene {
|
struct Scene {
|
||||||
vEyePosition : vec4<f32>,
|
vEyePosition : vec4<f32>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
||||||
note: 'workgroupBarrier' must only be called from uniform control flow
|
note: 'workgroupBarrier' must only be called from uniform control flow
|
||||||
|
note: reading from module-scope private variable 'dimInner_1' may result in a non-uniform value
|
||||||
#version 310 es
|
#version 310 es
|
||||||
|
|
||||||
struct Uniforms {
|
struct Uniforms {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
||||||
note: 'workgroupBarrier' must only be called from uniform control flow
|
note: 'workgroupBarrier' must only be called from uniform control flow
|
||||||
|
note: reading from module-scope private variable 'dimInner_1' may result in a non-uniform value
|
||||||
static int dimAOuter_1 = 0;
|
static int dimAOuter_1 = 0;
|
||||||
cbuffer cbuffer_x_48 : register(b3, space0) {
|
cbuffer cbuffer_x_48 : register(b3, space0) {
|
||||||
uint4 x_48[5];
|
uint4 x_48[5];
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
||||||
note: 'workgroupBarrier' must only be called from uniform control flow
|
note: 'workgroupBarrier' must only be called from uniform control flow
|
||||||
|
note: reading from module-scope private variable 'dimInner_1' may result in a non-uniform value
|
||||||
#include <metal_stdlib>
|
#include <metal_stdlib>
|
||||||
|
|
||||||
using namespace metal;
|
using namespace metal;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
||||||
note: 'workgroupBarrier' must only be called from uniform control flow
|
note: 'workgroupBarrier' must only be called from uniform control flow
|
||||||
|
note: reading from module-scope private variable 'dimInner_1' may result in a non-uniform value
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
warning: parameter 'dimInner' of 'mm_matMul_i1_i1_i1_' must be uniform
|
||||||
note: 'workgroupBarrier' must only be called from uniform control flow
|
note: 'workgroupBarrier' must only be called from uniform control flow
|
||||||
|
note: reading from module-scope private variable 'dimInner_1' may result in a non-uniform value
|
||||||
struct Uniforms {
|
struct Uniforms {
|
||||||
NAN : f32,
|
NAN : f32,
|
||||||
@size(12)
|
@size(12)
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/948.wgsl:146:33 warning: 'textureSampleBias' must only be called from u
|
||||||
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/948.wgsl:146:33 note: return value of 'textureSampleBias' may be non-uniform
|
||||||
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
#version 310 es
|
#version 310 es
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/948.wgsl:146:33 warning: 'textureSampleBias' must only be called from u
|
||||||
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/948.wgsl:146:33 note: return value of 'textureSampleBias' may be non-uniform
|
||||||
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
cbuffer cbuffer_x_20 : register(b9, space2) {
|
cbuffer cbuffer_x_20 : register(b9, space2) {
|
||||||
uint4 x_20[8];
|
uint4 x_20[8];
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/948.wgsl:146:33 warning: 'textureSampleBias' must only be called from u
|
||||||
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/948.wgsl:146:33 note: return value of 'textureSampleBias' may be non-uniform
|
||||||
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
#include <metal_stdlib>
|
#include <metal_stdlib>
|
||||||
|
|
||||||
using namespace metal;
|
using namespace metal;
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/948.wgsl:146:33 warning: 'textureSampleBias' must only be called from u
|
||||||
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/948.wgsl:146:33 note: return value of 'textureSampleBias' may be non-uniform
|
||||||
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/948.wgsl:146:33 warning: 'textureSampleBias' must only be called from u
|
||||||
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/948.wgsl:146:33 note: return value of 'textureSampleBias' may be non-uniform
|
||||||
|
let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
struct LeftOver {
|
struct LeftOver {
|
||||||
time : f32,
|
time : f32,
|
||||||
@size(12)
|
@size(12)
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/949.wgsl:326:29 warning: 'textureSample' must only be called from unifo
|
||||||
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/949.wgsl:326:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
#version 310 es
|
#version 310 es
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/949.wgsl:326:29 warning: 'textureSample' must only be called from unifo
|
||||||
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/949.wgsl:326:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
struct lightingInfo {
|
struct lightingInfo {
|
||||||
float3 diffuse;
|
float3 diffuse;
|
||||||
float3 specular;
|
float3 specular;
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/949.wgsl:326:29 warning: 'textureSample' must only be called from unifo
|
||||||
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/949.wgsl:326:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
#include <metal_stdlib>
|
#include <metal_stdlib>
|
||||||
|
|
||||||
using namespace metal;
|
using namespace metal;
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/949.wgsl:326:29 warning: 'textureSample' must only be called from unifo
|
||||||
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/949.wgsl:326:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
|
|
|
@ -2,6 +2,10 @@ bug/tint/949.wgsl:326:29 warning: 'textureSample' must only be called from unifo
|
||||||
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
bug/tint/949.wgsl:326:29 note: return value of 'textureSample' may be non-uniform
|
||||||
|
let x_397 : vec4<f32> = textureSample(TextureSamplerTexture, TextureSamplerSampler, (x_394 + x_395));
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
struct lightingInfo {
|
struct lightingInfo {
|
||||||
diffuse : vec3<f32>,
|
diffuse : vec3<f32>,
|
||||||
specular : vec3<f32>,
|
specular : vec3<f32>,
|
||||||
|
|
Loading…
Reference in New Issue