Browse Source

LibVirtGPU: Make depth and color clearing separate functions

Stephan Unverwerth 2 năm trước cách đây
mục cha
commit
140338670a

+ 18 - 4
Userland/Libraries/LibVirtGPU/CommandBufferBuilder.cpp

@@ -141,7 +141,7 @@ void CommandBufferBuilder::append_draw_vbo(Protocol::PipePrimitiveTypes primitiv
     builder.appendu32(0);                             // cso
 }
 
-void CommandBufferBuilder::append_clear(float r, float g, float b)
+void CommandBufferBuilder::append_clear(float r, float g, float b, float a)
 {
     CommandBuilder builder(m_buffer, Protocol::VirGLCommand::CLEAR, Protocol::ObjectType::NONE);
     Protocol::ClearType clear_flags {};
@@ -151,9 +151,23 @@ void CommandBufferBuilder::append_clear(float r, float g, float b)
     builder.appendf32(r);
     builder.appendf32(g);
     builder.appendf32(b);
-    builder.appendf32(1.0f); // Alpha
-    builder.appendf64(1.0);  // Depth
-    builder.appendu32(0);    // Stencil
+    builder.appendf32(a);
+    builder.appendf64(1.0);
+    builder.appendu32(0);
+}
+
+void CommandBufferBuilder::append_clear(double depth)
+{
+    CommandBuilder builder(m_buffer, Protocol::VirGLCommand::CLEAR, Protocol::ObjectType::NONE);
+    Protocol::ClearType clear_flags {};
+    clear_flags.flags.depth = 1;
+    builder.appendu32(clear_flags.value);
+    builder.appendf32(0);
+    builder.appendf32(0);
+    builder.appendf32(0);
+    builder.appendf32(0);
+    builder.appendf64(depth);
+    builder.appendu32(0);
 }
 
 void CommandBufferBuilder::append_set_vertex_buffers(u32 stride, u32 offset, Protocol::ResourceID resource)

+ 2 - 1
Userland/Libraries/LibVirtGPU/CommandBufferBuilder.h

@@ -22,7 +22,8 @@ public:
     void append_transfer3d(Protocol::ResourceID resource, size_t width, size_t height = 1, size_t depth = 1, size_t direction = VIRGL_DATA_DIR_GUEST_TO_HOST);
     void append_end_transfers_3d();
     void append_draw_vbo(Protocol::PipePrimitiveTypes, u32 count);
-    void append_clear(float r, float g, float b);
+    void append_clear(float r, float g, float b, float a);
+    void append_clear(double depth);
     void append_set_vertex_buffers(u32 stride, u32 offset, Protocol::ResourceID resource);
     void append_create_blend(Protocol::ObjectHandle handle);
     void append_bind_blend(Protocol::ObjectHandle handle);