2 #include "../core/GLFilter.h" 3 #include "../core/GLImage.h" 4 #include "../core/ImageAllocator.h" 6 #include "caffe2/core/operator.h" 7 #include "caffe2/core/timer.h" 11 typedef enum { Sigmoid, Tanh } OpType;
22 {BINDING(outputSize), BINDING(inputData)},
25 {{
"SIGMOID", caffe2::to_string(opType == Sigmoid)},
26 {
"TANH", caffe2::to_string(opType == Tanh)}}) {}
31 static const char* fragment_shader;
36 const char* GLSigmoid::fragment_shader = R
"GLSL(#version 300 es 37 #define SIGMOID $(SIGMOID) 40 precision mediump float; 41 precision mediump int; 43 in highp vec2 v_texCoord; 45 uniform ivec2 outputSize; 47 TEXTURE_INPUT(inputData); 48 TEXTURE_OUTPUT(0, outputData); 51 ivec2 texelCoord = ivec2(v_texCoord * vec2(outputSize)); 52 vec4 value = TEXTURE_LOAD(inputData, ivec2(texelCoord)); 54 value = vec4(1.0) / (vec4(1.0) + exp(-value)); 55 outputData = TEXTURE_STORE(value); 58 outputData = TEXTURE_STORE(value); 67 for (
int i = 0; i < input_images.size(); i++) {
68 auto input_image = input_images[i];
69 auto output_image = output_images[i];
70 int input_slices = input_image->slices;
71 int output_slices = output_image->slices;
73 for (
int is = 0; is < input_slices; is++) {
74 run(std::vector<texture_attachment>({{input_image->textures[is], inputData}}),
75 {output_image->textures.begin() + is, output_image->textures.begin() + is + 1},
76 [&]() { glUniform2i(outputSize->location, output_image->width, output_image->height); },
78 output_image->height);
84 template <
typename T, OpType opType>
90 bool RunOnDevice()
override {
91 const GLImageVector<T>& input = Inputs()[0]->template Get<GLImageVector<T>>();
92 const int num_images = input.size();
93 const int input_channels = input.channels();
94 const int input_width = input.width();
95 const int input_height = input.height();
97 const int output_channels = input_channels;
98 const int output_width = input_width;
99 const int output_height = input_height;
101 int is_last = OperatorBase::GetSingleArgument<int>(
"is_last", 0);
104 num_images, output_width, output_height, output_channels, is_last);
110 _sigmoid->sigmoid(input, *output);
112 Outputs()[0]->Reset(output);
118 std::unique_ptr<GLSigmoid> _sigmoid;
122 OPERATOR_SCHEMA(OpenGLSigmoid)
125 .AllowInplace({{0, 0}})
126 .IdenticalTypeAndShape();
129 OPERATOR_SCHEMA(OpenGLTanh)
132 .AllowInplace({{0, 0}})
133 .IdenticalTypeAndShape();
Workspace is a class that holds all the related objects created during runtime: (1) all blobs...
A global dictionary that holds information about what Caffe2 modules have been loaded in the current ...