mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-18 17:35:30 +00:00
Implement GPUCompilationInfo
Implements the GPUCompilationInfo and GPUCompilationMessage interfaces, adds the GPUCompilationMessageType enum, and adds the compilationInfo method to GPUShaderModule. BUG: dawn:746 Change-Id: Ied70cbbfedbf4890916ec076993714e5042f70e4 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/46600 Commit-Queue: Brandon Jones <bajones@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
68c226db43
commit
6f2bbe9896
@@ -14,6 +14,9 @@
|
||||
|
||||
#include "common/Constants.h"
|
||||
|
||||
#include "dawn_native/CompilationMessages.h"
|
||||
#include "dawn_native/ShaderModule.h"
|
||||
|
||||
#include "tests/unittests/validation/ValidationTest.h"
|
||||
|
||||
#include "utils/WGPUHelpers.h"
|
||||
@@ -153,3 +156,53 @@ TEST_F(ShaderModuleValidationTest, MultisampledArrayTexture) {
|
||||
|
||||
ASSERT_DEVICE_ERROR(utils::CreateShaderModuleFromASM(device, shader));
|
||||
}
|
||||
|
||||
// Tests that shader module compilation messages can be queried.
|
||||
TEST_F(ShaderModuleValidationTest, CompilationMessages) {
|
||||
// This test works assuming ShaderModule is backed by a dawn_native::ShaderModuleBase, which
|
||||
// is not the case on the wire.
|
||||
DAWN_SKIP_TEST_IF(UsesWire());
|
||||
|
||||
std::ostringstream stream;
|
||||
stream << R"([[location(0)]] var<out> fragColor : vec4<f32>;
|
||||
[[stage(fragment)]] fn main() -> void {
|
||||
fragColor = vec4<f32>(0.0, 1.0, 0.0, 1.0);
|
||||
})";
|
||||
wgpu::ShaderModule shaderModule = utils::CreateShaderModule(device, stream.str().c_str());
|
||||
|
||||
dawn_native::ShaderModuleBase* shaderModuleBase =
|
||||
reinterpret_cast<dawn_native::ShaderModuleBase*>(shaderModule.Get());
|
||||
shaderModuleBase->CompilationMessages()->ClearMessages();
|
||||
shaderModuleBase->CompilationMessages()->AddMessage("Info Message");
|
||||
shaderModuleBase->CompilationMessages()->AddMessage("Warning Message",
|
||||
wgpu::CompilationMessageType::Warning);
|
||||
shaderModuleBase->CompilationMessages()->AddMessage("Error Message",
|
||||
wgpu::CompilationMessageType::Error, 3, 4);
|
||||
|
||||
auto callback = [](WGPUCompilationInfoRequestStatus status, const WGPUCompilationInfo* info,
|
||||
void* userdata) {
|
||||
ASSERT_EQ(WGPUCompilationInfoRequestStatus_Success, status);
|
||||
ASSERT_NE(nullptr, info);
|
||||
ASSERT_EQ(3u, info->messageCount);
|
||||
|
||||
const WGPUCompilationMessage* message = &info->messages[0];
|
||||
ASSERT_STREQ("Info Message", message->message);
|
||||
ASSERT_EQ(WGPUCompilationMessageType_Info, message->type);
|
||||
ASSERT_EQ(0u, message->lineNum);
|
||||
ASSERT_EQ(0u, message->linePos);
|
||||
|
||||
message = &info->messages[1];
|
||||
ASSERT_STREQ("Warning Message", message->message);
|
||||
ASSERT_EQ(WGPUCompilationMessageType_Warning, message->type);
|
||||
ASSERT_EQ(0u, message->lineNum);
|
||||
ASSERT_EQ(0u, message->linePos);
|
||||
|
||||
message = &info->messages[2];
|
||||
ASSERT_STREQ("Error Message", message->message);
|
||||
ASSERT_EQ(WGPUCompilationMessageType_Error, message->type);
|
||||
ASSERT_EQ(3u, message->lineNum);
|
||||
ASSERT_EQ(4u, message->linePos);
|
||||
};
|
||||
|
||||
shaderModule.GetCompilationInfo(callback, nullptr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user