github.com/cybriq/giocore@v0.0.7-0.20210703034601-cfb9cb5f3900/gpu/shaders.go (about) 1 // Code generated by build.go. DO NOT EDIT. 2 3 package gpu 4 5 import "github.com/cybriq/giocore/gpu/internal/driver" 6 7 var ( 8 shader_backdrop_comp = driver.ShaderSources{ 9 Name: "backdrop.comp", 10 GLSL310ES: `#version 310 es 11 layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; 12 13 struct Alloc 14 { 15 uint offset; 16 }; 17 18 struct AnnotatedRef 19 { 20 uint offset; 21 }; 22 23 struct AnnotatedTag 24 { 25 uint tag; 26 uint flags; 27 }; 28 29 struct PathRef 30 { 31 uint offset; 32 }; 33 34 struct TileRef 35 { 36 uint offset; 37 }; 38 39 struct Path 40 { 41 uvec4 bbox; 42 TileRef tiles; 43 }; 44 45 struct Config 46 { 47 uint n_elements; 48 uint n_pathseg; 49 uint width_in_tiles; 50 uint height_in_tiles; 51 Alloc tile_alloc; 52 Alloc bin_alloc; 53 Alloc ptcl_alloc; 54 Alloc pathseg_alloc; 55 Alloc anno_alloc; 56 Alloc trans_alloc; 57 }; 58 59 layout(binding = 0, std430) buffer Memory 60 { 61 uint mem_offset; 62 uint mem_error; 63 uint memory[]; 64 } _79; 65 66 layout(binding = 1, std430) readonly buffer ConfigBuf 67 { 68 Config conf; 69 } _187; 70 71 shared uint sh_row_width[128]; 72 shared Alloc sh_row_alloc[128]; 73 shared uint sh_row_count[128]; 74 75 bool touch_mem(Alloc alloc, uint offset) 76 { 77 return true; 78 } 79 80 uint read_mem(Alloc alloc, uint offset) 81 { 82 Alloc param = alloc; 83 uint param_1 = offset; 84 if (!touch_mem(param, param_1)) 85 { 86 return 0u; 87 } 88 uint v = _79.memory[offset]; 89 return v; 90 } 91 92 AnnotatedTag Annotated_tag(Alloc a, AnnotatedRef ref) 93 { 94 Alloc param = a; 95 uint param_1 = ref.offset >> uint(2); 96 uint tag_and_flags = read_mem(param, param_1); 97 return AnnotatedTag(tag_and_flags & 65535u, tag_and_flags >> uint(16)); 98 } 99 100 uint fill_mode_from_flags(uint flags) 101 { 102 return flags & 1u; 103 } 104 105 Path Path_read(Alloc a, PathRef ref) 106 { 107 uint ix = ref.offset >> uint(2); 108 Alloc param = a; 109 uint param_1 = ix + 0u; 110 uint raw0 = read_mem(param, param_1); 111 Alloc param_2 = a; 112 uint param_3 = ix + 1u; 113 uint raw1 = read_mem(param_2, param_3); 114 Alloc param_4 = a; 115 uint param_5 = ix + 2u; 116 uint raw2 = read_mem(param_4, param_5); 117 Path s; 118 s.bbox = uvec4(raw0 & 65535u, raw0 >> uint(16), raw1 & 65535u, raw1 >> uint(16)); 119 s.tiles = TileRef(raw2); 120 return s; 121 } 122 123 Alloc new_alloc(uint offset, uint size, bool mem_ok) 124 { 125 Alloc a; 126 a.offset = offset; 127 return a; 128 } 129 130 void write_mem(Alloc alloc, uint offset, uint val) 131 { 132 Alloc param = alloc; 133 uint param_1 = offset; 134 if (!touch_mem(param, param_1)) 135 { 136 return; 137 } 138 _79.memory[offset] = val; 139 } 140 141 void main() 142 { 143 uint th_ix = gl_LocalInvocationID.x; 144 uint element_ix = gl_GlobalInvocationID.x; 145 AnnotatedRef ref = AnnotatedRef(_187.conf.anno_alloc.offset + (element_ix * 32u)); 146 uint row_count = 0u; 147 bool mem_ok = _79.mem_error == 0u; 148 if (element_ix < _187.conf.n_elements) 149 { 150 Alloc param; 151 param.offset = _187.conf.anno_alloc.offset; 152 AnnotatedRef param_1 = ref; 153 AnnotatedTag tag = Annotated_tag(param, param_1); 154 switch (tag.tag) 155 { 156 case 2u: 157 case 3u: 158 case 1u: 159 { 160 uint param_2 = tag.flags; 161 if (fill_mode_from_flags(param_2) != 0u) 162 { 163 break; 164 } 165 PathRef path_ref = PathRef(_187.conf.tile_alloc.offset + (element_ix * 12u)); 166 Alloc param_3; 167 param_3.offset = _187.conf.tile_alloc.offset; 168 PathRef param_4 = path_ref; 169 Path path = Path_read(param_3, param_4); 170 sh_row_width[th_ix] = path.bbox.z - path.bbox.x; 171 row_count = path.bbox.w - path.bbox.y; 172 bool _267 = row_count == 1u; 173 bool _273; 174 if (_267) 175 { 176 _273 = path.bbox.y > 0u; 177 } 178 else 179 { 180 _273 = _267; 181 } 182 if (_273) 183 { 184 row_count = 0u; 185 } 186 uint param_5 = path.tiles.offset; 187 uint param_6 = ((path.bbox.z - path.bbox.x) * (path.bbox.w - path.bbox.y)) * 8u; 188 bool param_7 = mem_ok; 189 Alloc path_alloc = new_alloc(param_5, param_6, param_7); 190 sh_row_alloc[th_ix] = path_alloc; 191 break; 192 } 193 } 194 } 195 sh_row_count[th_ix] = row_count; 196 for (uint i = 0u; i < 7u; i++) 197 { 198 barrier(); 199 if (th_ix >= uint(1 << int(i))) 200 { 201 row_count += sh_row_count[th_ix - uint(1 << int(i))]; 202 } 203 barrier(); 204 sh_row_count[th_ix] = row_count; 205 } 206 barrier(); 207 uint total_rows = sh_row_count[127]; 208 uint _399; 209 for (uint row = th_ix; row < total_rows; row += 128u) 210 { 211 uint el_ix = 0u; 212 for (uint i_1 = 0u; i_1 < 7u; i_1++) 213 { 214 uint probe = el_ix + uint(64 >> int(i_1)); 215 if (row >= sh_row_count[probe - 1u]) 216 { 217 el_ix = probe; 218 } 219 } 220 uint width = sh_row_width[el_ix]; 221 if ((width > 0u) && mem_ok) 222 { 223 Alloc tiles_alloc = sh_row_alloc[el_ix]; 224 if (el_ix > 0u) 225 { 226 _399 = sh_row_count[el_ix - 1u]; 227 } 228 else 229 { 230 _399 = 0u; 231 } 232 uint seq_ix = row - _399; 233 uint tile_el_ix = ((tiles_alloc.offset >> uint(2)) + 1u) + ((seq_ix * 2u) * width); 234 Alloc param_8 = tiles_alloc; 235 uint param_9 = tile_el_ix; 236 uint sum = read_mem(param_8, param_9); 237 for (uint x = 1u; x < width; x++) 238 { 239 tile_el_ix += 2u; 240 Alloc param_10 = tiles_alloc; 241 uint param_11 = tile_el_ix; 242 sum += read_mem(param_10, param_11); 243 Alloc param_12 = tiles_alloc; 244 uint param_13 = tile_el_ix; 245 uint param_14 = sum; 246 write_mem(param_12, param_13, param_14); 247 } 248 } 249 } 250 } 251 252 `, 253 } 254 shader_binning_comp = driver.ShaderSources{ 255 Name: "binning.comp", 256 GLSL310ES: `#version 310 es 257 layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; 258 259 struct Alloc 260 { 261 uint offset; 262 }; 263 264 struct MallocResult 265 { 266 Alloc alloc; 267 bool failed; 268 }; 269 270 struct AnnoEndClipRef 271 { 272 uint offset; 273 }; 274 275 struct AnnoEndClip 276 { 277 vec4 bbox; 278 }; 279 280 struct AnnotatedRef 281 { 282 uint offset; 283 }; 284 285 struct AnnotatedTag 286 { 287 uint tag; 288 uint flags; 289 }; 290 291 struct BinInstanceRef 292 { 293 uint offset; 294 }; 295 296 struct BinInstance 297 { 298 uint element_ix; 299 }; 300 301 struct Config 302 { 303 uint n_elements; 304 uint n_pathseg; 305 uint width_in_tiles; 306 uint height_in_tiles; 307 Alloc tile_alloc; 308 Alloc bin_alloc; 309 Alloc ptcl_alloc; 310 Alloc pathseg_alloc; 311 Alloc anno_alloc; 312 Alloc trans_alloc; 313 }; 314 315 layout(binding = 0, std430) buffer Memory 316 { 317 uint mem_offset; 318 uint mem_error; 319 uint memory[]; 320 } _84; 321 322 layout(binding = 1, std430) readonly buffer ConfigBuf 323 { 324 Config conf; 325 } _253; 326 327 shared uint bitmaps[4][128]; 328 shared bool sh_alloc_failed; 329 shared uint count[4][128]; 330 shared Alloc sh_chunk_alloc[128]; 331 332 bool touch_mem(Alloc alloc, uint offset) 333 { 334 return true; 335 } 336 337 uint read_mem(Alloc alloc, uint offset) 338 { 339 Alloc param = alloc; 340 uint param_1 = offset; 341 if (!touch_mem(param, param_1)) 342 { 343 return 0u; 344 } 345 uint v = _84.memory[offset]; 346 return v; 347 } 348 349 AnnotatedTag Annotated_tag(Alloc a, AnnotatedRef ref) 350 { 351 Alloc param = a; 352 uint param_1 = ref.offset >> uint(2); 353 uint tag_and_flags = read_mem(param, param_1); 354 return AnnotatedTag(tag_and_flags & 65535u, tag_and_flags >> uint(16)); 355 } 356 357 AnnoEndClip AnnoEndClip_read(Alloc a, AnnoEndClipRef ref) 358 { 359 uint ix = ref.offset >> uint(2); 360 Alloc param = a; 361 uint param_1 = ix + 0u; 362 uint raw0 = read_mem(param, param_1); 363 Alloc param_2 = a; 364 uint param_3 = ix + 1u; 365 uint raw1 = read_mem(param_2, param_3); 366 Alloc param_4 = a; 367 uint param_5 = ix + 2u; 368 uint raw2 = read_mem(param_4, param_5); 369 Alloc param_6 = a; 370 uint param_7 = ix + 3u; 371 uint raw3 = read_mem(param_6, param_7); 372 AnnoEndClip s; 373 s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 374 return s; 375 } 376 377 AnnoEndClip Annotated_EndClip_read(Alloc a, AnnotatedRef ref) 378 { 379 Alloc param = a; 380 AnnoEndClipRef param_1 = AnnoEndClipRef(ref.offset + 4u); 381 return AnnoEndClip_read(param, param_1); 382 } 383 384 Alloc new_alloc(uint offset, uint size, bool mem_ok) 385 { 386 Alloc a; 387 a.offset = offset; 388 return a; 389 } 390 391 MallocResult malloc(uint size) 392 { 393 uint _90 = atomicAdd(_84.mem_offset, size); 394 uint offset = _90; 395 MallocResult r; 396 r.failed = (offset + size) > uint(int(uint(_84.memory.length())) * 4); 397 uint param = offset; 398 uint param_1 = size; 399 bool param_2 = !r.failed; 400 r.alloc = new_alloc(param, param_1, param_2); 401 if (r.failed) 402 { 403 uint _119 = atomicMax(_84.mem_error, 1u); 404 return r; 405 } 406 return r; 407 } 408 409 void write_mem(Alloc alloc, uint offset, uint val) 410 { 411 Alloc param = alloc; 412 uint param_1 = offset; 413 if (!touch_mem(param, param_1)) 414 { 415 return; 416 } 417 _84.memory[offset] = val; 418 } 419 420 void BinInstance_write(Alloc a, BinInstanceRef ref, BinInstance s) 421 { 422 uint ix = ref.offset >> uint(2); 423 Alloc param = a; 424 uint param_1 = ix + 0u; 425 uint param_2 = s.element_ix; 426 write_mem(param, param_1, param_2); 427 } 428 429 void main() 430 { 431 uint my_n_elements = _253.conf.n_elements; 432 uint my_partition = gl_WorkGroupID.x; 433 for (uint i = 0u; i < 4u; i++) 434 { 435 bitmaps[i][gl_LocalInvocationID.x] = 0u; 436 } 437 if (gl_LocalInvocationID.x == 0u) 438 { 439 sh_alloc_failed = false; 440 } 441 barrier(); 442 uint element_ix = (my_partition * 128u) + gl_LocalInvocationID.x; 443 AnnotatedRef ref = AnnotatedRef(_253.conf.anno_alloc.offset + (element_ix * 32u)); 444 uint tag = 0u; 445 if (element_ix < my_n_elements) 446 { 447 Alloc param; 448 param.offset = _253.conf.anno_alloc.offset; 449 AnnotatedRef param_1 = ref; 450 tag = Annotated_tag(param, param_1).tag; 451 } 452 int x0 = 0; 453 int y0 = 0; 454 int x1 = 0; 455 int y1 = 0; 456 switch (tag) 457 { 458 case 1u: 459 case 2u: 460 case 3u: 461 case 4u: 462 { 463 Alloc param_2; 464 param_2.offset = _253.conf.anno_alloc.offset; 465 AnnotatedRef param_3 = ref; 466 AnnoEndClip clip = Annotated_EndClip_read(param_2, param_3); 467 x0 = int(floor(clip.bbox.x * 0.001953125)); 468 y0 = int(floor(clip.bbox.y * 0.00390625)); 469 x1 = int(ceil(clip.bbox.z * 0.001953125)); 470 y1 = int(ceil(clip.bbox.w * 0.00390625)); 471 break; 472 } 473 } 474 uint width_in_bins = ((_253.conf.width_in_tiles + 16u) - 1u) / 16u; 475 uint height_in_bins = ((_253.conf.height_in_tiles + 8u) - 1u) / 8u; 476 x0 = clamp(x0, 0, int(width_in_bins)); 477 x1 = clamp(x1, x0, int(width_in_bins)); 478 y0 = clamp(y0, 0, int(height_in_bins)); 479 y1 = clamp(y1, y0, int(height_in_bins)); 480 if (x0 == x1) 481 { 482 y1 = y0; 483 } 484 int x = x0; 485 int y = y0; 486 uint my_slice = gl_LocalInvocationID.x / 32u; 487 uint my_mask = uint(1 << int(gl_LocalInvocationID.x & 31u)); 488 while (y < y1) 489 { 490 uint _438 = atomicOr(bitmaps[my_slice][(uint(y) * width_in_bins) + uint(x)], my_mask); 491 x++; 492 if (x == x1) 493 { 494 x = x0; 495 y++; 496 } 497 } 498 barrier(); 499 uint element_count = 0u; 500 for (uint i_1 = 0u; i_1 < 4u; i_1++) 501 { 502 element_count += uint(bitCount(bitmaps[i_1][gl_LocalInvocationID.x])); 503 count[i_1][gl_LocalInvocationID.x] = element_count; 504 } 505 uint param_4 = 0u; 506 uint param_5 = 0u; 507 bool param_6 = true; 508 Alloc chunk_alloc = new_alloc(param_4, param_5, param_6); 509 if (element_count != 0u) 510 { 511 uint param_7 = element_count * 4u; 512 MallocResult _488 = malloc(param_7); 513 MallocResult chunk = _488; 514 chunk_alloc = chunk.alloc; 515 sh_chunk_alloc[gl_LocalInvocationID.x] = chunk_alloc; 516 if (chunk.failed) 517 { 518 sh_alloc_failed = true; 519 } 520 } 521 uint out_ix = (_253.conf.bin_alloc.offset >> uint(2)) + (((my_partition * 128u) + gl_LocalInvocationID.x) * 2u); 522 Alloc param_8; 523 param_8.offset = _253.conf.bin_alloc.offset; 524 uint param_9 = out_ix; 525 uint param_10 = element_count; 526 write_mem(param_8, param_9, param_10); 527 Alloc param_11; 528 param_11.offset = _253.conf.bin_alloc.offset; 529 uint param_12 = out_ix + 1u; 530 uint param_13 = chunk_alloc.offset; 531 write_mem(param_11, param_12, param_13); 532 barrier(); 533 bool _544; 534 if (!sh_alloc_failed) 535 { 536 _544 = _84.mem_error != 0u; 537 } 538 else 539 { 540 _544 = sh_alloc_failed; 541 } 542 if (_544) 543 { 544 return; 545 } 546 x = x0; 547 y = y0; 548 while (y < y1) 549 { 550 uint bin_ix = (uint(y) * width_in_bins) + uint(x); 551 uint out_mask = bitmaps[my_slice][bin_ix]; 552 if ((out_mask & my_mask) != 0u) 553 { 554 uint idx = uint(bitCount(out_mask & (my_mask - 1u))); 555 if (my_slice > 0u) 556 { 557 idx += count[my_slice - 1u][bin_ix]; 558 } 559 Alloc out_alloc = sh_chunk_alloc[bin_ix]; 560 uint out_offset = out_alloc.offset + (idx * 4u); 561 Alloc param_14 = out_alloc; 562 BinInstanceRef param_15 = BinInstanceRef(out_offset); 563 BinInstance param_16 = BinInstance(element_ix); 564 BinInstance_write(param_14, param_15, param_16); 565 } 566 x++; 567 if (x == x1) 568 { 569 x = x0; 570 y++; 571 } 572 } 573 } 574 575 `, 576 } 577 shader_blit_frag = [...]driver.ShaderSources{ 578 { 579 Name: "blit.frag", 580 Inputs: []driver.InputLocation{{Name: "vUV", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}}, 581 Uniforms: driver.UniformsReflection{ 582 Blocks: []driver.UniformBlock{{Name: "Color", Binding: 0}}, 583 Locations: []driver.UniformLocation{{Name: "_color.color", Type: 0x0, Size: 4, Offset: 0}}, 584 Size: 16, 585 }, 586 GLSL100ES: `#version 100 587 precision mediump float; 588 precision highp int; 589 590 struct Color 591 { 592 vec4 color; 593 }; 594 595 uniform Color _color; 596 597 varying vec2 vUV; 598 599 void main() 600 { 601 gl_FragData[0] = _color.color; 602 } 603 604 `, 605 GLSL300ES: `#version 300 es 606 precision mediump float; 607 precision highp int; 608 609 layout(std140) uniform Color 610 { 611 vec4 color; 612 } _color; 613 614 layout(location = 0) out vec4 fragColor; 615 in vec2 vUV; 616 617 void main() 618 { 619 fragColor = _color.color; 620 } 621 622 `, 623 GLSL130: `#version 130 624 625 struct Color 626 { 627 vec4 color; 628 }; 629 630 uniform Color _color; 631 632 out vec4 fragColor; 633 in vec2 vUV; 634 635 void main() 636 { 637 fragColor = _color.color; 638 } 639 640 `, 641 GLSL150: `#version 150 642 643 layout(std140) uniform Color 644 { 645 vec4 color; 646 } _color; 647 648 out vec4 fragColor; 649 in vec2 vUV; 650 651 void main() 652 { 653 fragColor = _color.color; 654 } 655 656 `, 657 HLSL: "DXBC,\xc1\x9c\x85P\xbc\xab\x8a.\x9e\b\xdd\xf7\xd2\x18\xa2\x01\x00\x00\x00t\x02\x00\x00\x06\x00\x00\x008\x00\x00\x00\x84\x00\x00\x00\xcc\x00\x00\x00H\x01\x00\x00\f\x02\x00\x00@\x02\x00\x00Aon9D\x00\x00\x00D\x00\x00\x00\x00\x02\xff\xff\x14\x00\x00\x000\x00\x00\x00\x01\x00$\x00\x00\x000\x00\x00\x000\x00\x00\x00$\x00\x00\x000\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\xff\xff\x01\x00\x00\x02\x00\b\x0f\x80\x00\x00\xe4\xa0\xff\xff\x00\x00SHDR@\x00\x00\x00@\x00\x00\x00\x10\x00\x00\x00Y\x00\x00\x04F\x8e \x00\x00\x00\x00\x00\x01\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x006\x00\x00\x06\xf2 \x10\x00\x00\x00\x00\x00F\x8e \x00\x00\x00\x00\x00\x00\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\xbc\x00\x00\x00\x01\x00\x00\x00D\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00\x94\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00Color\x00\xab\xab<\x00\x00\x00\x01\x00\x00\x00\\\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00t\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00_color_color\x00\xab\xab\xab\x01\x00\x03\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00Microsoft (R) HLSL Shader Compiler 10.1\x00ISGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00TEXCOORD\x00\xab\xab\xabOSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xab", 658 }, 659 { 660 Name: "blit.frag", 661 Inputs: []driver.InputLocation{{Name: "vUV", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}}, 662 Uniforms: driver.UniformsReflection{ 663 Blocks: []driver.UniformBlock{{Name: "Gradient", Binding: 0}}, 664 Locations: []driver.UniformLocation{{Name: "_gradient.color1", Type: 0x0, Size: 4, Offset: 0}, {Name: "_gradient.color2", Type: 0x0, Size: 4, Offset: 16}}, 665 Size: 32, 666 }, 667 GLSL100ES: `#version 100 668 precision mediump float; 669 precision highp int; 670 671 struct Gradient 672 { 673 vec4 color1; 674 vec4 color2; 675 }; 676 677 uniform Gradient _gradient; 678 679 varying vec2 vUV; 680 681 void main() 682 { 683 gl_FragData[0] = mix(_gradient.color1, _gradient.color2, vec4(clamp(vUV.x, 0.0, 1.0))); 684 } 685 686 `, 687 GLSL300ES: `#version 300 es 688 precision mediump float; 689 precision highp int; 690 691 layout(std140) uniform Gradient 692 { 693 vec4 color1; 694 vec4 color2; 695 } _gradient; 696 697 layout(location = 0) out vec4 fragColor; 698 in vec2 vUV; 699 700 void main() 701 { 702 fragColor = mix(_gradient.color1, _gradient.color2, vec4(clamp(vUV.x, 0.0, 1.0))); 703 } 704 705 `, 706 GLSL130: `#version 130 707 708 struct Gradient 709 { 710 vec4 color1; 711 vec4 color2; 712 }; 713 714 uniform Gradient _gradient; 715 716 out vec4 fragColor; 717 in vec2 vUV; 718 719 void main() 720 { 721 fragColor = mix(_gradient.color1, _gradient.color2, vec4(clamp(vUV.x, 0.0, 1.0))); 722 } 723 724 `, 725 GLSL150: `#version 150 726 727 layout(std140) uniform Gradient 728 { 729 vec4 color1; 730 vec4 color2; 731 } _gradient; 732 733 out vec4 fragColor; 734 in vec2 vUV; 735 736 void main() 737 { 738 fragColor = mix(_gradient.color1, _gradient.color2, vec4(clamp(vUV.x, 0.0, 1.0))); 739 } 740 741 `, 742 HLSL: "DXBCdZ\xb9AA\xb2\xa5-Σc\xb9\xdc\xfd]\xae\x01\x00\x00\x00P\x03\x00\x00\x06\x00\x00\x008\x00\x00\x00\xcc\x00\x00\x00t\x01\x00\x00\xf0\x01\x00\x00\xe8\x02\x00\x00\x1c\x03\x00\x00Aon9\x8c\x00\x00\x00\x8c\x00\x00\x00\x00\x02\xff\xff\\\x00\x00\x000\x00\x00\x00\x01\x00$\x00\x00\x000\x00\x00\x000\x00\x00\x00$\x00\x00\x000\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x02\xff\xff\x1f\x00\x00\x02\x00\x00\x00\x80\x00\x00\x03\xb0\x01\x00\x00\x02\x00\x00\x18\x80\x00\x00\x00\xb0\x01\x00\x00\x02\x01\x00\x0f\x80\x00\x00\xe4\xa0\x02\x00\x00\x03\x01\x00\x0f\x80\x01\x00\xe4\x81\x01\x00\xe4\xa0\x04\x00\x00\x04\x00\x00\x0f\x80\x00\x00\xff\x80\x01\x00\xe4\x80\x00\x00\xe4\xa0\x01\x00\x00\x02\x00\b\x0f\x80\x00\x00\xe4\x80\xff\xff\x00\x00SHDR\xa0\x00\x00\x00@\x00\x00\x00(\x00\x00\x00Y\x00\x00\x04F\x8e \x00\x00\x00\x00\x00\x02\x00\x00\x00b\x10\x00\x03\x12\x10\x10\x00\x00\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x00h\x00\x00\x02\x02\x00\x00\x006 \x00\x05\x12\x00\x10\x00\x00\x00\x00\x00\n\x10\x10\x00\x00\x00\x00\x00\x00\x00\x00\n\xf2\x00\x10\x00\x01\x00\x00\x00F\x8e \x80A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x8e \x00\x00\x00\x00\x00\x01\x00\x00\x002\x00\x00\n\xf2 \x10\x00\x00\x00\x00\x00\x06\x00\x10\x00\x00\x00\x00\x00F\x0e\x10\x00\x01\x00\x00\x00F\x8e \x00\x00\x00\x00\x00\x00\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\xf0\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00\xc5\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00Gradient\x00\xab\xab\xab<\x00\x00\x00\x02\x00\x00\x00`\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00_gradient_color1\x00\xab\xab\xab\x01\x00\x03\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00_gradient_color2\x00Microsoft (R) HLSL Shader Compiler 10.1\x00\xab\xab\xabISGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01\x00\x00TEXCOORD\x00\xab\xab\xabOSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xab", 743 }, 744 { 745 Name: "blit.frag", 746 Inputs: []driver.InputLocation{{Name: "vUV", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}}, 747 Textures: []driver.TextureBinding{{Name: "tex", Binding: 0}}, 748 GLSL100ES: `#version 100 749 precision mediump float; 750 precision highp int; 751 752 uniform mediump sampler2D tex; 753 754 varying vec2 vUV; 755 756 void main() 757 { 758 gl_FragData[0] = texture2D(tex, vUV); 759 } 760 761 `, 762 GLSL300ES: `#version 300 es 763 precision mediump float; 764 precision highp int; 765 766 uniform mediump sampler2D tex; 767 768 layout(location = 0) out vec4 fragColor; 769 in vec2 vUV; 770 771 void main() 772 { 773 fragColor = texture(tex, vUV); 774 } 775 776 `, 777 GLSL130: `#version 130 778 779 uniform sampler2D tex; 780 781 out vec4 fragColor; 782 in vec2 vUV; 783 784 void main() 785 { 786 fragColor = texture(tex, vUV); 787 } 788 789 `, 790 GLSL150: `#version 150 791 792 uniform sampler2D tex; 793 794 out vec4 fragColor; 795 in vec2 vUV; 796 797 void main() 798 { 799 fragColor = texture(tex, vUV); 800 } 801 802 `, 803 HLSL: "DXBC\xb7?\x1d\xb1\x80̀\xa3W\t\xfbZ\x9fV\xd6\xda\x01\x00\x00\x00\x94\x02\x00\x00\x06\x00\x00\x008\x00\x00\x00\xa4\x00\x00\x00\x10\x01\x00\x00\x8c\x01\x00\x00,\x02\x00\x00`\x02\x00\x00Aon9d\x00\x00\x00d\x00\x00\x00\x00\x02\xff\xff<\x00\x00\x00(\x00\x00\x00\x00\x00(\x00\x00\x00(\x00\x00\x00(\x00\x01\x00$\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x02\xff\xff\x1f\x00\x00\x02\x00\x00\x00\x80\x00\x00\x03\xb0\x1f\x00\x00\x02\x00\x00\x00\x90\x00\b\x0f\xa0B\x00\x00\x03\x00\x00\x0f\x80\x00\x00\xe4\xb0\x00\b\xe4\xa0\x01\x00\x00\x02\x00\b\x0f\x80\x00\x00\xe4\x80\xff\xff\x00\x00SHDRd\x00\x00\x00@\x00\x00\x00\x19\x00\x00\x00Z\x00\x00\x03\x00`\x10\x00\x00\x00\x00\x00X\x18\x00\x04\x00p\x10\x00\x00\x00\x00\x00UU\x00\x00b\x10\x00\x032\x10\x10\x00\x00\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x00E\x00\x00\t\xf2 \x10\x00\x00\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x00F~\x10\x00\x00\x00\x00\x00\x00`\x10\x00\x00\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00m\x00\x00\x00\\\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00i\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x01\x00\x00\x00\r\x00\x00\x00_tex_sampler\x00tex\x00Microsoft (R) HLSL Shader Compiler 10.1\x00\xab\xab\xabISGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00TEXCOORD\x00\xab\xab\xabOSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xab", 804 }, 805 } 806 shader_blit_vert = driver.ShaderSources{ 807 Name: "blit.vert", 808 Inputs: []driver.InputLocation{{Name: "pos", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}, {Name: "uv", Location: 1, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 2}}, 809 Uniforms: driver.UniformsReflection{ 810 Blocks: []driver.UniformBlock{{Name: "Block", Binding: 0}}, 811 Locations: []driver.UniformLocation{{Name: "_block.transform", Type: 0x0, Size: 4, Offset: 0}, {Name: "_block.uvTransformR1", Type: 0x0, Size: 4, Offset: 16}, {Name: "_block.uvTransformR2", Type: 0x0, Size: 4, Offset: 32}, {Name: "_block.z", Type: 0x0, Size: 1, Offset: 48}}, 812 Size: 52, 813 }, 814 GLSL100ES: `#version 100 815 816 struct m3x2 817 { 818 vec3 r0; 819 vec3 r1; 820 }; 821 822 struct Block 823 { 824 vec4 transform; 825 vec4 uvTransformR1; 826 vec4 uvTransformR2; 827 float z; 828 }; 829 830 uniform Block _block; 831 832 attribute vec2 pos; 833 varying vec2 vUV; 834 attribute vec2 uv; 835 836 vec4 toClipSpace(vec4 pos_1) 837 { 838 return pos_1; 839 } 840 841 vec3 transform3x2(m3x2 t, vec3 v) 842 { 843 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 844 } 845 846 void main() 847 { 848 vec2 p = (pos * _block.transform.xy) + _block.transform.zw; 849 vec4 param = vec4(p, _block.z, 1.0); 850 gl_Position = toClipSpace(param); 851 m3x2 param_1 = m3x2(_block.uvTransformR1.xyz, _block.uvTransformR2.xyz); 852 vec3 param_2 = vec3(uv, 1.0); 853 vUV = transform3x2(param_1, param_2).xy; 854 } 855 856 `, 857 GLSL300ES: `#version 300 es 858 859 struct m3x2 860 { 861 vec3 r0; 862 vec3 r1; 863 }; 864 865 layout(std140) uniform Block 866 { 867 vec4 transform; 868 vec4 uvTransformR1; 869 vec4 uvTransformR2; 870 float z; 871 } _block; 872 873 layout(location = 0) in vec2 pos; 874 out vec2 vUV; 875 layout(location = 1) in vec2 uv; 876 877 vec4 toClipSpace(vec4 pos_1) 878 { 879 return pos_1; 880 } 881 882 vec3 transform3x2(m3x2 t, vec3 v) 883 { 884 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 885 } 886 887 void main() 888 { 889 vec2 p = (pos * _block.transform.xy) + _block.transform.zw; 890 vec4 param = vec4(p, _block.z, 1.0); 891 gl_Position = toClipSpace(param); 892 m3x2 param_1 = m3x2(_block.uvTransformR1.xyz, _block.uvTransformR2.xyz); 893 vec3 param_2 = vec3(uv, 1.0); 894 vUV = transform3x2(param_1, param_2).xy; 895 } 896 897 `, 898 GLSL130: `#version 130 899 900 struct m3x2 901 { 902 vec3 r0; 903 vec3 r1; 904 }; 905 906 struct Block 907 { 908 vec4 transform; 909 vec4 uvTransformR1; 910 vec4 uvTransformR2; 911 float z; 912 }; 913 914 uniform Block _block; 915 916 in vec2 pos; 917 out vec2 vUV; 918 in vec2 uv; 919 920 vec4 toClipSpace(vec4 pos_1) 921 { 922 return pos_1; 923 } 924 925 vec3 transform3x2(m3x2 t, vec3 v) 926 { 927 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 928 } 929 930 void main() 931 { 932 vec2 p = (pos * _block.transform.xy) + _block.transform.zw; 933 vec4 param = vec4(p, _block.z, 1.0); 934 gl_Position = toClipSpace(param); 935 m3x2 param_1 = m3x2(_block.uvTransformR1.xyz, _block.uvTransformR2.xyz); 936 vec3 param_2 = vec3(uv, 1.0); 937 vUV = transform3x2(param_1, param_2).xy; 938 } 939 940 `, 941 GLSL150: `#version 150 942 943 struct m3x2 944 { 945 vec3 r0; 946 vec3 r1; 947 }; 948 949 layout(std140) uniform Block 950 { 951 vec4 transform; 952 vec4 uvTransformR1; 953 vec4 uvTransformR2; 954 float z; 955 } _block; 956 957 in vec2 pos; 958 out vec2 vUV; 959 in vec2 uv; 960 961 vec4 toClipSpace(vec4 pos_1) 962 { 963 return pos_1; 964 } 965 966 vec3 transform3x2(m3x2 t, vec3 v) 967 { 968 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 969 } 970 971 void main() 972 { 973 vec2 p = (pos * _block.transform.xy) + _block.transform.zw; 974 vec4 param = vec4(p, _block.z, 1.0); 975 gl_Position = toClipSpace(param); 976 m3x2 param_1 = m3x2(_block.uvTransformR1.xyz, _block.uvTransformR2.xyz); 977 vec3 param_2 = vec3(uv, 1.0); 978 vUV = transform3x2(param_1, param_2).xy; 979 } 980 981 `, 982 HLSL: "DXBC\x80\xa7\xa0\x9e\xbb\xa1\xa3\x1b\x85\xac\xb6\xe9\xfb\xe6W\x03\x01\x00\x00\x00\xc8\x04\x00\x00\x06\x00\x00\x008\x00\x00\x00$\x01\x00\x00T\x02\x00\x00\xd0\x02\x00\x00$\x04\x00\x00p\x04\x00\x00Aon9\xe4\x00\x00\x00\xe4\x00\x00\x00\x00\x02\xfe\xff\xb0\x00\x00\x004\x00\x00\x00\x01\x00$\x00\x00\x000\x00\x00\x000\x00\x00\x00$\x00\x01\x000\x00\x00\x00\x00\x00\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xfe\xffQ\x00\x00\x05\x05\x00\x0f\xa0\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00?\x00\x00\x00\x00\x1f\x00\x00\x02\x05\x00\x00\x80\x00\x00\x0f\x90\x1f\x00\x00\x02\x05\x00\x01\x80\x01\x00\x0f\x90\x04\x00\x00\x04\x00\x00\a\x80\x01\x00Đ\x05\x00Р\x05\x00Š\b\x00\x00\x03\x00\x00\x01\xe0\x02\x00\xe4\xa0\x00\x00\xe4\x80\b\x00\x00\x03\x00\x00\x02\xe0\x03\x00\xe4\xa0\x00\x00\xe4\x80\x04\x00\x00\x04\x00\x00\x03\x80\x00\x00\xe4\x90\x01\x00\xe4\xa0\x01\x00\xee\xa0\x02\x00\x00\x03\x00\x00\x03\xc0\x00\x00\xe4\x80\x00\x00\xe4\xa0\x01\x00\x00\x02\x00\x00\a\x80\x05\x00\xe4\xa0\x04\x00\x00\x04\x00\x00\f\xc0\x04\x00\x00\xa0\x00\x00d\x80\x00\x00$\x80\xff\xff\x00\x00SHDR(\x01\x00\x00@\x00\x01\x00J\x00\x00\x00Y\x00\x00\x04F\x8e \x00\x00\x00\x00\x00\x04\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x00\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x01\x00\x00\x00e\x00\x00\x032 \x10\x00\x00\x00\x00\x00g\x00\x00\x04\xf2 \x10\x00\x01\x00\x00\x00\x01\x00\x00\x00h\x00\x00\x02\x01\x00\x00\x006\x00\x00\x052\x00\x10\x00\x00\x00\x00\x00F\x10\x10\x00\x01\x00\x00\x006\x00\x00\x05B\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x80?\x10\x00\x00\b\x12 \x10\x00\x00\x00\x00\x00F\x82 \x00\x00\x00\x00\x00\x01\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x00\x10\x00\x00\b\" \x10\x00\x00\x00\x00\x00F\x82 \x00\x00\x00\x00\x00\x02\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x002\x00\x00\v2 \x10\x00\x01\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x00F\x80 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x8a \x00\x00\x00\x00\x00\x00\x00\x00\x002\x00\x00\nB \x10\x00\x01\x00\x00\x00\n\x80 \x00\x00\x00\x00\x00\x03\x00\x00\x00\x01@\x00\x00\x00\x00\x00?\x01@\x00\x00\x00\x00\x00?6\x00\x00\x05\x82 \x10\x00\x01\x00\x00\x00\x01@\x00\x00\x00\x00\x80?>\x00\x00\x01STATt\x00\x00\x00\b\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEFL\x01\x00\x00\x01\x00\x00\x00D\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xfe\xff\x00\x01\x00\x00$\x01\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00Block\x00\xab\xab<\x00\x00\x00\x04\x00\x00\x00\\\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00 \x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x00\n\x01\x00\x000\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x14\x01\x00\x00\x00\x00\x00\x00_block_transform\x00\xab\xab\xab\x01\x00\x03\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00_block_uvTransformR1\x00_block_uvTransformR2\x00_block_z\x00\xab\x00\x00\x03\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00Microsoft (R) HLSL Shader Compiler 10.1\x00ISGND\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x008\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x03\x00\x00TEXCOORD\x00\xab\xab\xabOSGNP\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\f\x00\x00A\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x0f\x00\x00\x00TEXCOORD\x00SV_Position\x00\xab\xab\xab", 983 } 984 shader_coarse_comp = driver.ShaderSources{ 985 Name: "coarse.comp", 986 GLSL310ES: `#version 310 es 987 layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; 988 989 struct Alloc 990 { 991 uint offset; 992 }; 993 994 struct MallocResult 995 { 996 Alloc alloc; 997 bool failed; 998 }; 999 1000 struct AnnoImageRef 1001 { 1002 uint offset; 1003 }; 1004 1005 struct AnnoImage 1006 { 1007 vec4 bbox; 1008 float linewidth; 1009 uint index; 1010 ivec2 offset; 1011 }; 1012 1013 struct AnnoColorRef 1014 { 1015 uint offset; 1016 }; 1017 1018 struct AnnoColor 1019 { 1020 vec4 bbox; 1021 float linewidth; 1022 uint rgba_color; 1023 }; 1024 1025 struct AnnoBeginClipRef 1026 { 1027 uint offset; 1028 }; 1029 1030 struct AnnoBeginClip 1031 { 1032 vec4 bbox; 1033 float linewidth; 1034 }; 1035 1036 struct AnnotatedRef 1037 { 1038 uint offset; 1039 }; 1040 1041 struct AnnotatedTag 1042 { 1043 uint tag; 1044 uint flags; 1045 }; 1046 1047 struct BinInstanceRef 1048 { 1049 uint offset; 1050 }; 1051 1052 struct BinInstance 1053 { 1054 uint element_ix; 1055 }; 1056 1057 struct PathRef 1058 { 1059 uint offset; 1060 }; 1061 1062 struct TileRef 1063 { 1064 uint offset; 1065 }; 1066 1067 struct Path 1068 { 1069 uvec4 bbox; 1070 TileRef tiles; 1071 }; 1072 1073 struct TileSegRef 1074 { 1075 uint offset; 1076 }; 1077 1078 struct Tile 1079 { 1080 TileSegRef tile; 1081 int backdrop; 1082 }; 1083 1084 struct CmdStrokeRef 1085 { 1086 uint offset; 1087 }; 1088 1089 struct CmdStroke 1090 { 1091 uint tile_ref; 1092 float half_width; 1093 }; 1094 1095 struct CmdFillRef 1096 { 1097 uint offset; 1098 }; 1099 1100 struct CmdFill 1101 { 1102 uint tile_ref; 1103 int backdrop; 1104 }; 1105 1106 struct CmdColorRef 1107 { 1108 uint offset; 1109 }; 1110 1111 struct CmdColor 1112 { 1113 uint rgba_color; 1114 }; 1115 1116 struct CmdImageRef 1117 { 1118 uint offset; 1119 }; 1120 1121 struct CmdImage 1122 { 1123 uint index; 1124 ivec2 offset; 1125 }; 1126 1127 struct CmdJumpRef 1128 { 1129 uint offset; 1130 }; 1131 1132 struct CmdJump 1133 { 1134 uint new_ref; 1135 }; 1136 1137 struct CmdRef 1138 { 1139 uint offset; 1140 }; 1141 1142 struct Config 1143 { 1144 uint n_elements; 1145 uint n_pathseg; 1146 uint width_in_tiles; 1147 uint height_in_tiles; 1148 Alloc tile_alloc; 1149 Alloc bin_alloc; 1150 Alloc ptcl_alloc; 1151 Alloc pathseg_alloc; 1152 Alloc anno_alloc; 1153 Alloc trans_alloc; 1154 }; 1155 1156 layout(binding = 0, std430) buffer Memory 1157 { 1158 uint mem_offset; 1159 uint mem_error; 1160 uint memory[]; 1161 } _273; 1162 1163 layout(binding = 1, std430) readonly buffer ConfigBuf 1164 { 1165 Config conf; 1166 } _1066; 1167 1168 shared uint sh_bitmaps[4][128]; 1169 shared Alloc sh_part_elements[128]; 1170 shared uint sh_part_count[128]; 1171 shared uint sh_elements[128]; 1172 shared uint sh_tile_stride[128]; 1173 shared uint sh_tile_width[128]; 1174 shared uint sh_tile_x0[128]; 1175 shared uint sh_tile_y0[128]; 1176 shared uint sh_tile_base[128]; 1177 shared uint sh_tile_count[128]; 1178 1179 Alloc slice_mem(Alloc a, uint offset, uint size) 1180 { 1181 return Alloc(a.offset + offset); 1182 } 1183 1184 bool touch_mem(Alloc alloc, uint offset) 1185 { 1186 return true; 1187 } 1188 1189 uint read_mem(Alloc alloc, uint offset) 1190 { 1191 Alloc param = alloc; 1192 uint param_1 = offset; 1193 if (!touch_mem(param, param_1)) 1194 { 1195 return 0u; 1196 } 1197 uint v = _273.memory[offset]; 1198 return v; 1199 } 1200 1201 Alloc new_alloc(uint offset, uint size, bool mem_ok) 1202 { 1203 Alloc a; 1204 a.offset = offset; 1205 return a; 1206 } 1207 1208 BinInstanceRef BinInstance_index(BinInstanceRef ref, uint index) 1209 { 1210 return BinInstanceRef(ref.offset + (index * 4u)); 1211 } 1212 1213 BinInstance BinInstance_read(Alloc a, BinInstanceRef ref) 1214 { 1215 uint ix = ref.offset >> uint(2); 1216 Alloc param = a; 1217 uint param_1 = ix + 0u; 1218 uint raw0 = read_mem(param, param_1); 1219 BinInstance s; 1220 s.element_ix = raw0; 1221 return s; 1222 } 1223 1224 AnnotatedTag Annotated_tag(Alloc a, AnnotatedRef ref) 1225 { 1226 Alloc param = a; 1227 uint param_1 = ref.offset >> uint(2); 1228 uint tag_and_flags = read_mem(param, param_1); 1229 return AnnotatedTag(tag_and_flags & 65535u, tag_and_flags >> uint(16)); 1230 } 1231 1232 Path Path_read(Alloc a, PathRef ref) 1233 { 1234 uint ix = ref.offset >> uint(2); 1235 Alloc param = a; 1236 uint param_1 = ix + 0u; 1237 uint raw0 = read_mem(param, param_1); 1238 Alloc param_2 = a; 1239 uint param_3 = ix + 1u; 1240 uint raw1 = read_mem(param_2, param_3); 1241 Alloc param_4 = a; 1242 uint param_5 = ix + 2u; 1243 uint raw2 = read_mem(param_4, param_5); 1244 Path s; 1245 s.bbox = uvec4(raw0 & 65535u, raw0 >> uint(16), raw1 & 65535u, raw1 >> uint(16)); 1246 s.tiles = TileRef(raw2); 1247 return s; 1248 } 1249 1250 void write_tile_alloc(uint el_ix, Alloc a) 1251 { 1252 } 1253 1254 Alloc read_tile_alloc(uint el_ix, bool mem_ok) 1255 { 1256 uint param = 0u; 1257 uint param_1 = uint(int(uint(_273.memory.length())) * 4); 1258 bool param_2 = mem_ok; 1259 return new_alloc(param, param_1, param_2); 1260 } 1261 1262 Tile Tile_read(Alloc a, TileRef ref) 1263 { 1264 uint ix = ref.offset >> uint(2); 1265 Alloc param = a; 1266 uint param_1 = ix + 0u; 1267 uint raw0 = read_mem(param, param_1); 1268 Alloc param_2 = a; 1269 uint param_3 = ix + 1u; 1270 uint raw1 = read_mem(param_2, param_3); 1271 Tile s; 1272 s.tile = TileSegRef(raw0); 1273 s.backdrop = int(raw1); 1274 return s; 1275 } 1276 1277 AnnoColor AnnoColor_read(Alloc a, AnnoColorRef ref) 1278 { 1279 uint ix = ref.offset >> uint(2); 1280 Alloc param = a; 1281 uint param_1 = ix + 0u; 1282 uint raw0 = read_mem(param, param_1); 1283 Alloc param_2 = a; 1284 uint param_3 = ix + 1u; 1285 uint raw1 = read_mem(param_2, param_3); 1286 Alloc param_4 = a; 1287 uint param_5 = ix + 2u; 1288 uint raw2 = read_mem(param_4, param_5); 1289 Alloc param_6 = a; 1290 uint param_7 = ix + 3u; 1291 uint raw3 = read_mem(param_6, param_7); 1292 Alloc param_8 = a; 1293 uint param_9 = ix + 4u; 1294 uint raw4 = read_mem(param_8, param_9); 1295 Alloc param_10 = a; 1296 uint param_11 = ix + 5u; 1297 uint raw5 = read_mem(param_10, param_11); 1298 AnnoColor s; 1299 s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 1300 s.linewidth = uintBitsToFloat(raw4); 1301 s.rgba_color = raw5; 1302 return s; 1303 } 1304 1305 AnnoColor Annotated_Color_read(Alloc a, AnnotatedRef ref) 1306 { 1307 Alloc param = a; 1308 AnnoColorRef param_1 = AnnoColorRef(ref.offset + 4u); 1309 return AnnoColor_read(param, param_1); 1310 } 1311 1312 MallocResult malloc(uint size) 1313 { 1314 uint _279 = atomicAdd(_273.mem_offset, size); 1315 uint offset = _279; 1316 MallocResult r; 1317 r.failed = (offset + size) > uint(int(uint(_273.memory.length())) * 4); 1318 uint param = offset; 1319 uint param_1 = size; 1320 bool param_2 = !r.failed; 1321 r.alloc = new_alloc(param, param_1, param_2); 1322 if (r.failed) 1323 { 1324 uint _308 = atomicMax(_273.mem_error, 1u); 1325 return r; 1326 } 1327 return r; 1328 } 1329 1330 void write_mem(Alloc alloc, uint offset, uint val) 1331 { 1332 Alloc param = alloc; 1333 uint param_1 = offset; 1334 if (!touch_mem(param, param_1)) 1335 { 1336 return; 1337 } 1338 _273.memory[offset] = val; 1339 } 1340 1341 void CmdJump_write(Alloc a, CmdJumpRef ref, CmdJump s) 1342 { 1343 uint ix = ref.offset >> uint(2); 1344 Alloc param = a; 1345 uint param_1 = ix + 0u; 1346 uint param_2 = s.new_ref; 1347 write_mem(param, param_1, param_2); 1348 } 1349 1350 void Cmd_Jump_write(Alloc a, CmdRef ref, CmdJump s) 1351 { 1352 Alloc param = a; 1353 uint param_1 = ref.offset >> uint(2); 1354 uint param_2 = 9u; 1355 write_mem(param, param_1, param_2); 1356 Alloc param_3 = a; 1357 CmdJumpRef param_4 = CmdJumpRef(ref.offset + 4u); 1358 CmdJump param_5 = s; 1359 CmdJump_write(param_3, param_4, param_5); 1360 } 1361 1362 bool alloc_cmd(inout Alloc cmd_alloc, inout CmdRef cmd_ref, inout uint cmd_limit) 1363 { 1364 if (cmd_ref.offset < cmd_limit) 1365 { 1366 return true; 1367 } 1368 uint param = 1024u; 1369 MallocResult _973 = malloc(param); 1370 MallocResult new_cmd = _973; 1371 if (new_cmd.failed) 1372 { 1373 return false; 1374 } 1375 CmdJump jump = CmdJump(new_cmd.alloc.offset); 1376 Alloc param_1 = cmd_alloc; 1377 CmdRef param_2 = cmd_ref; 1378 CmdJump param_3 = jump; 1379 Cmd_Jump_write(param_1, param_2, param_3); 1380 cmd_alloc = new_cmd.alloc; 1381 cmd_ref = CmdRef(cmd_alloc.offset); 1382 cmd_limit = (cmd_alloc.offset + 1024u) - 36u; 1383 return true; 1384 } 1385 1386 uint fill_mode_from_flags(uint flags) 1387 { 1388 return flags & 1u; 1389 } 1390 1391 void CmdFill_write(Alloc a, CmdFillRef ref, CmdFill s) 1392 { 1393 uint ix = ref.offset >> uint(2); 1394 Alloc param = a; 1395 uint param_1 = ix + 0u; 1396 uint param_2 = s.tile_ref; 1397 write_mem(param, param_1, param_2); 1398 Alloc param_3 = a; 1399 uint param_4 = ix + 1u; 1400 uint param_5 = uint(s.backdrop); 1401 write_mem(param_3, param_4, param_5); 1402 } 1403 1404 void Cmd_Fill_write(Alloc a, CmdRef ref, CmdFill s) 1405 { 1406 Alloc param = a; 1407 uint param_1 = ref.offset >> uint(2); 1408 uint param_2 = 1u; 1409 write_mem(param, param_1, param_2); 1410 Alloc param_3 = a; 1411 CmdFillRef param_4 = CmdFillRef(ref.offset + 4u); 1412 CmdFill param_5 = s; 1413 CmdFill_write(param_3, param_4, param_5); 1414 } 1415 1416 void Cmd_Solid_write(Alloc a, CmdRef ref) 1417 { 1418 Alloc param = a; 1419 uint param_1 = ref.offset >> uint(2); 1420 uint param_2 = 3u; 1421 write_mem(param, param_1, param_2); 1422 } 1423 1424 void CmdStroke_write(Alloc a, CmdStrokeRef ref, CmdStroke s) 1425 { 1426 uint ix = ref.offset >> uint(2); 1427 Alloc param = a; 1428 uint param_1 = ix + 0u; 1429 uint param_2 = s.tile_ref; 1430 write_mem(param, param_1, param_2); 1431 Alloc param_3 = a; 1432 uint param_4 = ix + 1u; 1433 uint param_5 = floatBitsToUint(s.half_width); 1434 write_mem(param_3, param_4, param_5); 1435 } 1436 1437 void Cmd_Stroke_write(Alloc a, CmdRef ref, CmdStroke s) 1438 { 1439 Alloc param = a; 1440 uint param_1 = ref.offset >> uint(2); 1441 uint param_2 = 2u; 1442 write_mem(param, param_1, param_2); 1443 Alloc param_3 = a; 1444 CmdStrokeRef param_4 = CmdStrokeRef(ref.offset + 4u); 1445 CmdStroke param_5 = s; 1446 CmdStroke_write(param_3, param_4, param_5); 1447 } 1448 1449 void write_fill(Alloc alloc, inout CmdRef cmd_ref, uint flags, Tile tile, float linewidth) 1450 { 1451 uint param = flags; 1452 if (fill_mode_from_flags(param) == 0u) 1453 { 1454 if (tile.tile.offset != 0u) 1455 { 1456 CmdFill cmd_fill = CmdFill(tile.tile.offset, tile.backdrop); 1457 Alloc param_1 = alloc; 1458 CmdRef param_2 = cmd_ref; 1459 CmdFill param_3 = cmd_fill; 1460 Cmd_Fill_write(param_1, param_2, param_3); 1461 cmd_ref.offset += 12u; 1462 } 1463 else 1464 { 1465 Alloc param_4 = alloc; 1466 CmdRef param_5 = cmd_ref; 1467 Cmd_Solid_write(param_4, param_5); 1468 cmd_ref.offset += 4u; 1469 } 1470 } 1471 else 1472 { 1473 CmdStroke cmd_stroke = CmdStroke(tile.tile.offset, 0.5 * linewidth); 1474 Alloc param_6 = alloc; 1475 CmdRef param_7 = cmd_ref; 1476 CmdStroke param_8 = cmd_stroke; 1477 Cmd_Stroke_write(param_6, param_7, param_8); 1478 cmd_ref.offset += 12u; 1479 } 1480 } 1481 1482 void CmdColor_write(Alloc a, CmdColorRef ref, CmdColor s) 1483 { 1484 uint ix = ref.offset >> uint(2); 1485 Alloc param = a; 1486 uint param_1 = ix + 0u; 1487 uint param_2 = s.rgba_color; 1488 write_mem(param, param_1, param_2); 1489 } 1490 1491 void Cmd_Color_write(Alloc a, CmdRef ref, CmdColor s) 1492 { 1493 Alloc param = a; 1494 uint param_1 = ref.offset >> uint(2); 1495 uint param_2 = 5u; 1496 write_mem(param, param_1, param_2); 1497 Alloc param_3 = a; 1498 CmdColorRef param_4 = CmdColorRef(ref.offset + 4u); 1499 CmdColor param_5 = s; 1500 CmdColor_write(param_3, param_4, param_5); 1501 } 1502 1503 AnnoImage AnnoImage_read(Alloc a, AnnoImageRef ref) 1504 { 1505 uint ix = ref.offset >> uint(2); 1506 Alloc param = a; 1507 uint param_1 = ix + 0u; 1508 uint raw0 = read_mem(param, param_1); 1509 Alloc param_2 = a; 1510 uint param_3 = ix + 1u; 1511 uint raw1 = read_mem(param_2, param_3); 1512 Alloc param_4 = a; 1513 uint param_5 = ix + 2u; 1514 uint raw2 = read_mem(param_4, param_5); 1515 Alloc param_6 = a; 1516 uint param_7 = ix + 3u; 1517 uint raw3 = read_mem(param_6, param_7); 1518 Alloc param_8 = a; 1519 uint param_9 = ix + 4u; 1520 uint raw4 = read_mem(param_8, param_9); 1521 Alloc param_10 = a; 1522 uint param_11 = ix + 5u; 1523 uint raw5 = read_mem(param_10, param_11); 1524 Alloc param_12 = a; 1525 uint param_13 = ix + 6u; 1526 uint raw6 = read_mem(param_12, param_13); 1527 AnnoImage s; 1528 s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 1529 s.linewidth = uintBitsToFloat(raw4); 1530 s.index = raw5; 1531 s.offset = ivec2(int(raw6 << uint(16)) >> 16, int(raw6) >> 16); 1532 return s; 1533 } 1534 1535 AnnoImage Annotated_Image_read(Alloc a, AnnotatedRef ref) 1536 { 1537 Alloc param = a; 1538 AnnoImageRef param_1 = AnnoImageRef(ref.offset + 4u); 1539 return AnnoImage_read(param, param_1); 1540 } 1541 1542 void CmdImage_write(Alloc a, CmdImageRef ref, CmdImage s) 1543 { 1544 uint ix = ref.offset >> uint(2); 1545 Alloc param = a; 1546 uint param_1 = ix + 0u; 1547 uint param_2 = s.index; 1548 write_mem(param, param_1, param_2); 1549 Alloc param_3 = a; 1550 uint param_4 = ix + 1u; 1551 uint param_5 = (uint(s.offset.x) & 65535u) | (uint(s.offset.y) << uint(16)); 1552 write_mem(param_3, param_4, param_5); 1553 } 1554 1555 void Cmd_Image_write(Alloc a, CmdRef ref, CmdImage s) 1556 { 1557 Alloc param = a; 1558 uint param_1 = ref.offset >> uint(2); 1559 uint param_2 = 6u; 1560 write_mem(param, param_1, param_2); 1561 Alloc param_3 = a; 1562 CmdImageRef param_4 = CmdImageRef(ref.offset + 4u); 1563 CmdImage param_5 = s; 1564 CmdImage_write(param_3, param_4, param_5); 1565 } 1566 1567 AnnoBeginClip AnnoBeginClip_read(Alloc a, AnnoBeginClipRef ref) 1568 { 1569 uint ix = ref.offset >> uint(2); 1570 Alloc param = a; 1571 uint param_1 = ix + 0u; 1572 uint raw0 = read_mem(param, param_1); 1573 Alloc param_2 = a; 1574 uint param_3 = ix + 1u; 1575 uint raw1 = read_mem(param_2, param_3); 1576 Alloc param_4 = a; 1577 uint param_5 = ix + 2u; 1578 uint raw2 = read_mem(param_4, param_5); 1579 Alloc param_6 = a; 1580 uint param_7 = ix + 3u; 1581 uint raw3 = read_mem(param_6, param_7); 1582 Alloc param_8 = a; 1583 uint param_9 = ix + 4u; 1584 uint raw4 = read_mem(param_8, param_9); 1585 AnnoBeginClip s; 1586 s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 1587 s.linewidth = uintBitsToFloat(raw4); 1588 return s; 1589 } 1590 1591 AnnoBeginClip Annotated_BeginClip_read(Alloc a, AnnotatedRef ref) 1592 { 1593 Alloc param = a; 1594 AnnoBeginClipRef param_1 = AnnoBeginClipRef(ref.offset + 4u); 1595 return AnnoBeginClip_read(param, param_1); 1596 } 1597 1598 void Cmd_BeginClip_write(Alloc a, CmdRef ref) 1599 { 1600 Alloc param = a; 1601 uint param_1 = ref.offset >> uint(2); 1602 uint param_2 = 7u; 1603 write_mem(param, param_1, param_2); 1604 } 1605 1606 void Cmd_EndClip_write(Alloc a, CmdRef ref) 1607 { 1608 Alloc param = a; 1609 uint param_1 = ref.offset >> uint(2); 1610 uint param_2 = 8u; 1611 write_mem(param, param_1, param_2); 1612 } 1613 1614 void Cmd_End_write(Alloc a, CmdRef ref) 1615 { 1616 Alloc param = a; 1617 uint param_1 = ref.offset >> uint(2); 1618 uint param_2 = 0u; 1619 write_mem(param, param_1, param_2); 1620 } 1621 1622 void alloc_write(Alloc a, uint offset, Alloc alloc) 1623 { 1624 Alloc param = a; 1625 uint param_1 = offset >> uint(2); 1626 uint param_2 = alloc.offset; 1627 write_mem(param, param_1, param_2); 1628 } 1629 1630 void main() 1631 { 1632 uint width_in_bins = ((_1066.conf.width_in_tiles + 16u) - 1u) / 16u; 1633 uint bin_ix = (width_in_bins * gl_WorkGroupID.y) + gl_WorkGroupID.x; 1634 uint partition_ix = 0u; 1635 uint n_partitions = ((_1066.conf.n_elements + 128u) - 1u) / 128u; 1636 uint th_ix = gl_LocalInvocationID.x; 1637 uint bin_tile_x = 16u * gl_WorkGroupID.x; 1638 uint bin_tile_y = 8u * gl_WorkGroupID.y; 1639 uint tile_x = gl_LocalInvocationID.x % 16u; 1640 uint tile_y = gl_LocalInvocationID.x / 16u; 1641 uint this_tile_ix = (((bin_tile_y + tile_y) * _1066.conf.width_in_tiles) + bin_tile_x) + tile_x; 1642 Alloc param; 1643 param.offset = _1066.conf.ptcl_alloc.offset; 1644 uint param_1 = this_tile_ix * 1024u; 1645 uint param_2 = 1024u; 1646 Alloc cmd_alloc = slice_mem(param, param_1, param_2); 1647 CmdRef cmd_ref = CmdRef(cmd_alloc.offset); 1648 uint cmd_limit = (cmd_ref.offset + 1024u) - 36u; 1649 uint clip_depth = 0u; 1650 uint clip_zero_depth = 0u; 1651 uint clip_one_mask = 0u; 1652 uint rd_ix = 0u; 1653 uint wr_ix = 0u; 1654 uint part_start_ix = 0u; 1655 uint ready_ix = 0u; 1656 Alloc param_3 = cmd_alloc; 1657 uint param_4 = 0u; 1658 uint param_5 = 8u; 1659 Alloc scratch_alloc = slice_mem(param_3, param_4, param_5); 1660 cmd_ref.offset += 8u; 1661 uint num_begin_slots = 0u; 1662 uint begin_slot = 0u; 1663 bool mem_ok = _273.mem_error == 0u; 1664 Alloc param_6; 1665 Alloc param_8; 1666 uint _1362; 1667 uint element_ix; 1668 AnnotatedRef ref; 1669 Alloc param_17; 1670 Alloc param_19; 1671 uint tile_count; 1672 Alloc param_26; 1673 uint _1677; 1674 Alloc param_32; 1675 Tile tile_1; 1676 Alloc param_38; 1677 Alloc param_55; 1678 Alloc param_72; 1679 while (true) 1680 { 1681 for (uint i = 0u; i < 4u; i++) 1682 { 1683 sh_bitmaps[i][th_ix] = 0u; 1684 } 1685 bool _1414; 1686 for (;;) 1687 { 1688 if ((ready_ix == wr_ix) && (partition_ix < n_partitions)) 1689 { 1690 part_start_ix = ready_ix; 1691 uint count = 0u; 1692 bool _1208 = th_ix < 128u; 1693 bool _1216; 1694 if (_1208) 1695 { 1696 _1216 = (partition_ix + th_ix) < n_partitions; 1697 } 1698 else 1699 { 1700 _1216 = _1208; 1701 } 1702 if (_1216) 1703 { 1704 uint in_ix = (_1066.conf.bin_alloc.offset >> uint(2)) + ((((partition_ix + th_ix) * 128u) + bin_ix) * 2u); 1705 param_6.offset = _1066.conf.bin_alloc.offset; 1706 uint param_7 = in_ix; 1707 count = read_mem(param_6, param_7); 1708 param_8.offset = _1066.conf.bin_alloc.offset; 1709 uint param_9 = in_ix + 1u; 1710 uint offset = read_mem(param_8, param_9); 1711 uint param_10 = offset; 1712 uint param_11 = count * 4u; 1713 bool param_12 = mem_ok; 1714 sh_part_elements[th_ix] = new_alloc(param_10, param_11, param_12); 1715 } 1716 for (uint i_1 = 0u; i_1 < 7u; i_1++) 1717 { 1718 if (th_ix < 128u) 1719 { 1720 sh_part_count[th_ix] = count; 1721 } 1722 barrier(); 1723 if (th_ix < 128u) 1724 { 1725 if (th_ix >= uint(1 << int(i_1))) 1726 { 1727 count += sh_part_count[th_ix - uint(1 << int(i_1))]; 1728 } 1729 } 1730 barrier(); 1731 } 1732 if (th_ix < 128u) 1733 { 1734 sh_part_count[th_ix] = part_start_ix + count; 1735 } 1736 barrier(); 1737 ready_ix = sh_part_count[127]; 1738 partition_ix += 128u; 1739 } 1740 uint ix = rd_ix + th_ix; 1741 if (((ix >= wr_ix) && (ix < ready_ix)) && mem_ok) 1742 { 1743 uint part_ix = 0u; 1744 for (uint i_2 = 0u; i_2 < 7u; i_2++) 1745 { 1746 uint probe = part_ix + uint(64 >> int(i_2)); 1747 if (ix >= sh_part_count[probe - 1u]) 1748 { 1749 part_ix = probe; 1750 } 1751 } 1752 if (part_ix > 0u) 1753 { 1754 _1362 = sh_part_count[part_ix - 1u]; 1755 } 1756 else 1757 { 1758 _1362 = part_start_ix; 1759 } 1760 ix -= _1362; 1761 Alloc bin_alloc = sh_part_elements[part_ix]; 1762 BinInstanceRef inst_ref = BinInstanceRef(bin_alloc.offset); 1763 BinInstanceRef param_13 = inst_ref; 1764 uint param_14 = ix; 1765 Alloc param_15 = bin_alloc; 1766 BinInstanceRef param_16 = BinInstance_index(param_13, param_14); 1767 BinInstance inst = BinInstance_read(param_15, param_16); 1768 sh_elements[th_ix] = inst.element_ix; 1769 } 1770 barrier(); 1771 wr_ix = min((rd_ix + 128u), ready_ix); 1772 bool _1404 = (wr_ix - rd_ix) < 128u; 1773 if (_1404) 1774 { 1775 _1414 = (wr_ix < ready_ix) || (partition_ix < n_partitions); 1776 } 1777 else 1778 { 1779 _1414 = _1404; 1780 } 1781 if (_1414) 1782 { 1783 continue; 1784 } 1785 else 1786 { 1787 break; 1788 } 1789 } 1790 uint tag = 0u; 1791 if ((th_ix + rd_ix) < wr_ix) 1792 { 1793 element_ix = sh_elements[th_ix]; 1794 ref = AnnotatedRef(_1066.conf.anno_alloc.offset + (element_ix * 32u)); 1795 param_17.offset = _1066.conf.anno_alloc.offset; 1796 AnnotatedRef param_18 = ref; 1797 tag = Annotated_tag(param_17, param_18).tag; 1798 } 1799 switch (tag) 1800 { 1801 case 1u: 1802 case 2u: 1803 case 3u: 1804 case 4u: 1805 { 1806 uint path_ix = element_ix; 1807 param_19.offset = _1066.conf.tile_alloc.offset; 1808 PathRef param_20 = PathRef(_1066.conf.tile_alloc.offset + (path_ix * 12u)); 1809 Path path = Path_read(param_19, param_20); 1810 uint stride = path.bbox.z - path.bbox.x; 1811 sh_tile_stride[th_ix] = stride; 1812 int dx = int(path.bbox.x) - int(bin_tile_x); 1813 int dy = int(path.bbox.y) - int(bin_tile_y); 1814 int x0 = clamp(dx, 0, 16); 1815 int y0 = clamp(dy, 0, 8); 1816 int x1 = clamp(int(path.bbox.z) - int(bin_tile_x), 0, 16); 1817 int y1 = clamp(int(path.bbox.w) - int(bin_tile_y), 0, 8); 1818 sh_tile_width[th_ix] = uint(x1 - x0); 1819 sh_tile_x0[th_ix] = uint(x0); 1820 sh_tile_y0[th_ix] = uint(y0); 1821 tile_count = uint(x1 - x0) * uint(y1 - y0); 1822 uint base = path.tiles.offset - (((uint(dy) * stride) + uint(dx)) * 8u); 1823 sh_tile_base[th_ix] = base; 1824 uint param_21 = path.tiles.offset; 1825 uint param_22 = ((path.bbox.z - path.bbox.x) * (path.bbox.w - path.bbox.y)) * 8u; 1826 bool param_23 = mem_ok; 1827 Alloc path_alloc = new_alloc(param_21, param_22, param_23); 1828 uint param_24 = th_ix; 1829 Alloc param_25 = path_alloc; 1830 write_tile_alloc(param_24, param_25); 1831 break; 1832 } 1833 default: 1834 { 1835 tile_count = 0u; 1836 break; 1837 } 1838 } 1839 sh_tile_count[th_ix] = tile_count; 1840 for (uint i_3 = 0u; i_3 < 7u; i_3++) 1841 { 1842 barrier(); 1843 if (th_ix >= uint(1 << int(i_3))) 1844 { 1845 tile_count += sh_tile_count[th_ix - uint(1 << int(i_3))]; 1846 } 1847 barrier(); 1848 sh_tile_count[th_ix] = tile_count; 1849 } 1850 barrier(); 1851 uint total_tile_count = sh_tile_count[127]; 1852 for (uint ix_1 = th_ix; ix_1 < total_tile_count; ix_1 += 128u) 1853 { 1854 uint el_ix = 0u; 1855 for (uint i_4 = 0u; i_4 < 7u; i_4++) 1856 { 1857 uint probe_1 = el_ix + uint(64 >> int(i_4)); 1858 if (ix_1 >= sh_tile_count[probe_1 - 1u]) 1859 { 1860 el_ix = probe_1; 1861 } 1862 } 1863 AnnotatedRef ref_1 = AnnotatedRef(_1066.conf.anno_alloc.offset + (sh_elements[el_ix] * 32u)); 1864 param_26.offset = _1066.conf.anno_alloc.offset; 1865 AnnotatedRef param_27 = ref_1; 1866 uint tag_1 = Annotated_tag(param_26, param_27).tag; 1867 if (el_ix > 0u) 1868 { 1869 _1677 = sh_tile_count[el_ix - 1u]; 1870 } 1871 else 1872 { 1873 _1677 = 0u; 1874 } 1875 uint seq_ix = ix_1 - _1677; 1876 uint width = sh_tile_width[el_ix]; 1877 uint x = sh_tile_x0[el_ix] + (seq_ix % width); 1878 uint y = sh_tile_y0[el_ix] + (seq_ix / width); 1879 bool include_tile = false; 1880 if ((tag_1 == 3u) || (tag_1 == 4u)) 1881 { 1882 include_tile = true; 1883 } 1884 else 1885 { 1886 if (mem_ok) 1887 { 1888 uint param_28 = el_ix; 1889 bool param_29 = mem_ok; 1890 Alloc param_30 = read_tile_alloc(param_28, param_29); 1891 TileRef param_31 = TileRef(sh_tile_base[el_ix] + (((sh_tile_stride[el_ix] * y) + x) * 8u)); 1892 Tile tile = Tile_read(param_30, param_31); 1893 bool _1743 = tile.tile.offset != 0u; 1894 bool _1750; 1895 if (!_1743) 1896 { 1897 _1750 = tile.backdrop != 0; 1898 } 1899 else 1900 { 1901 _1750 = _1743; 1902 } 1903 include_tile = _1750; 1904 } 1905 } 1906 if (include_tile) 1907 { 1908 uint el_slice = el_ix / 32u; 1909 uint el_mask = uint(1 << int(el_ix & 31u)); 1910 uint _1770 = atomicOr(sh_bitmaps[el_slice][(y * 16u) + x], el_mask); 1911 } 1912 } 1913 barrier(); 1914 uint slice_ix = 0u; 1915 uint bitmap = sh_bitmaps[0][th_ix]; 1916 while (mem_ok) 1917 { 1918 if (bitmap == 0u) 1919 { 1920 slice_ix++; 1921 if (slice_ix == 4u) 1922 { 1923 break; 1924 } 1925 bitmap = sh_bitmaps[slice_ix][th_ix]; 1926 if (bitmap == 0u) 1927 { 1928 continue; 1929 } 1930 } 1931 uint element_ref_ix = (slice_ix * 32u) + uint(findLSB(bitmap)); 1932 uint element_ix_1 = sh_elements[element_ref_ix]; 1933 bitmap &= (bitmap - 1u); 1934 ref = AnnotatedRef(_1066.conf.anno_alloc.offset + (element_ix_1 * 32u)); 1935 param_32.offset = _1066.conf.anno_alloc.offset; 1936 AnnotatedRef param_33 = ref; 1937 AnnotatedTag tag_2 = Annotated_tag(param_32, param_33); 1938 if (clip_zero_depth == 0u) 1939 { 1940 switch (tag_2.tag) 1941 { 1942 case 1u: 1943 { 1944 uint param_34 = element_ref_ix; 1945 bool param_35 = mem_ok; 1946 Alloc param_36 = read_tile_alloc(param_34, param_35); 1947 TileRef param_37 = TileRef(sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u)); 1948 tile_1 = Tile_read(param_36, param_37); 1949 param_38.offset = _1066.conf.anno_alloc.offset; 1950 AnnotatedRef param_39 = ref; 1951 AnnoColor fill = Annotated_Color_read(param_38, param_39); 1952 Alloc param_40 = cmd_alloc; 1953 CmdRef param_41 = cmd_ref; 1954 uint param_42 = cmd_limit; 1955 bool _1883 = alloc_cmd(param_40, param_41, param_42); 1956 cmd_alloc = param_40; 1957 cmd_ref = param_41; 1958 cmd_limit = param_42; 1959 if (!_1883) 1960 { 1961 break; 1962 } 1963 Alloc param_43 = cmd_alloc; 1964 CmdRef param_44 = cmd_ref; 1965 uint param_45 = tag_2.flags; 1966 Tile param_46 = tile_1; 1967 float param_47 = fill.linewidth; 1968 write_fill(param_43, param_44, param_45, param_46, param_47); 1969 cmd_ref = param_44; 1970 Alloc param_48 = cmd_alloc; 1971 CmdRef param_49 = cmd_ref; 1972 CmdColor param_50 = CmdColor(fill.rgba_color); 1973 Cmd_Color_write(param_48, param_49, param_50); 1974 cmd_ref.offset += 8u; 1975 break; 1976 } 1977 case 2u: 1978 { 1979 uint param_51 = element_ref_ix; 1980 bool param_52 = mem_ok; 1981 Alloc param_53 = read_tile_alloc(param_51, param_52); 1982 TileRef param_54 = TileRef(sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u)); 1983 tile_1 = Tile_read(param_53, param_54); 1984 param_55.offset = _1066.conf.anno_alloc.offset; 1985 AnnotatedRef param_56 = ref; 1986 AnnoImage fill_img = Annotated_Image_read(param_55, param_56); 1987 Alloc param_57 = cmd_alloc; 1988 CmdRef param_58 = cmd_ref; 1989 uint param_59 = cmd_limit; 1990 bool _1955 = alloc_cmd(param_57, param_58, param_59); 1991 cmd_alloc = param_57; 1992 cmd_ref = param_58; 1993 cmd_limit = param_59; 1994 if (!_1955) 1995 { 1996 break; 1997 } 1998 Alloc param_60 = cmd_alloc; 1999 CmdRef param_61 = cmd_ref; 2000 uint param_62 = tag_2.flags; 2001 Tile param_63 = tile_1; 2002 float param_64 = fill_img.linewidth; 2003 write_fill(param_60, param_61, param_62, param_63, param_64); 2004 cmd_ref = param_61; 2005 Alloc param_65 = cmd_alloc; 2006 CmdRef param_66 = cmd_ref; 2007 CmdImage param_67 = CmdImage(fill_img.index, fill_img.offset); 2008 Cmd_Image_write(param_65, param_66, param_67); 2009 cmd_ref.offset += 12u; 2010 break; 2011 } 2012 case 3u: 2013 { 2014 uint param_68 = element_ref_ix; 2015 bool param_69 = mem_ok; 2016 Alloc param_70 = read_tile_alloc(param_68, param_69); 2017 TileRef param_71 = TileRef(sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u)); 2018 tile_1 = Tile_read(param_70, param_71); 2019 bool _2016 = tile_1.tile.offset == 0u; 2020 bool _2022; 2021 if (_2016) 2022 { 2023 _2022 = tile_1.backdrop == 0; 2024 } 2025 else 2026 { 2027 _2022 = _2016; 2028 } 2029 if (_2022) 2030 { 2031 clip_zero_depth = clip_depth + 1u; 2032 } 2033 else 2034 { 2035 if ((tile_1.tile.offset == 0u) && (clip_depth < 32u)) 2036 { 2037 clip_one_mask |= uint(1 << int(clip_depth)); 2038 } 2039 else 2040 { 2041 param_72.offset = _1066.conf.anno_alloc.offset; 2042 AnnotatedRef param_73 = ref; 2043 AnnoBeginClip begin_clip = Annotated_BeginClip_read(param_72, param_73); 2044 Alloc param_74 = cmd_alloc; 2045 CmdRef param_75 = cmd_ref; 2046 uint param_76 = cmd_limit; 2047 bool _2057 = alloc_cmd(param_74, param_75, param_76); 2048 cmd_alloc = param_74; 2049 cmd_ref = param_75; 2050 cmd_limit = param_76; 2051 if (!_2057) 2052 { 2053 break; 2054 } 2055 Alloc param_77 = cmd_alloc; 2056 CmdRef param_78 = cmd_ref; 2057 uint param_79 = tag_2.flags; 2058 Tile param_80 = tile_1; 2059 float param_81 = begin_clip.linewidth; 2060 write_fill(param_77, param_78, param_79, param_80, param_81); 2061 cmd_ref = param_78; 2062 Alloc param_82 = cmd_alloc; 2063 CmdRef param_83 = cmd_ref; 2064 Cmd_BeginClip_write(param_82, param_83); 2065 cmd_ref.offset += 4u; 2066 if (clip_depth < 32u) 2067 { 2068 clip_one_mask &= uint(~(1 << int(clip_depth))); 2069 } 2070 begin_slot++; 2071 num_begin_slots = max(num_begin_slots, begin_slot); 2072 } 2073 } 2074 clip_depth++; 2075 break; 2076 } 2077 case 4u: 2078 { 2079 clip_depth--; 2080 bool _2109 = clip_depth >= 32u; 2081 bool _2119; 2082 if (!_2109) 2083 { 2084 _2119 = (clip_one_mask & uint(1 << int(clip_depth))) == 0u; 2085 } 2086 else 2087 { 2088 _2119 = _2109; 2089 } 2090 if (_2119) 2091 { 2092 Alloc param_84 = cmd_alloc; 2093 CmdRef param_85 = cmd_ref; 2094 uint param_86 = cmd_limit; 2095 bool _2128 = alloc_cmd(param_84, param_85, param_86); 2096 cmd_alloc = param_84; 2097 cmd_ref = param_85; 2098 cmd_limit = param_86; 2099 if (!_2128) 2100 { 2101 break; 2102 } 2103 Alloc param_87 = cmd_alloc; 2104 CmdRef param_88 = cmd_ref; 2105 Cmd_Solid_write(param_87, param_88); 2106 cmd_ref.offset += 4u; 2107 begin_slot--; 2108 Alloc param_89 = cmd_alloc; 2109 CmdRef param_90 = cmd_ref; 2110 Cmd_EndClip_write(param_89, param_90); 2111 cmd_ref.offset += 4u; 2112 } 2113 break; 2114 } 2115 } 2116 } 2117 else 2118 { 2119 switch (tag_2.tag) 2120 { 2121 case 3u: 2122 { 2123 clip_depth++; 2124 break; 2125 } 2126 case 4u: 2127 { 2128 if (clip_depth == clip_zero_depth) 2129 { 2130 clip_zero_depth = 0u; 2131 } 2132 clip_depth--; 2133 break; 2134 } 2135 } 2136 } 2137 } 2138 barrier(); 2139 rd_ix += 128u; 2140 if ((rd_ix >= ready_ix) && (partition_ix >= n_partitions)) 2141 { 2142 break; 2143 } 2144 } 2145 bool _2193 = (bin_tile_x + tile_x) < _1066.conf.width_in_tiles; 2146 bool _2202; 2147 if (_2193) 2148 { 2149 _2202 = (bin_tile_y + tile_y) < _1066.conf.height_in_tiles; 2150 } 2151 else 2152 { 2153 _2202 = _2193; 2154 } 2155 if (_2202) 2156 { 2157 Alloc param_91 = cmd_alloc; 2158 CmdRef param_92 = cmd_ref; 2159 Cmd_End_write(param_91, param_92); 2160 if (num_begin_slots > 0u) 2161 { 2162 uint scratch_size = (((num_begin_slots * 32u) * 32u) * 2u) * 4u; 2163 uint param_93 = scratch_size; 2164 MallocResult _2223 = malloc(param_93); 2165 MallocResult scratch = _2223; 2166 Alloc param_94 = scratch_alloc; 2167 uint param_95 = scratch_alloc.offset; 2168 Alloc param_96 = scratch.alloc; 2169 alloc_write(param_94, param_95, param_96); 2170 } 2171 } 2172 } 2173 2174 `, 2175 } 2176 shader_copy_frag = driver.ShaderSources{ 2177 Name: "copy.frag", 2178 Textures: []driver.TextureBinding{{Name: "tex", Binding: 0}}, 2179 GLSL300ES: `#version 300 es 2180 precision mediump float; 2181 precision highp int; 2182 2183 uniform mediump sampler2D tex; 2184 2185 layout(location = 0) out highp vec4 fragColor; 2186 2187 vec3 sRGBtoRGB(vec3 rgb) 2188 { 2189 bvec3 cutoff = greaterThanEqual(rgb, vec3(0.040449999272823333740234375)); 2190 vec3 below = rgb / vec3(12.9200000762939453125); 2191 vec3 above = pow((rgb + vec3(0.054999999701976776123046875)) / vec3(1.05499994754791259765625), vec3(2.400000095367431640625)); 2192 return vec3(cutoff.x ? above.x : below.x, cutoff.y ? above.y : below.y, cutoff.z ? above.z : below.z); 2193 } 2194 2195 void main() 2196 { 2197 vec4 texel = texelFetch(tex, ivec2(gl_FragCoord.xy), 0); 2198 vec3 param = texel.xyz; 2199 vec3 rgb = sRGBtoRGB(param); 2200 fragColor = vec4(rgb, texel.w); 2201 } 2202 2203 `, 2204 GLSL130: `#version 130 2205 2206 uniform sampler2D tex; 2207 2208 out vec4 fragColor; 2209 2210 vec3 sRGBtoRGB(vec3 rgb) 2211 { 2212 bvec3 cutoff = greaterThanEqual(rgb, vec3(0.040449999272823333740234375)); 2213 vec3 below = rgb / vec3(12.9200000762939453125); 2214 vec3 above = pow((rgb + vec3(0.054999999701976776123046875)) / vec3(1.05499994754791259765625), vec3(2.400000095367431640625)); 2215 return vec3(cutoff.x ? above.x : below.x, cutoff.y ? above.y : below.y, cutoff.z ? above.z : below.z); 2216 } 2217 2218 void main() 2219 { 2220 vec4 texel = texelFetch(tex, ivec2(gl_FragCoord.xy), 0); 2221 vec3 param = texel.xyz; 2222 vec3 rgb = sRGBtoRGB(param); 2223 fragColor = vec4(rgb, texel.w); 2224 } 2225 2226 `, 2227 GLSL150: `#version 150 2228 2229 uniform sampler2D tex; 2230 2231 out vec4 fragColor; 2232 2233 vec3 sRGBtoRGB(vec3 rgb) 2234 { 2235 bvec3 cutoff = greaterThanEqual(rgb, vec3(0.040449999272823333740234375)); 2236 vec3 below = rgb / vec3(12.9200000762939453125); 2237 vec3 above = pow((rgb + vec3(0.054999999701976776123046875)) / vec3(1.05499994754791259765625), vec3(2.400000095367431640625)); 2238 return vec3(cutoff.x ? above.x : below.x, cutoff.y ? above.y : below.y, cutoff.z ? above.z : below.z); 2239 } 2240 2241 void main() 2242 { 2243 vec4 texel = texelFetch(tex, ivec2(gl_FragCoord.xy), 0); 2244 vec3 param = texel.xyz; 2245 vec3 rgb = sRGBtoRGB(param); 2246 fragColor = vec4(rgb, texel.w); 2247 } 2248 2249 `, 2250 HLSL: "DXBC\xe6\x89_t\x8b\xfc\xea8\xd9'\xad5.Èk\x01\x00\x00\x00H\x03\x00\x00\x05\x00\x00\x004\x00\x00\x00\xa4\x00\x00\x00\xd8\x00\x00\x00\f\x01\x00\x00\xcc\x02\x00\x00RDEFh\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00@\x00\x00\x00<\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x01\x00\x00\x00\r\x00\x00\x00tex\x00Microsoft (R) HLSL Shader Compiler 10.1\x00ISGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x03\x00\x00SV_Position\x00OSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xabSHDR\xb8\x01\x00\x00@\x00\x00\x00n\x00\x00\x00X\x18\x00\x04\x00p\x10\x00\x00\x00\x00\x00UU\x00\x00d \x00\x042\x10\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x00h\x00\x00\x02\x03\x00\x00\x00\x1b\x00\x00\x052\x00\x10\x00\x00\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x006\x00\x00\b\xc2\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-\x00\x00\a\xf2\x00\x10\x00\x00\x00\x00\x00F\x0e\x10\x00\x00\x00\x00\x00F~\x10\x00\x00\x00\x00\x00\x00\x00\x00\nr\x00\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x00\x02@\x00\x00\xaeGa=\xaeGa=\xaeGa=\x00\x00\x00\x008\x00\x00\nr\x00\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x00\x02@\x00\x00o\xa7r?o\xa7r?o\xa7r?\x00\x00\x00\x00/\x00\x00\x05r\x00\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x008\x00\x00\nr\x00\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x00\x02@\x00\x00\x9a\x99\x19@\x9a\x99\x19@\x9a\x99\x19@\x00\x00\x00\x00\x19\x00\x00\x05r\x00\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x00\x1d\x00\x00\nr\x00\x10\x00\x02\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x00\x02@\x00\x00\xe6\xae%=\xe6\xae%=\xe6\xae%=\x00\x00\x00\x008\x00\x00\nr\x00\x10\x00\x00\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x91\x83\x9e=\x91\x83\x9e=\x91\x83\x9e=\x00\x00\x00\x006\x00\x00\x05\x82 \x10\x00\x00\x00\x00\x00:\x00\x10\x00\x00\x00\x00\x007\x00\x00\tr \x10\x00\x00\x00\x00\x00F\x02\x10\x00\x02\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\r\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 2251 } 2252 shader_copy_vert = driver.ShaderSources{ 2253 Name: "copy.vert", 2254 GLSL100ES: `#version 100 2255 2256 void main() 2257 { 2258 for (int spvDummy6 = 0; spvDummy6 < 1; spvDummy6++) 2259 { 2260 if (gl_VertexID == 0) 2261 { 2262 gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); 2263 break; 2264 } 2265 else if (gl_VertexID == 1) 2266 { 2267 gl_Position = vec4(1.0, 1.0, 0.0, 1.0); 2268 break; 2269 } 2270 else if (gl_VertexID == 2) 2271 { 2272 gl_Position = vec4(-1.0, -1.0, 0.0, 1.0); 2273 break; 2274 } 2275 else if (gl_VertexID == 3) 2276 { 2277 gl_Position = vec4(1.0, -1.0, 0.0, 1.0); 2278 break; 2279 } 2280 } 2281 } 2282 2283 `, 2284 GLSL300ES: `#version 300 es 2285 2286 void main() 2287 { 2288 switch (gl_VertexID) 2289 { 2290 case 0: 2291 { 2292 gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); 2293 break; 2294 } 2295 case 1: 2296 { 2297 gl_Position = vec4(1.0, 1.0, 0.0, 1.0); 2298 break; 2299 } 2300 case 2: 2301 { 2302 gl_Position = vec4(-1.0, -1.0, 0.0, 1.0); 2303 break; 2304 } 2305 case 3: 2306 { 2307 gl_Position = vec4(1.0, -1.0, 0.0, 1.0); 2308 break; 2309 } 2310 } 2311 } 2312 2313 `, 2314 GLSL130: `#version 130 2315 2316 void main() 2317 { 2318 switch (gl_VertexID) 2319 { 2320 case 0: 2321 { 2322 gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); 2323 break; 2324 } 2325 case 1: 2326 { 2327 gl_Position = vec4(1.0, 1.0, 0.0, 1.0); 2328 break; 2329 } 2330 case 2: 2331 { 2332 gl_Position = vec4(-1.0, -1.0, 0.0, 1.0); 2333 break; 2334 } 2335 case 3: 2336 { 2337 gl_Position = vec4(1.0, -1.0, 0.0, 1.0); 2338 break; 2339 } 2340 } 2341 } 2342 2343 `, 2344 GLSL150: `#version 150 2345 2346 void main() 2347 { 2348 switch (gl_VertexID) 2349 { 2350 case 0: 2351 { 2352 gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); 2353 break; 2354 } 2355 case 1: 2356 { 2357 gl_Position = vec4(1.0, 1.0, 0.0, 1.0); 2358 break; 2359 } 2360 case 2: 2361 { 2362 gl_Position = vec4(-1.0, -1.0, 0.0, 1.0); 2363 break; 2364 } 2365 case 3: 2366 { 2367 gl_Position = vec4(1.0, -1.0, 0.0, 1.0); 2368 break; 2369 } 2370 } 2371 } 2372 2373 `, 2374 HLSL: "DXBC\x99\xb4[\xef]IX\xa2Qh\x9f\xb6!\x1cR\xe7\x01\x00\x00\x00\xc0\x02\x00\x00\x05\x00\x00\x004\x00\x00\x00\x80\x00\x00\x00\xb4\x00\x00\x00\xe8\x00\x00\x00D\x02\x00\x00RDEFD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xfe\xff\x00\x01\x00\x00\x1c\x00\x00\x00Microsoft (R) HLSL Shader Compiler 10.1\x00ISGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00SV_VertexID\x00OSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Position\x00SHDRT\x01\x00\x00@\x00\x01\x00U\x00\x00\x00`\x00\x00\x04\x12\x10\x10\x00\x00\x00\x00\x00\x06\x00\x00\x00g\x00\x00\x04\xf2 \x10\x00\x00\x00\x00\x00\x01\x00\x00\x00h\x00\x00\x02\x01\x00\x00\x00L\x00\x00\x03\n\x10\x10\x00\x00\x00\x00\x00\x06\x00\x00\x03\x01@\x00\x00\x00\x00\x00\x006\x00\x00\br\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x80\xbf\x00\x00\x80?\x00\x00\x80?\x00\x00\x00\x00\x02\x00\x00\x01\x06\x00\x00\x03\x01@\x00\x00\x01\x00\x00\x006\x00\x00\br\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x80?\x00\x00\x80?\x00\x00\x80?\x00\x00\x00\x00\x02\x00\x00\x01\x06\x00\x00\x03\x01@\x00\x00\x02\x00\x00\x006\x00\x00\br\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x80\xbf\x00\x00\x80\xbf\x00\x00\x80?\x00\x00\x00\x00\x02\x00\x00\x01\x06\x00\x00\x03\x01@\x00\x00\x03\x00\x00\x006\x00\x00\br\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x80?\x00\x00\x80\xbf\x00\x00\x80?\x00\x00\x00\x00\x02\x00\x00\x01\n\x00\x00\x016\x00\x00\br\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x01\x17\x00\x00\x016\x00\x00\x05\xb2 \x10\x00\x00\x00\x00\x00F\b\x10\x00\x00\x00\x00\x006\x00\x00\x05B \x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 2375 } 2376 shader_cover_frag = [...]driver.ShaderSources{ 2377 { 2378 Name: "cover.frag", 2379 Inputs: []driver.InputLocation{{Name: "vCoverUV", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}, {Name: "vUV", Location: 1, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 2}}, 2380 Uniforms: driver.UniformsReflection{ 2381 Blocks: []driver.UniformBlock{{Name: "Color", Binding: 0}}, 2382 Locations: []driver.UniformLocation{{Name: "_color.color", Type: 0x0, Size: 4, Offset: 0}}, 2383 Size: 16, 2384 }, 2385 Textures: []driver.TextureBinding{{Name: "cover", Binding: 1}}, 2386 GLSL100ES: `#version 100 2387 precision mediump float; 2388 precision highp int; 2389 2390 struct Color 2391 { 2392 vec4 color; 2393 }; 2394 2395 uniform Color _color; 2396 2397 uniform mediump sampler2D cover; 2398 2399 varying highp vec2 vCoverUV; 2400 varying vec2 vUV; 2401 2402 void main() 2403 { 2404 gl_FragData[0] = _color.color; 2405 float cover_1 = min(abs(texture2D(cover, vCoverUV).x), 1.0); 2406 gl_FragData[0] *= cover_1; 2407 } 2408 2409 `, 2410 GLSL300ES: `#version 300 es 2411 precision mediump float; 2412 precision highp int; 2413 2414 layout(std140) uniform Color 2415 { 2416 vec4 color; 2417 } _color; 2418 2419 uniform mediump sampler2D cover; 2420 2421 layout(location = 0) out vec4 fragColor; 2422 in highp vec2 vCoverUV; 2423 in vec2 vUV; 2424 2425 void main() 2426 { 2427 fragColor = _color.color; 2428 float cover_1 = min(abs(texture(cover, vCoverUV).x), 1.0); 2429 fragColor *= cover_1; 2430 } 2431 2432 `, 2433 GLSL130: `#version 130 2434 2435 struct Color 2436 { 2437 vec4 color; 2438 }; 2439 2440 uniform Color _color; 2441 2442 uniform sampler2D cover; 2443 2444 out vec4 fragColor; 2445 in vec2 vCoverUV; 2446 in vec2 vUV; 2447 2448 void main() 2449 { 2450 fragColor = _color.color; 2451 float cover_1 = min(abs(texture(cover, vCoverUV).x), 1.0); 2452 fragColor *= cover_1; 2453 } 2454 2455 `, 2456 GLSL150: `#version 150 2457 2458 layout(std140) uniform Color 2459 { 2460 vec4 color; 2461 } _color; 2462 2463 uniform sampler2D cover; 2464 2465 out vec4 fragColor; 2466 in vec2 vCoverUV; 2467 in vec2 vUV; 2468 2469 void main() 2470 { 2471 fragColor = _color.color; 2472 float cover_1 = min(abs(texture(cover, vCoverUV).x), 1.0); 2473 fragColor *= cover_1; 2474 } 2475 2476 `, 2477 HLSL: "DXBC\x88\x01{\x0f\x94\xca3\xeb\xab߸\xa1\xbfL1\xbf\x01\x00\x00\x00\xa4\x03\x00\x00\x06\x00\x00\x008\x00\x00\x00\xcc\x00\x00\x00\x90\x01\x00\x00\f\x02\x00\x00$\x03\x00\x00p\x03\x00\x00Aon9\x8c\x00\x00\x00\x8c\x00\x00\x00\x00\x02\xff\xffX\x00\x00\x004\x00\x00\x00\x01\x00(\x00\x00\x004\x00\x00\x004\x00\x01\x00$\x00\x00\x004\x00\x01\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\xff\xff\x1f\x00\x00\x02\x00\x00\x00\x80\x00\x00\x0f\xb0\x1f\x00\x00\x02\x00\x00\x00\x90\x00\b\x0f\xa0B\x00\x00\x03\x00\x00\x0f\x80\x00\x00\xe4\xb0\x00\b\xe4\xa0#\x00\x00\x02\x00\x00\x11\x80\x00\x00\x00\x80\x05\x00\x00\x03\x00\x00\x0f\x80\x00\x00\x00\x80\x00\x00\xe4\xa0\x01\x00\x00\x02\x00\b\x0f\x80\x00\x00\xe4\x80\xff\xff\x00\x00SHDR\xbc\x00\x00\x00@\x00\x00\x00/\x00\x00\x00Y\x00\x00\x04F\x8e \x00\x00\x00\x00\x00\x01\x00\x00\x00Z\x00\x00\x03\x00`\x10\x00\x01\x00\x00\x00X\x18\x00\x04\x00p\x10\x00\x01\x00\x00\x00UU\x00\x00b\x10\x00\x032\x10\x10\x00\x00\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x00h\x00\x00\x02\x01\x00\x00\x00E\x00\x00\t\xf2\x00\x10\x00\x00\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x00F~\x10\x00\x01\x00\x00\x00\x00`\x10\x00\x01\x00\x00\x003\x00\x00\b\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x80\x81\x00\x00\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x80?8\x00\x00\b\xf2 \x10\x00\x00\x00\x00\x00\x06\x00\x10\x00\x00\x00\x00\x00F\x8e \x00\x00\x00\x00\x00\x00\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\x10\x01\x00\x00\x01\x00\x00\x00\x98\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00\xe8\x00\x00\x00|\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x00\x00\r\x00\x00\x00\x91\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00_cover_sampler\x00cover\x00Color\x00\xab\x91\x00\x00\x00\x01\x00\x00\x00\xb0\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00_color_color\x00\xab\xab\xab\x01\x00\x03\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00Microsoft (R) HLSL Shader Compiler 10.1\x00ISGND\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x008\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\f\x00\x00\x00TEXCOORD\x00\xab\xab\xabOSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xab", 2478 }, 2479 { 2480 Name: "cover.frag", 2481 Inputs: []driver.InputLocation{{Name: "vCoverUV", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}, {Name: "vUV", Location: 1, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 2}}, 2482 Uniforms: driver.UniformsReflection{ 2483 Blocks: []driver.UniformBlock{{Name: "Gradient", Binding: 0}}, 2484 Locations: []driver.UniformLocation{{Name: "_gradient.color1", Type: 0x0, Size: 4, Offset: 0}, {Name: "_gradient.color2", Type: 0x0, Size: 4, Offset: 16}}, 2485 Size: 32, 2486 }, 2487 Textures: []driver.TextureBinding{{Name: "cover", Binding: 1}}, 2488 GLSL100ES: `#version 100 2489 precision mediump float; 2490 precision highp int; 2491 2492 struct Gradient 2493 { 2494 vec4 color1; 2495 vec4 color2; 2496 }; 2497 2498 uniform Gradient _gradient; 2499 2500 uniform mediump sampler2D cover; 2501 2502 varying vec2 vUV; 2503 varying highp vec2 vCoverUV; 2504 2505 void main() 2506 { 2507 gl_FragData[0] = mix(_gradient.color1, _gradient.color2, vec4(clamp(vUV.x, 0.0, 1.0))); 2508 float cover_1 = min(abs(texture2D(cover, vCoverUV).x), 1.0); 2509 gl_FragData[0] *= cover_1; 2510 } 2511 2512 `, 2513 GLSL300ES: `#version 300 es 2514 precision mediump float; 2515 precision highp int; 2516 2517 layout(std140) uniform Gradient 2518 { 2519 vec4 color1; 2520 vec4 color2; 2521 } _gradient; 2522 2523 uniform mediump sampler2D cover; 2524 2525 layout(location = 0) out vec4 fragColor; 2526 in vec2 vUV; 2527 in highp vec2 vCoverUV; 2528 2529 void main() 2530 { 2531 fragColor = mix(_gradient.color1, _gradient.color2, vec4(clamp(vUV.x, 0.0, 1.0))); 2532 float cover_1 = min(abs(texture(cover, vCoverUV).x), 1.0); 2533 fragColor *= cover_1; 2534 } 2535 2536 `, 2537 GLSL130: `#version 130 2538 2539 struct Gradient 2540 { 2541 vec4 color1; 2542 vec4 color2; 2543 }; 2544 2545 uniform Gradient _gradient; 2546 2547 uniform sampler2D cover; 2548 2549 out vec4 fragColor; 2550 in vec2 vUV; 2551 in vec2 vCoverUV; 2552 2553 void main() 2554 { 2555 fragColor = mix(_gradient.color1, _gradient.color2, vec4(clamp(vUV.x, 0.0, 1.0))); 2556 float cover_1 = min(abs(texture(cover, vCoverUV).x), 1.0); 2557 fragColor *= cover_1; 2558 } 2559 2560 `, 2561 GLSL150: `#version 150 2562 2563 layout(std140) uniform Gradient 2564 { 2565 vec4 color1; 2566 vec4 color2; 2567 } _gradient; 2568 2569 uniform sampler2D cover; 2570 2571 out vec4 fragColor; 2572 in vec2 vUV; 2573 in vec2 vCoverUV; 2574 2575 void main() 2576 { 2577 fragColor = mix(_gradient.color1, _gradient.color2, vec4(clamp(vUV.x, 0.0, 1.0))); 2578 float cover_1 = min(abs(texture(cover, vCoverUV).x), 1.0); 2579 fragColor *= cover_1; 2580 } 2581 2582 `, 2583 HLSL: "DXBCj\xa0\x9e\x8d\x1eÌO\rJ\xea\x8f\x17\x11o\x98\x01\x00\x00\x00\x80\x04\x00\x00\x06\x00\x00\x008\x00\x00\x00\b\x01\x00\x008\x02\x00\x00\xb4\x02\x00\x00\x00\x04\x00\x00L\x04\x00\x00Aon9\xc8\x00\x00\x00\xc8\x00\x00\x00\x00\x02\xff\xff\x94\x00\x00\x004\x00\x00\x00\x01\x00(\x00\x00\x004\x00\x00\x004\x00\x01\x00$\x00\x00\x004\x00\x01\x01\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x02\xff\xff\x1f\x00\x00\x02\x00\x00\x00\x80\x00\x00\x0f\xb0\x1f\x00\x00\x02\x00\x00\x00\x90\x00\b\x0f\xa0B\x00\x00\x03\x00\x00\x0f\x80\x00\x00\xe4\xb0\x00\b\xe4\xa0\x01\x00\x00\x02\x00\x00\x12\x80\x00\x00\xff\xb0\x01\x00\x00\x02\x01\x00\x0f\x80\x00\x00\xe4\xa0\x02\x00\x00\x03\x01\x00\x0f\x80\x01\x00\xe4\x81\x01\x00\xe4\xa0\x04\x00\x00\x04\x01\x00\x0f\x80\x00\x00U\x80\x01\x00\xe4\x80\x00\x00\xe4\xa0#\x00\x00\x02\x00\x00\x11\x80\x00\x00\x00\x80\x05\x00\x00\x03\x00\x00\x0f\x80\x00\x00\x00\x80\x01\x00\xe4\x80\x01\x00\x00\x02\x00\b\x0f\x80\x00\x00\xe4\x80\xff\xff\x00\x00SHDR(\x01\x00\x00@\x00\x00\x00J\x00\x00\x00Y\x00\x00\x04F\x8e \x00\x00\x00\x00\x00\x02\x00\x00\x00Z\x00\x00\x03\x00`\x10\x00\x01\x00\x00\x00X\x18\x00\x04\x00p\x10\x00\x01\x00\x00\x00UU\x00\x00b\x10\x00\x032\x10\x10\x00\x00\x00\x00\x00b\x10\x00\x03B\x10\x10\x00\x00\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x00h\x00\x00\x02\x02\x00\x00\x006 \x00\x05\x12\x00\x10\x00\x00\x00\x00\x00*\x10\x10\x00\x00\x00\x00\x00\x00\x00\x00\n\xf2\x00\x10\x00\x01\x00\x00\x00F\x8e \x80A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x8e \x00\x00\x00\x00\x00\x01\x00\x00\x002\x00\x00\n\xf2\x00\x10\x00\x00\x00\x00\x00\x06\x00\x10\x00\x00\x00\x00\x00F\x0e\x10\x00\x01\x00\x00\x00F\x8e \x00\x00\x00\x00\x00\x00\x00\x00\x00E\x00\x00\t\xf2\x00\x10\x00\x01\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x00F~\x10\x00\x01\x00\x00\x00\x00`\x10\x00\x01\x00\x00\x003\x00\x00\b\x12\x00\x10\x00\x01\x00\x00\x00\n\x00\x10\x80\x81\x00\x00\x00\x01\x00\x00\x00\x01@\x00\x00\x00\x00\x80?8\x00\x00\a\xf2 \x10\x00\x00\x00\x00\x00F\x0e\x10\x00\x00\x00\x00\x00\x06\x00\x10\x00\x01\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\a\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEFD\x01\x00\x00\x01\x00\x00\x00\x9c\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00\x19\x01\x00\x00|\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x00\x00\r\x00\x00\x00\x91\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00_cover_sampler\x00cover\x00Gradient\x00\xab\xab\x91\x00\x00\x00\x02\x00\x00\x00\xb4\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\b\x01\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00_gradient_color1\x00\xab\xab\xab\x01\x00\x03\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00_gradient_color2\x00Microsoft (R) HLSL Shader Compiler 10.1\x00\xab\xab\xabISGND\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x008\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\f\x04\x00\x00TEXCOORD\x00\xab\xab\xabOSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xab", 2584 }, 2585 { 2586 Name: "cover.frag", 2587 Inputs: []driver.InputLocation{{Name: "vCoverUV", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}, {Name: "vUV", Location: 1, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 2}}, 2588 Textures: []driver.TextureBinding{{Name: "tex", Binding: 0}, {Name: "cover", Binding: 1}}, 2589 GLSL100ES: `#version 100 2590 precision mediump float; 2591 precision highp int; 2592 2593 uniform mediump sampler2D tex; 2594 uniform mediump sampler2D cover; 2595 2596 varying vec2 vUV; 2597 varying highp vec2 vCoverUV; 2598 2599 void main() 2600 { 2601 gl_FragData[0] = texture2D(tex, vUV); 2602 float cover_1 = min(abs(texture2D(cover, vCoverUV).x), 1.0); 2603 gl_FragData[0] *= cover_1; 2604 } 2605 2606 `, 2607 GLSL300ES: `#version 300 es 2608 precision mediump float; 2609 precision highp int; 2610 2611 uniform mediump sampler2D tex; 2612 uniform mediump sampler2D cover; 2613 2614 layout(location = 0) out vec4 fragColor; 2615 in vec2 vUV; 2616 in highp vec2 vCoverUV; 2617 2618 void main() 2619 { 2620 fragColor = texture(tex, vUV); 2621 float cover_1 = min(abs(texture(cover, vCoverUV).x), 1.0); 2622 fragColor *= cover_1; 2623 } 2624 2625 `, 2626 GLSL130: `#version 130 2627 2628 uniform sampler2D tex; 2629 uniform sampler2D cover; 2630 2631 out vec4 fragColor; 2632 in vec2 vUV; 2633 in vec2 vCoverUV; 2634 2635 void main() 2636 { 2637 fragColor = texture(tex, vUV); 2638 float cover_1 = min(abs(texture(cover, vCoverUV).x), 1.0); 2639 fragColor *= cover_1; 2640 } 2641 2642 `, 2643 GLSL150: `#version 150 2644 2645 uniform sampler2D tex; 2646 uniform sampler2D cover; 2647 2648 out vec4 fragColor; 2649 in vec2 vUV; 2650 in vec2 vCoverUV; 2651 2652 void main() 2653 { 2654 fragColor = texture(tex, vUV); 2655 float cover_1 = min(abs(texture(cover, vCoverUV).x), 1.0); 2656 fragColor *= cover_1; 2657 } 2658 2659 `, 2660 HLSL: "DXBC\x99\x16l`\xf6:k\xa2Y$\xa1,\xfd\xcdJE\x01\x00\x00\x00\xd8\x03\x00\x00\x06\x00\x00\x008\x00\x00\x00\xec\x00\x00\x00\xe8\x01\x00\x00d\x02\x00\x00X\x03\x00\x00\xa4\x03\x00\x00Aon9\xac\x00\x00\x00\xac\x00\x00\x00\x00\x02\xff\xff\x80\x00\x00\x00,\x00\x00\x00\x00\x00,\x00\x00\x00,\x00\x00\x00,\x00\x02\x00$\x00\x00\x00,\x00\x00\x00\x00\x00\x01\x01\x01\x00\x00\x02\xff\xff\x1f\x00\x00\x02\x00\x00\x00\x80\x00\x00\x0f\xb0\x1f\x00\x00\x02\x00\x00\x00\x90\x00\b\x0f\xa0\x1f\x00\x00\x02\x00\x00\x00\x90\x01\b\x0f\xa0\x01\x00\x00\x02\x00\x00\x03\x80\x00\x00\x1b\xb0B\x00\x00\x03\x00\x00\x0f\x80\x00\x00\xe4\x80\x00\b\xe4\xa0B\x00\x00\x03\x01\x00\x0f\x80\x00\x00\xe4\xb0\x01\b\xe4\xa0#\x00\x00\x02\x01\x00\x11\x80\x01\x00\x00\x80\x05\x00\x00\x03\x00\x00\x0f\x80\x00\x00\xe4\x80\x01\x00\x00\x80\x01\x00\x00\x02\x00\b\x0f\x80\x00\x00\xe4\x80\xff\xff\x00\x00SHDR\xf4\x00\x00\x00@\x00\x00\x00=\x00\x00\x00Z\x00\x00\x03\x00`\x10\x00\x00\x00\x00\x00Z\x00\x00\x03\x00`\x10\x00\x01\x00\x00\x00X\x18\x00\x04\x00p\x10\x00\x00\x00\x00\x00UU\x00\x00X\x18\x00\x04\x00p\x10\x00\x01\x00\x00\x00UU\x00\x00b\x10\x00\x032\x10\x10\x00\x00\x00\x00\x00b\x10\x00\x03\xc2\x10\x10\x00\x00\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x00h\x00\x00\x02\x02\x00\x00\x00E\x00\x00\t\xf2\x00\x10\x00\x00\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x00F~\x10\x00\x01\x00\x00\x00\x00`\x10\x00\x01\x00\x00\x003\x00\x00\b\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x80\x81\x00\x00\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x80?E\x00\x00\t\xf2\x00\x10\x00\x01\x00\x00\x00\xe6\x1a\x10\x00\x00\x00\x00\x00F~\x10\x00\x00\x00\x00\x00\x00`\x10\x00\x00\x00\x00\x008\x00\x00\a\xf2 \x10\x00\x00\x00\x00\x00\x06\x00\x10\x00\x00\x00\x00\x00F\x0e\x10\x00\x01\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\x05\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00\xc2\x00\x00\x00\x9c\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\xa9\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\xb8\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x01\x00\x00\x00\r\x00\x00\x00\xbc\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x00\x00\r\x00\x00\x00_tex_sampler\x00_cover_sampler\x00tex\x00cover\x00Microsoft (R) HLSL Shader Compiler 10.1\x00\xab\xabISGND\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x008\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\f\f\x00\x00TEXCOORD\x00\xab\xab\xabOSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xab", 2661 }, 2662 } 2663 shader_cover_vert = driver.ShaderSources{ 2664 Name: "cover.vert", 2665 Inputs: []driver.InputLocation{{Name: "pos", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}, {Name: "uv", Location: 1, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 2}}, 2666 Uniforms: driver.UniformsReflection{ 2667 Blocks: []driver.UniformBlock{{Name: "Block", Binding: 0}}, 2668 Locations: []driver.UniformLocation{{Name: "_block.transform", Type: 0x0, Size: 4, Offset: 0}, {Name: "_block.uvCoverTransform", Type: 0x0, Size: 4, Offset: 16}, {Name: "_block.uvTransformR1", Type: 0x0, Size: 4, Offset: 32}, {Name: "_block.uvTransformR2", Type: 0x0, Size: 4, Offset: 48}, {Name: "_block.z", Type: 0x0, Size: 1, Offset: 64}}, 2669 Size: 68, 2670 }, 2671 GLSL100ES: `#version 100 2672 2673 struct m3x2 2674 { 2675 vec3 r0; 2676 vec3 r1; 2677 }; 2678 2679 struct Block 2680 { 2681 vec4 transform; 2682 vec4 uvCoverTransform; 2683 vec4 uvTransformR1; 2684 vec4 uvTransformR2; 2685 float z; 2686 }; 2687 2688 uniform Block _block; 2689 2690 attribute vec2 pos; 2691 varying vec2 vUV; 2692 attribute vec2 uv; 2693 varying vec2 vCoverUV; 2694 2695 vec4 toClipSpace(vec4 pos_1) 2696 { 2697 return pos_1; 2698 } 2699 2700 vec3 transform3x2(m3x2 t, vec3 v) 2701 { 2702 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 2703 } 2704 2705 void main() 2706 { 2707 vec4 param = vec4((pos * _block.transform.xy) + _block.transform.zw, _block.z, 1.0); 2708 gl_Position = toClipSpace(param); 2709 m3x2 param_1 = m3x2(_block.uvTransformR1.xyz, _block.uvTransformR2.xyz); 2710 vec3 param_2 = vec3(uv, 1.0); 2711 vUV = transform3x2(param_1, param_2).xy; 2712 m3x2 param_3 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 2713 vec3 param_4 = vec3(uv, 1.0); 2714 vec3 uv3 = transform3x2(param_3, param_4); 2715 vCoverUV = ((uv3 * vec3(_block.uvCoverTransform.xy, 1.0)) + vec3(_block.uvCoverTransform.zw, 0.0)).xy; 2716 } 2717 2718 `, 2719 GLSL300ES: `#version 300 es 2720 2721 struct m3x2 2722 { 2723 vec3 r0; 2724 vec3 r1; 2725 }; 2726 2727 layout(std140) uniform Block 2728 { 2729 vec4 transform; 2730 vec4 uvCoverTransform; 2731 vec4 uvTransformR1; 2732 vec4 uvTransformR2; 2733 float z; 2734 } _block; 2735 2736 layout(location = 0) in vec2 pos; 2737 out vec2 vUV; 2738 layout(location = 1) in vec2 uv; 2739 out vec2 vCoverUV; 2740 2741 vec4 toClipSpace(vec4 pos_1) 2742 { 2743 return pos_1; 2744 } 2745 2746 vec3 transform3x2(m3x2 t, vec3 v) 2747 { 2748 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 2749 } 2750 2751 void main() 2752 { 2753 vec4 param = vec4((pos * _block.transform.xy) + _block.transform.zw, _block.z, 1.0); 2754 gl_Position = toClipSpace(param); 2755 m3x2 param_1 = m3x2(_block.uvTransformR1.xyz, _block.uvTransformR2.xyz); 2756 vec3 param_2 = vec3(uv, 1.0); 2757 vUV = transform3x2(param_1, param_2).xy; 2758 m3x2 param_3 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 2759 vec3 param_4 = vec3(uv, 1.0); 2760 vec3 uv3 = transform3x2(param_3, param_4); 2761 vCoverUV = ((uv3 * vec3(_block.uvCoverTransform.xy, 1.0)) + vec3(_block.uvCoverTransform.zw, 0.0)).xy; 2762 } 2763 2764 `, 2765 GLSL130: `#version 130 2766 2767 struct m3x2 2768 { 2769 vec3 r0; 2770 vec3 r1; 2771 }; 2772 2773 struct Block 2774 { 2775 vec4 transform; 2776 vec4 uvCoverTransform; 2777 vec4 uvTransformR1; 2778 vec4 uvTransformR2; 2779 float z; 2780 }; 2781 2782 uniform Block _block; 2783 2784 in vec2 pos; 2785 out vec2 vUV; 2786 in vec2 uv; 2787 out vec2 vCoverUV; 2788 2789 vec4 toClipSpace(vec4 pos_1) 2790 { 2791 return pos_1; 2792 } 2793 2794 vec3 transform3x2(m3x2 t, vec3 v) 2795 { 2796 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 2797 } 2798 2799 void main() 2800 { 2801 vec4 param = vec4((pos * _block.transform.xy) + _block.transform.zw, _block.z, 1.0); 2802 gl_Position = toClipSpace(param); 2803 m3x2 param_1 = m3x2(_block.uvTransformR1.xyz, _block.uvTransformR2.xyz); 2804 vec3 param_2 = vec3(uv, 1.0); 2805 vUV = transform3x2(param_1, param_2).xy; 2806 m3x2 param_3 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 2807 vec3 param_4 = vec3(uv, 1.0); 2808 vec3 uv3 = transform3x2(param_3, param_4); 2809 vCoverUV = ((uv3 * vec3(_block.uvCoverTransform.xy, 1.0)) + vec3(_block.uvCoverTransform.zw, 0.0)).xy; 2810 } 2811 2812 `, 2813 GLSL150: `#version 150 2814 2815 struct m3x2 2816 { 2817 vec3 r0; 2818 vec3 r1; 2819 }; 2820 2821 layout(std140) uniform Block 2822 { 2823 vec4 transform; 2824 vec4 uvCoverTransform; 2825 vec4 uvTransformR1; 2826 vec4 uvTransformR2; 2827 float z; 2828 } _block; 2829 2830 in vec2 pos; 2831 out vec2 vUV; 2832 in vec2 uv; 2833 out vec2 vCoverUV; 2834 2835 vec4 toClipSpace(vec4 pos_1) 2836 { 2837 return pos_1; 2838 } 2839 2840 vec3 transform3x2(m3x2 t, vec3 v) 2841 { 2842 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 2843 } 2844 2845 void main() 2846 { 2847 vec4 param = vec4((pos * _block.transform.xy) + _block.transform.zw, _block.z, 1.0); 2848 gl_Position = toClipSpace(param); 2849 m3x2 param_1 = m3x2(_block.uvTransformR1.xyz, _block.uvTransformR2.xyz); 2850 vec3 param_2 = vec3(uv, 1.0); 2851 vUV = transform3x2(param_1, param_2).xy; 2852 m3x2 param_3 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 2853 vec3 param_4 = vec3(uv, 1.0); 2854 vec3 uv3 = transform3x2(param_3, param_4); 2855 vCoverUV = ((uv3 * vec3(_block.uvCoverTransform.xy, 1.0)) + vec3(_block.uvCoverTransform.zw, 0.0)).xy; 2856 } 2857 2858 `, 2859 HLSL: "DXBCx\xefn{F\v\x88%\xc6\x05\x8f4h\xe4\xaaP\x01\x00\x00\x00\xd8\x05\x00\x00\x06\x00\x00\x008\x00\x00\x00x\x01\x00\x00\x1c\x03\x00\x00\x98\x03\x00\x00\x1c\x05\x00\x00h\x05\x00\x00Aon98\x01\x00\x008\x01\x00\x00\x00\x02\xfe\xff\x04\x01\x00\x004\x00\x00\x00\x01\x00$\x00\x00\x000\x00\x00\x000\x00\x00\x00$\x00\x01\x000\x00\x00\x00\x00\x00\x05\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xfe\xffQ\x00\x00\x05\x06\x00\x0f\xa0\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x80\xbf\x00\x00\x00?\x1f\x00\x00\x02\x05\x00\x00\x80\x00\x00\x0f\x90\x1f\x00\x00\x02\x05\x00\x01\x80\x01\x00\x0f\x90\x04\x00\x00\x04\x00\x00\a\x80\x01\x00Đ\x06\x00Р\x06\x00Š\b\x00\x00\x03\x00\x00\b\xe0\x03\x00\xe4\xa0\x00\x00\xe4\x80\b\x00\x00\x03\x00\x00\x04\xe0\x04\x00\xe4\xa0\x00\x00\xe4\x80\x04\x00\x00\x04\x00\x00\x03\x80\x01\x00\xe1\x90\x06\x00\xe4\xa0\x06\x00\xe1\xa0\x05\x00\x00\x03\x00\x00\x03\x80\x00\x00\xe4\x80\x06\x00\xe2\xa0\x02\x00\x00\x03\x00\x00\x02\x80\x00\x00U\x80\x00\x00\x00\x80\x01\x00\x00\x02\x00\x00\x01\x80\x01\x00\x00\x90\x04\x00\x00\x04\x00\x00\x03\xe0\x00\x00\xe4\x80\x02\x00\xe4\xa0\x02\x00\xee\xa0\x04\x00\x00\x04\x00\x00\x03\x80\x00\x00\xe4\x90\x01\x00\xe4\xa0\x01\x00\xee\xa0\x02\x00\x00\x03\x00\x00\x03\xc0\x00\x00\xe4\x80\x00\x00\xe4\xa0\x01\x00\x00\x02\x00\x00\v\x80\x06\x00\xe4\xa0\x04\x00\x00\x04\x00\x00\f\xc0\x05\x00\x00\xa0\x00\x00t\x80\x00\x004\x80\xff\xff\x00\x00SHDR\x9c\x01\x00\x00@\x00\x01\x00g\x00\x00\x00Y\x00\x00\x04F\x8e \x00\x00\x00\x00\x00\x05\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x00\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x01\x00\x00\x00e\x00\x00\x032 \x10\x00\x00\x00\x00\x00e\x00\x00\x03\xc2 \x10\x00\x00\x00\x00\x00g\x00\x00\x04\xf2 \x10\x00\x01\x00\x00\x00\x01\x00\x00\x00h\x00\x00\x02\x02\x00\x00\x006\x00\x00\x05\x12\x00\x10\x00\x00\x00\x00\x00\n\x10\x10\x00\x01\x00\x00\x006\x00\x00\x052\x00\x10\x00\x01\x00\x00\x00F\x10\x10\x00\x01\x00\x00\x006\x00\x00\x05B\x00\x10\x00\x01\x00\x00\x00\x01@\x00\x00\x00\x00\x80?\x0f\x00\x00\n\"\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x80\xbf\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x96\x05\x10\x00\x01\x00\x00\x002\x00\x00\v2 \x10\x00\x00\x00\x00\x00F\x00\x10\x00\x00\x00\x00\x00F\x80 \x00\x00\x00\x00\x00\x01\x00\x00\x00\xe6\x8a \x00\x00\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\bB \x10\x00\x00\x00\x00\x00F\x82 \x00\x00\x00\x00\x00\x02\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x00\x10\x00\x00\b\x82 \x10\x00\x00\x00\x00\x00F\x82 \x00\x00\x00\x00\x00\x03\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x002\x00\x00\v2 \x10\x00\x01\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x00F\x80 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x8a \x00\x00\x00\x00\x00\x00\x00\x00\x002\x00\x00\nB \x10\x00\x01\x00\x00\x00\n\x80 \x00\x00\x00\x00\x00\x04\x00\x00\x00\x01@\x00\x00\x00\x00\x00?\x01@\x00\x00\x00\x00\x00?6\x00\x00\x05\x82 \x10\x00\x01\x00\x00\x00\x01@\x00\x00\x00\x00\x80?>\x00\x00\x01STATt\x00\x00\x00\v\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF|\x01\x00\x00\x01\x00\x00\x00D\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xfe\xff\x00\x01\x00\x00T\x01\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00Block\x00\xab\xab<\x00\x00\x00\x05\x00\x00\x00\\\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\xf8\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\x10\x01\x00\x00 \x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00%\x01\x00\x000\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00:\x01\x00\x00@\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00D\x01\x00\x00\x00\x00\x00\x00_block_transform\x00\xab\xab\xab\x01\x00\x03\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00_block_uvCoverTransform\x00_block_uvTransformR1\x00_block_uvTransformR2\x00_block_z\x00\xab\x00\x00\x03\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00Microsoft (R) HLSL Shader Compiler 10.1\x00ISGND\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x008\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x03\x00\x00TEXCOORD\x00\xab\xab\xabOSGNh\x00\x00\x00\x03\x00\x00\x00\b\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\f\x00\x00P\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\f\x03\x00\x00Y\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x0f\x00\x00\x00TEXCOORD\x00SV_Position\x00\xab\xab\xab", 2860 } 2861 shader_elements_comp = driver.ShaderSources{ 2862 Name: "elements.comp", 2863 GLSL310ES: `#version 310 es 2864 layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; 2865 2866 struct Alloc 2867 { 2868 uint offset; 2869 }; 2870 2871 struct ElementRef 2872 { 2873 uint offset; 2874 }; 2875 2876 struct LineSegRef 2877 { 2878 uint offset; 2879 }; 2880 2881 struct LineSeg 2882 { 2883 vec2 p0; 2884 vec2 p1; 2885 }; 2886 2887 struct QuadSegRef 2888 { 2889 uint offset; 2890 }; 2891 2892 struct QuadSeg 2893 { 2894 vec2 p0; 2895 vec2 p1; 2896 vec2 p2; 2897 }; 2898 2899 struct CubicSegRef 2900 { 2901 uint offset; 2902 }; 2903 2904 struct CubicSeg 2905 { 2906 vec2 p0; 2907 vec2 p1; 2908 vec2 p2; 2909 vec2 p3; 2910 }; 2911 2912 struct FillColorRef 2913 { 2914 uint offset; 2915 }; 2916 2917 struct FillColor 2918 { 2919 uint rgba_color; 2920 }; 2921 2922 struct FillImageRef 2923 { 2924 uint offset; 2925 }; 2926 2927 struct FillImage 2928 { 2929 uint index; 2930 ivec2 offset; 2931 }; 2932 2933 struct SetLineWidthRef 2934 { 2935 uint offset; 2936 }; 2937 2938 struct SetLineWidth 2939 { 2940 float width; 2941 }; 2942 2943 struct TransformRef 2944 { 2945 uint offset; 2946 }; 2947 2948 struct Transform 2949 { 2950 vec4 mat; 2951 vec2 translate; 2952 }; 2953 2954 struct ClipRef 2955 { 2956 uint offset; 2957 }; 2958 2959 struct Clip 2960 { 2961 vec4 bbox; 2962 }; 2963 2964 struct SetFillModeRef 2965 { 2966 uint offset; 2967 }; 2968 2969 struct SetFillMode 2970 { 2971 uint fill_mode; 2972 }; 2973 2974 struct ElementTag 2975 { 2976 uint tag; 2977 uint flags; 2978 }; 2979 2980 struct StateRef 2981 { 2982 uint offset; 2983 }; 2984 2985 struct State 2986 { 2987 vec4 mat; 2988 vec2 translate; 2989 vec4 bbox; 2990 float linewidth; 2991 uint flags; 2992 uint path_count; 2993 uint pathseg_count; 2994 uint trans_count; 2995 }; 2996 2997 struct AnnoImageRef 2998 { 2999 uint offset; 3000 }; 3001 3002 struct AnnoImage 3003 { 3004 vec4 bbox; 3005 float linewidth; 3006 uint index; 3007 ivec2 offset; 3008 }; 3009 3010 struct AnnoColorRef 3011 { 3012 uint offset; 3013 }; 3014 3015 struct AnnoColor 3016 { 3017 vec4 bbox; 3018 float linewidth; 3019 uint rgba_color; 3020 }; 3021 3022 struct AnnoBeginClipRef 3023 { 3024 uint offset; 3025 }; 3026 3027 struct AnnoBeginClip 3028 { 3029 vec4 bbox; 3030 float linewidth; 3031 }; 3032 3033 struct AnnoEndClipRef 3034 { 3035 uint offset; 3036 }; 3037 3038 struct AnnoEndClip 3039 { 3040 vec4 bbox; 3041 }; 3042 3043 struct AnnotatedRef 3044 { 3045 uint offset; 3046 }; 3047 3048 struct PathCubicRef 3049 { 3050 uint offset; 3051 }; 3052 3053 struct PathCubic 3054 { 3055 vec2 p0; 3056 vec2 p1; 3057 vec2 p2; 3058 vec2 p3; 3059 uint path_ix; 3060 uint trans_ix; 3061 vec2 stroke; 3062 }; 3063 3064 struct PathSegRef 3065 { 3066 uint offset; 3067 }; 3068 3069 struct TransformSegRef 3070 { 3071 uint offset; 3072 }; 3073 3074 struct TransformSeg 3075 { 3076 vec4 mat; 3077 vec2 translate; 3078 }; 3079 3080 struct Config 3081 { 3082 uint n_elements; 3083 uint n_pathseg; 3084 uint width_in_tiles; 3085 uint height_in_tiles; 3086 Alloc tile_alloc; 3087 Alloc bin_alloc; 3088 Alloc ptcl_alloc; 3089 Alloc pathseg_alloc; 3090 Alloc anno_alloc; 3091 Alloc trans_alloc; 3092 }; 3093 3094 layout(binding = 0, std430) buffer Memory 3095 { 3096 uint mem_offset; 3097 uint mem_error; 3098 uint memory[]; 3099 } _294; 3100 3101 layout(binding = 2, std430) readonly buffer SceneBuf 3102 { 3103 uint scene[]; 3104 } _323; 3105 3106 layout(binding = 3, std430) coherent buffer StateBuf 3107 { 3108 uint part_counter; 3109 uint state[]; 3110 } _779; 3111 3112 layout(binding = 1, std430) readonly buffer ConfigBuf 3113 { 3114 Config conf; 3115 } _2429; 3116 3117 shared uint sh_part_ix; 3118 shared State sh_state[32]; 3119 shared State sh_prefix; 3120 3121 ElementTag Element_tag(ElementRef ref) 3122 { 3123 uint tag_and_flags = _323.scene[ref.offset >> uint(2)]; 3124 return ElementTag(tag_and_flags & 65535u, tag_and_flags >> uint(16)); 3125 } 3126 3127 LineSeg LineSeg_read(LineSegRef ref) 3128 { 3129 uint ix = ref.offset >> uint(2); 3130 uint raw0 = _323.scene[ix + 0u]; 3131 uint raw1 = _323.scene[ix + 1u]; 3132 uint raw2 = _323.scene[ix + 2u]; 3133 uint raw3 = _323.scene[ix + 3u]; 3134 LineSeg s; 3135 s.p0 = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1)); 3136 s.p1 = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 3137 return s; 3138 } 3139 3140 LineSeg Element_Line_read(ElementRef ref) 3141 { 3142 LineSegRef param = LineSegRef(ref.offset + 4u); 3143 return LineSeg_read(param); 3144 } 3145 3146 QuadSeg QuadSeg_read(QuadSegRef ref) 3147 { 3148 uint ix = ref.offset >> uint(2); 3149 uint raw0 = _323.scene[ix + 0u]; 3150 uint raw1 = _323.scene[ix + 1u]; 3151 uint raw2 = _323.scene[ix + 2u]; 3152 uint raw3 = _323.scene[ix + 3u]; 3153 uint raw4 = _323.scene[ix + 4u]; 3154 uint raw5 = _323.scene[ix + 5u]; 3155 QuadSeg s; 3156 s.p0 = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1)); 3157 s.p1 = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 3158 s.p2 = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5)); 3159 return s; 3160 } 3161 3162 QuadSeg Element_Quad_read(ElementRef ref) 3163 { 3164 QuadSegRef param = QuadSegRef(ref.offset + 4u); 3165 return QuadSeg_read(param); 3166 } 3167 3168 CubicSeg CubicSeg_read(CubicSegRef ref) 3169 { 3170 uint ix = ref.offset >> uint(2); 3171 uint raw0 = _323.scene[ix + 0u]; 3172 uint raw1 = _323.scene[ix + 1u]; 3173 uint raw2 = _323.scene[ix + 2u]; 3174 uint raw3 = _323.scene[ix + 3u]; 3175 uint raw4 = _323.scene[ix + 4u]; 3176 uint raw5 = _323.scene[ix + 5u]; 3177 uint raw6 = _323.scene[ix + 6u]; 3178 uint raw7 = _323.scene[ix + 7u]; 3179 CubicSeg s; 3180 s.p0 = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1)); 3181 s.p1 = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 3182 s.p2 = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5)); 3183 s.p3 = vec2(uintBitsToFloat(raw6), uintBitsToFloat(raw7)); 3184 return s; 3185 } 3186 3187 CubicSeg Element_Cubic_read(ElementRef ref) 3188 { 3189 CubicSegRef param = CubicSegRef(ref.offset + 4u); 3190 return CubicSeg_read(param); 3191 } 3192 3193 SetLineWidth SetLineWidth_read(SetLineWidthRef ref) 3194 { 3195 uint ix = ref.offset >> uint(2); 3196 uint raw0 = _323.scene[ix + 0u]; 3197 SetLineWidth s; 3198 s.width = uintBitsToFloat(raw0); 3199 return s; 3200 } 3201 3202 SetLineWidth Element_SetLineWidth_read(ElementRef ref) 3203 { 3204 SetLineWidthRef param = SetLineWidthRef(ref.offset + 4u); 3205 return SetLineWidth_read(param); 3206 } 3207 3208 Transform Transform_read(TransformRef ref) 3209 { 3210 uint ix = ref.offset >> uint(2); 3211 uint raw0 = _323.scene[ix + 0u]; 3212 uint raw1 = _323.scene[ix + 1u]; 3213 uint raw2 = _323.scene[ix + 2u]; 3214 uint raw3 = _323.scene[ix + 3u]; 3215 uint raw4 = _323.scene[ix + 4u]; 3216 uint raw5 = _323.scene[ix + 5u]; 3217 Transform s; 3218 s.mat = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 3219 s.translate = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5)); 3220 return s; 3221 } 3222 3223 Transform Element_Transform_read(ElementRef ref) 3224 { 3225 TransformRef param = TransformRef(ref.offset + 4u); 3226 return Transform_read(param); 3227 } 3228 3229 SetFillMode SetFillMode_read(SetFillModeRef ref) 3230 { 3231 uint ix = ref.offset >> uint(2); 3232 uint raw0 = _323.scene[ix + 0u]; 3233 SetFillMode s; 3234 s.fill_mode = raw0; 3235 return s; 3236 } 3237 3238 SetFillMode Element_SetFillMode_read(ElementRef ref) 3239 { 3240 SetFillModeRef param = SetFillModeRef(ref.offset + 4u); 3241 return SetFillMode_read(param); 3242 } 3243 3244 State map_element(ElementRef ref) 3245 { 3246 ElementRef param = ref; 3247 uint tag = Element_tag(param).tag; 3248 State c; 3249 c.bbox = vec4(0.0); 3250 c.mat = vec4(1.0, 0.0, 0.0, 1.0); 3251 c.translate = vec2(0.0); 3252 c.linewidth = 1.0; 3253 c.flags = 0u; 3254 c.path_count = 0u; 3255 c.pathseg_count = 0u; 3256 c.trans_count = 0u; 3257 switch (tag) 3258 { 3259 case 1u: 3260 { 3261 ElementRef param_1 = ref; 3262 LineSeg line = Element_Line_read(param_1); 3263 vec2 _1919 = min(line.p0, line.p1); 3264 c.bbox = vec4(_1919.x, _1919.y, c.bbox.z, c.bbox.w); 3265 vec2 _1927 = max(line.p0, line.p1); 3266 c.bbox = vec4(c.bbox.x, c.bbox.y, _1927.x, _1927.y); 3267 c.pathseg_count = 1u; 3268 break; 3269 } 3270 case 2u: 3271 { 3272 ElementRef param_2 = ref; 3273 QuadSeg quad = Element_Quad_read(param_2); 3274 vec2 _1944 = min(min(quad.p0, quad.p1), quad.p2); 3275 c.bbox = vec4(_1944.x, _1944.y, c.bbox.z, c.bbox.w); 3276 vec2 _1955 = max(max(quad.p0, quad.p1), quad.p2); 3277 c.bbox = vec4(c.bbox.x, c.bbox.y, _1955.x, _1955.y); 3278 c.pathseg_count = 1u; 3279 break; 3280 } 3281 case 3u: 3282 { 3283 ElementRef param_3 = ref; 3284 CubicSeg cubic = Element_Cubic_read(param_3); 3285 vec2 _1975 = min(min(cubic.p0, cubic.p1), min(cubic.p2, cubic.p3)); 3286 c.bbox = vec4(_1975.x, _1975.y, c.bbox.z, c.bbox.w); 3287 vec2 _1989 = max(max(cubic.p0, cubic.p1), max(cubic.p2, cubic.p3)); 3288 c.bbox = vec4(c.bbox.x, c.bbox.y, _1989.x, _1989.y); 3289 c.pathseg_count = 1u; 3290 break; 3291 } 3292 case 4u: 3293 case 9u: 3294 case 7u: 3295 { 3296 c.flags = 4u; 3297 c.path_count = 1u; 3298 break; 3299 } 3300 case 8u: 3301 { 3302 c.path_count = 1u; 3303 break; 3304 } 3305 case 5u: 3306 { 3307 ElementRef param_4 = ref; 3308 SetLineWidth lw = Element_SetLineWidth_read(param_4); 3309 c.linewidth = lw.width; 3310 c.flags = 1u; 3311 break; 3312 } 3313 case 6u: 3314 { 3315 ElementRef param_5 = ref; 3316 Transform t = Element_Transform_read(param_5); 3317 c.mat = t.mat; 3318 c.translate = t.translate; 3319 c.trans_count = 1u; 3320 break; 3321 } 3322 case 10u: 3323 { 3324 ElementRef param_6 = ref; 3325 SetFillMode fm = Element_SetFillMode_read(param_6); 3326 c.flags = 8u | (fm.fill_mode << uint(4)); 3327 break; 3328 } 3329 } 3330 return c; 3331 } 3332 3333 ElementRef Element_index(ElementRef ref, uint index) 3334 { 3335 return ElementRef(ref.offset + (index * 36u)); 3336 } 3337 3338 State combine_state(State a, State b) 3339 { 3340 State c; 3341 c.bbox.x = (min(a.mat.x * b.bbox.x, a.mat.x * b.bbox.z) + min(a.mat.z * b.bbox.y, a.mat.z * b.bbox.w)) + a.translate.x; 3342 c.bbox.y = (min(a.mat.y * b.bbox.x, a.mat.y * b.bbox.z) + min(a.mat.w * b.bbox.y, a.mat.w * b.bbox.w)) + a.translate.y; 3343 c.bbox.z = (max(a.mat.x * b.bbox.x, a.mat.x * b.bbox.z) + max(a.mat.z * b.bbox.y, a.mat.z * b.bbox.w)) + a.translate.x; 3344 c.bbox.w = (max(a.mat.y * b.bbox.x, a.mat.y * b.bbox.z) + max(a.mat.w * b.bbox.y, a.mat.w * b.bbox.w)) + a.translate.y; 3345 bool _1657 = (a.flags & 4u) == 0u; 3346 bool _1665; 3347 if (_1657) 3348 { 3349 _1665 = b.bbox.z <= b.bbox.x; 3350 } 3351 else 3352 { 3353 _1665 = _1657; 3354 } 3355 bool _1673; 3356 if (_1665) 3357 { 3358 _1673 = b.bbox.w <= b.bbox.y; 3359 } 3360 else 3361 { 3362 _1673 = _1665; 3363 } 3364 if (_1673) 3365 { 3366 c.bbox = a.bbox; 3367 } 3368 else 3369 { 3370 bool _1683 = (a.flags & 4u) == 0u; 3371 bool _1690; 3372 if (_1683) 3373 { 3374 _1690 = (b.flags & 2u) == 0u; 3375 } 3376 else 3377 { 3378 _1690 = _1683; 3379 } 3380 bool _1707; 3381 if (_1690) 3382 { 3383 bool _1697 = a.bbox.z > a.bbox.x; 3384 bool _1706; 3385 if (!_1697) 3386 { 3387 _1706 = a.bbox.w > a.bbox.y; 3388 } 3389 else 3390 { 3391 _1706 = _1697; 3392 } 3393 _1707 = _1706; 3394 } 3395 else 3396 { 3397 _1707 = _1690; 3398 } 3399 if (_1707) 3400 { 3401 vec2 _1716 = min(a.bbox.xy, c.bbox.xy); 3402 c.bbox = vec4(_1716.x, _1716.y, c.bbox.z, c.bbox.w); 3403 vec2 _1726 = max(a.bbox.zw, c.bbox.zw); 3404 c.bbox = vec4(c.bbox.x, c.bbox.y, _1726.x, _1726.y); 3405 } 3406 } 3407 c.mat.x = (a.mat.x * b.mat.x) + (a.mat.z * b.mat.y); 3408 c.mat.y = (a.mat.y * b.mat.x) + (a.mat.w * b.mat.y); 3409 c.mat.z = (a.mat.x * b.mat.z) + (a.mat.z * b.mat.w); 3410 c.mat.w = (a.mat.y * b.mat.z) + (a.mat.w * b.mat.w); 3411 c.translate.x = ((a.mat.x * b.translate.x) + (a.mat.z * b.translate.y)) + a.translate.x; 3412 c.translate.y = ((a.mat.y * b.translate.x) + (a.mat.w * b.translate.y)) + a.translate.y; 3413 float _1812; 3414 if ((b.flags & 1u) == 0u) 3415 { 3416 _1812 = a.linewidth; 3417 } 3418 else 3419 { 3420 _1812 = b.linewidth; 3421 } 3422 c.linewidth = _1812; 3423 c.flags = (a.flags & 11u) | b.flags; 3424 c.flags |= ((a.flags & 4u) >> uint(1)); 3425 uint _1842; 3426 if ((b.flags & 8u) == 0u) 3427 { 3428 _1842 = a.flags; 3429 } 3430 else 3431 { 3432 _1842 = b.flags; 3433 } 3434 uint fill_mode = _1842; 3435 fill_mode &= 16u; 3436 c.flags = (c.flags & 4294967279u) | fill_mode; 3437 c.path_count = a.path_count + b.path_count; 3438 c.pathseg_count = a.pathseg_count + b.pathseg_count; 3439 c.trans_count = a.trans_count + b.trans_count; 3440 return c; 3441 } 3442 3443 StateRef state_aggregate_ref(uint partition_ix) 3444 { 3445 return StateRef(4u + (partition_ix * 124u)); 3446 } 3447 3448 void State_write(StateRef ref, State s) 3449 { 3450 uint ix = ref.offset >> uint(2); 3451 _779.state[ix + 0u] = floatBitsToUint(s.mat.x); 3452 _779.state[ix + 1u] = floatBitsToUint(s.mat.y); 3453 _779.state[ix + 2u] = floatBitsToUint(s.mat.z); 3454 _779.state[ix + 3u] = floatBitsToUint(s.mat.w); 3455 _779.state[ix + 4u] = floatBitsToUint(s.translate.x); 3456 _779.state[ix + 5u] = floatBitsToUint(s.translate.y); 3457 _779.state[ix + 6u] = floatBitsToUint(s.bbox.x); 3458 _779.state[ix + 7u] = floatBitsToUint(s.bbox.y); 3459 _779.state[ix + 8u] = floatBitsToUint(s.bbox.z); 3460 _779.state[ix + 9u] = floatBitsToUint(s.bbox.w); 3461 _779.state[ix + 10u] = floatBitsToUint(s.linewidth); 3462 _779.state[ix + 11u] = s.flags; 3463 _779.state[ix + 12u] = s.path_count; 3464 _779.state[ix + 13u] = s.pathseg_count; 3465 _779.state[ix + 14u] = s.trans_count; 3466 } 3467 3468 StateRef state_prefix_ref(uint partition_ix) 3469 { 3470 return StateRef((4u + (partition_ix * 124u)) + 60u); 3471 } 3472 3473 uint state_flag_index(uint partition_ix) 3474 { 3475 return partition_ix * 31u; 3476 } 3477 3478 State State_read(StateRef ref) 3479 { 3480 uint ix = ref.offset >> uint(2); 3481 uint raw0 = _779.state[ix + 0u]; 3482 uint raw1 = _779.state[ix + 1u]; 3483 uint raw2 = _779.state[ix + 2u]; 3484 uint raw3 = _779.state[ix + 3u]; 3485 uint raw4 = _779.state[ix + 4u]; 3486 uint raw5 = _779.state[ix + 5u]; 3487 uint raw6 = _779.state[ix + 6u]; 3488 uint raw7 = _779.state[ix + 7u]; 3489 uint raw8 = _779.state[ix + 8u]; 3490 uint raw9 = _779.state[ix + 9u]; 3491 uint raw10 = _779.state[ix + 10u]; 3492 uint raw11 = _779.state[ix + 11u]; 3493 uint raw12 = _779.state[ix + 12u]; 3494 uint raw13 = _779.state[ix + 13u]; 3495 uint raw14 = _779.state[ix + 14u]; 3496 State s; 3497 s.mat = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 3498 s.translate = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5)); 3499 s.bbox = vec4(uintBitsToFloat(raw6), uintBitsToFloat(raw7), uintBitsToFloat(raw8), uintBitsToFloat(raw9)); 3500 s.linewidth = uintBitsToFloat(raw10); 3501 s.flags = raw11; 3502 s.path_count = raw12; 3503 s.pathseg_count = raw13; 3504 s.trans_count = raw14; 3505 return s; 3506 } 3507 3508 uint fill_mode_from_flags(uint flags) 3509 { 3510 return flags & 1u; 3511 } 3512 3513 vec2 get_linewidth(State st) 3514 { 3515 return vec2(length(st.mat.xz), length(st.mat.yw)) * (0.5 * st.linewidth); 3516 } 3517 3518 bool touch_mem(Alloc alloc, uint offset) 3519 { 3520 return true; 3521 } 3522 3523 void write_mem(Alloc alloc, uint offset, uint val) 3524 { 3525 Alloc param = alloc; 3526 uint param_1 = offset; 3527 if (!touch_mem(param, param_1)) 3528 { 3529 return; 3530 } 3531 _294.memory[offset] = val; 3532 } 3533 3534 void PathCubic_write(Alloc a, PathCubicRef ref, PathCubic s) 3535 { 3536 uint ix = ref.offset >> uint(2); 3537 Alloc param = a; 3538 uint param_1 = ix + 0u; 3539 uint param_2 = floatBitsToUint(s.p0.x); 3540 write_mem(param, param_1, param_2); 3541 Alloc param_3 = a; 3542 uint param_4 = ix + 1u; 3543 uint param_5 = floatBitsToUint(s.p0.y); 3544 write_mem(param_3, param_4, param_5); 3545 Alloc param_6 = a; 3546 uint param_7 = ix + 2u; 3547 uint param_8 = floatBitsToUint(s.p1.x); 3548 write_mem(param_6, param_7, param_8); 3549 Alloc param_9 = a; 3550 uint param_10 = ix + 3u; 3551 uint param_11 = floatBitsToUint(s.p1.y); 3552 write_mem(param_9, param_10, param_11); 3553 Alloc param_12 = a; 3554 uint param_13 = ix + 4u; 3555 uint param_14 = floatBitsToUint(s.p2.x); 3556 write_mem(param_12, param_13, param_14); 3557 Alloc param_15 = a; 3558 uint param_16 = ix + 5u; 3559 uint param_17 = floatBitsToUint(s.p2.y); 3560 write_mem(param_15, param_16, param_17); 3561 Alloc param_18 = a; 3562 uint param_19 = ix + 6u; 3563 uint param_20 = floatBitsToUint(s.p3.x); 3564 write_mem(param_18, param_19, param_20); 3565 Alloc param_21 = a; 3566 uint param_22 = ix + 7u; 3567 uint param_23 = floatBitsToUint(s.p3.y); 3568 write_mem(param_21, param_22, param_23); 3569 Alloc param_24 = a; 3570 uint param_25 = ix + 8u; 3571 uint param_26 = s.path_ix; 3572 write_mem(param_24, param_25, param_26); 3573 Alloc param_27 = a; 3574 uint param_28 = ix + 9u; 3575 uint param_29 = s.trans_ix; 3576 write_mem(param_27, param_28, param_29); 3577 Alloc param_30 = a; 3578 uint param_31 = ix + 10u; 3579 uint param_32 = floatBitsToUint(s.stroke.x); 3580 write_mem(param_30, param_31, param_32); 3581 Alloc param_33 = a; 3582 uint param_34 = ix + 11u; 3583 uint param_35 = floatBitsToUint(s.stroke.y); 3584 write_mem(param_33, param_34, param_35); 3585 } 3586 3587 void PathSeg_Cubic_write(Alloc a, PathSegRef ref, uint flags, PathCubic s) 3588 { 3589 Alloc param = a; 3590 uint param_1 = ref.offset >> uint(2); 3591 uint param_2 = (flags << uint(16)) | 1u; 3592 write_mem(param, param_1, param_2); 3593 Alloc param_3 = a; 3594 PathCubicRef param_4 = PathCubicRef(ref.offset + 4u); 3595 PathCubic param_5 = s; 3596 PathCubic_write(param_3, param_4, param_5); 3597 } 3598 3599 FillColor FillColor_read(FillColorRef ref) 3600 { 3601 uint ix = ref.offset >> uint(2); 3602 uint raw0 = _323.scene[ix + 0u]; 3603 FillColor s; 3604 s.rgba_color = raw0; 3605 return s; 3606 } 3607 3608 FillColor Element_FillColor_read(ElementRef ref) 3609 { 3610 FillColorRef param = FillColorRef(ref.offset + 4u); 3611 return FillColor_read(param); 3612 } 3613 3614 void AnnoColor_write(Alloc a, AnnoColorRef ref, AnnoColor s) 3615 { 3616 uint ix = ref.offset >> uint(2); 3617 Alloc param = a; 3618 uint param_1 = ix + 0u; 3619 uint param_2 = floatBitsToUint(s.bbox.x); 3620 write_mem(param, param_1, param_2); 3621 Alloc param_3 = a; 3622 uint param_4 = ix + 1u; 3623 uint param_5 = floatBitsToUint(s.bbox.y); 3624 write_mem(param_3, param_4, param_5); 3625 Alloc param_6 = a; 3626 uint param_7 = ix + 2u; 3627 uint param_8 = floatBitsToUint(s.bbox.z); 3628 write_mem(param_6, param_7, param_8); 3629 Alloc param_9 = a; 3630 uint param_10 = ix + 3u; 3631 uint param_11 = floatBitsToUint(s.bbox.w); 3632 write_mem(param_9, param_10, param_11); 3633 Alloc param_12 = a; 3634 uint param_13 = ix + 4u; 3635 uint param_14 = floatBitsToUint(s.linewidth); 3636 write_mem(param_12, param_13, param_14); 3637 Alloc param_15 = a; 3638 uint param_16 = ix + 5u; 3639 uint param_17 = s.rgba_color; 3640 write_mem(param_15, param_16, param_17); 3641 } 3642 3643 void Annotated_Color_write(Alloc a, AnnotatedRef ref, uint flags, AnnoColor s) 3644 { 3645 Alloc param = a; 3646 uint param_1 = ref.offset >> uint(2); 3647 uint param_2 = (flags << uint(16)) | 1u; 3648 write_mem(param, param_1, param_2); 3649 Alloc param_3 = a; 3650 AnnoColorRef param_4 = AnnoColorRef(ref.offset + 4u); 3651 AnnoColor param_5 = s; 3652 AnnoColor_write(param_3, param_4, param_5); 3653 } 3654 3655 FillImage FillImage_read(FillImageRef ref) 3656 { 3657 uint ix = ref.offset >> uint(2); 3658 uint raw0 = _323.scene[ix + 0u]; 3659 uint raw1 = _323.scene[ix + 1u]; 3660 FillImage s; 3661 s.index = raw0; 3662 s.offset = ivec2(int(raw1 << uint(16)) >> 16, int(raw1) >> 16); 3663 return s; 3664 } 3665 3666 FillImage Element_FillImage_read(ElementRef ref) 3667 { 3668 FillImageRef param = FillImageRef(ref.offset + 4u); 3669 return FillImage_read(param); 3670 } 3671 3672 void AnnoImage_write(Alloc a, AnnoImageRef ref, AnnoImage s) 3673 { 3674 uint ix = ref.offset >> uint(2); 3675 Alloc param = a; 3676 uint param_1 = ix + 0u; 3677 uint param_2 = floatBitsToUint(s.bbox.x); 3678 write_mem(param, param_1, param_2); 3679 Alloc param_3 = a; 3680 uint param_4 = ix + 1u; 3681 uint param_5 = floatBitsToUint(s.bbox.y); 3682 write_mem(param_3, param_4, param_5); 3683 Alloc param_6 = a; 3684 uint param_7 = ix + 2u; 3685 uint param_8 = floatBitsToUint(s.bbox.z); 3686 write_mem(param_6, param_7, param_8); 3687 Alloc param_9 = a; 3688 uint param_10 = ix + 3u; 3689 uint param_11 = floatBitsToUint(s.bbox.w); 3690 write_mem(param_9, param_10, param_11); 3691 Alloc param_12 = a; 3692 uint param_13 = ix + 4u; 3693 uint param_14 = floatBitsToUint(s.linewidth); 3694 write_mem(param_12, param_13, param_14); 3695 Alloc param_15 = a; 3696 uint param_16 = ix + 5u; 3697 uint param_17 = s.index; 3698 write_mem(param_15, param_16, param_17); 3699 Alloc param_18 = a; 3700 uint param_19 = ix + 6u; 3701 uint param_20 = (uint(s.offset.x) & 65535u) | (uint(s.offset.y) << uint(16)); 3702 write_mem(param_18, param_19, param_20); 3703 } 3704 3705 void Annotated_Image_write(Alloc a, AnnotatedRef ref, uint flags, AnnoImage s) 3706 { 3707 Alloc param = a; 3708 uint param_1 = ref.offset >> uint(2); 3709 uint param_2 = (flags << uint(16)) | 2u; 3710 write_mem(param, param_1, param_2); 3711 Alloc param_3 = a; 3712 AnnoImageRef param_4 = AnnoImageRef(ref.offset + 4u); 3713 AnnoImage param_5 = s; 3714 AnnoImage_write(param_3, param_4, param_5); 3715 } 3716 3717 Clip Clip_read(ClipRef ref) 3718 { 3719 uint ix = ref.offset >> uint(2); 3720 uint raw0 = _323.scene[ix + 0u]; 3721 uint raw1 = _323.scene[ix + 1u]; 3722 uint raw2 = _323.scene[ix + 2u]; 3723 uint raw3 = _323.scene[ix + 3u]; 3724 Clip s; 3725 s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 3726 return s; 3727 } 3728 3729 Clip Element_BeginClip_read(ElementRef ref) 3730 { 3731 ClipRef param = ClipRef(ref.offset + 4u); 3732 return Clip_read(param); 3733 } 3734 3735 void AnnoBeginClip_write(Alloc a, AnnoBeginClipRef ref, AnnoBeginClip s) 3736 { 3737 uint ix = ref.offset >> uint(2); 3738 Alloc param = a; 3739 uint param_1 = ix + 0u; 3740 uint param_2 = floatBitsToUint(s.bbox.x); 3741 write_mem(param, param_1, param_2); 3742 Alloc param_3 = a; 3743 uint param_4 = ix + 1u; 3744 uint param_5 = floatBitsToUint(s.bbox.y); 3745 write_mem(param_3, param_4, param_5); 3746 Alloc param_6 = a; 3747 uint param_7 = ix + 2u; 3748 uint param_8 = floatBitsToUint(s.bbox.z); 3749 write_mem(param_6, param_7, param_8); 3750 Alloc param_9 = a; 3751 uint param_10 = ix + 3u; 3752 uint param_11 = floatBitsToUint(s.bbox.w); 3753 write_mem(param_9, param_10, param_11); 3754 Alloc param_12 = a; 3755 uint param_13 = ix + 4u; 3756 uint param_14 = floatBitsToUint(s.linewidth); 3757 write_mem(param_12, param_13, param_14); 3758 } 3759 3760 void Annotated_BeginClip_write(Alloc a, AnnotatedRef ref, uint flags, AnnoBeginClip s) 3761 { 3762 Alloc param = a; 3763 uint param_1 = ref.offset >> uint(2); 3764 uint param_2 = (flags << uint(16)) | 3u; 3765 write_mem(param, param_1, param_2); 3766 Alloc param_3 = a; 3767 AnnoBeginClipRef param_4 = AnnoBeginClipRef(ref.offset + 4u); 3768 AnnoBeginClip param_5 = s; 3769 AnnoBeginClip_write(param_3, param_4, param_5); 3770 } 3771 3772 Clip Element_EndClip_read(ElementRef ref) 3773 { 3774 ClipRef param = ClipRef(ref.offset + 4u); 3775 return Clip_read(param); 3776 } 3777 3778 void AnnoEndClip_write(Alloc a, AnnoEndClipRef ref, AnnoEndClip s) 3779 { 3780 uint ix = ref.offset >> uint(2); 3781 Alloc param = a; 3782 uint param_1 = ix + 0u; 3783 uint param_2 = floatBitsToUint(s.bbox.x); 3784 write_mem(param, param_1, param_2); 3785 Alloc param_3 = a; 3786 uint param_4 = ix + 1u; 3787 uint param_5 = floatBitsToUint(s.bbox.y); 3788 write_mem(param_3, param_4, param_5); 3789 Alloc param_6 = a; 3790 uint param_7 = ix + 2u; 3791 uint param_8 = floatBitsToUint(s.bbox.z); 3792 write_mem(param_6, param_7, param_8); 3793 Alloc param_9 = a; 3794 uint param_10 = ix + 3u; 3795 uint param_11 = floatBitsToUint(s.bbox.w); 3796 write_mem(param_9, param_10, param_11); 3797 } 3798 3799 void Annotated_EndClip_write(Alloc a, AnnotatedRef ref, AnnoEndClip s) 3800 { 3801 Alloc param = a; 3802 uint param_1 = ref.offset >> uint(2); 3803 uint param_2 = 4u; 3804 write_mem(param, param_1, param_2); 3805 Alloc param_3 = a; 3806 AnnoEndClipRef param_4 = AnnoEndClipRef(ref.offset + 4u); 3807 AnnoEndClip param_5 = s; 3808 AnnoEndClip_write(param_3, param_4, param_5); 3809 } 3810 3811 void TransformSeg_write(Alloc a, TransformSegRef ref, TransformSeg s) 3812 { 3813 uint ix = ref.offset >> uint(2); 3814 Alloc param = a; 3815 uint param_1 = ix + 0u; 3816 uint param_2 = floatBitsToUint(s.mat.x); 3817 write_mem(param, param_1, param_2); 3818 Alloc param_3 = a; 3819 uint param_4 = ix + 1u; 3820 uint param_5 = floatBitsToUint(s.mat.y); 3821 write_mem(param_3, param_4, param_5); 3822 Alloc param_6 = a; 3823 uint param_7 = ix + 2u; 3824 uint param_8 = floatBitsToUint(s.mat.z); 3825 write_mem(param_6, param_7, param_8); 3826 Alloc param_9 = a; 3827 uint param_10 = ix + 3u; 3828 uint param_11 = floatBitsToUint(s.mat.w); 3829 write_mem(param_9, param_10, param_11); 3830 Alloc param_12 = a; 3831 uint param_13 = ix + 4u; 3832 uint param_14 = floatBitsToUint(s.translate.x); 3833 write_mem(param_12, param_13, param_14); 3834 Alloc param_15 = a; 3835 uint param_16 = ix + 5u; 3836 uint param_17 = floatBitsToUint(s.translate.y); 3837 write_mem(param_15, param_16, param_17); 3838 } 3839 3840 void main() 3841 { 3842 if (gl_LocalInvocationID.x == 0u) 3843 { 3844 uint _2063 = atomicAdd(_779.part_counter, 1u); 3845 sh_part_ix = _2063; 3846 } 3847 barrier(); 3848 uint part_ix = sh_part_ix; 3849 uint ix = (part_ix * 128u) + (gl_LocalInvocationID.x * 4u); 3850 ElementRef ref = ElementRef(ix * 36u); 3851 ElementRef param = ref; 3852 State th_state[4]; 3853 th_state[0] = map_element(param); 3854 for (uint i = 1u; i < 4u; i++) 3855 { 3856 ElementRef param_1 = ref; 3857 uint param_2 = i; 3858 ElementRef param_3 = Element_index(param_1, param_2); 3859 State param_4 = th_state[i - 1u]; 3860 State param_5 = map_element(param_3); 3861 th_state[i] = combine_state(param_4, param_5); 3862 } 3863 State agg = th_state[3]; 3864 sh_state[gl_LocalInvocationID.x] = agg; 3865 for (uint i_1 = 0u; i_1 < 5u; i_1++) 3866 { 3867 barrier(); 3868 if (gl_LocalInvocationID.x >= uint(1 << int(i_1))) 3869 { 3870 State other = sh_state[gl_LocalInvocationID.x - uint(1 << int(i_1))]; 3871 State param_6 = other; 3872 State param_7 = agg; 3873 agg = combine_state(param_6, param_7); 3874 } 3875 barrier(); 3876 sh_state[gl_LocalInvocationID.x] = agg; 3877 } 3878 State exclusive; 3879 exclusive.bbox = vec4(0.0); 3880 exclusive.mat = vec4(1.0, 0.0, 0.0, 1.0); 3881 exclusive.translate = vec2(0.0); 3882 exclusive.linewidth = 1.0; 3883 exclusive.flags = 0u; 3884 exclusive.path_count = 0u; 3885 exclusive.pathseg_count = 0u; 3886 exclusive.trans_count = 0u; 3887 if (gl_LocalInvocationID.x == 31u) 3888 { 3889 uint param_8 = part_ix; 3890 StateRef param_9 = state_aggregate_ref(param_8); 3891 State param_10 = agg; 3892 State_write(param_9, param_10); 3893 uint flag = 1u; 3894 memoryBarrierBuffer(); 3895 if (part_ix == 0u) 3896 { 3897 uint param_11 = part_ix; 3898 StateRef param_12 = state_prefix_ref(param_11); 3899 State param_13 = agg; 3900 State_write(param_12, param_13); 3901 flag = 2u; 3902 } 3903 uint param_14 = part_ix; 3904 _779.state[state_flag_index(param_14)] = flag; 3905 if (part_ix != 0u) 3906 { 3907 uint look_back_ix = part_ix - 1u; 3908 uint their_ix = 0u; 3909 State their_agg; 3910 while (true) 3911 { 3912 uint param_15 = look_back_ix; 3913 flag = _779.state[state_flag_index(param_15)]; 3914 if (flag == 2u) 3915 { 3916 uint param_16 = look_back_ix; 3917 StateRef param_17 = state_prefix_ref(param_16); 3918 State their_prefix = State_read(param_17); 3919 State param_18 = their_prefix; 3920 State param_19 = exclusive; 3921 exclusive = combine_state(param_18, param_19); 3922 break; 3923 } 3924 else 3925 { 3926 if (flag == 1u) 3927 { 3928 uint param_20 = look_back_ix; 3929 StateRef param_21 = state_aggregate_ref(param_20); 3930 their_agg = State_read(param_21); 3931 State param_22 = their_agg; 3932 State param_23 = exclusive; 3933 exclusive = combine_state(param_22, param_23); 3934 look_back_ix--; 3935 their_ix = 0u; 3936 continue; 3937 } 3938 } 3939 ElementRef ref_1 = ElementRef(((look_back_ix * 128u) + their_ix) * 36u); 3940 ElementRef param_24 = ref_1; 3941 State s = map_element(param_24); 3942 if (their_ix == 0u) 3943 { 3944 their_agg = s; 3945 } 3946 else 3947 { 3948 State param_25 = their_agg; 3949 State param_26 = s; 3950 their_agg = combine_state(param_25, param_26); 3951 } 3952 their_ix++; 3953 if (their_ix == 128u) 3954 { 3955 State param_27 = their_agg; 3956 State param_28 = exclusive; 3957 exclusive = combine_state(param_27, param_28); 3958 if (look_back_ix == 0u) 3959 { 3960 break; 3961 } 3962 look_back_ix--; 3963 their_ix = 0u; 3964 } 3965 } 3966 State param_29 = exclusive; 3967 State param_30 = agg; 3968 State inclusive_prefix = combine_state(param_29, param_30); 3969 sh_prefix = exclusive; 3970 uint param_31 = part_ix; 3971 StateRef param_32 = state_prefix_ref(param_31); 3972 State param_33 = inclusive_prefix; 3973 State_write(param_32, param_33); 3974 memoryBarrierBuffer(); 3975 flag = 2u; 3976 uint param_34 = part_ix; 3977 _779.state[state_flag_index(param_34)] = flag; 3978 } 3979 } 3980 barrier(); 3981 if (part_ix != 0u) 3982 { 3983 exclusive = sh_prefix; 3984 } 3985 State row = exclusive; 3986 if (gl_LocalInvocationID.x > 0u) 3987 { 3988 State other_1 = sh_state[gl_LocalInvocationID.x - 1u]; 3989 State param_35 = row; 3990 State param_36 = other_1; 3991 row = combine_state(param_35, param_36); 3992 } 3993 PathCubic path_cubic; 3994 PathSegRef path_out_ref; 3995 Alloc param_45; 3996 Alloc param_51; 3997 Alloc param_57; 3998 AnnoColor anno_fill; 3999 AnnotatedRef out_ref; 4000 Alloc param_63; 4001 AnnoImage anno_img; 4002 Alloc param_69; 4003 AnnoBeginClip anno_begin_clip; 4004 Alloc param_75; 4005 Alloc param_80; 4006 Alloc param_83; 4007 for (uint i_2 = 0u; i_2 < 4u; i_2++) 4008 { 4009 State param_37 = row; 4010 State param_38 = th_state[i_2]; 4011 State st = combine_state(param_37, param_38); 4012 ElementRef param_39 = ref; 4013 uint param_40 = i_2; 4014 ElementRef this_ref = Element_index(param_39, param_40); 4015 ElementRef param_41 = this_ref; 4016 ElementTag tag = Element_tag(param_41); 4017 uint param_42 = st.flags >> uint(4); 4018 uint fill_mode = fill_mode_from_flags(param_42); 4019 bool is_stroke = fill_mode == 1u; 4020 switch (tag.tag) 4021 { 4022 case 1u: 4023 { 4024 ElementRef param_43 = this_ref; 4025 LineSeg line = Element_Line_read(param_43); 4026 path_cubic.p0 = line.p0; 4027 path_cubic.p1 = mix(line.p0, line.p1, vec2(0.3333333432674407958984375)); 4028 path_cubic.p2 = mix(line.p1, line.p0, vec2(0.3333333432674407958984375)); 4029 path_cubic.p3 = line.p1; 4030 path_cubic.path_ix = st.path_count; 4031 path_cubic.trans_ix = st.trans_count; 4032 if (is_stroke) 4033 { 4034 State param_44 = st; 4035 path_cubic.stroke = get_linewidth(param_44); 4036 } 4037 else 4038 { 4039 path_cubic.stroke = vec2(0.0); 4040 } 4041 path_out_ref = PathSegRef(_2429.conf.pathseg_alloc.offset + ((st.pathseg_count - 1u) * 52u)); 4042 param_45.offset = _2429.conf.pathseg_alloc.offset; 4043 PathSegRef param_46 = path_out_ref; 4044 uint param_47 = fill_mode; 4045 PathCubic param_48 = path_cubic; 4046 PathSeg_Cubic_write(param_45, param_46, param_47, param_48); 4047 break; 4048 } 4049 case 2u: 4050 { 4051 ElementRef param_49 = this_ref; 4052 QuadSeg quad = Element_Quad_read(param_49); 4053 path_cubic.p0 = quad.p0; 4054 path_cubic.p1 = mix(quad.p1, quad.p0, vec2(0.3333333432674407958984375)); 4055 path_cubic.p2 = mix(quad.p1, quad.p2, vec2(0.3333333432674407958984375)); 4056 path_cubic.p3 = quad.p2; 4057 path_cubic.path_ix = st.path_count; 4058 path_cubic.trans_ix = st.trans_count; 4059 if (is_stroke) 4060 { 4061 State param_50 = st; 4062 path_cubic.stroke = get_linewidth(param_50); 4063 } 4064 else 4065 { 4066 path_cubic.stroke = vec2(0.0); 4067 } 4068 path_out_ref = PathSegRef(_2429.conf.pathseg_alloc.offset + ((st.pathseg_count - 1u) * 52u)); 4069 param_51.offset = _2429.conf.pathseg_alloc.offset; 4070 PathSegRef param_52 = path_out_ref; 4071 uint param_53 = fill_mode; 4072 PathCubic param_54 = path_cubic; 4073 PathSeg_Cubic_write(param_51, param_52, param_53, param_54); 4074 break; 4075 } 4076 case 3u: 4077 { 4078 ElementRef param_55 = this_ref; 4079 CubicSeg cubic = Element_Cubic_read(param_55); 4080 path_cubic.p0 = cubic.p0; 4081 path_cubic.p1 = cubic.p1; 4082 path_cubic.p2 = cubic.p2; 4083 path_cubic.p3 = cubic.p3; 4084 path_cubic.path_ix = st.path_count; 4085 path_cubic.trans_ix = st.trans_count; 4086 if (is_stroke) 4087 { 4088 State param_56 = st; 4089 path_cubic.stroke = get_linewidth(param_56); 4090 } 4091 else 4092 { 4093 path_cubic.stroke = vec2(0.0); 4094 } 4095 path_out_ref = PathSegRef(_2429.conf.pathseg_alloc.offset + ((st.pathseg_count - 1u) * 52u)); 4096 param_57.offset = _2429.conf.pathseg_alloc.offset; 4097 PathSegRef param_58 = path_out_ref; 4098 uint param_59 = fill_mode; 4099 PathCubic param_60 = path_cubic; 4100 PathSeg_Cubic_write(param_57, param_58, param_59, param_60); 4101 break; 4102 } 4103 case 4u: 4104 { 4105 ElementRef param_61 = this_ref; 4106 FillColor fill = Element_FillColor_read(param_61); 4107 anno_fill.rgba_color = fill.rgba_color; 4108 if (is_stroke) 4109 { 4110 State param_62 = st; 4111 vec2 lw = get_linewidth(param_62); 4112 anno_fill.bbox = st.bbox + vec4(-lw, lw); 4113 anno_fill.linewidth = st.linewidth * sqrt(abs((st.mat.x * st.mat.w) - (st.mat.y * st.mat.z))); 4114 } 4115 else 4116 { 4117 anno_fill.bbox = st.bbox; 4118 anno_fill.linewidth = 0.0; 4119 } 4120 out_ref = AnnotatedRef(_2429.conf.anno_alloc.offset + ((st.path_count - 1u) * 32u)); 4121 param_63.offset = _2429.conf.anno_alloc.offset; 4122 AnnotatedRef param_64 = out_ref; 4123 uint param_65 = fill_mode; 4124 AnnoColor param_66 = anno_fill; 4125 Annotated_Color_write(param_63, param_64, param_65, param_66); 4126 break; 4127 } 4128 case 9u: 4129 { 4130 ElementRef param_67 = this_ref; 4131 FillImage fill_img = Element_FillImage_read(param_67); 4132 anno_img.index = fill_img.index; 4133 anno_img.offset = fill_img.offset; 4134 if (is_stroke) 4135 { 4136 State param_68 = st; 4137 vec2 lw_1 = get_linewidth(param_68); 4138 anno_img.bbox = st.bbox + vec4(-lw_1, lw_1); 4139 anno_img.linewidth = st.linewidth * sqrt(abs((st.mat.x * st.mat.w) - (st.mat.y * st.mat.z))); 4140 } 4141 else 4142 { 4143 anno_img.bbox = st.bbox; 4144 anno_img.linewidth = 0.0; 4145 } 4146 out_ref = AnnotatedRef(_2429.conf.anno_alloc.offset + ((st.path_count - 1u) * 32u)); 4147 param_69.offset = _2429.conf.anno_alloc.offset; 4148 AnnotatedRef param_70 = out_ref; 4149 uint param_71 = fill_mode; 4150 AnnoImage param_72 = anno_img; 4151 Annotated_Image_write(param_69, param_70, param_71, param_72); 4152 break; 4153 } 4154 case 7u: 4155 { 4156 ElementRef param_73 = this_ref; 4157 Clip begin_clip = Element_BeginClip_read(param_73); 4158 anno_begin_clip.bbox = begin_clip.bbox; 4159 if (is_stroke) 4160 { 4161 State param_74 = st; 4162 vec2 lw_2 = get_linewidth(param_74); 4163 anno_begin_clip.linewidth = st.linewidth * sqrt(abs((st.mat.x * st.mat.w) - (st.mat.y * st.mat.z))); 4164 } 4165 else 4166 { 4167 anno_fill.linewidth = 0.0; 4168 } 4169 out_ref = AnnotatedRef(_2429.conf.anno_alloc.offset + ((st.path_count - 1u) * 32u)); 4170 param_75.offset = _2429.conf.anno_alloc.offset; 4171 AnnotatedRef param_76 = out_ref; 4172 uint param_77 = fill_mode; 4173 AnnoBeginClip param_78 = anno_begin_clip; 4174 Annotated_BeginClip_write(param_75, param_76, param_77, param_78); 4175 break; 4176 } 4177 case 8u: 4178 { 4179 ElementRef param_79 = this_ref; 4180 Clip end_clip = Element_EndClip_read(param_79); 4181 AnnoEndClip anno_end_clip = AnnoEndClip(end_clip.bbox); 4182 out_ref = AnnotatedRef(_2429.conf.anno_alloc.offset + ((st.path_count - 1u) * 32u)); 4183 param_80.offset = _2429.conf.anno_alloc.offset; 4184 AnnotatedRef param_81 = out_ref; 4185 AnnoEndClip param_82 = anno_end_clip; 4186 Annotated_EndClip_write(param_80, param_81, param_82); 4187 break; 4188 } 4189 case 6u: 4190 { 4191 TransformSeg transform = TransformSeg(st.mat, st.translate); 4192 TransformSegRef trans_ref = TransformSegRef(_2429.conf.trans_alloc.offset + ((st.trans_count - 1u) * 24u)); 4193 param_83.offset = _2429.conf.trans_alloc.offset; 4194 TransformSegRef param_84 = trans_ref; 4195 TransformSeg param_85 = transform; 4196 TransformSeg_write(param_83, param_84, param_85); 4197 break; 4198 } 4199 } 4200 } 4201 } 4202 4203 `, 4204 } 4205 shader_intersect_frag = driver.ShaderSources{ 4206 Name: "intersect.frag", 4207 Inputs: []driver.InputLocation{{Name: "vUV", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}}, 4208 Textures: []driver.TextureBinding{{Name: "cover", Binding: 0}}, 4209 GLSL100ES: `#version 100 4210 precision mediump float; 4211 precision highp int; 4212 4213 uniform mediump sampler2D cover; 4214 4215 varying highp vec2 vUV; 4216 4217 void main() 4218 { 4219 float cover_1 = abs(texture2D(cover, vUV).x); 4220 gl_FragData[0].x = cover_1; 4221 } 4222 4223 `, 4224 GLSL300ES: `#version 300 es 4225 precision mediump float; 4226 precision highp int; 4227 4228 uniform mediump sampler2D cover; 4229 4230 in highp vec2 vUV; 4231 layout(location = 0) out vec4 fragColor; 4232 4233 void main() 4234 { 4235 float cover_1 = abs(texture(cover, vUV).x); 4236 fragColor.x = cover_1; 4237 } 4238 4239 `, 4240 GLSL130: `#version 130 4241 4242 uniform sampler2D cover; 4243 4244 in vec2 vUV; 4245 out vec4 fragColor; 4246 4247 void main() 4248 { 4249 float cover_1 = abs(texture(cover, vUV).x); 4250 fragColor.x = cover_1; 4251 } 4252 4253 `, 4254 GLSL150: `#version 150 4255 4256 uniform sampler2D cover; 4257 4258 in vec2 vUV; 4259 out vec4 fragColor; 4260 4261 void main() 4262 { 4263 float cover_1 = abs(texture(cover, vUV).x); 4264 fragColor.x = cover_1; 4265 } 4266 4267 `, 4268 HLSL: "DXBC\xe0\xe4\x03\x8c\xacVF\x82l\xe7|\xc3T\xa6'\xef\x01\x00\x00\x00\b\x03\x00\x00\x06\x00\x00\x008\x00\x00\x00\xd4\x00\x00\x00\x80\x01\x00\x00\xfc\x01\x00\x00\xa0\x02\x00\x00\xd4\x02\x00\x00Aon9\x94\x00\x00\x00\x94\x00\x00\x00\x00\x02\xff\xffl\x00\x00\x00(\x00\x00\x00\x00\x00(\x00\x00\x00(\x00\x00\x00(\x00\x01\x00$\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x02\xff\xffQ\x00\x00\x05\x00\x00\x0f\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x02\x00\x00\x00\x80\x00\x00\x03\xb0\x1f\x00\x00\x02\x00\x00\x00\x90\x00\b\x0f\xa0B\x00\x00\x03\x00\x00\x0f\x80\x00\x00\xe4\xb0\x00\b\xe4\xa0#\x00\x00\x02\x00\x00\x01\x80\x00\x00\x00\x80\x01\x00\x00\x02\x00\x00\x0e\x80\x00\x00\x00\xa0\x01\x00\x00\x02\x00\b\x0f\x80\x00\x00\xe4\x80\xff\xff\x00\x00SHDR\xa4\x00\x00\x00@\x00\x00\x00)\x00\x00\x00Z\x00\x00\x03\x00`\x10\x00\x00\x00\x00\x00X\x18\x00\x04\x00p\x10\x00\x00\x00\x00\x00UU\x00\x00b\x10\x00\x032\x10\x10\x00\x00\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x00h\x00\x00\x02\x01\x00\x00\x00E\x00\x00\t\xf2\x00\x10\x00\x00\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x00F~\x10\x00\x00\x00\x00\x00\x00`\x10\x00\x00\x00\x00\x006\x00\x00\x06\x12 \x10\x00\x00\x00\x00\x00\n\x00\x10\x80\x81\x00\x00\x00\x00\x00\x00\x006\x00\x00\b\xe2 \x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00q\x00\x00\x00\\\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00k\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x01\x00\x00\x00\r\x00\x00\x00_cover_sampler\x00cover\x00Microsoft (R) HLSL Shader Compiler 10.1\x00\xab\xab\xabISGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00TEXCOORD\x00\xab\xab\xabOSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xab", 4269 } 4270 shader_intersect_vert = driver.ShaderSources{ 4271 Name: "intersect.vert", 4272 Inputs: []driver.InputLocation{{Name: "pos", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}, {Name: "uv", Location: 1, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 2}}, 4273 Uniforms: driver.UniformsReflection{ 4274 Blocks: []driver.UniformBlock{{Name: "Block", Binding: 0}}, 4275 Locations: []driver.UniformLocation{{Name: "_block.uvTransform", Type: 0x0, Size: 4, Offset: 0}, {Name: "_block.subUVTransform", Type: 0x0, Size: 4, Offset: 16}}, 4276 Size: 32, 4277 }, 4278 GLSL100ES: `#version 100 4279 4280 struct m3x2 4281 { 4282 vec3 r0; 4283 vec3 r1; 4284 }; 4285 4286 struct Block 4287 { 4288 vec4 uvTransform; 4289 vec4 subUVTransform; 4290 }; 4291 4292 uniform Block _block; 4293 4294 attribute vec2 pos; 4295 attribute vec2 uv; 4296 varying vec2 vUV; 4297 4298 vec3 transform3x2(m3x2 t, vec3 v) 4299 { 4300 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 4301 } 4302 4303 void main() 4304 { 4305 m3x2 param = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, -1.0, 0.0)); 4306 vec3 param_1 = vec3(pos, 1.0); 4307 vec3 p = transform3x2(param, param_1); 4308 gl_Position = vec4(p, 1.0); 4309 m3x2 param_2 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 4310 vec3 param_3 = vec3(uv, 1.0); 4311 vec3 uv3 = transform3x2(param_2, param_3); 4312 vUV = (uv3.xy * _block.subUVTransform.xy) + _block.subUVTransform.zw; 4313 m3x2 param_4 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 4314 vec3 param_5 = vec3(vUV, 1.0); 4315 vUV = transform3x2(param_4, param_5).xy; 4316 vUV = (vUV * _block.uvTransform.xy) + _block.uvTransform.zw; 4317 } 4318 4319 `, 4320 GLSL300ES: `#version 300 es 4321 4322 struct m3x2 4323 { 4324 vec3 r0; 4325 vec3 r1; 4326 }; 4327 4328 layout(std140) uniform Block 4329 { 4330 vec4 uvTransform; 4331 vec4 subUVTransform; 4332 } _block; 4333 4334 layout(location = 0) in vec2 pos; 4335 layout(location = 1) in vec2 uv; 4336 out vec2 vUV; 4337 4338 vec3 transform3x2(m3x2 t, vec3 v) 4339 { 4340 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 4341 } 4342 4343 void main() 4344 { 4345 m3x2 param = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, -1.0, 0.0)); 4346 vec3 param_1 = vec3(pos, 1.0); 4347 vec3 p = transform3x2(param, param_1); 4348 gl_Position = vec4(p, 1.0); 4349 m3x2 param_2 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 4350 vec3 param_3 = vec3(uv, 1.0); 4351 vec3 uv3 = transform3x2(param_2, param_3); 4352 vUV = (uv3.xy * _block.subUVTransform.xy) + _block.subUVTransform.zw; 4353 m3x2 param_4 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 4354 vec3 param_5 = vec3(vUV, 1.0); 4355 vUV = transform3x2(param_4, param_5).xy; 4356 vUV = (vUV * _block.uvTransform.xy) + _block.uvTransform.zw; 4357 } 4358 4359 `, 4360 GLSL130: `#version 130 4361 4362 struct m3x2 4363 { 4364 vec3 r0; 4365 vec3 r1; 4366 }; 4367 4368 struct Block 4369 { 4370 vec4 uvTransform; 4371 vec4 subUVTransform; 4372 }; 4373 4374 uniform Block _block; 4375 4376 in vec2 pos; 4377 in vec2 uv; 4378 out vec2 vUV; 4379 4380 vec3 transform3x2(m3x2 t, vec3 v) 4381 { 4382 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 4383 } 4384 4385 void main() 4386 { 4387 m3x2 param = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, -1.0, 0.0)); 4388 vec3 param_1 = vec3(pos, 1.0); 4389 vec3 p = transform3x2(param, param_1); 4390 gl_Position = vec4(p, 1.0); 4391 m3x2 param_2 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 4392 vec3 param_3 = vec3(uv, 1.0); 4393 vec3 uv3 = transform3x2(param_2, param_3); 4394 vUV = (uv3.xy * _block.subUVTransform.xy) + _block.subUVTransform.zw; 4395 m3x2 param_4 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 4396 vec3 param_5 = vec3(vUV, 1.0); 4397 vUV = transform3x2(param_4, param_5).xy; 4398 vUV = (vUV * _block.uvTransform.xy) + _block.uvTransform.zw; 4399 } 4400 4401 `, 4402 GLSL150: `#version 150 4403 4404 struct m3x2 4405 { 4406 vec3 r0; 4407 vec3 r1; 4408 }; 4409 4410 layout(std140) uniform Block 4411 { 4412 vec4 uvTransform; 4413 vec4 subUVTransform; 4414 } _block; 4415 4416 in vec2 pos; 4417 in vec2 uv; 4418 out vec2 vUV; 4419 4420 vec3 transform3x2(m3x2 t, vec3 v) 4421 { 4422 return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v)); 4423 } 4424 4425 void main() 4426 { 4427 m3x2 param = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, -1.0, 0.0)); 4428 vec3 param_1 = vec3(pos, 1.0); 4429 vec3 p = transform3x2(param, param_1); 4430 gl_Position = vec4(p, 1.0); 4431 m3x2 param_2 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 4432 vec3 param_3 = vec3(uv, 1.0); 4433 vec3 uv3 = transform3x2(param_2, param_3); 4434 vUV = (uv3.xy * _block.subUVTransform.xy) + _block.subUVTransform.zw; 4435 m3x2 param_4 = m3x2(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 4436 vec3 param_5 = vec3(vUV, 1.0); 4437 vUV = transform3x2(param_4, param_5).xy; 4438 vUV = (vUV * _block.uvTransform.xy) + _block.uvTransform.zw; 4439 } 4440 4441 `, 4442 HLSL: "DXBCxH\xc4I\xbe\x0f[|\nl\x899\xe0\xb8\xcb?\x01\x00\x00\x00\xdc\x04\x00\x00\x06\x00\x00\x008\x00\x00\x00L\x01\x00\x00\xc4\x02\x00\x00@\x03\x00\x008\x04\x00\x00\x84\x04\x00\x00Aon9\f\x01\x00\x00\f\x01\x00\x00\x00\x02\xfe\xff\xd8\x00\x00\x004\x00\x00\x00\x01\x00$\x00\x00\x000\x00\x00\x000\x00\x00\x00$\x00\x01\x000\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xfe\xffQ\x00\x00\x05\x03\x00\x0f\xa0\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x80\xbf\x00\x00\x00\x00\x1f\x00\x00\x02\x05\x00\x00\x80\x00\x00\x0f\x90\x1f\x00\x00\x02\x05\x00\x01\x80\x01\x00\x0f\x90\x04\x00\x00\x04\x00\x00\x03\x80\x01\x00U\x90\x03\x00\xe4\xa0\x03\x00\xe1\xa0\x05\x00\x00\x03\x00\x00\x03\x80\x00\x00\xe4\x80\x03\x00\xe2\xa0\x02\x00\x00\x03\x00\x00\x02\x80\x00\x00U\x80\x00\x00\x00\x80\x01\x00\x00\x02\x00\x00\x01\x80\x01\x00\x00\x90\x04\x00\x00\x04\x00\x00\x03\x80\x00\x00\xe4\x80\x02\x00\xe4\xa0\x02\x00\xee\xa0\x01\x00\x00\x02\x00\x00\x04\x80\x03\x00\x00\xa0\b\x00\x00\x03\x00\x00\b\x80\x03\x00ɠ\x00\x00\xe4\x80\x04\x00\x00\x04\x00\x00\x03\xe0\x00\x00\xec\x80\x01\x00\xe4\xa0\x01\x00\xee\xa0\x02\x00\x00\x03\x00\x00\x03\xc0\x00\x00\xe4\x90\x00\x00\xe4\xa0\x01\x00\x00\x02\x00\x00\f\xc0\x03\x00\x00\xa0\xff\xff\x00\x00SHDRp\x01\x00\x00@\x00\x01\x00\\\x00\x00\x00Y\x00\x00\x04F\x8e \x00\x00\x00\x00\x00\x02\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x00\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x01\x00\x00\x00e\x00\x00\x032 \x10\x00\x00\x00\x00\x00g\x00\x00\x04\xf2 \x10\x00\x01\x00\x00\x00\x01\x00\x00\x00h\x00\x00\x02\x01\x00\x00\x006\x00\x00\x05\"\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x80?6\x00\x00\x05R\x00\x10\x00\x00\x00\x00\x00V\x14\x10\x00\x01\x00\x00\x00\x0f\x00\x00\n\x82\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x80\xbf\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00F\x00\x10\x00\x00\x00\x00\x002\x00\x00\v2\x00\x10\x00\x00\x00\x00\x00\xe6\n\x10\x00\x00\x00\x00\x00F\x80 \x00\x00\x00\x00\x00\x01\x00\x00\x00\xe6\x8a \x00\x00\x00\x00\x00\x01\x00\x00\x006\x00\x00\x05B\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x80?\x0f\x00\x00\n\x82\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x80\xbf\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x96\x05\x10\x00\x00\x00\x00\x002\x00\x00\v2 \x10\x00\x00\x00\x00\x00\xc6\x00\x10\x00\x00\x00\x00\x00F\x80 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x8a \x00\x00\x00\x00\x00\x00\x00\x00\x006\x00\x00\x052 \x10\x00\x01\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x006\x00\x00\b\xc2 \x10\x00\x01\x00\x00\x00\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x80?>\x00\x00\x01STATt\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\xf0\x00\x00\x00\x01\x00\x00\x00D\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xfe\xff\x00\x01\x00\x00\xc6\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00Block\x00\xab\xab<\x00\x00\x00\x02\x00\x00\x00\\\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00_block_uvTransform\x00\xab\x01\x00\x03\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00_block_subUVTransform\x00Microsoft (R) HLSL Shader Compiler 10.1\x00\xab\xabISGND\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x008\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x03\x00\x00TEXCOORD\x00\xab\xab\xabOSGNP\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\f\x00\x00A\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x0f\x00\x00\x00TEXCOORD\x00SV_Position\x00\xab\xab\xab", 4443 } 4444 shader_kernel4_comp = driver.ShaderSources{ 4445 Name: "kernel4.comp", 4446 GLSL310ES: `#version 310 es 4447 layout(local_size_x = 16, local_size_y = 8, local_size_z = 1) in; 4448 4449 struct Alloc 4450 { 4451 uint offset; 4452 }; 4453 4454 struct CmdStrokeRef 4455 { 4456 uint offset; 4457 }; 4458 4459 struct CmdStroke 4460 { 4461 uint tile_ref; 4462 float half_width; 4463 }; 4464 4465 struct CmdFillRef 4466 { 4467 uint offset; 4468 }; 4469 4470 struct CmdFill 4471 { 4472 uint tile_ref; 4473 int backdrop; 4474 }; 4475 4476 struct CmdColorRef 4477 { 4478 uint offset; 4479 }; 4480 4481 struct CmdColor 4482 { 4483 uint rgba_color; 4484 }; 4485 4486 struct CmdImageRef 4487 { 4488 uint offset; 4489 }; 4490 4491 struct CmdImage 4492 { 4493 uint index; 4494 ivec2 offset; 4495 }; 4496 4497 struct CmdAlphaRef 4498 { 4499 uint offset; 4500 }; 4501 4502 struct CmdAlpha 4503 { 4504 float alpha; 4505 }; 4506 4507 struct CmdJumpRef 4508 { 4509 uint offset; 4510 }; 4511 4512 struct CmdJump 4513 { 4514 uint new_ref; 4515 }; 4516 4517 struct CmdRef 4518 { 4519 uint offset; 4520 }; 4521 4522 struct CmdTag 4523 { 4524 uint tag; 4525 uint flags; 4526 }; 4527 4528 struct TileSegRef 4529 { 4530 uint offset; 4531 }; 4532 4533 struct TileSeg 4534 { 4535 vec2 origin; 4536 vec2 vector; 4537 float y_edge; 4538 TileSegRef next; 4539 }; 4540 4541 struct Config 4542 { 4543 uint n_elements; 4544 uint n_pathseg; 4545 uint width_in_tiles; 4546 uint height_in_tiles; 4547 Alloc tile_alloc; 4548 Alloc bin_alloc; 4549 Alloc ptcl_alloc; 4550 Alloc pathseg_alloc; 4551 Alloc anno_alloc; 4552 Alloc trans_alloc; 4553 }; 4554 4555 layout(binding = 0, std430) buffer Memory 4556 { 4557 uint mem_offset; 4558 uint mem_error; 4559 uint memory[]; 4560 } _198; 4561 4562 layout(binding = 1, std430) restrict readonly buffer ConfigBuf 4563 { 4564 Config conf; 4565 } _686; 4566 4567 layout(binding = 3, rgba8) uniform restrict readonly highp image2D images[1]; 4568 layout(binding = 2, rgba8) uniform restrict writeonly highp image2D image; 4569 4570 Alloc slice_mem(Alloc a, uint offset, uint size) 4571 { 4572 return Alloc(a.offset + offset); 4573 } 4574 4575 bool touch_mem(Alloc alloc, uint offset) 4576 { 4577 return true; 4578 } 4579 4580 uint read_mem(Alloc alloc, uint offset) 4581 { 4582 Alloc param = alloc; 4583 uint param_1 = offset; 4584 if (!touch_mem(param, param_1)) 4585 { 4586 return 0u; 4587 } 4588 uint v = _198.memory[offset]; 4589 return v; 4590 } 4591 4592 Alloc alloc_read(Alloc a, uint offset) 4593 { 4594 Alloc param = a; 4595 uint param_1 = offset >> uint(2); 4596 Alloc alloc; 4597 alloc.offset = read_mem(param, param_1); 4598 return alloc; 4599 } 4600 4601 CmdTag Cmd_tag(Alloc a, CmdRef ref) 4602 { 4603 Alloc param = a; 4604 uint param_1 = ref.offset >> uint(2); 4605 uint tag_and_flags = read_mem(param, param_1); 4606 return CmdTag(tag_and_flags & 65535u, tag_and_flags >> uint(16)); 4607 } 4608 4609 CmdStroke CmdStroke_read(Alloc a, CmdStrokeRef ref) 4610 { 4611 uint ix = ref.offset >> uint(2); 4612 Alloc param = a; 4613 uint param_1 = ix + 0u; 4614 uint raw0 = read_mem(param, param_1); 4615 Alloc param_2 = a; 4616 uint param_3 = ix + 1u; 4617 uint raw1 = read_mem(param_2, param_3); 4618 CmdStroke s; 4619 s.tile_ref = raw0; 4620 s.half_width = uintBitsToFloat(raw1); 4621 return s; 4622 } 4623 4624 CmdStroke Cmd_Stroke_read(Alloc a, CmdRef ref) 4625 { 4626 Alloc param = a; 4627 CmdStrokeRef param_1 = CmdStrokeRef(ref.offset + 4u); 4628 return CmdStroke_read(param, param_1); 4629 } 4630 4631 Alloc new_alloc(uint offset, uint size, bool mem_ok) 4632 { 4633 Alloc a; 4634 a.offset = offset; 4635 return a; 4636 } 4637 4638 TileSeg TileSeg_read(Alloc a, TileSegRef ref) 4639 { 4640 uint ix = ref.offset >> uint(2); 4641 Alloc param = a; 4642 uint param_1 = ix + 0u; 4643 uint raw0 = read_mem(param, param_1); 4644 Alloc param_2 = a; 4645 uint param_3 = ix + 1u; 4646 uint raw1 = read_mem(param_2, param_3); 4647 Alloc param_4 = a; 4648 uint param_5 = ix + 2u; 4649 uint raw2 = read_mem(param_4, param_5); 4650 Alloc param_6 = a; 4651 uint param_7 = ix + 3u; 4652 uint raw3 = read_mem(param_6, param_7); 4653 Alloc param_8 = a; 4654 uint param_9 = ix + 4u; 4655 uint raw4 = read_mem(param_8, param_9); 4656 Alloc param_10 = a; 4657 uint param_11 = ix + 5u; 4658 uint raw5 = read_mem(param_10, param_11); 4659 TileSeg s; 4660 s.origin = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1)); 4661 s.vector = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 4662 s.y_edge = uintBitsToFloat(raw4); 4663 s.next = TileSegRef(raw5); 4664 return s; 4665 } 4666 4667 uvec2 chunk_offset(uint i) 4668 { 4669 return uvec2((i % 2u) * 16u, (i / 2u) * 8u); 4670 } 4671 4672 CmdFill CmdFill_read(Alloc a, CmdFillRef ref) 4673 { 4674 uint ix = ref.offset >> uint(2); 4675 Alloc param = a; 4676 uint param_1 = ix + 0u; 4677 uint raw0 = read_mem(param, param_1); 4678 Alloc param_2 = a; 4679 uint param_3 = ix + 1u; 4680 uint raw1 = read_mem(param_2, param_3); 4681 CmdFill s; 4682 s.tile_ref = raw0; 4683 s.backdrop = int(raw1); 4684 return s; 4685 } 4686 4687 CmdFill Cmd_Fill_read(Alloc a, CmdRef ref) 4688 { 4689 Alloc param = a; 4690 CmdFillRef param_1 = CmdFillRef(ref.offset + 4u); 4691 return CmdFill_read(param, param_1); 4692 } 4693 4694 CmdAlpha CmdAlpha_read(Alloc a, CmdAlphaRef ref) 4695 { 4696 uint ix = ref.offset >> uint(2); 4697 Alloc param = a; 4698 uint param_1 = ix + 0u; 4699 uint raw0 = read_mem(param, param_1); 4700 CmdAlpha s; 4701 s.alpha = uintBitsToFloat(raw0); 4702 return s; 4703 } 4704 4705 CmdAlpha Cmd_Alpha_read(Alloc a, CmdRef ref) 4706 { 4707 Alloc param = a; 4708 CmdAlphaRef param_1 = CmdAlphaRef(ref.offset + 4u); 4709 return CmdAlpha_read(param, param_1); 4710 } 4711 4712 CmdColor CmdColor_read(Alloc a, CmdColorRef ref) 4713 { 4714 uint ix = ref.offset >> uint(2); 4715 Alloc param = a; 4716 uint param_1 = ix + 0u; 4717 uint raw0 = read_mem(param, param_1); 4718 CmdColor s; 4719 s.rgba_color = raw0; 4720 return s; 4721 } 4722 4723 CmdColor Cmd_Color_read(Alloc a, CmdRef ref) 4724 { 4725 Alloc param = a; 4726 CmdColorRef param_1 = CmdColorRef(ref.offset + 4u); 4727 return CmdColor_read(param, param_1); 4728 } 4729 4730 mediump vec3 fromsRGB(mediump vec3 srgb) 4731 { 4732 bvec3 cutoff = greaterThanEqual(srgb, vec3(0.040449999272823333740234375)); 4733 mediump vec3 below = srgb / vec3(12.9200000762939453125); 4734 mediump vec3 above = pow((srgb + vec3(0.054999999701976776123046875)) / vec3(1.05499994754791259765625), vec3(2.400000095367431640625)); 4735 return mix(below, above, cutoff); 4736 } 4737 4738 mediump vec4 unpacksRGB(uint srgba) 4739 { 4740 mediump vec4 color = unpackUnorm4x8(srgba).wzyx; 4741 mediump vec3 param = color.xyz; 4742 return vec4(fromsRGB(param), color.w); 4743 } 4744 4745 CmdImage CmdImage_read(Alloc a, CmdImageRef ref) 4746 { 4747 uint ix = ref.offset >> uint(2); 4748 Alloc param = a; 4749 uint param_1 = ix + 0u; 4750 uint raw0 = read_mem(param, param_1); 4751 Alloc param_2 = a; 4752 uint param_3 = ix + 1u; 4753 uint raw1 = read_mem(param_2, param_3); 4754 CmdImage s; 4755 s.index = raw0; 4756 s.offset = ivec2(int(raw1 << uint(16)) >> 16, int(raw1) >> 16); 4757 return s; 4758 } 4759 4760 CmdImage Cmd_Image_read(Alloc a, CmdRef ref) 4761 { 4762 Alloc param = a; 4763 CmdImageRef param_1 = CmdImageRef(ref.offset + 4u); 4764 return CmdImage_read(param, param_1); 4765 } 4766 4767 mediump vec4[8] fillImage(uvec2 xy, CmdImage cmd_img) 4768 { 4769 mediump vec4 rgba[8]; 4770 for (uint i = 0u; i < 8u; i++) 4771 { 4772 uint param = i; 4773 ivec2 uv = ivec2(xy + chunk_offset(param)) + cmd_img.offset; 4774 mediump vec4 fg_rgba = imageLoad(images[0], uv); 4775 mediump vec3 param_1 = fg_rgba.xyz; 4776 mediump vec3 _662 = fromsRGB(param_1); 4777 fg_rgba = vec4(_662.x, _662.y, _662.z, fg_rgba.w); 4778 rgba[i] = fg_rgba; 4779 } 4780 return rgba; 4781 } 4782 4783 mediump vec3 tosRGB(mediump vec3 rgb) 4784 { 4785 bvec3 cutoff = greaterThanEqual(rgb, vec3(0.003130800090730190277099609375)); 4786 mediump vec3 below = vec3(12.9200000762939453125) * rgb; 4787 mediump vec3 above = (vec3(1.05499994754791259765625) * pow(rgb, vec3(0.416660010814666748046875))) - vec3(0.054999999701976776123046875); 4788 return mix(below, above, cutoff); 4789 } 4790 4791 uint packsRGB(inout mediump vec4 rgba) 4792 { 4793 mediump vec3 param = rgba.xyz; 4794 rgba = vec4(tosRGB(param), rgba.w); 4795 return packUnorm4x8(rgba.wzyx); 4796 } 4797 4798 void write_mem(Alloc alloc, uint offset, uint val) 4799 { 4800 Alloc param = alloc; 4801 uint param_1 = offset; 4802 if (!touch_mem(param, param_1)) 4803 { 4804 return; 4805 } 4806 _198.memory[offset] = val; 4807 } 4808 4809 CmdJump CmdJump_read(Alloc a, CmdJumpRef ref) 4810 { 4811 uint ix = ref.offset >> uint(2); 4812 Alloc param = a; 4813 uint param_1 = ix + 0u; 4814 uint raw0 = read_mem(param, param_1); 4815 CmdJump s; 4816 s.new_ref = raw0; 4817 return s; 4818 } 4819 4820 CmdJump Cmd_Jump_read(Alloc a, CmdRef ref) 4821 { 4822 Alloc param = a; 4823 CmdJumpRef param_1 = CmdJumpRef(ref.offset + 4u); 4824 return CmdJump_read(param, param_1); 4825 } 4826 4827 void main() 4828 { 4829 uint tile_ix = (gl_WorkGroupID.y * _686.conf.width_in_tiles) + gl_WorkGroupID.x; 4830 Alloc param; 4831 param.offset = _686.conf.ptcl_alloc.offset; 4832 uint param_1 = tile_ix * 1024u; 4833 uint param_2 = 1024u; 4834 Alloc cmd_alloc = slice_mem(param, param_1, param_2); 4835 CmdRef cmd_ref = CmdRef(cmd_alloc.offset); 4836 Alloc param_3 = cmd_alloc; 4837 uint param_4 = cmd_ref.offset; 4838 Alloc scratch_alloc = alloc_read(param_3, param_4); 4839 cmd_ref.offset += 8u; 4840 uvec2 xy_uint = uvec2(gl_LocalInvocationID.x + (32u * gl_WorkGroupID.x), gl_LocalInvocationID.y + (32u * gl_WorkGroupID.y)); 4841 vec2 xy = vec2(xy_uint); 4842 mediump vec4 rgba[8]; 4843 for (uint i = 0u; i < 8u; i++) 4844 { 4845 rgba[i] = vec4(0.0); 4846 } 4847 uint clip_depth = 0u; 4848 bool mem_ok = _198.mem_error == 0u; 4849 mediump float df[8]; 4850 TileSegRef tile_seg_ref; 4851 mediump float area[8]; 4852 uint base_ix; 4853 while (mem_ok) 4854 { 4855 Alloc param_5 = cmd_alloc; 4856 CmdRef param_6 = cmd_ref; 4857 uint tag = Cmd_tag(param_5, param_6).tag; 4858 if (tag == 0u) 4859 { 4860 break; 4861 } 4862 switch (tag) 4863 { 4864 case 2u: 4865 { 4866 Alloc param_7 = cmd_alloc; 4867 CmdRef param_8 = cmd_ref; 4868 CmdStroke stroke = Cmd_Stroke_read(param_7, param_8); 4869 for (uint k = 0u; k < 8u; k++) 4870 { 4871 df[k] = 1000000000.0; 4872 } 4873 tile_seg_ref = TileSegRef(stroke.tile_ref); 4874 do 4875 { 4876 uint param_9 = tile_seg_ref.offset; 4877 uint param_10 = 24u; 4878 bool param_11 = mem_ok; 4879 Alloc param_12 = new_alloc(param_9, param_10, param_11); 4880 TileSegRef param_13 = tile_seg_ref; 4881 TileSeg seg = TileSeg_read(param_12, param_13); 4882 vec2 line_vec = seg.vector; 4883 for (uint k_1 = 0u; k_1 < 8u; k_1++) 4884 { 4885 vec2 dpos = (xy + vec2(0.5)) - seg.origin; 4886 uint param_14 = k_1; 4887 dpos += vec2(chunk_offset(param_14)); 4888 float t = clamp(dot(line_vec, dpos) / dot(line_vec, line_vec), 0.0, 1.0); 4889 df[k_1] = min(df[k_1], length((line_vec * t) - dpos)); 4890 } 4891 tile_seg_ref = seg.next; 4892 } while (tile_seg_ref.offset != 0u); 4893 for (uint k_2 = 0u; k_2 < 8u; k_2++) 4894 { 4895 area[k_2] = clamp((stroke.half_width + 0.5) - df[k_2], 0.0, 1.0); 4896 } 4897 cmd_ref.offset += 12u; 4898 break; 4899 } 4900 case 1u: 4901 { 4902 Alloc param_15 = cmd_alloc; 4903 CmdRef param_16 = cmd_ref; 4904 CmdFill fill = Cmd_Fill_read(param_15, param_16); 4905 for (uint k_3 = 0u; k_3 < 8u; k_3++) 4906 { 4907 area[k_3] = float(fill.backdrop); 4908 } 4909 tile_seg_ref = TileSegRef(fill.tile_ref); 4910 do 4911 { 4912 uint param_17 = tile_seg_ref.offset; 4913 uint param_18 = 24u; 4914 bool param_19 = mem_ok; 4915 Alloc param_20 = new_alloc(param_17, param_18, param_19); 4916 TileSegRef param_21 = tile_seg_ref; 4917 TileSeg seg_1 = TileSeg_read(param_20, param_21); 4918 for (uint k_4 = 0u; k_4 < 8u; k_4++) 4919 { 4920 uint param_22 = k_4; 4921 vec2 my_xy = xy + vec2(chunk_offset(param_22)); 4922 vec2 start = seg_1.origin - my_xy; 4923 vec2 end = start + seg_1.vector; 4924 vec2 window = clamp(vec2(start.y, end.y), vec2(0.0), vec2(1.0)); 4925 if (!(window.x == window.y)) 4926 { 4927 vec2 t_1 = (window - vec2(start.y)) / vec2(seg_1.vector.y); 4928 vec2 xs = vec2(mix(start.x, end.x, t_1.x), mix(start.x, end.x, t_1.y)); 4929 float xmin = min(min(xs.x, xs.y), 1.0) - 9.9999999747524270787835121154785e-07; 4930 float xmax = max(xs.x, xs.y); 4931 float b = min(xmax, 1.0); 4932 float c = max(b, 0.0); 4933 float d = max(xmin, 0.0); 4934 float a = ((b + (0.5 * ((d * d) - (c * c)))) - xmin) / (xmax - xmin); 4935 area[k_4] += (a * (window.x - window.y)); 4936 } 4937 area[k_4] += (sign(seg_1.vector.x) * clamp((my_xy.y - seg_1.y_edge) + 1.0, 0.0, 1.0)); 4938 } 4939 tile_seg_ref = seg_1.next; 4940 } while (tile_seg_ref.offset != 0u); 4941 for (uint k_5 = 0u; k_5 < 8u; k_5++) 4942 { 4943 area[k_5] = min(abs(area[k_5]), 1.0); 4944 } 4945 cmd_ref.offset += 12u; 4946 break; 4947 } 4948 case 3u: 4949 { 4950 for (uint k_6 = 0u; k_6 < 8u; k_6++) 4951 { 4952 area[k_6] = 1.0; 4953 } 4954 cmd_ref.offset += 4u; 4955 break; 4956 } 4957 case 4u: 4958 { 4959 Alloc param_23 = cmd_alloc; 4960 CmdRef param_24 = cmd_ref; 4961 CmdAlpha alpha = Cmd_Alpha_read(param_23, param_24); 4962 for (uint k_7 = 0u; k_7 < 8u; k_7++) 4963 { 4964 area[k_7] = alpha.alpha; 4965 } 4966 cmd_ref.offset += 8u; 4967 break; 4968 } 4969 case 5u: 4970 { 4971 Alloc param_25 = cmd_alloc; 4972 CmdRef param_26 = cmd_ref; 4973 CmdColor color = Cmd_Color_read(param_25, param_26); 4974 uint param_27 = color.rgba_color; 4975 mediump vec4 fg = unpacksRGB(param_27); 4976 for (uint k_8 = 0u; k_8 < 8u; k_8++) 4977 { 4978 mediump vec4 fg_k = fg * area[k_8]; 4979 rgba[k_8] = (rgba[k_8] * (1.0 - fg_k.w)) + fg_k; 4980 } 4981 cmd_ref.offset += 8u; 4982 break; 4983 } 4984 case 6u: 4985 { 4986 Alloc param_28 = cmd_alloc; 4987 CmdRef param_29 = cmd_ref; 4988 CmdImage fill_img = Cmd_Image_read(param_28, param_29); 4989 uvec2 param_30 = xy_uint; 4990 CmdImage param_31 = fill_img; 4991 mediump vec4 img[8] = fillImage(param_30, param_31); 4992 for (uint k_9 = 0u; k_9 < 8u; k_9++) 4993 { 4994 mediump vec4 fg_k_1 = img[k_9] * area[k_9]; 4995 rgba[k_9] = (rgba[k_9] * (1.0 - fg_k_1.w)) + fg_k_1; 4996 } 4997 cmd_ref.offset += 12u; 4998 break; 4999 } 5000 case 7u: 5001 { 5002 base_ix = (scratch_alloc.offset >> uint(2)) + (2u * ((((clip_depth * 32u) * 32u) + gl_LocalInvocationID.x) + (32u * gl_LocalInvocationID.y))); 5003 for (uint k_10 = 0u; k_10 < 8u; k_10++) 5004 { 5005 uint param_32 = k_10; 5006 uvec2 offset = chunk_offset(param_32); 5007 mediump vec4 param_33 = vec4(rgba[k_10]); 5008 uint _1288 = packsRGB(param_33); 5009 uint srgb = _1288; 5010 mediump float alpha_1 = clamp(abs(area[k_10]), 0.0, 1.0); 5011 Alloc param_34 = scratch_alloc; 5012 uint param_35 = (base_ix + 0u) + (2u * (offset.x + (offset.y * 32u))); 5013 uint param_36 = srgb; 5014 write_mem(param_34, param_35, param_36); 5015 Alloc param_37 = scratch_alloc; 5016 uint param_38 = (base_ix + 1u) + (2u * (offset.x + (offset.y * 32u))); 5017 uint param_39 = floatBitsToUint(alpha_1); 5018 write_mem(param_37, param_38, param_39); 5019 rgba[k_10] = vec4(0.0); 5020 } 5021 clip_depth++; 5022 cmd_ref.offset += 4u; 5023 break; 5024 } 5025 case 8u: 5026 { 5027 clip_depth--; 5028 base_ix = (scratch_alloc.offset >> uint(2)) + (2u * ((((clip_depth * 32u) * 32u) + gl_LocalInvocationID.x) + (32u * gl_LocalInvocationID.y))); 5029 for (uint k_11 = 0u; k_11 < 8u; k_11++) 5030 { 5031 uint param_40 = k_11; 5032 uvec2 offset_1 = chunk_offset(param_40); 5033 Alloc param_41 = scratch_alloc; 5034 uint param_42 = (base_ix + 0u) + (2u * (offset_1.x + (offset_1.y * 32u))); 5035 uint srgb_1 = read_mem(param_41, param_42); 5036 Alloc param_43 = scratch_alloc; 5037 uint param_44 = (base_ix + 1u) + (2u * (offset_1.x + (offset_1.y * 32u))); 5038 uint alpha_2 = read_mem(param_43, param_44); 5039 uint param_45 = srgb_1; 5040 mediump vec4 bg = unpacksRGB(param_45); 5041 mediump vec4 fg_1 = (rgba[k_11] * area[k_11]) * uintBitsToFloat(alpha_2); 5042 rgba[k_11] = (bg * (1.0 - fg_1.w)) + fg_1; 5043 } 5044 cmd_ref.offset += 4u; 5045 break; 5046 } 5047 case 9u: 5048 { 5049 Alloc param_46 = cmd_alloc; 5050 CmdRef param_47 = cmd_ref; 5051 cmd_ref = CmdRef(Cmd_Jump_read(param_46, param_47).new_ref); 5052 cmd_alloc.offset = cmd_ref.offset; 5053 break; 5054 } 5055 } 5056 } 5057 for (uint i_1 = 0u; i_1 < 8u; i_1++) 5058 { 5059 uint param_48 = i_1; 5060 mediump vec3 param_49 = rgba[i_1].xyz; 5061 imageStore(image, ivec2(xy_uint + chunk_offset(param_48)), vec4(tosRGB(param_49), rgba[i_1].w)); 5062 } 5063 } 5064 5065 `, 5066 } 5067 shader_material_frag = driver.ShaderSources{ 5068 Name: "material.frag", 5069 Inputs: []driver.InputLocation{{Name: "vUV", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}}, 5070 Textures: []driver.TextureBinding{{Name: "tex", Binding: 0}}, 5071 GLSL100ES: `#version 100 5072 precision mediump float; 5073 precision highp int; 5074 5075 uniform mediump sampler2D tex; 5076 5077 varying vec2 vUV; 5078 5079 vec3 RGBtosRGB(vec3 rgb) 5080 { 5081 bvec3 cutoff = greaterThanEqual(rgb, vec3(0.003130800090730190277099609375)); 5082 vec3 below = vec3(12.9200000762939453125) * rgb; 5083 vec3 above = (vec3(1.05499994754791259765625) * pow(rgb, vec3(0.416660010814666748046875))) - vec3(0.054999999701976776123046875); 5084 return vec3(cutoff.x ? above.x : below.x, cutoff.y ? above.y : below.y, cutoff.z ? above.z : below.z); 5085 } 5086 5087 void main() 5088 { 5089 vec4 texel = texture2D(tex, vUV); 5090 vec3 param = texel.xyz; 5091 vec3 _59 = RGBtosRGB(param); 5092 texel = vec4(_59.x, _59.y, _59.z, texel.w); 5093 gl_FragData[0] = texel; 5094 } 5095 5096 `, 5097 GLSL300ES: `#version 300 es 5098 precision mediump float; 5099 precision highp int; 5100 5101 uniform mediump sampler2D tex; 5102 5103 in vec2 vUV; 5104 layout(location = 0) out vec4 fragColor; 5105 5106 vec3 RGBtosRGB(vec3 rgb) 5107 { 5108 bvec3 cutoff = greaterThanEqual(rgb, vec3(0.003130800090730190277099609375)); 5109 vec3 below = vec3(12.9200000762939453125) * rgb; 5110 vec3 above = (vec3(1.05499994754791259765625) * pow(rgb, vec3(0.416660010814666748046875))) - vec3(0.054999999701976776123046875); 5111 return vec3(cutoff.x ? above.x : below.x, cutoff.y ? above.y : below.y, cutoff.z ? above.z : below.z); 5112 } 5113 5114 void main() 5115 { 5116 vec4 texel = texture(tex, vUV); 5117 vec3 param = texel.xyz; 5118 vec3 _59 = RGBtosRGB(param); 5119 texel = vec4(_59.x, _59.y, _59.z, texel.w); 5120 fragColor = texel; 5121 } 5122 5123 `, 5124 GLSL130: `#version 130 5125 5126 uniform sampler2D tex; 5127 5128 in vec2 vUV; 5129 out vec4 fragColor; 5130 5131 vec3 RGBtosRGB(vec3 rgb) 5132 { 5133 bvec3 cutoff = greaterThanEqual(rgb, vec3(0.003130800090730190277099609375)); 5134 vec3 below = vec3(12.9200000762939453125) * rgb; 5135 vec3 above = (vec3(1.05499994754791259765625) * pow(rgb, vec3(0.416660010814666748046875))) - vec3(0.054999999701976776123046875); 5136 return vec3(cutoff.x ? above.x : below.x, cutoff.y ? above.y : below.y, cutoff.z ? above.z : below.z); 5137 } 5138 5139 void main() 5140 { 5141 vec4 texel = texture(tex, vUV); 5142 vec3 param = texel.xyz; 5143 vec3 _59 = RGBtosRGB(param); 5144 texel = vec4(_59.x, _59.y, _59.z, texel.w); 5145 fragColor = texel; 5146 } 5147 5148 `, 5149 GLSL150: `#version 150 5150 5151 uniform sampler2D tex; 5152 5153 in vec2 vUV; 5154 out vec4 fragColor; 5155 5156 vec3 RGBtosRGB(vec3 rgb) 5157 { 5158 bvec3 cutoff = greaterThanEqual(rgb, vec3(0.003130800090730190277099609375)); 5159 vec3 below = vec3(12.9200000762939453125) * rgb; 5160 vec3 above = (vec3(1.05499994754791259765625) * pow(rgb, vec3(0.416660010814666748046875))) - vec3(0.054999999701976776123046875); 5161 return vec3(cutoff.x ? above.x : below.x, cutoff.y ? above.y : below.y, cutoff.z ? above.z : below.z); 5162 } 5163 5164 void main() 5165 { 5166 vec4 texel = texture(tex, vUV); 5167 vec3 param = texel.xyz; 5168 vec3 _59 = RGBtosRGB(param); 5169 texel = vec4(_59.x, _59.y, _59.z, texel.w); 5170 fragColor = texel; 5171 } 5172 5173 `, 5174 HLSL: "DXBC\x9e\x87LD\xf3\x17\n\x06\\\xb7\x98\x94\xa9PKe\x01\x00\x00\x00\xc8\x04\x00\x00\x06\x00\x00\x008\x00\x00\x00\xbc\x01\x00\x00D\x03\x00\x00\xc0\x03\x00\x00`\x04\x00\x00\x94\x04\x00\x00Aon9|\x01\x00\x00|\x01\x00\x00\x00\x02\xff\xffT\x01\x00\x00(\x00\x00\x00\x00\x00(\x00\x00\x00(\x00\x00\x00(\x00\x01\x00$\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x02\xff\xffQ\x00\x00\x05\x00\x00\x0f\xa0=\n\x87?\xaeGa\xbd\x00\x00\x00\x00\x00\x00\x00\x00Q\x00\x00\x05\x01\x00\x0f\xa0\x1c.M\xbbR\xb8NAvT\xd5>\x00\x00\x00\x00\x1f\x00\x00\x02\x00\x00\x00\x80\x00\x00\x03\xb0\x1f\x00\x00\x02\x00\x00\x00\x90\x00\b\x0f\xa0B\x00\x00\x03\x00\x00\x0f\x80\x00\x00\xe4\xb0\x00\b\xe4\xa0\x0f\x00\x00\x02\x01\x00\x01\x80\x00\x00\x00\x80\x0f\x00\x00\x02\x01\x00\x02\x80\x00\x00U\x80\x0f\x00\x00\x02\x01\x00\x04\x80\x00\x00\xaa\x80\x05\x00\x00\x03\x01\x00\a\x80\x01\x00\xe4\x80\x01\x00\xaa\xa0\x0e\x00\x00\x02\x02\x00\x01\x80\x01\x00\x00\x80\x0e\x00\x00\x02\x02\x00\x02\x80\x01\x00U\x80\x0e\x00\x00\x02\x02\x00\x04\x80\x01\x00\xaa\x80\x04\x00\x00\x04\x01\x00\a\x80\x02\x00\xe4\x80\x00\x00\x00\xa0\x00\x00U\xa0\x02\x00\x00\x03\x01\x00\b\x80\x00\x00\x00\x80\x01\x00\x00\xa0\x05\x00\x00\x03\x02\x00\a\x80\x00\x00\xe4\x80\x01\x00U\xa0X\x00\x00\x04\x00\x00\x01\x80\x01\x00\xff\x80\x01\x00\x00\x80\x02\x00\x00\x80\x02\x00\x00\x03\x01\x00\x01\x80\x00\x00U\x80\x01\x00\x00\xa0X\x00\x00\x04\x00\x00\x02\x80\x01\x00\x00\x80\x01\x00U\x80\x02\x00U\x80\x02\x00\x00\x03\x01\x00\x01\x80\x00\x00\xaa\x80\x01\x00\x00\xa0X\x00\x00\x04\x00\x00\x04\x80\x01\x00\x00\x80\x01\x00\xaa\x80\x02\x00\xaa\x80\x01\x00\x00\x02\x00\b\x0f\x80\x00\x00\xe4\x80\xff\xff\x00\x00SHDR\x80\x01\x00\x00@\x00\x00\x00`\x00\x00\x00Z\x00\x00\x03\x00`\x10\x00\x00\x00\x00\x00X\x18\x00\x04\x00p\x10\x00\x00\x00\x00\x00UU\x00\x00b\x10\x00\x032\x10\x10\x00\x00\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x00h\x00\x00\x02\x03\x00\x00\x00E\x00\x00\t\xf2\x00\x10\x00\x00\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x00F~\x10\x00\x00\x00\x00\x00\x00`\x10\x00\x00\x00\x00\x00/\x00\x00\x05r\x00\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x008\x00\x00\nr\x00\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x00\x02@\x00\x00vT\xd5>vT\xd5>vT\xd5>\x00\x00\x00\x00\x19\x00\x00\x05r\x00\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x002\x00\x00\x0fr\x00\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x00\x02@\x00\x00=\n\x87?=\n\x87?=\n\x87?\x00\x00\x00\x00\x02@\x00\x00\xaeGa\xbd\xaeGa\xbd\xaeGa\xbd\x00\x00\x00\x00\x1d\x00\x00\nr\x00\x10\x00\x02\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x1c.M;\x1c.M;\x1c.M;\x00\x00\x00\x008\x00\x00\nr\x00\x10\x00\x00\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x00\x02@\x00\x00R\xb8NAR\xb8NAR\xb8NA\x00\x00\x00\x006\x00\x00\x05\x82 \x10\x00\x00\x00\x00\x00:\x00\x10\x00\x00\x00\x00\x007\x00\x00\tr \x10\x00\x00\x00\x00\x00F\x02\x10\x00\x02\x00\x00\x00F\x02\x10\x00\x01\x00\x00\x00F\x02\x10\x00\x00\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00\n\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00m\x00\x00\x00\\\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00i\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x01\x00\x00\x00\r\x00\x00\x00_tex_sampler\x00tex\x00Microsoft (R) HLSL Shader Compiler 10.1\x00\xab\xab\xabISGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00TEXCOORD\x00\xab\xab\xabOSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xab", 5175 } 5176 shader_material_vert = driver.ShaderSources{ 5177 Name: "material.vert", 5178 Inputs: []driver.InputLocation{{Name: "pos", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}, {Name: "uv", Location: 1, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 2}}, 5179 Uniforms: driver.UniformsReflection{ 5180 Blocks: []driver.UniformBlock{{Name: "Block", Binding: 0}}, 5181 Locations: []driver.UniformLocation{{Name: "_block.transform", Type: 0x0, Size: 4, Offset: 0}}, 5182 Size: 16, 5183 }, 5184 GLSL100ES: `#version 100 5185 5186 struct Block 5187 { 5188 vec4 transform; 5189 }; 5190 5191 uniform Block _block; 5192 5193 varying vec2 vUV; 5194 attribute vec2 uv; 5195 attribute vec2 pos; 5196 5197 void main() 5198 { 5199 vUV = uv; 5200 gl_Position = vec4((pos * _block.transform.xy) + _block.transform.zw, 0.0, 1.0); 5201 } 5202 5203 `, 5204 GLSL300ES: `#version 300 es 5205 5206 layout(std140) uniform Block 5207 { 5208 vec4 transform; 5209 } _block; 5210 5211 out vec2 vUV; 5212 layout(location = 1) in vec2 uv; 5213 layout(location = 0) in vec2 pos; 5214 5215 void main() 5216 { 5217 vUV = uv; 5218 gl_Position = vec4((pos * _block.transform.xy) + _block.transform.zw, 0.0, 1.0); 5219 } 5220 5221 `, 5222 GLSL130: `#version 130 5223 5224 struct Block 5225 { 5226 vec4 transform; 5227 }; 5228 5229 uniform Block _block; 5230 5231 out vec2 vUV; 5232 in vec2 uv; 5233 in vec2 pos; 5234 5235 void main() 5236 { 5237 vUV = uv; 5238 gl_Position = vec4((pos * _block.transform.xy) + _block.transform.zw, 0.0, 1.0); 5239 } 5240 5241 `, 5242 GLSL150: `#version 150 5243 5244 layout(std140) uniform Block 5245 { 5246 vec4 transform; 5247 } _block; 5248 5249 out vec2 vUV; 5250 in vec2 uv; 5251 in vec2 pos; 5252 5253 void main() 5254 { 5255 vUV = uv; 5256 gl_Position = vec4((pos * _block.transform.xy) + _block.transform.zw, 0.0, 1.0); 5257 } 5258 5259 `, 5260 HLSL: "DXBCq\x961\x05q\xd1`\xea\xd4\xd2\xe1g\x9e\x84\\0\x01\x00\x00\x00\x88\x03\x00\x00\x06\x00\x00\x008\x00\x00\x00\xe8\x00\x00\x00\xa0\x01\x00\x00\x1c\x02\x00\x00\xe4\x02\x00\x000\x03\x00\x00Aon9\xa8\x00\x00\x00\xa8\x00\x00\x00\x00\x02\xfe\xfft\x00\x00\x004\x00\x00\x00\x01\x00$\x00\x00\x000\x00\x00\x000\x00\x00\x00$\x00\x01\x000\x00\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xfe\xffQ\x00\x00\x05\x02\x00\x0f\xa0\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x02\x05\x00\x00\x80\x00\x00\x0f\x90\x1f\x00\x00\x02\x05\x00\x01\x80\x01\x00\x0f\x90\x04\x00\x00\x04\x00\x00\x03\x80\x00\x00\xe4\x90\x01\x00\xe4\xa0\x01\x00\xee\xa0\x02\x00\x00\x03\x00\x00\x03\xc0\x00\x00\xe4\x80\x00\x00\xe4\xa0\x01\x00\x00\x02\x00\x00\x03\xe0\x01\x00\xe4\x90\x01\x00\x00\x02\x00\x00\f\xc0\x02\x00D\xa0\xff\xff\x00\x00SHDR\xb0\x00\x00\x00@\x00\x01\x00,\x00\x00\x00Y\x00\x00\x04F\x8e \x00\x00\x00\x00\x00\x01\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x00\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x01\x00\x00\x00e\x00\x00\x032 \x10\x00\x00\x00\x00\x00g\x00\x00\x04\xf2 \x10\x00\x01\x00\x00\x00\x01\x00\x00\x006\x00\x00\x052 \x10\x00\x00\x00\x00\x00F\x10\x10\x00\x01\x00\x00\x002\x00\x00\v2 \x10\x00\x01\x00\x00\x00F\x10\x10\x00\x00\x00\x00\x00F\x80 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x8a \x00\x00\x00\x00\x00\x00\x00\x00\x006\x00\x00\b\xc2 \x10\x00\x01\x00\x00\x00\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?>\x00\x00\x01STATt\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\xc0\x00\x00\x00\x01\x00\x00\x00D\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xfe\xff\x00\x01\x00\x00\x98\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00Block\x00\xab\xab<\x00\x00\x00\x01\x00\x00\x00\\\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00t\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00_block_transform\x00\xab\xab\xab\x01\x00\x03\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00Microsoft (R) HLSL Shader Compiler 10.1\x00ISGND\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x008\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x03\x00\x00TEXCOORD\x00\xab\xab\xabOSGNP\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\f\x00\x00A\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x0f\x00\x00\x00TEXCOORD\x00SV_Position\x00\xab\xab\xab", 5261 } 5262 shader_path_coarse_comp = driver.ShaderSources{ 5263 Name: "path_coarse.comp", 5264 GLSL310ES: `#version 310 es 5265 layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; 5266 5267 struct Alloc 5268 { 5269 uint offset; 5270 }; 5271 5272 struct MallocResult 5273 { 5274 Alloc alloc; 5275 bool failed; 5276 }; 5277 5278 struct PathCubicRef 5279 { 5280 uint offset; 5281 }; 5282 5283 struct PathCubic 5284 { 5285 vec2 p0; 5286 vec2 p1; 5287 vec2 p2; 5288 vec2 p3; 5289 uint path_ix; 5290 uint trans_ix; 5291 vec2 stroke; 5292 }; 5293 5294 struct PathSegRef 5295 { 5296 uint offset; 5297 }; 5298 5299 struct PathSegTag 5300 { 5301 uint tag; 5302 uint flags; 5303 }; 5304 5305 struct TileRef 5306 { 5307 uint offset; 5308 }; 5309 5310 struct PathRef 5311 { 5312 uint offset; 5313 }; 5314 5315 struct Path 5316 { 5317 uvec4 bbox; 5318 TileRef tiles; 5319 }; 5320 5321 struct TileSegRef 5322 { 5323 uint offset; 5324 }; 5325 5326 struct TileSeg 5327 { 5328 vec2 origin; 5329 vec2 vector; 5330 float y_edge; 5331 TileSegRef next; 5332 }; 5333 5334 struct TransformSegRef 5335 { 5336 uint offset; 5337 }; 5338 5339 struct TransformSeg 5340 { 5341 vec4 mat; 5342 vec2 translate; 5343 }; 5344 5345 struct SubdivResult 5346 { 5347 float val; 5348 float a0; 5349 float a2; 5350 }; 5351 5352 struct Config 5353 { 5354 uint n_elements; 5355 uint n_pathseg; 5356 uint width_in_tiles; 5357 uint height_in_tiles; 5358 Alloc tile_alloc; 5359 Alloc bin_alloc; 5360 Alloc ptcl_alloc; 5361 Alloc pathseg_alloc; 5362 Alloc anno_alloc; 5363 Alloc trans_alloc; 5364 }; 5365 5366 layout(binding = 0, std430) buffer Memory 5367 { 5368 uint mem_offset; 5369 uint mem_error; 5370 uint memory[]; 5371 } _145; 5372 5373 layout(binding = 1, std430) readonly buffer ConfigBuf 5374 { 5375 Config conf; 5376 } _787; 5377 5378 bool touch_mem(Alloc alloc, uint offset) 5379 { 5380 return true; 5381 } 5382 5383 uint read_mem(Alloc alloc, uint offset) 5384 { 5385 Alloc param = alloc; 5386 uint param_1 = offset; 5387 if (!touch_mem(param, param_1)) 5388 { 5389 return 0u; 5390 } 5391 uint v = _145.memory[offset]; 5392 return v; 5393 } 5394 5395 PathSegTag PathSeg_tag(Alloc a, PathSegRef ref) 5396 { 5397 Alloc param = a; 5398 uint param_1 = ref.offset >> uint(2); 5399 uint tag_and_flags = read_mem(param, param_1); 5400 return PathSegTag(tag_and_flags & 65535u, tag_and_flags >> uint(16)); 5401 } 5402 5403 PathCubic PathCubic_read(Alloc a, PathCubicRef ref) 5404 { 5405 uint ix = ref.offset >> uint(2); 5406 Alloc param = a; 5407 uint param_1 = ix + 0u; 5408 uint raw0 = read_mem(param, param_1); 5409 Alloc param_2 = a; 5410 uint param_3 = ix + 1u; 5411 uint raw1 = read_mem(param_2, param_3); 5412 Alloc param_4 = a; 5413 uint param_5 = ix + 2u; 5414 uint raw2 = read_mem(param_4, param_5); 5415 Alloc param_6 = a; 5416 uint param_7 = ix + 3u; 5417 uint raw3 = read_mem(param_6, param_7); 5418 Alloc param_8 = a; 5419 uint param_9 = ix + 4u; 5420 uint raw4 = read_mem(param_8, param_9); 5421 Alloc param_10 = a; 5422 uint param_11 = ix + 5u; 5423 uint raw5 = read_mem(param_10, param_11); 5424 Alloc param_12 = a; 5425 uint param_13 = ix + 6u; 5426 uint raw6 = read_mem(param_12, param_13); 5427 Alloc param_14 = a; 5428 uint param_15 = ix + 7u; 5429 uint raw7 = read_mem(param_14, param_15); 5430 Alloc param_16 = a; 5431 uint param_17 = ix + 8u; 5432 uint raw8 = read_mem(param_16, param_17); 5433 Alloc param_18 = a; 5434 uint param_19 = ix + 9u; 5435 uint raw9 = read_mem(param_18, param_19); 5436 Alloc param_20 = a; 5437 uint param_21 = ix + 10u; 5438 uint raw10 = read_mem(param_20, param_21); 5439 Alloc param_22 = a; 5440 uint param_23 = ix + 11u; 5441 uint raw11 = read_mem(param_22, param_23); 5442 PathCubic s; 5443 s.p0 = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1)); 5444 s.p1 = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 5445 s.p2 = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5)); 5446 s.p3 = vec2(uintBitsToFloat(raw6), uintBitsToFloat(raw7)); 5447 s.path_ix = raw8; 5448 s.trans_ix = raw9; 5449 s.stroke = vec2(uintBitsToFloat(raw10), uintBitsToFloat(raw11)); 5450 return s; 5451 } 5452 5453 PathCubic PathSeg_Cubic_read(Alloc a, PathSegRef ref) 5454 { 5455 Alloc param = a; 5456 PathCubicRef param_1 = PathCubicRef(ref.offset + 4u); 5457 return PathCubic_read(param, param_1); 5458 } 5459 5460 TransformSeg TransformSeg_read(Alloc a, TransformSegRef ref) 5461 { 5462 uint ix = ref.offset >> uint(2); 5463 Alloc param = a; 5464 uint param_1 = ix + 0u; 5465 uint raw0 = read_mem(param, param_1); 5466 Alloc param_2 = a; 5467 uint param_3 = ix + 1u; 5468 uint raw1 = read_mem(param_2, param_3); 5469 Alloc param_4 = a; 5470 uint param_5 = ix + 2u; 5471 uint raw2 = read_mem(param_4, param_5); 5472 Alloc param_6 = a; 5473 uint param_7 = ix + 3u; 5474 uint raw3 = read_mem(param_6, param_7); 5475 Alloc param_8 = a; 5476 uint param_9 = ix + 4u; 5477 uint raw4 = read_mem(param_8, param_9); 5478 Alloc param_10 = a; 5479 uint param_11 = ix + 5u; 5480 uint raw5 = read_mem(param_10, param_11); 5481 TransformSeg s; 5482 s.mat = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 5483 s.translate = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5)); 5484 return s; 5485 } 5486 5487 vec2 eval_cubic(vec2 p0, vec2 p1, vec2 p2, vec2 p3, float t) 5488 { 5489 float mt = 1.0 - t; 5490 return (p0 * ((mt * mt) * mt)) + (((p1 * ((mt * mt) * 3.0)) + (((p2 * (mt * 3.0)) + (p3 * t)) * t)) * t); 5491 } 5492 5493 float approx_parabola_integral(float x) 5494 { 5495 return x * inversesqrt(sqrt(0.3300000131130218505859375 + (0.201511204242706298828125 + ((0.25 * x) * x)))); 5496 } 5497 5498 SubdivResult estimate_subdiv(vec2 p0, vec2 p1, vec2 p2, float sqrt_tol) 5499 { 5500 vec2 d01 = p1 - p0; 5501 vec2 d12 = p2 - p1; 5502 vec2 dd = d01 - d12; 5503 float _cross = ((p2.x - p0.x) * dd.y) - ((p2.y - p0.y) * dd.x); 5504 float x0 = ((d01.x * dd.x) + (d01.y * dd.y)) / _cross; 5505 float x2 = ((d12.x * dd.x) + (d12.y * dd.y)) / _cross; 5506 float scale = abs(_cross / (length(dd) * (x2 - x0))); 5507 float param = x0; 5508 float a0 = approx_parabola_integral(param); 5509 float param_1 = x2; 5510 float a2 = approx_parabola_integral(param_1); 5511 float val = 0.0; 5512 if (scale < 1000000000.0) 5513 { 5514 float da = abs(a2 - a0); 5515 float sqrt_scale = sqrt(scale); 5516 if (sign(x0) == sign(x2)) 5517 { 5518 val = da * sqrt_scale; 5519 } 5520 else 5521 { 5522 float xmin = sqrt_tol / sqrt_scale; 5523 float param_2 = xmin; 5524 val = (sqrt_tol * da) / approx_parabola_integral(param_2); 5525 } 5526 } 5527 return SubdivResult(val, a0, a2); 5528 } 5529 5530 uint fill_mode_from_flags(uint flags) 5531 { 5532 return flags & 1u; 5533 } 5534 5535 Path Path_read(Alloc a, PathRef ref) 5536 { 5537 uint ix = ref.offset >> uint(2); 5538 Alloc param = a; 5539 uint param_1 = ix + 0u; 5540 uint raw0 = read_mem(param, param_1); 5541 Alloc param_2 = a; 5542 uint param_3 = ix + 1u; 5543 uint raw1 = read_mem(param_2, param_3); 5544 Alloc param_4 = a; 5545 uint param_5 = ix + 2u; 5546 uint raw2 = read_mem(param_4, param_5); 5547 Path s; 5548 s.bbox = uvec4(raw0 & 65535u, raw0 >> uint(16), raw1 & 65535u, raw1 >> uint(16)); 5549 s.tiles = TileRef(raw2); 5550 return s; 5551 } 5552 5553 Alloc new_alloc(uint offset, uint size, bool mem_ok) 5554 { 5555 Alloc a; 5556 a.offset = offset; 5557 return a; 5558 } 5559 5560 float approx_parabola_inv_integral(float x) 5561 { 5562 return x * sqrt(0.61000001430511474609375 + (0.1520999968051910400390625 + ((0.25 * x) * x))); 5563 } 5564 5565 vec2 eval_quad(vec2 p0, vec2 p1, vec2 p2, float t) 5566 { 5567 float mt = 1.0 - t; 5568 return (p0 * (mt * mt)) + (((p1 * (mt * 2.0)) + (p2 * t)) * t); 5569 } 5570 5571 MallocResult malloc(uint size) 5572 { 5573 uint _151 = atomicAdd(_145.mem_offset, size); 5574 uint offset = _151; 5575 MallocResult r; 5576 r.failed = (offset + size) > uint(int(uint(_145.memory.length())) * 4); 5577 uint param = offset; 5578 uint param_1 = size; 5579 bool param_2 = !r.failed; 5580 r.alloc = new_alloc(param, param_1, param_2); 5581 if (r.failed) 5582 { 5583 uint _180 = atomicMax(_145.mem_error, 1u); 5584 return r; 5585 } 5586 return r; 5587 } 5588 5589 TileRef Tile_index(TileRef ref, uint index) 5590 { 5591 return TileRef(ref.offset + (index * 8u)); 5592 } 5593 5594 void write_mem(Alloc alloc, uint offset, uint val) 5595 { 5596 Alloc param = alloc; 5597 uint param_1 = offset; 5598 if (!touch_mem(param, param_1)) 5599 { 5600 return; 5601 } 5602 _145.memory[offset] = val; 5603 } 5604 5605 void TileSeg_write(Alloc a, TileSegRef ref, TileSeg s) 5606 { 5607 uint ix = ref.offset >> uint(2); 5608 Alloc param = a; 5609 uint param_1 = ix + 0u; 5610 uint param_2 = floatBitsToUint(s.origin.x); 5611 write_mem(param, param_1, param_2); 5612 Alloc param_3 = a; 5613 uint param_4 = ix + 1u; 5614 uint param_5 = floatBitsToUint(s.origin.y); 5615 write_mem(param_3, param_4, param_5); 5616 Alloc param_6 = a; 5617 uint param_7 = ix + 2u; 5618 uint param_8 = floatBitsToUint(s.vector.x); 5619 write_mem(param_6, param_7, param_8); 5620 Alloc param_9 = a; 5621 uint param_10 = ix + 3u; 5622 uint param_11 = floatBitsToUint(s.vector.y); 5623 write_mem(param_9, param_10, param_11); 5624 Alloc param_12 = a; 5625 uint param_13 = ix + 4u; 5626 uint param_14 = floatBitsToUint(s.y_edge); 5627 write_mem(param_12, param_13, param_14); 5628 Alloc param_15 = a; 5629 uint param_16 = ix + 5u; 5630 uint param_17 = s.next.offset; 5631 write_mem(param_15, param_16, param_17); 5632 } 5633 5634 void main() 5635 { 5636 uint element_ix = gl_GlobalInvocationID.x; 5637 PathSegRef ref = PathSegRef(_787.conf.pathseg_alloc.offset + (element_ix * 52u)); 5638 PathSegTag tag = PathSegTag(0u, 0u); 5639 if (element_ix < _787.conf.n_pathseg) 5640 { 5641 Alloc param; 5642 param.offset = _787.conf.pathseg_alloc.offset; 5643 PathSegRef param_1 = ref; 5644 tag = PathSeg_tag(param, param_1); 5645 } 5646 bool mem_ok = _145.mem_error == 0u; 5647 switch (tag.tag) 5648 { 5649 case 1u: 5650 { 5651 Alloc param_2; 5652 param_2.offset = _787.conf.pathseg_alloc.offset; 5653 PathSegRef param_3 = ref; 5654 PathCubic cubic = PathSeg_Cubic_read(param_2, param_3); 5655 uint trans_ix = cubic.trans_ix; 5656 if (trans_ix > 0u) 5657 { 5658 TransformSegRef trans_ref = TransformSegRef(_787.conf.trans_alloc.offset + ((trans_ix - 1u) * 24u)); 5659 Alloc param_4; 5660 param_4.offset = _787.conf.trans_alloc.offset; 5661 TransformSegRef param_5 = trans_ref; 5662 TransformSeg trans = TransformSeg_read(param_4, param_5); 5663 cubic.p0 = ((trans.mat.xy * cubic.p0.x) + (trans.mat.zw * cubic.p0.y)) + trans.translate; 5664 cubic.p1 = ((trans.mat.xy * cubic.p1.x) + (trans.mat.zw * cubic.p1.y)) + trans.translate; 5665 cubic.p2 = ((trans.mat.xy * cubic.p2.x) + (trans.mat.zw * cubic.p2.y)) + trans.translate; 5666 cubic.p3 = ((trans.mat.xy * cubic.p3.x) + (trans.mat.zw * cubic.p3.y)) + trans.translate; 5667 } 5668 vec2 err_v = (((cubic.p2 - cubic.p1) * 3.0) + cubic.p0) - cubic.p3; 5669 float err = (err_v.x * err_v.x) + (err_v.y * err_v.y); 5670 uint n_quads = max(uint(ceil(pow(err * 3.7037036418914794921875, 0.16666667163372039794921875))), 1u); 5671 float val = 0.0; 5672 vec2 qp0 = cubic.p0; 5673 float _step = 1.0 / float(n_quads); 5674 for (uint i = 0u; i < n_quads; i++) 5675 { 5676 float t = float(i + 1u) * _step; 5677 vec2 param_6 = cubic.p0; 5678 vec2 param_7 = cubic.p1; 5679 vec2 param_8 = cubic.p2; 5680 vec2 param_9 = cubic.p3; 5681 float param_10 = t; 5682 vec2 qp2 = eval_cubic(param_6, param_7, param_8, param_9, param_10); 5683 vec2 param_11 = cubic.p0; 5684 vec2 param_12 = cubic.p1; 5685 vec2 param_13 = cubic.p2; 5686 vec2 param_14 = cubic.p3; 5687 float param_15 = t - (0.5 * _step); 5688 vec2 qp1 = eval_cubic(param_11, param_12, param_13, param_14, param_15); 5689 qp1 = (qp1 * 2.0) - ((qp0 + qp2) * 0.5); 5690 vec2 param_16 = qp0; 5691 vec2 param_17 = qp1; 5692 vec2 param_18 = qp2; 5693 float param_19 = 0.4743416607379913330078125; 5694 SubdivResult params = estimate_subdiv(param_16, param_17, param_18, param_19); 5695 val += params.val; 5696 qp0 = qp2; 5697 } 5698 uint n = max(uint(ceil((val * 0.5) / 0.4743416607379913330078125)), 1u); 5699 uint param_20 = tag.flags; 5700 bool is_stroke = fill_mode_from_flags(param_20) == 1u; 5701 uint path_ix = cubic.path_ix; 5702 Alloc param_21; 5703 param_21.offset = _787.conf.tile_alloc.offset; 5704 PathRef param_22 = PathRef(_787.conf.tile_alloc.offset + (path_ix * 12u)); 5705 Path path = Path_read(param_21, param_22); 5706 uint param_23 = path.tiles.offset; 5707 uint param_24 = ((path.bbox.z - path.bbox.x) * (path.bbox.w - path.bbox.y)) * 8u; 5708 bool param_25 = mem_ok; 5709 Alloc path_alloc = new_alloc(param_23, param_24, param_25); 5710 ivec4 bbox = ivec4(path.bbox); 5711 vec2 p0 = cubic.p0; 5712 qp0 = cubic.p0; 5713 float v_step = val / float(n); 5714 int n_out = 1; 5715 float val_sum = 0.0; 5716 vec2 p1; 5717 float _1314; 5718 TileSeg tile_seg; 5719 for (uint i_1 = 0u; i_1 < n_quads; i_1++) 5720 { 5721 float t_1 = float(i_1 + 1u) * _step; 5722 vec2 param_26 = cubic.p0; 5723 vec2 param_27 = cubic.p1; 5724 vec2 param_28 = cubic.p2; 5725 vec2 param_29 = cubic.p3; 5726 float param_30 = t_1; 5727 vec2 qp2_1 = eval_cubic(param_26, param_27, param_28, param_29, param_30); 5728 vec2 param_31 = cubic.p0; 5729 vec2 param_32 = cubic.p1; 5730 vec2 param_33 = cubic.p2; 5731 vec2 param_34 = cubic.p3; 5732 float param_35 = t_1 - (0.5 * _step); 5733 vec2 qp1_1 = eval_cubic(param_31, param_32, param_33, param_34, param_35); 5734 qp1_1 = (qp1_1 * 2.0) - ((qp0 + qp2_1) * 0.5); 5735 vec2 param_36 = qp0; 5736 vec2 param_37 = qp1_1; 5737 vec2 param_38 = qp2_1; 5738 float param_39 = 0.4743416607379913330078125; 5739 SubdivResult params_1 = estimate_subdiv(param_36, param_37, param_38, param_39); 5740 float param_40 = params_1.a0; 5741 float u0 = approx_parabola_inv_integral(param_40); 5742 float param_41 = params_1.a2; 5743 float u2 = approx_parabola_inv_integral(param_41); 5744 float uscale = 1.0 / (u2 - u0); 5745 float target = float(n_out) * v_step; 5746 for (;;) 5747 { 5748 bool _1207 = uint(n_out) == n; 5749 bool _1217; 5750 if (!_1207) 5751 { 5752 _1217 = target < (val_sum + params_1.val); 5753 } 5754 else 5755 { 5756 _1217 = _1207; 5757 } 5758 if (_1217) 5759 { 5760 if (uint(n_out) == n) 5761 { 5762 p1 = cubic.p3; 5763 } 5764 else 5765 { 5766 float u = (target - val_sum) / params_1.val; 5767 float a = mix(params_1.a0, params_1.a2, u); 5768 float param_42 = a; 5769 float au = approx_parabola_inv_integral(param_42); 5770 float t_2 = (au - u0) * uscale; 5771 vec2 param_43 = qp0; 5772 vec2 param_44 = qp1_1; 5773 vec2 param_45 = qp2_1; 5774 float param_46 = t_2; 5775 p1 = eval_quad(param_43, param_44, param_45, param_46); 5776 } 5777 float xmin = min(p0.x, p1.x) - cubic.stroke.x; 5778 float xmax = max(p0.x, p1.x) + cubic.stroke.x; 5779 float ymin = min(p0.y, p1.y) - cubic.stroke.y; 5780 float ymax = max(p0.y, p1.y) + cubic.stroke.y; 5781 float dx = p1.x - p0.x; 5782 float dy = p1.y - p0.y; 5783 if (abs(dy) < 9.999999717180685365747194737196e-10) 5784 { 5785 _1314 = 1000000000.0; 5786 } 5787 else 5788 { 5789 _1314 = dx / dy; 5790 } 5791 float invslope = _1314; 5792 float c = (cubic.stroke.x + (abs(invslope) * (16.0 + cubic.stroke.y))) * 0.03125; 5793 float b = invslope; 5794 float a_1 = (p0.x - ((p0.y - 16.0) * b)) * 0.03125; 5795 int x0 = int(floor(xmin * 0.03125)); 5796 int x1 = int(floor(xmax * 0.03125) + 1.0); 5797 int y0 = int(floor(ymin * 0.03125)); 5798 int y1 = int(floor(ymax * 0.03125) + 1.0); 5799 x0 = clamp(x0, bbox.x, bbox.z); 5800 y0 = clamp(y0, bbox.y, bbox.w); 5801 x1 = clamp(x1, bbox.x, bbox.z); 5802 y1 = clamp(y1, bbox.y, bbox.w); 5803 float xc = a_1 + (b * float(y0)); 5804 int stride = bbox.z - bbox.x; 5805 int base = ((y0 - bbox.y) * stride) - bbox.x; 5806 uint n_tile_alloc = uint((x1 - x0) * (y1 - y0)); 5807 uint param_47 = n_tile_alloc * 24u; 5808 MallocResult _1429 = malloc(param_47); 5809 MallocResult tile_alloc = _1429; 5810 if (tile_alloc.failed || (!mem_ok)) 5811 { 5812 return; 5813 } 5814 uint tile_offset = tile_alloc.alloc.offset; 5815 int xray = int(floor(p0.x * 0.03125)); 5816 int last_xray = int(floor(p1.x * 0.03125)); 5817 if (p0.y > p1.y) 5818 { 5819 int tmp = xray; 5820 xray = last_xray; 5821 last_xray = tmp; 5822 } 5823 for (int y = y0; y < y1; y++) 5824 { 5825 float tile_y0 = float(y * 32); 5826 int xbackdrop = max((xray + 1), bbox.x); 5827 bool _1486 = !is_stroke; 5828 bool _1496; 5829 if (_1486) 5830 { 5831 _1496 = min(p0.y, p1.y) < tile_y0; 5832 } 5833 else 5834 { 5835 _1496 = _1486; 5836 } 5837 bool _1503; 5838 if (_1496) 5839 { 5840 _1503 = xbackdrop < bbox.z; 5841 } 5842 else 5843 { 5844 _1503 = _1496; 5845 } 5846 if (_1503) 5847 { 5848 int backdrop = (p1.y < p0.y) ? 1 : (-1); 5849 TileRef param_48 = path.tiles; 5850 uint param_49 = uint(base + xbackdrop); 5851 TileRef tile_ref = Tile_index(param_48, param_49); 5852 uint tile_el = tile_ref.offset >> uint(2); 5853 Alloc param_50 = path_alloc; 5854 uint param_51 = tile_el + 1u; 5855 if (touch_mem(param_50, param_51)) 5856 { 5857 uint _1541 = atomicAdd(_145.memory[tile_el + 1u], uint(backdrop)); 5858 } 5859 } 5860 int next_xray = last_xray; 5861 if (y < (y1 - 1)) 5862 { 5863 float tile_y1 = float((y + 1) * 32); 5864 float x_edge = mix(p0.x, p1.x, (tile_y1 - p0.y) / dy); 5865 next_xray = int(floor(x_edge * 0.03125)); 5866 } 5867 int min_xray = min(xray, next_xray); 5868 int max_xray = max(xray, next_xray); 5869 int xx0 = min(int(floor(xc - c)), min_xray); 5870 int xx1 = max(int(ceil(xc + c)), (max_xray + 1)); 5871 xx0 = clamp(xx0, x0, x1); 5872 xx1 = clamp(xx1, x0, x1); 5873 for (int x = xx0; x < xx1; x++) 5874 { 5875 float tile_x0 = float(x * 32); 5876 TileRef param_52 = TileRef(path.tiles.offset); 5877 uint param_53 = uint(base + x); 5878 TileRef tile_ref_1 = Tile_index(param_52, param_53); 5879 uint tile_el_1 = tile_ref_1.offset >> uint(2); 5880 uint old = 0u; 5881 Alloc param_54 = path_alloc; 5882 uint param_55 = tile_el_1; 5883 if (touch_mem(param_54, param_55)) 5884 { 5885 uint _1644 = atomicExchange(_145.memory[tile_el_1], tile_offset); 5886 old = _1644; 5887 } 5888 tile_seg.origin = p0; 5889 tile_seg.vector = p1 - p0; 5890 float y_edge = 0.0; 5891 if (!is_stroke) 5892 { 5893 y_edge = mix(p0.y, p1.y, (tile_x0 - p0.x) / dx); 5894 if (min(p0.x, p1.x) < tile_x0) 5895 { 5896 vec2 p = vec2(tile_x0, y_edge); 5897 if (p0.x > p1.x) 5898 { 5899 tile_seg.vector = p - p0; 5900 } 5901 else 5902 { 5903 tile_seg.origin = p; 5904 tile_seg.vector = p1 - p; 5905 } 5906 if (tile_seg.vector.x == 0.0) 5907 { 5908 tile_seg.vector.x = sign(p1.x - p0.x) * 9.999999717180685365747194737196e-10; 5909 } 5910 } 5911 if ((x <= min_xray) || (max_xray < x)) 5912 { 5913 y_edge = 1000000000.0; 5914 } 5915 } 5916 tile_seg.y_edge = y_edge; 5917 tile_seg.next.offset = old; 5918 Alloc param_56 = tile_alloc.alloc; 5919 TileSegRef param_57 = TileSegRef(tile_offset); 5920 TileSeg param_58 = tile_seg; 5921 TileSeg_write(param_56, param_57, param_58); 5922 tile_offset += 24u; 5923 } 5924 xc += b; 5925 base += stride; 5926 xray = next_xray; 5927 } 5928 n_out++; 5929 target += v_step; 5930 p0 = p1; 5931 continue; 5932 } 5933 else 5934 { 5935 break; 5936 } 5937 } 5938 val_sum += params_1.val; 5939 qp0 = qp2_1; 5940 } 5941 break; 5942 } 5943 } 5944 } 5945 5946 `, 5947 } 5948 shader_stencil_frag = driver.ShaderSources{ 5949 Name: "stencil.frag", 5950 Inputs: []driver.InputLocation{{Name: "vFrom", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}, {Name: "vCtrl", Location: 1, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 2}, {Name: "vTo", Location: 2, Semantic: "TEXCOORD", SemanticIndex: 2, Type: 0x0, Size: 2}}, 5951 GLSL100ES: `#version 100 5952 precision mediump float; 5953 precision highp int; 5954 5955 varying vec2 vTo; 5956 varying vec2 vFrom; 5957 varying vec2 vCtrl; 5958 5959 void main() 5960 { 5961 float dx = vTo.x - vFrom.x; 5962 bool increasing = vTo.x >= vFrom.x; 5963 bvec2 _35 = bvec2(increasing); 5964 vec2 left = vec2(_35.x ? vFrom.x : vTo.x, _35.y ? vFrom.y : vTo.y); 5965 bvec2 _41 = bvec2(increasing); 5966 vec2 right = vec2(_41.x ? vTo.x : vFrom.x, _41.y ? vTo.y : vFrom.y); 5967 vec2 extent = clamp(vec2(vFrom.x, vTo.x), vec2(-0.5), vec2(0.5)); 5968 float midx = mix(extent.x, extent.y, 0.5); 5969 float x0 = midx - left.x; 5970 vec2 p1 = vCtrl - left; 5971 vec2 v = right - vCtrl; 5972 float t = x0 / (p1.x + sqrt((p1.x * p1.x) + ((v.x - p1.x) * x0))); 5973 float y = mix(mix(left.y, vCtrl.y, t), mix(vCtrl.y, right.y, t), t); 5974 vec2 d_half = mix(p1, v, vec2(t)); 5975 float dy = d_half.y / d_half.x; 5976 float width = extent.y - extent.x; 5977 dy = abs(dy * width); 5978 vec4 sides = vec4((dy * 0.5) + y, (dy * (-0.5)) + y, (0.5 - y) / dy, ((-0.5) - y) / dy); 5979 sides = clamp(sides + vec4(0.5), vec4(0.0), vec4(1.0)); 5980 float area = 0.5 * ((((sides.z - (sides.z * sides.y)) + 1.0) - sides.x) + (sides.x * sides.w)); 5981 area *= width; 5982 if (width == 0.0) 5983 { 5984 area = 0.0; 5985 } 5986 gl_FragData[0].x = area; 5987 } 5988 5989 `, 5990 GLSL300ES: `#version 300 es 5991 precision mediump float; 5992 precision highp int; 5993 5994 in vec2 vTo; 5995 in vec2 vFrom; 5996 in vec2 vCtrl; 5997 layout(location = 0) out vec4 fragCover; 5998 5999 void main() 6000 { 6001 float dx = vTo.x - vFrom.x; 6002 bool increasing = vTo.x >= vFrom.x; 6003 bvec2 _35 = bvec2(increasing); 6004 vec2 left = vec2(_35.x ? vFrom.x : vTo.x, _35.y ? vFrom.y : vTo.y); 6005 bvec2 _41 = bvec2(increasing); 6006 vec2 right = vec2(_41.x ? vTo.x : vFrom.x, _41.y ? vTo.y : vFrom.y); 6007 vec2 extent = clamp(vec2(vFrom.x, vTo.x), vec2(-0.5), vec2(0.5)); 6008 float midx = mix(extent.x, extent.y, 0.5); 6009 float x0 = midx - left.x; 6010 vec2 p1 = vCtrl - left; 6011 vec2 v = right - vCtrl; 6012 float t = x0 / (p1.x + sqrt((p1.x * p1.x) + ((v.x - p1.x) * x0))); 6013 float y = mix(mix(left.y, vCtrl.y, t), mix(vCtrl.y, right.y, t), t); 6014 vec2 d_half = mix(p1, v, vec2(t)); 6015 float dy = d_half.y / d_half.x; 6016 float width = extent.y - extent.x; 6017 dy = abs(dy * width); 6018 vec4 sides = vec4((dy * 0.5) + y, (dy * (-0.5)) + y, (0.5 - y) / dy, ((-0.5) - y) / dy); 6019 sides = clamp(sides + vec4(0.5), vec4(0.0), vec4(1.0)); 6020 float area = 0.5 * ((((sides.z - (sides.z * sides.y)) + 1.0) - sides.x) + (sides.x * sides.w)); 6021 area *= width; 6022 if (width == 0.0) 6023 { 6024 area = 0.0; 6025 } 6026 fragCover.x = area; 6027 } 6028 6029 `, 6030 GLSL130: `#version 130 6031 6032 in vec2 vTo; 6033 in vec2 vFrom; 6034 in vec2 vCtrl; 6035 out vec4 fragCover; 6036 6037 void main() 6038 { 6039 float dx = vTo.x - vFrom.x; 6040 bool increasing = vTo.x >= vFrom.x; 6041 bvec2 _35 = bvec2(increasing); 6042 vec2 left = vec2(_35.x ? vFrom.x : vTo.x, _35.y ? vFrom.y : vTo.y); 6043 bvec2 _41 = bvec2(increasing); 6044 vec2 right = vec2(_41.x ? vTo.x : vFrom.x, _41.y ? vTo.y : vFrom.y); 6045 vec2 extent = clamp(vec2(vFrom.x, vTo.x), vec2(-0.5), vec2(0.5)); 6046 float midx = mix(extent.x, extent.y, 0.5); 6047 float x0 = midx - left.x; 6048 vec2 p1 = vCtrl - left; 6049 vec2 v = right - vCtrl; 6050 float t = x0 / (p1.x + sqrt((p1.x * p1.x) + ((v.x - p1.x) * x0))); 6051 float y = mix(mix(left.y, vCtrl.y, t), mix(vCtrl.y, right.y, t), t); 6052 vec2 d_half = mix(p1, v, vec2(t)); 6053 float dy = d_half.y / d_half.x; 6054 float width = extent.y - extent.x; 6055 dy = abs(dy * width); 6056 vec4 sides = vec4((dy * 0.5) + y, (dy * (-0.5)) + y, (0.5 - y) / dy, ((-0.5) - y) / dy); 6057 sides = clamp(sides + vec4(0.5), vec4(0.0), vec4(1.0)); 6058 float area = 0.5 * ((((sides.z - (sides.z * sides.y)) + 1.0) - sides.x) + (sides.x * sides.w)); 6059 area *= width; 6060 if (width == 0.0) 6061 { 6062 area = 0.0; 6063 } 6064 fragCover.x = area; 6065 } 6066 6067 `, 6068 GLSL150: `#version 150 6069 6070 in vec2 vTo; 6071 in vec2 vFrom; 6072 in vec2 vCtrl; 6073 out vec4 fragCover; 6074 6075 void main() 6076 { 6077 float dx = vTo.x - vFrom.x; 6078 bool increasing = vTo.x >= vFrom.x; 6079 bvec2 _35 = bvec2(increasing); 6080 vec2 left = vec2(_35.x ? vFrom.x : vTo.x, _35.y ? vFrom.y : vTo.y); 6081 bvec2 _41 = bvec2(increasing); 6082 vec2 right = vec2(_41.x ? vTo.x : vFrom.x, _41.y ? vTo.y : vFrom.y); 6083 vec2 extent = clamp(vec2(vFrom.x, vTo.x), vec2(-0.5), vec2(0.5)); 6084 float midx = mix(extent.x, extent.y, 0.5); 6085 float x0 = midx - left.x; 6086 vec2 p1 = vCtrl - left; 6087 vec2 v = right - vCtrl; 6088 float t = x0 / (p1.x + sqrt((p1.x * p1.x) + ((v.x - p1.x) * x0))); 6089 float y = mix(mix(left.y, vCtrl.y, t), mix(vCtrl.y, right.y, t), t); 6090 vec2 d_half = mix(p1, v, vec2(t)); 6091 float dy = d_half.y / d_half.x; 6092 float width = extent.y - extent.x; 6093 dy = abs(dy * width); 6094 vec4 sides = vec4((dy * 0.5) + y, (dy * (-0.5)) + y, (0.5 - y) / dy, ((-0.5) - y) / dy); 6095 sides = clamp(sides + vec4(0.5), vec4(0.0), vec4(1.0)); 6096 float area = 0.5 * ((((sides.z - (sides.z * sides.y)) + 1.0) - sides.x) + (sides.x * sides.w)); 6097 area *= width; 6098 if (width == 0.0) 6099 { 6100 area = 0.0; 6101 } 6102 fragCover.x = area; 6103 } 6104 6105 `, 6106 HLSL: "DXBC\x94!\xb9\x13L\xba\r\x11\x8f\xc7\xce\x0eAs\xec\xe1\x01\x00\x00\x00\\\n\x00\x00\x06\x00\x00\x008\x00\x00\x00\x9c\x03\x00\x00\xfc\b\x00\x00x\t\x00\x00\xc4\t\x00\x00(\n\x00\x00Aon9\\\x03\x00\x00\\\x03\x00\x00\x00\x02\xff\xff8\x03\x00\x00$\x00\x00\x00\x00\x00$\x00\x00\x00$\x00\x00\x00$\x00\x00\x00$\x00\x00\x00$\x00\x00\x02\xff\xffQ\x00\x00\x05\x00\x00\x0f\xa0\x00\x00\x00\xbf\x00\x00\x00?\x00\x00\x80?\x00\x00\x00\x00\x1f\x00\x00\x02\x00\x00\x00\x80\x00\x00\x0f\xb0\x1f\x00\x00\x02\x00\x00\x00\x80\x01\x00\x03\xb0\v\x00\x00\x03\x00\x00\x01\x80\x00\x00\x00\xb0\x00\x00\x00\xa0\v\x00\x00\x03\x00\x00\x02\x80\x01\x00\x00\xb0\x00\x00\x00\xa0\n\x00\x00\x03\x01\x00\x03\x80\x00\x00\xe4\x80\x00\x00U\xa0\x02\x00\x00\x03\x00\x00\x01\x80\x01\x00\x00\x81\x01\x00U\x80\x04\x00\x00\x04\x00\x00\x02\x80\x00\x00\x00\x80\x00\x00U\xa0\x01\x00\x00\x80\x01\x00\x00\x02\x01\x00\x03\x80\x00\x00\xe4\xb0\n\x00\x00\x03\x02\x00\x01\x80\x01\x00\x00\x80\x01\x00\x00\xb0\x02\x00\x00\x03\x00\x00\x02\x80\x00\x00U\x80\x02\x00\x00\x81\v\x00\x00\x03\x03\x00\x01\x80\x01\x00\x00\xb0\x01\x00\x00\x80\x02\x00\x00\x03\x00\x00\x04\x80\x01\x00\x00\x81\x01\x00\x00\xb0X\x00\x00\x04\x03\x00\x02\x80\x00\x00\xaa\x80\x01\x00U\xb0\x01\x00U\x80X\x00\x00\x04\x02\x00\x02\x80\x00\x00\xaa\x80\x01\x00U\x80\x01\x00U\xb0\x02\x00\x00\x03\x00\x00\f\x80\x03\x00\x1b\x80\x00\x00\xe4\xb1\x02\x00\x00\x03\x01\x00\x03\x80\x02\x00\xe4\x81\x00\x00\x1b\xb0\x02\x00\x00\x03\x01\x00\x04\x80\x00\x00\xff\x80\x01\x00\x00\x81\x05\x00\x00\x03\x01\x00\x04\x80\x00\x00U\x80\x01\x00\xaa\x80\x04\x00\x00\x04\x01\x00\x04\x80\x01\x00\x00\x80\x01\x00\x00\x80\x01\x00\xaa\x80\a\x00\x00\x02\x01\x00\x04\x80\x01\x00\xaa\x80\x06\x00\x00\x02\x01\x00\x04\x80\x01\x00\xaa\x80\x02\x00\x00\x03\x01\x00\x04\x80\x01\x00\xaa\x80\x01\x00\x00\x80\x06\x00\x00\x02\x01\x00\x04\x80\x01\x00\xaa\x80\x05\x00\x00\x03\x00\x00\x02\x80\x00\x00U\x80\x01\x00\xaa\x80\x04\x00\x00\x04\x01\x00\x04\x80\x00\x00U\x80\x01\x00U\x80\x02\x00U\x80\x12\x00\x00\x04\x02\x00\x03\x80\x00\x00U\x80\x00\x00\x1b\x80\x01\x00\xe4\x80\x04\x00\x00\x04\x00\x00\x04\x80\x00\x00U\x80\x00\x00\xaa\x80\x00\x00\xaa\xb0\x12\x00\x00\x04\x02\x00\x04\x80\x00\x00U\x80\x00\x00\xaa\x80\x01\x00\xaa\x80\x06\x00\x00\x02\x00\x00\x02\x80\x02\x00\x00\x80\x05\x00\x00\x03\x00\x00\x02\x80\x00\x00U\x80\x02\x00U\x80\x05\x00\x00\x03\x00\x00\x02\x80\x00\x00\x00\x80\x00\x00U\x80#\x00\x00\x02\x00\x00\x02\x80\x00\x00U\x80\x04\x00\x00\x04\x01\x00\x01\x80\x00\x00U\x80\x00\x00U\xa0\x02\x00\xaa\x80\x04\x00\x00\x04\x01\x00\x02\x80\x00\x00U\x80\x00\x00\x00\xa0\x02\x00\xaa\x80\x06\x00\x00\x02\x00\x00\x02\x80\x00\x00U\x80\x02\x00\x00\x03\x00\x00\f\x80\x02\x00\xaa\x81\x00\x00\x1b\xa0\x05\x00\x00\x03\x01\x00\b\x80\x00\x00U\x80\x00\x00\xff\x80\x05\x00\x00\x03\x01\x00\x04\x80\x00\x00U\x80\x00\x00\xaa\x80\x02\x00\x00\x03\x01\x00\x1f\x80\x01\x00\xe4\x80\x00\x00U\xa0\x04\x00\x00\x04\x00\x00\x02\x80\x01\x00\xaa\x80\x01\x00U\x81\x01\x00\xaa\x80\x02\x00\x00\x03\x00\x00\x02\x80\x00\x00U\x80\x00\x00\xaa\xa0\x02\x00\x00\x03\x00\x00\x02\x80\x01\x00\x00\x81\x00\x00U\x80\x04\x00\x00\x04\x00\x00\x02\x80\x01\x00\x00\x80\x01\x00\xff\x80\x00\x00U\x80\x05\x00\x00\x03\x00\x00\x02\x80\x00\x00U\x80\x00\x00\x00\x80\x05\x00\x00\x03\x00\x00\x01\x80\x00\x00\x00\x80\x00\x00\x00\x80\x05\x00\x00\x03\x00\x00\x02\x80\x00\x00U\x80\x00\x00U\xa0X\x00\x00\x04\x00\x00\x01\x80\x00\x00\x00\x81\x00\x00\xff\xa0\x00\x00U\x80\x01\x00\x00\x02\x00\x00\x0e\x80\x00\x00\xff\xa0\x01\x00\x00\x02\x00\b\x0f\x80\x00\x00\xe4\x80\xff\xff\x00\x00SHDRX\x05\x00\x00@\x00\x00\x00V\x01\x00\x00b\x10\x00\x032\x10\x10\x00\x00\x00\x00\x00b\x10\x00\x03\xc2\x10\x10\x00\x00\x00\x00\x00b\x10\x00\x032\x10\x10\x00\x01\x00\x00\x00e\x00\x00\x03\xf2 \x10\x00\x00\x00\x00\x00h\x00\x00\x02\x03\x00\x00\x006\x00\x00\x05\x12\x00\x10\x00\x00\x00\x00\x00\n\x10\x10\x00\x00\x00\x00\x006\x00\x00\x05\"\x00\x10\x00\x00\x00\x00\x00\n\x10\x10\x00\x01\x00\x00\x004\x00\x00\n2\x00\x10\x00\x00\x00\x00\x00F\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x00\xbf\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x003\x00\x00\n2\x00\x10\x00\x00\x00\x00\x00F\x00\x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x00?\x00\x00\x00?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\"\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x80A\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x10\x00\x00\x00\x00\x002\x00\x00\t\x12\x00\x10\x00\x00\x00\x00\x00\x1a\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x00?\n\x00\x10\x00\x00\x00\x00\x003\x00\x00\a2\x00\x10\x00\x01\x00\x00\x00\x06\x10\x10\x00\x00\x00\x00\x00\x06\x10\x10\x00\x01\x00\x00\x00\x00\x00\x00\b\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x80A\x00\x00\x00\x01\x00\x00\x004\x00\x00\a2\x00\x10\x00\x02\x00\x00\x00\x06\x10\x10\x00\x00\x00\x00\x00\x06\x10\x10\x00\x01\x00\x00\x00\x1d\x00\x00\aB\x00\x10\x00\x00\x00\x00\x00\n\x10\x10\x00\x01\x00\x00\x00\n\x10\x10\x00\x00\x00\x00\x007\x00\x00\tB\x00\x10\x00\x02\x00\x00\x00*\x00\x10\x00\x00\x00\x00\x00\x1a\x10\x10\x00\x01\x00\x00\x00\x1a\x10\x10\x00\x00\x00\x00\x007\x00\x00\tB\x00\x10\x00\x01\x00\x00\x00*\x00\x10\x00\x00\x00\x00\x00\x1a\x10\x10\x00\x00\x00\x00\x00\x1a\x10\x10\x00\x01\x00\x00\x00\x00\x00\x00\br\x00\x10\x00\x02\x00\x00\x00F\x02\x10\x00\x02\x00\x00\x00\xa6\x1b\x10\x80A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\xc2\x00\x10\x00\x00\x00\x00\x00V\t\x10\x80A\x00\x00\x00\x01\x00\x00\x00\xa6\x1e\x10\x00\x00\x00\x00\x00\x00\x00\x00\b\xb2\x00\x10\x00\x01\x00\x00\x00\xa6\x0e\x10\x80A\x00\x00\x00\x00\x00\x00\x00F\b\x10\x00\x02\x00\x00\x008\x00\x00\a\x12\x00\x10\x00\x01\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x01\x00\x00\x002\x00\x00\t\x12\x00\x10\x00\x01\x00\x00\x00*\x00\x10\x00\x00\x00\x00\x00*\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x01\x00\x00\x00K\x00\x00\x05\x12\x00\x10\x00\x01\x00\x00\x00\n\x00\x10\x00\x01\x00\x00\x00\x00\x00\x00\a\x12\x00\x10\x00\x01\x00\x00\x00*\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x01\x00\x00\x00\x0e\x00\x00\a\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x01\x00\x00\x002\x00\x00\t\x12\x00\x10\x00\x01\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00:\x00\x10\x00\x00\x00\x00\x00*\x00\x10\x00\x01\x00\x00\x002\x00\x00\t\xc2\x00\x10\x00\x00\x00\x00\x00\x06\x00\x10\x00\x00\x00\x00\x00V\r\x10\x00\x01\x00\x00\x00\xa6\x0e\x10\x00\x00\x00\x00\x00\x0e\x00\x00\aB\x00\x10\x00\x00\x00\x00\x00:\x00\x10\x00\x00\x00\x00\x00*\x00\x10\x00\x00\x00\x00\x008\x00\x00\aB\x00\x10\x00\x00\x00\x00\x00\x1a\x00\x10\x00\x00\x00\x00\x00*\x00\x10\x00\x00\x00\x00\x002\x00\x00\t\x82\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00*\x00\x10\x00\x02\x00\x00\x00:\x10\x10\x00\x00\x00\x00\x00\x00\x00\x00\b\x82\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x80A\x00\x00\x00\x01\x00\x00\x00:\x00\x10\x00\x00\x00\x00\x002\x00\x00\t\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00:\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x01\x00\x00\x00\x00\x00\x00\v2\x00\x10\x00\x01\x00\x00\x00\x06\x00\x10\x80A\x00\x00\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x00?\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x002\x00\x00\r2\x00\x10\x00\x02\x00\x00\x00\xa6\n\x10\x80\x81\x00\x00\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x00?\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x10\x00\x00\x00\x00\x00\x0e\x00\x00\b\xc2\x00\x10\x00\x02\x00\x00\x00\x06\x04\x10\x00\x01\x00\x00\x00\xa6\n\x10\x80\x81\x00\x00\x00\x00\x00\x00\x00\x00 \x00\n\xf2\x00\x10\x00\x01\x00\x00\x00F\x0e\x10\x00\x02\x00\x00\x00\x02@\x00\x00\x00\x00\x00?\x00\x00\x00?\x00\x00\x00?\x00\x00\x00?2\x00\x00\n\x12\x00\x10\x00\x00\x00\x00\x00*\x00\x10\x80A\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x10\x00\x01\x00\x00\x00*\x00\x10\x00\x01\x00\x00\x00\x00\x00\x00\a\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x80?\x00\x00\x00\b\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x80A\x00\x00\x00\x01\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x002\x00\x00\t\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x01\x00\x00\x00:\x00\x10\x00\x01\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x008\x00\x00\a\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00\x1a\x00\x10\x00\x00\x00\x00\x00\x18\x00\x00\a\"\x00\x10\x00\x00\x00\x00\x00\x1a\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x00\x008\x00\x00\a\x12\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x00?7\x00\x00\t\x12 \x10\x00\x00\x00\x00\x00\x1a\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x006\x00\x00\b\xe2 \x10\x00\x00\x00\x00\x00\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>\x00\x00\x01STATt\x00\x00\x00)\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEFD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xff\xff\x00\x01\x00\x00\x1c\x00\x00\x00Microsoft (R) HLSL Shader Compiler 10.1\x00ISGN\\\x00\x00\x00\x03\x00\x00\x00\b\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00P\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\f\f\x00\x00P\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x03\x00\x00TEXCOORD\x00\xab\xab\xabOSGN,\x00\x00\x00\x01\x00\x00\x00\b\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00SV_Target\x00\xab\xab", 6107 } 6108 shader_stencil_vert = driver.ShaderSources{ 6109 Name: "stencil.vert", 6110 Inputs: []driver.InputLocation{{Name: "corner", Location: 0, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 1}, {Name: "maxy", Location: 1, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 1}, {Name: "from", Location: 2, Semantic: "TEXCOORD", SemanticIndex: 2, Type: 0x0, Size: 2}, {Name: "ctrl", Location: 3, Semantic: "TEXCOORD", SemanticIndex: 3, Type: 0x0, Size: 2}, {Name: "to", Location: 4, Semantic: "TEXCOORD", SemanticIndex: 4, Type: 0x0, Size: 2}}, 6111 Uniforms: driver.UniformsReflection{ 6112 Blocks: []driver.UniformBlock{{Name: "Block", Binding: 0}}, 6113 Locations: []driver.UniformLocation{{Name: "_block.transform", Type: 0x0, Size: 4, Offset: 0}, {Name: "_block.pathOffset", Type: 0x0, Size: 2, Offset: 16}}, 6114 Size: 24, 6115 }, 6116 GLSL100ES: `#version 100 6117 6118 struct Block 6119 { 6120 vec4 transform; 6121 vec2 pathOffset; 6122 }; 6123 6124 uniform Block _block; 6125 6126 attribute vec2 from; 6127 attribute vec2 ctrl; 6128 attribute vec2 to; 6129 attribute float maxy; 6130 attribute float corner; 6131 varying vec2 vFrom; 6132 varying vec2 vCtrl; 6133 varying vec2 vTo; 6134 6135 void main() 6136 { 6137 vec2 from_1 = from + _block.pathOffset; 6138 vec2 ctrl_1 = ctrl + _block.pathOffset; 6139 vec2 to_1 = to + _block.pathOffset; 6140 float maxy_1 = maxy + _block.pathOffset.y; 6141 float c = corner; 6142 vec2 pos; 6143 if (c >= 0.375) 6144 { 6145 c -= 0.5; 6146 pos.y = maxy_1 + 1.0; 6147 } 6148 else 6149 { 6150 pos.y = min(min(from_1.y, ctrl_1.y), to_1.y) - 1.0; 6151 } 6152 if (c >= 0.125) 6153 { 6154 pos.x = max(max(from_1.x, ctrl_1.x), to_1.x) + 1.0; 6155 } 6156 else 6157 { 6158 pos.x = min(min(from_1.x, ctrl_1.x), to_1.x) - 1.0; 6159 } 6160 vFrom = from_1 - pos; 6161 vCtrl = ctrl_1 - pos; 6162 vTo = to_1 - pos; 6163 pos = (pos * _block.transform.xy) + _block.transform.zw; 6164 gl_Position = vec4(pos, 1.0, 1.0); 6165 } 6166 6167 `, 6168 GLSL300ES: `#version 300 es 6169 6170 layout(std140) uniform Block 6171 { 6172 vec4 transform; 6173 vec2 pathOffset; 6174 } _block; 6175 6176 layout(location = 2) in vec2 from; 6177 layout(location = 3) in vec2 ctrl; 6178 layout(location = 4) in vec2 to; 6179 layout(location = 1) in float maxy; 6180 layout(location = 0) in float corner; 6181 out vec2 vFrom; 6182 out vec2 vCtrl; 6183 out vec2 vTo; 6184 6185 void main() 6186 { 6187 vec2 from_1 = from + _block.pathOffset; 6188 vec2 ctrl_1 = ctrl + _block.pathOffset; 6189 vec2 to_1 = to + _block.pathOffset; 6190 float maxy_1 = maxy + _block.pathOffset.y; 6191 float c = corner; 6192 vec2 pos; 6193 if (c >= 0.375) 6194 { 6195 c -= 0.5; 6196 pos.y = maxy_1 + 1.0; 6197 } 6198 else 6199 { 6200 pos.y = min(min(from_1.y, ctrl_1.y), to_1.y) - 1.0; 6201 } 6202 if (c >= 0.125) 6203 { 6204 pos.x = max(max(from_1.x, ctrl_1.x), to_1.x) + 1.0; 6205 } 6206 else 6207 { 6208 pos.x = min(min(from_1.x, ctrl_1.x), to_1.x) - 1.0; 6209 } 6210 vFrom = from_1 - pos; 6211 vCtrl = ctrl_1 - pos; 6212 vTo = to_1 - pos; 6213 pos = (pos * _block.transform.xy) + _block.transform.zw; 6214 gl_Position = vec4(pos, 1.0, 1.0); 6215 } 6216 6217 `, 6218 GLSL130: `#version 130 6219 6220 struct Block 6221 { 6222 vec4 transform; 6223 vec2 pathOffset; 6224 }; 6225 6226 uniform Block _block; 6227 6228 in vec2 from; 6229 in vec2 ctrl; 6230 in vec2 to; 6231 in float maxy; 6232 in float corner; 6233 out vec2 vFrom; 6234 out vec2 vCtrl; 6235 out vec2 vTo; 6236 6237 void main() 6238 { 6239 vec2 from_1 = from + _block.pathOffset; 6240 vec2 ctrl_1 = ctrl + _block.pathOffset; 6241 vec2 to_1 = to + _block.pathOffset; 6242 float maxy_1 = maxy + _block.pathOffset.y; 6243 float c = corner; 6244 vec2 pos; 6245 if (c >= 0.375) 6246 { 6247 c -= 0.5; 6248 pos.y = maxy_1 + 1.0; 6249 } 6250 else 6251 { 6252 pos.y = min(min(from_1.y, ctrl_1.y), to_1.y) - 1.0; 6253 } 6254 if (c >= 0.125) 6255 { 6256 pos.x = max(max(from_1.x, ctrl_1.x), to_1.x) + 1.0; 6257 } 6258 else 6259 { 6260 pos.x = min(min(from_1.x, ctrl_1.x), to_1.x) - 1.0; 6261 } 6262 vFrom = from_1 - pos; 6263 vCtrl = ctrl_1 - pos; 6264 vTo = to_1 - pos; 6265 pos = (pos * _block.transform.xy) + _block.transform.zw; 6266 gl_Position = vec4(pos, 1.0, 1.0); 6267 } 6268 6269 `, 6270 GLSL150: `#version 150 6271 6272 layout(std140) uniform Block 6273 { 6274 vec4 transform; 6275 vec2 pathOffset; 6276 } _block; 6277 6278 in vec2 from; 6279 in vec2 ctrl; 6280 in vec2 to; 6281 in float maxy; 6282 in float corner; 6283 out vec2 vFrom; 6284 out vec2 vCtrl; 6285 out vec2 vTo; 6286 6287 void main() 6288 { 6289 vec2 from_1 = from + _block.pathOffset; 6290 vec2 ctrl_1 = ctrl + _block.pathOffset; 6291 vec2 to_1 = to + _block.pathOffset; 6292 float maxy_1 = maxy + _block.pathOffset.y; 6293 float c = corner; 6294 vec2 pos; 6295 if (c >= 0.375) 6296 { 6297 c -= 0.5; 6298 pos.y = maxy_1 + 1.0; 6299 } 6300 else 6301 { 6302 pos.y = min(min(from_1.y, ctrl_1.y), to_1.y) - 1.0; 6303 } 6304 if (c >= 0.125) 6305 { 6306 pos.x = max(max(from_1.x, ctrl_1.x), to_1.x) + 1.0; 6307 } 6308 else 6309 { 6310 pos.x = min(min(from_1.x, ctrl_1.x), to_1.x) - 1.0; 6311 } 6312 vFrom = from_1 - pos; 6313 vCtrl = ctrl_1 - pos; 6314 vTo = to_1 - pos; 6315 pos = (pos * _block.transform.xy) + _block.transform.zw; 6316 gl_Position = vec4(pos, 1.0, 1.0); 6317 } 6318 6319 `, 6320 HLSL: "DXBC\xa5!\xd8\x10\xb4n\x90\xe3\xd9U\xdb\xe2\xb6~I0\x01\x00\x00\x00\x10\b\x00\x00\x06\x00\x00\x008\x00\x00\x00L\x02\x00\x00t\x05\x00\x00\xf0\x05\x00\x00\xf4\x06\x00\x00\x88\a\x00\x00Aon9\f\x02\x00\x00\f\x02\x00\x00\x00\x02\xfe\xff\xd8\x01\x00\x004\x00\x00\x00\x01\x00$\x00\x00\x000\x00\x00\x000\x00\x00\x00$\x00\x01\x000\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xfe\xffQ\x00\x00\x05\x03\x00\x0f\xa0\x00\x00\xc0>\x00\x00\x80?\x00\x00\x80\xbf\x00\x00\x00\xbfQ\x00\x00\x05\x04\x00\x0f\xa0\x00\x00\x00>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x02\x05\x00\x00\x80\x00\x00\x0f\x90\x1f\x00\x00\x02\x05\x00\x01\x80\x01\x00\x0f\x90\x1f\x00\x00\x02\x05\x00\x02\x80\x02\x00\x0f\x90\x1f\x00\x00\x02\x05\x00\x03\x80\x03\x00\x0f\x90\x1f\x00\x00\x02\x05\x00\x04\x80\x04\x00\x0f\x90\x02\x00\x00\x03\x00\x00\x01\x80\x01\x00\x00\x90\x02\x00U\xa0\x02\x00\x00\x03\x00\x00\x04\x80\x00\x00\x00\x80\x03\x00U\xa0\r\x00\x00\x03\x00\x00\x01\x80\x00\x00\x00\x90\x03\x00\x00\xa0\x01\x00\x00\x02\x01\x00\x04\x80\x00\x00\x00\x90\x02\x00\x00\x03\x00\x00\x02\x80\x00\x00\x00\x90\x03\x00\xff\xa0\x02\x00\x00\x03\x02\x00\x03\x80\x02\x00\xe4\x90\x02\x00\xe4\xa0\x02\x00\x00\x03\x02\x00\f\x80\x03\x00\x14\x90\x02\x00\x14\xa0\n\x00\x00\x03\x03\x00\x03\x80\x02\x00\xee\x80\x02\x00\xe1\x80\x02\x00\x00\x03\x03\x00\f\x80\x04\x00D\x90\x02\x00D\xa0\n\x00\x00\x03\x03\x00\x03\x80\x03\x00\xeb\x80\x03\x00\xe4\x80\x02\x00\x00\x03\x01\x00\x03\x80\x03\x00\xe4\x80\x03\x00\xaa\xa0\x12\x00\x00\x04\x04\x00\x06\x80\x00\x00\x00\x80\x00\x00\xe4\x80\x01\x00Ȁ\r\x00\x00\x03\x00\x00\x01\x80\x04\x00U\x80\x04\x00\x00\xa0\v\x00\x00\x03\x00\x00\x02\x80\x02\x00\xff\x80\x02\x00\x00\x80\v\x00\x00\x03\x00\x00\x02\x80\x03\x00\xaa\x80\x00\x00U\x80\x02\x00\x00\x03\x00\x00\x02\x80\x00\x00U\x80\x03\x00U\xa0\x12\x00\x00\x04\x04\x00\x01\x80\x00\x00\x00\x80\x00\x00U\x80\x01\x00U\x80\x02\x00\x00\x03\x00\x00\x0f\xe0\x02\x00\xe4\x80\x04\x00(\x81\x02\x00\x00\x03\x01\x00\x03\xe0\x03\x00\xee\x80\x04\x00\xe8\x81\x04\x00\x00\x04\x00\x00\x03\x80\x04\x00\xe8\x80\x01\x00\xe4\xa0\x01\x00\xee\xa0\x02\x00\x00\x03\x00\x00\x03\xc0\x00\x00\xe4\x80\x00\x00\xe4\xa0\x01\x00\x00\x02\x00\x00\f\xc0\x03\x00U\xa0\xff\xff\x00\x00SHDR \x03\x00\x00@\x00\x01\x00\xc8\x00\x00\x00Y\x00\x00\x04F\x8e \x00\x00\x00\x00\x00\x02\x00\x00\x00_\x00\x00\x03\x12\x10\x10\x00\x00\x00\x00\x00_\x00\x00\x03\x12\x10\x10\x00\x01\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x02\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x03\x00\x00\x00_\x00\x00\x032\x10\x10\x00\x04\x00\x00\x00e\x00\x00\x032 \x10\x00\x00\x00\x00\x00e\x00\x00\x03\xc2 \x10\x00\x00\x00\x00\x00e\x00\x00\x032 \x10\x00\x01\x00\x00\x00g\x00\x00\x04\xf2 \x10\x00\x02\x00\x00\x00\x01\x00\x00\x00h\x00\x00\x02\x04\x00\x00\x00\x00\x00\x00\b\x12\x00\x10\x00\x00\x00\x00\x00\n\x10\x10\x00\x01\x00\x00\x00\x1a\x80 \x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\aB\x00\x10\x00\x00\x00\x00\x00\n\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x80?\x1d\x00\x00\a\x12\x00\x10\x00\x00\x00\x00\x00\n\x10\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\xc0>\x00\x00\x00\a\"\x00\x10\x00\x00\x00\x00\x00\n\x10\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x00\xbf6\x00\x00\x05B\x00\x10\x00\x01\x00\x00\x00\n\x10\x10\x00\x00\x00\x00\x00\x00\x00\x00\b2\x00\x10\x00\x02\x00\x00\x00F\x10\x10\x00\x02\x00\x00\x00F\x80 \x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\b\xc2\x00\x10\x00\x02\x00\x00\x00\x06\x14\x10\x00\x03\x00\x00\x00\x06\x84 \x00\x00\x00\x00\x00\x01\x00\x00\x003\x00\x00\a2\x00\x10\x00\x03\x00\x00\x00\xb6\x0f\x10\x00\x02\x00\x00\x00\x16\x05\x10\x00\x02\x00\x00\x00\x00\x00\x00\b\xc2\x00\x10\x00\x03\x00\x00\x00\x06\x14\x10\x00\x04\x00\x00\x00\x06\x84 \x00\x00\x00\x00\x00\x01\x00\x00\x003\x00\x00\a2\x00\x10\x00\x03\x00\x00\x00\xb6\x0f\x10\x00\x03\x00\x00\x00F\x00\x10\x00\x03\x00\x00\x00\x00\x00\x00\n2\x00\x10\x00\x01\x00\x00\x00F\x00\x10\x00\x03\x00\x00\x00\x02@\x00\x00\x00\x00\x80\xbf\x00\x00\x80\xbf\x00\x00\x00\x00\x00\x00\x00\x007\x00\x00\tb\x00\x10\x00\x00\x00\x00\x00\x06\x00\x10\x00\x00\x00\x00\x00V\x06\x10\x00\x00\x00\x00\x00\xa6\b\x10\x00\x01\x00\x00\x00\x1d\x00\x00\a\"\x00\x10\x00\x00\x00\x00\x00\x1a\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x00>4\x00\x00\a\x82\x00\x10\x00\x00\x00\x00\x00*\x00\x10\x00\x02\x00\x00\x00\n\x00\x10\x00\x02\x00\x00\x004\x00\x00\a\x82\x00\x10\x00\x00\x00\x00\x00*\x00\x10\x00\x03\x00\x00\x00:\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\a\x82\x00\x10\x00\x00\x00\x00\x00:\x00\x10\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x80?7\x00\x00\t\x12\x00\x10\x00\x00\x00\x00\x00\x1a\x00\x10\x00\x00\x00\x00\x00:\x00\x10\x00\x00\x00\x00\x00\x1a\x00\x10\x00\x01\x00\x00\x00\x00\x00\x00\b\xf2 \x10\x00\x00\x00\x00\x00\x86\b\x10\x80A\x00\x00\x00\x00\x00\x00\x00F\x0e\x10\x00\x02\x00\x00\x00\x00\x00\x00\b2 \x10\x00\x01\x00\x00\x00\x86\x00\x10\x80A\x00\x00\x00\x00\x00\x00\x00\xe6\n\x10\x00\x03\x00\x00\x002\x00\x00\v2 \x10\x00\x02\x00\x00\x00\x86\x00\x10\x00\x00\x00\x00\x00F\x80 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x8a \x00\x00\x00\x00\x00\x00\x00\x00\x006\x00\x00\b\xc2 \x10\x00\x02\x00\x00\x00\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x80?>\x00\x00\x01STATt\x00\x00\x00\x16\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RDEF\xfc\x00\x00\x00\x01\x00\x00\x00D\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x00\x04\xfe\xff\x00\x01\x00\x00\xd4\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00Block\x00\xab\xab<\x00\x00\x00\x02\x00\x00\x00\\\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x10\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00_block_transform\x00\xab\xab\xab\x01\x00\x03\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00_block_pathOffset\x00\xab\xab\x01\x00\x03\x00\x01\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00Microsoft (R) HLSL Shader Compiler 10.1\x00ISGN\x8c\x00\x00\x00\x05\x00\x00\x00\b\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x80\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x01\x01\x00\x00\x80\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x03\x03\x00\x00\x80\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x03\x00\x00\x80\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x03\x03\x00\x00TEXCOORD\x00\xab\xab\xabOSGN\x80\x00\x00\x00\x04\x00\x00\x00\b\x00\x00\x00h\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\f\x00\x00h\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\f\x03\x00\x00h\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\f\x00\x00q\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00TEXCOORD\x00SV_Position\x00\xab\xab\xab", 6321 } 6322 shader_tile_alloc_comp = driver.ShaderSources{ 6323 Name: "tile_alloc.comp", 6324 GLSL310ES: `#version 310 es 6325 layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; 6326 6327 struct Alloc 6328 { 6329 uint offset; 6330 }; 6331 6332 struct MallocResult 6333 { 6334 Alloc alloc; 6335 bool failed; 6336 }; 6337 6338 struct AnnoEndClipRef 6339 { 6340 uint offset; 6341 }; 6342 6343 struct AnnoEndClip 6344 { 6345 vec4 bbox; 6346 }; 6347 6348 struct AnnotatedRef 6349 { 6350 uint offset; 6351 }; 6352 6353 struct AnnotatedTag 6354 { 6355 uint tag; 6356 uint flags; 6357 }; 6358 6359 struct PathRef 6360 { 6361 uint offset; 6362 }; 6363 6364 struct TileRef 6365 { 6366 uint offset; 6367 }; 6368 6369 struct Path 6370 { 6371 uvec4 bbox; 6372 TileRef tiles; 6373 }; 6374 6375 struct Config 6376 { 6377 uint n_elements; 6378 uint n_pathseg; 6379 uint width_in_tiles; 6380 uint height_in_tiles; 6381 Alloc tile_alloc; 6382 Alloc bin_alloc; 6383 Alloc ptcl_alloc; 6384 Alloc pathseg_alloc; 6385 Alloc anno_alloc; 6386 Alloc trans_alloc; 6387 }; 6388 6389 layout(binding = 0, std430) buffer Memory 6390 { 6391 uint mem_offset; 6392 uint mem_error; 6393 uint memory[]; 6394 } _92; 6395 6396 layout(binding = 1, std430) readonly buffer ConfigBuf 6397 { 6398 Config conf; 6399 } _305; 6400 6401 shared uint sh_tile_count[128]; 6402 shared MallocResult sh_tile_alloc; 6403 6404 bool touch_mem(Alloc alloc, uint offset) 6405 { 6406 return true; 6407 } 6408 6409 uint read_mem(Alloc alloc, uint offset) 6410 { 6411 Alloc param = alloc; 6412 uint param_1 = offset; 6413 if (!touch_mem(param, param_1)) 6414 { 6415 return 0u; 6416 } 6417 uint v = _92.memory[offset]; 6418 return v; 6419 } 6420 6421 AnnotatedTag Annotated_tag(Alloc a, AnnotatedRef ref) 6422 { 6423 Alloc param = a; 6424 uint param_1 = ref.offset >> uint(2); 6425 uint tag_and_flags = read_mem(param, param_1); 6426 return AnnotatedTag(tag_and_flags & 65535u, tag_and_flags >> uint(16)); 6427 } 6428 6429 AnnoEndClip AnnoEndClip_read(Alloc a, AnnoEndClipRef ref) 6430 { 6431 uint ix = ref.offset >> uint(2); 6432 Alloc param = a; 6433 uint param_1 = ix + 0u; 6434 uint raw0 = read_mem(param, param_1); 6435 Alloc param_2 = a; 6436 uint param_3 = ix + 1u; 6437 uint raw1 = read_mem(param_2, param_3); 6438 Alloc param_4 = a; 6439 uint param_5 = ix + 2u; 6440 uint raw2 = read_mem(param_4, param_5); 6441 Alloc param_6 = a; 6442 uint param_7 = ix + 3u; 6443 uint raw3 = read_mem(param_6, param_7); 6444 AnnoEndClip s; 6445 s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 6446 return s; 6447 } 6448 6449 AnnoEndClip Annotated_EndClip_read(Alloc a, AnnotatedRef ref) 6450 { 6451 Alloc param = a; 6452 AnnoEndClipRef param_1 = AnnoEndClipRef(ref.offset + 4u); 6453 return AnnoEndClip_read(param, param_1); 6454 } 6455 6456 Alloc new_alloc(uint offset, uint size, bool mem_ok) 6457 { 6458 Alloc a; 6459 a.offset = offset; 6460 return a; 6461 } 6462 6463 MallocResult malloc(uint size) 6464 { 6465 uint _98 = atomicAdd(_92.mem_offset, size); 6466 uint offset = _98; 6467 MallocResult r; 6468 r.failed = (offset + size) > uint(int(uint(_92.memory.length())) * 4); 6469 uint param = offset; 6470 uint param_1 = size; 6471 bool param_2 = !r.failed; 6472 r.alloc = new_alloc(param, param_1, param_2); 6473 if (r.failed) 6474 { 6475 uint _127 = atomicMax(_92.mem_error, 1u); 6476 return r; 6477 } 6478 return r; 6479 } 6480 6481 Alloc slice_mem(Alloc a, uint offset, uint size) 6482 { 6483 return Alloc(a.offset + offset); 6484 } 6485 6486 void write_mem(Alloc alloc, uint offset, uint val) 6487 { 6488 Alloc param = alloc; 6489 uint param_1 = offset; 6490 if (!touch_mem(param, param_1)) 6491 { 6492 return; 6493 } 6494 _92.memory[offset] = val; 6495 } 6496 6497 void Path_write(Alloc a, PathRef ref, Path s) 6498 { 6499 uint ix = ref.offset >> uint(2); 6500 Alloc param = a; 6501 uint param_1 = ix + 0u; 6502 uint param_2 = s.bbox.x | (s.bbox.y << uint(16)); 6503 write_mem(param, param_1, param_2); 6504 Alloc param_3 = a; 6505 uint param_4 = ix + 1u; 6506 uint param_5 = s.bbox.z | (s.bbox.w << uint(16)); 6507 write_mem(param_3, param_4, param_5); 6508 Alloc param_6 = a; 6509 uint param_7 = ix + 2u; 6510 uint param_8 = s.tiles.offset; 6511 write_mem(param_6, param_7, param_8); 6512 } 6513 6514 void main() 6515 { 6516 uint th_ix = gl_LocalInvocationID.x; 6517 uint element_ix = gl_GlobalInvocationID.x; 6518 PathRef path_ref = PathRef(_305.conf.tile_alloc.offset + (element_ix * 12u)); 6519 AnnotatedRef ref = AnnotatedRef(_305.conf.anno_alloc.offset + (element_ix * 32u)); 6520 uint tag = 0u; 6521 if (element_ix < _305.conf.n_elements) 6522 { 6523 Alloc param; 6524 param.offset = _305.conf.anno_alloc.offset; 6525 AnnotatedRef param_1 = ref; 6526 tag = Annotated_tag(param, param_1).tag; 6527 } 6528 int x0 = 0; 6529 int y0 = 0; 6530 int x1 = 0; 6531 int y1 = 0; 6532 switch (tag) 6533 { 6534 case 1u: 6535 case 2u: 6536 case 3u: 6537 case 4u: 6538 { 6539 Alloc param_2; 6540 param_2.offset = _305.conf.anno_alloc.offset; 6541 AnnotatedRef param_3 = ref; 6542 AnnoEndClip clip = Annotated_EndClip_read(param_2, param_3); 6543 x0 = int(floor(clip.bbox.x * 0.03125)); 6544 y0 = int(floor(clip.bbox.y * 0.03125)); 6545 x1 = int(ceil(clip.bbox.z * 0.03125)); 6546 y1 = int(ceil(clip.bbox.w * 0.03125)); 6547 break; 6548 } 6549 } 6550 x0 = clamp(x0, 0, int(_305.conf.width_in_tiles)); 6551 y0 = clamp(y0, 0, int(_305.conf.height_in_tiles)); 6552 x1 = clamp(x1, 0, int(_305.conf.width_in_tiles)); 6553 y1 = clamp(y1, 0, int(_305.conf.height_in_tiles)); 6554 Path path; 6555 path.bbox = uvec4(uint(x0), uint(y0), uint(x1), uint(y1)); 6556 uint tile_count = uint((x1 - x0) * (y1 - y0)); 6557 if (tag == 4u) 6558 { 6559 tile_count = 0u; 6560 } 6561 sh_tile_count[th_ix] = tile_count; 6562 uint total_tile_count = tile_count; 6563 for (uint i = 0u; i < 7u; i++) 6564 { 6565 barrier(); 6566 if (th_ix >= uint(1 << int(i))) 6567 { 6568 total_tile_count += sh_tile_count[th_ix - uint(1 << int(i))]; 6569 } 6570 barrier(); 6571 sh_tile_count[th_ix] = total_tile_count; 6572 } 6573 if (th_ix == 127u) 6574 { 6575 uint param_4 = total_tile_count * 8u; 6576 MallocResult _478 = malloc(param_4); 6577 sh_tile_alloc = _478; 6578 } 6579 barrier(); 6580 MallocResult alloc_start = sh_tile_alloc; 6581 bool _489; 6582 if (!alloc_start.failed) 6583 { 6584 _489 = _92.mem_error != 0u; 6585 } 6586 else 6587 { 6588 _489 = alloc_start.failed; 6589 } 6590 if (_489) 6591 { 6592 return; 6593 } 6594 if (element_ix < _305.conf.n_elements) 6595 { 6596 uint _502; 6597 if (th_ix > 0u) 6598 { 6599 _502 = sh_tile_count[th_ix - 1u]; 6600 } 6601 else 6602 { 6603 _502 = 0u; 6604 } 6605 uint tile_subix = _502; 6606 Alloc param_5 = alloc_start.alloc; 6607 uint param_6 = 8u * tile_subix; 6608 uint param_7 = 8u * tile_count; 6609 Alloc tiles_alloc = slice_mem(param_5, param_6, param_7); 6610 path.tiles = TileRef(tiles_alloc.offset); 6611 Alloc param_8; 6612 param_8.offset = _305.conf.tile_alloc.offset; 6613 PathRef param_9 = path_ref; 6614 Path param_10 = path; 6615 Path_write(param_8, param_9, param_10); 6616 } 6617 uint total_count = sh_tile_count[127] * 2u; 6618 uint start_ix = alloc_start.alloc.offset >> uint(2); 6619 for (uint i_1 = th_ix; i_1 < total_count; i_1 += 128u) 6620 { 6621 Alloc param_11 = alloc_start.alloc; 6622 uint param_12 = start_ix + i_1; 6623 uint param_13 = 0u; 6624 write_mem(param_11, param_12, param_13); 6625 } 6626 } 6627 6628 `, 6629 } 6630 )