Hash :
8797714c
Author :
Date :
2020-12-01T11:39:25
Vulkan: Support OES_shader_io_blocks Enables OES/EXT_shader_io_blocks extensions in Vulkan backends. With shader I/O blocks, the varyings can now be an array of struct (the block itself) of struct (nested in the block). This change is missing a number of features. In particular, if the shader I/O block has a location decoration in the middle of the block, that is not handled yet. Based on changes from m.maiya@samsung.com and jmadill@chromium.org. Bug: angleproject:3580 Tests: dEQP-GLES31.functional.shaders.linkage.es31.io_block.* dEQP-GLES31.functional.separate_shader.validation.es31.io_blocks.* dEQP-GLES31.functional.program_interface_query.program_input.* dEQP-GLES31.functional.program_interface_query.program_output.* Change-Id: I593840475d2365ff6c9ce7b2290f5ee462a30dfb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2567645 Reviewed-by: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
//
// Copyright 2002 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// ExtensionBehavior.h: Extension name enumeration and data structures for storing extension
// behavior.
#ifndef COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_
#define COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_
#include <cstdint>
#include <map>
namespace sh
{
enum class TExtension : uint8_t
{
UNDEFINED, // Special value used to indicate no extension.
ANGLE_base_vertex_base_instance,
ANGLE_multi_draw,
ANGLE_texture_multisample,
APPLE_clip_distance,
ARB_texture_rectangle,
ARM_shader_framebuffer_fetch,
EXT_blend_func_extended,
EXT_draw_buffers,
EXT_frag_depth,
EXT_geometry_shader,
OES_shader_io_blocks,
EXT_shader_io_blocks,
EXT_gpu_shader5,
EXT_shader_framebuffer_fetch,
EXT_shader_non_constant_global_initializers,
EXT_shader_texture_lod,
EXT_shadow_samplers,
EXT_tessellation_shader,
EXT_texture_buffer,
EXT_texture_cube_map_array,
EXT_YUV_target,
NV_EGL_stream_consumer_external,
NV_shader_framebuffer_fetch,
NV_shader_noperspective_interpolation,
OES_EGL_image_external,
OES_EGL_image_external_essl3,
OES_sample_variables,
OES_shader_multisample_interpolation,
OES_shader_image_atomic,
OES_standard_derivatives,
OES_texture_3D,
OES_texture_buffer,
OES_texture_cube_map_array,
OES_texture_storage_multisample_2d_array,
OVR_multiview,
OVR_multiview2,
WEBGL_video_texture,
};
enum TBehavior : uint8_t
{
EBhRequire,
EBhEnable,
EBhWarn,
EBhDisable,
EBhUndefined
};
const char *GetExtensionNameString(TExtension extension);
TExtension GetExtensionByName(const char *extension);
const char *GetBehaviorString(TBehavior b);
// Mapping between extension id and behavior.
typedef std::map<TExtension, TBehavior> TExtensionBehavior;
bool IsExtensionEnabled(const TExtensionBehavior &extBehavior, TExtension extension);
} // namespace sh
#endif // COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_