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