gles2_cmd_helper.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// Use of this source code is governed by a BSD-style license that can be
3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// found in the LICENSE file.
4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project#ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_H_
6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project#define GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_H_
7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project#include "../../gpu_export.h"
9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project#include "../client/cmd_buffer_helper.h"
10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project#include "../common/gles2_cmd_format.h"
11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectnamespace gpu {
13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectnamespace gles2 {
14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// A class that helps write GL command buffers.
16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectclass GPU_EXPORT GLES2CmdHelper : public CommandBufferHelper {
17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public:
18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  explicit GLES2CmdHelper(CommandBuffer* command_buffer);
19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  virtual ~GLES2CmdHelper();
20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  // Include the auto-generated part of this class. We split this because it
22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  // means we can easily edit the non-auto generated parts right here in this
23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  // file instead of having to edit some template or the code generator.
24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  #include "../client/gles2_cmd_helper_autogen.h"
25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  // Helpers that could not be auto-generated.
27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  // TODO(gman): Auto generate these.
28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  void GetAttribLocation(
30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      GLuint program, uint32 name_shm_id, uint32 name_shm_offset,
31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      uint32 location_shm_id, uint32 location_shm_offset, uint32 data_size) {
32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    gles2::GetAttribLocation* c = GetCmdSpace<gles2::GetAttribLocation>();
33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    if (c) {
34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      c->Init(
35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project          program, name_shm_id, name_shm_offset, location_shm_id,
36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project          location_shm_offset, data_size);
37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  }
39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  void GetAttribLocationImmediate(
41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      GLuint program, const char* name,
42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      uint32 location_shm_id, uint32 location_shm_offset) {
43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    const uint32 size = gles2::GetAttribLocationImmediate::ComputeSize(name);
44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    gles2::GetAttribLocationImmediate* c =
45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        GetImmediateCmdSpaceTotalSize<gles2::GetAttribLocationImmediate>(size);
46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    if (c) {
47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      c->Init(program, name, location_shm_id, location_shm_offset);
48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  }
50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  void GetAttribLocationBucket(
52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      GLuint program, uint32 name_bucket_id,
53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      uint32 location_shm_id, uint32 location_shm_offset) {
54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    gles2::GetAttribLocationBucket* c =
55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        GetCmdSpace<gles2::GetAttribLocationBucket>();
56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    if (c) {
57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      c->Init(program, name_bucket_id, location_shm_id, location_shm_offset);
58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  }
60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  void GetUniformLocation(
62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      GLuint program, uint32 name_shm_id, uint32 name_shm_offset,
63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      uint32 location_shm_id, uint32 location_shm_offset, uint32 data_size) {
64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    gles2::GetUniformLocation* c = GetCmdSpace<gles2::GetUniformLocation>();
65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    if (c) {
66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      c->Init(
67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project          program, name_shm_id, name_shm_offset, location_shm_id,
68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project          location_shm_offset, data_size);
69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  }
71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  void GetUniformLocationImmediate(
73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      GLuint program, const char* name,
74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      uint32 location_shm_id, uint32 location_shm_offset) {
75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    const uint32 size = gles2::GetUniformLocationImmediate::ComputeSize(name);
76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    gles2::GetUniformLocationImmediate* c =
77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        GetImmediateCmdSpaceTotalSize<gles2::GetUniformLocationImmediate>(size);
78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    if (c) {
79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      c->Init(program, name, location_shm_id, location_shm_offset);
80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  }
82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  void GetUniformLocationBucket(
84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      GLuint program, uint32 name_bucket_id,
85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      uint32 location_shm_id, uint32 location_shm_offset) {
86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    gles2::GetUniformLocationBucket* c =
87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        GetCmdSpace<gles2::GetUniformLocationBucket>();
88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    if (c) {
89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project      c->Init(program, name_bucket_id, location_shm_id, location_shm_offset);
90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  }
92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private:
94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project  DISALLOW_COPY_AND_ASSIGN(GLES2CmdHelper);
95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project};
96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project}  // namespace gles2
98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project}  // namespace gpu
99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project#endif  // GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_H_
101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project