1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2011 Intel Corporation
3*61046927SAndroid Build Coastguard Worker *
4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker *
11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker * Software.
14*61046927SAndroid Build Coastguard Worker *
15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21*61046927SAndroid Build Coastguard Worker * DEALINGS IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker */
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Worker /* This file declares stripped-down versions of functions that
25*61046927SAndroid Build Coastguard Worker * normally exist outside of the glsl folder, so that they can be used
26*61046927SAndroid Build Coastguard Worker * when running the GLSL compiler standalone (for unit testing or
27*61046927SAndroid Build Coastguard Worker * compiling builtins).
28*61046927SAndroid Build Coastguard Worker */
29*61046927SAndroid Build Coastguard Worker
30*61046927SAndroid Build Coastguard Worker #include "standalone_scaffolding.h"
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard Worker #include <assert.h>
33*61046927SAndroid Build Coastguard Worker #include <stdio.h>
34*61046927SAndroid Build Coastguard Worker #include <string.h>
35*61046927SAndroid Build Coastguard Worker #include "util/ralloc.h"
36*61046927SAndroid Build Coastguard Worker #include "util/strtod.h"
37*61046927SAndroid Build Coastguard Worker #include "main/mtypes.h"
38*61046927SAndroid Build Coastguard Worker #include "string_to_uint_map.h"
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Worker void
_mesa_warning(struct gl_context * ctx,const char * fmt,...)41*61046927SAndroid Build Coastguard Worker _mesa_warning(struct gl_context *ctx, const char *fmt, ...)
42*61046927SAndroid Build Coastguard Worker {
43*61046927SAndroid Build Coastguard Worker va_list vargs;
44*61046927SAndroid Build Coastguard Worker (void) ctx;
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Worker va_start(vargs, fmt);
47*61046927SAndroid Build Coastguard Worker
48*61046927SAndroid Build Coastguard Worker /* This output is not thread-safe, but that's good enough for the
49*61046927SAndroid Build Coastguard Worker * standalone compiler.
50*61046927SAndroid Build Coastguard Worker */
51*61046927SAndroid Build Coastguard Worker fprintf(stderr, "Mesa warning: ");
52*61046927SAndroid Build Coastguard Worker vfprintf(stderr, fmt, vargs);
53*61046927SAndroid Build Coastguard Worker fprintf(stderr, "\n");
54*61046927SAndroid Build Coastguard Worker
55*61046927SAndroid Build Coastguard Worker va_end(vargs);
56*61046927SAndroid Build Coastguard Worker }
57*61046927SAndroid Build Coastguard Worker
58*61046927SAndroid Build Coastguard Worker void
_mesa_problem(const struct gl_context * ctx,const char * fmt,...)59*61046927SAndroid Build Coastguard Worker _mesa_problem(const struct gl_context *ctx, const char *fmt, ...)
60*61046927SAndroid Build Coastguard Worker {
61*61046927SAndroid Build Coastguard Worker va_list vargs;
62*61046927SAndroid Build Coastguard Worker (void) ctx;
63*61046927SAndroid Build Coastguard Worker
64*61046927SAndroid Build Coastguard Worker va_start(vargs, fmt);
65*61046927SAndroid Build Coastguard Worker
66*61046927SAndroid Build Coastguard Worker /* This output is not thread-safe, but that's good enough for the
67*61046927SAndroid Build Coastguard Worker * standalone compiler.
68*61046927SAndroid Build Coastguard Worker */
69*61046927SAndroid Build Coastguard Worker fprintf(stderr, "Mesa problem: ");
70*61046927SAndroid Build Coastguard Worker vfprintf(stderr, fmt, vargs);
71*61046927SAndroid Build Coastguard Worker fprintf(stderr, "\n");
72*61046927SAndroid Build Coastguard Worker
73*61046927SAndroid Build Coastguard Worker va_end(vargs);
74*61046927SAndroid Build Coastguard Worker }
75*61046927SAndroid Build Coastguard Worker
76*61046927SAndroid Build Coastguard Worker void
_mesa_reference_shader_program_data(struct gl_shader_program_data ** ptr,struct gl_shader_program_data * data)77*61046927SAndroid Build Coastguard Worker _mesa_reference_shader_program_data(struct gl_shader_program_data **ptr,
78*61046927SAndroid Build Coastguard Worker struct gl_shader_program_data *data)
79*61046927SAndroid Build Coastguard Worker {
80*61046927SAndroid Build Coastguard Worker *ptr = data;
81*61046927SAndroid Build Coastguard Worker }
82*61046927SAndroid Build Coastguard Worker
83*61046927SAndroid Build Coastguard Worker void
_mesa_reference_shader(struct gl_context * ctx,struct gl_shader ** ptr,struct gl_shader * sh)84*61046927SAndroid Build Coastguard Worker _mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr,
85*61046927SAndroid Build Coastguard Worker struct gl_shader *sh)
86*61046927SAndroid Build Coastguard Worker {
87*61046927SAndroid Build Coastguard Worker (void) ctx;
88*61046927SAndroid Build Coastguard Worker *ptr = sh;
89*61046927SAndroid Build Coastguard Worker }
90*61046927SAndroid Build Coastguard Worker
91*61046927SAndroid Build Coastguard Worker void
_mesa_reference_program_(struct gl_context * ctx,struct gl_program ** ptr,struct gl_program * prog)92*61046927SAndroid Build Coastguard Worker _mesa_reference_program_(struct gl_context *ctx, struct gl_program **ptr,
93*61046927SAndroid Build Coastguard Worker struct gl_program *prog)
94*61046927SAndroid Build Coastguard Worker {
95*61046927SAndroid Build Coastguard Worker (void) ctx;
96*61046927SAndroid Build Coastguard Worker *ptr = prog;
97*61046927SAndroid Build Coastguard Worker }
98*61046927SAndroid Build Coastguard Worker
99*61046927SAndroid Build Coastguard Worker void
_mesa_shader_debug(struct gl_context *,GLenum,GLuint *,const char *)100*61046927SAndroid Build Coastguard Worker _mesa_shader_debug(struct gl_context *, GLenum, GLuint *,
101*61046927SAndroid Build Coastguard Worker const char *)
102*61046927SAndroid Build Coastguard Worker {
103*61046927SAndroid Build Coastguard Worker }
104*61046927SAndroid Build Coastguard Worker
105*61046927SAndroid Build Coastguard Worker struct gl_shader *
_mesa_new_shader(GLuint name,gl_shader_stage stage)106*61046927SAndroid Build Coastguard Worker _mesa_new_shader(GLuint name, gl_shader_stage stage)
107*61046927SAndroid Build Coastguard Worker {
108*61046927SAndroid Build Coastguard Worker struct gl_shader *shader;
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker assert(stage == MESA_SHADER_FRAGMENT || stage == MESA_SHADER_VERTEX);
111*61046927SAndroid Build Coastguard Worker shader = rzalloc(NULL, struct gl_shader);
112*61046927SAndroid Build Coastguard Worker if (shader) {
113*61046927SAndroid Build Coastguard Worker shader->Stage = stage;
114*61046927SAndroid Build Coastguard Worker shader->Name = name;
115*61046927SAndroid Build Coastguard Worker shader->RefCount = 1;
116*61046927SAndroid Build Coastguard Worker }
117*61046927SAndroid Build Coastguard Worker return shader;
118*61046927SAndroid Build Coastguard Worker }
119*61046927SAndroid Build Coastguard Worker
120*61046927SAndroid Build Coastguard Worker GLbitfield
_mesa_program_state_flags(UNUSED const gl_state_index16 state[STATE_LENGTH])121*61046927SAndroid Build Coastguard Worker _mesa_program_state_flags(UNUSED const gl_state_index16 state[STATE_LENGTH])
122*61046927SAndroid Build Coastguard Worker {
123*61046927SAndroid Build Coastguard Worker return 0;
124*61046927SAndroid Build Coastguard Worker }
125*61046927SAndroid Build Coastguard Worker
126*61046927SAndroid Build Coastguard Worker char *
_mesa_program_state_string(UNUSED const gl_state_index16 state[STATE_LENGTH])127*61046927SAndroid Build Coastguard Worker _mesa_program_state_string(UNUSED const gl_state_index16 state[STATE_LENGTH])
128*61046927SAndroid Build Coastguard Worker {
129*61046927SAndroid Build Coastguard Worker return NULL;
130*61046927SAndroid Build Coastguard Worker }
131*61046927SAndroid Build Coastguard Worker
132*61046927SAndroid Build Coastguard Worker void
_mesa_delete_shader(struct gl_context *,struct gl_shader * sh)133*61046927SAndroid Build Coastguard Worker _mesa_delete_shader(struct gl_context *, struct gl_shader *sh)
134*61046927SAndroid Build Coastguard Worker {
135*61046927SAndroid Build Coastguard Worker free((void *)sh->Source);
136*61046927SAndroid Build Coastguard Worker free(sh->Label);
137*61046927SAndroid Build Coastguard Worker ralloc_free(sh);
138*61046927SAndroid Build Coastguard Worker }
139*61046927SAndroid Build Coastguard Worker
140*61046927SAndroid Build Coastguard Worker void
_mesa_delete_linked_shader(struct gl_context *,struct gl_linked_shader * sh)141*61046927SAndroid Build Coastguard Worker _mesa_delete_linked_shader(struct gl_context *,
142*61046927SAndroid Build Coastguard Worker struct gl_linked_shader *sh)
143*61046927SAndroid Build Coastguard Worker {
144*61046927SAndroid Build Coastguard Worker ralloc_free(sh->Program);
145*61046927SAndroid Build Coastguard Worker ralloc_free(sh);
146*61046927SAndroid Build Coastguard Worker }
147*61046927SAndroid Build Coastguard Worker
148*61046927SAndroid Build Coastguard Worker void
_mesa_clear_shader_program_data(struct gl_context * ctx,struct gl_shader_program * shProg)149*61046927SAndroid Build Coastguard Worker _mesa_clear_shader_program_data(struct gl_context *ctx,
150*61046927SAndroid Build Coastguard Worker struct gl_shader_program *shProg)
151*61046927SAndroid Build Coastguard Worker {
152*61046927SAndroid Build Coastguard Worker for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
153*61046927SAndroid Build Coastguard Worker if (shProg->_LinkedShaders[i] != NULL) {
154*61046927SAndroid Build Coastguard Worker _mesa_delete_linked_shader(ctx, shProg->_LinkedShaders[i]);
155*61046927SAndroid Build Coastguard Worker shProg->_LinkedShaders[i] = NULL;
156*61046927SAndroid Build Coastguard Worker }
157*61046927SAndroid Build Coastguard Worker }
158*61046927SAndroid Build Coastguard Worker
159*61046927SAndroid Build Coastguard Worker shProg->data->NumUniformStorage = 0;
160*61046927SAndroid Build Coastguard Worker shProg->data->UniformStorage = NULL;
161*61046927SAndroid Build Coastguard Worker shProg->NumUniformRemapTable = 0;
162*61046927SAndroid Build Coastguard Worker shProg->UniformRemapTable = NULL;
163*61046927SAndroid Build Coastguard Worker
164*61046927SAndroid Build Coastguard Worker ralloc_free(shProg->data->InfoLog);
165*61046927SAndroid Build Coastguard Worker shProg->data->InfoLog = ralloc_strdup(shProg->data, "");
166*61046927SAndroid Build Coastguard Worker
167*61046927SAndroid Build Coastguard Worker ralloc_free(shProg->data->UniformBlocks);
168*61046927SAndroid Build Coastguard Worker shProg->data->UniformBlocks = NULL;
169*61046927SAndroid Build Coastguard Worker shProg->data->NumUniformBlocks = 0;
170*61046927SAndroid Build Coastguard Worker
171*61046927SAndroid Build Coastguard Worker ralloc_free(shProg->data->ShaderStorageBlocks);
172*61046927SAndroid Build Coastguard Worker shProg->data->ShaderStorageBlocks = NULL;
173*61046927SAndroid Build Coastguard Worker shProg->data->NumShaderStorageBlocks = 0;
174*61046927SAndroid Build Coastguard Worker
175*61046927SAndroid Build Coastguard Worker ralloc_free(shProg->data->AtomicBuffers);
176*61046927SAndroid Build Coastguard Worker shProg->data->AtomicBuffers = NULL;
177*61046927SAndroid Build Coastguard Worker shProg->data->NumAtomicBuffers = 0;
178*61046927SAndroid Build Coastguard Worker }
179*61046927SAndroid Build Coastguard Worker
180*61046927SAndroid Build Coastguard Worker
181*61046927SAndroid Build Coastguard Worker static void
init_gl_program(struct gl_program * prog,bool is_arb_asm,gl_shader_stage stage)182*61046927SAndroid Build Coastguard Worker init_gl_program(struct gl_program *prog, bool is_arb_asm, gl_shader_stage stage)
183*61046927SAndroid Build Coastguard Worker {
184*61046927SAndroid Build Coastguard Worker prog->RefCount = 1;
185*61046927SAndroid Build Coastguard Worker prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB;
186*61046927SAndroid Build Coastguard Worker prog->info.use_legacy_math_rules = is_arb_asm;
187*61046927SAndroid Build Coastguard Worker prog->info.stage = stage;
188*61046927SAndroid Build Coastguard Worker }
189*61046927SAndroid Build Coastguard Worker
190*61046927SAndroid Build Coastguard Worker static struct gl_program *
standalone_new_program(UNUSED struct gl_context * ctx,gl_shader_stage stage,UNUSED GLuint id,bool is_arb_asm)191*61046927SAndroid Build Coastguard Worker standalone_new_program(UNUSED struct gl_context *ctx, gl_shader_stage stage,
192*61046927SAndroid Build Coastguard Worker UNUSED GLuint id, bool is_arb_asm)
193*61046927SAndroid Build Coastguard Worker {
194*61046927SAndroid Build Coastguard Worker struct gl_program *prog = rzalloc(NULL, struct gl_program);
195*61046927SAndroid Build Coastguard Worker init_gl_program(prog, is_arb_asm, stage);
196*61046927SAndroid Build Coastguard Worker return prog;
197*61046927SAndroid Build Coastguard Worker }
198*61046927SAndroid Build Coastguard Worker
initialize_context_to_defaults(struct gl_context * ctx,gl_api api)199*61046927SAndroid Build Coastguard Worker void initialize_context_to_defaults(struct gl_context *ctx, gl_api api)
200*61046927SAndroid Build Coastguard Worker {
201*61046927SAndroid Build Coastguard Worker memset(ctx, 0, sizeof(*ctx));
202*61046927SAndroid Build Coastguard Worker
203*61046927SAndroid Build Coastguard Worker ctx->API = api;
204*61046927SAndroid Build Coastguard Worker
205*61046927SAndroid Build Coastguard Worker ctx->Extensions.dummy_true = true;
206*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_compute_shader = true;
207*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_compute_variable_group_size = true;
208*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_conservative_depth = true;
209*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_draw_instanced = true;
210*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_ES2_compatibility = true;
211*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_ES3_compatibility = true;
212*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_explicit_attrib_location = true;
213*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_fragment_coord_conventions = true;
214*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_fragment_layer_viewport = true;
215*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_gpu_shader5 = true;
216*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_gpu_shader_fp64 = true;
217*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_gpu_shader_int64 = true;
218*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_sample_shading = true;
219*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_shader_bit_encoding = true;
220*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_shader_draw_parameters = true;
221*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_shader_stencil_export = true;
222*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_shader_texture_lod = true;
223*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_shading_language_420pack = true;
224*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_tessellation_shader = true;
225*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_texture_cube_map_array = true;
226*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_texture_gather = true;
227*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_texture_multisample = true;
228*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_texture_query_levels = true;
229*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_texture_query_lod = true;
230*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_uniform_buffer_object = true;
231*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_viewport_array = true;
232*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_cull_distance = true;
233*61046927SAndroid Build Coastguard Worker ctx->Extensions.ARB_bindless_texture = true;
234*61046927SAndroid Build Coastguard Worker
235*61046927SAndroid Build Coastguard Worker ctx->Extensions.OES_EGL_image_external = true;
236*61046927SAndroid Build Coastguard Worker ctx->Extensions.OES_standard_derivatives = true;
237*61046927SAndroid Build Coastguard Worker ctx->Extensions.OES_texture_3D = true;
238*61046927SAndroid Build Coastguard Worker
239*61046927SAndroid Build Coastguard Worker ctx->Extensions.EXT_gpu_shader4 = true;
240*61046927SAndroid Build Coastguard Worker ctx->Extensions.EXT_shader_integer_mix = true;
241*61046927SAndroid Build Coastguard Worker ctx->Extensions.EXT_shadow_samplers = true;
242*61046927SAndroid Build Coastguard Worker ctx->Extensions.EXT_texture_array = true;
243*61046927SAndroid Build Coastguard Worker
244*61046927SAndroid Build Coastguard Worker ctx->Extensions.MESA_shader_integer_functions = true;
245*61046927SAndroid Build Coastguard Worker
246*61046927SAndroid Build Coastguard Worker ctx->Extensions.NV_texture_rectangle = true;
247*61046927SAndroid Build Coastguard Worker
248*61046927SAndroid Build Coastguard Worker ctx->Const.GLSLVersion = 120;
249*61046927SAndroid Build Coastguard Worker
250*61046927SAndroid Build Coastguard Worker /* 1.20 minimums. */
251*61046927SAndroid Build Coastguard Worker ctx->Const.MaxLights = 8;
252*61046927SAndroid Build Coastguard Worker ctx->Const.MaxClipPlanes = 6;
253*61046927SAndroid Build Coastguard Worker ctx->Const.MaxTextureUnits = 2;
254*61046927SAndroid Build Coastguard Worker ctx->Const.MaxTextureCoordUnits = 2;
255*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs = 16;
256*61046927SAndroid Build Coastguard Worker
257*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformComponents = 512;
258*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents = 32;
259*61046927SAndroid Build Coastguard Worker ctx->Const.MaxVarying = 8; /* == gl_MaxVaryingFloats / 4 */
260*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = 0;
261*61046927SAndroid Build Coastguard Worker ctx->Const.MaxCombinedTextureImageUnits = 2;
262*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = 2;
263*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformComponents = 64;
264*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 32;
265*61046927SAndroid Build Coastguard Worker
266*61046927SAndroid Build Coastguard Worker ctx->Const.MaxDrawBuffers = 1;
267*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeWorkGroupCount[0] = 65535;
268*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeWorkGroupCount[1] = 65535;
269*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeWorkGroupCount[2] = 65535;
270*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeWorkGroupSize[0] = 1024;
271*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeWorkGroupSize[1] = 1024;
272*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeWorkGroupSize[2] = 64;
273*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeWorkGroupInvocations = 1024;
274*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeVariableGroupSize[0] = 512;
275*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeVariableGroupSize[1] = 512;
276*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeVariableGroupSize[2] = 64;
277*61046927SAndroid Build Coastguard Worker ctx->Const.MaxComputeVariableGroupInvocations = 512;
278*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_COMPUTE].MaxTextureImageUnits = 16;
279*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformComponents = 1024;
280*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_COMPUTE].MaxInputComponents = 0; /* not used */
281*61046927SAndroid Build Coastguard Worker ctx->Const.Program[MESA_SHADER_COMPUTE].MaxOutputComponents = 0; /* not used */
282*61046927SAndroid Build Coastguard Worker
283*61046927SAndroid Build Coastguard Worker /* Set up default shader compiler options. */
284*61046927SAndroid Build Coastguard Worker struct gl_shader_compiler_options options;
285*61046927SAndroid Build Coastguard Worker memset(&options, 0, sizeof(options));
286*61046927SAndroid Build Coastguard Worker options.MaxIfDepth = UINT_MAX;
287*61046927SAndroid Build Coastguard Worker
288*61046927SAndroid Build Coastguard Worker for (int sh = 0; sh < MESA_SHADER_STAGES; ++sh)
289*61046927SAndroid Build Coastguard Worker memcpy(&ctx->Const.ShaderCompilerOptions[sh], &options, sizeof(options));
290*61046927SAndroid Build Coastguard Worker
291*61046927SAndroid Build Coastguard Worker ctx->Driver.NewProgram = standalone_new_program;
292*61046927SAndroid Build Coastguard Worker }
293*61046927SAndroid Build Coastguard Worker
294*61046927SAndroid Build Coastguard Worker struct gl_shader_program *
standalone_create_shader_program(void)295*61046927SAndroid Build Coastguard Worker standalone_create_shader_program(void)
296*61046927SAndroid Build Coastguard Worker {
297*61046927SAndroid Build Coastguard Worker struct gl_shader_program *whole_program;
298*61046927SAndroid Build Coastguard Worker
299*61046927SAndroid Build Coastguard Worker whole_program = rzalloc (NULL, struct gl_shader_program);
300*61046927SAndroid Build Coastguard Worker assert(whole_program != NULL);
301*61046927SAndroid Build Coastguard Worker whole_program->data = rzalloc(whole_program, struct gl_shader_program_data);
302*61046927SAndroid Build Coastguard Worker assert(whole_program->data != NULL);
303*61046927SAndroid Build Coastguard Worker whole_program->data->InfoLog = ralloc_strdup(whole_program->data, "");
304*61046927SAndroid Build Coastguard Worker
305*61046927SAndroid Build Coastguard Worker /* Created just to avoid segmentation faults */
306*61046927SAndroid Build Coastguard Worker whole_program->AttributeBindings = new string_to_uint_map;
307*61046927SAndroid Build Coastguard Worker whole_program->FragDataBindings = new string_to_uint_map;
308*61046927SAndroid Build Coastguard Worker whole_program->FragDataIndexBindings = new string_to_uint_map;
309*61046927SAndroid Build Coastguard Worker
310*61046927SAndroid Build Coastguard Worker exec_list_make_empty(&whole_program->EmptyUniformLocations);
311*61046927SAndroid Build Coastguard Worker
312*61046927SAndroid Build Coastguard Worker return whole_program;
313*61046927SAndroid Build Coastguard Worker }
314*61046927SAndroid Build Coastguard Worker
315*61046927SAndroid Build Coastguard Worker void
standalone_destroy_shader_program(struct gl_shader_program * whole_program)316*61046927SAndroid Build Coastguard Worker standalone_destroy_shader_program(struct gl_shader_program *whole_program)
317*61046927SAndroid Build Coastguard Worker {
318*61046927SAndroid Build Coastguard Worker for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
319*61046927SAndroid Build Coastguard Worker if (whole_program->_LinkedShaders[i])
320*61046927SAndroid Build Coastguard Worker _mesa_delete_linked_shader(NULL, whole_program->_LinkedShaders[i]);
321*61046927SAndroid Build Coastguard Worker }
322*61046927SAndroid Build Coastguard Worker
323*61046927SAndroid Build Coastguard Worker delete whole_program->AttributeBindings;
324*61046927SAndroid Build Coastguard Worker delete whole_program->FragDataBindings;
325*61046927SAndroid Build Coastguard Worker delete whole_program->FragDataIndexBindings;
326*61046927SAndroid Build Coastguard Worker
327*61046927SAndroid Build Coastguard Worker ralloc_free(whole_program);
328*61046927SAndroid Build Coastguard Worker }
329*61046927SAndroid Build Coastguard Worker
330*61046927SAndroid Build Coastguard Worker struct gl_shader *
standalone_add_shader_source(struct gl_context * ctx,struct gl_shader_program * whole_program,GLenum type,const char * source)331*61046927SAndroid Build Coastguard Worker standalone_add_shader_source(struct gl_context *ctx, struct gl_shader_program *whole_program, GLenum type, const char *source)
332*61046927SAndroid Build Coastguard Worker {
333*61046927SAndroid Build Coastguard Worker struct gl_shader *shader = rzalloc(whole_program, gl_shader);
334*61046927SAndroid Build Coastguard Worker shader->Type = type;
335*61046927SAndroid Build Coastguard Worker shader->Stage = _mesa_shader_enum_to_shader_stage(type);
336*61046927SAndroid Build Coastguard Worker shader->Source = source;
337*61046927SAndroid Build Coastguard Worker
338*61046927SAndroid Build Coastguard Worker whole_program->Shaders = reralloc(whole_program, whole_program->Shaders,
339*61046927SAndroid Build Coastguard Worker struct gl_shader *, whole_program->NumShaders + 1);
340*61046927SAndroid Build Coastguard Worker assert(whole_program->Shaders != NULL);
341*61046927SAndroid Build Coastguard Worker
342*61046927SAndroid Build Coastguard Worker whole_program->Shaders[whole_program->NumShaders] = shader;
343*61046927SAndroid Build Coastguard Worker whole_program->NumShaders++;
344*61046927SAndroid Build Coastguard Worker
345*61046927SAndroid Build Coastguard Worker return shader;
346*61046927SAndroid Build Coastguard Worker }
347