From 71a8a9b9f06bec6a3a9309dca3a50e75fee316a7 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Wed, 11 Oct 2017 00:24:01 +0100 Subject: [PATCH] Add basic support for multisampled textures. --- .../main/com/google/gapid/views/TextureView.java | 14 ++++++++++---- gapis/api/gles/resources.go | 15 ++++++++++++--- gapis/api/service.proto | 2 ++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/gapic/src/main/com/google/gapid/views/TextureView.java b/gapic/src/main/com/google/gapid/views/TextureView.java index ba9400361c..c6cfc435c1 100644 --- a/gapic/src/main/com/google/gapid/views/TextureView.java +++ b/gapic/src/main/com/google/gapid/views/TextureView.java @@ -417,8 +417,12 @@ private static class AdditionalInfo { new AdditionalInfo("1D Array", Image.Info.getDefaultInstance(), 0, 0); public static final AdditionalInfo NULL_2D = new AdditionalInfo("2D", Image.Info.getDefaultInstance(), 0, 0); + public static final AdditionalInfo NULL_2D_MS = + new AdditionalInfo("2D Multisampled", Image.Info.getDefaultInstance(), 0, 0); public static final AdditionalInfo NULL_2D_ARRAY = new AdditionalInfo("2D Array", Image.Info.getDefaultInstance(), 0, 0); + public static final AdditionalInfo NULL_2D_MS_ARRAY = + new AdditionalInfo("2D Multisampled Array", Image.Info.getDefaultInstance(), 0, 0); public static final AdditionalInfo NULL_3D = new AdditionalInfo("3D", Image.Info.getDefaultInstance(), 0, 0); public static final AdditionalInfo NULL_CUBEMAP = @@ -455,13 +459,15 @@ public static AdditionalInfo from(Service.Value value) { } case TEXTURE_2D: { API.Texture2D t = texture.getTexture2D(); - return (t.getLevelsCount() == 0) ? NULL_2D : - new AdditionalInfo("2D", t.getLevels(0), 1, t.getLevelsCount()); + AdditionalInfo nullInfo = t.getMultisampled() ? NULL_2D_MS : NULL_2D; + return (t.getLevelsCount() == 0) ? nullInfo : + new AdditionalInfo(nullInfo.typeLabel, t.getLevels(0), 1, t.getLevelsCount()); } case TEXTURE_2D_ARRAY: { API.Texture2DArray t = texture.getTexture2DArray(); - return (t.getLayersCount() == 0 || t.getLayers(0).getLevelsCount() == 0) ? NULL_2D_ARRAY : - new AdditionalInfo("2D Array", t.getLayers(0).getLevels(0), t.getLayersCount(), + AdditionalInfo nullInfo = t.getMultisampled() ? NULL_2D_MS_ARRAY : NULL_2D_ARRAY; + return (t.getLayersCount() == 0 || t.getLayers(0).getLevelsCount() == 0) ? nullInfo : + new AdditionalInfo(nullInfo.typeLabel, t.getLayers(0).getLevels(0), t.getLayersCount(), t.getLayers(0).getLevelsCount()); } case TEXTURE_3D: { diff --git a/gapis/api/gles/resources.go b/gapis/api/gles/resources.go index 641862fdcb..d8995b2d68 100644 --- a/gapis/api/gles/resources.go +++ b/gapis/api/gles/resources.go @@ -59,7 +59,7 @@ func (t *Texture) ResourceType(ctx context.Context) api.ResourceType { func (t *Texture) ResourceData(ctx context.Context, s *api.GlobalState) (*api.ResourceData, error) { ctx = log.Enter(ctx, "Texture.ResourceData()") switch t.Kind { - case GLenum_GL_TEXTURE_1D, GLenum_GL_TEXTURE_2D: + case GLenum_GL_TEXTURE_1D, GLenum_GL_TEXTURE_2D, GLenum_GL_TEXTURE_2D_MULTISAMPLE: levels := make([]*image.Info, len(t.Levels)) for i, level := range t.Levels { img, err := level.Layers[0].ImageInfo(ctx, s) @@ -73,6 +73,8 @@ func (t *Texture) ResourceData(ctx context.Context, s *api.GlobalState) (*api.Re return api.NewResourceData(api.NewTexture(&api.Texture1D{Levels: levels})), nil case GLenum_GL_TEXTURE_2D: return api.NewResourceData(api.NewTexture(&api.Texture2D{Levels: levels})), nil + case GLenum_GL_TEXTURE_2D_MULTISAMPLE: + return api.NewResourceData(api.NewTexture(&api.Texture2D{Levels: levels, Multisampled: true})), nil default: panic(fmt.Errorf("Unhandled texture kind %v", t.Kind)) } @@ -104,7 +106,7 @@ func (t *Texture) ResourceData(ctx context.Context, s *api.GlobalState) (*api.Re } return api.NewResourceData(api.NewTexture(&api.Texture1DArray{Layers: layers})), nil - case GLenum_GL_TEXTURE_2D_ARRAY: + case GLenum_GL_TEXTURE_2D_ARRAY, GLenum_GL_TEXTURE_2D_MULTISAMPLE_ARRAY: numLayers := t.LayerCount() layers := make([]*api.Texture2D, numLayers) for layer := range layers { @@ -118,7 +120,14 @@ func (t *Texture) ResourceData(ctx context.Context, s *api.GlobalState) (*api.Re } layers[layer] = &api.Texture2D{Levels: levels} } - return api.NewResourceData(api.NewTexture(&api.Texture2DArray{Layers: layers})), nil + switch t.Kind { + case GLenum_GL_TEXTURE_2D_ARRAY: + return api.NewResourceData(api.NewTexture(&api.Texture2DArray{Layers: layers})), nil + case GLenum_GL_TEXTURE_2D_MULTISAMPLE_ARRAY: + return api.NewResourceData(api.NewTexture(&api.Texture2DArray{Layers: layers, Multisampled: true})), nil + default: + panic(fmt.Errorf("Unhandled texture kind %v", t.Kind)) + } case GLenum_GL_TEXTURE_3D: levels := make([]*image.Info, len(t.Levels)) diff --git a/gapis/api/service.proto b/gapis/api/service.proto index f8016f07e6..10e3ca1d58 100644 --- a/gapis/api/service.proto +++ b/gapis/api/service.proto @@ -193,11 +193,13 @@ message Texture1DArray { message Texture2D { // The mip-map levels. repeated image.Info levels = 1; + bool multisampled = 2; } // Texture2DArray represents a two-dimensional texture array resource. message Texture2DArray { repeated Texture2D layers = 1; + bool multisampled = 2; } // Texture3D represents a three-dimensional texture resource.