diff --git a/docs/stubgen.py b/docs/stubgen.py index c85265b29..d34fdd3c7 100644 --- a/docs/stubgen.py +++ b/docs/stubgen.py @@ -390,15 +390,32 @@ def gen_class(file: Stream, class_obj: Type): bases_string = ", ".join([b.__name__ for b in bases]) - file.println(f"class {class_obj.__name__}({bases_string}):") - file.indent() - if class_obj.__doc__ is None: raise ValueError("Unexpected None docstring") + lines = class_obj.__doc__.strip().splitlines() + + constructors: List[List[Tuple[str, str]]] = [] + while lines[0].strip().startswith(class_obj.__name__ + "("): + args = lines[0].strip() + start = args.find("(") + args = args[start + 1 : -1] + annot_split = lambda arg: (arg.split(":")[0].strip(), arg.split(":")[1].strip()) + constructors.append([annot_split(arg) for arg in args.split(",") if arg != ""]) + del lines[0] + + if len(constructors) > 0: + file.println("from typing import overload") + file.println("") + + class_doc = ("\n".join(lines)).strip() + + file.println(f"class {class_obj.__name__}({bases_string}):") + file.indent() + file.println("# Original docstring") file.println('"""') - file.printlines(class_obj.__doc__) + file.printlines(class_doc) file.println('"""') file.println("") file.println("") @@ -453,6 +470,47 @@ def gen_class(file: Stream, class_obj: Type): file.println('"""') file.println("") else: + for ctor in constructors: + ctor_def = f"def __init__(self, " + for param, annot in ctor: + if annot != class_obj.__name__: + # a default value comes in with the annotation, + # we don't split it out otherwise so strip it here + type_str = annot.split("=")[0].strip() + add_dependencies(class_obj, deps, type_str) + ctor_def += f"{param}: {annot}, " + else: + # escape any self-references in ''s + ctor_def += f"{param}: '{annot}', " + + ctor_def = ctor_def[:-2] + "):" + + file.println("@overload") + file.println(ctor_def) + file.indent() + file.println('"""') + # copy constructors have only one parameter of our own type + if len(ctor) == 1 and ctor[0][1] == class_obj.__name__: + file.println( + f"Construct a new {class_obj.__name__} with a deep copy of the input." + ) + # default constructors have no parameters + elif ctor == []: + file.println( + f"Construct a new default-initialised {class_obj.__name__}." + ) + # more complex value constructor with parameters + else: + file.println( + f"Construct a new {class_obj.__name__} using provided values." + ) + file.println('"""') + file.println("pass") + file.dedent() + file.println("") + if len(constructors) > 0: + file.println("") + for item_name in class_obj.__dict__.keys(): if item_name.startswith("__"): continue @@ -506,6 +564,7 @@ def gen_class(file: Stream, class_obj: Type): file.println('"""') file.printlines(doc) file.println('"""') + file.println("") else: raise ValueError( f"Unknown type of member {item_name} in {class_obj.__name__}" diff --git a/docs/verify-docstrings.py b/docs/verify-docstrings.py index 46df1ac87..ce2f96b52 100644 --- a/docs/verify-docstrings.py +++ b/docs/verify-docstrings.py @@ -113,14 +113,14 @@ def make_c_typeval(ret: str, pattern: bool, typelist: List[str]): elif ret == 'Tuple[str,str]': # special case ret = 'rdcstrpair' elif ret[0:9] == 'Callable[': - ret = '(std::function|[A-Za-z_]+Callback)' if pattern else 'std::function/NamedCallback' + ret = r'(std::function|[A-Za-z_]+Callback)' if pattern else 'std::function/NamedCallback' elif ret[0:5] == 'List[': inner = make_c_typeval(ret[5:-1], pattern, typelist) ret = '(const )?rdcarray<{}> ?[&*]?'.format(inner) if pattern else 'rdcarray<{}>'.format(inner) elif ret[0:6] == 'Tuple[': inners = [make_c_typeval(i.strip(), pattern, typelist) for i in ret[6:-1].split(',')] if pattern: - inner = ',\s*'.join(inners) + inner = r',\s*'.join(inners) else: inner = ', '.join(inners) @@ -166,7 +166,7 @@ def check_function(parent_name, objname, obj, source, global_func, typelist): default_val = '' for p in params: if len(funcargs[0]) > 0: - funcargs[0] += ',\s*' + funcargs[0] += r',\s*' funcargs[1] += ', ' default_val = p[2].lstrip() @@ -177,7 +177,7 @@ def check_function(parent_name, objname, obj, source, global_func, typelist): funcargs[1] += make_c_typeval(p[0], False, typelist) + ' ' + p[1] if default_val != "": - funcargs[0] += f"\s*=\s*{default_val}" + funcargs[0] += f"\\s*=\\s*{default_val}" funcargs[1] += f" = {default_val}" result = RTYPE_PATTERN.search(docstring) @@ -190,7 +190,7 @@ def check_function(parent_name, objname, obj, source, global_func, typelist): if global_func: global_pattern = '(RENDERDOC_CC\s*RENDERDOC_)?' - pattern = '(?s){} ?{}{}\(\s*{}\)'.format(make_c_typeval(ret, True, typelist), global_pattern, objname, funcargs[0]) + pattern = r'(?s){} ?{}{}\(\s*{}\)'.format(make_c_typeval(ret, True, typelist), global_pattern, objname, funcargs[0]) clean = '{} {}({})'.format(make_c_typeval(ret, False, typelist), objname, funcargs[1]) match = re.search(pattern, source, re.MULTILINE | re.DOTALL) @@ -198,7 +198,7 @@ def check_function(parent_name, objname, obj, source, global_func, typelist): pattern2 = None # global functions returning strings can't return an rdcstr, they have to return const char * if match is None and ret == 'str': - pattern2 = '(?s)const char \*{}{}\(\s*{}\)'.format(global_pattern, objname, funcargs[0]) + pattern2 = r'(?s)const char \*{}{}\(\s*{}\)'.format(global_pattern, objname, funcargs[0]) match = re.search(pattern2, source, re.MULTILINE | re.DOTALL) if match is None: @@ -291,8 +291,8 @@ for mod_name in check_mods: print("Checking class {}".format(qualname)) # Grab the source to just this class to search in - source = re.search('(struct|class|union) I?' + objname + '(\n|\s*:[^A-Za-z][\s:a-zA-Z]*\n)\{.*?^}', headers, re.MULTILINE | re.DOTALL) - + source = re.search('(struct|class|union) I?' + objname + r'(\n|\s*:[^A-Za-z][\s:a-zA-Z]*\n)\{.*?^}', headers, re.MULTILINE | re.DOTALL) + namespace = None if source is None and objname[0:2] in ['VK', 'GL']: @@ -310,13 +310,19 @@ for mod_name in check_mods: namespace = namespace.group(0) if source is None and namespace is not None: - source = re.search('(struct|class|union) I?' + objname + '[^{]*\{.*?^}', namespace, re.MULTILINE | re.DOTALL) - + source = re.search('(struct|class|union) I?' + objname + r'[^{]*\{.*?^}', namespace, re.MULTILINE | re.DOTALL) + source = source.group(0) instance = None + copyable = False try: instance = obj() + try: + dupe_instance = obj(instance) + copyable = True + except NotImplementedError: + pass except TypeError: pass @@ -328,6 +334,29 @@ for mod_name in check_mods: instance_warned = False + # for types that we can create, we expect by default to + # see a default constructor and a copy constructor, + # unless we see a note that the type is not copyable + if instance is not None: + lines = docstring.strip().splitlines() + if lines[0].strip() != f"{obj.__name__}()": + count += 1 + print( + f"Error {count:3}: {obj.__name__} can be created, " + "expect default constructor as first real line of its docstring." + ) + elif ( + copyable + and lines[1].strip() != f"{obj.__name__}(other: {obj.__name__})" + ): + count += 1 + print( + f"Error {count:3}: {obj.__name__} can be copied, " + "expect copy constructor as second entry in its docstring:\n" + f"Actual > {lines[1]}\n" + f"Expected > {obj.__name__}(other: {obj.__name__})" + ) + for member_name in obj.__dict__.keys(): if '__' in member_name or member_name in ['this', 'thisown']: continue @@ -407,7 +436,7 @@ for mod_name in check_mods: count += 1 print("Error {:3}: {}.{} is missing :type: declaration, should be {}".format(count, qualname, member_name, type_name)) else: - type_decl = re.sub('Tuple\[.*\]', 'tuple', type_decl) + type_decl = re.sub(r'Tuple\[.*\]', 'tuple', type_decl) if type_decl != type_name: count += 1 print("Error {:3}: {}.{} has wrong :type: declaration {}, should be {}".format(count, qualname, member_name, type_decl, type_name)) diff --git a/qrenderdoc/Code/Interface/Extensions.h b/qrenderdoc/Code/Interface/Extensions.h index 0747a2bd6..02b79274a 100644 --- a/qrenderdoc/Code/Interface/Extensions.h +++ b/qrenderdoc/Code/Interface/Extensions.h @@ -279,7 +279,12 @@ BITMASK_OPERATORS(DialogButton); DISABLE_PYTHON_FLAG_ENUMS; #endif -DOCUMENT("The metadata for an extension."); +DOCUMENT(R"( +ExtensionMetadata() +ExtensionMetadata(other: ExtensionMetadata) + +The metadata for an extension. +)"); struct ExtensionMetadata { DOCUMENT(""); diff --git a/qrenderdoc/Code/Interface/PersistantConfig.h b/qrenderdoc/Code/Interface/PersistantConfig.h index 690e5896a..821641b12 100644 --- a/qrenderdoc/Code/Interface/PersistantConfig.h +++ b/qrenderdoc/Code/Interface/PersistantConfig.h @@ -30,7 +30,11 @@ class QMutex; -DOCUMENT(R"(Contains the output from invoking a :class:`ShaderProcessingTool`, including both the +DOCUMENT(R"( +ShaderToolOutput() +ShaderToolOutput(other: ShaderToolOutput) + +Contains the output from invoking a :class:`ShaderProcessingTool`, including both the actual output data desired as well as any stdout/stderr messages. )"); struct ShaderToolOutput @@ -48,7 +52,11 @@ struct ShaderToolOutput bytebuf result; }; -DOCUMENT(R"(Describes an external program that can be used to process shaders, typically either +DOCUMENT(R"( +ShaderProcessingTool() +ShaderProcessingTool(other: ShaderProcessingTool) + +Describes an external program that can be used to process shaders, typically either compiling from a high-level language to a binary format, or decompiling from the binary format to a high-level language or textual representation. @@ -58,6 +66,9 @@ struct ShaderProcessingTool { DOCUMENT(""); ShaderProcessingTool() = default; + ShaderProcessingTool(const ShaderProcessingTool &) = default; + ShaderProcessingTool &operator=(const ShaderProcessingTool &) = default; + VARIANT_CAST(ShaderProcessingTool); bool operator==(const ShaderProcessingTool &o) const { @@ -159,7 +170,12 @@ DECLARE_REFLECTION_STRUCT(ShaderProcessingTool); #define BUGREPORT_URL "https://renderdoc.org/bugreporter" #endif -DOCUMENT("Describes a submitted bug report."); +DOCUMENT(R"( +BugReport() +BugReport(other: BugReport) + +Describes a submitted bug report. +)"); struct BugReport { DOCUMENT(""); @@ -879,7 +895,10 @@ struct CustomPersistentStorage }; #endif -DOCUMENT(R"(A persistant config file that is automatically loaded and saved, which contains any +DOCUMENT(R"( +PersistantConfig() + +A persistant config file that is automatically loaded and saved, which contains any settings and information that needs to be preserved from one run to the next. The config is retrieved by calling :meth:`CaptureContext.Config`. diff --git a/qrenderdoc/Code/Interface/QRDInterface.h b/qrenderdoc/Code/Interface/QRDInterface.h index b68263098..7c3eeb372 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.h +++ b/qrenderdoc/Code/Interface/QRDInterface.h @@ -95,10 +95,18 @@ struct ICaptureContext; #include "PersistantConfig.h" #include "RemoteHost.h" -DOCUMENT("Contains all of the settings that control how to capture an executable."); +DOCUMENT(R"( +CaptureSettings() +CaptureSettings(other: CaptureSettings) + +Contains all of the settings that control how to capture an executable. +)"); struct CaptureSettings { + DOCUMENT(""); CaptureSettings(); + CaptureSettings(const CaptureSettings &) = default; + CaptureSettings &operator=(const CaptureSettings &) = default; VARIANT_CAST(CaptureSettings); @@ -151,7 +159,11 @@ struct CaptureSettings DECLARE_REFLECTION_STRUCT(CaptureSettings); -DOCUMENT(R"(The details of a capture that has been made on a connection but may not +DOCUMENT(R"( +ConnectedTempCapture() +ConnectedTempCapture(other: ConnectedTempCapture) + +The details of a capture that has been made on a connection but may not have been saved to disk or local. )"); struct ConnectedTempCapture @@ -1804,7 +1816,11 @@ protected: DECLARE_REFLECTION_STRUCT(IPixelHistoryView); -DOCUMENT("An interface implemented by any object wanting to be notified of capture events."); +DOCUMENT(R"( +CaptureViewer() + +An interface implemented by any object wanting to be notified of capture events. +)"); struct ICaptureViewer { DOCUMENT("Called whenever a capture is opened."); @@ -2193,7 +2209,13 @@ enum class CaptureModifications : uint32_t BITMASK_OPERATORS(CaptureModifications); -DOCUMENT("A description of a bookmark on an event"); +DOCUMENT(R"( +EventBookmark() +EventBookmark(other: EventBookmark) +EventBookmark(eventId: int) + +A description of a bookmark on an event +)"); struct EventBookmark { DOCUMENT(R"(The :data:`eventId ` at which this bookmark is placed. @@ -2210,6 +2232,7 @@ struct EventBookmark DOCUMENT(""); EventBookmark() = default; + EventBookmark(const EventBookmark &) = default; EventBookmark(uint32_t e) : eventId(e) {} bool operator==(const EventBookmark &o) const { return eventId == o.eventId; } bool operator!=(const EventBookmark &o) const { return eventId != o.eventId; } diff --git a/qrenderdoc/Code/Interface/RemoteHost.h b/qrenderdoc/Code/Interface/RemoteHost.h index e61445d1e..1862dd025 100644 --- a/qrenderdoc/Code/Interface/RemoteHost.h +++ b/qrenderdoc/Code/Interface/RemoteHost.h @@ -38,7 +38,13 @@ struct RemoteHostData; // are unexpectedly removed (such as disconnecting an auto-populated device) these structs are // copied around and they have a shared locked data pointer. All accessors then lock and look up the // data there to fetch or modify -DOCUMENT("A handle for interacting with a remote server on a given host."); +DOCUMENT(R"( +RemoteHost() +RemoteHost(other: RemoteHost) +RemoteHost(hostname: str) + +A handle for interacting with a remote server on a given host. +)"); class RemoteHost { public: diff --git a/qrenderdoc/Code/pyrenderdoc/ext_refcounts.h b/qrenderdoc/Code/pyrenderdoc/ext_refcounts.h index 8ccb9e0eb..9c87ed642 100644 --- a/qrenderdoc/Code/pyrenderdoc/ext_refcounts.h +++ b/qrenderdoc/Code/pyrenderdoc/ext_refcounts.h @@ -87,5 +87,10 @@ fail: template <> inline SDFile *MakeFromArgsTuple(PyObject *args) { + if(!SWIG_Python_UnpackTuple(args, "new_SDFile", 0, 0, 0)) + SWIG_fail; + return new SDFile(); +fail: + return NULL; } diff --git a/qrenderdoc/Code/pyrenderdoc/qrenderdoc.i b/qrenderdoc/Code/pyrenderdoc/qrenderdoc.i index dc8765ed4..ec17a6039 100644 --- a/qrenderdoc/Code/pyrenderdoc/qrenderdoc.i +++ b/qrenderdoc/Code/pyrenderdoc/qrenderdoc.i @@ -114,6 +114,9 @@ TEMPLATE_FIXEDARRAY_DECLARE(rdcfixedarray); static int capviewer_init(PyObject *self, PyObject *args) { PyObject *resultobj = 0; ICaptureViewer *result = 0; + + if(!SWIG_Python_UnpackTuple(args, "new_CaptureViewer", 0, 0, 0)) + return -1; result = new PythonCaptureViewer(self); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ICaptureViewer, SWIG_BUILTIN_INIT | 0); diff --git a/renderdoc/api/replay/capture_options.h b/renderdoc/api/replay/capture_options.h index 7d39b6024..fb85bd830 100644 --- a/renderdoc/api/replay/capture_options.h +++ b/renderdoc/api/replay/capture_options.h @@ -33,7 +33,11 @@ typedef uint8_t byte; // see renderdoc_app.h RENDERDOC_CaptureOption - make sure any changes here are reflected there, to // the options or to the documentation -DOCUMENT(R"(Sets up configuration and options for optional features either at capture time or at API +DOCUMENT(R"( +CaptureOptions() +CaptureOptions(other: CaptureOptions) + +Sets up configuration and options for optional features either at capture time or at API initialisation time that the user can enable or disable at will. )"); struct CaptureOptions diff --git a/renderdoc/api/replay/common_pipestate.h b/renderdoc/api/replay/common_pipestate.h index 4a095e73b..a25238161 100644 --- a/renderdoc/api/replay/common_pipestate.h +++ b/renderdoc/api/replay/common_pipestate.h @@ -30,7 +30,13 @@ #include "shader_types.h" #include "stringise.h" -DOCUMENT("Information about a viewport."); +DOCUMENT(R"( +Viewport() +Viewport(other: Viewport) +Viewport(x: float, y: float, width: float, height: float, minDepth: float, maxDepth: float, enabled: bool) + +Information about a viewport. +)"); struct Viewport { DOCUMENT(""); @@ -103,7 +109,13 @@ struct Viewport DECLARE_REFLECTION_STRUCT(Viewport); -DOCUMENT("Describes a single scissor region."); +DOCUMENT(R"( +Scissor() +Scissor(other: Scissor) +Scissor(x: int, y: int, width: int, height: int, enabled: bool) + +Describes a single scissor region. +)"); struct Scissor { DOCUMENT(""); @@ -161,7 +173,12 @@ struct Scissor DECLARE_REFLECTION_STRUCT(Scissor); -DOCUMENT("Describes the details of a blend operation."); +DOCUMENT(R"( +BlendEquation() +BlendEquation(other: BlendEquation) + +Describes the details of a blend operation. +)"); struct BlendEquation { DOCUMENT(""); @@ -202,7 +219,12 @@ struct BlendEquation DECLARE_REFLECTION_STRUCT(BlendEquation); -DOCUMENT("Describes the blend configuration for a given output target."); +DOCUMENT(R"( +ColorBlend() +ColorBlend(other: ColorBlend) + +Describes the blend configuration for a given output target. +)"); struct ColorBlend { DOCUMENT(""); @@ -270,7 +292,12 @@ struct ColorBlend DECLARE_REFLECTION_STRUCT(ColorBlend); -DOCUMENT("Describes a common subset of rasterizing state."); +DOCUMENT(R"( +RasterState() +RasterState(other: RasterState) + +Describes a common subset of rasterizing state. +)"); struct RasterState { DOCUMENT(""); @@ -298,7 +325,12 @@ struct RasterState CullMode cullMode = CullMode::NoCull; }; -DOCUMENT("Describes a common subset of depth testing state."); +DOCUMENT(R"( +DepthTestState() +DepthTestState(other: DepthTestState) + +Describes a common subset of depth testing state. +)"); struct DepthTestState { DOCUMENT(""); @@ -338,7 +370,12 @@ struct DepthTestState double maxDepthBounds = 0.0; }; -DOCUMENT("Describes the details of a stencil operation."); +DOCUMENT(R"( +StencilFace() +StencilFace(other: StencilFace) + +Describes the details of a stencil operation. +)"); struct StencilFace { DOCUMENT(""); @@ -385,7 +422,12 @@ struct StencilFace DECLARE_REFLECTION_STRUCT(StencilFace); -DOCUMENT("Information about a single vertex or index buffer binding."); +DOCUMENT(R"( +BoundVBuffer() +BoundVBuffer(other: BoundVBuffer) + +Information about a single vertex or index buffer binding. +)"); struct BoundVBuffer { DOCUMENT(""); @@ -434,7 +476,11 @@ struct BoundVBuffer DECLARE_REFLECTION_STRUCT(BoundVBuffer); -DOCUMENT(R"(The contents of a descriptor. Not all contents will be valid depending on API and +DOCUMENT(R"( +Descriptor() +Descriptor(other: Descriptor) + +The contents of a descriptor. Not all contents will be valid depending on API and descriptor type, others will be set to sensible defaults. For sampler descriptors, the sampler-specific data can be queried separately and returned as @@ -621,7 +667,11 @@ descriptor DECLARE_REFLECTION_STRUCT(Descriptor); -DOCUMENT(R"(The contents of a sampler descriptor. Not all contents will be valid depending on API +DOCUMENT(R"( +SamplerDescriptor() +SamplerDescriptor(other: SamplerDescriptor) + +The contents of a sampler descriptor. Not all contents will be valid depending on API and capabilities, others will be set to sensible defaults. For normal descriptors, the resource data should be queried and returned in :class:`Descriptor`. @@ -838,7 +888,11 @@ this sampler. DECLARE_REFLECTION_STRUCT(SamplerDescriptor); -DOCUMENT(R"(The details of a single accessed descriptor as fetched by a shader and which descriptor +DOCUMENT(R"( +DescriptorAccess() +DescriptorAccess(other: DescriptorAccess) + +The details of a single accessed descriptor as fetched by a shader and which descriptor in the descriptor store was fetched. This may be a somewhat conservative access, reported as possible but not actually executed on the @@ -960,7 +1014,11 @@ inline ShaderDirectAccess::ShaderDirectAccess(const DescriptorAccess &access) { } -DOCUMENT(R"(In many cases there may be a logical location or fixed binding point for a particular +DOCUMENT(R"( +DescriptorLogicalLocation() +DescriptorLogicalLocation(other: DescriptorLogicalLocation) + +In many cases there may be a logical location or fixed binding point for a particular descriptor which is not conveyed with a simple byte offset into a descriptor store. This is particularly true for any descriptor stores that are not equivalent to a buffer of bytes but actually have an API structure - for example D3D11 and GL with fixed binding points, or Vulkan @@ -1065,7 +1123,11 @@ first, and fall back to this name if no reflection information is available in t DECLARE_REFLECTION_STRUCT(DescriptorLogicalLocation); -DOCUMENT(R"(Combined information about a single descriptor that has been used, both the information +DOCUMENT(R"( +UsedDescriptor() +UsedDescriptor(other: UsedDescriptor) + +Combined information about a single descriptor that has been used, both the information about its access and its contents. This is a helper struct for the common pipeline state abstraction to trade off simplicity of access @@ -1121,7 +1183,13 @@ For normal descriptors this is empty. DECLARE_REFLECTION_STRUCT(UsedDescriptor); -DOCUMENT("Describes a 2-dimensional int offset"); +DOCUMENT(R"( +Offset() +Offset(other: Offset) +Offset(x: int, y: int) + +Describes a 2-dimensional int offset +)"); struct Offset { DOCUMENT(""); @@ -1152,7 +1220,12 @@ struct Offset DECLARE_REFLECTION_STRUCT(Offset); -DOCUMENT("Information about a vertex input attribute feeding the vertex shader."); +DOCUMENT(R"( +VertexInputAttribute() +VertexInputAttribute(other: VertexInputAttribute) + +Information about a vertex input attribute feeding the vertex shader. +)"); struct VertexInputAttribute { DOCUMENT(""); @@ -1252,7 +1325,11 @@ be emulated. DECLARE_REFLECTION_STRUCT(VertexInputAttribute); -DOCUMENT(R"(A task or mesh message's location. +DOCUMENT(R"( +ShaderMeshMessageLocation() +ShaderMeshMessageLocation(other: ShaderMeshMessageLocation) + +A task or mesh message's location. .. data:: NotUsed @@ -1314,7 +1391,12 @@ struct ShaderMeshMessageLocation DECLARE_REFLECTION_STRUCT(ShaderMeshMessageLocation); -DOCUMENT("A compute shader message's location."); +DOCUMENT(R"( +ShaderComputeMessageLocation() +ShaderComputeMessageLocation(other: ShaderComputeMessageLocation) + +A compute shader message's location. +)"); struct ShaderComputeMessageLocation { DOCUMENT(""); @@ -1350,7 +1432,12 @@ struct ShaderComputeMessageLocation DECLARE_REFLECTION_STRUCT(ShaderComputeMessageLocation); -DOCUMENT("A vertex shader message's location."); +DOCUMENT(R"( +ShaderVertexMessageLocation() +ShaderVertexMessageLocation(other: ShaderVertexMessageLocation) + +A vertex shader message's location. +)"); struct ShaderVertexMessageLocation { DOCUMENT(R"(The vertex or index for this vertex. @@ -1374,7 +1461,11 @@ struct ShaderVertexMessageLocation DECLARE_REFLECTION_STRUCT(ShaderVertexMessageLocation); -DOCUMENT(R"(A pixel shader message's location. +DOCUMENT(R"( +ShaderPixelMessageLocation() +ShaderPixelMessageLocation(other: ShaderPixelMessageLocation) + +A pixel shader message's location. .. data:: NoLocation @@ -1417,7 +1508,11 @@ struct ShaderPixelMessageLocation DECLARE_REFLECTION_STRUCT(ShaderPixelMessageLocation); -DOCUMENT(R"(A geometry shader message's location. +DOCUMENT(R"( +ShaderGeometryMessageLocation() +ShaderGeometryMessageLocation(other: ShaderGeometryMessageLocation) + +A geometry shader message's location. .. data:: NoLocation @@ -1440,7 +1535,12 @@ struct ShaderGeometryMessageLocation DECLARE_REFLECTION_STRUCT(ShaderGeometryMessageLocation); -DOCUMENT("A shader message's location."); +DOCUMENT(R"( +ShaderMessageLocation() +ShaderMessageLocation(other: ShaderMessageLocation) + +A shader message's location. +)"); union ShaderMessageLocation { DOCUMENT(R"(The location if the shader is a compute shader. @@ -1476,7 +1576,12 @@ union ShaderMessageLocation DECLARE_REFLECTION_STRUCT(ShaderMessageLocation); -DOCUMENT("A shader printed message."); +DOCUMENT(R"( +ShaderMessage() +ShaderMessage(other: ShaderMessage) + +A shader printed message. +)"); struct ShaderMessage { DOCUMENT(""); diff --git a/renderdoc/api/replay/control_types.h b/renderdoc/api/replay/control_types.h index b6a720d0a..f856cd0c2 100644 --- a/renderdoc/api/replay/control_types.h +++ b/renderdoc/api/replay/control_types.h @@ -32,7 +32,11 @@ #include "rdcarray.h" #include "replay_enums.h" -DOCUMENT(R"(The size information for a task group. +DOCUMENT(R"( +TaskGroupSize() +TaskGroupSize(other: TaskGroupSize) + +The size information for a task group. )"); struct TaskGroupSize { @@ -68,7 +72,11 @@ struct TaskGroupSize DECLARE_REFLECTION_STRUCT(TaskGroupSize); -DOCUMENT(R"(The size information for a meshlet. +DOCUMENT(R"( +MeshletSize() +MeshletSize(other: MeshletSize) + +The size information for a meshlet. )"); struct MeshletSize { @@ -101,7 +109,11 @@ of indices. DECLARE_REFLECTION_STRUCT(MeshletSize); -DOCUMENT(R"(Contains the details of a single element of data (such as position or texture +DOCUMENT(R"( +MeshFormat() +MeshFormat(other: MeshFormat) + +Contains the details of a single element of data (such as position or texture co-ordinates) within a mesh. )"); struct MeshFormat @@ -314,6 +326,9 @@ DECLARE_REFLECTION_STRUCT(MeshFormat); struct ICamera; DOCUMENT(R"( +MeshDisplay() +MeshDisplay(other: MeshDisplay) + Describes how to render a mesh preview of one or more meshes. Describes the camera configuration as well as what options to use when rendering both the current mesh, and any other auxilliary meshes. @@ -447,6 +462,9 @@ struct MeshDisplay DECLARE_REFLECTION_STRUCT(MeshDisplay); DOCUMENT(R"( +TextureDisplay() +TextureDisplay(other: TextureDisplay) + Describes how to render a texture preview of an image. Describes the zoom and pan settings for the texture when rendering on a particular output, as well as the modification and selection of a particular subresource (such as array slice, mip or multi-sampled sample). @@ -621,7 +639,12 @@ If set to (0, 0, 0, 0) the global checkerboard colors are used. DECLARE_REFLECTION_STRUCT(TextureDisplay); // some dependent structs for TextureSave -DOCUMENT("How to map components to normalised ``[0, 255]`` for saving to 8-bit file formats."); +DOCUMENT(R"( +TextureComponentMapping() +TextureComponentMapping(other: TextureComponentMapping) + +How to map components to normalised ``[0, 255]`` for saving to 8-bit file formats. +)"); struct TextureComponentMapping { DOCUMENT(""); @@ -643,7 +666,11 @@ struct TextureComponentMapping DECLARE_REFLECTION_STRUCT(TextureComponentMapping); -DOCUMENT(R"(How to map multisampled textures for saving to non-multisampled file formats. +DOCUMENT(R"( +TextureSampleMapping() +TextureSampleMapping(other: TextureSampleMapping) + +How to map multisampled textures for saving to non-multisampled file formats. .. data:: ResolveSamples @@ -680,7 +707,11 @@ normal 2D image. If set to :data:`ResolveSamples` then instead there's a default DECLARE_REFLECTION_STRUCT(TextureSampleMapping); -DOCUMENT(R"(How to map array textures for saving to non-arrayed file formats. +DOCUMENT(R"( +TextureSliceMapping() +TextureSliceMapping(other: TextureSliceMapping) + +How to map array textures for saving to non-arrayed file formats. If :data:`sliceIndex` is -1, :data:`cubeCruciform` == :data:`slicesAsGrid` == ``False`` and the file format doesn't support saving all slices, only slice 0 is saved. @@ -740,7 +771,12 @@ With the gaps filled in with transparent black. DECLARE_REFLECTION_STRUCT(TextureSliceMapping); -DOCUMENT("Describes a texture to save and how to map it to the destination file format."); +DOCUMENT(R"( +TextureSave() +TextureSave(other: TextureSave) + +Describes a texture to save and how to map it to the destination file format. +)"); struct TextureSave { DOCUMENT(""); @@ -834,7 +870,13 @@ It is an :class:`AlphaMapping` that controls what behaviour to use. DECLARE_REFLECTION_STRUCT(TextureSave); -DOCUMENT("A range of sized descriptors."); +DOCUMENT(R"( +DescriptorRange() +DescriptorRange(other: DescriptorRange) +DescriptorRange(access: DescriptorAccess) + +A range of sized descriptors. +)"); struct DescriptorRange { DOCUMENT(""); @@ -893,7 +935,12 @@ struct DescriptorRange DECLARE_REFLECTION_STRUCT(DescriptorRange); // dependent structs for TargetControlMessage -DOCUMENT("Information about the a new capture created by the target."); +DOCUMENT(R"( +NewCaptureData() +NewCaptureData(other: NewCaptureData) + +Information about the a new capture created by the target. +)"); struct NewCaptureData { DOCUMENT(""); @@ -963,7 +1010,12 @@ struct NewCaptureData DECLARE_REFLECTION_STRUCT(NewCaptureData); -DOCUMENT("Information about the API that the target is using."); +DOCUMENT(R"( +APIUseData() +APIUseData(other: APIUseData) + +Information about the API that the target is using. +)"); struct APIUseData { DOCUMENT(""); @@ -998,7 +1050,12 @@ struct APIUseData DECLARE_REFLECTION_STRUCT(APIUseData); -DOCUMENT("Information about why the target is busy."); +DOCUMENT(R"( +BusyData() +BusyData(other: BusyData) + +Information about why the target is busy. +)"); struct BusyData { DOCUMENT(""); @@ -1015,7 +1072,12 @@ struct BusyData DECLARE_REFLECTION_STRUCT(BusyData); -DOCUMENT("Information about a new child process spawned by the target."); +DOCUMENT(R"( +NewChildData() +NewChildData(other: NewChildData) + +Information about a new child process spawned by the target. +)"); struct NewChildData { DOCUMENT(""); @@ -1037,7 +1099,12 @@ struct NewChildData DECLARE_REFLECTION_STRUCT(NewChildData); -DOCUMENT("A message from a target control connection."); +DOCUMENT(R"( +TargetControlMessage() +TargetControlMessage(other: TargetControlMessage) + +A message from a target control connection. +)"); struct TargetControlMessage { DOCUMENT(""); @@ -1093,7 +1160,13 @@ or has finished, it will be -1.0 DECLARE_REFLECTION_STRUCT(TargetControlMessage); -DOCUMENT("A modification to a single environment variable."); +DOCUMENT(R"( +EnvironmentModification() +EnvironmentModification(other: EnvironmentModification) +EnvironmentModification(mod: EnvMod, sep: EnvSep, name: str, value: str) + +A modification to a single environment variable. +)"); struct EnvironmentModification { DOCUMENT(""); @@ -1145,7 +1218,12 @@ struct EnvironmentModification DECLARE_REFLECTION_STRUCT(EnvironmentModification); -DOCUMENT("The format for a capture file either supported to read from, or export to"); +DOCUMENT(R"( +CaptureFileFormat() +CaptureFileFormat(other: CaptureFileFormat) + +The format for a capture file either supported to read from, or export to. +)"); struct CaptureFileFormat { DOCUMENT(""); @@ -1217,7 +1295,12 @@ structured data. DECLARE_REFLECTION_STRUCT(CaptureFileFormat); -DOCUMENT("Describes a single GPU at replay time."); +DOCUMENT(R"( +GPUDevice() +GPUDevice(other: GPUDevice) + +Describes a single GPU at replay time. +)"); struct GPUDevice { DOCUMENT(""); @@ -1271,7 +1354,12 @@ struct GPUDevice DECLARE_REFLECTION_STRUCT(GPUDevice); -DOCUMENT("The options controlling how replay of a capture should be performed"); +DOCUMENT(R"( +ReplayOptions() +ReplayOptions(other: ReplayOptions) + +The options controlling how replay of a capture should be performed. +)"); struct ReplayOptions { DOCUMENT(""); @@ -1378,7 +1466,12 @@ struct ANativeWindow; // for swig bindings treat the windowing data struct as completely opaque #if defined(SWIG) -DOCUMENT("An opaque structure created to hold windowing setup data"); +DOCUMENT(R"( +WindowingData() +WindowingData(other: WindowingData) + +An opaque structure created to hold windowing setup data +)"); struct WindowingData { }; @@ -1436,7 +1529,12 @@ DECLARE_STRINGISE_TYPE(WindowingData); #endif -DOCUMENT(R"(Structure used for initialising environment in a replay application.)"); +DOCUMENT(R"( +GlobalEnvironment() +GlobalEnvironment(other: GlobalEnvironment) + +Structure used for initialising environment in a replay application. +)"); struct GlobalEnvironment { DOCUMENT(""); @@ -1468,7 +1566,11 @@ here. DECLARE_REFLECTION_STRUCT(GlobalEnvironment); -DOCUMENT(R"(A general result from an operation with optional string information for failures. +DOCUMENT(R"( +ResultDetails() +ResultDetails(other: ResultDetails) + +A general result from an operation with optional string information for failures. This struct can be compared directly to a :class:`ResultCode` for simple checks of status, and when converted to a string it includes the formatted result code and message as appropriate. @@ -1531,7 +1633,12 @@ extra information that is available about the error. DECLARE_REFLECTION_STRUCT(ResultDetails); -DOCUMENT("The result of executing or injecting into a program.") +DOCUMENT(R"( +ExecuteResult() +ExecuteResult(other: ExecuteResult) + +The result of executing or injecting into a program. +)") struct ExecuteResult { DOCUMENT(""); diff --git a/renderdoc/api/replay/d3d11_pipestate.h b/renderdoc/api/replay/d3d11_pipestate.h index ee1698110..216db3198 100644 --- a/renderdoc/api/replay/d3d11_pipestate.h +++ b/renderdoc/api/replay/d3d11_pipestate.h @@ -32,7 +32,11 @@ namespace D3D11Pipe { -DOCUMENT(R"(Describes a single D3D11 input layout element for one vertex input. +DOCUMENT(R"( +D3D11Layout() +D3D11Layout(other: D3D11Layout) + +Describes a single D3D11 input layout element for one vertex input. .. data:: TightlyPacked @@ -123,7 +127,12 @@ with the next instance data. static const uint32_t TightlyPacked = ~0U; }; -DOCUMENT("Describes a single D3D11 vertex buffer binding.") +DOCUMENT(R"( +D3D11VertexBuffer() +D3D11VertexBuffer(other: D3D11VertexBuffer) + +Describes a single D3D11 vertex buffer binding. +)") struct VertexBuffer { DOCUMENT(""); @@ -164,7 +173,12 @@ struct VertexBuffer uint32_t byteStride = 0; }; -DOCUMENT("Describes the D3D11 index buffer binding.") +DOCUMENT(R"( +D3D11IndexBuffer() +D3D11IndexBuffer(other: D3D11IndexBuffer) + +Describes the D3D11 index buffer binding. +)") struct IndexBuffer { DOCUMENT(""); @@ -192,7 +206,12 @@ it can be 0 if no index buffer is bound. uint32_t byteStride = 0; }; -DOCUMENT("Describes the input assembler data."); +DOCUMENT(R"( +D3D11InputAssembly() +D3D11InputAssembly(other: D3D11InputAssembly) + +Describes the input assembler data. +)"); struct InputAssembly { DOCUMENT(""); @@ -237,7 +256,12 @@ struct InputAssembly Topology topology = Topology::Unknown; }; -DOCUMENT("Describes a D3D11 shader stage."); +DOCUMENT(R"( +D3D11Shader() +D3D11Shader(other: D3D11Shader) + +Describes a D3D11 shader stage. +)"); struct Shader { DOCUMENT(""); @@ -270,7 +294,12 @@ struct Shader rdcarray classInstances; }; -DOCUMENT("Describes a binding on the D3D11 stream-out stage."); +DOCUMENT(R"( +D3D11StreamOutBind() +D3D11StreamOutBind(other: D3D11StreamOutBind) + +Describes a binding on the D3D11 stream-out stage. +)"); struct StreamOutBind { DOCUMENT(""); @@ -303,7 +332,11 @@ struct StreamOutBind uint32_t byteOffset = 0; }; -DOCUMENT(R"(Describes the stream-out stage bindings. +DOCUMENT(R"( +D3D11StreamOut() +D3D11StreamOut(other: D3D11StreamOut) + +Describes the stream-out stage bindings. .. data:: NoRasterization @@ -334,7 +367,12 @@ If the value is :data:`NoRasterization` then no stream has been selected for ras static const uint32_t NoRasterization = ~0U; }; -DOCUMENT("Describes a rasterizer state object."); +DOCUMENT(R"( +D3D11RasterizerState() +D3D11RasterizerState(other: D3D11RasterizerState) + +Describes a rasterizer state object. +)"); struct RasterizerState { DOCUMENT(""); @@ -412,7 +450,12 @@ not force any sample count. ConservativeRaster conservativeRasterization = ConservativeRaster::Disabled; }; -DOCUMENT("Describes the rasterization state of the D3D11 pipeline."); +DOCUMENT(R"( +D3D11Rasterizer() +D3D11Rasterizer(other: D3D11Rasterizer) + +Describes the rasterization state of the D3D11 pipeline. +)"); struct Rasterizer { DOCUMENT(""); @@ -439,7 +482,12 @@ struct Rasterizer RasterizerState state; }; -DOCUMENT("Describes a depth-stencil state object."); +DOCUMENT(R"( +D3D11DepthStencilState() +D3D11DepthStencilState(other: D3D11DepthStencilState) + +Describes a depth-stencil state object. +)"); struct DepthStencilState { DOCUMENT(""); @@ -486,7 +534,12 @@ struct DepthStencilState StencilFace backFace; }; -DOCUMENT("Describes a blend state object."); +DOCUMENT(R"( +D3D11BlendState() +D3D11BlendState(other: D3D11BlendState) + +Describes a blend state object. +)"); struct BlendState { DOCUMENT(""); @@ -531,7 +584,12 @@ struct BlendState uint32_t sampleMask = ~0U; }; -DOCUMENT("Describes the current state of the output-merger stage of the D3D11 pipeline."); +DOCUMENT(R"( +D3D11OutputMerger() +D3D11OutputMerger(other: D3D11OutputMerger) + +Describes the current state of the output-merger stage of the D3D11 pipeline. +)"); struct OutputMerger { DOCUMENT(""); @@ -580,7 +638,12 @@ struct OutputMerger bool stencilReadOnly = false; }; -DOCUMENT("Describes the current state of D3D11 predicated rendering."); +DOCUMENT(R"( +D3D11Predication() +D3D11Predication(other: D3D11Predication) + +Describes the current state of D3D11 predicated rendering. +)"); struct Predication { DOCUMENT(""); @@ -607,7 +670,9 @@ struct Predication bool isPassing = false; }; -DOCUMENT("The full current D3D11 pipeline state."); +DOCUMENT(R"( +The full current D3D11 pipeline state. +)"); struct State { #if !defined(RENDERDOC_EXPORTS) diff --git a/renderdoc/api/replay/d3d12_pipestate.h b/renderdoc/api/replay/d3d12_pipestate.h index 550934ddd..c6640ff31 100644 --- a/renderdoc/api/replay/d3d12_pipestate.h +++ b/renderdoc/api/replay/d3d12_pipestate.h @@ -28,7 +28,11 @@ namespace D3D12Pipe { -DOCUMENT(R"(Describes a single D3D12 input layout element for one vertex input. +DOCUMENT(R"( +D3D12Layout() +D3D12Layout(other: D3D12Layout) + +Describes a single D3D12 input layout element for one vertex input. .. data:: TightlyPacked @@ -119,7 +123,12 @@ with the next instance data. static const uint32_t TightlyPacked = ~0U; }; -DOCUMENT("Describes a single D3D12 vertex buffer binding.") +DOCUMENT(R"( +D3D12VertexBuffer() +D3D12VertexBuffer(other: D3D12VertexBuffer) + +Describes a single D3D12 vertex buffer binding. +)") struct VertexBuffer { DOCUMENT(""); @@ -169,7 +178,12 @@ struct VertexBuffer uint32_t byteStride = 0; }; -DOCUMENT("Describes the D3D12 index buffer binding.") +DOCUMENT(R"( +D3D12IndexBuffer() +D3D12IndexBuffer(other: D3D12IndexBuffer) + +Describes the D3D12 index buffer binding. +)") struct IndexBuffer { DOCUMENT(""); @@ -203,7 +217,12 @@ it can be 0 if no index buffer is bound. uint32_t byteStride = 0; }; -DOCUMENT("Describes the input assembler state in the PSO."); +DOCUMENT(R"( +D3D12InputAssembly() +D3D12InputAssembly(other: D3D12InputAssembly) + +Describes the input assembler state in the PSO. +)"); struct InputAssembly { DOCUMENT(""); @@ -243,7 +262,12 @@ If the value is 0, strip cutting is disabled. Topology topology = Topology::Unknown; }; -DOCUMENT("Describes a D3D12 shader stage."); +DOCUMENT(R"( +D3D12Shader() +D3D12Shader(other: D3D12Shader) + +Describes a D3D12 shader stage. +)"); struct Shader { DOCUMENT(""); @@ -270,7 +294,12 @@ struct Shader ShaderStage stage = ShaderStage::Vertex; }; -DOCUMENT("Describes a binding on the D3D12 stream-out stage."); +DOCUMENT(R"( +D3D12StreamOutBind() +D3D12StreamOutBind(other: D3D12StreamOutBind) + +Describes a binding on the D3D12 stream-out stage. +)"); struct StreamOutBind { DOCUMENT(""); @@ -328,7 +357,11 @@ written. uint64_t writtenCountByteOffset = 0; }; -DOCUMENT(R"(Describes the stream-out state in the PSO. +DOCUMENT(R"( +D3D12StreamOut() +D3D12StreamOut(other: D3D12StreamOut) + +Describes the stream-out state in the PSO. .. data:: NoRasterization @@ -359,7 +392,12 @@ If the value is :data:`NoRasterization` then no stream has been selected for ras static const uint32_t NoRasterization = ~0U; }; -DOCUMENT("Describes the rasterizer state in the PSO."); +DOCUMENT(R"( +D3D12RasterizerState() +D3D12RasterizerState(other: D3D12RasterizerState) + +Describes the rasterizer state in the PSO. +)"); struct RasterizerState { DOCUMENT(""); @@ -461,7 +499,12 @@ shading rate sampled from the shading rate image. ResourceId shadingRateImage; }; -DOCUMENT("Describes the rasterization state of the D3D12 pipeline."); +DOCUMENT(R"( +D3D12Rasterizer() +D3D12Rasterizer(other: D3D12Rasterizer) + +Describes the rasterization state of the D3D12 pipeline. +)"); struct Rasterizer { DOCUMENT(""); @@ -494,7 +537,12 @@ struct Rasterizer RasterizerState state; }; -DOCUMENT("Describes the state of the depth-stencil state in the PSO."); +DOCUMENT(R"( +D3D12DepthStencilState() +D3D12DepthStencilState(other: D3D12DepthStencilState) + +Describes the state of the depth-stencil state in the PSO. +)"); struct DepthStencilState { DOCUMENT(""); @@ -552,7 +600,12 @@ struct DepthStencilState float maxDepthBounds = 0.0f; }; -DOCUMENT("Describes the blend state in the PSO."); +DOCUMENT(R"( +D3D12BlendState() +D3D12BlendState(other: D3D12BlendState) + +Describes the blend state in the PSO. +)"); struct BlendState { DOCUMENT(""); @@ -586,7 +639,12 @@ struct BlendState rdcfixedarray blendFactor = {1.0f, 1.0f, 1.0f, 1.0f}; }; -DOCUMENT("Describes the current state of the output-merger stage of the D3D12 pipeline."); +DOCUMENT(R"( +D3D12OM() +D3D12OM(other: D3D12OM) + +Describes the current state of the output-merger stage of the D3D12 pipeline. +)"); struct OM { DOCUMENT(""); @@ -629,7 +687,12 @@ struct OM bool stencilReadOnly = false; }; -DOCUMENT("Describes the current state that a sub-resource is in."); +DOCUMENT(R"( +D3D12ResourceState() +D3D12ResourceState(other: D3D12ResourceState) + +Describes the current state that a sub-resource is in. +)"); struct ResourceState { DOCUMENT(""); @@ -651,7 +714,12 @@ struct ResourceState rdcstr name; }; -DOCUMENT("Contains the current state of a given resource."); +DOCUMENT(R"( +D3D12ResourceData() +D3D12ResourceData(other: D3D12ResourceData) + +Contains the current state of a given resource. +)"); struct ResourceData { DOCUMENT(""); @@ -684,7 +752,12 @@ struct ResourceData rdcarray states; }; -DOCUMENT("Contains the structure of a single range within a root table definition."); +DOCUMENT(R"( +D3D12RootTableRange() +D3D12RootTableRange(other: D3D12RootTableRange) + +Contains the structure of a single range within a root table definition. +)"); struct RootTableRange { DOCUMENT(""); @@ -749,7 +822,12 @@ offset in :data:`tableByteOffset`. bool appended = false; }; -DOCUMENT("Contains the structure and content of a single root parameter."); +DOCUMENT(R"( +D3D12RootParam() +D3D12RootParam(other: D3D12RootParam) + +Contains the structure and content of a single root parameter. +)"); struct RootParam { DOCUMENT(""); @@ -836,7 +914,12 @@ parameter. See :data:`heap` and :data:`tableRanges`. rdcarray tableRanges; }; -DOCUMENT("Contains the details of a single static sampler in a root signature."); +DOCUMENT(R"( +D3D12StaticSampler() +D3D12StaticSampler(other: D3D12StaticSampler) + +Contains the details of a single static sampler in a root signature. +)"); struct StaticSampler { DOCUMENT(""); @@ -887,7 +970,12 @@ struct StaticSampler SamplerDescriptor descriptor; }; -DOCUMENT("Contains the root signature structure and root parameters."); +DOCUMENT(R"( +D3D12RootSignature() +D3D12RootSignature(other: D3D12RootSignature) + +Contains the root signature structure and root parameters. +)"); struct RootSignature { DOCUMENT(""); @@ -914,7 +1002,12 @@ struct RootSignature rdcarray staticSamplers; }; -DOCUMENT("Describes the current state of D3D12 predicated rendering."); +DOCUMENT(R"( +D3D12Predication() +D3D12Predication(other: D3D12Predication) + +Describes the current state of D3D12 predicated rendering. +)"); struct Predication { DOCUMENT(""); @@ -946,7 +1039,9 @@ If ``False`` then a zero in the buffer would lead to them being performed as nor bool skipIfZero = false; }; -DOCUMENT("The full current D3D12 pipeline state."); +DOCUMENT(R"( +The full current D3D12 pipeline state. +)"); struct State { #if !defined(RENDERDOC_EXPORTS) diff --git a/renderdoc/api/replay/data_types.h b/renderdoc/api/replay/data_types.h index da1fb7c40..a91715a32 100644 --- a/renderdoc/api/replay/data_types.h +++ b/renderdoc/api/replay/data_types.h @@ -33,7 +33,13 @@ #include "stringise.h" #include "structured_data.h" -DOCUMENT("A floating point four-component vector"); +DOCUMENT(R"( +FloatVector() +FloatVector(other: FloatVector) +FloatVector(x: float, y: float, z: float, w: float) + +A floating point four-component vector +)"); struct FloatVector { DOCUMENT(""); @@ -87,7 +93,13 @@ struct FloatVector DECLARE_REFLECTION_STRUCT(FloatVector); -DOCUMENT("A transform to map the x, y, and z axes to new directions."); +DOCUMENT(R"( +AxisMapping() +AxisMapping(other: AxisMapping) +AxisMapping(xAxis: FloatVector, yAxis: FloatVector, zAxis: FloatVector) + +A transform to map the x, y, and z axes to new directions. +)"); struct AxisMapping { AxisMapping() @@ -121,7 +133,13 @@ struct AxisMapping DECLARE_REFLECTION_STRUCT(AxisMapping); -DOCUMENT("Properties of a path on a remote filesystem."); +DOCUMENT(R"( +PathEntry() +PathEntry(other: PathEntry) +PathEntry(filename: str, flags: PathProperty) + +Properties of a path on a remote filesystem. +)"); struct PathEntry { DOCUMENT(""); @@ -172,7 +190,12 @@ struct PathEntry DECLARE_REFLECTION_STRUCT(PathEntry); -DOCUMENT("Properties of a section in a renderdoc capture file."); +DOCUMENT(R"( +SectionProperties() +SectionProperties(other: SectionProperties) + +Properties of a section in a renderdoc capture file. +)"); struct SectionProperties { DOCUMENT(""); @@ -226,7 +249,12 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_ResourceFormatName(const Re rdcstr &name); #endif -DOCUMENT("Description of the format of a resource or element."); +DOCUMENT(R"( +ResourceFormat() +ResourceFormat(other: ResourceFormat) + +Description of the format of a resource or element. +)"); struct ResourceFormat { DOCUMENT(""); @@ -684,7 +712,12 @@ private: DECLARE_REFLECTION_STRUCT(ResourceFormat); -DOCUMENT("The details of a texture filter in a sampler."); +DOCUMENT(R"( +TextureFilter() +TextureFilter(other: TextureFilter) + +The details of a texture filter in a sampler. +)"); struct TextureFilter { DOCUMENT(""); @@ -732,7 +765,12 @@ struct TextureFilter DECLARE_REFLECTION_STRUCT(TextureFilter); -DOCUMENT("The four components of a texture swizzle."); +DOCUMENT(R"( +TextureSwizzle4() +TextureSwizzle4(other: TextureSwizzle4) + +The four components of a texture swizzle. +)"); struct TextureSwizzle4 { DOCUMENT(""); @@ -781,7 +819,12 @@ struct TextureSwizzle4 DECLARE_REFLECTION_STRUCT(TextureSwizzle4); -DOCUMENT("A description of any type of resource."); +DOCUMENT(R"( +ResourceDescription() +ResourceDescription(other: ResourceDescription) + +A description of any type of resource. +)"); struct ResourceDescription { DOCUMENT(""); @@ -867,7 +910,12 @@ annotations are not used. DECLARE_REFLECTION_STRUCT(ResourceDescription); -DOCUMENT("A description of a descriptor store."); +DOCUMENT(R"( +DescriptorStoreDescription() +DescriptorStoreDescription(other: DescriptorStoreDescription) + +A description of a descriptor store. +)"); struct DescriptorStoreDescription { DOCUMENT(""); @@ -911,7 +959,12 @@ descriptor. Descriptors are assumed to be tightly packed so stride is equal to s DECLARE_REFLECTION_STRUCT(DescriptorStoreDescription); -DOCUMENT("A description of a buffer resource."); +DOCUMENT(R"( +BufferDescription() +BufferDescription(other: BufferDescription) + +A description of a buffer resource. +)"); struct BufferDescription { DOCUMENT(""); @@ -963,7 +1016,12 @@ struct BufferDescription DECLARE_REFLECTION_STRUCT(BufferDescription); -DOCUMENT("A description of a texture resource."); +DOCUMENT(R"( +TextureDescription() +TextureDescription(other: TextureDescription) + +A description of a texture resource. +)"); struct TextureDescription { DOCUMENT(""); @@ -1098,7 +1156,11 @@ struct TextureDescription DECLARE_REFLECTION_STRUCT(TextureDescription); -DOCUMENT(R"(An individual API-level event, generally corresponds one-to-one with an API call. +DOCUMENT(R"( +APIEvent() +APIEvent(other: APIEvent) + +An individual API-level event, generally corresponds one-to-one with an API call. .. data:: NoChunk @@ -1161,7 +1223,12 @@ annotations are not used. DECLARE_REFLECTION_STRUCT(APIEvent); -DOCUMENT("A debugging message from the API validation or internal analysis and error detection."); +DOCUMENT(R"( +DebugMessage() +DebugMessage(other: DebugMessage) + +A debugging message from the API validation or internal analysis and error detection. +)"); struct DebugMessage { DOCUMENT(""); @@ -1248,7 +1315,11 @@ enum class BucketRecordType : int }; DECLARE_REFLECTION_ENUM(BucketRecordType); -DOCUMENT(R"(Contains the statistics for constant binds in a frame. +DOCUMENT(R"( +ConstantBindStats() +ConstantBindStats(other: ConstantBindStats) + +Contains the statistics for constant binds in a frame. .. data:: BucketType @@ -1319,7 +1390,12 @@ struct ConstantBindStats DECLARE_REFLECTION_STRUCT(ConstantBindStats); -DOCUMENT("Contains the statistics for sampler binds in a frame."); +DOCUMENT(R"( +SamplerBindStats() +SamplerBindStats(other: SamplerBindStats) + +Contains the statistics for sampler binds in a frame. +)"); struct SamplerBindStats { DOCUMENT(""); @@ -1369,7 +1445,12 @@ struct SamplerBindStats DECLARE_REFLECTION_STRUCT(SamplerBindStats); -DOCUMENT("Contains the statistics for resource binds in a frame."); +DOCUMENT(R"( +ResourceBindStats() +ResourceBindStats(other: ResourceBindStats) + +Contains the statistics for resource binds in a frame. +)"); struct ResourceBindStats { DOCUMENT(""); @@ -1430,7 +1511,11 @@ The Nth element contains the number of times a resource of that type was bound. DECLARE_REFLECTION_STRUCT(ResourceBindStats); -DOCUMENT(R"(Contains the statistics for resource updates in a frame. +DOCUMENT(R"( +ResourceUpdateStats() +ResourceUpdateStats(other: ResourceUpdateStats) + +Contains the statistics for resource updates in a frame. .. data:: BucketType @@ -1485,7 +1570,11 @@ The Nth element contains the number of times a resource of that type was updated DECLARE_REFLECTION_STRUCT(ResourceUpdateStats); -DOCUMENT(R"(Contains the statistics for draws in a frame. +DOCUMENT(R"( +DrawcallStats() +DrawcallStats(other: DrawcallStats) + +Contains the statistics for draws in a frame. .. data:: BucketType @@ -1535,7 +1624,12 @@ struct DrawcallStats DECLARE_REFLECTION_STRUCT(DrawcallStats); -DOCUMENT("Contains the statistics for compute dispatches in a frame."); +DOCUMENT(R"( +DispatchStats() +DispatchStats(other: DispatchStats) + +Contains the statistics for compute dispatches in a frame. +)"); struct DispatchStats { DOCUMENT(""); @@ -1558,7 +1652,12 @@ struct DispatchStats DECLARE_REFLECTION_STRUCT(DispatchStats); -DOCUMENT("Contains the statistics for index buffer binds in a frame."); +DOCUMENT(R"( +IndexBindStats() +IndexBindStats(other: IndexBindStats) + +Contains the statistics for index buffer binds in a frame. +)"); struct IndexBindStats { DOCUMENT(""); @@ -1587,7 +1686,12 @@ struct IndexBindStats DECLARE_REFLECTION_STRUCT(IndexBindStats); -DOCUMENT("Contains the statistics for vertex buffer binds in a frame."); +DOCUMENT(R"( +VertexBindStats() +VertexBindStats(other: VertexBindStats) + +Contains the statistics for vertex buffer binds in a frame. +)"); struct VertexBindStats { DOCUMENT(""); @@ -1622,7 +1726,12 @@ struct VertexBindStats DECLARE_REFLECTION_STRUCT(VertexBindStats); -DOCUMENT("Contains the statistics for vertex layout binds in a frame."); +DOCUMENT(R"( +LayoutBindStats() +LayoutBindStats(other: LayoutBindStats) + +Contains the statistics for vertex layout binds in a frame. +)"); struct LayoutBindStats { DOCUMENT(""); @@ -1651,7 +1760,12 @@ struct LayoutBindStats DECLARE_REFLECTION_STRUCT(LayoutBindStats); -DOCUMENT("Contains the statistics for shader binds in a frame."); +DOCUMENT(R"( +ShaderChangeStats() +ShaderChangeStats(other: ShaderChangeStats) + +Contains the statistics for shader binds in a frame. +)"); struct ShaderChangeStats { DOCUMENT(""); @@ -1701,7 +1815,12 @@ struct ShaderChangeStats DECLARE_REFLECTION_STRUCT(ShaderChangeStats); -DOCUMENT("Contains the statistics for blend state binds in a frame."); +DOCUMENT(R"( +BlendStats() +BlendStats(other: BlendStats) + +Contains the statistics for blend state binds in a frame. +)"); struct BlendStats { DOCUMENT(""); @@ -1736,7 +1855,12 @@ struct BlendStats DECLARE_REFLECTION_STRUCT(BlendStats); -DOCUMENT("Contains the statistics for depth stencil state binds in a frame."); +DOCUMENT(R"( +DepthStencilStats() +DepthStencilStats(other: DepthStencilStats) + +Contains the statistics for depth stencil state binds in a frame. +)"); struct DepthStencilStats { DOCUMENT(""); @@ -1771,7 +1895,12 @@ struct DepthStencilStats DECLARE_REFLECTION_STRUCT(DepthStencilStats); -DOCUMENT("Contains the statistics for rasterizer state binds in a frame."); +DOCUMENT(R"( +RasterizationStats() +RasterizationStats(other: RasterizationStats) + +Contains the statistics for rasterizer state binds in a frame. +)"); struct RasterizationStats { DOCUMENT(""); @@ -1818,7 +1947,12 @@ struct RasterizationStats DECLARE_REFLECTION_STRUCT(RasterizationStats); -DOCUMENT("Contains the statistics for output merger or UAV binds in a frame."); +DOCUMENT(R"( +OutputTargetStats() +OutputTargetStats(other: OutputTargetStats) + +Contains the statistics for output merger or UAV binds in a frame. +)"); struct OutputTargetStats { DOCUMENT(""); @@ -1853,7 +1987,11 @@ struct OutputTargetStats DECLARE_REFLECTION_STRUCT(OutputTargetStats); -DOCUMENT(R"(Contains all the available statistics about the captured frame. +DOCUMENT(R"( +FrameStatistics() +FrameStatistics(other: FrameStatistics) + +Contains all the available statistics about the captured frame. Currently this information is only available on D3D11 and is fairly API-centric. )"); @@ -1963,7 +2101,11 @@ struct FrameStatistics DECLARE_REFLECTION_STRUCT(FrameStatistics); -DOCUMENT(R"(Contains frame-level global information +DOCUMENT(R"( +FrameDescription() +FrameDescription(other: FrameDescription) + +Contains frame-level global information .. data:: NoFrameNumber @@ -2058,8 +2200,13 @@ this counts the frame number when the capture was made. DECLARE_REFLECTION_STRUCT(FrameDescription); -DOCUMENT( - "Describes a particular use of a resource at a specific :data:`eventId `."); +DOCUMENT(R"( +EventUsage() +EventUsage(other: EventUsage) +EventUsage(eventId: int, usage: ResourceUsage) + +Describes a particular use of a resource at a specific :data:`eventId `. +)"); struct EventUsage { DOCUMENT(""); @@ -2091,7 +2238,13 @@ struct EventUsage DECLARE_REFLECTION_STRUCT(EventUsage); -DOCUMENT("Specifies a subresource within a texture."); +DOCUMENT(R"( +Subresource() +Subresource(other: Subresource) +Subresource(mip: int = 0, slice: int = 0, sample: int = 0) + +Specifies a subresource within a texture. +)"); struct Subresource { DOCUMENT(""); @@ -2144,7 +2297,11 @@ texture may not allow referring to a single depth slice - see where the Subresou DECLARE_REFLECTION_STRUCT(Subresource); -DOCUMENT(R"(Describes the properties of an action. +DOCUMENT(R"( +ActionDescription() +ActionDescription(other: ActionDescription) + +Describes the properties of an action. An action is a call such as a draw, a compute dispatch, clears, copies, resolves, etc. Any GPU event which may have deliberate visible side-effects to application-visible memory, typically resources @@ -2373,7 +2530,12 @@ for very coarse bucketing of actions into similar passes by their outputs. DECLARE_REFLECTION_STRUCT(ActionDescription); -DOCUMENT("Gives some API-specific information about the capture."); +DOCUMENT(R"( +APIProperties() +APIProperties(other: APIProperties) + +Gives some API-specific information about the capture. +)"); struct APIProperties { DOCUMENT(""); @@ -2444,7 +2606,12 @@ with software rendering, or with some functionality disabled due to lack of supp DECLARE_REFLECTION_STRUCT(APIProperties); -DOCUMENT("Gives information about the driver for this API."); +DOCUMENT(R"( +DriverInformation() +DriverInformation(other: DriverInformation) + +Gives information about the driver for this API. +)"); struct DriverInformation { DOCUMENT(""); @@ -2467,7 +2634,13 @@ struct DriverInformation DECLARE_REFLECTION_STRUCT(DriverInformation); -DOCUMENT("A 128-bit Uuid."); +DOCUMENT(R"( +Uuid() +Uuid(other: Uuid) +Uuid(word1: int, word2: int, word3: int, word4: int) + +A 128-bit Uuid. +)"); struct Uuid { DOCUMENT(""); @@ -2496,7 +2669,12 @@ struct Uuid DECLARE_REFLECTION_STRUCT(Uuid); -DOCUMENT("Describes a GPU counter's purpose and result value."); +DOCUMENT(R"( +CounterDescription() +CounterDescription(other: CounterDescription) + +Describes a GPU counter's purpose and result value. +)"); struct CounterDescription { DOCUMENT(""); @@ -2564,7 +2742,11 @@ struct CounterDescription DECLARE_REFLECTION_STRUCT(CounterDescription); -DOCUMENT(R"(A resulting value from a GPU counter. Only one member is valid, see +DOCUMENT(R"( +CounterValue() +CounterValue(other: CounterValue) + +A resulting value from a GPU counter. Only one member is valid, see :class:`CounterDescription`. )"); union CounterValue @@ -2593,7 +2775,14 @@ union CounterValue DECLARE_REFLECTION_STRUCT(CounterValue); -DOCUMENT("The resulting value from a counter at an event."); +DOCUMENT(R"( +CounterResult() +CounterResult(other: CounterResult) +CounterResult(eventId: int, counter: GPUCounter, data: float) +CounterResult(eventId: int, counter: GPUCounter, data: int) + +The resulting value from a counter at an event. +)"); struct CounterResult { #if defined(SWIG) || defined(SWIGPYTHON) @@ -2680,7 +2869,12 @@ struct CounterResult DECLARE_REFLECTION_STRUCT(CounterResult); -DOCUMENT("The contents of an RGBA pixel."); +DOCUMENT(R"( +PixelValue() +PixelValue(other: CounterValue) + +The contents of an RGBA pixel. +)"); union PixelValue { DOCUMENT(R"(The RGBA value interpreted as ``float``. @@ -2702,7 +2896,12 @@ union PixelValue DECLARE_REFLECTION_STRUCT(PixelValue); -DOCUMENT("The value of pixel output at a particular event."); +DOCUMENT(R"( +ModificationValue() +ModificationValue(other: ModificationValue) + +The value of pixel output at a particular event. +)"); struct ModificationValue { DOCUMENT(""); @@ -2766,7 +2965,12 @@ will be ``-2``. This will only happen when looking at multiple modifications fro DECLARE_REFLECTION_STRUCT(ModificationValue); -DOCUMENT("An attempt to modify a pixel by a particular event."); +DOCUMENT(R"( +PixelModification() +PixelModification(other: PixelModification) + +An attempt to modify a pixel by a particular event. +)"); struct PixelModification { DOCUMENT(""); @@ -2989,7 +3193,12 @@ This is primarily used internally and should not be needed to be called external DECLARE_REFLECTION_STRUCT(PixelModification); -DOCUMENT("Contains the bytes and metadata describing a thumbnail."); +DOCUMENT(R"( +Thumbnail() +Thumbnail(other: Thumbnail) + +Contains the bytes and metadata describing a thumbnail. +)"); struct Thumbnail { DOCUMENT(""); @@ -3024,9 +3233,13 @@ struct Thumbnail DECLARE_REFLECTION_STRUCT(Thumbnail); -DOCUMENT( - "Contains the properties used to select which fragment to debug, used as an input to " - "DebugPixel."); +DOCUMENT(R"( +DebugPixelInputs() +DebugPixelInputs(other: DebugPixelInputs) + +Contains the properties used to select which fragment to debug, used as an input +to :meth:`ReplayController.DebugPixel`. +)"); struct DebugPixelInputs { DOCUMENT(""); diff --git a/renderdoc/api/replay/gl_pipestate.h b/renderdoc/api/replay/gl_pipestate.h index b36d8efba..4ec3f8525 100644 --- a/renderdoc/api/replay/gl_pipestate.h +++ b/renderdoc/api/replay/gl_pipestate.h @@ -29,7 +29,11 @@ namespace GLPipe { -DOCUMENT(R"(Describes the configuration for a single vertex attribute. +DOCUMENT(R"( +GLVertexAttribute() +GLVertexAttribute(other: GLVertexAttribute) + +Describes the configuration for a single vertex attribute. .. note:: If old-style vertex attrib pointer setup was used for the vertex attributes then it will be decomposed into 1:1 attributes and buffers. @@ -115,7 +119,12 @@ If any value is set to ``-1`` then the attribute is unbound. uint32_t byteOffset = 0; }; -DOCUMENT("Describes a single OpenGL vertex buffer binding.") +DOCUMENT(R"( +GLVertexBuffer() +GLVertexBuffer(other: GLVertexBuffer) + +Describes a single OpenGL vertex buffer binding. +)") struct VertexBuffer { DOCUMENT(""); @@ -168,7 +177,12 @@ If it's ``1`` then one element is read for each instance, and for ``N`` greater uint32_t instanceDivisor = 0; }; -DOCUMENT("Describes the setup for fixed-function vertex input fetch."); +DOCUMENT(R"( +GLVertexInput() +GLVertexInput(other: GLVertexInput) + +Describes the setup for fixed-function vertex input fetch. +)"); struct VertexInput { DOCUMENT(""); @@ -238,7 +252,12 @@ non-indexed draws. bool provokingVertexLast = false; }; -DOCUMENT("Describes an OpenGL shader stage."); +DOCUMENT(R"( +GLShader() +GLShader(other: GLShader) + +Describes an OpenGL shader stage. +)"); struct Shader { DOCUMENT(""); @@ -277,7 +296,12 @@ struct Shader rdcarray subroutines; }; -DOCUMENT("Describes the setup for fixed vertex processing operations."); +DOCUMENT(R"( +GLFixedVertexProcessing() +GLFixedVertexProcessing(other: GLFixedVertexProcessing) + +Describes the setup for fixed vertex processing operations. +)"); struct FixedVertexProcessing { DOCUMENT(""); @@ -322,7 +346,12 @@ struct FixedVertexProcessing bool clipNegativeOneToOne = false; }; -DOCUMENT("Describes the a texture completeness issue of a descriptor."); +DOCUMENT(R"( +GLTextureCompleteness() +GLTextureCompleteness(other: GLTextureCompleteness) + +Describes the a texture completeness issue of a descriptor. +)"); struct TextureCompleteness { DOCUMENT(""); @@ -364,7 +393,12 @@ in conflict and their types. rdcstr typeConflict; }; -DOCUMENT("Describes the current feedback state."); +DOCUMENT(R"( +GLFeedback() +GLFeedback(other: GLFeedback) + +Describes the current feedback state. +)"); struct Feedback { DOCUMENT(""); @@ -404,7 +438,12 @@ struct Feedback bool paused = false; }; -DOCUMENT("Describes the rasterizer state toggles."); +DOCUMENT(R"( +GLRasterizerState() +GLRasterizerState(other: GLRasterizerState) + +Describes the rasterizer state toggles. +)"); struct RasterizerState { DOCUMENT(""); @@ -531,7 +570,12 @@ resolve the final output color. bool pointOriginUpperLeft = false; }; -DOCUMENT("Describes the rasterization state of the OpenGL pipeline."); +DOCUMENT(R"( +GLRasterizer() +GLRasterizer(other: GLRasterizer) + +Describes the rasterization state of the OpenGL pipeline. +)"); struct Rasterizer { DOCUMENT(""); @@ -558,7 +602,12 @@ struct Rasterizer RasterizerState state; }; -DOCUMENT("Describes the depth state."); +DOCUMENT(R"( +GLDepthState() +GLDepthState(other: GLDepthState) + +Describes the depth state. +)"); struct DepthState { DOCUMENT(""); @@ -598,7 +647,12 @@ struct DepthState double farBound = 0.0; }; -DOCUMENT("Describes the stencil state."); +DOCUMENT(R"( +GLStencilState() +GLStencilState(other: GLStencilState) + +Describes the stencil state. +)"); struct StencilState { DOCUMENT(""); @@ -625,7 +679,12 @@ struct StencilState StencilFace backFace; }; -DOCUMENT("Describes the contents of a framebuffer object."); +DOCUMENT(R"( +GLFBO() +GLFBO(other: GLFBO) + +Describes the contents of a framebuffer object. +)"); struct FBO { DOCUMENT(""); @@ -666,7 +725,12 @@ struct FBO int32_t readBuffer = 0; }; -DOCUMENT("Describes the blend pipeline state."); +DOCUMENT(R"( +GLBlendState() +GLBlendState(other: GLBlendState) + +Describes the blend pipeline state. +)"); struct BlendState { DOCUMENT(""); @@ -687,7 +751,12 @@ struct BlendState rdcfixedarray blendFactor = {1.0f, 1.0f, 1.0f, 1.0f}; }; -DOCUMENT("Describes the current state of the framebuffer stage of the pipeline."); +DOCUMENT(R"( +GLFrameBuffer() +GLFrameBuffer(other: GLFrameBuffer) + +Describes the current state of the framebuffer stage of the pipeline. +)"); struct FrameBuffer { DOCUMENT(""); @@ -724,7 +793,12 @@ struct FrameBuffer BlendState blendState; }; -DOCUMENT("Describes the current state of GL hints and smoothing."); +DOCUMENT(R"( +GLHints() +GLHints(other: GLHints) + +Describes the current state of GL hints and smoothing. +)"); struct Hints { DOCUMENT(""); @@ -764,7 +838,9 @@ struct Hints bool polySmoothingEnabled = false; }; -DOCUMENT("The full current OpenGL pipeline state."); +DOCUMENT(R"( +The full current OpenGL pipeline state. +)"); struct State { #if !defined(RENDERDOC_EXPORTS) diff --git a/renderdoc/api/replay/pipestate.h b/renderdoc/api/replay/pipestate.h index f00713dec..4df248a53 100644 --- a/renderdoc/api/replay/pipestate.h +++ b/renderdoc/api/replay/pipestate.h @@ -29,7 +29,10 @@ #include "gl_pipestate.h" #include "vk_pipestate.h" -DOCUMENT(R"(An API-agnostic view of the common aspects of the pipeline state. This allows simple +DOCUMENT(R"( +PipeState() + +An API-agnostic view of the common aspects of the pipeline state. This allows simple access to e.g. find out the bound resources or vertex buffers, or certain pipeline state which is available on all APIs. diff --git a/renderdoc/api/replay/resourceid.h b/renderdoc/api/replay/resourceid.h index 76e59f18f..f059958d5 100644 --- a/renderdoc/api/replay/resourceid.h +++ b/renderdoc/api/replay/resourceid.h @@ -41,7 +41,11 @@ ResourceId GetNewUniqueID(); // between two textures allocated in the same memory (after the first is freed) // // it's a struct around a uint64_t to aid in template selection -DOCUMENT(R"(This is an opaque identifier that uniquely locates a resource. +DOCUMENT(R"( +ResourceId() +ResourceId(other: ResourceId) + +This is an opaque identifier that uniquely locates a resource. .. note:: These IDs do not overlap ever - textures, buffers, shaders and samplers will all have unique IDs diff --git a/renderdoc/api/replay/shader_types.h b/renderdoc/api/replay/shader_types.h index 395a8bc7b..9370efb90 100644 --- a/renderdoc/api/replay/shader_types.h +++ b/renderdoc/api/replay/shader_types.h @@ -33,7 +33,12 @@ #include "resourceid.h" #include "stringise.h" -DOCUMENT("A 64-bit pointer value with optional type information.") +DOCUMENT(R"( +PointerVal() +PointerVal(other: PointerVal) + +A 64-bit pointer value with optional type information. +)") struct PointerVal { DOCUMENT(""); @@ -64,7 +69,14 @@ DECLARE_STRINGISE_TYPE(PointerVal); struct DescriptorAccess; -DOCUMENT(R"(References a particular individual binding element in a shader interface. +DOCUMENT(R"( +ShaderBindIndex() +ShaderBindIndex(other: ShaderBindIndex) +ShaderBindIndex(category: DescriptorCategory, index: int) +ShaderBindIndex(category: DescriptorCategory, index: int, arrayElement: int) +ShaderBindIndex(access: DescriptorAccess) + +References a particular individual binding element in a shader interface. This is the shader interface side of a :class:`DescriptorAccess` and so can be compared to one to check if an access refers to a given index or not. @@ -137,8 +149,13 @@ identifies the particular array index being referred to. DECLARE_REFLECTION_STRUCT(ShaderBindIndex); -DOCUMENT(R"(References a particular resource accessed via the shader using direct heap access (as opposed to a direct binding). +DOCUMENT(R"( +ShaderDirectAccess() +ShaderDirectAccess(other: ShaderDirectAccess) +ShaderDirectAccess(category: DescriptorCategory, index: int) +ShaderDirectAccess(type: DescriptorType, descriptorStore: ResourceId, byteOffset: int, byteSize: int) +References a particular resource accessed via the shader using direct heap access (as opposed to a direct binding). )"); struct ShaderDirectAccess { @@ -232,7 +249,12 @@ private: }; DECLARE_STRINGISE_TYPE(rdhalf); -DOCUMENT("A C union that holds 16 values, with each different basic variable type."); +DOCUMENT(R"( +ShaderValue() +ShaderValue(other: ShaderValue) + +A C union that holds 16 values, with each different basic variable type. +)"); union ShaderValue { DOCUMENT(R"(16-tuple of ``float`` values. @@ -302,7 +324,13 @@ union ShaderValue rdcfixedarray s8v; }; -DOCUMENT(R"(Holds a single named shader variable. It contains either a primitive type (up to a 4x4 +DOCUMENT(R"( +ShaderVariable() +ShaderVariable(other: ShaderVariable) +ShaderVariable(name: str, x: float, y: float, z: float, w: float) +ShaderVariable(name: str, x: int, y: int, z: int, w: int) + +Holds a single named shader variable. It contains either a primitive type (up to a 4x4 matrix of a :class:`basic type `) or a list of members, which can either be struct or array members of this parent variable. @@ -564,8 +592,13 @@ The :class:`ShaderDirectAccess` uniquely refers to a resource descriptor. DECLARE_REFLECTION_STRUCT(ShaderVariable); -DOCUMENT( - "A particular component of a debugging variable that a high-level variable component maps to"); +DOCUMENT(R"( +DebugVariableReference() +DebugVariableReference(other: DebugVariableReference) +DebugVariableReference(type: DebugVariableType, name: str, component: int) + +A particular component of a debugging variable that a high-level variable component maps to +)"); struct DebugVariableReference { DOCUMENT(""); @@ -616,7 +649,11 @@ struct DebugVariableReference DECLARE_REFLECTION_STRUCT(DebugVariableReference); -DOCUMENT(R"(Maps the contents of a high-level source variable to one or more shader variables in a +DOCUMENT(R"( +SourceVariableMapping() +SourceVariableMapping(other: SourceVariableMapping) + +Maps the contents of a high-level source variable to one or more shader variables in a :class:`ShaderDebugState`, with type information. A single high-level variable may be represented by multiple mappings but only along regular @@ -723,7 +760,12 @@ space. }; DECLARE_REFLECTION_STRUCT(SourceVariableMapping); -DOCUMENT("Details the current region of code that an instruction maps to"); +DOCUMENT(R"( +LineColumnInfo() +LineColumnInfo(other: LineColumnInfo) + +Details the current region of code that an instruction maps to. +)"); struct LineColumnInfo { DOCUMENT(""); @@ -810,7 +852,11 @@ treated as covering the code. }; DECLARE_REFLECTION_STRUCT(LineColumnInfo); -DOCUMENT(R"(Gives per-instruction source code mapping information, including what line(s) correspond +DOCUMENT(R"( +InstructionSourceInfo() +InstructionSourceInfo(other: InstructionSourceInfo) + +Gives per-instruction source code mapping information, including what line(s) correspond to this instruction and which source variables exist )"); struct InstructionSourceInfo @@ -847,7 +893,12 @@ instruction. }; DECLARE_REFLECTION_STRUCT(InstructionSourceInfo); -DOCUMENT("This stores the before and after state of a :class:`ShaderVariable`."); +DOCUMENT(R"( +ShaderVariableChange() +ShaderVariableChange(other: ShaderVariableChange) + +This stores the before and after state of a :class:`ShaderVariable`. +)"); struct ShaderVariableChange { DOCUMENT(""); @@ -888,7 +939,11 @@ means the variable stopped existing on this step. }; DECLARE_REFLECTION_STRUCT(ShaderVariableChange); -DOCUMENT(R"(This stores the current state of shader debugging at one particular step in the shader, +DOCUMENT(R"( +ShaderDebugState() +ShaderDebugState(other: ShaderDebugState) + +This stores the current state of shader debugging at one particular step in the shader, with all mutable variable contents. )"); struct ShaderDebugState @@ -974,17 +1029,28 @@ public: DECLARE_REFLECTION_STRUCT(ShaderDebugger); -DOCUMENT(R"(This stores the whole state of a shader's execution from start to finish, with each +DOCUMENT(R"( +This stores the whole state of a shader's execution from start to finish, with each individual debugging step along the way, as well as the immutable global constant values that do not change with shader execution. )"); struct ShaderDebugTrace { + // do not allow swig to create/copy traces +#if defined(SWIG) +protected: DOCUMENT(""); ShaderDebugTrace() = default; ShaderDebugTrace(const ShaderDebugTrace &) = default; ShaderDebugTrace &operator=(const ShaderDebugTrace &) = default; +public: +#else + ShaderDebugTrace() = default; + ShaderDebugTrace(const ShaderDebugTrace &) = default; + ShaderDebugTrace &operator=(const ShaderDebugTrace &) = default; +#endif + DOCUMENT(R"(The shader stage being debugged in this trace :type: ShaderStage @@ -1077,7 +1143,11 @@ per-instruction information such as source line mapping, and source variables. DECLARE_REFLECTION_STRUCT(ShaderDebugTrace); -DOCUMENT(R"(The information describing an input or output signature element describing the interface +DOCUMENT(R"( +SigParameter() +SigParameter(other: SigParameter) + +The information describing an input or output signature element describing the interface between shader stages. .. data:: NoIndex @@ -1213,7 +1283,12 @@ DECLARE_REFLECTION_STRUCT(SigParameter); struct ShaderConstant; -DOCUMENT("Describes the type and members of a :class:`ShaderConstant`."); +DOCUMENT(R"( +ShaderConstantType() +ShaderConstantType(other: ShaderConstantType) + +Describes the type and members of a :class:`ShaderConstant`. +)"); struct ShaderConstantType { DOCUMENT(""); @@ -1329,7 +1404,11 @@ manually, but since it is common this helper is provided. DECLARE_REFLECTION_STRUCT(ShaderConstantType); -DOCUMENT(R"(Contains the detail of a constant within a struct, such as a :class:`ConstantBlock`, +DOCUMENT(R"( +ShaderConstant() +ShaderConstant(other: ShaderConstant) + +Contains the detail of a constant within a struct, such as a :class:`ConstantBlock`, with its type and relative location in memory. )"); struct ShaderConstant @@ -1413,7 +1492,11 @@ packing. DECLARE_REFLECTION_STRUCT(ShaderConstant); -DOCUMENT(R"(Contains the information for a block of constant values. The values are not present, +DOCUMENT(R"( +ConstantBlock() +ConstantBlock(other: ConstantBlock) + +Contains the information for a block of constant values. The values are not present, only the metadata about how the variables are stored in memory itself and their type/name information. )"); @@ -1530,7 +1613,11 @@ specialisation constants. DECLARE_REFLECTION_STRUCT(ConstantBlock); -DOCUMENT(R"(Contains the information for a separate sampler in a shader. If the API doesn't have +DOCUMENT(R"( +ShaderSampler() +ShaderSampler(other: ShaderSampler) + +Contains the information for a separate sampler in a shader. If the API doesn't have the concept of separate samplers, this struct will be unused and only :class:`ShaderResource` is relevant. @@ -1610,7 +1697,11 @@ This value may be set to a very large number if the array is unbounded in the sh DECLARE_REFLECTION_STRUCT(ShaderSampler); -DOCUMENT(R"(Contains the information for a shader resource that is made accessible to shaders +DOCUMENT(R"( +ShaderResource() +ShaderResource(other: ShaderResource) + +Contains the information for a shader resource that is made accessible to shaders directly by means of the API resource binding system. .. note:: that constant blocks and samplers will not have a shader resource entry, see @@ -1741,7 +1832,13 @@ able to be read from and written to arbitrarily. DECLARE_REFLECTION_STRUCT(ShaderResource); -DOCUMENT("Describes an entry point in a shader."); +DOCUMENT(R"( +ShaderEntryPoint() +ShaderEntryPoint(other: ShaderEntryPoint) +ShaderEntryPoint(name: str, stage: ShaderStage) + +Describes an entry point in a shader. +)"); struct ShaderEntryPoint { ShaderEntryPoint() = default; @@ -1773,7 +1870,12 @@ struct ShaderEntryPoint DECLARE_REFLECTION_STRUCT(ShaderEntryPoint); -DOCUMENT("Contains a single flag used at compile-time on a shader."); +DOCUMENT(R"( +ShaderCompileFlag() +ShaderCompileFlag(other: ShaderCompileFlag) + +Contains a single flag used at compile-time on a shader. +)"); struct ShaderCompileFlag { DOCUMENT(""); @@ -1805,7 +1907,12 @@ struct ShaderCompileFlag DECLARE_REFLECTION_STRUCT(ShaderCompileFlag); -DOCUMENT("Contains the information about the compilation environment of a shader"); +DOCUMENT(R"( +ShaderCompileFlags() +ShaderCompileFlags(other: ShaderCompileFlags) + +Contains the information about the compilation environment of a shader +)"); struct ShaderCompileFlags { DOCUMENT(""); @@ -1822,7 +1929,12 @@ struct ShaderCompileFlags DECLARE_REFLECTION_STRUCT(ShaderCompileFlags); -DOCUMENT("Contains the source prefix to add to a given type of shader source"); +DOCUMENT(R"( +ShaderSourcePrefix() +ShaderSourcePrefix(other: ShaderSourcePrefix) + +Contains the source prefix to add to a given type of shader source +)"); struct ShaderSourcePrefix { DOCUMENT(""); @@ -1857,7 +1969,12 @@ struct ShaderSourcePrefix DECLARE_REFLECTION_STRUCT(ShaderSourcePrefix); -DOCUMENT("Contains a source file available in a debug-compiled shader."); +DOCUMENT(R"( +ShaderSourceFile() +ShaderSourceFile(other: ShaderSourceFile) + +Contains a source file available in a debug-compiled shader. +)"); struct ShaderSourceFile { DOCUMENT(""); @@ -1892,7 +2009,11 @@ struct ShaderSourceFile DECLARE_REFLECTION_STRUCT(ShaderSourceFile); -DOCUMENT(R"(Contains the information about a shader contained within API-specific debugging +DOCUMENT(R"( +ShaderDebugInfo() +ShaderDebugInfo(other: ShaderDebugInfo) + +Contains the information about a shader contained within API-specific debugging information attached to the shader. Primarily this means the embedded original source files. @@ -1992,10 +2113,21 @@ The information in this structure is API agnostic. )"); struct ShaderReflection { + // do not allow swig to create/copy shader reflections +#if defined(SWIG) +protected: + DOCUMENT(""); + ShaderDebugTrace() = default; + ShaderDebugTrace(const ShaderDebugTrace &) = default; + ShaderDebugTrace &operator=(const ShaderDebugTrace &) = default; + +public: +#else DOCUMENT(""); ShaderReflection() = default; ShaderReflection(const ShaderReflection &) = default; ShaderReflection &operator=(const ShaderReflection &) = default; +#endif DOCUMENT(R"(The :class:`ResourceId` of this shader. diff --git a/renderdoc/api/replay/structured_data.h b/renderdoc/api/replay/structured_data.h index 4a5a88d8a..ced74e7b5 100644 --- a/renderdoc/api/replay/structured_data.h +++ b/renderdoc/api/replay/structured_data.h @@ -292,7 +292,12 @@ protected: DECLARE_REFLECTION_STRUCT(SDType); -DOCUMENT("The metadata that goes along with a :class:`SDChunk` to detail how it was recorded."); +DOCUMENT(R"( +SDChunkMetaData() +SDChunkMetaData(other: SDChunkMetaData) + +The metadata that goes along with a :class:`SDChunk` to detail how it was recorded. +)"); struct SDChunkMetaData { DOCUMENT(""); @@ -500,7 +505,11 @@ struct LazyArrayData }; #endif -DOCUMENT(R"(Defines a single structured object. Structured objects are defined recursively and one +DOCUMENT(R"( +SDObject() +SDObject(name: str, typeName: str) + +Defines a single structured object. Structured objects are defined recursively and one object can either be a basic type (integer, float, etc), an array, or a struct. Arrays and structs are defined similarly. @@ -1569,7 +1578,11 @@ SDOBJECT_MAKER(ResourceId, makeSDResourceId); #endif -DOCUMENT("Defines a single structured chunk, which is a :class:`SDObject`."); +DOCUMENT(R"( +SDChunk() + +Defines a single structured chunk, which is a :class:`SDObject`. +)"); struct SDChunk : public SDObject { ///////////////////////////////////////////////////////////////// @@ -1709,7 +1722,11 @@ private: DECLARE_REFLECTION_STRUCT(StructuredBufferList); -DOCUMENT("Contains the structured information in a file. Owns the buffers and chunks."); +DOCUMENT(R"( +SDFile() + +Contains the structured information in a file. Owns the buffers and chunks. +)"); struct SDFile { private: diff --git a/renderdoc/api/replay/vk_pipestate.h b/renderdoc/api/replay/vk_pipestate.h index 17e4f621e..1191a58c6 100644 --- a/renderdoc/api/replay/vk_pipestate.h +++ b/renderdoc/api/replay/vk_pipestate.h @@ -28,7 +28,12 @@ namespace VKPipe { -DOCUMENT("A dynamic offset applied to a single descriptor access."); +DOCUMENT(R"( +VKDynamicOffset() +VKDynamicOffset(other: VKDynamicOffset) + +A dynamic offset applied to a single descriptor access. +)"); struct DynamicOffset { DOCUMENT(""); @@ -61,7 +66,12 @@ struct DynamicOffset uint64_t dynamicBufferByteOffset = 0; }; -DOCUMENT("The contents of a descriptor set."); +DOCUMENT(R"( +VKDescriptorSet() +VKDescriptorSet(other: VKDescriptorSet) + +The contents of a descriptor set. +)"); struct DescriptorSet { DOCUMENT(""); @@ -136,7 +146,12 @@ of their descriptors. bool descriptorBufferEmbeddedSamplers = false; }; -DOCUMENT("A single descriptor buffer binding."); +DOCUMENT(R"( +VKDescriptorBuffer() +VKDescriptorBuffer(other: VKDescriptorBuffer) + +A single descriptor buffer binding. +)"); struct DescriptorBuffer { DOCUMENT(""); @@ -204,7 +219,12 @@ struct DescriptorBuffer bool samplerBuffer = false; }; -DOCUMENT("Describes the object and descriptor set bindings of a Vulkan pipeline object."); +DOCUMENT(R"( +VKPipeline() +VKPipeline(other: VKPipeline) + +Describes the object and descriptor set bindings of a Vulkan pipeline object. +)"); struct Pipeline { DOCUMENT(""); @@ -255,7 +275,12 @@ When not using pipeline libraries, this will be identical to :data:`pipelinePreR rdcarray descriptorBuffers; }; -DOCUMENT("Describes the Vulkan index buffer binding.") +DOCUMENT(R"( +VKIndexBuffer() +VKIndexBuffer(other: VKIndexBuffer) + +Describes the Vulkan index buffer binding. +)") struct IndexBuffer { DOCUMENT(""); @@ -289,7 +314,12 @@ it can be 0 if no index buffer is bound. uint32_t byteStride = 0; }; -DOCUMENT("Describes the vulkan input assembly configuration."); +DOCUMENT(R"( +VKInputAssembly() +VKInputAssembly(other: VKInputAssembly) + +Describes the vulkan input assembly configuration. +)"); struct InputAssembly { DOCUMENT(""); @@ -316,7 +346,12 @@ struct InputAssembly Topology topology = Topology::Unknown; }; -DOCUMENT("Describes the configuration of a single vertex attribute."); +DOCUMENT(R"( +VKVertexAttribute() +VKVertexAttribute(other: VKVertexAttribute) + +Describes the configuration of a single vertex attribute. +)"); struct VertexAttribute { DOCUMENT(""); @@ -363,7 +398,12 @@ struct VertexAttribute uint32_t byteOffset = 0; }; -DOCUMENT("Describes a vertex binding."); +DOCUMENT(R"( +VKVertexBinding() +VKVertexBinding(other: VKVertexBinding) + +Describes a vertex binding. +)"); struct VertexBinding { DOCUMENT(""); @@ -408,7 +448,12 @@ If it's ``1`` then one element is read for each instance, and for ``N`` greater uint32_t instanceDivisor = 1; }; -DOCUMENT("Describes a single Vulkan vertex buffer binding.") +DOCUMENT(R"( +VKVertexBuffer() +VKVertexBuffer(other: VKVertexBuffer) + +Describes a single Vulkan vertex buffer binding. +)") struct VertexBuffer { DOCUMENT(""); @@ -455,7 +500,12 @@ struct VertexBuffer uint32_t byteSize = 0; }; -DOCUMENT("Describes the fixed-function vertex input fetch setup."); +DOCUMENT(R"( +VKVertexInput() +VKVertexInput(other: VKVertexInput) + +Describes the fixed-function vertex input fetch setup. +)"); struct VertexInput { DOCUMENT(""); @@ -480,7 +530,12 @@ struct VertexInput rdcarray vertexBuffers; }; -DOCUMENT("Describes a Vulkan shader stage."); +DOCUMENT(R"( +VKShader() +VKShader(other: VKShader) + +Describes a Vulkan shader stage. +)"); struct Shader { DOCUMENT(""); @@ -552,7 +607,12 @@ and size into specializationData can be obtained from the reflection info. bool shaderObject = false; }; -DOCUMENT("Describes the state of the fixed-function tessellator."); +DOCUMENT(R"( +VKTessellation() +VKTessellation(other: VKTessellation) + +Describes the state of the fixed-function tessellator. +)"); struct Tessellation { DOCUMENT(""); @@ -573,7 +633,12 @@ struct Tessellation bool domainOriginUpperLeft = true; }; -DOCUMENT("Describes a single transform feedback binding."); +DOCUMENT(R"( +VKXFBBuffer() +VKXFBBuffer(other: VKXFBBuffer) + +Describes a single transform feedback binding. +)"); struct XFBBuffer { DOCUMENT(""); @@ -642,7 +707,12 @@ struct XFBBuffer uint64_t counterBufferOffset = 0; }; -DOCUMENT("Describes the state of the fixed-function transform feedback."); +DOCUMENT(R"( +VKTransformFeedback() +VKTransformFeedback(other: VKTransformFeedback) + +Describes the state of the fixed-function transform feedback. +)"); struct TransformFeedback { DOCUMENT(""); @@ -663,7 +733,12 @@ struct TransformFeedback uint32_t rasterizedStream = 0; }; -DOCUMENT("Describes a render area in the current framebuffer."); +DOCUMENT(R"( +VKRenderArea() +VKRenderArea(other: VKRenderArea) + +Describes a render area in the current framebuffer. +)"); struct RenderArea { DOCUMENT(""); @@ -709,7 +784,12 @@ struct RenderArea int32_t height = 0; }; -DOCUMENT("Describes a combined viewport and scissor region."); +DOCUMENT(R"( +VKViewportScissor() +VKViewportScissor(other: VKViewportScissor) + +Describes a combined viewport and scissor region. +)"); struct ViewportScissor { DOCUMENT(""); @@ -738,7 +818,12 @@ struct ViewportScissor Scissor scissor; }; -DOCUMENT("Describes the view state in the pipeline."); +DOCUMENT(R"( +VKViewState() +VKViewState(other: VKViewState) + +Describes the view state in the pipeline. +)"); struct ViewState { DOCUMENT(""); @@ -779,7 +864,12 @@ and a fragment in none of them is discarded. bool depthNegativeOneToOne = false; }; -DOCUMENT("Describes the rasterizer state in the pipeline."); +DOCUMENT(R"( +VKRasterizer() +VKRasterizer(other: VKRasterizer) + +Describes the rasterizer state in the pipeline. +)"); struct Rasterizer { DOCUMENT(""); @@ -937,7 +1027,12 @@ shading rate sampled from the fragment shading rate attachment. ShadingRateCombiner::Keep, ShadingRateCombiner::Keep}; }; -DOCUMENT("Describes state of custom sample locations in the pipeline."); +DOCUMENT(R"( +VKSampleLocations() +VKSampleLocations(other: VKSampleLocations) + +Describes state of custom sample locations in the pipeline. +)"); struct SampleLocations { DOCUMENT(""); @@ -964,7 +1059,12 @@ If the list is empty then the standard sample pattern is in use. rdcarray customLocations; }; -DOCUMENT("Describes the multisampling state in the pipeline."); +DOCUMENT(R"( +VKMultiSample() +VKMultiSample(other: VKMultiSample) + +Describes the multisampling state in the pipeline. +)"); struct MultiSample { DOCUMENT(""); @@ -999,7 +1099,12 @@ struct MultiSample SampleLocations sampleLocations; }; -DOCUMENT("Describes the pipeline blending state."); +DOCUMENT(R"( +VKColorBlendState() +VKColorBlendState(other: VKColorBlendState) + +Describes the pipeline blending state. +)"); struct ColorBlendState { DOCUMENT(""); @@ -1031,7 +1136,12 @@ struct ColorBlendState rdcfixedarray blendFactor = {1.0f, 1.0f, 1.0f, 1.0f}; }; -DOCUMENT("Describes the pipeline depth-stencil state."); +DOCUMENT(R"( +VKDepthStencil() +VKDepthStencil(other: VKDepthStencil) + +Describes the pipeline depth-stencil state. +)"); struct DepthStencil { DOCUMENT(""); @@ -1090,7 +1200,11 @@ struct DepthStencil float maxDepthBounds = 0.0f; }; -DOCUMENT(R"(Describes the setup of a renderpass and subpasses. +DOCUMENT(R"( +VKRenderPass() +VKRenderPass(other: VKRenderPass) + +Describes the setup of a renderpass and subpasses. .. data:: AttachmentUnused @@ -1272,7 +1386,12 @@ If the subpass is not internally multisampled, tileOnlyMSAASampleCount is set to static const uint32_t AttachmentUnused = ~0U; }; -DOCUMENT("Describes a framebuffer object and its attachments."); +DOCUMENT(R"( +VKFramebuffer() +VKFramebuffer(other: VKFramebuffer) + +Describes a framebuffer object and its attachments. +)"); struct Framebuffer { DOCUMENT(""); @@ -1309,7 +1428,12 @@ struct Framebuffer uint32_t layers = 0; }; -DOCUMENT("Describes the current pass instance at the current time."); +DOCUMENT(R"( +VKCurrentPass() +VKCurrentPass(other: VKCurrentPass) + +Describes the current pass instance at the current time. +)"); struct CurrentPass { DOCUMENT(""); @@ -1352,7 +1476,12 @@ struct CurrentPass bool stencilFeedbackAllowed = false; }; -DOCUMENT("Contains the layout of a range of subresources in an image."); +DOCUMENT(R"( +VKImageLayout() +VKImageLayout(other: VKImageLayout) + +Contains the layout of a range of subresources in an image. +)"); struct ImageLayout { DOCUMENT(""); @@ -1406,7 +1535,12 @@ struct ImageLayout rdcstr name; }; -DOCUMENT("Contains the current layout of all subresources in the image."); +DOCUMENT(R"( +VKImageData() +VKImageData(other: VKImageData) + +Contains the current layout of all subresources in the image. +)"); struct ImageData { DOCUMENT(""); @@ -1434,7 +1568,12 @@ struct ImageData rdcarray layouts; }; -DOCUMENT("Contains the current conditional rendering state."); +DOCUMENT(R"( +VKConditionalRendering() +VKConditionalRendering(other: VKConditionalRendering) + +Contains the current conditional rendering state. +)"); struct ConditionalRendering { DOCUMENT(""); @@ -1467,7 +1606,9 @@ struct ConditionalRendering bool isPassing = false; }; -DOCUMENT("The full current Vulkan pipeline state."); +DOCUMENT(R"( +The full current Vulkan pipeline state. +)"); struct State { #if !defined(RENDERDOC_EXPORTS)