• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2015-2017 ARM Limited
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #ifndef SPIRV_CROSS_EXTERNAL_INTERFACE_H
19 #define SPIRV_CROSS_EXTERNAL_INTERFACE_H
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #include <stddef.h>
26 
27 typedef struct spirv_cross_shader spirv_cross_shader_t;
28 
29 struct spirv_cross_interface
30 {
31 	spirv_cross_shader_t *(*construct)(void);
32 	void (*destruct)(spirv_cross_shader_t *thiz);
33 	void (*invoke)(spirv_cross_shader_t *thiz);
34 };
35 
36 void spirv_cross_set_stage_input(spirv_cross_shader_t *thiz, unsigned location, void *data, size_t size);
37 
38 void spirv_cross_set_stage_output(spirv_cross_shader_t *thiz, unsigned location, void *data, size_t size);
39 
40 void spirv_cross_set_push_constant(spirv_cross_shader_t *thiz, void *data, size_t size);
41 
42 void spirv_cross_set_uniform_constant(spirv_cross_shader_t *thiz, unsigned location, void *data, size_t size);
43 
44 void spirv_cross_set_resource(spirv_cross_shader_t *thiz, unsigned set, unsigned binding, void **data, size_t size);
45 
46 const struct spirv_cross_interface *spirv_cross_get_interface(void);
47 
48 typedef enum spirv_cross_builtin {
49 	SPIRV_CROSS_BUILTIN_POSITION = 0,
50 	SPIRV_CROSS_BUILTIN_FRAG_COORD = 1,
51 	SPIRV_CROSS_BUILTIN_WORK_GROUP_ID = 2,
52 	SPIRV_CROSS_BUILTIN_NUM_WORK_GROUPS = 3,
53 	SPIRV_CROSS_NUM_BUILTINS
54 } spirv_cross_builtin;
55 
56 void spirv_cross_set_builtin(spirv_cross_shader_t *thiz, spirv_cross_builtin builtin, void *data, size_t size);
57 
58 #define SPIRV_CROSS_NUM_DESCRIPTOR_SETS 4
59 #define SPIRV_CROSS_NUM_DESCRIPTOR_BINDINGS 16
60 #define SPIRV_CROSS_NUM_STAGE_INPUTS 16
61 #define SPIRV_CROSS_NUM_STAGE_OUTPUTS 16
62 #define SPIRV_CROSS_NUM_UNIFORM_CONSTANTS 32
63 
64 enum spirv_cross_format
65 {
66 	SPIRV_CROSS_FORMAT_R8_UNORM = 0,
67 	SPIRV_CROSS_FORMAT_R8G8_UNORM = 1,
68 	SPIRV_CROSS_FORMAT_R8G8B8_UNORM = 2,
69 	SPIRV_CROSS_FORMAT_R8G8B8A8_UNORM = 3,
70 
71 	SPIRV_CROSS_NUM_FORMATS
72 };
73 
74 enum spirv_cross_wrap
75 {
76 	SPIRV_CROSS_WRAP_CLAMP_TO_EDGE = 0,
77 	SPIRV_CROSS_WRAP_REPEAT = 1,
78 
79 	SPIRV_CROSS_NUM_WRAP
80 };
81 
82 enum spirv_cross_filter
83 {
84 	SPIRV_CROSS_FILTER_NEAREST = 0,
85 	SPIRV_CROSS_FILTER_LINEAR = 1,
86 
87 	SPIRV_CROSS_NUM_FILTER
88 };
89 
90 enum spirv_cross_mipfilter
91 {
92 	SPIRV_CROSS_MIPFILTER_BASE = 0,
93 	SPIRV_CROSS_MIPFILTER_NEAREST = 1,
94 	SPIRV_CROSS_MIPFILTER_LINEAR = 2,
95 
96 	SPIRV_CROSS_NUM_MIPFILTER
97 };
98 
99 struct spirv_cross_miplevel
100 {
101 	const void *data;
102 	unsigned width, height;
103 	size_t stride;
104 };
105 
106 struct spirv_cross_sampler_info
107 {
108 	const struct spirv_cross_miplevel *mipmaps;
109 	unsigned num_mipmaps;
110 
111 	enum spirv_cross_format format;
112 	enum spirv_cross_wrap wrap_s;
113 	enum spirv_cross_wrap wrap_t;
114 	enum spirv_cross_filter min_filter;
115 	enum spirv_cross_filter mag_filter;
116 	enum spirv_cross_mipfilter mip_filter;
117 };
118 
119 typedef struct spirv_cross_sampler_2d spirv_cross_sampler_2d_t;
120 spirv_cross_sampler_2d_t *spirv_cross_create_sampler_2d(const struct spirv_cross_sampler_info *info);
121 void spirv_cross_destroy_sampler_2d(spirv_cross_sampler_2d_t *samp);
122 
123 #ifdef __cplusplus
124 }
125 #endif
126 
127 #endif
128