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

Side by Side Diff: core/cross/command_buffer/stream_bank_cb.cc

Issue 212018: Change command buffer client code to use structures.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « core/cross/command_buffer/states_cb.cc ('k') | core/cross/command_buffer/texture_cb.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2009, Google Inc. 2 * Copyright 2009, Google Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 140
141 // Creates the vertex struct resource on the service side. It will only set the 141 // Creates the vertex struct resource on the service side. It will only set the
142 // vertex inputs if they represent semantics and types we know about. The 142 // vertex inputs if they represent semantics and types we know about. The
143 // command buffer API will not draw with an incomplete vertex struct. 143 // command buffer API will not draw with an incomplete vertex struct.
144 // This function will get called on Draw, after any change to the vertex inputs 144 // This function will get called on Draw, after any change to the vertex inputs
145 // has occurred. 145 // has occurred.
146 void StreamBankCB::CreateVertexStruct() { 146 void StreamBankCB::CreateVertexStruct() {
147 DCHECK_EQ(kInvalidResource, vertex_struct_id_); 147 DCHECK_EQ(kInvalidResource, vertex_struct_id_);
148 vertex_struct_id_ = renderer_->vertex_structs_ids().AllocateID(); 148 vertex_struct_id_ = renderer_->vertex_structs_ids().AllocateID();
149 CommandBufferHelper *helper = renderer_->helper(); 149 CommandBufferHelper *helper = renderer_->helper();
150 CommandBufferEntry args[5]; 150 helper->CreateVertexStruct(vertex_struct_id_, vertex_stream_params_.size());
151 args[0].value_uint32 = vertex_struct_id_;
152 args[1].value_uint32 = vertex_stream_params_.size();
153 helper->AddCommand(command_buffer::CREATE_VERTEX_STRUCT, 2, args);
154 for (unsigned int i = 0; i < vertex_stream_params_.size(); ++i) { 151 for (unsigned int i = 0; i < vertex_stream_params_.size(); ++i) {
155 const Stream &stream = vertex_stream_params_[i]->stream(); 152 const Stream &stream = vertex_stream_params_[i]->stream();
156 vertex_struct::Semantic cb_semantic; 153 vertex_struct::Semantic cb_semantic;
157 unsigned int cb_semantic_index; 154 unsigned int cb_semantic_index;
158 if (!GetCBSemantic(stream.semantic(), stream.semantic_index(), &cb_semantic, 155 if (!GetCBSemantic(stream.semantic(), stream.semantic_index(), &cb_semantic,
159 &cb_semantic_index)) { 156 &cb_semantic_index)) {
160 DLOG(INFO) << "Unknown semantic (" << stream.semantic() << ", " 157 DLOG(INFO) << "Unknown semantic (" << stream.semantic() << ", "
161 << stream.semantic_index() << ") - ignoring stream."; 158 << stream.semantic_index() << ") - ignoring stream.";
162 continue; 159 continue;
163 } 160 }
164 vertex_struct::Type cb_type = GetCBType(stream.field()); 161 vertex_struct::Type cb_type = GetCBType(stream.field());
165 if (cb_type == vertex_struct::NUM_TYPES) { 162 if (cb_type == vertex_struct::NUM_TYPES) {
166 DLOG(INFO) << "Invalid type (" << stream.field().num_components() 163 DLOG(INFO) << "Invalid type (" << stream.field().num_components()
167 << ") - ignoring stream."; 164 << ") - ignoring stream.";
168 continue; 165 continue;
169 } 166 }
170 167
171 namespace cmd = command_buffer::set_vertex_input_cmd;
172 VertexBufferCB *vertex_buffer = 168 VertexBufferCB *vertex_buffer =
173 static_cast<VertexBufferCB *>(stream.field().buffer()); 169 static_cast<VertexBufferCB *>(stream.field().buffer());
174 args[0].value_uint32 = vertex_struct_id_; 170 helper->SetVertexInput(
175 args[1].value_uint32 = i; 171 vertex_struct_id_, i,
176 args[2].value_uint32 = vertex_buffer->resource_id(); 172 vertex_buffer->resource_id(),
177 args[3].value_uint32 = stream.field().offset(); 173 stream.field().offset(),
178 args[4].value_uint32 = 174 cb_semantic,
179 cmd::SemanticIndex::MakeValue(cb_semantic_index) | 175 cb_semantic_index,
180 cmd::Semantic::MakeValue(cb_semantic) | 176 cb_type,
181 cmd::Type::MakeValue(cb_type) | 177 vertex_buffer->stride());
182 cmd::Stride::MakeValue(vertex_buffer->stride());
183 helper->AddCommand(command_buffer::SET_VERTEX_INPUT, 5, args);
184 } 178 }
185 } 179 }
186 180
187 // Destroys the vertex struct resource on the service side. 181 // Destroys the vertex struct resource on the service side.
188 void StreamBankCB::DestroyVertexStruct() { 182 void StreamBankCB::DestroyVertexStruct() {
189 if (vertex_struct_id_ != kInvalidResource) { 183 if (vertex_struct_id_ != kInvalidResource) {
190 CommandBufferHelper *helper = renderer_->helper(); 184 CommandBufferHelper *helper = renderer_->helper();
191 CommandBufferEntry args[1]; 185 helper->DestroyVertexStruct(vertex_struct_id_);
192 args[0].value_uint32 = vertex_struct_id_;
193 helper->AddCommand(command_buffer::DESTROY_VERTEX_STRUCT, 1, args);
194 renderer_->vertex_structs_ids().FreeID(vertex_struct_id_); 186 renderer_->vertex_structs_ids().FreeID(vertex_struct_id_);
195 vertex_struct_id_ = kInvalidResource; 187 vertex_struct_id_ = kInvalidResource;
196 } 188 }
197 } 189 }
198 190
199 void StreamBankCB::BindStreamsForRendering() { 191 void StreamBankCB::BindStreamsForRendering() {
200 if (vertex_struct_id_ == kInvalidResource) 192 if (vertex_struct_id_ == kInvalidResource)
201 CreateVertexStruct(); 193 CreateVertexStruct();
202 CommandBufferHelper *helper = renderer_->helper(); 194 CommandBufferHelper *helper = renderer_->helper();
203 CommandBufferEntry args[6]; 195 helper->SetVertexStruct(vertex_struct_id_);
204 // Sets current vertex struct.
205 args[0].value_uint32 = vertex_struct_id_;
206 helper->AddCommand(command_buffer::SET_VERTEX_STRUCT, 1, args);
207 } 196 }
208 197
209 } // namespace o3d 198 } // namespace o3d
OLDNEW
« no previous file with comments | « core/cross/command_buffer/states_cb.cc ('k') | core/cross/command_buffer/texture_cb.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698