tint::transform::VertexPulling: require SingleEntryPoint
This change the vertex pulling transform to look for the single vertex entry point in the module, instead of taking the entry point name in the config. This is necessary because the renamer needs to run before VertexPulling so that builtins like min() don't end up referring to the input WGSL. Putting the renamer before VertexPulling makes the config entry point name no longer match. Bug: dawn:1583 Change-Id: I4c96eb83518e0d6fe8ce23b37e238f4a890eeb2f Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/107080 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
parent
4faf3581b8
commit
63463c2f77
|
@ -154,10 +154,8 @@ tint::transform::MultiplanarExternalTexture::BindingsMap BuildExternalTextureTra
|
||||||
|
|
||||||
tint::transform::VertexPulling::Config BuildVertexPullingTransformConfig(
|
tint::transform::VertexPulling::Config BuildVertexPullingTransformConfig(
|
||||||
const RenderPipelineBase& renderPipeline,
|
const RenderPipelineBase& renderPipeline,
|
||||||
const std::string_view& entryPoint,
|
|
||||||
BindGroupIndex pullingBufferBindingSet) {
|
BindGroupIndex pullingBufferBindingSet) {
|
||||||
tint::transform::VertexPulling::Config cfg;
|
tint::transform::VertexPulling::Config cfg;
|
||||||
cfg.entry_point_name = entryPoint;
|
|
||||||
cfg.pulling_group = static_cast<uint32_t>(pullingBufferBindingSet);
|
cfg.pulling_group = static_cast<uint32_t>(pullingBufferBindingSet);
|
||||||
|
|
||||||
cfg.vertex_state.resize(renderPipeline.GetVertexBufferCount());
|
cfg.vertex_state.resize(renderPipeline.GetVertexBufferCount());
|
||||||
|
|
|
@ -45,7 +45,6 @@ tint::transform::MultiplanarExternalTexture::BindingsMap BuildExternalTextureTra
|
||||||
|
|
||||||
tint::transform::VertexPulling::Config BuildVertexPullingTransformConfig(
|
tint::transform::VertexPulling::Config BuildVertexPullingTransformConfig(
|
||||||
const RenderPipelineBase& renderPipeline,
|
const RenderPipelineBase& renderPipeline,
|
||||||
const std::string_view& entryPoint,
|
|
||||||
BindGroupIndex pullingBufferBindingSet);
|
BindGroupIndex pullingBufferBindingSet);
|
||||||
|
|
||||||
tint::transform::SubstituteOverride::Config BuildSubstituteOverridesTransformConfig(
|
tint::transform::SubstituteOverride::Config BuildSubstituteOverridesTransformConfig(
|
||||||
|
|
|
@ -141,8 +141,8 @@ ResultOrError<CacheResult<MslCompilation>> TranslateToMSL(
|
||||||
std::optional<tint::transform::VertexPulling::Config> vertexPullingTransformConfig;
|
std::optional<tint::transform::VertexPulling::Config> vertexPullingTransformConfig;
|
||||||
if (stage == SingleShaderStage::Vertex &&
|
if (stage == SingleShaderStage::Vertex &&
|
||||||
device->IsToggleEnabled(Toggle::MetalEnableVertexPulling)) {
|
device->IsToggleEnabled(Toggle::MetalEnableVertexPulling)) {
|
||||||
vertexPullingTransformConfig = BuildVertexPullingTransformConfig(
|
vertexPullingTransformConfig =
|
||||||
*renderPipeline, programmableStage.entryPoint.c_str(), kPullingBufferBindingSet);
|
BuildVertexPullingTransformConfig(*renderPipeline, kPullingBufferBindingSet);
|
||||||
|
|
||||||
for (VertexBufferSlot slot : IterateBitSet(renderPipeline->GetVertexBufferSlotsUsed())) {
|
for (VertexBufferSlot slot : IterateBitSet(renderPipeline->GetVertexBufferSlotsUsed())) {
|
||||||
uint32_t metalIndex = renderPipeline->GetMtlVertexBufferIndex(slot);
|
uint32_t metalIndex = renderPipeline->GetMtlVertexBufferIndex(slot);
|
||||||
|
|
|
@ -882,8 +882,18 @@ void VertexPulling::Run(CloneContext& ctx, const DataMap& inputs, DataMap&) cons
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find entry point
|
// Find entry point
|
||||||
auto* func = ctx.src->AST().Functions().Find(ctx.src->Symbols().Get(cfg.entry_point_name),
|
const ast::Function* func = nullptr;
|
||||||
ast::PipelineStage::kVertex);
|
for (auto* fn : ctx.src->AST().Functions()) {
|
||||||
|
if (fn->PipelineStage() == ast::PipelineStage::kVertex) {
|
||||||
|
if (func != nullptr) {
|
||||||
|
ctx.dst->Diagnostics().add_error(
|
||||||
|
diag::System::Transform,
|
||||||
|
"VertexPulling found more than one vertex entry point");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
func = fn;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (func == nullptr) {
|
if (func == nullptr) {
|
||||||
ctx.dst->Diagnostics().add_error(diag::System::Transform,
|
ctx.dst->Diagnostics().add_error(diag::System::Transform,
|
||||||
"Vertex stage entry point not found");
|
"Vertex stage entry point not found");
|
||||||
|
|
|
@ -135,6 +135,8 @@ using VertexStateDescriptor = std::vector<VertexBufferLayoutDescriptor>;
|
||||||
/// code, but these are types that the data may arrive as. We need to convert
|
/// code, but these are types that the data may arrive as. We need to convert
|
||||||
/// these smaller types into the base types such as `f32` and `u32` for the
|
/// these smaller types into the base types such as `f32` and `u32` for the
|
||||||
/// shader to use.
|
/// shader to use.
|
||||||
|
///
|
||||||
|
/// The SingleEntryPoint transform must have run before VertexPulling.
|
||||||
class VertexPulling final : public Castable<VertexPulling, Transform> {
|
class VertexPulling final : public Castable<VertexPulling, Transform> {
|
||||||
public:
|
public:
|
||||||
/// Configuration options for the transform
|
/// Configuration options for the transform
|
||||||
|
@ -152,9 +154,6 @@ class VertexPulling final : public Castable<VertexPulling, Transform> {
|
||||||
/// @returns this Config
|
/// @returns this Config
|
||||||
Config& operator=(const Config&);
|
Config& operator=(const Config&);
|
||||||
|
|
||||||
/// The entry point to add assignments into
|
|
||||||
std::string entry_point_name;
|
|
||||||
|
|
||||||
/// The vertex state descriptor, containing info about attributes
|
/// The vertex state descriptor, containing info about attributes
|
||||||
VertexStateDescriptor vertex_state;
|
VertexStateDescriptor vertex_state;
|
||||||
|
|
||||||
|
@ -163,7 +162,7 @@ class VertexPulling final : public Castable<VertexPulling, Transform> {
|
||||||
uint32_t pulling_group = 4u;
|
uint32_t pulling_group = 4u;
|
||||||
|
|
||||||
/// Reflect the fields of this class so that it can be used by tint::ForeachField()
|
/// Reflect the fields of this class so that it can be used by tint::ForeachField()
|
||||||
TINT_REFLECT(entry_point_name, vertex_state, pulling_group);
|
TINT_REFLECT(vertex_state, pulling_group);
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Constructor
|
/// Constructor
|
||||||
|
|
|
@ -35,18 +35,21 @@ TEST_F(VertexPullingTest, Error_NoEntryPoint) {
|
||||||
EXPECT_EQ(expect, str(got));
|
EXPECT_EQ(expect, str(got));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(VertexPullingTest, Error_InvalidEntryPoint) {
|
TEST_F(VertexPullingTest, Error_MultipleEntryPoint) {
|
||||||
auto* src = R"(
|
auto* src = R"(
|
||||||
@vertex
|
@vertex
|
||||||
fn main() -> @builtin(position) vec4<f32> {
|
fn main() -> @builtin(position) vec4<f32> {
|
||||||
return vec4<f32>();
|
return vec4<f32>();
|
||||||
}
|
}
|
||||||
|
@vertex
|
||||||
|
fn main2() -> @builtin(position) vec4<f32> {
|
||||||
|
return vec4<f32>();
|
||||||
|
}
|
||||||
)";
|
)";
|
||||||
|
|
||||||
auto* expect = "error: Vertex stage entry point not found";
|
auto* expect = "error: VertexPulling found more than one vertex entry point";
|
||||||
|
|
||||||
VertexPulling::Config cfg;
|
VertexPulling::Config cfg;
|
||||||
cfg.entry_point_name = "_";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -64,7 +67,6 @@ fn main() {}
|
||||||
auto* expect = "error: Vertex stage entry point not found";
|
auto* expect = "error: Vertex stage entry point not found";
|
||||||
|
|
||||||
VertexPulling::Config cfg;
|
VertexPulling::Config cfg;
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -87,7 +89,6 @@ fn main(@location(0) var_a : f32) -> @builtin(position) vec4<f32> {
|
||||||
|
|
||||||
VertexPulling::Config cfg;
|
VertexPulling::Config cfg;
|
||||||
cfg.vertex_state = {{{15, VertexStepMode::kVertex, {{VertexFormat::kFloat32, 0, 0}}}}};
|
cfg.vertex_state = {{{15, VertexStepMode::kVertex, {{VertexFormat::kFloat32, 0, 0}}}}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -116,7 +117,6 @@ fn main() -> @builtin(position) vec4<f32> {
|
||||||
)";
|
)";
|
||||||
|
|
||||||
VertexPulling::Config cfg;
|
VertexPulling::Config cfg;
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -153,7 +153,6 @@ fn main(@builtin(vertex_index) tint_pulling_vertex_index : u32) -> @builtin(posi
|
||||||
|
|
||||||
VertexPulling::Config cfg;
|
VertexPulling::Config cfg;
|
||||||
cfg.vertex_state = {{{4, VertexStepMode::kVertex, {{VertexFormat::kFloat32, 0, 0}}}}};
|
cfg.vertex_state = {{{4, VertexStepMode::kVertex, {{VertexFormat::kFloat32, 0, 0}}}}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -190,7 +189,6 @@ fn main(@builtin(instance_index) tint_pulling_instance_index : u32) -> @builtin(
|
||||||
|
|
||||||
VertexPulling::Config cfg;
|
VertexPulling::Config cfg;
|
||||||
cfg.vertex_state = {{{4, VertexStepMode::kInstance, {{VertexFormat::kFloat32, 0, 0}}}}};
|
cfg.vertex_state = {{{4, VertexStepMode::kInstance, {{VertexFormat::kFloat32, 0, 0}}}}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -228,7 +226,6 @@ fn main(@builtin(vertex_index) tint_pulling_vertex_index : u32) -> @builtin(posi
|
||||||
VertexPulling::Config cfg;
|
VertexPulling::Config cfg;
|
||||||
cfg.vertex_state = {{{4, VertexStepMode::kVertex, {{VertexFormat::kFloat32, 0, 0}}}}};
|
cfg.vertex_state = {{{4, VertexStepMode::kVertex, {{VertexFormat::kFloat32, 0, 0}}}}};
|
||||||
cfg.pulling_group = 5;
|
cfg.pulling_group = 5;
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -274,7 +271,6 @@ fn main(@builtin(vertex_index) tint_pulling_vertex_index : u32) -> @builtin(posi
|
||||||
|
|
||||||
VertexPulling::Config cfg;
|
VertexPulling::Config cfg;
|
||||||
cfg.vertex_state = {{{4, VertexStepMode::kVertex, {{VertexFormat::kFloat32, 0, 0}}}}};
|
cfg.vertex_state = {{{4, VertexStepMode::kVertex, {{VertexFormat::kFloat32, 0, 0}}}}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -332,7 +328,6 @@ fn main(@builtin(vertex_index) custom_vertex_index : u32, @builtin(instance_inde
|
||||||
{{VertexFormat::kFloat32, 0, 1}},
|
{{VertexFormat::kFloat32, 0, 1}},
|
||||||
},
|
},
|
||||||
}};
|
}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -411,7 +406,6 @@ fn main(tint_symbol_1 : tint_symbol) -> @builtin(position) vec4<f32> {
|
||||||
{{VertexFormat::kFloat32, 0, 1}},
|
{{VertexFormat::kFloat32, 0, 1}},
|
||||||
},
|
},
|
||||||
}};
|
}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -490,7 +484,6 @@ struct Inputs {
|
||||||
{{VertexFormat::kFloat32, 0, 1}},
|
{{VertexFormat::kFloat32, 0, 1}},
|
||||||
},
|
},
|
||||||
}};
|
}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -566,7 +559,6 @@ fn main(indices : Indices) -> @builtin(position) vec4<f32> {
|
||||||
{{VertexFormat::kFloat32, 0, 1}},
|
{{VertexFormat::kFloat32, 0, 1}},
|
||||||
},
|
},
|
||||||
}};
|
}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -642,7 +634,6 @@ struct Indices {
|
||||||
{{VertexFormat::kFloat32, 0, 1}},
|
{{VertexFormat::kFloat32, 0, 1}},
|
||||||
},
|
},
|
||||||
}};
|
}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -684,7 +675,6 @@ fn main(@builtin(vertex_index) tint_pulling_vertex_index : u32) -> @builtin(posi
|
||||||
cfg.vertex_state = {{{16,
|
cfg.vertex_state = {{{16,
|
||||||
VertexStepMode::kVertex,
|
VertexStepMode::kVertex,
|
||||||
{{VertexFormat::kFloat32, 0, 0}, {VertexFormat::kFloat32x4, 0, 1}}}}};
|
{{VertexFormat::kFloat32, 0, 0}, {VertexFormat::kFloat32x4, 0, 1}}}}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -738,7 +728,6 @@ fn main(@builtin(vertex_index) tint_pulling_vertex_index : u32) -> @builtin(posi
|
||||||
{12, VertexStepMode::kVertex, {{VertexFormat::kFloat32x3, 0, 1}}},
|
{12, VertexStepMode::kVertex, {{VertexFormat::kFloat32x3, 0, 1}}},
|
||||||
{16, VertexStepMode::kVertex, {{VertexFormat::kFloat32x4, 0, 2}}},
|
{16, VertexStepMode::kVertex, {{VertexFormat::kFloat32x4, 0, 2}}},
|
||||||
}};
|
}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -788,7 +777,6 @@ fn main(@builtin(vertex_index) tint_pulling_vertex_index_1 : u32) -> @builtin(po
|
||||||
cfg.vertex_state = {{{16,
|
cfg.vertex_state = {{{16,
|
||||||
VertexStepMode::kVertex,
|
VertexStepMode::kVertex,
|
||||||
{{VertexFormat::kFloat32, 0, 0}, {VertexFormat::kFloat32x4, 0, 1}}}}};
|
{{VertexFormat::kFloat32, 0, 0}, {VertexFormat::kFloat32x4, 0, 1}}}}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -933,7 +921,6 @@ fn main(@builtin(vertex_index) tint_pulling_vertex_index : u32) -> @builtin(posi
|
||||||
{VertexFormat::kSint32, 64, 26}, {VertexFormat::kSint32x2, 64, 27},
|
{VertexFormat::kSint32, 64, 26}, {VertexFormat::kSint32x2, 64, 27},
|
||||||
{VertexFormat::kSint32x3, 64, 28}, {VertexFormat::kSint32x4, 64, 29},
|
{VertexFormat::kSint32x3, 64, 28}, {VertexFormat::kSint32x4, 64, 29},
|
||||||
}}}};
|
}}}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -1079,7 +1066,6 @@ fn main(@builtin(vertex_index) tint_pulling_vertex_index : u32) -> @builtin(posi
|
||||||
{VertexFormat::kSint32, 63, 26}, {VertexFormat::kSint32x2, 63, 27},
|
{VertexFormat::kSint32, 63, 26}, {VertexFormat::kSint32x2, 63, 27},
|
||||||
{VertexFormat::kSint32x3, 63, 28}, {VertexFormat::kSint32x4, 63, 29},
|
{VertexFormat::kSint32x3, 63, 28}, {VertexFormat::kSint32x4, 63, 29},
|
||||||
}}}};
|
}}}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
@ -1224,7 +1210,6 @@ fn main(@builtin(vertex_index) tint_pulling_vertex_index : u32) -> @builtin(posi
|
||||||
{VertexFormat::kSint32, 64, 26}, {VertexFormat::kSint32x2, 64, 27},
|
{VertexFormat::kSint32, 64, 26}, {VertexFormat::kSint32x2, 64, 27},
|
||||||
{VertexFormat::kSint32x3, 64, 28}, {VertexFormat::kSint32x4, 64, 29},
|
{VertexFormat::kSint32x3, 64, 28}, {VertexFormat::kSint32x4, 64, 29},
|
||||||
}}}};
|
}}}};
|
||||||
cfg.entry_point_name = "main";
|
|
||||||
|
|
||||||
DataMap data;
|
DataMap data;
|
||||||
data.Add<VertexPulling::Config>(cfg);
|
data.Add<VertexPulling::Config>(cfg);
|
||||||
|
|
Loading…
Reference in New Issue