Home
last modified time | relevance | path

Searched refs:rgba (Results 1 – 25 of 361) sorted by relevance

12345678910>>...15

/external/mesa3d/src/mesa/swrast/
Ds_blend.c121 GLubyte (*rgba)[4] = (GLubyte (*)[4]) src; in blend_transparency_ubyte() local
137 const GLint t = rgba[i][ACOMP]; /* t is in [0, 255] */ in blend_transparency_ubyte()
140 COPY_4UBV(rgba[i], dest[i]); in blend_transparency_ubyte()
144 const GLint r = DIV255((rgba[i][RCOMP] - dest[i][RCOMP]) * t) + dest[i][RCOMP]; in blend_transparency_ubyte()
145 const GLint g = DIV255((rgba[i][GCOMP] - dest[i][GCOMP]) * t) + dest[i][GCOMP]; in blend_transparency_ubyte()
146 const GLint b = DIV255((rgba[i][BCOMP] - dest[i][BCOMP]) * t) + dest[i][BCOMP]; in blend_transparency_ubyte()
147 const GLint a = DIV255((rgba[i][ACOMP] - dest[i][ACOMP]) * t) + dest[i][ACOMP]; in blend_transparency_ubyte()
152 rgba[i][RCOMP] = (GLubyte) r; in blend_transparency_ubyte()
153 rgba[i][GCOMP] = (GLubyte) g; in blend_transparency_ubyte()
154 rgba[i][BCOMP] = (GLubyte) b; in blend_transparency_ubyte()
[all …]
Ds_texcombine.c96 float4_array ccolor[4], rgba; in texture_combine() local
99 GLchan (*rgbaChan)[4] = span->array->rgba; in texture_combine()
102 rgba = malloc(4 * n * sizeof(GLfloat)); in texture_combine()
103 if (!rgba) { in texture_combine()
116 free(rgba); in texture_combine()
122 rgba[i][RCOMP] = CHAN_TO_FLOAT(rgbaChan[i][RCOMP]); in texture_combine()
123 rgba[i][GCOMP] = CHAN_TO_FLOAT(rgbaChan[i][GCOMP]); in texture_combine()
124 rgba[i][BCOMP] = CHAN_TO_FLOAT(rgbaChan[i][BCOMP]); in texture_combine()
125 rgba[i][ACOMP] = CHAN_TO_FLOAT(rgbaChan[i][ACOMP]); in texture_combine()
153 argRGB[term] = rgba; in texture_combine()
[all …]
Ds_texfilter.c775 GLfloat rgba[4]) in get_border_color()
779 rgba[0] = samp->BorderColor.f[0]; in get_border_color()
780 rgba[1] = samp->BorderColor.f[1]; in get_border_color()
781 rgba[2] = samp->BorderColor.f[2]; in get_border_color()
782 rgba[3] = 1.0F; in get_border_color()
785 rgba[0] = rgba[1] = rgba[2] = 0.0; in get_border_color()
786 rgba[3] = samp->BorderColor.f[3]; in get_border_color()
789 rgba[0] = rgba[1] = rgba[2] = samp->BorderColor.f[0]; in get_border_color()
790 rgba[3] = 1.0; in get_border_color()
793 rgba[0] = rgba[1] = rgba[2] = samp->BorderColor.f[0]; in get_border_color()
[all …]
Ds_fog.c100 rgba[i][RCOMP] = (TYPE) (f * rgba[i][RCOMP] + oneMinusF * rFog); \
101 rgba[i][GCOMP] = (TYPE) (f * rgba[i][GCOMP] + oneMinusF * gFog); \
102 rgba[i][BCOMP] = (TYPE) (f * rgba[i][BCOMP] + oneMinusF * bFog); \
117 rgba[i][RCOMP] = (TYPE) (f * rgba[i][RCOMP] + oneMinusF * rFog); \
118 rgba[i][GCOMP] = (TYPE) (f * rgba[i][GCOMP] + oneMinusF * gFog); \
119 rgba[i][BCOMP] = (TYPE) (f * rgba[i][BCOMP] + oneMinusF * bFog); \
169 GLubyte (*rgba)[4] = span->array->rgba8; in _swrast_fog_rgba_span() local
173 GLushort (*rgba)[4] = span->array->rgba16; in _swrast_fog_rgba_span() local
177 GLfloat (*rgba)[4] = span->array->attribs[VARYING_SLOT_COL0]; in _swrast_fog_rgba_span() local
188 GLubyte (*rgba)[4] = span->array->rgba8; in _swrast_fog_rgba_span() local
[all …]
/external/deqp-deps/amber/tests/cases/
Ddraw_triangle_list_with_probe_point.vkscript85 relative probe rgba (0.9, 0.9) (1.0, 0, 0, 1.0)
86 relative probe rgba (0.5, 0.5) (1.0, 0, 0, 1.0)
87 relative probe rgba (0.1, 0.7) (1.0, 0, 0, 1.0)
88 relative probe rgba (0.8, 0.3) (1.0, 0, 0, 1.0)
91 relative probe rgba (0.0, 0.0) (1.0, 0, 0, 1.0)
92 relative probe rgba (0.3, 0.7) (1.0, 0, 0, 1.0)
93 relative probe rgba (0.4, 0.9) (1.0, 0, 0, 1.0)
94 relative probe rgba (0.5, 0.0) (0, 1.0, 0, 1.0)
95 relative probe rgba (0.8, 0.7) (0, 1.0, 0, 1.0)
96 relative probe rgba (0.9, 0.9) (0, 1.0, 0, 1.0)
[all …]
Ddraw_triangle_list.vkscript85 relative probe rect rgba (0.0, 0.0, 1.0, 1.0) (1.0, 0, 0, 0)
88 relative probe rect rgba (0.0, 0.0, 0.5, 1.0) (1.0, 0, 0, 0)
89 relative probe rect rgba (0.5, 0.0, 0.5, 1.0) (0, 1.0, 0, 0)
92 relative probe rect rgba (0.0, 0.0, 0.5, 0.5) (1.0, 0, 0, 0)
93 relative probe rect rgba (0.5, 0.0, 0.5, 1.0) (0, 1.0, 0, 0)
94 relative probe rect rgba (0.0, 0.5, 0.5, 0.5) (0, 0, 1.0, 0)
97 relative probe rect rgba (0.0, 0.0, 0.5, 0.5) (1.0, 0, 0, 0)
98 relative probe rect rgba (0.5, 0.0, 0.5, 0.5) (0, 1.0, 0, 0)
99 relative probe rect rgba (0.0, 0.5, 0.5, 0.5) (0, 0, 1.0, 0)
100 relative probe rect rgba (0.5, 0.5, 0.5, 0.5) (0.5, 0.5, 0.5, 0)
Ddraw_rect_and_ortho.vkscript17 probe rect rgba (0, 0, 125, 125) (0.0, 0, 0, 0.0)
18 probe rect rgba (125, 125, 75, 75) (1.0, 0, 0, 1.0)
19 probe rect rgba (200, 200, 50, 50) (0.0, 0, 0, 0.0)
23 probe rect rgba (0, 0, 125, 125) (0.0, 0, 0, 0.0)
24 probe rect rgba (125, 125, 75, 75) (1.0, 0, 0, 1.0)
25 probe rect rgba (200, 200, 50, 50) (0.0, 0, 0, 0.0)
Dclear_color_with_probe_point.vkscript30 relative probe rgba (0.0, 0.0) (1.0, 0.4, 0.5, 0.2)
31 relative probe rgba (0.2, 0.7) (1.0, 0.4, 0.5, 0.2)
32 relative probe rgba (0.8, 0.3) (1.0, 0.4, 0.5, 0.2)
33 relative probe rgba (0.9, 0.9) (1.0, 0.4, 0.5, 0.2)
37 relative probe rgba (0.0, 0.0) (0.4, 0.2, 1.0, 0.5)
38 relative probe rgba (0.2, 0.7) (0.4, 0.2, 1.0, 0.5)
39 relative probe rgba (0.8, 0.3) (0.4, 0.2, 1.0, 0.5)
40 relative probe rgba (0.9, 0.9) (0.4, 0.2, 1.0, 0.5)
/external/skia/src/core/
DSkColorSpaceXformSteps.cpp98 void SkColorSpaceXformSteps::apply(float* rgba) const { in apply()
103 float invA = is_finite(1.0f / rgba[3]) ? 1.0f / rgba[3] : 0; in apply()
104 rgba[0] *= invA; in apply()
105 rgba[1] *= invA; in apply()
106 rgba[2] *= invA; in apply()
109 rgba[0] = skcms_TransferFunction_eval(&srcTF, rgba[0]); in apply()
110 rgba[1] = skcms_TransferFunction_eval(&srcTF, rgba[1]); in apply()
111 rgba[2] = skcms_TransferFunction_eval(&srcTF, rgba[2]); in apply()
114 float temp[3] = { rgba[0], rgba[1], rgba[2] }; in apply()
116 rgba[i] = src_to_dst_matrix[ i] * temp[0] + in apply()
[all …]
DSkDraw_atlas.cpp39 static void load_color(SkRasterPipeline_UniformColorCtx* ctx, const float rgba[]) { in load_color() argument
41 ctx->rgba[0] = SkScalarRoundToInt(rgba[0]*255); ctx->r = rgba[0]; in load_color()
42 ctx->rgba[1] = SkScalarRoundToInt(rgba[1]*255); ctx->g = rgba[1]; in load_color()
43 ctx->rgba[2] = SkScalarRoundToInt(rgba[2]*255); ctx->b = rgba[2]; in load_color()
44 ctx->rgba[3] = SkScalarRoundToInt(rgba[3]*255); ctx->a = rgba[3]; in load_color()
DSkColorFilter_Matrix.cpp93 skvm::F32 rgba[4]; in onProgram() local
95 rgba[j] = m(4+j*5); in onProgram()
96 rgba[j] = p->mad(m(3+j*5), *a, rgba[j]); in onProgram()
97 rgba[j] = p->mad(m(2+j*5), *b, rgba[j]); in onProgram()
98 rgba[j] = p->mad(m(1+j*5), *g, rgba[j]); in onProgram()
99 rgba[j] = p->mad(m(0+j*5), *r, rgba[j]); in onProgram()
101 *r = rgba[0]; in onProgram()
102 *g = rgba[1]; in onProgram()
103 *b = rgba[2]; in onProgram()
104 *a = rgba[3]; in onProgram()
DSkRasterPipeline.cpp104 void SkRasterPipeline::append_constant_color(SkArenaAlloc* alloc, const float rgba[4]) { in append_constant_color()
106 SkASSERT(0 <= rgba[3] && rgba[3] <= 1); in append_constant_color()
108 if (rgba[0] == 0 && rgba[1] == 0 && rgba[2] == 0 && rgba[3] == 1) { in append_constant_color()
110 } else if (rgba[0] == 1 && rgba[1] == 1 && rgba[2] == 1 && rgba[3] == 1) { in append_constant_color()
114 Sk4f color = Sk4f::Load(rgba); in append_constant_color()
119 if (0 <= rgba[0] && rgba[0] <= rgba[3] && in append_constant_color()
120 0 <= rgba[1] && rgba[1] <= rgba[3] && in append_constant_color()
121 0 <= rgba[2] && rgba[2] <= rgba[3]) { in append_constant_color()
124 ctx->rgba[0] = (uint16_t)color[0]; in append_constant_color()
125 ctx->rgba[1] = (uint16_t)color[1]; in append_constant_color()
[all …]
/external/skqp/src/core/
DSkColorSpaceXformSteps.cpp98 void SkColorSpaceXformSteps::apply(float* rgba) const { in apply()
103 float invA = is_finite(1.0f / rgba[3]) ? 1.0f / rgba[3] : 0; in apply()
104 rgba[0] *= invA; in apply()
105 rgba[1] *= invA; in apply()
106 rgba[2] *= invA; in apply()
112 rgba[0] = skcms_TransferFunction_eval(&tf, rgba[0]); in apply()
113 rgba[1] = skcms_TransferFunction_eval(&tf, rgba[1]); in apply()
114 rgba[2] = skcms_TransferFunction_eval(&tf, rgba[2]); in apply()
117 float temp[3] = { rgba[0], rgba[1], rgba[2] }; in apply()
119 rgba[i] = src_to_dst_matrix[ i] * temp[0] + in apply()
[all …]
DSkRasterPipeline.cpp97 void SkRasterPipeline::append_constant_color(SkArenaAlloc* alloc, const float rgba[4]) { in append_constant_color()
99 SkASSERT(0 <= rgba[3] && rgba[3] <= 1); in append_constant_color()
101 if (rgba[0] == 0 && rgba[1] == 0 && rgba[2] == 0 && rgba[3] == 1) { in append_constant_color()
103 } else if (rgba[0] == 1 && rgba[1] == 1 && rgba[2] == 1 && rgba[3] == 1) { in append_constant_color()
107 Sk4f color = Sk4f::Load(rgba); in append_constant_color()
112 if (0 <= rgba[0] && rgba[0] <= rgba[3] && in append_constant_color()
113 0 <= rgba[1] && rgba[1] <= rgba[3] && in append_constant_color()
114 0 <= rgba[2] && rgba[2] <= rgba[3]) { in append_constant_color()
117 ctx->rgba[0] = (uint16_t)color[0]; in append_constant_color()
118 ctx->rgba[1] = (uint16_t)color[1]; in append_constant_color()
[all …]
/external/mesa3d/src/gallium/drivers/softpipe/
Dsp_buffer.c52 float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE]) in sp_tgsi_load()
84 rgba[c][j] = 0; in sp_tgsi_load()
90 memcpy(&rgba[c][j], &src[c], 4); in sp_tgsi_load()
95 memset(rgba, 0, TGSI_NUM_CHANNELS * TGSI_QUAD_SIZE * 4); in sp_tgsi_load()
106 float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE]) in sp_tgsi_store()
140 memcpy(&dst[c], &rgba[c][j], 4); in sp_tgsi_store()
155 float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE], in handle_op_atomic()
164 ((uint32_t *)rgba[c])[qi] = sdata; in handle_op_atomic()
171 sdata += ((uint32_t *)rgba[c])[qi]; in handle_op_atomic()
172 ((uint32_t *)rgba[c])[qi] = temp; in handle_op_atomic()
[all …]
Dsp_image.c209 float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE]) in sp_tgsi_load()
252 rgba[c][j] = 0; in sp_tgsi_load()
255 ((int32_t *)rgba[c])[j] = 1; in sp_tgsi_load()
257 rgba[c][j] = 1.0; in sp_tgsi_load()
271 ((uint32_t *)rgba[c])[j] = sdata[c]; in sp_tgsi_load()
277 rgba[c][j] = 0; in sp_tgsi_load()
292 float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE]) in sp_tgsi_store()
338 sdata[c] = ((uint32_t *)rgba[c])[j]; in sp_tgsi_store()
357 float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE], in handle_op_uint()
371 ((uint32_t *)rgba[c])[qi] = sdata[c]; in handle_op_uint()
[all …]
/external/skqp/src/compute/color/
Dcolor.c25 color_rgb32_to_rgba_f32(float rgba[4], const uint32_t rgb, const float opacity) in color_rgb32_to_rgba_f32()
27 rgba[2] = (float)(rgb & 0xFF) / 255.0f; // b in color_rgb32_to_rgba_f32()
28 rgba[1] = (float)(rgb >> 8 & 0xFF) / 255.0f; // g in color_rgb32_to_rgba_f32()
29 rgba[0] = (float)(rgb >> 16 & 0xFF) / 255.0f; // r in color_rgb32_to_rgba_f32()
30 rgba[3] = opacity; in color_rgb32_to_rgba_f32()
34 color_argb32_to_rgba_f32(float rgba[4], const uint32_t argb) in color_argb32_to_rgba_f32()
36 rgba[2] = (float)(argb & 0xFF) / 255.0f; // b in color_argb32_to_rgba_f32()
37 rgba[1] = (float)(argb >> 8 & 0xFF) / 255.0f; // g in color_argb32_to_rgba_f32()
38 rgba[0] = (float)(argb >> 16 & 0xFF) / 255.0f; // r in color_argb32_to_rgba_f32()
39 rgba[3] = (float)(argb >> 24 & 0xFF) / 255.0f; // a in color_argb32_to_rgba_f32()
[all …]
/external/mesa3d/src/mesa/main/
Dpixeltransfer.c45 _mesa_scale_and_bias_rgba(GLuint n, GLfloat rgba[][4], in _mesa_scale_and_bias_rgba()
54 rgba[i][RCOMP] = rgba[i][RCOMP] * rScale + rBias; in _mesa_scale_and_bias_rgba()
60 rgba[i][GCOMP] = rgba[i][GCOMP] * gScale + gBias; in _mesa_scale_and_bias_rgba()
66 rgba[i][BCOMP] = rgba[i][BCOMP] * bScale + bBias; in _mesa_scale_and_bias_rgba()
72 rgba[i][ACOMP] = rgba[i][ACOMP] * aScale + aBias; in _mesa_scale_and_bias_rgba()
82 _mesa_map_rgba( const struct gl_context *ctx, GLuint n, GLfloat rgba[][4] ) in _mesa_map_rgba()
94 GLfloat r = CLAMP(rgba[i][RCOMP], 0.0F, 1.0F); in _mesa_map_rgba()
95 GLfloat g = CLAMP(rgba[i][GCOMP], 0.0F, 1.0F); in _mesa_map_rgba()
96 GLfloat b = CLAMP(rgba[i][BCOMP], 0.0F, 1.0F); in _mesa_map_rgba()
97 GLfloat a = CLAMP(rgba[i][ACOMP], 0.0F, 1.0F); in _mesa_map_rgba()
[all …]
Daccum.c232 GLfloat (*rgba)[4]; in accum_or_load() local
234 rgba = malloc(width * 4 * sizeof(GLfloat)); in accum_or_load()
235 if (rgba) { in accum_or_load()
240 _mesa_unpack_rgba_row(colorRb->Format, width, colorMap, rgba); in accum_or_load()
244 acc[i * 4 + 0] = (GLshort) (rgba[i][RCOMP] * scale); in accum_or_load()
245 acc[i * 4 + 1] = (GLshort) (rgba[i][GCOMP] * scale); in accum_or_load()
246 acc[i * 4 + 2] = (GLshort) (rgba[i][BCOMP] * scale); in accum_or_load()
247 acc[i * 4 + 3] = (GLshort) (rgba[i][ACOMP] * scale); in accum_or_load()
253 acc[i * 4 + 0] += (GLshort) (rgba[i][RCOMP] * scale); in accum_or_load()
254 acc[i * 4 + 1] += (GLshort) (rgba[i][GCOMP] * scale); in accum_or_load()
[all …]
/external/skqp/src/opts/
DSkSwizzler_opts.h196 uint8x8x4_t rgba = vld4_u8((const uint8_t*) src); in premul_should_swapRB() local
198 uint8x8_t a = rgba.val[3], in premul_should_swapRB()
199 b = rgba.val[2], in premul_should_swapRB()
200 g = rgba.val[1], in premul_should_swapRB()
201 r = rgba.val[0]; in premul_should_swapRB()
210 rgba.val[2] = r; in premul_should_swapRB()
211 rgba.val[1] = g; in premul_should_swapRB()
212 rgba.val[0] = b; in premul_should_swapRB()
214 rgba.val[2] = b; in premul_should_swapRB()
215 rgba.val[1] = g; in premul_should_swapRB()
[all …]
/external/skia/src/opts/
DSkSwizzler_opts.h196 uint8x8x4_t rgba = vld4_u8((const uint8_t*) src); in premul_should_swapRB() local
198 uint8x8_t a = rgba.val[3], in premul_should_swapRB()
199 b = rgba.val[2], in premul_should_swapRB()
200 g = rgba.val[1], in premul_should_swapRB()
201 r = rgba.val[0]; in premul_should_swapRB()
210 rgba.val[2] = r; in premul_should_swapRB()
211 rgba.val[1] = g; in premul_should_swapRB()
212 rgba.val[0] = b; in premul_should_swapRB()
214 rgba.val[2] = b; in premul_should_swapRB()
215 rgba.val[1] = g; in premul_should_swapRB()
[all …]
/external/mesa3d/src/gallium/auxiliary/gallivm/
Dlp_bld_format_yuv.c322 LLVMValueRef rgba; in rgb_to_rgba_aos() local
349 rgba = r; in rgb_to_rgba_aos()
350 rgba = LLVMBuildOr(builder, rgba, g, ""); in rgb_to_rgba_aos()
351 rgba = LLVMBuildOr(builder, rgba, b, ""); in rgb_to_rgba_aos()
352 rgba = LLVMBuildOr(builder, rgba, a, ""); in rgb_to_rgba_aos()
354 rgba = LLVMBuildBitCast(builder, rgba, in rgb_to_rgba_aos()
357 return rgba; in rgb_to_rgba_aos()
372 LLVMValueRef rgba; in uyvy_to_rgba_aos() local
376 rgba = rgb_to_rgba_aos(gallivm, n, r, g, b); in uyvy_to_rgba_aos()
378 return rgba; in uyvy_to_rgba_aos()
[all …]
/external/angle/src/libANGLE/renderer/d3d/d3d11/shaders/
DMultiplyAlpha.hlsl21 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
28 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
40 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
47 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
58 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
65 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
76 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
84 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
95 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
103 float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
[all …]
/external/mesa3d/src/mesa/x86/
Dmmx_blend.S213 #define GMB_LOAD(rgba, dest, MPP, MQQ) \ argument
214 ONE(MOVD ( REGIND(rgba), MPP )) /* | | | | qa1 | qb1 | qg1 | qr1 */ ;\
217 TWO(MOVQ ( REGIND(rgba), MPP )) /* qa2 | qb2 | qg2 | qr2 | qa1 | qb1 | qg1 | qr1 */ ;\
241 #define GMB_STORE(rgba, MSS ) \ argument
242 ONE(MOVD ( MSS, REGIND(rgba) )) /* | | | | sa1 | sb1 | sg1 | sr1 */ ;\
243 TWO(MOVQ ( MSS, REGIND(rgba) )) /* sa2 | sb2 | sg2 | sr2 | sa1 | sb1 | sg1 | sr1 */
274 #define MAIN( rgba, dest ) \ argument
275 GMB_LOAD( rgba, dest, MM1, MM2 ) ;\
280 GMB_STORE( rgba, MM3 )
295 #define MAIN( rgba, dest ) \ argument
[all …]
/external/mesa3d/src/intel/isl/
Disl_format_layout.csv67 R32G32B32A32_FLOAT , 128, 1, 1, 1, sf32, sf32, sf32, sf32, , , , rgba, line…
68 R32G32B32A32_SINT , 128, 1, 1, 1, si32, si32, si32, si32, , , , rgba, line…
69 R32G32B32A32_UINT , 128, 1, 1, 1, ui32, ui32, ui32, ui32, , , , rgba, line…
70 R32G32B32A32_UNORM , 128, 1, 1, 1, un32, un32, un32, un32, , , , rgba, line…
71 R32G32B32A32_SNORM , 128, 1, 1, 1, sn32, sn32, sn32, sn32, , , , rgba, line…
73 R32G32B32X32_FLOAT , 128, 1, 1, 1, sf32, sf32, sf32, x32, , , , rgba, line…
74 R32G32B32A32_SSCALED , 128, 1, 1, 1, ss32, ss32, ss32, ss32, , , , rgba, line…
75 R32G32B32A32_USCALED , 128, 1, 1, 1, us32, us32, us32, us32, , , , rgba, line…
76 R32G32B32A32_SFIXED , 128, 1, 1, 1, sx32, sx32, sx32, sx32, , , , rgba, line…
86 R16G16B16A16_UNORM , 64, 1, 1, 1, un16, un16, un16, un16, , , , rgba, line…
[all …]

12345678910>>...15