DocsFlow



  1. Docsflow Export
  2. Docs Flow Licensing
  3. Docsflow Free Trial
  4. Doc Flow Sap
-->

Pixel shader flow control instructions have limits affecting how many levels of nesting can be included in the instructions. In addition, there are some limitations for implementing per-pixel flow control with gradient instructions.

Note

Docsflow Export

Designed Using DocsFlow. I designed the template and produced the pages in collaboration with education specialists. For the toolkits, I implemented a new workflow with DocsFlow—a new plugin to InDesign which links content from google-docs like image links. This was a new workflow at Amplify that allowed multiple content developers to. InReview: DocsFlow 3. A Script to Collect All Objects With A Particular Object Style. Navigate Through InDesign Page Objects with Keyboard Shortcuts. Introducing InstantUnicode. InDesign How-to Video: Create a Photo Grid. EM Software- Wordsflow and Wordsflow Pro for InDesign, Docsflow and Docsflow Pro, Indata for Indesign and QuarkXPress, INcatalog and INcatalog Pro for InDesign, Xcatalog and Xcatalog Pro for QuarkXpress and more. Hope you like our new store. QBUS is well known since 1997, for providing good service and products at the. DocsFlow is an Adobe InDesign extension that combines the collaborative editing power of Google Docs with the dynamic linking from any InDesign story. The result is an almost magical ability to.

Docs Flow Licensing

When you use the *_4_0_level_9_x HLSL shader profiles, you implicitly use of the Shader Model 2.x profiles to support Direct3D 9 capable hardware. Shader Model 2.x profiles support more limited flow control behavior than the Shader Model 4.x and later profiles.

Pixel Shader Instruction Depth Counts

ps_2_0 does not support flow control. The limitations for the other pixel shader versions are listed below.

Instruction Depth Count for ps_2_x

Each instruction counts against one or more nesting depth limits. The following table lists the depth count that each instruction adds or subtracts from the existing depth.

InstructionStatic nestingDynamic nestingloop/rep nestingcall nesting
if bool - ps1000
if_comp - ps0100
if pred - ps0100
else - ps0000
endif - ps-1(if bool - ps)-1(if pred - ps or if_comp - ps)00
rep - ps0010
endrep - ps00-10
break - ps0000
break_comp - ps01, -100
breakp - ps0000
call - ps0001
callnz bool - ps0001
callnz pred - ps0101
ret - ps0-1(callnz pred - ps)0-1
setp_comp - ps0000

Nesting Depth

Nesting depth defines the number of instructions can be called from inside of each other. Each type of instruction has one or more nesting limits as indicated in the following table.

Instruction TypeMaximum
Static nesting24 if (D3DCAPS9.D3DPSHADERCAPS2_0.StaticFlowControlDepth > 0); 0 otherwise
Dynamic nesting0 to 24, see D3DCAPS9.D3DPSHADERCAPS2_0.DynamicFlowControlDepth
rep nesting0 to 4, see D3DCAPS9.D3DPSHADERCAPS2_0.StaticFlowControlDepth
call nesting0 to 4, see D3DCAPS9.D3DPSHADERCAPS2_0.StaticFlowControlDepth (independent of rep limit)

Instruction Depth Count for ps_2_sw

Each instruction counts against one or more nesting depth limits. This table shows the depth count that each instruction adds or subtracts from the existing depth.

InstructionStatic nestingDynamic nestingloop/rep nestingcall nesting
if bool - ps1000
if pred - ps0100
if_comp - ps0100
else - ps0000
endif - ps-1(if bool - ps)-1(if pred - ps or if_comp - ps)00
rep - ps0010
endrep - ps00-10
loop - psn/an/an/an/a
endloop - psn/an/an/an/a
break - ps0000
break_comp - ps01, -100
breakp - ps0000
call - ps0001
callnz bool - ps0001
callnz pred - ps0101
ret - ps0-1(callnz pred - ps)0-1
setp_comp - ps0000

Nesting Depth

Nesting depth defines the number of instructions that can be called from inside of each other. Each type of instruction has one or more nesting limits as indicated in the following table.

Instruction TypeMaximum
Static nesting24
Dynamic nesting24
rep nesting4
call nesting4

Instruction Depth Count for ps_3_0

Each instruction counts against one or more nesting depth limits. This table shows the depth count that each instruction adds or subtracts from the existing depth.

InstructionStatic nestingDynamic nestingloop/rep nestingcall nesting
if bool - ps1000
if pred - ps0100
if_comp - ps0100
else - ps0000
endif - ps-1(if bool - ps)-1(if pred - ps or if_comp - ps)00
rep - ps0010
endrep - ps00-10
loop - ps0010
endloop - ps00-10
break - ps0000
break_comp - ps01, -100
breakp - ps0000
call - ps0001
callnz bool - ps0001
callnz pred - ps0101
ret - ps0-1(callnz pred - ps)0-1
setp_comp - ps0000

Nesting Depth

Nesting depth defines the number of instructions that can be called from inside of each other. Each type of instruction has one or more nesting limits as indicated in the following table.

Instruction TypeMaximum
Static nesting24
Dynamic nesting24
loop/rep nesting4
call nesting4

Instruction Depth Count for ps_3_sw

Each instruction counts against one or more nesting depth limits. This table shows the depth count that each instruction adds or subtracts from the existing depth.

InstructionStatic nestingDynamic nestingloop/rep nestingcall nesting
if bool - ps1000
if pred - ps0100
if_comp - ps0100
else - ps0000
endif - ps-1(if bool - ps)-1(if pred - ps or if_comp - ps)00
rep - ps0010
endrep - ps00-10
loop - ps0010
endloop - ps00-10
break - ps0000
break_comp - ps01, -100
breakp - ps0000
call - ps0001
callnz bool - ps0001
callnz pred - ps0101
ret - ps0-1(callnz pred - ps)0-1
setp_comp - ps0000

Nesting Depth

Nesting depth defines the number of instructions that can be called from inside of each other. Each type of instruction has one or more nesting limits as indicated in the following table.

Instruction TypeMaximum
Static nesting24
Dynamic nesting24
loop/rep nesting4
call nesting4

Interaction of Per-Pixel Flow Control With Screen Gradients

The pixel shader instruction set includes several instructions that produce or use gradients of quantities with respect to screen space x and y. The most common use for gradients is to compute level-of-detail calculations for texture sampling, and in the case of anisotropic filtering, selecting samples along the axis of anisotropy. Typically, hardware implementations run the pixel shader on multiple pixels simultaneously (such as a 2x2 grid), so that gradients of quantities computed in the shader can be reasonably approximated as deltas of the values at the same point of execution in adjacent pixels.

When flow control is present in a shader, the result of a gradient calculation requested inside a given branch path is ambiguous when adjacent pixels may execute separate flow control paths. Therefore, it is deemed illegal to use any pixel shader operation that requests a gradient calculation to occur at a location that is inside a flow control construct which could vary across pixels for a given primitive being rasterized.

All pixel shader instructions are partitioned into those operations that are permitted and into those that are not permitted inside of flow control:

  • Scenario A: Operations that are not permitted inside flow control that could vary across the pixels in a primitive. These include the operations listed in the following table.

    InstructionIs Permitted in Flow Control when:
    texld - ps_2_0 and up, texldb - ps and texldp - psA temporary register is used for the texture coordinate.
    dsx - ps and dsy - psA temporary register is used for the operand.
  • Scenario B: Operations that are permitted anywhere. These include the operations listed in the following table.

    InstructionIs Permitted Anywhere when:
    texld - ps_2_0 and up, texldb - ps and texldp - psA read-only quantity is used for the texture coordinate (may vary per-pixel, such as interpolated texture coordinates).
    dsx - ps and dsy - psA read-only quantity is used for the input operand (may vary per-pixel, such as interpolated texture coordinates).
    texldl - psThe user provides level-of-detail as an argument, so there are no gradients, and thus no issue with flow control.
    texldd - psThe user provides gradients as input arguments, so there is no issue with flow control.

These restrictions are strictly enforced in shader validation. Scenarios having a branch condition that looks like it would branch consistently across a primitive, even though an operand in the condition expression is a pixel-shader-computed quantity, nevertheless still fall into scenario A and are not permitted. Similarly, scenarios where gradients are requested on some shader-computed quantity x from inside dynamic flow control, yet where it appears that x is not modified across any of the branches, nevertheless still fall into scenario A and are not permitted.

Predication is included in these restrictions on flow control, so that implementations remain free to trivially interchange the implementation of branch instructions with predicated instructions.

DocsFlow

The user can use instructions from scenarios A and B together. For example, suppose the user needs an anisotropic texture sample given a shader computed texture coordinate; however, the texture load is only needed for pixels satisfying some per-pixel condition. To meet these requirements, the user can compute the texture coordinate for all pixels, outside per-pixel varying flow control, immediately computing gradients using dsx - ps and dsy - ps instructions. Then, within a per-pixel if bool - ps/endif - ps block, the user can use texldd - ps (texture load with user provided gradients), passing the precalculated gradients. Another way to describe this usage pattern is that, while all pixels in the primitive had to compute the texture coordinates and be involved with gradient calculation, only the pixels that needed to sample a texture actually did so.

Regardless of these rules, the burden is still on the user to ensure that before computing any gradient (or performing a texture sample that implicitly computes a gradient), the register containing the source data must have been initialized for all execution paths beforehand. Initialization of temporary registers is not validated or enforced in general.

Related topics

Thank you for your interest in DocsFlow, which David Blatner said “…is one of those plug-ins that can literally be life-changing in how much it improves your workflow.”

DocsFlow is a plug-in for Adobe InDesign that marries Google Docs’ shared editing power to InDesign’s layout prowess, giving you on-line, two-way story links to Google Docs documents.

Here’s how to test-drive DocsFlow with a full-featured trial license, and how to convert that to a real license if it proves useful. (Note that we strongly encourage you to try before buying.)

  • Your first step for learning more is to visit the product page, and the user guide. If you’re in a hurry (aren’t we all?), see the “Getting Started” first section of the user guide; it covers the basics in a few paragraphs.

    At its simplest, using DocsFlow is a matter of using File > DocsFlow > Place from Google Docs… instead of File > Place…. When the linked source document is changed, you’ll see a link-changed icon in the Links panel. Double-click that icon to merge in the changes, without losing your work. That’s it, in a nutshell.

  • You can download and install the full plug-in from the “Downloads” sidebar on this page, or on the product page. Just find your InDesign version and your platform (macOS or Windows) and click on the appropriate link, to download. Double-click the downloaded installer to complete the installation. It shouldn’t take more than a minute or two for the whole process.

    Once installed, (re) start InDesign, and, on first use when prompted by a licensing dialog, press the Demo button. You then have 15 days to try out DocsFlow with all (including Pro) features enabled.

  • If you do decide to purchase a license, use this link for our online store, or use the Buy DocsFlow button in the sidebar of this page or the product home page.

    Note that we have a 60-day money-back guarantee, so you can purchase with confidence knowing it won’t be wasted money. (And you’ve already evaluated it and know it works for you, right?)

    If you’ve already installed DocsFlow for a trial, just enter your real license the next time you’re prompted (or go to File > DocsFlow > About… > License… and enter it there). You don’t need to re-download or re-install.

  • If you decide you don’t want to use DocsFlow (and we’d love to know why), you can uninstall it any time (on macOS) by deleting the Plug-Ins/Em Software sub-folder in the InDesign folder, or (on Windows) using the standard system uninstaller.

We offer free lifetime support for license holders, and for anyone in the evaluation (or even pre-evaluation) period. Contact us at support@emsoftware.com (or, better yet, use File > DocsFlow > Send Email to Support) with any questions, problems, issues, ideas, or kudos. We’re here to make you successful.

DocsFlow has been shipping since late 2011, and has thousands of happy users around the world.

Docsflow Free Trial

Em Software is a small software developer that’s been in the publishing business since 1990 (three decades!), and in the plug-in business since before InDesign 1.0 was even released. We pride ourselves on great products and personal customer support. We’re not perfect but we’re always striving!

Doc Flow Sap

We’d love to hear from you no matter what you decide.