1. 19 Oct, 2017 1 commit
    • Add per-descriptor-set IO mapping shift values. · 08a14422
      LoopDawg authored
      This PR adds the ability to provide per-descriptor-set IO mapping shift
      values.  If a particular binding does not land into a per-set value,
      then it falls back to the prior behavior (global shifts per resource class).
      
      Because there were already 6 copies of many different methods and internal
      variables and functions, and this PR would have added 6 more, a new API is
      introduced to cut down on replication and present a cleaner interface.
      For the global (non-set-specific) API, the old entry points still exist
      for backward compatibility, but are phrased internally in terms of the
      following.
      
          // Resource type for IO resolver
          enum TResourceType {
              EResSampler,
              EResTexture,
              EResImage,
              EResUbo,
              EResSsbo,
              EResUav,
              EResCount
          };
      
      Methods on TShader:
      
          void setShiftBinding(TResourceType res, unsigned int base);
          void setShiftBindingForSet(TResourceType res, unsigned int set, unsigned int base);
      
      The first method replaces the 6 prior entry points of various spellings, which
      exist now in depreciated form.  The second provides per-resource-set functionality.
      Both accept an enum from the list above.
      
      From the command line, the existing options can accept either a single shift value as
      before, or a series of 1 or more [set offset] pairs.  Both can be provided, as in:
      
          ... --stb 20 --stb 2 25 3 30 ...
      
      which will use the offset 20 for anything except descriptor set 2 (which uses 25) and
      3 (which uses 30).
  2. 16 Oct, 2017 4 commits
  3. 13 Oct, 2017 1 commit
  4. 11 Oct, 2017 1 commit
  5. 10 Oct, 2017 5 commits
  6. 08 Oct, 2017 1 commit
  7. 07 Oct, 2017 6 commits
  8. 06 Oct, 2017 6 commits
  9. 04 Oct, 2017 3 commits
  10. 03 Oct, 2017 1 commit
  11. 02 Oct, 2017 2 commits
    • Merge pull request #1075 from LoopDawg/subpass-input · 24919659
      John Kessenich authored
      HLSL: add subpass input types and methods
    • HLSL: add subpass input types and methods · 7f93d56e
      LoopDawg authored
      Add support for Subpass Input proposal of issue #1069.
      
      Subpass input types are given as:
      
          layout(input_attachment_index = 1) SubpassInput<float4> subpass_f;
          layout(input_attachment_index = 2) SubpassInput<int4>   subpass_i;
          layout(input_attachment_index = 3) SubpassInput<uint4>  subpass_u;
      
          layout(input_attachment_index = 1) SubpassInputMS<float4> subpass_ms_f;
          layout(input_attachment_index = 2) SubpassInputMS<int4>   subpass_ms_i;
          layout(input_attachment_index = 3) SubpassInputMS<uint4>  subpass_ms_u;
      
      The input attachment may also be specified using attribute syntax:
      
          [[vk::input_attachment_index(7)]] SubpassInput subpass_2;
      
      The template type may be a shorter-than-vec4 vector, but currently user
      structs are not supported.  (An unimplemented error will be issued).
      
      The load operations are methods on objects of the above type:
      
          float4 result = subpass_f.SubpassLoad();
          int4   result = subpass_i.SubpassLoad();
          uint4  result = subpass_u.SubpassLoad();
      
          float4 result = subpass_ms_f.SubpassLoad(samp);
          int4   result = subpass_ms_i.SubpassLoad(samp);
          uint4  result = subpass_ms_u.SubpassLoad(samp);
      
      Additionally, the AST printer could not print EOpSubpass* nodes.  Now it can.
      
      Fixes #1069
  12. 30 Sep, 2017 2 commits
  13. 29 Sep, 2017 7 commits