Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(402)

Unified Diff: gpu/command_buffer/service/vertex_attrib_manager.cc

Issue 2148723004: WebGL 2: make sure VertexAttrib type match the corresponding attrib type in shader (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: code clean Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/vertex_attrib_manager.cc
diff --git a/gpu/command_buffer/service/vertex_attrib_manager.cc b/gpu/command_buffer/service/vertex_attrib_manager.cc
index 76883dc0f3fe2e956e9017ea82970d0b407e3fb1..fc3affe2cdcb5140dd3879f6e42f7e5c1c5023ef 100644
--- a/gpu/command_buffer/service/vertex_attrib_manager.cc
+++ b/gpu/command_buffer/service/vertex_attrib_manager.cc
@@ -127,6 +127,16 @@ VertexAttribManager::~VertexAttribManager() {
void VertexAttribManager::Initialize(uint32_t max_vertex_attribs,
bool init_attribs) {
vertex_attribs_.resize(max_vertex_attribs);
+ max_vertex_attribs_ = max_vertex_attribs;
+ uint32_t packed_size = max_vertex_attribs_ / 16;
+ packed_size += (max_vertex_attribs_ % 16 == 0) ? 0 : 1;
+ attrib_base_type_mask_.resize(packed_size);
+ attrib_type_written_mask_.resize(packed_size);
+
+ for (uint32_t ii = 0; ii < packed_size; ++ii) {
+ attrib_type_written_mask_[ii] = 0u;
+ attrib_base_type_mask_[ii] = 0u;
+ }
for (uint32_t vv = 0; vv < vertex_attribs_.size(); ++vv) {
vertex_attribs_[vv].set_index(vv);
@@ -146,6 +156,15 @@ bool VertexAttribManager::Enable(GLuint index, bool enable) {
if (index >= vertex_attribs_.size()) {
return false;
}
+
+ DCHECK(index < max_vertex_attribs_);
+ GLuint shift_bits = (index % 16) * 2;
+ if (enable) {
+ attrib_type_written_mask_[index / 16] |= (0x3 << shift_bits);
+ } else {
+ attrib_type_written_mask_[index / 16] &= ~(0x3 << shift_bits);
+ }
+
VertexAttrib& info = vertex_attribs_[index];
if (info.enabled() != enable) {
info.set_enabled(enable);

Powered by Google App Engine
This is Rietveld 408576698