Support the group decoration.

This CL changes the set decoration to a group decoration. We still parse
`set` until downstream users can be updated.

Bug: tint:338
Change-Id: I610d1ed769b3a26c117ad6d875f8a99a3d5b7754
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/37920
Auto-Submit: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
dan sinclair
2021-01-15 12:22:16 +00:00
committed by Commit Bot service account
parent 0e17caa361
commit c068cfc139
40 changed files with 338 additions and 311 deletions

View File

@@ -76,8 +76,8 @@ ast::Variable* clone_variable_with_new_name(ast::CloneContext* ctx,
} // namespace
FirstIndexOffset::FirstIndexOffset(uint32_t binding, uint32_t set)
: binding_(binding), set_(set) {}
FirstIndexOffset::FirstIndexOffset(uint32_t binding, uint32_t group)
: binding_(binding), group_(group) {}
FirstIndexOffset::~FirstIndexOffset() = default;
@@ -237,7 +237,7 @@ ast::Variable* FirstIndexOffset::AddUniformBuffer(ast::Module* mod) {
nullptr, // constructor
ast::VariableDecorationList{
mod->create<ast::BindingDecoration>(Source{}, binding_),
mod->create<ast::SetDecoration>(Source{}, set_),
mod->create<ast::GroupDecoration>(Source{}, group_),
}); // decorations
mod->AddGlobalVariable(idx_var);

View File

@@ -52,7 +52,7 @@ namespace transform {
/// [[offset(4)]] tint_first_instance_index : u32;
/// };
/// [[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
/// [[binding(N), set(M)]] var<uniform> tint_first_index_data :
/// [[binding(N), group(M)]] var<uniform> tint_first_index_data :
/// TintFirstIndexOffsetData;
/// fn func() -> u32 {
/// const vert_idx = (tint_first_index_offset_vert_idx +
@@ -64,8 +64,8 @@ class FirstIndexOffset : public Transform {
public:
/// Constructor
/// @param binding the binding() for firstVertex/Instance uniform
/// @param set the set() for firstVertex/Instance uniform
FirstIndexOffset(uint32_t binding, uint32_t set);
/// @param group the group() for firstVertex/Instance uniform
FirstIndexOffset(uint32_t binding, uint32_t group);
~FirstIndexOffset() override;
/// Runs the transform on `module`, returning the transformation result.
@@ -104,7 +104,7 @@ class FirstIndexOffset : public Transform {
ast::Module* module);
uint32_t binding_;
uint32_t set_;
uint32_t group_;
bool has_vertex_index_ = false;
bool has_instance_index_ = false;

View File

@@ -83,7 +83,7 @@ struct TintFirstIndexOffsetData {
};
[[builtin(vertex_idx)]] var<in> tint_first_index_offset_vert_idx : u32;
[[binding(1), set(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
fn test() -> u32 {
const vert_idx : u32 = (tint_first_index_offset_vert_idx + tint_first_index_data.tint_first_vertex_index);
@@ -123,7 +123,7 @@ struct TintFirstIndexOffsetData {
};
[[builtin(instance_idx)]] var<in> tint_first_index_offset_inst_idx : u32;
[[binding(1), set(7)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
[[binding(1), group(7)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
fn test() -> u32 {
const inst_idx : u32 = (tint_first_index_offset_inst_idx + tint_first_index_data.tint_first_instance_index);
@@ -167,7 +167,7 @@ struct TintFirstIndexOffsetData {
[[builtin(instance_idx)]] var<in> tint_first_index_offset_instance_idx : u32;
[[builtin(vertex_idx)]] var<in> tint_first_index_offset_vert_idx : u32;
[[binding(1), set(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
fn test() -> u32 {
const instance_idx : u32 = (tint_first_index_offset_instance_idx + tint_first_index_data.tint_first_instance_index);
@@ -212,7 +212,7 @@ struct TintFirstIndexOffsetData {
};
[[builtin(vertex_idx)]] var<in> tint_first_index_offset_vert_idx : u32;
[[binding(1), set(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
fn func1() -> u32 {
const vert_idx : u32 = (tint_first_index_offset_vert_idx + tint_first_index_data.tint_first_vertex_index);

View File

@@ -65,8 +65,12 @@ void VertexPulling::SetEntryPoint(std::string entry_point) {
cfg.entry_point_name = std::move(entry_point);
}
void VertexPulling::SetPullingBufferBindingGroup(uint32_t number) {
cfg.pulling_group = number;
}
void VertexPulling::SetPullingBufferBindingSet(uint32_t number) {
cfg.pulling_set = number;
cfg.pulling_group = number;
}
Transform::Output VertexPulling::Run(ast::Module* in) {
@@ -293,7 +297,7 @@ void VertexPulling::State::AddVertexStorageBuffers() {
ast::VariableDecorationList{
// decorations
out->create<ast::BindingDecoration>(Source{}, i),
out->create<ast::SetDecoration>(Source{}, cfg.pulling_set),
out->create<ast::GroupDecoration>(Source{}, cfg.pulling_group),
});
out->AddGlobalVariable(var);
}

View File

@@ -151,8 +151,13 @@ class VertexPulling : public Transform {
/// Sets the "set" we will put all our vertex buffers into (as storage
/// buffers)
/// DEPRECATED
/// @param number the set number we will use
void SetPullingBufferBindingSet(uint32_t number);
/// Sets the "group" we will put all our vertex buffers into (as storage
/// buffers)
/// @param number the group number we will use
void SetPullingBufferBindingGroup(uint32_t number);
/// Runs the transform on `module`, returning the transformation result.
/// @note Users of Tint should register the transform with transform manager
@@ -171,8 +176,8 @@ class VertexPulling : public Transform {
std::string entry_point_name;
VertexStateDescriptor vertex_state;
bool vertex_state_set = false;
// Default to 4 as it is past the limits of user-accessible sets
uint32_t pulling_set = 4u;
// Default to 4 as it is past the limits of user-accessible groups
uint32_t pulling_group = 4u;
};
Config cfg;

View File

@@ -134,7 +134,7 @@ struct TintVertexData {
};
[[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32;
[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32;
[[stage(vertex)]]
@@ -173,7 +173,7 @@ struct TintVertexData {
};
[[builtin(instance_idx)]] var<in> _tint_pulling_instance_index : i32;
[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32;
[[stage(vertex)]]
@@ -212,7 +212,7 @@ struct TintVertexData {
};
[[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32;
[[binding(0), set(5)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
[[binding(0), group(5)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32;
[[stage(vertex)]]
@@ -255,8 +255,8 @@ struct TintVertexData {
_tint_vertex_data : [[stride(4)]] array<u32>;
};
[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
[[binding(1), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
[[binding(1), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
var<private> var_a : f32;
var<private> var_b : f32;
[[builtin(vertex_idx)]] var<in> custom_vertex_index : i32;
@@ -302,7 +302,7 @@ struct TintVertexData {
};
[[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32;
[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32;
var<private> var_b : array<f32, 4>;
@@ -348,9 +348,9 @@ struct TintVertexData {
};
[[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32;
[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
[[binding(1), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
[[binding(2), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_2 : TintVertexData;
[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
[[binding(1), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
[[binding(2), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_2 : TintVertexData;
var<private> var_a : array<f32, 2>;
var<private> var_b : array<f32, 3>;
var<private> var_c : array<f32, 4>;