gles2_cmd_helper.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// Use of this source code is governed by a BSD-style license that can be 32341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// found in the LICENSE file. 42341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 52341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_H_ 62341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#define GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_H_ 72341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 82341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#include "../../gpu_export.h" 92341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#include "../client/cmd_buffer_helper.h" 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "../common/gles2_cmd_format.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea 122341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chennamespace gpu { 132341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chennamespace gles2 { 142341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 152341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// A class that helps write GL command buffers. 162341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chenclass GPU_EXPORT GLES2CmdHelper : public CommandBufferHelper { 173d4d51cd1bdef32ab61ba9e1de75d5a4f4c1dbedMatt Kopec public: 188ac035dd248b61846cb0cba7c7257dcdd600f749Greg Clayton explicit GLES2CmdHelper(CommandBuffer* command_buffer); 192341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen virtual ~GLES2CmdHelper(); 202341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 211e44fddf7f0c75b275bea0d5a55b4be01240c01aDaniel Malea // Include the auto-generated part of this class. We split this because it 222341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen // means we can easily edit the non-auto generated parts right here in this 232341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen // file instead of having to edit some template or the code generator. 242341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen #include "../client/gles2_cmd_helper_autogen.h" 256c1a8cfbb81ae38aee68f281b2af4010044cc00dAndrew Kaylor 262341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen // Helpers that could not be auto-generated. 272341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen // TODO(gman): Auto generate these. 282341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 292341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void GetAttribLocation( 302341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GLuint program, uint32 name_shm_id, uint32 name_shm_offset, 312341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen uint32 location_shm_id, uint32 location_shm_offset, uint32 data_size) { 322341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen gles2::cmds::GetAttribLocation* c = 332341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetCmdSpace<gles2::cmds::GetAttribLocation>(); 342341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen if (c) { 352341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen c->Init( 362341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen program, name_shm_id, name_shm_offset, location_shm_id, 372341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen location_shm_offset, data_size); 382341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 392341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 402341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 412341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void GetAttribLocationImmediate( 422341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GLuint program, const char* name, 432341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen uint32 location_shm_id, uint32 location_shm_offset) { 442341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen const uint32 size = gles2::cmds::GetAttribLocationImmediate::ComputeSize( 452341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen name); 462341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen gles2::cmds::GetAttribLocationImmediate* c = 472341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetImmediateCmdSpaceTotalSize<gles2::cmds::GetAttribLocationImmediate>( 482341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen size); 492341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen if (c) { 502341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen c->Init(program, name, location_shm_id, location_shm_offset); 512341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 522341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 532341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 542341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void GetAttribLocationBucket( 552341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GLuint program, uint32 name_bucket_id, 562341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen uint32 location_shm_id, uint32 location_shm_offset) { 572341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen gles2::cmds::GetAttribLocationBucket* c = 582341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetCmdSpace<gles2::cmds::GetAttribLocationBucket>(); 592341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen if (c) { 602341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen c->Init(program, name_bucket_id, location_shm_id, location_shm_offset); 612341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 622341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 632341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 642341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void GetUniformLocation( 652341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GLuint program, uint32 name_shm_id, uint32 name_shm_offset, 662341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen uint32 location_shm_id, uint32 location_shm_offset, uint32 data_size) { 672341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen gles2::cmds::GetUniformLocation* c = 682341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetCmdSpace<gles2::cmds::GetUniformLocation>(); 692341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen if (c) { 702341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen c->Init( 712341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen program, name_shm_id, name_shm_offset, location_shm_id, 722341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen location_shm_offset, data_size); 732341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 742341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 7578dae82bea7365f3a3501618c5d724a1a11d944fJohnny Chen 762341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void GetUniformLocationImmediate( 772341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GLuint program, const char* name, 783bd2ebd670677dae45010bf53084ff85da7c6a5eAndrew Kaylor uint32 location_shm_id, uint32 location_shm_offset) { 79ff3536bf16cf4abda02a69353db94137ee31819fMatt Kopec const uint32 size = gles2::cmds::GetUniformLocationImmediate::ComputeSize( 80ff3536bf16cf4abda02a69353db94137ee31819fMatt Kopec name); 812341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen gles2::cmds::GetUniformLocationImmediate* c = 822341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetImmediateCmdSpaceTotalSize<gles2::cmds::GetUniformLocationImmediate>( 832341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen size); 8478dae82bea7365f3a3501618c5d724a1a11d944fJohnny Chen if (c) { 85a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain c->Init(program, name, location_shm_id, location_shm_offset); 8678dae82bea7365f3a3501618c5d724a1a11d944fJohnny Chen } 872341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 882341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 892341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void GetUniformLocationBucket( 902341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GLuint program, uint32 name_bucket_id, 912341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen uint32 location_shm_id, uint32 location_shm_offset) { 922341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen gles2::cmds::GetUniformLocationBucket* c = 932341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetCmdSpace<gles2::cmds::GetUniformLocationBucket>(); 942341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen if (c) { 952341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen c->Init(program, name_bucket_id, location_shm_id, location_shm_offset); 9685923290360a48aaa2518cf18941673ba4d6deacAndrew Kaylor } 9785923290360a48aaa2518cf18941673ba4d6deacAndrew Kaylor } 9885923290360a48aaa2518cf18941673ba4d6deacAndrew Kaylor 9985923290360a48aaa2518cf18941673ba4d6deacAndrew Kaylor GLuint InsertSyncPointCHROMIUM() { 10085923290360a48aaa2518cf18941673ba4d6deacAndrew Kaylor CommandBufferHelper::Flush(); 10185923290360a48aaa2518cf18941673ba4d6deacAndrew Kaylor return command_buffer()->InsertSyncPoint(); 10285923290360a48aaa2518cf18941673ba4d6deacAndrew Kaylor } 10385923290360a48aaa2518cf18941673ba4d6deacAndrew Kaylor 1042341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen private: 1052341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen DISALLOW_COPY_AND_ASSIGN(GLES2CmdHelper); 1062341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen}; 1072341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 1082341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen} // namespace gles2 1092341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen} // namespace gpu 1102341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 1112341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_H_ 1126c1a8cfbb81ae38aee68f281b2af4010044cc00dAndrew Kaylor 1136c1a8cfbb81ae38aee68f281b2af4010044cc00dAndrew Kaylor