render_pass: Add CmdBegin{End}RenderPass()
authorJon Ashburn <jon@lunarg.com>
Mon, 2 Feb 2015 16:58:11 +0000 (09:58 -0700)
committerCourtney Goeltzenleuchter <courtney@LunarG.com>
Thu, 5 Feb 2015 00:58:11 +0000 (17:58 -0700)
This is part of rev 47 but was accidentally skipped.

demos/cube.c
demos/tri.c
icd/intel/cmd.c
icd/intel/fb.c
icd/intel/fb.h
include/xgl.h
include/xglLayer.h
tests/xgltestbinding.cpp
xgl.py

index a963971..fdd300c 100644 (file)
@@ -282,7 +282,6 @@ static void demo_draw_build_cmd(struct demo *demo)
     XGL_CMD_BUFFER_GRAPHICS_BEGIN_INFO graphics_cmd_buf_info = {
         .sType = XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO,
         .pNext = NULL,
-        .operation = XGL_RENDER_PASS_OPERATION_BEGIN_AND_END,
     };
     XGL_CMD_BUFFER_BEGIN_INFO cmd_buf_info = {
         .sType = XGL_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO,
index 929d158..5a770f4 100644 (file)
@@ -104,7 +104,6 @@ static void demo_draw_build_cmd(struct demo *demo)
     XGL_CMD_BUFFER_GRAPHICS_BEGIN_INFO graphics_cmd_buf_info = {
         .sType = XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO,
         .pNext = NULL,
-        .operation = XGL_RENDER_PASS_OPERATION_BEGIN_AND_END,
     };
     XGL_CMD_BUFFER_BEGIN_INFO cmd_buf_info = {
         .sType = XGL_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO,
index 8bad918..4d38da3 100644 (file)
@@ -327,8 +327,8 @@ XGL_RESULT intel_cmd_begin(struct intel_cmd *cmd, const XGL_CMD_BUFFER_BEGIN_INF
             break;
         case XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO:
             ginfo = (XGL_CMD_BUFFER_GRAPHICS_BEGIN_INFO *) next;
-            cmd->bind.render_pass = (struct intel_render_pass *)
-                                        ginfo->renderPass;
+            intel_cmd_begin_render_pass(cmd,  (struct intel_render_pass *)
+                                        ginfo->renderPass);
             break;
         default:
             return XGL_ERROR_INVALID_VALUE;
index a460021..eb3679e 100644 (file)
@@ -28,6 +28,7 @@
 #include "obj.h"
 #include "view.h"
 #include "img.h"
+#include "cmd.h"
 #include "fb.h"
 
 static void fb_destroy(struct intel_obj *obj)
@@ -151,6 +152,19 @@ void intel_render_pass_destroy(struct intel_render_pass *rp)
     intel_base_destroy(&rp->obj.base);
 }
 
+void intel_cmd_begin_render_pass(struct intel_cmd *cmd,
+                                 const struct intel_render_pass *rp)
+{
+    cmd->bind.render_pass = (struct intel_render_pass *) rp;
+}
+
+void intel_cmd_end_render_pass(struct intel_cmd *cmd,
+                               const struct intel_render_pass *rp)
+{
+    //note what to do if rp != bound rp
+    cmd->bind.render_pass = 0;
+}
+
 XGL_RESULT XGLAPI xglCreateFramebuffer(
     XGL_DEVICE                                  device,
     const XGL_FRAMEBUFFER_CREATE_INFO*          info,
@@ -172,5 +186,21 @@ XGL_RESULT XGLAPI xglCreateRenderPass(
     return intel_render_pass_create(dev, info, (struct intel_render_pass **) rp_ret);
 }
 
+void XGLAPI xglCmdBeginRenderPass(
+    XGL_CMD_BUFFER                              cmdBuffer,
+    XGL_RENDER_PASS                             renderPass)
+{
+   struct intel_cmd *cmd = intel_cmd(cmdBuffer);
+
+   intel_cmd_begin_render_pass(cmd, (struct intel_render_pass *) renderPass);
+}
 
+void XGLAPI xglCmdEndRenderPass(
+    XGL_CMD_BUFFER                              cmdBuffer,
+    XGL_RENDER_PASS                             renderPass)
+{
+   struct intel_cmd *cmd = intel_cmd(cmdBuffer);
+
+   intel_cmd_end_render_pass(cmd, (struct intel_render_pass *) renderPass);
+}
 
index 331f9fc..1cc35c4 100644 (file)
@@ -73,7 +73,10 @@ XGL_RESULT intel_render_pass_create(struct intel_dev *dev,
                            const XGL_RENDER_PASS_CREATE_INFO* pInfo,
                            struct intel_render_pass** ppRenderPass);
 void intel_render_pass_destroy(struct intel_render_pass *rp);
-
+void intel_cmd_begin_render_pass(struct intel_cmd *cmd,
+                                 const struct intel_render_pass *rp);
+void intel_cmd_end_render_pass(struct intel_cmd *cmd,
+                               const struct intel_render_pass *rp);
 XGL_RESULT XGLAPI intelCreateFramebuffer(
     XGL_DEVICE                                  device,
     const XGL_FRAMEBUFFER_CREATE_INFO*          pCreateInfo,
index 59254a3..18ae993 100644 (file)
@@ -1007,17 +1007,6 @@ typedef enum _XGL_SHADER_STAGE_FLAGS
     XGL_MAX_ENUM(_XGL_SHADER_STAGE_FLAGS)
 } XGL_SHADER_STAGE_FLAGS;
 
-// Graphics workload submit type. Used for rendering workloads.
-typedef enum _XGL_RENDER_PASS_OPERATION
-{
-    XGL_RENDER_PASS_OPERATION_BEGIN,                                  // Start rendering
-    XGL_RENDER_PASS_OPERATION_CONTINUE,                               // Continue rendering
-    XGL_RENDER_PASS_OPERATION_END,                                    // End rendering
-    XGL_RENDER_PASS_OPERATION_BEGIN_AND_END,                          // Start and finish rendering in a single command buffer
-
-    XGL_MAX_ENUM(_XGL_RENDER_PASS_OPERATION)
-} XGL_RENDER_PASS_OPERATION;
-
 // Structure type enumerant
 typedef enum _XGL_STRUCTURE_TYPE
 {
@@ -2108,7 +2097,6 @@ typedef struct _XGL_CMD_BUFFER_GRAPHICS_BEGIN_INFO
     const void*                             pNext;      // Pointer to next structure
 
     XGL_RENDER_PASS                         renderPass;
-    XGL_RENDER_PASS_OPERATION               operation;
 
 } XGL_CMD_BUFFER_GRAPHICS_BEGIN_INFO;
 
@@ -2352,7 +2340,8 @@ typedef void (XGLAPI *xglCmdLoadAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XG
 typedef void (XGLAPI *xglCmdSaveAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset);
 typedef XGL_RESULT (XGLAPI *xglCreateFramebufferType)(XGL_DEVICE device, const XGL_FRAMEBUFFER_CREATE_INFO* pCreateInfo, XGL_FRAMEBUFFER* pFramebuffer);
 typedef XGL_RESULT (XGLAPI *xglCreateRenderPassType)(XGL_DEVICE device, const XGL_RENDER_PASS_CREATE_INFO* pCreateInfo, XGL_RENDER_PASS* pRenderPass);
-
+typedef void       (XGLAPI *xglCmdBeginRenderPassType)(XGL_CMD_BUFFER cmdBuffer, XGL_RENDER_PASS renderPass);
+typedef void       (XGLAPI *xglCmdEndRenderPassType)(XGL_CMD_BUFFER cmdBuffer, XGL_RENDER_PASS renderPass);
 #ifdef XGL_PROTOTYPES
 
 // GPU initialization
@@ -2998,6 +2987,14 @@ XGL_RESULT XGLAPI xglCreateRenderPass(
     const XGL_RENDER_PASS_CREATE_INFO*          pCreateInfo,
     XGL_RENDER_PASS*                            pRenderPass);
 
+void XGLAPI xglCmdBeginRenderPass(
+    XGL_CMD_BUFFER                              cmdBuffer,
+    XGL_RENDER_PASS                             renderPass);
+
+void XGLAPI xglCmdEndRenderPass(
+    XGL_CMD_BUFFER                              cmdBuffer,
+    XGL_RENDER_PASS                             renderPass);
+
 #endif /* XGL_PROTOTYPES */
 
 #ifdef __cplusplus
index a229b2c..97a2d4f 100644 (file)
@@ -136,6 +136,8 @@ typedef struct _XGL_LAYER_DISPATCH_TABLE
     xglCmdSaveAtomicCountersType CmdSaveAtomicCounters;
     xglCreateFramebufferType CreateFramebuffer;
     xglCreateRenderPassType CreateRenderPass;
+    xglCmdBeginRenderPassType CmdBeginRenderPass;
+    xglCmdEndRenderPassType CmdEndRenderPass;
     xglDbgSetValidationLevelType DbgSetValidationLevel;
     xglDbgRegisterMsgCallbackType DbgRegisterMsgCallback;
     xglDbgUnregisterMsgCallbackType DbgUnregisterMsgCallback;
index 8fe3e78..7bdb397 100644 (file)
@@ -901,7 +901,6 @@ void CmdBuffer::begin(XGL_RENDER_PASS renderpass_obj)
         .sType = XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO,
         .pNext = NULL,
         .renderPass = renderpass_obj,
-        .operation = XGL_RENDER_PASS_OPERATION_BEGIN_AND_END,
     };
     info.flags = XGL_CMD_BUFFER_OPTIMIZE_GPU_SMALL_BATCH_BIT |
           XGL_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT;
diff --git a/xgl.py b/xgl.py
index 5f09fc1..04e8b2e 100644 (file)
--- a/xgl.py
+++ b/xgl.py
@@ -813,6 +813,14 @@ core = Extension(
              Param("const XGL_RENDER_PASS_CREATE_INFO*", "pCreateInfo"),
              Param("XGL_RENDER_PASS*", "pRenderPass")]),
 
+        Proto("void", "CmdBeginRenderPass",
+            [Param("XGL_CMD_BUFFER", "cmdBuffer"),
+             Param("XGL_RENDER_PASS", "renderPass")]),
+
+        Proto("void", "CmdEndRenderPass",
+            [Param("XGL_CMD_BUFFER", "cmdBuffer"),
+             Param("XGL_RENDER_PASS", "renderPass")]),
+
         Proto("XGL_RESULT", "DbgSetValidationLevel",
             [Param("XGL_DEVICE", "device"),
              Param("XGL_VALIDATION_LEVEL", "validationLevel")]),