blob: d1ba94c6b6de0e05dbeeb832b908afb0dceaa47d [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_raster_cmd_buffer.py
// It's formatted by clang-format using chromium coding style:
// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by raster_cmd_decoder.cc
#ifndef GPU_COMMAND_BUFFER_SERVICE_RASTER_CMD_DECODER_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_SERVICE_RASTER_CMD_DECODER_AUTOGEN_H_
error::Error RasterDecoderImpl::HandleActiveTexture(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::ActiveTexture& c =
*static_cast<const volatile raster::cmds::ActiveTexture*>(cmd_data);
GLenum texture = static_cast<GLenum>(c.texture);
DoActiveTexture(texture);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleBindTexture(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::BindTexture& c =
*static_cast<const volatile raster::cmds::BindTexture*>(cmd_data);
GLenum target = static_cast<GLenum>(c.target);
GLuint texture = c.texture;
if (!validators_->texture_bind_target.IsValid(target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexture", target, "target");
return error::kNoError;
}
DoBindTexture(target, texture);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleDeleteTexturesImmediate(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::DeleteTexturesImmediate& c =
*static_cast<const volatile raster::cmds::DeleteTexturesImmediate*>(
cmd_data);
GLsizei n = static_cast<GLsizei>(c.n);
uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
volatile const GLuint* textures = GetImmediateDataAs<volatile const GLuint*>(
c, data_size, immediate_data_size);
if (textures == NULL) {
return error::kOutOfBounds;
}
DeleteTexturesHelper(n, textures);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleFinish(uint32_t immediate_data_size,
const volatile void* cmd_data) {
DoFinish();
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleFlush(uint32_t immediate_data_size,
const volatile void* cmd_data) {
DoFlush();
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleGenTexturesImmediate(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::GenTexturesImmediate& c =
*static_cast<const volatile raster::cmds::GenTexturesImmediate*>(
cmd_data);
GLsizei n = static_cast<GLsizei>(c.n);
uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
volatile GLuint* textures =
GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
if (textures == NULL) {
return error::kOutOfBounds;
}
auto textures_copy = std::make_unique<GLuint[]>(n);
GLuint* textures_safe = textures_copy.get();
std::copy(textures, textures + n, textures_safe);
if (!CheckUniqueAndNonNullIds(n, textures_safe) ||
!GenTexturesHelper(n, textures_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleGetError(uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::GetError& c =
*static_cast<const volatile raster::cmds::GetError*>(cmd_data);
typedef cmds::GetError::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
if (!result_dst) {
return error::kOutOfBounds;
}
*result_dst = GetErrorState()->GetGLError();
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleGetIntegerv(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::GetIntegerv& c =
*static_cast<const volatile raster::cmds::GetIntegerv*>(cmd_data);
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetIntegerv::Result Result;
GLsizei num_values = 0;
if (!GetNumValuesReturnedForGLGet(pname, &num_values)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM(":GetIntegerv", pname, "pname");
return error::kNoError;
}
Result* result = GetSharedMemoryAs<Result*>(
c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
GLint* params = result ? result->GetData() : NULL;
if (!validators_->g_l_state.IsValid(pname)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetIntegerv", pname, "pname");
return error::kNoError;
}
if (params == NULL) {
return error::kOutOfBounds;
}
LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetIntegerv");
// Check that the client initialized the result.
if (result->size != 0) {
return error::kInvalidArguments;
}
DoGetIntegerv(pname, params, num_values);
GLenum error = LOCAL_PEEK_GL_ERROR("GetIntegerv");
if (error == GL_NO_ERROR) {
result->SetNumResults(num_values);
}
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleTexParameteri(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::TexParameteri& c =
*static_cast<const volatile raster::cmds::TexParameteri*>(cmd_data);
GLenum target = static_cast<GLenum>(c.target);
GLenum pname = static_cast<GLenum>(c.pname);
GLint param = static_cast<GLint>(c.param);
if (!validators_->texture_bind_target.IsValid(target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", target, "target");
return error::kNoError;
}
if (!validators_->texture_parameter.IsValid(pname)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteri", pname, "pname");
return error::kNoError;
}
DoTexParameteri(target, pname, param);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleTexStorage2DEXT(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::TexStorage2DEXT& c =
*static_cast<const volatile raster::cmds::TexStorage2DEXT*>(cmd_data);
if (!features().ext_texture_storage) {
return error::kUnknownCommand;
}
GLenum target = static_cast<GLenum>(c.target);
GLsizei levels = static_cast<GLsizei>(c.levels);
GLenum internalFormat = static_cast<GLenum>(c.internalFormat);
GLsizei width = static_cast<GLsizei>(c.width);
GLsizei height = static_cast<GLsizei>(c.height);
if (!validators_->texture_bind_target.IsValid(target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage2DEXT", target, "target");
return error::kNoError;
}
if (levels < 0) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "levels < 0");
return error::kNoError;
}
if (!validators_->texture_internal_format_storage.IsValid(internalFormat)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage2DEXT", internalFormat,
"internalFormat");
return error::kNoError;
}
if (width < 0) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "width < 0");
return error::kNoError;
}
if (height < 0) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DEXT", "height < 0");
return error::kNoError;
}
DoTexStorage2DEXT(target, levels, internalFormat, width, height);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleGenQueriesEXTImmediate(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::GenQueriesEXTImmediate& c =
*static_cast<const volatile raster::cmds::GenQueriesEXTImmediate*>(
cmd_data);
GLsizei n = static_cast<GLsizei>(c.n);
uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
volatile GLuint* queries =
GetImmediateDataAs<volatile GLuint*>(c, data_size, immediate_data_size);
if (queries == NULL) {
return error::kOutOfBounds;
}
auto queries_copy = std::make_unique<GLuint[]>(n);
GLuint* queries_safe = queries_copy.get();
std::copy(queries, queries + n, queries_safe);
if (!CheckUniqueAndNonNullIds(n, queries_safe) ||
!GenQueriesEXTHelper(n, queries_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleDeleteQueriesEXTImmediate(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::DeleteQueriesEXTImmediate& c =
*static_cast<const volatile raster::cmds::DeleteQueriesEXTImmediate*>(
cmd_data);
GLsizei n = static_cast<GLsizei>(c.n);
uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
volatile const GLuint* queries = GetImmediateDataAs<volatile const GLuint*>(
c, data_size, immediate_data_size);
if (queries == NULL) {
return error::kOutOfBounds;
}
DeleteQueriesEXTHelper(n, queries);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleCopySubTextureCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::CopySubTextureCHROMIUM& c =
*static_cast<const volatile raster::cmds::CopySubTextureCHROMIUM*>(
cmd_data);
GLuint source_id = static_cast<GLuint>(c.source_id);
GLint source_level = static_cast<GLint>(c.source_level);
GLenum dest_target = static_cast<GLenum>(c.dest_target);
GLuint dest_id = static_cast<GLuint>(c.dest_id);
GLint dest_level = static_cast<GLint>(c.dest_level);
GLint xoffset = static_cast<GLint>(c.xoffset);
GLint yoffset = static_cast<GLint>(c.yoffset);
GLint x = static_cast<GLint>(c.x);
GLint y = static_cast<GLint>(c.y);
GLsizei width = static_cast<GLsizei>(c.width);
GLsizei height = static_cast<GLsizei>(c.height);
GLboolean unpack_flip_y = static_cast<GLboolean>(c.unpack_flip_y);
GLboolean unpack_premultiply_alpha =
static_cast<GLboolean>(c.unpack_premultiply_alpha);
GLboolean unpack_unmultiply_alpha =
static_cast<GLboolean>(c.unpack_unmultiply_alpha);
if (!validators_->texture_target.IsValid(dest_target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopySubTextureCHROMIUM", dest_target,
"dest_target");
return error::kNoError;
}
if (width < 0) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
"width < 0");
return error::kNoError;
}
if (height < 0) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
"height < 0");
return error::kNoError;
}
DoCopySubTextureCHROMIUM(source_id, source_level, dest_target, dest_id,
dest_level, xoffset, yoffset, x, y, width, height,
unpack_flip_y, unpack_premultiply_alpha,
unpack_unmultiply_alpha);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleCompressedCopyTextureCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::CompressedCopyTextureCHROMIUM& c =
*static_cast<const volatile raster::cmds::CompressedCopyTextureCHROMIUM*>(
cmd_data);
GLuint source_id = static_cast<GLuint>(c.source_id);
GLuint dest_id = static_cast<GLuint>(c.dest_id);
DoCompressedCopyTextureCHROMIUM(source_id, dest_id);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleProduceTextureDirectCHROMIUMImmediate(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::ProduceTextureDirectCHROMIUMImmediate& c =
*static_cast<
const volatile raster::cmds::ProduceTextureDirectCHROMIUMImmediate*>(
cmd_data);
GLuint texture = c.texture;
uint32_t data_size;
if (!GLES2Util::ComputeDataSize<GLbyte, 16>(1, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
volatile const GLbyte* mailbox = GetImmediateDataAs<volatile const GLbyte*>(
c, data_size, immediate_data_size);
if (mailbox == NULL) {
return error::kOutOfBounds;
}
DoProduceTextureDirectCHROMIUM(texture, mailbox);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleBindTexImage2DCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::BindTexImage2DCHROMIUM& c =
*static_cast<const volatile raster::cmds::BindTexImage2DCHROMIUM*>(
cmd_data);
GLenum target = static_cast<GLenum>(c.target);
GLint imageId = static_cast<GLint>(c.imageId);
if (!validators_->texture_bind_target.IsValid(target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexImage2DCHROMIUM", target,
"target");
return error::kNoError;
}
DoBindTexImage2DCHROMIUM(target, imageId);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleReleaseTexImage2DCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::ReleaseTexImage2DCHROMIUM& c =
*static_cast<const volatile raster::cmds::ReleaseTexImage2DCHROMIUM*>(
cmd_data);
GLenum target = static_cast<GLenum>(c.target);
GLint imageId = static_cast<GLint>(c.imageId);
if (!validators_->texture_bind_target.IsValid(target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glReleaseTexImage2DCHROMIUM", target,
"target");
return error::kNoError;
}
DoReleaseTexImage2DCHROMIUM(target, imageId);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleTraceEndCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
DoTraceEndCHROMIUM();
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleLoseContextCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::LoseContextCHROMIUM& c =
*static_cast<const volatile raster::cmds::LoseContextCHROMIUM*>(cmd_data);
GLenum current = static_cast<GLenum>(c.current);
GLenum other = static_cast<GLenum>(c.other);
if (!validators_->reset_status.IsValid(current)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", current,
"current");
return error::kNoError;
}
if (!validators_->reset_status.IsValid(other)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", other, "other");
return error::kNoError;
}
DoLoseContextCHROMIUM(current, other);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleBeginRasterCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::BeginRasterCHROMIUM& c =
*static_cast<const volatile raster::cmds::BeginRasterCHROMIUM*>(cmd_data);
if (!features().chromium_raster_transport) {
return error::kUnknownCommand;
}
GLuint texture_id = static_cast<GLuint>(c.texture_id);
GLuint sk_color = static_cast<GLuint>(c.sk_color);
GLuint msaa_sample_count = static_cast<GLuint>(c.msaa_sample_count);
GLboolean can_use_lcd_text = static_cast<GLboolean>(c.can_use_lcd_text);
GLboolean use_distance_field_text =
static_cast<GLboolean>(c.use_distance_field_text);
GLint color_type = static_cast<GLint>(c.color_type);
DoBeginRasterCHROMIUM(texture_id, sk_color, msaa_sample_count,
can_use_lcd_text, use_distance_field_text, color_type);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleRasterCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::RasterCHROMIUM& c =
*static_cast<const volatile raster::cmds::RasterCHROMIUM*>(cmd_data);
if (!features().chromium_raster_transport) {
return error::kUnknownCommand;
}
GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
uint32_t data_size = size;
const void* list = GetSharedMemoryAs<const void*>(
c.list_shm_id, c.list_shm_offset, data_size);
if (size < 0) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRasterCHROMIUM", "size < 0");
return error::kNoError;
}
if (list == NULL) {
return error::kOutOfBounds;
}
DoRasterCHROMIUM(size, list);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleEndRasterCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
if (!features().chromium_raster_transport) {
return error::kUnknownCommand;
}
DoEndRasterCHROMIUM();
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleCreateTransferCacheEntryINTERNAL(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::CreateTransferCacheEntryINTERNAL& c =
*static_cast<
const volatile raster::cmds::CreateTransferCacheEntryINTERNAL*>(
cmd_data);
GLuint entry_type = static_cast<GLuint>(c.entry_type);
GLuint entry_id = static_cast<GLuint>(c.entry_id);
GLuint handle_shm_id = static_cast<GLuint>(c.handle_shm_id);
GLuint handle_shm_offset = static_cast<GLuint>(c.handle_shm_offset);
GLuint data_shm_id = static_cast<GLuint>(c.data_shm_id);
GLuint data_shm_offset = static_cast<GLuint>(c.data_shm_offset);
GLuint data_size = static_cast<GLuint>(c.data_size);
DoCreateTransferCacheEntryINTERNAL(entry_type, entry_id, handle_shm_id,
handle_shm_offset, data_shm_id,
data_shm_offset, data_size);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleDeleteTransferCacheEntryINTERNAL(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::DeleteTransferCacheEntryINTERNAL& c =
*static_cast<
const volatile raster::cmds::DeleteTransferCacheEntryINTERNAL*>(
cmd_data);
GLuint entry_type = static_cast<GLuint>(c.entry_type);
GLuint entry_id = static_cast<GLuint>(c.entry_id);
DoDeleteTransferCacheEntryINTERNAL(entry_type, entry_id);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleUnlockTransferCacheEntryINTERNAL(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::UnlockTransferCacheEntryINTERNAL& c =
*static_cast<
const volatile raster::cmds::UnlockTransferCacheEntryINTERNAL*>(
cmd_data);
GLuint entry_type = static_cast<GLuint>(c.entry_type);
GLuint entry_id = static_cast<GLuint>(c.entry_id);
DoUnlockTransferCacheEntryINTERNAL(entry_type, entry_id);
return error::kNoError;
}
error::Error RasterDecoderImpl::HandleTexStorage2DImageCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const volatile raster::cmds::TexStorage2DImageCHROMIUM& c =
*static_cast<const volatile raster::cmds::TexStorage2DImageCHROMIUM*>(
cmd_data);
if (!features().chromium_texture_storage_image) {
return error::kUnknownCommand;
}
GLenum target = static_cast<GLenum>(c.target);
GLenum internalFormat = static_cast<GLenum>(c.internalFormat);
GLenum bufferUsage = static_cast<GLenum>(c.bufferUsage);
GLsizei width = static_cast<GLsizei>(c.width);
GLsizei height = static_cast<GLsizei>(c.height);
if (!validators_->texture_bind_target.IsValid(target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage2DImageCHROMIUM", target,
"target");
return error::kNoError;
}
if (!validators_->texture_internal_format_storage.IsValid(internalFormat)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage2DImageCHROMIUM",
internalFormat, "internalFormat");
return error::kNoError;
}
if (width < 0) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DImageCHROMIUM",
"width < 0");
return error::kNoError;
}
if (height < 0) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage2DImageCHROMIUM",
"height < 0");
return error::kNoError;
}
DoTexStorage2DImageCHROMIUM(target, internalFormat, bufferUsage, width,
height);
return error::kNoError;
}
#endif // GPU_COMMAND_BUFFER_SERVICE_RASTER_CMD_DECODER_AUTOGEN_H_