⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 244093 in webkit


Ignore:
Timestamp:
Apr 9, 2019, 1:03:18 PM (7 years ago)
Author:
Justin Fan
Message:

[Web GPU] GPURenderPassEncoder updates: setBlendColor, setViewport, setScissorRect
https://bugs.webkit.org/show_bug.cgi?id=196719

Reviewed by Myles C. Maxfield.

Source/WebCore:

Implement setBlendColor, setViewport, and setScissorRect for GPURenderPassEncoder.

Tests: webgpu/viewport-scissor-rect-triangle-strip.html, webgpu/blend-color-triangle-strip.html

  • Modules/webgpu/WebGPURenderPassEncoder.cpp:

(WebCore::WebGPURenderPassEncoder::setBlendColor):
(WebCore::WebGPURenderPassEncoder::setViewport):
(WebCore::WebGPURenderPassEncoder::setScissorRect):

  • Modules/webgpu/WebGPURenderPassEncoder.h:
  • Modules/webgpu/WebGPURenderPassEncoder.idl:
  • platform/graphics/gpu/GPURenderPassEncoder.h:
  • platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:

(WebCore::GPURenderPassEncoder::setBlendColor):
(WebCore::GPURenderPassEncoder::setViewport):
(WebCore::GPURenderPassEncoder::setScissorRect):

LayoutTests:

Add blend-color-triangle-strip to set and blend with a custom blend color on the renderpass encoder.
Add viewport-scissor-rect-triangle-strip to draw a checkerboard by restricting the drawing viewport or scissor rectangle.

  • webgpu/blend-color-triangle-strip.html: Added.
  • webgpu/js/webgpu-functions.js:

(beginBasicRenderPass):

  • webgpu/viewport-scissor-rect-triangle-strip-expected.html: Added.
  • webgpu/viewport-scissor-rect-triangle-strip.html: Added.
Location:
trunk
Files:
4 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r244087 r244093  
     12019-04-09  Justin Fan  <justin_fan@apple.com>
     2
     3        [Web GPU] GPURenderPassEncoder updates: setBlendColor, setViewport, setScissorRect
     4        https://bugs.webkit.org/show_bug.cgi?id=196719
     5
     6        Reviewed by Myles C. Maxfield.
     7
     8        Add blend-color-triangle-strip to set and blend with a custom blend color on the renderpass encoder.
     9        Add viewport-scissor-rect-triangle-strip to draw a checkerboard by restricting the drawing viewport or scissor rectangle.
     10
     11        * webgpu/blend-color-triangle-strip.html: Added.
     12        * webgpu/js/webgpu-functions.js:
     13        (beginBasicRenderPass):
     14        * webgpu/viewport-scissor-rect-triangle-strip-expected.html: Added.
     15        * webgpu/viewport-scissor-rect-triangle-strip.html: Added.
     16
    1172019-04-09  Devin Rousso  <drousso@apple.com>
    218
  • trunk/LayoutTests/webgpu/js/webgpu-functions.js

    r243755 r244093  
    8888        storeOp: "store",
    8989        clearColor: { r: 1.0, g: 0, b: 0, a: 1.0 }
    90     }
     90    };
    9191
    9292    // FIXME: Flesh out the rest of WebGPURenderPassDescriptor.
  • trunk/Source/WebCore/ChangeLog

    r244092 r244093  
     12019-04-09  Justin Fan  <justin_fan@apple.com>
     2
     3        [Web GPU] GPURenderPassEncoder updates: setBlendColor, setViewport, setScissorRect
     4        https://bugs.webkit.org/show_bug.cgi?id=196719
     5
     6        Reviewed by Myles C. Maxfield.
     7
     8        Implement setBlendColor, setViewport, and setScissorRect for GPURenderPassEncoder.
     9
     10        Tests: webgpu/viewport-scissor-rect-triangle-strip.html, webgpu/blend-color-triangle-strip.html
     11
     12        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
     13        (WebCore::WebGPURenderPassEncoder::setBlendColor):
     14        (WebCore::WebGPURenderPassEncoder::setViewport):
     15        (WebCore::WebGPURenderPassEncoder::setScissorRect):
     16        * Modules/webgpu/WebGPURenderPassEncoder.h:
     17        * Modules/webgpu/WebGPURenderPassEncoder.idl:
     18        * platform/graphics/gpu/GPURenderPassEncoder.h:
     19        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
     20        (WebCore::GPURenderPassEncoder::setBlendColor):
     21        (WebCore::GPURenderPassEncoder::setViewport):
     22        (WebCore::GPURenderPassEncoder::setScissorRect):
     23
    1242019-04-09  Andy Estes  <aestes@apple.com>
    225
  • trunk/Source/WebCore/Modules/webgpu/WebGPURenderPassEncoder.cpp

    r243658 r244093  
    2929#if ENABLE(WEBGPU)
    3030
     31#include "GPUColor.h"
    3132#include "GPULimits.h"
    3233#include "GPUProgrammablePassEncoder.h"
     
    5960    }
    6061    m_passEncoder->setPipeline(makeRef(*pipeline.renderPipeline()));
     62}
     63
     64void WebGPURenderPassEncoder::setBlendColor(const GPUColor& color)
     65{
     66    if (!m_passEncoder) {
     67        LOG(WebGPU, "GPURenderPassEncoder::setBlendColor(): Invalid operation!");
     68        return;
     69    }
     70    m_passEncoder->setBlendColor(color);
     71}
     72
     73void WebGPURenderPassEncoder::setViewport(float x, float y, float width, float height, float minDepth, float maxDepth)
     74{
     75    if (!m_passEncoder) {
     76        LOG(WebGPU, "GPURenderPassEncoder::setViewport(): Invalid operation!");
     77        return;
     78    }
     79    m_passEncoder->setViewport(x, y, width, height, minDepth, maxDepth);
     80}
     81
     82void WebGPURenderPassEncoder::setScissorRect(unsigned x, unsigned y, unsigned width, unsigned height)
     83{
     84    if (!m_passEncoder) {
     85        LOG(WebGPU, "GPURenderPassEncoder::setScissorRect(): Invalid operation!");
     86        return;
     87    }
     88    if (!width || !height) {
     89        LOG(WebGPU, "GPURenderPassEncoder::setScissorRect(): Width or height must be greater than 0!");
     90        return;
     91    }
     92    m_passEncoder->setScissorRect(x, y, width, height);
    6193}
    6294
  • trunk/Source/WebCore/Modules/webgpu/WebGPURenderPassEncoder.h

    r243658 r244093  
    3939class WebGPURenderPipeline;
    4040
     41struct GPUColor;
     42
    4143class WebGPURenderPassEncoder final : public WebGPUProgrammablePassEncoder {
    4244public:
     
    4446
    4547    void setPipeline(const WebGPURenderPipeline&);
     48    void setBlendColor(const GPUColor&);
     49    void setViewport(float x, float y, float width, float height, float minDepth, float maxDepth);
     50    void setScissorRect(unsigned x, unsigned y, unsigned width, unsigned height);
    4651    void setVertexBuffers(unsigned, Vector<RefPtr<WebGPUBuffer>>&&, Vector<uint64_t>&&);
    4752    void draw(unsigned vertexCount, unsigned instanceCount, unsigned firstVertex, unsigned firstInstance);
  • trunk/Source/WebCore/Modules/webgpu/WebGPURenderPassEncoder.idl

    r243456 r244093  
    3434] interface WebGPURenderPassEncoder : WebGPUProgrammablePassEncoder {
    3535    void setPipeline(WebGPURenderPipeline pipeline);
     36    void setBlendColor(GPUColor color);
     37
     38    // The default viewport is (0.0, 0.0, w, h, 0.0, 1.0), where w and h are the dimensions of back buffer
     39    void setViewport(float x, float y, float width, float height, float minDepth, float maxDepth);
     40
     41    // The default scissor rectangle is (0, 0, w, h), where w and h are the dimensions of back buffer.
     42    // Width and height must be greater than 0. Otherwise, an error will be generated.
     43    void setScissorRect(u32 x, u32 y, u32 width, u32 height);
    3644
    3745    void setVertexBuffers(u32 startSlot, sequence<WebGPUBuffer> buffers, sequence<u64> offsets);
     
    4048
    4149/* Not Yet Implemented
    42     void setBlendColor(float r, float g, float b, float a);
    4350    void setIndexBuffer(WebGPUBuffer buffer, u64 offset);
    4451
  • trunk/Source/WebCore/platform/graphics/gpu/GPURenderPassEncoder.h

    r243658 r244093  
    4343class GPUCommandBuffer;
    4444
     45struct GPUColor;
    4546struct GPURenderPassDescriptor;
    4647
     
    5354
    5455    void setPipeline(Ref<const GPURenderPipeline>&&);
     56    void setBlendColor(const GPUColor&);
     57    void setViewport(float x, float y, float width, float height, float minDepth, float maxDepth);
     58    void setScissorRect(unsigned x, unsigned y, unsigned width, unsigned height);
    5559    void setVertexBuffers(unsigned, Vector<Ref<GPUBuffer>>&&, Vector<uint64_t>&&);
    5660    void draw(unsigned vertexCount, unsigned instanceCount, unsigned firstVertex, unsigned firstInstance);
  • trunk/Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm

    r243658 r244093  
    3030
    3131#import "GPUBuffer.h"
     32#import "GPUColor.h"
    3233#import "GPUCommandBuffer.h"
    3334#import "GPURenderPassDescriptor.h"
     
    203204
    204205    m_pipeline = WTFMove(pipeline);
     206}
     207
     208void GPURenderPassEncoder::setBlendColor(const GPUColor& color)
     209{
     210    if (!m_platformRenderPassEncoder) {
     211        LOG(WebGPU, "GPURenderPassEncoder::setBlendColor(): Invalid operation: Encoding is ended!");
     212        return;
     213    }
     214
     215    BEGIN_BLOCK_OBJC_EXCEPTIONS;
     216    [m_platformRenderPassEncoder setBlendColorRed:color.r green:color.g blue:color.b alpha:color.a];
     217    END_BLOCK_OBJC_EXCEPTIONS;
     218}
     219
     220void GPURenderPassEncoder::setViewport(float x, float y, float width, float height, float minDepth, float maxDepth)
     221{
     222    if (!m_platformRenderPassEncoder) {
     223        LOG(WebGPU, "GPURenderPassEncoder::setViewport(): Invalid operation: Encoding is ended!");
     224        return;
     225    }
     226
     227    BEGIN_BLOCK_OBJC_EXCEPTIONS;
     228    [m_platformRenderPassEncoder setViewport: { x, y, width, height, minDepth, maxDepth }];
     229    END_BLOCK_OBJC_EXCEPTIONS;
     230}
     231
     232void GPURenderPassEncoder::setScissorRect(unsigned x, unsigned y, unsigned width, unsigned height)
     233{
     234    if (!m_platformRenderPassEncoder) {
     235        LOG(WebGPU, "GPURenderPassEncoder::setScissorRect(): Invalid operation: Encoding is ended!");
     236        return;
     237    }
     238
     239    BEGIN_BLOCK_OBJC_EXCEPTIONS;
     240    [m_platformRenderPassEncoder setScissorRect: { x, y, width, height }];
     241    END_BLOCK_OBJC_EXCEPTIONS;
    205242}
    206243
Note: See TracChangeset for help on using the changeset viewer.